aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml11
m---------3rdparty0
-rw-r--r--apps/comments/l10n/fr.js2
-rw-r--r--apps/comments/l10n/fr.json2
-rw-r--r--apps/comments/l10n/ia.js34
-rw-r--r--apps/comments/l10n/ia.json34
-rw-r--r--apps/comments/l10n/lv.js17
-rw-r--r--apps/comments/l10n/lv.json17
-rw-r--r--apps/comments/l10n/nb_NO.js2
-rw-r--r--apps/comments/l10n/nb_NO.json2
-rw-r--r--apps/comments/l10n/pl.js8
-rw-r--r--apps/comments/l10n/pl.json8
-rw-r--r--apps/comments/l10n/zh_CN.js18
-rw-r--r--apps/comments/l10n/zh_CN.json18
-rw-r--r--apps/dav/appinfo/v1/webdav.php1
-rw-r--r--apps/dav/appinfo/v2/remote.php1
-rw-r--r--apps/dav/l10n/nb_NO.js38
-rw-r--r--apps/dav/l10n/nb_NO.json38
-rw-r--r--apps/dav/l10n/sq.js42
-rw-r--r--apps/dav/l10n/sq.json40
-rw-r--r--apps/dav/lib/CalDAV/CalendarObject.php8
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php8
-rw-r--r--apps/encryption/appinfo/info.xml3
-rw-r--r--apps/encryption/css/settings-personal.css5
-rw-r--r--apps/encryption/l10n/de_DE.js2
-rw-r--r--apps/encryption/l10n/de_DE.json2
-rw-r--r--apps/encryption/l10n/el.js5
-rw-r--r--apps/encryption/l10n/el.json5
-rw-r--r--apps/encryption/l10n/fr.js2
-rw-r--r--apps/encryption/l10n/fr.json2
-rw-r--r--apps/encryption/l10n/id.js1
-rw-r--r--apps/encryption/l10n/id.json1
-rw-r--r--apps/encryption/l10n/ru.js2
-rw-r--r--apps/encryption/l10n/ru.json2
-rw-r--r--apps/encryption/l10n/sv.js4
-rw-r--r--apps/encryption/l10n/sv.json4
-rw-r--r--apps/encryption/l10n/zh_CN.js30
-rw-r--r--apps/encryption/l10n/zh_CN.json30
-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/fr.js2
-rw-r--r--apps/federatedfilesharing/l10n/fr.json2
-rw-r--r--apps/federatedfilesharing/l10n/id.js7
-rw-r--r--apps/federatedfilesharing/l10n/id.json7
-rw-r--r--apps/federatedfilesharing/l10n/pl.js1
-rw-r--r--apps/federatedfilesharing/l10n/pl.json1
-rw-r--r--apps/federatedfilesharing/l10n/sq.js27
-rw-r--r--apps/federatedfilesharing/l10n/sq.json27
-rw-r--r--apps/federatedfilesharing/l10n/zh_CN.js28
-rw-r--r--apps/federatedfilesharing/l10n/zh_CN.json28
-rw-r--r--apps/federatedfilesharing/lib/AddressHandler.php73
-rw-r--r--apps/federatedfilesharing/lib/AppInfo/Application.php12
-rw-r--r--apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php3
-rw-r--r--apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php13
-rw-r--r--apps/federatedfilesharing/lib/Controller/RequestHandlerController.php13
-rw-r--r--apps/federatedfilesharing/lib/FederatedShareProvider.php26
-rw-r--r--apps/federatedfilesharing/lib/Notifier.php28
-rw-r--r--apps/federatedfilesharing/tests/AddressHandlerTest.php30
-rw-r--r--apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php9
-rw-r--r--apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php13
-rw-r--r--apps/federatedfilesharing/tests/FederatedShareProviderTest.php13
-rw-r--r--apps/federation/l10n/ca.js16
-rw-r--r--apps/federation/l10n/ca.json16
-rw-r--r--apps/federation/l10n/de.js8
-rw-r--r--apps/federation/l10n/de.json8
-rw-r--r--apps/federation/l10n/de_DE.js6
-rw-r--r--apps/federation/l10n/de_DE.json6
-rw-r--r--apps/federation/l10n/el.js12
-rw-r--r--apps/federation/l10n/el.json12
-rw-r--r--apps/federation/l10n/ia.js19
-rw-r--r--apps/federation/l10n/ia.json17
-rw-r--r--apps/federation/l10n/id.js10
-rw-r--r--apps/federation/l10n/id.json10
-rw-r--r--apps/federation/l10n/lv.js19
-rw-r--r--apps/federation/l10n/lv.json17
-rw-r--r--apps/federation/l10n/sl.js9
-rw-r--r--apps/federation/l10n/sl.json9
-rw-r--r--apps/files/appinfo/app.php14
-rw-r--r--apps/files/appinfo/info.xml7
-rw-r--r--apps/files/css/files.css41
-rw-r--r--apps/files/css/mobile.css5
-rw-r--r--apps/files/img/app.svg6
-rw-r--r--apps/files/js/filelist.js7
-rw-r--r--apps/files/js/newfilemenu.js10
-rw-r--r--apps/files/l10n/bg_BG.js2
-rw-r--r--apps/files/l10n/bg_BG.json2
-rw-r--r--apps/files/l10n/ca.js65
-rw-r--r--apps/files/l10n/ca.json65
-rw-r--r--apps/files/l10n/cs_CZ.js2
-rw-r--r--apps/files/l10n/cs_CZ.json2
-rw-r--r--apps/files/l10n/de.js6
-rw-r--r--apps/files/l10n/de.json6
-rw-r--r--apps/files/l10n/de_DE.js4
-rw-r--r--apps/files/l10n/de_DE.json4
-rw-r--r--apps/files/l10n/el.js54
-rw-r--r--apps/files/l10n/el.json54
-rw-r--r--apps/files/l10n/en_GB.js2
-rw-r--r--apps/files/l10n/en_GB.json2
-rw-r--r--apps/files/l10n/es.js2
-rw-r--r--apps/files/l10n/es.json2
-rw-r--r--apps/files/l10n/fi_FI.js2
-rw-r--r--apps/files/l10n/fi_FI.json2
-rw-r--r--apps/files/l10n/fr.js48
-rw-r--r--apps/files/l10n/fr.json48
-rw-r--r--apps/files/l10n/hu_HU.js3
-rw-r--r--apps/files/l10n/hu_HU.json3
-rw-r--r--apps/files/l10n/id.js2
-rw-r--r--apps/files/l10n/id.json2
-rw-r--r--apps/files/l10n/is.js2
-rw-r--r--apps/files/l10n/is.json2
-rw-r--r--apps/files/l10n/it.js2
-rw-r--r--apps/files/l10n/it.json2
-rw-r--r--apps/files/l10n/ja.js7
-rw-r--r--apps/files/l10n/ja.json7
-rw-r--r--apps/files/l10n/ko.js2
-rw-r--r--apps/files/l10n/ko.json2
-rw-r--r--apps/files/l10n/lv.js44
-rw-r--r--apps/files/l10n/lv.json44
-rw-r--r--apps/files/l10n/nb_NO.js5
-rw-r--r--apps/files/l10n/nb_NO.json5
-rw-r--r--apps/files/l10n/nl.js2
-rw-r--r--apps/files/l10n/nl.json2
-rw-r--r--apps/files/l10n/pl.js15
-rw-r--r--apps/files/l10n/pl.json15
-rw-r--r--apps/files/l10n/pt_BR.js4
-rw-r--r--apps/files/l10n/pt_BR.json4
-rw-r--r--apps/files/l10n/ru.js2
-rw-r--r--apps/files/l10n/ru.json2
-rw-r--r--apps/files/l10n/sk_SK.js12
-rw-r--r--apps/files/l10n/sk_SK.json12
-rw-r--r--apps/files/l10n/sl.js4
-rw-r--r--apps/files/l10n/sl.json4
-rw-r--r--apps/files/l10n/sq.js2
-rw-r--r--apps/files/l10n/sq.json2
-rw-r--r--apps/files/l10n/sv.js2
-rw-r--r--apps/files/l10n/sv.json2
-rw-r--r--apps/files/l10n/tr.js2
-rw-r--r--apps/files/l10n/tr.json2
-rw-r--r--apps/files/l10n/zh_CN.js48
-rw-r--r--apps/files/l10n/zh_CN.json48
-rw-r--r--apps/files/l10n/zh_TW.js2
-rw-r--r--apps/files/l10n/zh_TW.json2
-rw-r--r--apps/files/lib/Activity/Provider.php61
-rw-r--r--apps/files/tests/Activity/ProviderTest.php208
-rw-r--r--apps/files_external/3rdparty/composer.json2
-rw-r--r--apps/files_external/3rdparty/composer.lock15
-rw-r--r--apps/files_external/3rdparty/composer/ClassLoader.php36
-rw-r--r--apps/files_external/3rdparty/composer/autoload_classmap.php15
-rw-r--r--apps/files_external/3rdparty/composer/autoload_static.php15
-rw-r--r--apps/files_external/3rdparty/composer/installed.json60
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Change.php40
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php11
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php46
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php88
-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.xml3
-rw-r--r--apps/files_external/img/app-dark.svg1
-rw-r--r--apps/files_external/l10n/de_DE.js2
-rw-r--r--apps/files_external/l10n/de_DE.json2
-rw-r--r--apps/files_external/l10n/el.js1
-rw-r--r--apps/files_external/l10n/el.json1
-rw-r--r--apps/files_external/l10n/id.js7
-rw-r--r--apps/files_external/l10n/id.json7
-rw-r--r--apps/files_external/l10n/is.js1
-rw-r--r--apps/files_external/l10n/is.json1
-rw-r--r--apps/files_external/l10n/pl.js3
-rw-r--r--apps/files_external/l10n/pl.json3
-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/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/SFTP.php2
-rw-r--r--apps/files_external/lib/Lib/Storage/SMB.php51
-rw-r--r--apps/files_external/lib/Settings/Section.php21
-rw-r--r--apps/files_external/tests/Command/ListCommandTest.php15
-rw-r--r--apps/files_external/tests/Settings/SectionTest.php5
-rw-r--r--apps/files_external/tests/Storage/SmbTest.php47
-rw-r--r--apps/files_sharing/appinfo/info.xml4
-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/l10n/cs_CZ.js74
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json74
-rw-r--r--apps/files_sharing/l10n/de.js83
-rw-r--r--apps/files_sharing/l10n/de.json83
-rw-r--r--apps/files_sharing/l10n/de_DE.js79
-rw-r--r--apps/files_sharing/l10n/de_DE.json79
-rw-r--r--apps/files_sharing/l10n/es.js79
-rw-r--r--apps/files_sharing/l10n/es.json79
-rw-r--r--apps/files_sharing/l10n/fr.js78
-rw-r--r--apps/files_sharing/l10n/fr.json78
-rw-r--r--apps/files_sharing/l10n/hu_HU.js74
-rw-r--r--apps/files_sharing/l10n/hu_HU.json74
-rw-r--r--apps/files_sharing/l10n/it.js74
-rw-r--r--apps/files_sharing/l10n/it.json74
-rw-r--r--apps/files_sharing/l10n/nb_NO.js74
-rw-r--r--apps/files_sharing/l10n/nb_NO.json74
-rw-r--r--apps/files_sharing/l10n/nl.js74
-rw-r--r--apps/files_sharing/l10n/nl.json74
-rw-r--r--apps/files_sharing/l10n/pl.js78
-rw-r--r--apps/files_sharing/l10n/pl.json78
-rw-r--r--apps/files_sharing/l10n/pt_BR.js77
-rw-r--r--apps/files_sharing/l10n/pt_BR.json77
-rw-r--r--apps/files_sharing/l10n/ru.js74
-rw-r--r--apps/files_sharing/l10n/ru.json74
-rw-r--r--apps/files_sharing/l10n/sq.js74
-rw-r--r--apps/files_sharing/l10n/sq.json74
-rw-r--r--apps/files_sharing/l10n/sv.js74
-rw-r--r--apps/files_sharing/l10n/sv.json74
-rw-r--r--apps/files_sharing/l10n/zh_CN.js92
-rw-r--r--apps/files_sharing/l10n/zh_CN.json92
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Base.php184
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Downloads.php108
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Groups.php188
-rw-r--r--apps/files_sharing/lib/Activity/Providers/PublicLinks.php206
-rw-r--r--apps/files_sharing/lib/Activity/Providers/RemoteShares.php139
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Users.php220
-rw-r--r--apps/files_sharing/lib/AppInfo/Application.php7
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php1
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php1
-rw-r--r--apps/files_sharing/lib/Controller/ShareesAPIController.php52
-rw-r--r--apps/files_sharing/lib/External/Cache.php18
-rw-r--r--apps/files_sharing/lib/External/MountProvider.php11
-rw-r--r--apps/files_sharing/lib/External/Storage.php31
-rw-r--r--apps/files_sharing/templates/public.php59
-rw-r--r--apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php19
-rw-r--r--apps/files_sharing/tests/External/CacheTest.php9
-rw-r--r--apps/files_sharing/tests/External/ManagerTest.php3
-rw-r--r--apps/files_sharing/tests/ExternalStorageTest.php2
-rw-r--r--apps/files_trashbin/lib/Trashbin.php2
-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/el.js2
-rw-r--r--apps/files_versions/l10n/el.json2
-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/pl.js2
-rw-r--r--apps/files_versions/l10n/pl.json2
-rw-r--r--apps/files_versions/l10n/sl.js2
-rw-r--r--apps/files_versions/l10n/sl.json2
-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/sharebymail/l10n/.gitkeep0
-rw-r--r--apps/systemtags/l10n/de.js2
-rw-r--r--apps/systemtags/l10n/de.json2
-rw-r--r--apps/systemtags/l10n/de_DE.js2
-rw-r--r--apps/systemtags/l10n/de_DE.json2
-rw-r--r--apps/systemtags/l10n/sq.js44
-rw-r--r--apps/systemtags/l10n/sq.json44
-rw-r--r--apps/theming/img/app-dark.svg1
-rw-r--r--apps/theming/lib/Controller/ThemingController.php3
-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.php7
-rw-r--r--apps/theming/tests/Settings/SectionTest.php18
-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.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/nb_NO.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/pl.js12
-rw-r--r--apps/twofactor_backupcodes/l10n/pl.json12
-rw-r--r--apps/updatenotification/l10n/de_DE.js4
-rw-r--r--apps/updatenotification/l10n/de_DE.json4
-rw-r--r--apps/updatenotification/l10n/ja.js4
-rw-r--r--apps/updatenotification/l10n/ja.json4
-rw-r--r--apps/updatenotification/l10n/lv.js24
-rw-r--r--apps/updatenotification/l10n/lv.json22
-rw-r--r--apps/updatenotification/l10n/sl.js10
-rw-r--r--apps/updatenotification/l10n/sl.json10
-rw-r--r--apps/updatenotification/l10n/zh_CN.js4
-rw-r--r--apps/updatenotification/l10n/zh_CN.json4
-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/l10n/fr.js12
-rw-r--r--apps/user_ldap/l10n/fr.json12
-rw-r--r--apps/user_ldap/l10n/id.js6
-rw-r--r--apps/user_ldap/l10n/id.json6
-rw-r--r--apps/user_ldap/l10n/pl.js26
-rw-r--r--apps/user_ldap/l10n/pl.json26
-rw-r--r--apps/user_ldap/l10n/sq.js2
-rw-r--r--apps/user_ldap/l10n/sq.json2
-rw-r--r--apps/user_ldap/l10n/sv.js1
-rw-r--r--apps/user_ldap/l10n/sv.json1
-rw-r--r--apps/user_ldap/lib/Access.php3
-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/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/l10n/lv.js71
-rw-r--r--apps/workflowengine/l10n/lv.json69
-rw-r--r--apps/workflowengine/l10n/pl.js20
-rw-r--r--apps/workflowengine/l10n/pl.json20
-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
-rw-r--r--build/integration/config/behat.yml10
-rw-r--r--build/integration/features/bootstrap/LDAPContext.php85
-rw-r--r--build/integration/ldap_features/ldap-ocs.feature70
-rw-r--r--config/config.sample.php7
-rw-r--r--core/Application.php21
-rw-r--r--core/Command/User/Setting.php17
-rw-r--r--core/Controller/LoginController.php3
-rw-r--r--core/Controller/OCSController.php14
-rw-r--r--core/css/apps.scss66
-rw-r--r--core/css/guest.css632
-rw-r--r--core/css/header.scss103
-rw-r--r--core/css/icons.scss13
-rw-r--r--core/css/inputs.scss882
-rw-r--r--core/css/installation.css802
-rw-r--r--core/css/jquery-ui-fixes.css (renamed from core/css/jquery-ui-fixes.scss)108
-rw-r--r--core/css/multiselect.scss13
-rw-r--r--core/css/share.scss21
-rw-r--r--core/css/styles.scss102
-rw-r--r--core/css/systemtags.scss7
-rw-r--r--core/css/tooltip.scss8
-rw-r--r--core/css/update.css449
-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/sharedialoglinkshareview.js39
-rw-r--r--core/js/sharedialogshareelistview.js8
-rw-r--r--core/js/shareitemmodel.js16
-rw-r--r--core/l10n/bg_BG.js4
-rw-r--r--core/l10n/bg_BG.json4
-rw-r--r--core/l10n/ca.js288
-rw-r--r--core/l10n/ca.json286
-rw-r--r--core/l10n/cs_CZ.js5
-rw-r--r--core/l10n/cs_CZ.json5
-rw-r--r--core/l10n/da.js4
-rw-r--r--core/l10n/da.json4
-rw-r--r--core/l10n/de.js4
-rw-r--r--core/l10n/de.json4
-rw-r--r--core/l10n/de_DE.js4
-rw-r--r--core/l10n/de_DE.json4
-rw-r--r--core/l10n/el.js12
-rw-r--r--core/l10n/el.json12
-rw-r--r--core/l10n/en_GB.js4
-rw-r--r--core/l10n/en_GB.json4
-rw-r--r--core/l10n/es.js7
-rw-r--r--core/l10n/es.json7
-rw-r--r--core/l10n/fi_FI.js4
-rw-r--r--core/l10n/fi_FI.json4
-rw-r--r--core/l10n/fr.js4
-rw-r--r--core/l10n/fr.json4
-rw-r--r--core/l10n/he.js4
-rw-r--r--core/l10n/he.json4
-rw-r--r--core/l10n/hu_HU.js4
-rw-r--r--core/l10n/hu_HU.json4
-rw-r--r--core/l10n/id.js32
-rw-r--r--core/l10n/id.json32
-rw-r--r--core/l10n/is.js4
-rw-r--r--core/l10n/is.json4
-rw-r--r--core/l10n/it.js5
-rw-r--r--core/l10n/it.json5
-rw-r--r--core/l10n/ja.js5
-rw-r--r--core/l10n/ja.json5
-rw-r--r--core/l10n/ko.js4
-rw-r--r--core/l10n/ko.json4
-rw-r--r--core/l10n/lv.js304
-rw-r--r--core/l10n/lv.json302
-rw-r--r--core/l10n/nb_NO.js6
-rw-r--r--core/l10n/nb_NO.json6
-rw-r--r--core/l10n/nl.js4
-rw-r--r--core/l10n/nl.json4
-rw-r--r--core/l10n/pl.js11
-rw-r--r--core/l10n/pl.json11
-rw-r--r--core/l10n/pt_BR.js6
-rw-r--r--core/l10n/pt_BR.json6
-rw-r--r--core/l10n/pt_PT.js4
-rw-r--r--core/l10n/pt_PT.json4
-rw-r--r--core/l10n/ru.js4
-rw-r--r--core/l10n/ru.json4
-rw-r--r--core/l10n/sk_SK.js4
-rw-r--r--core/l10n/sk_SK.json4
-rw-r--r--core/l10n/sl.js6
-rw-r--r--core/l10n/sl.json6
-rw-r--r--core/l10n/sq.js5
-rw-r--r--core/l10n/sq.json5
-rw-r--r--core/l10n/sv.js5
-rw-r--r--core/l10n/sv.json5
-rw-r--r--core/l10n/th_TH.js4
-rw-r--r--core/l10n/th_TH.json4
-rw-r--r--core/l10n/tr.js4
-rw-r--r--core/l10n/tr.json4
-rw-r--r--core/l10n/uk.js4
-rw-r--r--core/l10n/uk.json4
-rw-r--r--core/l10n/zh_CN.js16
-rw-r--r--core/l10n/zh_CN.json16
-rw-r--r--core/l10n/zh_TW.js12
-rw-r--r--core/l10n/zh_TW.json12
-rw-r--r--core/routes.php1
-rw-r--r--core/search/js/search.js4
-rw-r--r--core/templates/installation.php6
-rw-r--r--core/templates/layout.user.php112
-rw-r--r--core/templates/login.php2
-rw-r--r--issue_template.md3
-rw-r--r--l10n/.tx/config6
-rw-r--r--lib/base.php9
-rw-r--r--lib/composer/composer/autoload_classmap.php16
-rw-r--r--lib/composer/composer/autoload_static.php16
-rw-r--r--lib/l10n/ca.js177
-rw-r--r--lib/l10n/ca.json175
-rw-r--r--lib/l10n/el.js199
-rw-r--r--lib/l10n/el.json197
-rw-r--r--lib/l10n/fr.js2
-rw-r--r--lib/l10n/fr.json2
-rw-r--r--lib/l10n/pl.js10
-rw-r--r--lib/l10n/pl.json10
-rw-r--r--lib/l10n/sk_SK.js13
-rw-r--r--lib/l10n/sk_SK.json13
-rw-r--r--lib/l10n/zh_CN.js233
-rw-r--r--lib/l10n/zh_CN.json231
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php4
-rw-r--r--lib/private/AppFramework/Http/Request.php2
-rw-r--r--lib/private/Authentication/LoginCredentials/Credentials.php72
-rw-r--r--lib/private/Authentication/LoginCredentials/Store.php120
-rw-r--r--lib/private/Console/TimestampFormatter.php4
-rw-r--r--lib/private/Federation/CloudId.php76
-rw-r--r--lib/private/Federation/CloudIdManager.php109
-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/Storage/Common.php10
-rw-r--r--lib/private/Files/Storage/DAV.php4
-rw-r--r--lib/private/Files/Storage/Local.php13
-rw-r--r--lib/private/Files/Type/Detection.php4
-rw-r--r--lib/private/Files/View.php2
-rw-r--r--lib/private/Lockdown/Filesystem/NullStorage.php3
-rw-r--r--lib/private/Log.php3
-rw-r--r--lib/private/Log/File.php4
-rw-r--r--lib/private/Mail/Mailer.php2
-rw-r--r--lib/private/NavigationManager.php107
-rw-r--r--lib/private/Repair.php2
-rw-r--r--lib/private/Repair/AvatarPermissions.php116
-rw-r--r--lib/private/Repair/MoveUpdaterStepFile.php2
-rw-r--r--lib/private/Server.php42
-rw-r--r--lib/private/Settings/Manager.php19
-rw-r--r--lib/private/Settings/Section.php21
-rw-r--r--lib/private/Setup.php8
-rw-r--r--lib/private/Setup/Sqlite.php2
-rw-r--r--lib/private/Share/Helper.php42
-rw-r--r--lib/private/Share20/ProviderFactory.php6
-rw-r--r--lib/private/SubAdmin.php2
-rw-r--r--lib/private/Template/CSSResourceLocator.php28
-rwxr-xr-xlib/private/Template/ResourceLocator.php4
-rw-r--r--lib/private/Template/SCSSCacher.php7
-rw-r--r--lib/private/TemplateLayout.php36
-rw-r--r--lib/private/Updater.php36
-rw-r--r--lib/private/User/User.php5
-rw-r--r--lib/private/legacy/files.php1
-rw-r--r--lib/private/legacy/helper.php34
-rw-r--r--lib/private/legacy/util.php21
-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/Federation/ICloudId.php60
-rw-r--r--lib/public/Federation/ICloudIdManager.php57
-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/IServerContainer.php6
-rw-r--r--lib/public/Settings/IIconSection.php38
-rw-r--r--lib/public/Settings/ISection.php1
-rw-r--r--ocs/v1.php1
-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.css51
-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/users/groups.js4
-rw-r--r--settings/js/users/users.js75
-rw-r--r--settings/l10n/ar.js6
-rw-r--r--settings/l10n/ar.json6
-rw-r--r--settings/l10n/ast.js6
-rw-r--r--settings/l10n/ast.json6
-rw-r--r--settings/l10n/az.js6
-rw-r--r--settings/l10n/az.json6
-rw-r--r--settings/l10n/bg_BG.js7
-rw-r--r--settings/l10n/bg_BG.json7
-rw-r--r--settings/l10n/bn_BD.js6
-rw-r--r--settings/l10n/bn_BD.json6
-rw-r--r--settings/l10n/bs.js6
-rw-r--r--settings/l10n/bs.json6
-rw-r--r--settings/l10n/ca.js70
-rw-r--r--settings/l10n/ca.json70
-rw-r--r--settings/l10n/cs_CZ.js9
-rw-r--r--settings/l10n/cs_CZ.json9
-rw-r--r--settings/l10n/da.js6
-rw-r--r--settings/l10n/da.json6
-rw-r--r--settings/l10n/de.js13
-rw-r--r--settings/l10n/de.json13
-rw-r--r--settings/l10n/de_DE.js15
-rw-r--r--settings/l10n/de_DE.json15
-rw-r--r--settings/l10n/el.js27
-rw-r--r--settings/l10n/el.json27
-rw-r--r--settings/l10n/en_GB.js6
-rw-r--r--settings/l10n/en_GB.json6
-rw-r--r--settings/l10n/eo.js6
-rw-r--r--settings/l10n/eo.json6
-rw-r--r--settings/l10n/es.js9
-rw-r--r--settings/l10n/es.json9
-rw-r--r--settings/l10n/es_AR.js6
-rw-r--r--settings/l10n/es_AR.json6
-rw-r--r--settings/l10n/es_MX.js6
-rw-r--r--settings/l10n/es_MX.json6
-rw-r--r--settings/l10n/et_EE.js6
-rw-r--r--settings/l10n/et_EE.json6
-rw-r--r--settings/l10n/eu.js6
-rw-r--r--settings/l10n/eu.json6
-rw-r--r--settings/l10n/fa.js6
-rw-r--r--settings/l10n/fa.json6
-rw-r--r--settings/l10n/fi_FI.js6
-rw-r--r--settings/l10n/fi_FI.json6
-rw-r--r--settings/l10n/fr.js23
-rw-r--r--settings/l10n/fr.json23
-rw-r--r--settings/l10n/gl.js6
-rw-r--r--settings/l10n/gl.json6
-rw-r--r--settings/l10n/he.js6
-rw-r--r--settings/l10n/he.json6
-rw-r--r--settings/l10n/hr.js6
-rw-r--r--settings/l10n/hr.json6
-rw-r--r--settings/l10n/hu_HU.js6
-rw-r--r--settings/l10n/hu_HU.json6
-rw-r--r--settings/l10n/ia.js133
-rw-r--r--settings/l10n/ia.json131
-rw-r--r--settings/l10n/id.js6
-rw-r--r--settings/l10n/id.json6
-rw-r--r--settings/l10n/is.js6
-rw-r--r--settings/l10n/is.json6
-rw-r--r--settings/l10n/it.js9
-rw-r--r--settings/l10n/it.json9
-rw-r--r--settings/l10n/ja.js8
-rw-r--r--settings/l10n/ja.json8
-rw-r--r--settings/l10n/ka_GE.js6
-rw-r--r--settings/l10n/ka_GE.json6
-rw-r--r--settings/l10n/km.js6
-rw-r--r--settings/l10n/km.json6
-rw-r--r--settings/l10n/kn.js6
-rw-r--r--settings/l10n/kn.json6
-rw-r--r--settings/l10n/ko.js6
-rw-r--r--settings/l10n/ko.json6
-rw-r--r--settings/l10n/lb.js4
-rw-r--r--settings/l10n/lb.json4
-rw-r--r--settings/l10n/lt_LT.js6
-rw-r--r--settings/l10n/lt_LT.json6
-rw-r--r--settings/l10n/lv.js187
-rw-r--r--settings/l10n/lv.json187
-rw-r--r--settings/l10n/mk.js6
-rw-r--r--settings/l10n/mk.json6
-rw-r--r--settings/l10n/nb_NO.js6
-rw-r--r--settings/l10n/nb_NO.json6
-rw-r--r--settings/l10n/nl.js9
-rw-r--r--settings/l10n/nl.json9
-rw-r--r--settings/l10n/nn_NO.js6
-rw-r--r--settings/l10n/nn_NO.json6
-rw-r--r--settings/l10n/pl.js8
-rw-r--r--settings/l10n/pl.json8
-rw-r--r--settings/l10n/pt_BR.js9
-rw-r--r--settings/l10n/pt_BR.json9
-rw-r--r--settings/l10n/pt_PT.js6
-rw-r--r--settings/l10n/pt_PT.json6
-rw-r--r--settings/l10n/ro.js6
-rw-r--r--settings/l10n/ro.json6
-rw-r--r--settings/l10n/ru.js11
-rw-r--r--settings/l10n/ru.json11
-rw-r--r--settings/l10n/si_LK.js4
-rw-r--r--settings/l10n/si_LK.json4
-rw-r--r--settings/l10n/sk_SK.js7
-rw-r--r--settings/l10n/sk_SK.json7
-rw-r--r--settings/l10n/sl.js6
-rw-r--r--settings/l10n/sl.json6
-rw-r--r--settings/l10n/sq.js6
-rw-r--r--settings/l10n/sq.json6
-rw-r--r--settings/l10n/sr.js6
-rw-r--r--settings/l10n/sr.json6
-rw-r--r--settings/l10n/sv.js10
-rw-r--r--settings/l10n/sv.json10
-rw-r--r--settings/l10n/ta_LK.js4
-rw-r--r--settings/l10n/ta_LK.json4
-rw-r--r--settings/l10n/th_TH.js6
-rw-r--r--settings/l10n/th_TH.json6
-rw-r--r--settings/l10n/tr.js6
-rw-r--r--settings/l10n/tr.json6
-rw-r--r--settings/l10n/ug.js6
-rw-r--r--settings/l10n/ug.json6
-rw-r--r--settings/l10n/uk.js6
-rw-r--r--settings/l10n/uk.json6
-rw-r--r--settings/l10n/vi.js6
-rw-r--r--settings/l10n/vi.json6
-rw-r--r--settings/l10n/zh_CN.js307
-rw-r--r--settings/l10n/zh_CN.json307
-rw-r--r--settings/l10n/zh_TW.js6
-rw-r--r--settings/l10n/zh_TW.json6
-rw-r--r--settings/templates/admin/frame.php20
-rw-r--r--settings/templates/apps.php2
-rw-r--r--settings/templates/personal.php20
-rw-r--r--tests/Core/Controller/LoginControllerTest.php7
-rw-r--r--tests/Core/Controller/OCSControllerTest.php18
-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/lib/AppFramework/Http/RequestTest.php2
-rw-r--r--tests/lib/Authentication/LoginCredentials/CredentialsTest.php66
-rw-r--r--tests/lib/Authentication/LoginCredentials/StoreTest.php182
-rw-r--r--tests/lib/Federation/CloudIdManagerTest.php99
-rw-r--r--tests/lib/Federation/CloudIdTest.php46
-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/Type/DetectionTest.php4
-rw-r--r--tests/lib/Lockdown/Filesystem/NullStorageTest.php3
-rw-r--r--tests/lib/Mail/MailerTest.php4
-rw-r--r--tests/lib/NavigationManagerTest.php66
-rw-r--r--tests/lib/Repair/AvatarPermissionsTest.php189
-rw-r--r--tests/lib/Settings/ManagerTest.php74
-rw-r--r--tests/lib/SetupTest.php16
-rw-r--r--tests/lib/Template/ResourceLocatorTest.php2
-rw-r--r--tests/lib/UpdaterTest.php107
-rw-r--r--version.php10
664 files changed, 14000 insertions, 7380 deletions
diff --git a/.drone.yml b/.drone.yml
index 1e35b2a2fe8..5e4f18af9f6 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -413,6 +413,16 @@ pipeline:
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-7
commands:
@@ -480,6 +490,7 @@ matrix:
- 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
diff --git a/3rdparty b/3rdparty
-Subproject ae67e91bac6e959fb9666b997c02fb45e63aadf
+Subproject 489bcf4f81e462f4d74f0b76f58caeabd58e75d
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/ia.js b/apps/comments/l10n/ia.js
index ff148a13b8d..40b43ffccbb 100644
--- a/apps/comments/l10n/ia.js
+++ b/apps/comments/l10n/ia.js
@@ -1,7 +1,39 @@
OC.L10N.register(
"comments",
{
+ "Comments" : "Commentarios",
+ "Unknown user" : "Usator incognite",
+ "New comment …" : "Nove commentario ...",
+ "Delete comment" : "Deler commentario",
+ "Post" : "Publicar",
"Cancel" : "Cancellar",
- "Save" : "Salveguardar"
+ "Edit comment" : "Modificar commentario",
+ "[Deleted user]" : "[Usator delite]",
+ "No comments yet, start the conversation!" : "Il ha nulle commentarios ancora, initia le conversation!",
+ "More comments …" : "Plus commentarios ...",
+ "Save" : "Salveguardar",
+ "Allowed characters {count} of {max}" : "{count} characteres permittite de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Un error occurreva durante le recuperation del commentario identificate per {id}",
+ "Error occurred while updating comment with id {id}" : "Un error occurreva durante le actualisation del commentario identificate per {id}",
+ "Error occurred while posting comment" : "Un error occurreva durante le publication del commentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n commentario non legite","%n commentarios non legite"],
+ "Comment" : "Commentario",
+ "You commented" : "Tu commentava",
+ "%1$s commented" : "%1$s commentava",
+ "{author} commented" : "{author} commentava",
+ "You commented on %1$s" : "Tu commentava in %1$s",
+ "You commented on {file}" : "Tu commentava in {file}",
+ "%1$s commented on %2$s" : "%1$s commentava in %2$s",
+ "{author} commented on {file}" : "{author} commentava in {file}",
+ "<strong>Comments</strong> for files" : "<strong>Commentarios</strong> pro files",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un (ora) delite usator mentionava tu in un commentario in “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un (ora) delite usator mentionava tu in un commentario in “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s mentionava tu in un commentario in “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} mentionava tu in un commentario in “{file}”",
+ "Type in a new comment..." : "Scribe in un nove commentario...",
+ "No other comments available" : "Nulle altere commentarios disponibile",
+ "More comments..." : "Plus commentarios...",
+ "{count} unread comments" : "{count} commentarios non legite",
+ "You commented on %2$s" : "Tu commentava in %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/ia.json b/apps/comments/l10n/ia.json
index a71e73149f6..0555fbfaf98 100644
--- a/apps/comments/l10n/ia.json
+++ b/apps/comments/l10n/ia.json
@@ -1,5 +1,37 @@
{ "translations": {
+ "Comments" : "Commentarios",
+ "Unknown user" : "Usator incognite",
+ "New comment …" : "Nove commentario ...",
+ "Delete comment" : "Deler commentario",
+ "Post" : "Publicar",
"Cancel" : "Cancellar",
- "Save" : "Salveguardar"
+ "Edit comment" : "Modificar commentario",
+ "[Deleted user]" : "[Usator delite]",
+ "No comments yet, start the conversation!" : "Il ha nulle commentarios ancora, initia le conversation!",
+ "More comments …" : "Plus commentarios ...",
+ "Save" : "Salveguardar",
+ "Allowed characters {count} of {max}" : "{count} characteres permittite de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Un error occurreva durante le recuperation del commentario identificate per {id}",
+ "Error occurred while updating comment with id {id}" : "Un error occurreva durante le actualisation del commentario identificate per {id}",
+ "Error occurred while posting comment" : "Un error occurreva durante le publication del commentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n commentario non legite","%n commentarios non legite"],
+ "Comment" : "Commentario",
+ "You commented" : "Tu commentava",
+ "%1$s commented" : "%1$s commentava",
+ "{author} commented" : "{author} commentava",
+ "You commented on %1$s" : "Tu commentava in %1$s",
+ "You commented on {file}" : "Tu commentava in {file}",
+ "%1$s commented on %2$s" : "%1$s commentava in %2$s",
+ "{author} commented on {file}" : "{author} commentava in {file}",
+ "<strong>Comments</strong> for files" : "<strong>Commentarios</strong> pro files",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un (ora) delite usator mentionava tu in un commentario in “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un (ora) delite usator mentionava tu in un commentario in “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s mentionava tu in un commentario in “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} mentionava tu in un commentario in “{file}”",
+ "Type in a new comment..." : "Scribe in un nove commentario...",
+ "No other comments available" : "Nulle altere commentarios disponibile",
+ "More comments..." : "Plus commentarios...",
+ "{count} unread comments" : "{count} commentarios non legite",
+ "You commented on %2$s" : "Tu commentava in %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
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 a73cdd768f4..d6ac9a2b7b6 100644
--- a/apps/comments/l10n/nb_NO.js
+++ b/apps/comments/l10n/nb_NO.js
@@ -26,6 +26,8 @@ OC.L10N.register(
"%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...",
diff --git a/apps/comments/l10n/nb_NO.json b/apps/comments/l10n/nb_NO.json
index 84f83315f25..293eca39e84 100644
--- a/apps/comments/l10n/nb_NO.json
+++ b/apps/comments/l10n/nb_NO.json
@@ -24,6 +24,8 @@
"%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...",
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/zh_CN.js b/apps/comments/l10n/zh_CN.js
index a2eb29f322f..9a459c92b6e 100644
--- a/apps/comments/l10n/zh_CN.js
+++ b/apps/comments/l10n/zh_CN.js
@@ -8,7 +8,7 @@ OC.L10N.register(
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
- "[Deleted user]" : "[Deleted user]",
+ "[Deleted user]" : "[已删除用户]",
"No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
"More comments …" : "更多评论 ...",
"Save" : "保存",
@@ -22,18 +22,18 @@ OC.L10N.register(
"%1$s commented" : "%1$s 已评论",
"{author} commented" : "{author} 评论了",
"You commented on %1$s" : "您在 %1$s 的评论",
- "You commented on {file}" : "您对 {file} 的注释",
+ "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}”",
+ "{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"
+ "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 cbc878d898c..be867c5b856 100644
--- a/apps/comments/l10n/zh_CN.json
+++ b/apps/comments/l10n/zh_CN.json
@@ -6,7 +6,7 @@
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
- "[Deleted user]" : "[Deleted user]",
+ "[Deleted user]" : "[已删除用户]",
"No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
"More comments …" : "更多评论 ...",
"Save" : "保存",
@@ -20,18 +20,18 @@
"%1$s commented" : "%1$s 已评论",
"{author} commented" : "{author} 评论了",
"You commented on %1$s" : "您在 %1$s 的评论",
- "You commented on {file}" : "您对 {file} 的注释",
+ "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}”",
+ "{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"
+ "You commented on %2$s" : "您评论了 %2$s"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
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/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/sq.js b/apps/dav/l10n/sq.js
new file mode 100644
index 00000000000..6a683d01712
--- /dev/null
+++ b/apps/dav/l10n/sq.js
@@ -0,0 +1,42 @@
+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}",
+ "You deleted todo {todo} from list {calendar}" : "Ju fshit 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",
+ "A calendar <strong>todo</strong> was modified" : "Një kalendar <strong>todo<strong> 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..f5a98e8845c
--- /dev/null
+++ b/apps/dav/l10n/sq.json
@@ -0,0 +1,40 @@
+{ "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}",
+ "You deleted todo {todo} from list {calendar}" : "Ju fshit 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",
+ "A calendar <strong>todo</strong> was modified" : "Një kalendar <strong>todo<strong> 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/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/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/encryption/appinfo/info.xml b/apps/encryption/appinfo/info.xml
index 1e63ca5c471..307fef4ad8a 100644
--- a/apps/encryption/appinfo/info.xml
+++ b/apps/encryption/appinfo/info.xml
@@ -18,8 +18,7 @@
<user>user-encryption</user>
<admin>admin-encryption</admin>
</documentation>
- <rememberlogin>false</rememberlogin>
- <version>1.5.0</version>
+ <version>1.6.0</version>
<types>
<filesystem/>
</types>
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/de_DE.js b/apps/encryption/l10n/de_DE.js
index ce716d6009c..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",
diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json
index 99f1b1d08eb..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",
diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js
index aa8dab6ec5b..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:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.",
diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json
index 348ee2e1ce6..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:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.",
diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js
index 77a433ef58d..14b693baa28 100644
--- a/apps/encryption/l10n/fr.js
+++ b/apps/encryption/l10n/fr.js
@@ -12,7 +12,7 @@ OC.L10N.register(
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json
index 2129bd43828..74c0b7492a8 100644
--- a/apps/encryption/l10n/fr.json
+++ b/apps/encryption/l10n/fr.json
@@ -10,7 +10,7 @@
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js
index c48146d1df8..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",
diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json
index 536f4616ddc..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",
diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js
index a20e361bc61..c00007309fb 100644
--- a/apps/encryption/l10n/ru.js
+++ b/apps/encryption/l10n/ru.js
@@ -39,7 +39,7 @@ OC.L10N.register(
"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." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.",
+ "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:" : "Смена пароля ключа восстановления:",
diff --git a/apps/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json
index 1c1c3abb0de..d9703f482f3 100644
--- a/apps/encryption/l10n/ru.json
+++ b/apps/encryption/l10n/ru.json
@@ -37,7 +37,7 @@
"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." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.",
+ "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:" : "Смена пароля ключа восстановления:",
diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js
index 0b8530bf006..2a5893af8bf 100644
--- a/apps/encryption/l10n/sv.js
+++ b/apps/encryption/l10n/sv.js
@@ -34,7 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
"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" : "Standard krypteringsfunktion",
+ "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",
@@ -47,7 +47,7 @@ OC.L10N.register(
"New recovery key password" : "Nytt lösenord",
"Repeat new recovery key password" : "Repetera lösenord",
"Change Password" : "Byt lösenord",
- "Basic encryption module" : "Krypteringsmodul",
+ "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:",
diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json
index 976336ae068..f0e64f2c807 100644
--- a/apps/encryption/l10n/sv.json
+++ b/apps/encryption/l10n/sv.json
@@ -32,7 +32,7 @@
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
"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" : "Standard krypteringsfunktion",
+ "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",
@@ -45,7 +45,7 @@
"New recovery key password" : "Nytt lösenord",
"Repeat new recovery key password" : "Repetera lösenord",
"Change Password" : "Byt lösenord",
- "Basic encryption module" : "Krypteringsmodul",
+ "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:",
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/federatedfilesharing/l10n/de.js b/apps/federatedfilesharing/l10n/de.js
index 1cf098f5b7e..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",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
+ "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 060aa326652..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",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
+ "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 ff34a3cddcf..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",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
+ "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 9531d53b801..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",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
+ "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/fr.js b/apps/federatedfilesharing/l10n/fr.js
index 4a1d7767965..092b87fb9e8 100644
--- a/apps/federatedfilesharing/l10n/fr.js
+++ b/apps/federatedfilesharing/l10n/fr.js
@@ -29,7 +29,7 @@ OC.L10N.register(
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json
index 670a3bd043c..f90620b940d 100644
--- a/apps/federatedfilesharing/l10n/fr.json
+++ b/apps/federatedfilesharing/l10n/fr.json
@@ -27,7 +27,7 @@
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
diff --git a/apps/federatedfilesharing/l10n/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/pl.js b/apps/federatedfilesharing/l10n/pl.js
index 8a51bfc13d2..282c7bbf129 100644
--- a/apps/federatedfilesharing/l10n/pl.js
+++ b/apps/federatedfilesharing/l10n/pl.js
@@ -41,6 +41,7 @@ OC.L10N.register(
"Open documentation" : "Otwórz dokumentację",
"Allow users on this server to send shares to other servers" : "Zezwalaj użytkownikom na tym serwerze wysłać udostępnienia do innych serwerów",
"Allow users on this server to receive shares from other servers" : "Zezwalaj użytkownikom na tym serwerze do otrzymania udostępnień z innych serwerów",
+ "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej",
"Federated Cloud" : "Stowarzyszona Chmura",
"Your Federated Cloud ID:" : "Twoje ID Stowarzyszonej Chmury:",
"Share it:" : "Udostępnij to:",
diff --git a/apps/federatedfilesharing/l10n/pl.json b/apps/federatedfilesharing/l10n/pl.json
index f84f2d02253..18c54c89d42 100644
--- a/apps/federatedfilesharing/l10n/pl.json
+++ b/apps/federatedfilesharing/l10n/pl.json
@@ -39,6 +39,7 @@
"Open documentation" : "Otwórz dokumentację",
"Allow users on this server to send shares to other servers" : "Zezwalaj użytkownikom na tym serwerze wysłać udostępnienia do innych serwerów",
"Allow users on this server to receive shares from other servers" : "Zezwalaj użytkownikom na tym serwerze do otrzymania udostępnień z innych serwerów",
+ "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej",
"Federated Cloud" : "Stowarzyszona Chmura",
"Your Federated Cloud ID:" : "Twoje ID Stowarzyszonej Chmury:",
"Share it:" : "Udostępnij to:",
diff --git a/apps/federatedfilesharing/l10n/sq.js b/apps/federatedfilesharing/l10n/sq.js
index ae500204ce4..a12e4470755 100644
--- a/apps/federatedfilesharing/l10n/sq.js
+++ b/apps/federatedfilesharing/l10n/sq.js
@@ -2,13 +2,27 @@ 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",
+ "Invalid or untrusted SSL certificate" : "Çertifikatë SSL e pavlefshme ose e dyshimtë",
+ "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 +36,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..b255001bd7f 100644
--- a/apps/federatedfilesharing/l10n/sq.json
+++ b/apps/federatedfilesharing/l10n/sq.json
@@ -1,12 +1,26 @@
{ "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",
+ "Invalid or untrusted SSL certificate" : "Çertifikatë SSL e pavlefshme ose e dyshimtë",
+ "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 +34,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/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/AddressHandler.php b/apps/federatedfilesharing/lib/AddressHandler.php
index 5fc41c2c804..6c59df06863 100644
--- a/apps/federatedfilesharing/lib/AddressHandler.php
+++ b/apps/federatedfilesharing/lib/AddressHandler.php
@@ -22,6 +22,7 @@
namespace OCA\FederatedFileSharing;
use OC\HintException;
+use OCP\Federation\ICloudIdManager;
use OCP\IL10N;
use OCP\IURLGenerator;
@@ -38,18 +39,24 @@ class AddressHandler {
/** @var IURLGenerator */
private $urlGenerator;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
/**
* AddressHandler constructor.
*
* @param IURLGenerator $urlGenerator
* @param IL10N $il10n
+ * @param ICloudIdManager $cloudIdManager
*/
public function __construct(
IURLGenerator $urlGenerator,
- IL10N $il10n
+ IL10N $il10n,
+ ICloudIdManager $cloudIdManager
) {
$this->l = $il10n;
$this->urlGenerator = $urlGenerator;
+ $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -60,44 +67,13 @@ class AddressHandler {
* @throws HintException
*/
public function splitUserRemote($address) {
- if (strpos($address, '@') === false) {
+ try {
+ $cloudId = $this->cloudIdManager->resolveCloudId($address);
+ return [$cloudId->getUser(), $cloudId->getRemote()];
+ } catch (\InvalidArgumentException $e) {
$hint = $this->l->t('Invalid Federated Cloud ID');
- throw new HintException('Invalid Federated Cloud ID', $hint);
- }
-
- // Find the first character that is not allowed in user names
- $id = str_replace('\\', '/', $address);
- $posSlash = strpos($id, '/');
- $posColon = strpos($id, ':');
-
- if ($posSlash === false && $posColon === false) {
- $invalidPos = strlen($id);
- } else if ($posSlash === false) {
- $invalidPos = $posColon;
- } else if ($posColon === false) {
- $invalidPos = $posSlash;
- } else {
- $invalidPos = min($posSlash, $posColon);
- }
-
- // Find the last @ before $invalidPos
- $pos = $lastAtPos = 0;
- while ($lastAtPos !== false && $lastAtPos <= $invalidPos) {
- $pos = $lastAtPos;
- $lastAtPos = strpos($id, '@', $pos + 1);
+ throw new HintException('Invalid Federated Cloud ID', $hint, 0, $e);
}
-
- if ($pos !== false) {
- $user = substr($id, 0, $pos);
- $remote = substr($id, $pos + 1);
- $remote = $this->fixRemoteURL($remote);
- if (!empty($user) && !empty($remote)) {
- return array($user, $remote);
- }
- }
-
- $hint = $this->l->t('Invalid Federated Cloud ID');
- throw new HintException('Invalid Federated Cloud ID', $hint);
}
/**
@@ -175,27 +151,4 @@ class AddressHandler {
return false;
}
-
- /**
- * Strips away a potential file names and trailing slashes:
- * - http://localhost
- * - http://localhost/
- * - http://localhost/index.php
- * - http://localhost/index.php/s/{shareToken}
- *
- * all return: http://localhost
- *
- * @param string $remote
- * @return string
- */
- protected function fixRemoteURL($remote) {
- $remote = str_replace('\\', '/', $remote);
- if ($fileNamePosition = strpos($remote, '/index.php')) {
- $remote = substr($remote, 0, $fileNamePosition);
- }
- $remote = rtrim($remote, '/');
-
- return $remote;
- }
-
}
diff --git a/apps/federatedfilesharing/lib/AppInfo/Application.php b/apps/federatedfilesharing/lib/AppInfo/Application.php
index c37cb9b87bb..3e97edeada0 100644
--- a/apps/federatedfilesharing/lib/AppInfo/Application.php
+++ b/apps/federatedfilesharing/lib/AppInfo/Application.php
@@ -45,7 +45,8 @@ class Application extends App {
$container->registerService('RequestHandlerController', function(SimpleContainer $c) use ($server) {
$addressHandler = new AddressHandler(
$server->getURLGenerator(),
- $server->getL10N('federatedfilesharing')
+ $server->getL10N('federatedfilesharing'),
+ $server->getCloudIdManager()
);
$notification = new Notifications(
$addressHandler,
@@ -64,7 +65,8 @@ class Application extends App {
$server->getShareManager(),
$notification,
$addressHandler,
- $server->getUserManager()
+ $server->getUserManager(),
+ $server->getCloudIdManager()
);
});
}
@@ -94,7 +96,8 @@ class Application extends App {
protected function initFederatedShareProvider() {
$addressHandler = new \OCA\FederatedFileSharing\AddressHandler(
\OC::$server->getURLGenerator(),
- \OC::$server->getL10N('federatedfilesharing')
+ \OC::$server->getL10N('federatedfilesharing'),
+ \OC::$server->getCloudIdManager()
);
$discoveryManager = new \OCA\FederatedFileSharing\DiscoveryManager(
\OC::$server->getMemCacheFactory(),
@@ -119,7 +122,8 @@ class Application extends App {
\OC::$server->getLogger(),
\OC::$server->getLazyRootFolder(),
\OC::$server->getConfig(),
- \OC::$server->getUserManager()
+ \OC::$server->getUserManager(),
+ \OC::$server->getCloudIdManager()
);
}
diff --git a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
index 26afcae32b7..2356c569d87 100644
--- a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
+++ b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
@@ -65,7 +65,8 @@ class RetryJob extends Job {
} else {
$addressHandler = new AddressHandler(
\OC::$server->getURLGenerator(),
- \OC::$server->getL10N('federatedfilesharing')
+ \OC::$server->getL10N('federatedfilesharing'),
+ \OC::$server->getCloudIdManager()
);
$discoveryManager = new DiscoveryManager(
\OC::$server->getMemCacheFactory(),
diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
index 3c399268124..dd2e88d2dae 100644
--- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
+++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
@@ -35,6 +35,7 @@ use OCA\Files_Sharing\External\Manager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\Federation\ICloudIdManager;
use OCP\Files\StorageInvalidException;
use OCP\Http\Client\IClientService;
use OCP\IL10N;
@@ -74,6 +75,9 @@ class MountPublicLinkController extends Controller {
/** @var IClientService */
private $clientService;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
/**
* MountPublicLinkController constructor.
*
@@ -86,6 +90,7 @@ class MountPublicLinkController extends Controller {
* @param IL10N $l
* @param IUserSession $userSession
* @param IClientService $clientService
+ * @param ICloudIdManager $cloudIdManager
*/
public function __construct($appName,
IRequest $request,
@@ -95,7 +100,8 @@ class MountPublicLinkController extends Controller {
ISession $session,
IL10N $l,
IUserSession $userSession,
- IClientService $clientService
+ IClientService $clientService,
+ ICloudIdManager $cloudIdManager
) {
parent::__construct($appName, $request);
@@ -106,6 +112,7 @@ class MountPublicLinkController extends Controller {
$this->l = $l;
$this->userSession = $userSession;
$this->clientService = $clientService;
+ $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -177,7 +184,7 @@ class MountPublicLinkController extends Controller {
return new JSONResponse(['message' => $this->l->t('Server to server sharing is not enabled on this server')], Http::STATUS_BAD_REQUEST);
}
- $shareWith = $this->userSession->getUser()->getUID() . '@' . $this->addressHandler->generateRemoteURL();
+ $cloudId = $this->cloudIdManager->getCloudId($this->userSession->getUser()->getUID(), $this->addressHandler->generateRemoteURL());
$httpClient = $this->clientService->newClient();
@@ -187,7 +194,7 @@ class MountPublicLinkController extends Controller {
'body' =>
[
'token' => $token,
- 'shareWith' => rtrim($shareWith, '/'),
+ 'shareWith' => rtrim($cloudId->getId(), '/'),
'password' => $password
],
'connect_timeout' => 10,
diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
index 750415077a8..a5e75e145c8 100644
--- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
+++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
@@ -38,6 +38,7 @@ use OCP\AppFramework\OCS\OCSForbiddenException;
use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\OCSController;
use OCP\Constants;
+use OCP\Federation\ICloudIdManager;
use OCP\Files\NotFoundException;
use OCP\IDBConnection;
use OCP\IRequest;
@@ -68,6 +69,9 @@ class RequestHandlerController extends OCSController {
/** @var string */
private $shareTable = 'share';
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
/**
* Server2Server constructor.
*
@@ -79,6 +83,7 @@ class RequestHandlerController extends OCSController {
* @param Notifications $notifications
* @param AddressHandler $addressHandler
* @param IUserManager $userManager
+ * @param ICloudIdManager $cloudIdManager
*/
public function __construct($appName,
IRequest $request,
@@ -87,7 +92,8 @@ class RequestHandlerController extends OCSController {
Share\IManager $shareManager,
Notifications $notifications,
AddressHandler $addressHandler,
- IUserManager $userManager
+ IUserManager $userManager,
+ ICloudIdManager $cloudIdManager
) {
parent::__construct($appName, $request);
@@ -97,6 +103,7 @@ class RequestHandlerController extends OCSController {
$this->notifications = $notifications;
$this->addressHandler = $addressHandler;
$this->userManager = $userManager;
+ $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -164,7 +171,7 @@ class RequestHandlerController extends OCSController {
$shareId = \OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*share_external');
if ($ownerFederatedId === null) {
- $ownerFederatedId = $owner . '@' . $this->cleanupRemote($remote);
+ $ownerFederatedId = $this->cloudIdManager->getCloudId($owner, $this->cleanupRemote($remote))->getId();
}
// if the owner of the share and the initiator are the same user
// we also complete the federated share ID for the initiator
@@ -424,7 +431,7 @@ class RequestHandlerController extends OCSController {
$remote = $this->cleanupRemote($share['remote']);
- $owner = $share['owner'] . '@' . $remote;
+ $owner = $this->cloudIdManager->getCloudId($share['owner'], $remote);
$mountpoint = $share['mountpoint'];
$user = $share['user'];
diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php
index 61f1b1c8f18..fb49978b7af 100644
--- a/apps/federatedfilesharing/lib/FederatedShareProvider.php
+++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php
@@ -27,6 +27,7 @@
namespace OCA\FederatedFileSharing;
use OC\Share20\Share;
+use OCP\Federation\ICloudIdManager;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\IConfig;
@@ -80,6 +81,9 @@ class FederatedShareProvider implements IShareProvider {
/** @var IUserManager */
private $userManager;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
/**
* DefaultShareProvider constructor.
*
@@ -92,6 +96,7 @@ class FederatedShareProvider implements IShareProvider {
* @param IRootFolder $rootFolder
* @param IConfig $config
* @param IUserManager $userManager
+ * @param ICloudIdManager $cloudIdManager
*/
public function __construct(
IDBConnection $connection,
@@ -102,7 +107,8 @@ class FederatedShareProvider implements IShareProvider {
ILogger $logger,
IRootFolder $rootFolder,
IConfig $config,
- IUserManager $userManager
+ IUserManager $userManager,
+ ICloudIdManager $cloudIdManager
) {
$this->dbConnection = $connection;
$this->addressHandler = $addressHandler;
@@ -113,6 +119,7 @@ class FederatedShareProvider implements IShareProvider {
$this->rootFolder = $rootFolder;
$this->config = $config;
$this->userManager = $userManager;
+ $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -153,17 +160,18 @@ class FederatedShareProvider implements IShareProvider {
// don't allow federated shares if source and target server are the same
- list($user, $remote) = $this->addressHandler->splitUserRemote($shareWith);
+ $cloudId = $this->cloudIdManager->resolveCloudId($shareWith);
$currentServer = $this->addressHandler->generateRemoteURL();
$currentUser = $sharedBy;
- if ($this->addressHandler->compareAddresses($user, $remote, $currentUser, $currentServer)) {
+ if ($this->addressHandler->compareAddresses($cloudId->getUser(), $cloudId->getRemote(), $currentUser, $currentServer)) {
$message = 'Not allowed to create a federated share with the same user.';
$message_t = $this->l->t('Not allowed to create a federated share with the same user');
$this->logger->debug($message, ['app' => 'Federated File Sharing']);
throw new \Exception($message_t);
}
- $share->setSharedWith($user . '@' . $remote);
+
+ $share->setSharedWith($cloudId->getId());
try {
$remoteShare = $this->getShareFromExternalShareTable($share);
@@ -173,8 +181,8 @@ class FederatedShareProvider implements IShareProvider {
if ($remoteShare) {
try {
- $uidOwner = $remoteShare['owner'] . '@' . $remoteShare['remote'];
- $shareId = $this->addShareToDB($itemSource, $itemType, $shareWith, $sharedBy, $uidOwner, $permissions, 'tmp_token_' . time());
+ $ownerCloudId = $this->cloudIdManager->getCloudId($remoteShare['owner'], $remoteShare['remote']);
+ $shareId = $this->addShareToDB($itemSource, $itemType, $shareWith, $sharedBy, $ownerCloudId->getId(), $permissions, 'tmp_token_' . time());
$share->setId($shareId);
list($token, $remoteId) = $this->askOwnerToReShare($shareWith, $share, $shareId);
// remote share was create successfully if we get a valid token as return
@@ -227,15 +235,17 @@ class FederatedShareProvider implements IShareProvider {
try {
$sharedByFederatedId = $share->getSharedBy();
if ($this->userManager->userExists($sharedByFederatedId)) {
- $sharedByFederatedId = $sharedByFederatedId . '@' . $this->addressHandler->generateRemoteURL();
+ $cloudId = $this->cloudIdManager->getCloudId($sharedByFederatedId, $this->addressHandler->generateRemoteURL());
+ $sharedByFederatedId = $cloudId->getId();
}
+ $ownerCloudId = $this->cloudIdManager->getCloudId($share->getShareOwner(), $this->addressHandler->generateRemoteURL());
$send = $this->notifications->sendRemoteShare(
$token,
$share->getSharedWith(),
$share->getNode()->getName(),
$shareId,
$share->getShareOwner(),
- $share->getShareOwner() . '@' . $this->addressHandler->generateRemoteURL(),
+ $ownerCloudId->getId(),
$share->getSharedBy(),
$sharedByFederatedId
);
diff --git a/apps/federatedfilesharing/lib/Notifier.php b/apps/federatedfilesharing/lib/Notifier.php
index 507dd98330e..faf79480b7e 100644
--- a/apps/federatedfilesharing/lib/Notifier.php
+++ b/apps/federatedfilesharing/lib/Notifier.php
@@ -27,6 +27,8 @@ namespace OCA\FederatedFileSharing;
use OC\HintException;
use OC\Share\Helper;
use OCP\Contacts\IManager;
+use OCP\Federation\ICloudId;
+use OCP\Federation\ICloudIdManager;
use OCP\IURLGenerator;
use OCP\L10N\IFactory;
use OCP\Notification\INotification;
@@ -41,16 +43,20 @@ class Notifier implements INotifier {
protected $url;
/** @var array */
protected $federatedContacts;
+ /** @var ICloudIdManager */
+ protected $cloudIdManager;
/**
* @param IFactory $factory
* @param IManager $contactsManager
* @param IURLGenerator $url
+ * @param ICloudIdManager $cloudIdManager
*/
- public function __construct(IFactory $factory, IManager $contactsManager, IURLGenerator $url) {
+ public function __construct(IFactory $factory, IManager $contactsManager, IURLGenerator $url, ICloudIdManager $cloudIdManager) {
$this->factory = $factory;
$this->contactsManager = $contactsManager;
$this->url = $url;
+ $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -140,8 +146,10 @@ class Notifier implements INotifier {
protected function createRemoteUser($cloudId) {
$displayName = $cloudId;
try {
- list($user, $server) = Helper::splitUserRemote($cloudId);
- $displayName = $this->getDisplayName($user, $server);
+ $resolvedId = $this->cloudIdManager->resolveCloudId($cloudId);
+ $displayName = $this->getDisplayName($resolvedId);
+ $user = $resolvedId->getUser();
+ $server = $resolvedId->getRemote();
} catch (HintException $e) {
$user = $cloudId;
$server = '';
@@ -158,14 +166,12 @@ class Notifier implements INotifier {
/**
* Try to find the user in the contacts
*
- * @param string $user
- * @param string $server
+ * @param ICloudId $cloudId
* @return string
- * @throws \OutOfBoundsException when there is no contact for the id
*/
- protected function getDisplayName($user, $server) {
- $server = strtolower(rtrim($server, '/'));
-
+ protected function getDisplayName(ICloudId $cloudId) {
+ $server = $cloudId->getRemote();
+ $user = $cloudId->getUser();
if (strpos($server, 'http://') === 0) {
$server = substr($server, strlen('http://'));
} else if (strpos($server, 'https://') === 0) {
@@ -173,7 +179,7 @@ class Notifier implements INotifier {
}
try {
- return $this->getDisplayNameFromContact($user . '@' . $server);
+ return $this->getDisplayNameFromContact($cloudId->getId());
} catch (\OutOfBoundsException $e) {
}
@@ -187,7 +193,7 @@ class Notifier implements INotifier {
} catch (\OutOfBoundsException $e) {
}
- return $user . '@' . $server;
+ return $cloudId->getId();
}
/**
diff --git a/apps/federatedfilesharing/tests/AddressHandlerTest.php b/apps/federatedfilesharing/tests/AddressHandlerTest.php
index f62f3b62e03..6d215d40156 100644
--- a/apps/federatedfilesharing/tests/AddressHandlerTest.php
+++ b/apps/federatedfilesharing/tests/AddressHandlerTest.php
@@ -25,6 +25,7 @@
namespace OCA\FederatedFileSharing\Tests;
+use OC\Federation\CloudIdManager;
use OCA\FederatedFileSharing\AddressHandler;
use OCP\IL10N;
use OCP\IURLGenerator;
@@ -40,6 +41,9 @@ class AddressHandlerTest extends \Test\TestCase {
/** @var IL10N | \PHPUnit_Framework_MockObject_MockObject */
private $il10n;
+ /** @var CloudIdManager */
+ private $cloudIdManager;
+
public function setUp() {
parent::setUp();
@@ -48,7 +52,9 @@ class AddressHandlerTest extends \Test\TestCase {
$this->il10n = $this->getMockBuilder('OCP\IL10N')
->getMock();
- $this->addressHandler = new AddressHandler($this->urlGenerator, $this->il10n);
+ $this->cloudIdManager = new CloudIdManager();
+
+ $this->addressHandler = new AddressHandler($this->urlGenerator, $this->il10n, $this->cloudIdManager);
}
public function dataTestSplitUserRemote() {
@@ -196,26 +202,4 @@ class AddressHandlerTest extends \Test\TestCase {
['httpserver.com', false],
];
}
-
- /**
- * @dataProvider dataTestFixRemoteUrl
- *
- * @param string $url
- * @param string $expected
- */
- public function testFixRemoteUrl($url, $expected) {
- $this->assertSame($expected,
- $this->invokePrivate($this->addressHandler, 'fixRemoteURL', [$url])
- );
- }
-
- public function dataTestFixRemoteUrl() {
- return [
- ['http://localhost', 'http://localhost'],
- ['http://localhost/', 'http://localhost'],
- ['http://localhost/index.php', 'http://localhost'],
- ['http://localhost/index.php/s/AShareToken', 'http://localhost'],
- ];
- }
-
}
diff --git a/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php b/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php
index bd091bed410..7714ff4731c 100644
--- a/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php
+++ b/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php
@@ -25,11 +25,13 @@
namespace OCA\FederatedFileSharing\Tests\Controller;
+use OC\Federation\CloudIdManager;
use OC\HintException;
use OCA\FederatedFileSharing\AddressHandler;
use OCA\FederatedFileSharing\Controller\MountPublicLinkController;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCP\AppFramework\Http;
+use OCP\Federation\ICloudIdManager;
use OCP\Files\IRootFolder;
use OCP\Http\Client\IClientService;
use OCP\IL10N;
@@ -77,6 +79,9 @@ class MountPublicLinkControllerTest extends \Test\TestCase {
/** @var IShare */
private $share;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
public function setUp() {
parent::setUp();
@@ -93,6 +98,7 @@ class MountPublicLinkControllerTest extends \Test\TestCase {
$this->l10n = $this->getMockBuilder('OCP\IL10N')->disableOriginalConstructor()->getMock();
$this->userSession = $this->getMockBuilder('OCP\IUserSession')->disableOriginalConstructor()->getMock();
$this->clientService = $this->getMockBuilder('OCP\Http\Client\IClientService')->disableOriginalConstructor()->getMock();
+ $this->cloudIdManager = new CloudIdManager();
$this->controller = new MountPublicLinkController(
'federatedfilesharing', $this->request,
@@ -102,7 +108,8 @@ class MountPublicLinkControllerTest extends \Test\TestCase {
$this->session,
$this->l10n,
$this->userSession,
- $this->clientService
+ $this->clientService,
+ $this->cloudIdManager
);
}
diff --git a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
index 18d698d398e..61f87e9ec67 100644
--- a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
+++ b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
@@ -27,10 +27,12 @@
namespace OCA\FederatedFileSharing\Tests;
+use OC\Federation\CloudIdManager;
use OC\Files\Filesystem;
use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Controller\RequestHandlerController;
+use OCP\Federation\ICloudIdManager;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\Http\Client\IResponse;
@@ -72,6 +74,9 @@ class RequestHandlerControllerTest extends TestCase {
/** @var IShare|\PHPUnit_Framework_MockObject_MockObject */
private $share;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
protected function setUp() {
parent::setUp();
@@ -100,6 +105,8 @@ class RequestHandlerControllerTest extends TestCase {
$this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')
->disableOriginalConstructor()->getMock();
$this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock();
+
+ $this->cloudIdManager = new CloudIdManager();
$this->registerHttpHelper($httpHelperMock);
@@ -111,7 +118,8 @@ class RequestHandlerControllerTest extends TestCase {
\OC::$server->getShareManager(),
$this->notifications,
$this->addressHandler,
- $this->userManager
+ $this->userManager,
+ $this->cloudIdManager
);
$this->connection = \OC::$server->getDatabaseConnection();
@@ -190,7 +198,8 @@ class RequestHandlerControllerTest extends TestCase {
\OC::$server->getShareManager(),
$this->notifications,
$this->addressHandler,
- $this->userManager
+ $this->userManager,
+ $this->cloudIdManager
]
)->setMethods(['executeDeclineShare', 'verifyShare'])->getMock();
diff --git a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
index 874d4b48a5c..97d8ccd65c3 100644
--- a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
+++ b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
@@ -25,10 +25,12 @@
namespace OCA\FederatedFileSharing\Tests;
+use OC\Federation\CloudIdManager;
use OCA\FederatedFileSharing\AddressHandler;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Notifications;
use OCA\FederatedFileSharing\TokenHandler;
+use OCP\Federation\ICloudIdManager;
use OCP\Files\IRootFolder;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -69,6 +71,9 @@ class FederatedShareProviderTest extends \Test\TestCase {
/** @var FederatedShareProvider */
protected $provider;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
public function setUp() {
parent::setUp();
@@ -94,6 +99,8 @@ class FederatedShareProviderTest extends \Test\TestCase {
$this->userManager->expects($this->any())->method('userExists')->willReturn(true);
+ $this->cloudIdManager = new CloudIdManager();
+
$this->provider = new FederatedShareProvider(
$this->connection,
$this->addressHandler,
@@ -103,7 +110,8 @@ class FederatedShareProviderTest extends \Test\TestCase {
$this->logger,
$this->rootFolder,
$this->config,
- $this->userManager
+ $this->userManager,
+ $this->cloudIdManager
);
$this->shareManager = \OC::$server->getShareManager();
@@ -400,7 +408,8 @@ class FederatedShareProviderTest extends \Test\TestCase {
$this->logger,
$this->rootFolder,
$this->config,
- $this->userManager
+ $this->userManager,
+ $this->cloudIdManager
]
)->setMethods(['sendPermissionUpdate'])->getMock();
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/de.js b/apps/federation/l10n/de.js
index 2de94cdfca0..d9c6a3309b0 100644
--- a/apps/federation/l10n/de.js
+++ b/apps/federation/l10n/de.js
@@ -2,15 +2,15 @@ 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",
diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json
index 9fde823f323..f037f51ce0a 100644
--- a/apps/federation/l10n/de.json
+++ b/apps/federation/l10n/de.json
@@ -1,14 +1,14 @@
{ "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",
diff --git a/apps/federation/l10n/de_DE.js b/apps/federation/l10n/de_DE.js
index fcba47740d3..852971d7b9c 100644
--- a/apps/federation/l10n/de_DE.js
+++ b/apps/federation/l10n/de_DE.js
@@ -3,14 +3,14 @@ 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",
diff --git a/apps/federation/l10n/de_DE.json b/apps/federation/l10n/de_DE.json
index 38eca8a0154..83c1066a950 100644
--- a/apps/federation/l10n/de_DE.json
+++ b/apps/federation/l10n/de_DE.json
@@ -1,14 +1,14 @@
{ "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",
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/ia.js b/apps/federation/l10n/ia.js
new file mode 100644
index 00000000000..ed91ea8b76a
--- /dev/null
+++ b/apps/federation/l10n/ia.js
@@ -0,0 +1,19 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Addite al lista de servitores fiduciari.",
+ "Server is already in the list of trusted servers." : "Servitor ja es in le lista de servitores fiduciari.",
+ "No server to federate with found" : "Nulle servitor pro associar se per federation esseva trovate",
+ "Could not add server" : "Il non poteva adder le servitor",
+ "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." : "Le federation permitte te connecter con altere servitores fiduciari pro excambiar le directorio del usator. Per exemplo, iste attributo essera usate pro completar automaticamente usatores externe pro le compartimento federate.",
+ "Add server automatically once a federated share was created successfully" : "Le functionalitate de adder un servitor automaticamente un vice que un compartimento federate es associate esseva create con successo",
+ "Trusted servers" : "Servitores fiduciari",
+ "+ Add trusted server" : "+ Adder servitor fiduciari",
+ "Trusted server" : "Servitor fiduciari",
+ "Add" : "Adder",
+ "Trusted Servers" : "Servitores Fiduciari",
+ "+ Add Nextcloud server" : "+ Adder servitor Nextcloud",
+ "Nextcloud Server" : "Servitor Nextcloud"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/ia.json b/apps/federation/l10n/ia.json
new file mode 100644
index 00000000000..f4ac228b64b
--- /dev/null
+++ b/apps/federation/l10n/ia.json
@@ -0,0 +1,17 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Addite al lista de servitores fiduciari.",
+ "Server is already in the list of trusted servers." : "Servitor ja es in le lista de servitores fiduciari.",
+ "No server to federate with found" : "Nulle servitor pro associar se per federation esseva trovate",
+ "Could not add server" : "Il non poteva adder le servitor",
+ "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." : "Le federation permitte te connecter con altere servitores fiduciari pro excambiar le directorio del usator. Per exemplo, iste attributo essera usate pro completar automaticamente usatores externe pro le compartimento federate.",
+ "Add server automatically once a federated share was created successfully" : "Le functionalitate de adder un servitor automaticamente un vice que un compartimento federate es associate esseva create con successo",
+ "Trusted servers" : "Servitores fiduciari",
+ "+ Add trusted server" : "+ Adder servitor fiduciari",
+ "Trusted server" : "Servitor fiduciari",
+ "Add" : "Adder",
+ "Trusted Servers" : "Servitores Fiduciari",
+ "+ Add Nextcloud server" : "+ Adder servitor Nextcloud",
+ "Nextcloud Server" : "Servitor Nextcloud"
+},"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/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/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/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 a25c043f332..2bb4d98c158 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -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/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 4a37bf15a4b..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;
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/filelist.js b/apps/files/js/filelist.js
index bb50814dfdc..3a59da53517 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -2478,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() {
@@ -2951,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/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/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js
index 28eb4357081..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" : "Файлът не може да бъде открит",
@@ -28,6 +27,7 @@ OC.L10N.register(
"Delete" : "Изтриване",
"Disconnect storage" : "Извади хранилището",
"Unshare" : "Прекратяване на споделяне",
+ "Files" : "Файлове",
"Details" : "Детайли",
"Select" : "Избери",
"Pending" : "Чакащо",
diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json
index befe99aee79..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" : "Файлът не може да бъде открит",
@@ -26,6 +25,7 @@
"Delete" : "Изтриване",
"Disconnect storage" : "Извади хранилището",
"Unshare" : "Прекратяване на споделяне",
+ "Files" : "Файлове",
"Details" : "Детайли",
"Select" : "Избери",
"Pending" : "Чакащо",
diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js
index 7f03049ef40..5f461c3fb8a 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Emmagatzemament temporalment no disponible",
"Storage invalid" : "Emmagatzemament no vàlid",
"Unknown error" : "Error desconegut",
- "Files" : "Fitxers",
"All files" : "Tots els fitxers",
"Recent" : "Recent",
"File could not be found" : "No s'ha pogut trobar el fitxer",
@@ -17,13 +17,6 @@ OC.L10N.register(
"Not enough free space" : "Espai lliure insuficient",
"Uploading..." : "Pujant...",
"..." : "...",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "falten {minutes}:{seconds} minut{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "queden {seconds} segon{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Soon..." : "Aviat...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
"Actions" : "Accions",
"Download" : "Baixa",
"Rename" : "Reanomena",
@@ -32,11 +25,13 @@ OC.L10N.register(
"Delete" : "Esborra",
"Disconnect storage" : "Desonnecta l'emmagatzematge",
"Unshare" : "Deixa de compartir",
+ "Files" : "Fitxers",
"Details" : "Detalls",
"Select" : "Selecciona",
"Pending" : "Pendent",
"Unable to determine date" : "No s'ha pogut determinar la data",
"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.",
"Could not move \"{file}\", target exists" : "No s'ha pugut moure \"{file}\", el destí ja existeix",
"Could not move \"{file}\"" : "No s'ha pogut moure \"{file}\"",
"{newName} already exists" : "{newName} ja existeix",
@@ -62,31 +57,24 @@ OC.L10N.register(
"Path" : "Ruta",
"Favorited" : "Agregat a favorits",
"Favorite" : "Preferits",
- "Local link" : "Enllaç local",
+ "Copy local link" : "C",
"Folder" : "Carpeta",
"New folder" : "Carpeta nova",
"Upload" : "Puja",
"An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes",
+ "Added to favorites" : "Afegit a favorits",
+ "Removed from favorites" : "Esborra de preferits",
+ "You removed {file} from your favorites" : "Has esborrat {file} dels teus preferits",
+ "File changes" : "Canvis al fitxer",
+ "Created by {user}" : "Creat per {user}",
+ "Changed by {user}" : "Canviat per {user}",
+ "Deleted by {user}" : "Eliminat per {user}",
+ "Restored by {user}" : "Restaurat per {user}",
+ "Renamed by {user}" : "Renombrat per {user}",
+ "Moved by {user}" : "Mogut per {user}",
+ "You deleted {file}" : "Heu esborrat {fiel}",
"A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>",
- "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta",
- "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta",
- "You created %1$s" : "Has creat %1$s",
- "%2$s created %1$s" : "%2$s ha creat %1$s",
- "%1$s was created in a public folder" : "Es va crear %1$s en una carpeta pública",
- "You changed %1$s" : "Has canviat %1$s",
- "%2$s changed %1$s" : "%2$s ha canviat %1$s",
- "You deleted %1$s" : "Has esborrat %1$s",
- "%2$s deleted %1$s" : "%2$s ha esborrat %1$s",
- "You restored %1$s" : "Has restaurat %1$s",
- "%2$s restored %1$s" : "%2$s ha restaurat %1$s",
- "You moved %2$s to %1$s" : "Has mogut %2$s a %1$s",
- "%2$s moved %3$s to %1$s" : "%2$s ha mogut %3$s a %1$s",
- "Changed by %2$s" : "Modificat per %2$s",
- "Deleted by %2$s" : "Esborrat per %2$s",
- "Renamed by %2$s" : "Renombrat per %2$s",
- "Moved by %2$s" : "Mogut per %2$s",
- "File changes" : "Canvis al fitxer",
"Upload (max. %s)" : "Pujada (màx. %s)",
"File handling" : "Gestió de fitxers",
"Maximum upload size" : "Mida màxima de pujada",
@@ -105,6 +93,7 @@ OC.L10N.register(
"Files and folders you mark as favorite will show up here" : "Aquí apareixeran els arxius i carpetes que vostè marqui com favorits",
"Shared with you" : "Compartit amb tu",
"Shared with others" : "Compartit amb altres",
+ "Shared by link" : "Comparteix per link",
"Tags" : "Etiquetes",
"Deleted files" : "Fitxers esborrats",
"Text file" : "Fitxer de text",
@@ -128,9 +117,29 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Mida total del fitxer {size1} excedeix el límit de pujada {size2}",
"Error uploading file \"{fileName}\": {message}" : "Error pujant el fitxer \"{fileName}\": {message}",
"Could not get result from server." : "No hi ha resposta del servidor.",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "falten {minutes}:{seconds} minut{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "queden {seconds} segon{plural_s}",
+ "{seconds}s" : "{seconds}s",
+ "Soon..." : "Aviat...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
"No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'",
+ "Local link" : "Enllaç local",
"{newname} already exists" : "{newname} ja existeix",
"A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta",
- "Cancel upload" : "Cancel·la la pujada"
+ "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta",
+ "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta",
+ "You created %1$s" : "Has creat %1$s",
+ "%2$s created %1$s" : "%2$s ha creat %1$s",
+ "%1$s was created in a public folder" : "Es va crear %1$s en una carpeta pública",
+ "You changed %1$s" : "Has canviat %1$s",
+ "%2$s changed %1$s" : "%2$s ha canviat %1$s",
+ "You deleted %1$s" : "Has esborrat %1$s",
+ "%2$s deleted %1$s" : "%2$s ha esborrat %1$s",
+ "You restored %1$s" : "Has restaurat %1$s",
+ "%2$s restored %1$s" : "%2$s ha restaurat %1$s",
+ "Changed by %2$s" : "Modificat per %2$s",
+ "Deleted by %2$s" : "Esborrat per %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index 9cedb8be4b6..9cfc24b0f40 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -1,7 +1,7 @@
{ "translations": {
+ "Storage is temporarily not available" : "Emmagatzemament temporalment no disponible",
"Storage invalid" : "Emmagatzemament no vàlid",
"Unknown error" : "Error desconegut",
- "Files" : "Fitxers",
"All files" : "Tots els fitxers",
"Recent" : "Recent",
"File could not be found" : "No s'ha pogut trobar el fitxer",
@@ -15,13 +15,6 @@
"Not enough free space" : "Espai lliure insuficient",
"Uploading..." : "Pujant...",
"..." : "...",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "falten {minutes}:{seconds} minut{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "queden {seconds} segon{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Soon..." : "Aviat...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
"Actions" : "Accions",
"Download" : "Baixa",
"Rename" : "Reanomena",
@@ -30,11 +23,13 @@
"Delete" : "Esborra",
"Disconnect storage" : "Desonnecta l'emmagatzematge",
"Unshare" : "Deixa de compartir",
+ "Files" : "Fitxers",
"Details" : "Detalls",
"Select" : "Selecciona",
"Pending" : "Pendent",
"Unable to determine date" : "No s'ha pogut determinar la data",
"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.",
"Could not move \"{file}\", target exists" : "No s'ha pugut moure \"{file}\", el destí ja existeix",
"Could not move \"{file}\"" : "No s'ha pogut moure \"{file}\"",
"{newName} already exists" : "{newName} ja existeix",
@@ -60,31 +55,24 @@
"Path" : "Ruta",
"Favorited" : "Agregat a favorits",
"Favorite" : "Preferits",
- "Local link" : "Enllaç local",
+ "Copy local link" : "C",
"Folder" : "Carpeta",
"New folder" : "Carpeta nova",
"Upload" : "Puja",
"An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes",
+ "Added to favorites" : "Afegit a favorits",
+ "Removed from favorites" : "Esborra de preferits",
+ "You removed {file} from your favorites" : "Has esborrat {file} dels teus preferits",
+ "File changes" : "Canvis al fitxer",
+ "Created by {user}" : "Creat per {user}",
+ "Changed by {user}" : "Canviat per {user}",
+ "Deleted by {user}" : "Eliminat per {user}",
+ "Restored by {user}" : "Restaurat per {user}",
+ "Renamed by {user}" : "Renombrat per {user}",
+ "Moved by {user}" : "Mogut per {user}",
+ "You deleted {file}" : "Heu esborrat {fiel}",
"A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>",
- "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta",
- "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta",
- "You created %1$s" : "Has creat %1$s",
- "%2$s created %1$s" : "%2$s ha creat %1$s",
- "%1$s was created in a public folder" : "Es va crear %1$s en una carpeta pública",
- "You changed %1$s" : "Has canviat %1$s",
- "%2$s changed %1$s" : "%2$s ha canviat %1$s",
- "You deleted %1$s" : "Has esborrat %1$s",
- "%2$s deleted %1$s" : "%2$s ha esborrat %1$s",
- "You restored %1$s" : "Has restaurat %1$s",
- "%2$s restored %1$s" : "%2$s ha restaurat %1$s",
- "You moved %2$s to %1$s" : "Has mogut %2$s a %1$s",
- "%2$s moved %3$s to %1$s" : "%2$s ha mogut %3$s a %1$s",
- "Changed by %2$s" : "Modificat per %2$s",
- "Deleted by %2$s" : "Esborrat per %2$s",
- "Renamed by %2$s" : "Renombrat per %2$s",
- "Moved by %2$s" : "Mogut per %2$s",
- "File changes" : "Canvis al fitxer",
"Upload (max. %s)" : "Pujada (màx. %s)",
"File handling" : "Gestió de fitxers",
"Maximum upload size" : "Mida màxima de pujada",
@@ -103,6 +91,7 @@
"Files and folders you mark as favorite will show up here" : "Aquí apareixeran els arxius i carpetes que vostè marqui com favorits",
"Shared with you" : "Compartit amb tu",
"Shared with others" : "Compartit amb altres",
+ "Shared by link" : "Comparteix per link",
"Tags" : "Etiquetes",
"Deleted files" : "Fitxers esborrats",
"Text file" : "Fitxer de text",
@@ -126,9 +115,29 @@
"Total file size {size1} exceeds upload limit {size2}" : "Mida total del fitxer {size1} excedeix el límit de pujada {size2}",
"Error uploading file \"{fileName}\": {message}" : "Error pujant el fitxer \"{fileName}\": {message}",
"Could not get result from server." : "No hi ha resposta del servidor.",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "falten {minutes}:{seconds} minut{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "queden {seconds} segon{plural_s}",
+ "{seconds}s" : "{seconds}s",
+ "Soon..." : "Aviat...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
"No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'",
+ "Local link" : "Enllaç local",
"{newname} already exists" : "{newname} ja existeix",
"A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta",
- "Cancel upload" : "Cancel·la la pujada"
+ "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta",
+ "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta",
+ "You created %1$s" : "Has creat %1$s",
+ "%2$s created %1$s" : "%2$s ha creat %1$s",
+ "%1$s was created in a public folder" : "Es va crear %1$s en una carpeta pública",
+ "You changed %1$s" : "Has canviat %1$s",
+ "%2$s changed %1$s" : "%2$s ha canviat %1$s",
+ "You deleted %1$s" : "Has esborrat %1$s",
+ "%2$s deleted %1$s" : "%2$s ha esborrat %1$s",
+ "You restored %1$s" : "Has restaurat %1$s",
+ "%2$s restored %1$s" : "%2$s ha restaurat %1$s",
+ "Changed by %2$s" : "Modificat per %2$s",
+ "Deleted by %2$s" : "Esborrat per %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 0acc6a31af2..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",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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é",
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index 49d2855cc2e..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",
@@ -27,6 +26,7 @@
"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é",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index afd1f8142c2..257e9d7844d 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/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",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
@@ -76,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -98,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>",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 30a2730b47c..29809c70bd4 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/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",
@@ -27,6 +26,7 @@
"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",
@@ -74,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -96,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>",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 9ef2aed2802..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",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
@@ -76,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 3466d7ebd9a..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",
@@ -27,6 +26,7 @@
"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",
@@ -74,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index e9f493c869a..b6ff894b521 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" : "Μέγιστο μέγεθος αποστολής",
@@ -86,8 +80,9 @@ OC.L10N.register(
"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" : "Προβολή κρυφών αρχείων",
+ "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..4c265bade98 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" : "Μέγιστο μέγεθος αποστολής",
@@ -84,8 +78,9 @@
"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" : "Προβολή κρυφών αρχείων",
+ "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 fbd4dd200f1..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",
@@ -22,6 +21,7 @@ OC.L10N.register(
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
+ "Files" : "Files",
"Details" : "Details",
"Select" : "Select",
"Pending" : "Pending",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index 783867beb4f..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",
@@ -20,6 +19,7 @@
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
+ "Files" : "Files",
"Details" : "Details",
"Select" : "Select",
"Pending" : "Pending",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 756d3f1c0fc..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",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 69a24737364..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",
@@ -27,6 +26,7 @@
"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",
diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js
index 0fda6c41327..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",
@@ -23,6 +22,7 @@ OC.L10N.register(
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "Files" : "Tiedostot",
"Details" : "Tiedot",
"Select" : "Valitse",
"Pending" : "Odottaa",
diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json
index bdd162d4127..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",
@@ -21,6 +20,7 @@
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "Files" : "Tiedostot",
"Details" : "Tiedot",
"Select" : "Valitse",
"Pending" : "Odottaa",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index dcd0928ca25..bb040d3ae45 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -1,24 +1,23 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
- "Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Télécharger",
@@ -29,12 +28,13 @@ OC.L10N.register(
"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à",
@@ -52,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",
@@ -71,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}",
@@ -107,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",
@@ -129,21 +129,21 @@ 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}",
@@ -155,10 +155,10 @@ OC.L10N.register(
"{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...",
+ "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>",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index e990093bbbb..c38524fbe31 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -1,22 +1,21 @@
{ "translations": {
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
- "Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Télécharger",
@@ -27,12 +26,13 @@
"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à",
@@ -50,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",
@@ -69,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}",
@@ -105,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",
@@ -127,21 +127,21 @@
"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}",
@@ -153,10 +153,10 @@
"{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...",
+ "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>",
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index 13504df625a..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ó",
@@ -28,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",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 2eab8691b64..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ó",
@@ -26,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",
diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js
index 5ae610dba16..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",
@@ -23,6 +22,7 @@ OC.L10N.register(
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
+ "Files" : "Berkas",
"Details" : "Rincian",
"Select" : "Pilih",
"Pending" : "Tertunda",
diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json
index 6867106ff09..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",
@@ -21,6 +20,7 @@
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
+ "Files" : "Berkas",
"Details" : "Rincian",
"Select" : "Pilih",
"Pending" : "Tertunda",
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index b310e19535d..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",
@@ -23,6 +22,7 @@ OC.L10N.register(
"Delete" : "Eyða",
"Disconnect storage" : "Aftengja geymslu",
"Unshare" : "Hætta deilingu",
+ "Files" : "Skrár",
"Details" : "Nánar",
"Select" : "Velja",
"Pending" : "Í bið",
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index 1b39dfbea13..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",
@@ -21,6 +20,7 @@
"Delete" : "Eyða",
"Disconnect storage" : "Aftengja geymslu",
"Unshare" : "Hætta deilingu",
+ "Files" : "Skrár",
"Details" : "Nánar",
"Select" : "Velja",
"Pending" : "Í bið",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 269f87014a4..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",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 2c0843bf090..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",
@@ -27,6 +26,7 @@
"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",
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index a3178964e31..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" : "ファイルを見つけられませんでした",
@@ -28,6 +27,8 @@ OC.L10N.register(
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
+ "Could not load info for file \"{file}\"" : "\"{file}\" ファイルの情報を読み込めませんでした",
+ "Files" : "ファイル",
"Details" : "詳細",
"Select" : "選択",
"Pending" : "中断",
@@ -153,8 +154,8 @@ OC.L10N.register(
"{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
"{seconds} second{plural_s} left" : "残り{minutes}:{seconds} 秒",
"{seconds}s" : "{seconds} 秒",
- "Any moment now..." : "もうすぐ…",
- "Soon..." : "もうすぐ…",
+ "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" : "ローカルリンク",
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 4c3db9acc3d..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" : "ファイルを見つけられませんでした",
@@ -26,6 +25,8 @@
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
+ "Could not load info for file \"{file}\"" : "\"{file}\" ファイルの情報を読み込めませんでした",
+ "Files" : "ファイル",
"Details" : "詳細",
"Select" : "選択",
"Pending" : "中断",
@@ -151,8 +152,8 @@
"{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
"{seconds} second{plural_s} left" : "残り{minutes}:{seconds} 秒",
"{seconds}s" : "{seconds} 秒",
- "Any moment now..." : "もうすぐ…",
- "Soon..." : "もうすぐ…",
+ "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" : "ローカルリンク",
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index fcec4a93b65..ac9513e8c27 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.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" : "파일을 찾을 수 없음",
@@ -27,6 +26,7 @@ OC.L10N.register(
"Delete" : "삭제",
"Disconnect storage" : "저장소 연결 해제",
"Unshare" : "공유 해제",
+ "Files" : "파일",
"Details" : "자세한 정보",
"Select" : "선택",
"Pending" : "대기 중",
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index de02cdaaf2d..a52f9d75dc3 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "저장소를 일시적으로 사용할 수 없습니다",
"Storage invalid" : "저장소가 잘못됨",
"Unknown error" : "알 수 없는 오류",
- "Files" : "파일",
"All files" : "모든 파일",
"Recent" : "최근",
"File could not be found" : "파일을 찾을 수 없음",
@@ -25,6 +24,7 @@
"Delete" : "삭제",
"Disconnect storage" : "저장소 연결 해제",
"Unshare" : "공유 해제",
+ "Files" : "파일",
"Details" : "자세한 정보",
"Select" : "선택",
"Pending" : "대기 중",
diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js
index 80e636ff5f0..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,15 +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ē...",
"..." : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} no {totalSize} ({bitrate})",
"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",
@@ -39,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",
@@ -60,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",
@@ -85,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",
diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json
index d88665b810f..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,15 +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ē...",
"..." : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} no {totalSize} ({bitrate})",
"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",
@@ -37,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",
@@ -58,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",
@@ -83,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",
diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js
index 63164a86d65..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",
@@ -28,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",
@@ -60,7 +61,7 @@ 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",
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index 1d6d0ab113d..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",
@@ -26,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",
@@ -58,7 +59,7 @@
"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",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 32d53b3cced..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",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index c0f8ca406f1..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",
@@ -27,6 +26,7 @@
"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",
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index 0fdb178afba..ab84ccc90ac 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -4,7 +4,6 @@ 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" : "Ostatnie",
"File could not be found" : "Nie można odnaleźć pliku",
@@ -28,6 +27,8 @@ OC.L10N.register(
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
"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",
@@ -48,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.",
@@ -61,10 +62,10 @@ 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"],
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów","%n bajtów"],
"Favorited" : "Ulubiony",
"Favorite" : "Ulubione",
"Copy local link" : "Kopiowanie lokalnego linku",
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 6e13bf9d264..7a7fdb17f6b 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -2,7 +2,6 @@
"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" : "Ostatnie",
"File could not be found" : "Nie można odnaleźć pliku",
@@ -26,6 +25,8 @@
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
"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",
@@ -46,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.",
@@ -59,10 +60,10 @@
"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"],
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów","%n bajtów"],
"Favorited" : "Ulubiony",
"Favorite" : "Ulubione",
"Copy local link" : "Kopiowanie lokalnego linku",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 72848f4ff9a..34fca8819b6 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",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
@@ -62,7 +62,7 @@ OC.L10N.register(
"Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincide com '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincidem com '{filter}'"],
"View in folder" : "Exibir na pasta",
"Path" : "Caminho",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 95f6bca564c..aa783480953 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",
@@ -27,6 +26,7 @@
"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",
@@ -60,7 +60,7 @@
"Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincide com '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincidem com '{filter}'"],
"View in folder" : "Exibir na pasta",
"Path" : "Caminho",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index c2f706df6e1..1222778d596 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.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" : "Невозможно найти файл",
@@ -29,6 +28,7 @@ OC.L10N.register(
"Disconnect storage" : "Отсоединить хранилище",
"Unshare" : "Закрыть доступ",
"Could not load info for file \"{file}\"" : "Не удаётся загрузить информацию для файла \"{file}\"",
+ "Files" : "Файлы",
"Details" : "Подробно",
"Select" : "Выбрать",
"Pending" : "Ожидается",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index 6fb5cdb7509..c835f8c16cd 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Хранилище временно недоступно",
"Storage invalid" : "Хранилище неисправно",
"Unknown error" : "Неизвестная ошибка",
- "Files" : "Файлы",
"All files" : "Все файлы",
"Recent" : "Недавние",
"File could not be found" : "Невозможно найти файл",
@@ -27,6 +26,7 @@
"Disconnect storage" : "Отсоединить хранилище",
"Unshare" : "Закрыть доступ",
"Could not load info for file \"{file}\"" : "Не удаётся загрузить информацию для файла \"{file}\"",
+ "Files" : "Файлы",
"Details" : "Подробно",
"Select" : "Выбрать",
"Pending" : "Ожидается",
diff --git a/apps/files/l10n/sk_SK.js b/apps/files/l10n/sk_SK.js
index eab25004bb3..370bb0626f5 100644
--- a/apps/files/l10n/sk_SK.js
+++ b/apps/files/l10n/sk_SK.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Úložisko je dočasne nedostupné",
"Storage invalid" : "Úložisko nie je platné",
"Unknown error" : "Neznáma chyba",
- "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ť",
@@ -28,6 +27,8 @@ OC.L10N.register(
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
"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á",
@@ -107,6 +108,8 @@ OC.L10N.register(
"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",
@@ -122,6 +125,7 @@ OC.L10N.register(
"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",
@@ -144,6 +148,12 @@ OC.L10N.register(
"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.",
diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json
index 7a920a37d1b..9a548bdc382 100644
--- a/apps/files/l10n/sk_SK.json
+++ b/apps/files/l10n/sk_SK.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Úložisko je dočasne nedostupné",
"Storage invalid" : "Úložisko nie je platné",
"Unknown error" : "Neznáma chyba",
- "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ť",
@@ -26,6 +25,8 @@
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
"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á",
@@ -105,6 +106,8 @@
"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",
@@ -120,6 +123,7 @@
"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",
@@ -142,6 +146,12 @@
"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.",
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index e86a1c83c4f..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,6 +14,7 @@ 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 ...",
"..." : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})",
@@ -23,6 +24,7 @@ OC.L10N.register(
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
+ "Files" : "Datoteke",
"Details" : "Podrobnosti",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index c8c072452b6..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,6 +12,7 @@
"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 ...",
"..." : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})",
@@ -21,6 +22,7 @@
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
+ "Files" : "Datoteke",
"Details" : "Podrobnosti",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js
index 52bf5f7accf..01945763ed4 100644
--- a/apps/files/l10n/sq.js
+++ b/apps/files/l10n/sq.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Depozita përkohësisht nuk është në dispozicion",
"Storage invalid" : "Depozitë e pavlefshme",
"Unknown error" : "Gabim i panjohur",
- "Files" : "Skedar",
"All files" : "Të gjithë skedarët",
"Recent" : "Të fundit",
"File could not be found" : "Skedari s’u gjet dot",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json
index 0ecb279e692..03b0d305d4e 100644
--- a/apps/files/l10n/sq.json
+++ b/apps/files/l10n/sq.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Depozita përkohësisht nuk është në dispozicion",
"Storage invalid" : "Depozitë e pavlefshme",
"Unknown error" : "Gabim i panjohur",
- "Files" : "Skedar",
"All files" : "Të gjithë skedarët",
"Recent" : "Të fundit",
"File could not be found" : "Skedari s’u gjet dot",
@@ -27,6 +26,7 @@
"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",
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index a3dbb702802..001fc6b07b8 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -4,7 +4,6 @@ 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" : "Senaste",
"File could not be found" : "Fil kunde inte hittas",
@@ -29,6 +28,7 @@ OC.L10N.register(
"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",
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index dbee5345bf0..62e44c6c28e 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -2,7 +2,6 @@
"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" : "Senaste",
"File could not be found" : "Fil kunde inte hittas",
@@ -27,6 +26,7 @@
"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",
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index 7ad07fda5d8..c41250c07f5 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"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ı",
@@ -27,6 +26,7 @@ OC.L10N.register(
"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",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index 7800895c41a..b612817deab 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -2,7 +2,6 @@
"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ı",
@@ -25,6 +24,7 @@
"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",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 0a8e66d18c9..b36f8fbdf6b 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -1,10 +1,9 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "存储暂时不可用",
+ "Storage is temporarily not available" : "存储空间暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
- "Files" : "文件",
"All files" : "全部文件",
"Recent" : "最近",
"File could not be found" : "文件未找到",
@@ -13,8 +12,8 @@ OC.L10N.register(
"Favorites" : "收藏",
"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}",
+ "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..." : "正在上传...",
@@ -28,7 +27,8 @@ OC.L10N.register(
"Delete" : "删除",
"Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
- "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息",
+ "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息",
+ "Files" : "文件",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
@@ -42,17 +42,17 @@ OC.L10N.register(
"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}\", 因为其已经存在",
+ "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 file_::_%n files_" : ["%n 个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
- "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
+ "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
"You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"New" : "新建",
@@ -78,27 +78,27 @@ 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} 移动",
+ "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 changed {file}" : "您更改了 {file}",
+ "{user} changed {file}" : "{user} 更改了 {file}",
"You deleted {file}" : "您删除了{file}",
- "{user} deleted {file}" : "{user} 删除了 {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}",
+ "{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 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>",
@@ -131,7 +131,7 @@ OC.L10N.register(
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
"Unable to set upload directory." : "无法设置上传文件夹.",
- "Invalid Token" : "无效密匙",
+ "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 设置的值",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index 26ed83ac15c..f8974ac9a5a 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -1,8 +1,7 @@
{ "translations": {
- "Storage is temporarily not available" : "存储暂时不可用",
+ "Storage is temporarily not available" : "存储空间暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
- "Files" : "文件",
"All files" : "全部文件",
"Recent" : "最近",
"File could not be found" : "文件未找到",
@@ -11,8 +10,8 @@
"Favorites" : "收藏",
"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}",
+ "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..." : "正在上传...",
@@ -26,7 +25,8 @@
"Delete" : "删除",
"Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
- "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息",
+ "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息",
+ "Files" : "文件",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
@@ -40,17 +40,17 @@
"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}\", 因为其已经存在",
+ "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 file_::_%n files_" : ["%n 个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
- "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
+ "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
"You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"New" : "新建",
@@ -76,27 +76,27 @@
"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} 移动",
+ "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 changed {file}" : "您更改了 {file}",
+ "{user} changed {file}" : "{user} 更改了 {file}",
"You deleted {file}" : "您删除了{file}",
- "{user} deleted {file}" : "{user} 删除了 {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}",
+ "{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 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>",
@@ -129,7 +129,7 @@
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
"Unable to set upload directory." : "无法设置上传文件夹.",
- "Invalid Token" : "无效密匙",
+ "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 设置的值",
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 586dea220b4..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" : "找不到檔案",
@@ -23,6 +22,7 @@ OC.L10N.register(
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
"Unshare" : "取消分享",
+ "Files" : "檔案",
"Details" : "詳細資料",
"Select" : "選擇",
"Pending" : "等候中",
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index 5a9f5c698b6..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" : "找不到檔案",
@@ -21,6 +20,7 @@
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
"Unshare" : "取消分享",
+ "Files" : "檔案",
"Details" : "詳細資料",
"Select" : "選擇",
"Pending" : "等候中",
diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php
index ae303034610..3efab382640 100644
--- a/apps/files/lib/Activity/Provider.php
+++ b/apps/files/lib/Activity/Provider.php
@@ -103,7 +103,7 @@ class Provider implements IProvider {
* @since 11.0.0
*/
public function parseShortVersion(IEvent $event, IEvent $previousEvent = null) {
- $parsedParameters = $this->getParameters($event->getSubject(), $event->getSubjectParameters());
+ $parsedParameters = $this->getParameters($event);
if ($event->getSubject() === 'created_by') {
$subject = $this->l->t('Created by {user}');
@@ -128,9 +128,7 @@ class Provider implements IProvider {
$this->setSubjects($event, $subject, $parsedParameters);
- $event = $this->eventMerger->mergeEvents('user', $event, $previousEvent);
-
- return $event;
+ return $this->eventMerger->mergeEvents('user', $event, $previousEvent);
}
/**
@@ -141,7 +139,7 @@ class Provider implements IProvider {
* @since 11.0.0
*/
public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) {
- $parsedParameters = $this->getParameters($event->getSubject(), $event->getSubjectParameters());
+ $parsedParameters = $this->getParameters($event);
if ($event->getSubject() === 'created_self') {
$subject = $this->l->t('You created {file}');
@@ -211,44 +209,65 @@ class Provider implements IProvider {
->setRichSubject($subject, $parameters);
}
- protected function getParameters($subject, array $parameters) {
- switch ($subject) {
+ /**
+ * @param IEvent $event
+ * @return array
+ * @throws \InvalidArgumentException
+ */
+ protected function getParameters(IEvent $event) {
+ $parameters = $event->getSubjectParameters();
+ switch ($event->getSubject()) {
case 'created_self':
case 'created_public':
case 'changed_self':
case 'deleted_self':
case 'restored_self':
return [
- 'file' => $this->getRichFileParameter($parameters[0]),
+ 'file' => $this->getFile($parameters[0], $event),
];
case 'created_by':
case 'changed_by':
case 'deleted_by':
case 'restored_by':
return [
- 'file' => $this->getRichFileParameter($parameters[0]),
- 'user' => $this->getRichUserParameter($parameters[1]),
+ 'file' => $this->getFile($parameters[0], $event),
+ 'user' => $this->getUser($parameters[1]),
];
case 'renamed_self':
case 'moved_self':
return [
- 'newfile' => $this->getRichFileParameter($parameters[0]),
- 'oldfile' => $this->getRichFileParameter($parameters[1]),
+ 'newfile' => $this->getFile($parameters[0]),
+ 'oldfile' => $this->getFile($parameters[1]),
];
case 'renamed_by':
case 'moved_by':
return [
- 'newfile' => $this->getRichFileParameter($parameters[0]),
- 'user' => $this->getRichUserParameter($parameters[1]),
- 'oldfile' => $this->getRichFileParameter($parameters[2]),
+ 'newfile' => $this->getFile($parameters[0]),
+ 'user' => $this->getUser($parameters[1]),
+ 'oldfile' => $this->getFile($parameters[2]),
];
}
return [];
}
- protected function getRichFileParameter($parameter) {
- $path = reset($parameter);
- $id = key($parameter);
+ /**
+ * @param array|string $parameter
+ * @param IEvent|null $event
+ * @return array
+ * @throws \InvalidArgumentException
+ */
+ protected function getFile($parameter, IEvent $event = null) {
+ if (is_array($parameter)) {
+ $path = reset($parameter);
+ $id = (string) key($parameter);
+ } else if ($event !== null) {
+ // Legacy from before ownCloud 8.2
+ $path = $parameter;
+ $id = $event->getObjectId();
+ } else {
+ throw new \InvalidArgumentException('Could not generate file parameter');
+ }
+
return [
'type' => 'file',
'id' => $id,
@@ -258,7 +277,11 @@ class Provider implements IProvider {
];
}
- protected function getRichUserParameter($uid) {
+ /**
+ * @param string $uid
+ * @return array
+ */
+ protected function getUser($uid) {
if (!isset($this->displayNames[$uid])) {
$this->displayNames[$uid] = $this->getDisplayName($uid);
}
diff --git a/apps/files/tests/Activity/ProviderTest.php b/apps/files/tests/Activity/ProviderTest.php
new file mode 100644
index 00000000000..6cb89961a1b
--- /dev/null
+++ b/apps/files/tests/Activity/ProviderTest.php
@@ -0,0 +1,208 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files\Tests\Activity;
+
+
+use OCA\Files\Activity\Provider;
+use OCP\Activity\IEvent;
+use OCP\Activity\IEventMerger;
+use OCP\Activity\IManager;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\L10N\IFactory;
+use Test\TestCase;
+
+/**
+ * Class ProviderTest
+ *
+ * @package OCA\Files\Tests\Activity
+ */
+class ProviderTest extends TestCase {
+
+ /** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */
+ protected $l10nFactory;
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ protected $url;
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $activityManager;
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userManager;
+ /** @var IEventMerger|\PHPUnit_Framework_MockObject_MockObject */
+ protected $eventMerger;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->l10nFactory = $this->createMock(IFactory::class);
+ $this->url = $this->createMock(IURLGenerator::class);
+ $this->activityManager = $this->createMock(IManager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->eventMerger = $this->createMock(IEventMerger::class);
+ }
+
+ /**
+ * @param string[] $methods
+ * @return Provider|\PHPUnit_Framework_MockObject_MockObject
+ */
+ protected function getProvider(array $methods = []) {
+ if (!empty($methods)) {
+ return $this->getMockBuilder(Provider::class)
+ ->setConstructorArgs([
+ $this->l10nFactory,
+ $this->url,
+ $this->activityManager,
+ $this->userManager,
+ $this->eventMerger,
+ ])
+ ->setMethods($methods)
+ ->getMock();
+ }
+ return new Provider(
+ $this->l10nFactory,
+ $this->url,
+ $this->activityManager,
+ $this->userManager,
+ $this->eventMerger
+ );
+ }
+
+ public function dataGetFile() {
+ return [
+ [[42 => '/FortyTwo.txt'], null, '42', 'FortyTwo.txt', 'FortyTwo.txt'],
+ [['23' => '/Twenty/Three.txt'], null, '23', 'Three.txt', 'Twenty/Three.txt'],
+ ['/Foo/Bar.txt', '128', '128', 'Bar.txt', 'Foo/Bar.txt'], // Legacy from ownCloud 8.2 and before
+ ];
+ }
+
+ /**
+ * @dataProvider dataGetFile
+ * @param mixed $parameter
+ * @param mixed $eventId
+ * @param int $id
+ * @param string $name
+ * @param string $path
+ */
+ public function testGetFile($parameter, $eventId, $id, $name, $path) {
+ $provider = $this->getProvider();
+
+ if ($eventId !== null) {
+ $event = $this->createMock(IEvent::class);
+ $event->expects($this->once())
+ ->method('getObjectId')
+ ->willReturn($eventId);
+ } else {
+ $event = null;
+ }
+
+ $this->url->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('files.viewcontroller.showFile', ['fileid' => $id])
+ ->willReturn('link-' . $id);
+
+ $result = self::invokePrivate($provider, 'getFile', [$parameter, $event]);
+
+ $this->assertSame('file', $result['type']);
+ $this->assertSame($id, $result['id']);
+ $this->assertSame($name, $result['name']);
+ $this->assertSame($path, $result['path']);
+ $this->assertSame('link-' . $id, $result['link']);
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testGetFileThrows() {
+ $provider = $this->getProvider();
+ self::invokePrivate($provider, 'getFile', ['/Foo/Bar.txt', null]);
+ }
+
+ public function dataGetUser() {
+ return [
+ ['test', [], false, 'Test'],
+ ['foo', ['admin' => 'Admin'], false, 'Bar'],
+ ['admin', ['admin' => 'Administrator'], true, 'Administrator'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataGetUser
+ * @param string $uid
+ * @param array $cache
+ * @param bool $cacheHit
+ * @param string $name
+ */
+ public function testGetUser($uid, $cache, $cacheHit, $name) {
+ $provider = $this->getProvider(['getDisplayName']);
+
+ self::invokePrivate($provider, 'displayNames', [$cache]);
+
+ if (!$cacheHit) {
+ $provider->expects($this->once())
+ ->method('getDisplayName')
+ ->with($uid)
+ ->willReturn($name);
+ } else {
+ $provider->expects($this->never())
+ ->method('getDisplayName');
+ }
+
+ $result = self::invokePrivate($provider, 'getUser', [$uid]);
+ $this->assertSame('user', $result['type']);
+ $this->assertSame($uid, $result['id']);
+ $this->assertSame($name, $result['name']);
+ }
+
+ public function dataGetDisplayName() {
+ return [
+ ['test', true, 'Test'],
+ ['foo', false, 'foo'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataGetDisplayName
+ * @param string $uid
+ * @param string $name
+ */
+ public function testGetDisplayNamer($uid, $validUser, $name) {
+ $provider = $this->getProvider();
+
+ if ($validUser) {
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->once())
+ ->method('getDisplayName')
+ ->willReturn($name);
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with($uid)
+ ->willReturn($user);
+ } else {
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with($uid)
+ ->willReturn(null);
+ }
+
+ $this->assertSame($name, self::invokePrivate($provider, 'getDisplayName', [$uid]));
+ }
+}
diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json
index 84f1e192018..2eab8a8f7b4 100644
--- a/apps/files_external/3rdparty/composer.json
+++ b/apps/files_external/3rdparty/composer.json
@@ -9,7 +9,7 @@
},
"require": {
"icewind/smb": "2.0.0",
- "icewind/streams": "0.4.1"
+ "icewind/streams": "0.5.2"
}
}
diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock
index 305cc8dc4ba..99ef5f94871 100644
--- a/apps/files_external/3rdparty/composer.lock
+++ b/apps/files_external/3rdparty/composer.lock
@@ -4,8 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "a8b4080027a432533f6d0597ad527fe7",
- "content-hash": "8165981792437b03b39c11d28b061eda",
+ "content-hash": "0bbca3fe2d180fbc5681985bdf6b22e7",
"packages": [
{
"name": "icewind/smb",
@@ -46,20 +45,20 @@
}
],
"description": "php wrapper for smbclient and libsmbclient-php",
- "time": "2016-12-13 13:56:55"
+ "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": {
@@ -87,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 ac67d302a18..4626994fd4d 100644
--- a/apps/files_external/3rdparty/composer/ClassLoader.php
+++ b/apps/files_external/3rdparty/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/apps/files_external/3rdparty/composer/autoload_classmap.php b/apps/files_external/3rdparty/composer/autoload_classmap.php
index ba5d06f7011..97f4ce99cda 100644
--- a/apps/files_external/3rdparty/composer/autoload_classmap.php
+++ b/apps/files_external/3rdparty/composer/autoload_classmap.php
@@ -63,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_static.php b/apps/files_external/3rdparty/composer/autoload_static.php
index 10c09bfc409..c1a3a0492d0 100644
--- a/apps/files_external/3rdparty/composer/autoload_static.php
+++ b/apps/files_external/3rdparty/composer/autoload_static.php
@@ -93,8 +93,23 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
'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',
diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json
index bc71c6d0458..8e065858d02 100644
--- a/apps/files_external/3rdparty/composer/installed.json
+++ b/apps/files_external/3rdparty/composer/installed.json
@@ -1,33 +1,33 @@
[
{
- "name": "icewind/streams",
- "version": "0.4.1",
- "version_normalized": "0.4.1.0",
+ "name": "icewind/smb",
+ "version": "v2.0.0",
+ "version_normalized": "2.0.0.0",
"source": {
"type": "git",
- "url": "https://github.com/icewind1991/Streams.git",
- "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac"
+ "url": "https://github.com/icewind1991/SMB.git",
+ "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/Streams/zipball/d3620e8dc410c86c2ba55579803679c4e0b289ac",
- "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
+ "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
"shasum": ""
},
"require": {
- "php": ">=5.3"
+ "icewind/streams": ">=0.2.0",
+ "php": ">=5.4"
},
"require-dev": {
- "phpunit/phpunit": "^4.8",
- "satooshi/php-coveralls": "v1.0.0"
+ "phpunit/phpunit": "^4.8"
},
- "time": "2016-06-02 14:37:52",
+ "time": "2016-12-13T13:56:55+00:00",
"type": "library",
- "installation-source": "dist",
+ "installation-source": "source",
"autoload": {
"psr-4": {
- "Icewind\\Streams\\Tests\\": "tests/",
- "Icewind\\Streams\\": "src/"
+ "Icewind\\SMB\\": "src/",
+ "Icewind\\SMB\\Test\\": "tests/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -40,37 +40,37 @@
"email": "icewind@owncloud.com"
}
],
- "description": "A set of generic stream wrappers"
+ "description": "php wrapper for smbclient and libsmbclient-php"
},
{
- "name": "icewind/smb",
- "version": "v2.0.0",
- "version_normalized": "2.0.0.0",
+ "name": "icewind/streams",
+ "version": "0.5.2",
+ "version_normalized": "0.5.2.0",
"source": {
"type": "git",
- "url": "https://github.com/icewind1991/SMB.git",
- "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a"
+ "url": "https://github.com/icewind1991/Streams.git",
+ "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
- "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
+ "url": "https://api.github.com/repos/icewind1991/Streams/zipball/6bfd2fdbd99319f5e010d0a684409189a562cb1e",
+ "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e",
"shasum": ""
},
"require": {
- "icewind/streams": ">=0.2.0",
- "php": ">=5.4"
+ "php": ">=5.3"
},
"require-dev": {
- "phpunit/phpunit": "^4.8"
+ "phpunit/phpunit": "^4.8",
+ "satooshi/php-coveralls": "v1.0.0"
},
- "time": "2016-12-13 13:56:55",
+ "time": "2016-12-02T14:21:23+00:00",
"type": "library",
- "installation-source": "source",
+ "installation-source": "dist",
"autoload": {
"psr-4": {
- "Icewind\\SMB\\": "src/",
- "Icewind\\SMB\\Test\\": "tests/"
+ "Icewind\\Streams\\Tests\\": "tests/",
+ "Icewind\\Streams\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -83,6 +83,6 @@
"email": "icewind@owncloud.com"
}
],
- "description": "php wrapper for smbclient and libsmbclient-php"
+ "description": "A set of generic stream wrappers"
}
]
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/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/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/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/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 8482b8b25ed..3f6a48d2e22 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -12,8 +12,7 @@ External storage can be configured using the GUI or at the command line. This se
<documentation>
<admin>admin-external-storage</admin>
</documentation>
- <rememberlogin>false</rememberlogin>
- <version>1.2.0</version>
+ <version>1.3.0</version>
<types>
<filesystem/>
</types>
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/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js
index 1dbb8d0bb47..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",
diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json
index 06141581b71..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",
diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js
index b5af26264ac..94a295bce7c 100644
--- a/apps/files_external/l10n/el.js
+++ b/apps/files_external/l10n/el.js
@@ -97,6 +97,7 @@ OC.L10N.register(
"Scope" : "Εύρος",
"Enable encryption" : "Ενεργοποίηση κρυπτογράφησης",
"Enable previews" : "Ενεργοποίηση προεπισκοπήσεων",
+ "Enable sharing" : "Ενεργοποίηση διαμοιρασμού",
"Check for changes" : "Έλεγχος για αλλαγές",
"Never" : "Ποτέ",
"Once every direct access" : "Σε κάθε απευθείας πρόσβαση",
diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json
index 03e56cfba5c..db584e776ef 100644
--- a/apps/files_external/l10n/el.json
+++ b/apps/files_external/l10n/el.json
@@ -95,6 +95,7 @@
"Scope" : "Εύρος",
"Enable encryption" : "Ενεργοποίηση κρυπτογράφησης",
"Enable previews" : "Ενεργοποίηση προεπισκοπήσεων",
+ "Enable sharing" : "Ενεργοποίηση διαμοιρασμού",
"Check for changes" : "Έλεγχος για αλλαγές",
"Never" : "Ποτέ",
"Once every direct access" : "Σε κάθε απευθείας πρόσβαση",
diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js
index 3de899ef466..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",
diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json
index cb5e0f486e2..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",
diff --git a/apps/files_external/l10n/is.js b/apps/files_external/l10n/is.js
index 13836b83147..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",
diff --git a/apps/files_external/l10n/is.json b/apps/files_external/l10n/is.json
index c60d621f7d9..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",
diff --git a/apps/files_external/l10n/pl.js b/apps/files_external/l10n/pl.js
index 9467d73d0f1..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,7 @@ 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",
@@ -57,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",
diff --git a/apps/files_external/l10n/pl.json b/apps/files_external/l10n/pl.json
index e058ad41707..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,7 @@
"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",
@@ -55,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",
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/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/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 7ffc078df6f..690f8e2a334 100644
--- a/apps/files_external/lib/Lib/Storage/SMB.php
+++ b/apps/files_external/lib/Lib/Storage/SMB.php
@@ -46,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;
@@ -149,7 +152,7 @@ class SMB extends Common implements INotifyStorage {
foreach ($files as $file) {
$this->statCache[$path . '/' . $file->getName()] = $file;
}
- return array_filter($files, function(IFileInfo $file) {
+ return array_filter($files, function (IFileInfo $file) {
return !$file->isHidden();
});
} catch (ConnectException $e) {
@@ -486,48 +489,18 @@ class SMB extends Common implements INotifyStorage {
}
public function listen($path, callable $callback) {
- $fullPath = $this->buildPath($path);
- $oldRenamePath = null;
- $this->share->notify($fullPath)->listen(function (Change $change) use (&$oldRenamePath, $callback) {
- $path = $this->relativePath($change->getPath());
- if (is_null($path)) {
- return true;
- }
- if ($change->getCode() === INotifyHandler::NOTIFY_RENAMED_OLD) {
- $oldRenamePath = $path;
- return true;
- }
- $type = $this->mapNotifyType($change->getCode());
- if (is_null($type)) {
- return true;
- }
- if ($type === INotifyStorage::NOTIFY_RENAMED) {
- if (!is_null($oldRenamePath)) {
- $result = $callback($type, $oldRenamePath, $path);
- $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 INotifyHandler::NOTIFY_ADDED:
- return INotifyStorage::NOTIFY_ADDED;
- case INotifyHandler::NOTIFY_REMOVED:
- return INotifyStorage::NOTIFY_REMOVED;
- case INotifyHandler::NOTIFY_MODIFIED:
- case INotifyHandler::NOTIFY_ADDED_STREAM:
- case INotifyHandler::NOTIFY_MODIFIED_STREAM:
- case INotifyHandler::NOTIFY_REMOVED_STREAM:
- return INotifyStorage::NOTIFY_MODIFIED;
- case INotifyHandler::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/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/Command/ListCommandTest.php b/apps/files_external/tests/Command/ListCommandTest.php
index 5563b19c7a8..76a8f98f520 100644
--- a/apps/files_external/tests/Command/ListCommandTest.php
+++ b/apps/files_external/tests/Command/ListCommandTest.php
@@ -31,25 +31,27 @@ 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 */
+ /** @var GlobalStoragesService|PHPUnit_Framework_MockObject_MockObject $globalService */
$globalService = $this->createMock(GlobalStoragesService::class);
- /** @var \OCA\Files_External\Service\UserStoragesService|\PHPUnit_Framework_MockObject_MockObject $userService */
+ /** @var UserStoragesService|PHPUnit_Framework_MockObject_MockObject $userService */
$userService = $this->createMock(UserStoragesService::class);
- /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject $userManager */
+ /** @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);
@@ -64,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/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_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index 322efdb6c00..e93bc99d540 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -3,8 +3,8 @@
<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>
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/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index 4dff7b988e4..9e09cb63a11 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"Sharing" : "Sdílení",
"File shares" : "Sdílení souboru",
"Downloaded via public link" : "Staženo pomocí veřejného odkazu",
- "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",
- "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "Public link expired" : "Veřejný odkaz vypršel",
"{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>",
@@ -146,9 +112,11 @@ OC.L10N.register(
"%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",
@@ -158,6 +126,7 @@ OC.L10N.register(
"%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",
"Shared with %2$s" : "Sdíleno s %2$s",
"Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"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í"
+ "Shares" : "Sdílení",
+ "Downloaded by %1$s" : "Stáhnul(o) %1$s",
+ "%1$s downloaded via public link" : "%1$s stažen pomocí veřejného odkazu",
+ "%1$s downloaded %2$s" : "%1$s stáhl(a) %2$s",
+ "Shared with group %1$s" : "Sdíleno se skupinou %1$s",
+ "Removed share for group %1$s" : "Odstraněno sdílení pro skupinu %1$s",
+ "%2$s shared with group %1$s" : "%2$s sdílel se skupinou %1$s",
+ "%2$s removed share for group %1$s" : "%2$s odstranil(a) sdílení pro skupinu %1$s",
+ "You removed group %2$s from %1$s" : "Z %1$s jste odstranil(a) skupinu %2$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s sdílel %1$s se skupinou %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s odstranil(a) z %1$s skupinu %2$s",
+ "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "%1$s removed public link" : "%1$s odstranil(a) veřejný odkaz",
+ "You shared %1$s as public link" : "Sdílel(a) jste %1$s jako veřejný odkaz",
+ "You removed public link for %1$s" : "Odstranil(a) jste veřejný odkaz pro %1$s",
+ "%2$s shared %1$s as public link" : "%2$s sdílel(a) %1$s jako veřejný odkaz",
+ "%2$s removed public link for %1$s" : "%2$s odstranil veřejný odkaz z %1$s",
+ "%1$s accepted the remote share" : "%1$s přijal(a) vzdálené sdílení",
+ "%1$s declined the remote share" : "%1$s odmítl(a) 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s přijal(a) vzdálené sdílení %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s odmítl vzdálené sdílení %1$s",
+ "%2$s unshared %1$s from you" : "%2$s s vámi přestal(a) sdílet %1$s",
+ "Shared with %1$s" : "Sdíleno s %1$s",
+ "Removed share for %1$s" : "Odstraněno sdílení %1$s",
+ "%2$s shared with %1$s" : "%2$s sdíleno s %1$s",
+ "%2$s removed share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "Shared by %1$s" : "Sdíleno %1$s",
+ "%1$s removed share" : "%1$s odstranil(a) sdílení",
+ "You removed %2$s from %1$s" : "Odstranil(a) jste %2$s z %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s s %2$s sdílel(a) %1$s",
+ "%3$s removed %2$s from %1$s" : "%3$s odstranil(a) %2$s z %1$s",
+ "%2$s removed you from %1$s" : "%2$s vás odstranil(a) z %1$s"
},
"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 a96d2fd6f7e..9d86d08a921 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -18,76 +18,42 @@
"Sharing" : "Sdílení",
"File shares" : "Sdílení souboru",
"Downloaded via public link" : "Staženo pomocí veřejného odkazu",
- "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",
- "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "Public link expired" : "Veřejný odkaz vypršel",
"{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>",
@@ -144,9 +110,11 @@
"%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",
@@ -156,6 +124,7 @@
"%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",
"Shared with %2$s" : "Sdíleno s %2$s",
"Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
@@ -168,9 +137,40 @@
"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í"
+ "Shares" : "Sdílení",
+ "Downloaded by %1$s" : "Stáhnul(o) %1$s",
+ "%1$s downloaded via public link" : "%1$s stažen pomocí veřejného odkazu",
+ "%1$s downloaded %2$s" : "%1$s stáhl(a) %2$s",
+ "Shared with group %1$s" : "Sdíleno se skupinou %1$s",
+ "Removed share for group %1$s" : "Odstraněno sdílení pro skupinu %1$s",
+ "%2$s shared with group %1$s" : "%2$s sdílel se skupinou %1$s",
+ "%2$s removed share for group %1$s" : "%2$s odstranil(a) sdílení pro skupinu %1$s",
+ "You removed group %2$s from %1$s" : "Z %1$s jste odstranil(a) skupinu %2$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s sdílel %1$s se skupinou %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s odstranil(a) z %1$s skupinu %2$s",
+ "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "%1$s removed public link" : "%1$s odstranil(a) veřejný odkaz",
+ "You shared %1$s as public link" : "Sdílel(a) jste %1$s jako veřejný odkaz",
+ "You removed public link for %1$s" : "Odstranil(a) jste veřejný odkaz pro %1$s",
+ "%2$s shared %1$s as public link" : "%2$s sdílel(a) %1$s jako veřejný odkaz",
+ "%2$s removed public link for %1$s" : "%2$s odstranil veřejný odkaz z %1$s",
+ "%1$s accepted the remote share" : "%1$s přijal(a) vzdálené sdílení",
+ "%1$s declined the remote share" : "%1$s odmítl(a) 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s přijal(a) vzdálené sdílení %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s odmítl vzdálené sdílení %1$s",
+ "%2$s unshared %1$s from you" : "%2$s s vámi přestal(a) sdílet %1$s",
+ "Shared with %1$s" : "Sdíleno s %1$s",
+ "Removed share for %1$s" : "Odstraněno sdílení %1$s",
+ "%2$s shared with %1$s" : "%2$s sdíleno s %1$s",
+ "%2$s removed share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "Shared by %1$s" : "Sdíleno %1$s",
+ "%1$s removed share" : "%1$s odstranil(a) sdílení",
+ "You removed %2$s from %1$s" : "Odstranil(a) jste %2$s z %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s s %2$s sdílel(a) %1$s",
+ "%3$s removed %2$s from %1$s" : "%3$s odstranil(a) %2$s z %1$s",
+ "%2$s removed you from %1$s" : "%2$s vás odstranil(a) z %1$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_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index be95fb9cbca..edd9d757be9 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -20,80 +20,49 @@ OC.L10N.register(
"Sharing" : "Teilen",
"File shares" : "Dateifreigaben",
"Downloaded via public link" : "Heruntergeladen mittels öffentlichen Link",
- "Downloaded by %1$s" : "Heruntergeladen von %1$s",
"Downloaded by {email}" : "Heruntergeladen von {email}",
- "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
"{file} downloaded via public link" : "{file} heruntergeladen mittels öffentlichen Link",
- "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
"{email} downloaded {file}" : "{email} hat {file} heruntergeladen",
- "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
"Shared with group {group}" : "Geteilt mit der Gruppe {group}",
- "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
"Removed share for group {group}" : "Freigabe für die Gruppe {group} entfernt",
- "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
"{actor} shared with group {group}" : "{actor} geteilt mit der Gruppe {group}",
- "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
"{actor} removed share for group {group}" : "{actor} hat die Freigabe für die Gruppe {group} entfernt",
- "You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt",
"You shared {file} with group {group}" : "Du hast {file} mit der Gruppe {group} geteilt",
- "You removed group %2$s from %1$s" : "Du hast die Gruppe %2$s von %1$s entfernt",
"You removed group {group} from {file}" : "Du hast die Gruppe {group} von {file} entfernt",
- "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
"{actor} shared {file} with group {group}" : "{actor} hat {file} mit der Gruppe {group} geteilt",
- "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
"{actor} removed group {group} from {file}" : "{actor} hat die Gruppe {group} von {file} entfernt",
"Shared as public link" : "Als öffentlichen Link geteilt",
"Removed public link" : "Öffentlichen Link entfernt",
- "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "Public link expired" : "öffentlicher Link ist abgelaufen",
"{actor} shared as public link" : "{actor} hat einen öffentlichen Link geteilt",
- "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
"{actor} removed public link" : "{actor} hat einen öffentlichen Link entfernt",
- "You shared %1$s as public link" : "Du hast %1$s über einen öffentlichen Link geteilt",
+ "Public link of {actor} expired" : "Öffentlicher Link von {actor} ist abgelaufen",
"You shared {file} as public link" : "Du hast {file} über einen öffentlichen Link geteilt",
- "You removed public link for %1$s" : "Du hast die öffentliche Freigabe für %1$s entfernt",
"You removed public link for {file}" : "Du hast die öffentliche Freigabe für {file} entfernt",
- "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "Public link expired for {file}" : "Öffentlicher Link für {file} ist abgelaufen",
"{actor} shared {file} as public link" : "{actor} hat {file} über einen öffentlichen Link geteilt",
- "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"{actor} removed public link for {file}" : "{actor} hat einen öffentlichen Link {file} entfernt",
- "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "Public link of {actor} for {file} expired" : "Öffentlicher Link von {actor} für {file} ist abgelaufen",
"{user} accepted the remote share" : "{user} hat die Remotefreigabe akzeptiert",
- "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
"{user} declined the remote share" : "{user} hat die Remotefreigabe abgelehnt",
- "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
"You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten",
- "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
"{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert",
- "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
"{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt",
- "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit dir",
"{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit dir",
- "Shared with %1$s" : "Geteilt mit %1$s",
"Shared with {user}" : "Geteilt mit {user}",
- "Removed share for %1$s" : "Freigabe für %1$s entfernt",
"Removed share for {user}" : "Freigabe für {user} entfernt",
- "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
"{actor} shared with {user}" : "{actor} hat mit {user} geteilt",
- "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"{actor} removed share for {user}" : "{actor} hat die Freigabe für {user} entfernt",
- "Shared by %1$s" : "Geteilt von %1$s",
"Shared by {actor}" : "Geteilt von {actor}",
- "%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" : "Du hast %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",
"{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 dir geteilt",
"{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 +107,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",
@@ -146,9 +115,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Dich 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",
+ "You shared %1$s with %2$s" : "Du hast %1$s mit %2$s geteilt",
"%2$s shared %1$s with %3$s" : "%2$s geteilt %1$s mit %3$s",
"You removed the share of %2$s for %1$s" : "Du hast 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 der %3$s für %1$s entfernt",
+ "You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt",
"%2$s shared %1$s with group %3$s" : "%2$s hat %1$s mit Gruppe %3$s geteilt",
"You removed the share of group %2$s for %1$s" : "Du hast die Freigabe der Gruppe %2$s für %1$s entfernt",
"%2$s removed the share of group %3$s for %1$s" : "%2$s hat die Freigabe der Gruppe %3$s für %1$s entfernt",
@@ -158,6 +129,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"Your public link for %1$s expired" : "Dein öffentlicher Link für %1$s ist abgelaufen",
"The public link of %2$s for %1$s expired" : "Der öffentliche Link von %2$s für %1$s ist abgelaufen",
+ "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt",
"%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"Shared with %2$s" : "Geteilt mit %2$s",
"Shared with %3$s by %2$s" : "Geteilt mit %3$s von %2$s",
@@ -170,9 +142,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Geteilt mittels Link von %2$s",
"Shared via public link" : "Geteilt mittels öffentlichem Link",
"%2$s removed public link" : "%2$s hat den ö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" : "Freigaben"
+ "Shares" : "Freigaben",
+ "Downloaded by %1$s" : "Heruntergeladen von %1$s",
+ "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
+ "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
+ "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
+ "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
+ "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
+ "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
+ "You removed group %2$s from %1$s" : "Du hast die Gruppe %2$s von %1$s entfernt",
+ "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
+ "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
+ "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
+ "You shared %1$s as public link" : "Du hast %1$s über einen öffentlichen Link geteilt",
+ "You removed public link for %1$s" : "Du hast die öffentliche Freigabe für %1$s entfernt",
+ "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
+ "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
+ "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
+ "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
+ "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
+ "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit dir",
+ "Shared with %1$s" : "Geteilt mit %1$s",
+ "Removed share for %1$s" : "Freigabe für %1$s entfernt",
+ "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
+ "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
+ "Shared by %1$s" : "Geteilt von %1$s",
+ "%1$s removed share" : "%1$s hat die Freigabe entfernt",
+ "You removed %2$s from %1$s" : "Sie haben die %2$s von %1$s entfernt",
+ "%3$s shared %1$s with %2$s" : "%3$s geteilt %1$s mit %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s hat %2$s von %1$s entfernt",
+ "%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index fe75914067f..487722d420d 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -18,80 +18,49 @@
"Sharing" : "Teilen",
"File shares" : "Dateifreigaben",
"Downloaded via public link" : "Heruntergeladen mittels öffentlichen Link",
- "Downloaded by %1$s" : "Heruntergeladen von %1$s",
"Downloaded by {email}" : "Heruntergeladen von {email}",
- "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
"{file} downloaded via public link" : "{file} heruntergeladen mittels öffentlichen Link",
- "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
"{email} downloaded {file}" : "{email} hat {file} heruntergeladen",
- "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
"Shared with group {group}" : "Geteilt mit der Gruppe {group}",
- "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
"Removed share for group {group}" : "Freigabe für die Gruppe {group} entfernt",
- "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
"{actor} shared with group {group}" : "{actor} geteilt mit der Gruppe {group}",
- "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
"{actor} removed share for group {group}" : "{actor} hat die Freigabe für die Gruppe {group} entfernt",
- "You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt",
"You shared {file} with group {group}" : "Du hast {file} mit der Gruppe {group} geteilt",
- "You removed group %2$s from %1$s" : "Du hast die Gruppe %2$s von %1$s entfernt",
"You removed group {group} from {file}" : "Du hast die Gruppe {group} von {file} entfernt",
- "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
"{actor} shared {file} with group {group}" : "{actor} hat {file} mit der Gruppe {group} geteilt",
- "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
"{actor} removed group {group} from {file}" : "{actor} hat die Gruppe {group} von {file} entfernt",
"Shared as public link" : "Als öffentlichen Link geteilt",
"Removed public link" : "Öffentlichen Link entfernt",
- "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "Public link expired" : "öffentlicher Link ist abgelaufen",
"{actor} shared as public link" : "{actor} hat einen öffentlichen Link geteilt",
- "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
"{actor} removed public link" : "{actor} hat einen öffentlichen Link entfernt",
- "You shared %1$s as public link" : "Du hast %1$s über einen öffentlichen Link geteilt",
+ "Public link of {actor} expired" : "Öffentlicher Link von {actor} ist abgelaufen",
"You shared {file} as public link" : "Du hast {file} über einen öffentlichen Link geteilt",
- "You removed public link for %1$s" : "Du hast die öffentliche Freigabe für %1$s entfernt",
"You removed public link for {file}" : "Du hast die öffentliche Freigabe für {file} entfernt",
- "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "Public link expired for {file}" : "Öffentlicher Link für {file} ist abgelaufen",
"{actor} shared {file} as public link" : "{actor} hat {file} über einen öffentlichen Link geteilt",
- "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"{actor} removed public link for {file}" : "{actor} hat einen öffentlichen Link {file} entfernt",
- "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "Public link of {actor} for {file} expired" : "Öffentlicher Link von {actor} für {file} ist abgelaufen",
"{user} accepted the remote share" : "{user} hat die Remotefreigabe akzeptiert",
- "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
"{user} declined the remote share" : "{user} hat die Remotefreigabe abgelehnt",
- "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
"You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten",
- "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
"{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert",
- "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
"{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt",
- "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit dir",
"{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit dir",
- "Shared with %1$s" : "Geteilt mit %1$s",
"Shared with {user}" : "Geteilt mit {user}",
- "Removed share for %1$s" : "Freigabe für %1$s entfernt",
"Removed share for {user}" : "Freigabe für {user} entfernt",
- "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
"{actor} shared with {user}" : "{actor} hat mit {user} geteilt",
- "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"{actor} removed share for {user}" : "{actor} hat die Freigabe für {user} entfernt",
- "Shared by %1$s" : "Geteilt von %1$s",
"Shared by {actor}" : "Geteilt von {actor}",
- "%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" : "Du hast %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",
"{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 dir geteilt",
"{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 +105,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",
@@ -144,9 +113,11 @@
"%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Dich 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",
+ "You shared %1$s with %2$s" : "Du hast %1$s mit %2$s geteilt",
"%2$s shared %1$s with %3$s" : "%2$s geteilt %1$s mit %3$s",
"You removed the share of %2$s for %1$s" : "Du hast 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 der %3$s für %1$s entfernt",
+ "You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt",
"%2$s shared %1$s with group %3$s" : "%2$s hat %1$s mit Gruppe %3$s geteilt",
"You removed the share of group %2$s for %1$s" : "Du hast die Freigabe der Gruppe %2$s für %1$s entfernt",
"%2$s removed the share of group %3$s for %1$s" : "%2$s hat die Freigabe der Gruppe %3$s für %1$s entfernt",
@@ -156,6 +127,7 @@
"%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"Your public link for %1$s expired" : "Dein öffentlicher Link für %1$s ist abgelaufen",
"The public link of %2$s for %1$s expired" : "Der öffentliche Link von %2$s für %1$s ist abgelaufen",
+ "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt",
"%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"Shared with %2$s" : "Geteilt mit %2$s",
"Shared with %3$s by %2$s" : "Geteilt mit %3$s von %2$s",
@@ -168,9 +140,40 @@
"Shared via link by %2$s" : "Geteilt mittels Link von %2$s",
"Shared via public link" : "Geteilt mittels öffentlichem Link",
"%2$s removed public link" : "%2$s hat den ö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" : "Freigaben"
+ "Shares" : "Freigaben",
+ "Downloaded by %1$s" : "Heruntergeladen von %1$s",
+ "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
+ "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
+ "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
+ "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
+ "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
+ "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
+ "You removed group %2$s from %1$s" : "Du hast die Gruppe %2$s von %1$s entfernt",
+ "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
+ "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
+ "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
+ "You shared %1$s as public link" : "Du hast %1$s über einen öffentlichen Link geteilt",
+ "You removed public link for %1$s" : "Du hast die öffentliche Freigabe für %1$s entfernt",
+ "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
+ "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
+ "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
+ "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
+ "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
+ "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit dir",
+ "Shared with %1$s" : "Geteilt mit %1$s",
+ "Removed share for %1$s" : "Freigabe für %1$s entfernt",
+ "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
+ "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
+ "Shared by %1$s" : "Geteilt von %1$s",
+ "%1$s removed share" : "%1$s hat die Freigabe entfernt",
+ "You removed %2$s from %1$s" : "Sie haben die %2$s von %1$s entfernt",
+ "%3$s shared %1$s with %2$s" : "%3$s geteilt %1$s mit %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s hat %2$s von %1$s entfernt",
+ "%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt"
},"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 bbfdae37c58..b52fb1e2941 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -20,76 +20,45 @@ OC.L10N.register(
"Sharing" : "Teilen",
"File shares" : "Dateifreigaben",
"Downloaded via public link" : "Über den öffentlichen Link heruntergeladen",
- "Downloaded by %1$s" : "Heruntergeladen von %1$s",
"Downloaded by {email}" : "Heruntergeladen von {email}",
- "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
"{file} downloaded via public link" : "{file} heruntergeladen mittels öffentlichen Link",
- "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
"{email} downloaded {file}" : "{email} hat {file} heruntergeladen",
- "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
"Shared with group {group}" : "Geteilt mit der Gruppe {group}",
- "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
"Removed share for group {group}" : "Freigabe für die Gruppe {group} entfernt",
- "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
"{actor} shared with group {group}" : "{actor} geteilt mit der Gruppe {group}",
- "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
"{actor} removed share for group {group}" : "{actor} hat die Freigabe für die Gruppe {group} entfernt",
- "You shared %1$s with group %2$s" : "Sie haben %1$s mit der Gruppe %2$s geteilt",
"You shared {file} with group {group}" : "Sie haben {file} mit der Gruppe {group} geteilt",
- "You removed group %2$s from %1$s" : "Sie haben die Gruppe %2$s von %1$s entfernt",
"You removed group {group} from {file}" : "Sie haben die Gruppe {group} von {file} entfernt",
- "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
"{actor} shared {file} with group {group}" : "{actor} hat {file} mit der Gruppe {group} geteilt",
- "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
"{actor} removed group {group} from {file}" : "{actor} hat die Gruppe {group} von {file} entfernt",
"Shared as public link" : "Als öffentlichen Link geteilt",
"Removed public link" : "Öffentlichen Link entfernt",
- "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "Public link expired" : "öffentlicher Link ist abgelaufen",
"{actor} shared as public link" : "{actor} hat einen öffentlichen Link geteilt",
- "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
"{actor} removed public link" : "{actor} hat einen öffentlichen Link entfernt",
- "You shared %1$s as public link" : "Sie haben %1$s über einen öffentlichen Link geteilt",
+ "Public link of {actor} expired" : "Öffentlicher Link von {actor} ist abgelaufen",
"You shared {file} as public link" : "Sie haben {file} über einen öffentlichen Link geteilt",
- "You removed public link for %1$s" : "Sie haben die öffentliche Freigabe für %1$s entfernt",
"You removed public link for {file}" : "Sie haben die öffentliche Freigabe für {file} entfernt",
- "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "Public link expired for {file}" : "Öffentlicher Link für {file} ist abgelaufen",
"{actor} shared {file} as public link" : "{actor} hat {file} über einen öffentlichen Link geteilt",
- "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"{actor} removed public link for {file}" : "{actor} hat einen öffentlichen Link {file} entfernt",
- "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "Public link of {actor} for {file} expired" : "Öffentlicher Link von {actor} für {file} ist abgelaufen",
"{user} accepted the remote share" : "{user} hat die Remotefreigabe akzeptiert",
- "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
"{user} declined the remote share" : "{user} hat die Remotefreigabe abgelehnt",
- "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
"You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten",
- "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
"{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert",
- "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
"{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt",
- "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit Ihnen",
"{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit Ihnen",
- "Shared with %1$s" : "Geteilt mit %1$s",
"Shared with {user}" : "Geteilt mit {user}",
- "Removed share for %1$s" : "Freigabe für %1$s entfernt",
"Removed share for {user}" : "Freigabe für {user} entfernt",
- "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
"{actor} shared with {user}" : "{actor} hat mit {user} geteilt",
- "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"{actor} removed share for {user}" : "{actor} hat die Freigabe für {user} entfernt",
- "Shared by %1$s" : "Geteilt von %1$s",
"Shared by {actor}" : "Geteilt von {actor}",
- "%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}" : "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",
"{actor} shared {file} with you" : "{actor} hat {file} mit Ihnen geteilt",
- "%2$s removed you from %1$s" : "Sie wurden durch %2$s von %1$s entfernt",
"{actor} removed you from {file}" : "Sie wurden 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 was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
@@ -97,7 +66,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",
@@ -146,9 +115,11 @@ OC.L10N.register(
"%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 öffentlich geteilte Ordner %1$s wurde heruntergeladen",
"Public shared file %1$s was downloaded" : "Die öffentlich geteilte Datei %1$s wurde heruntergeladen",
+ "You shared %1$s with %2$s" : "Sie haben %1$s mit %2$s geteilt",
"%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",
+ "You shared %1$s with group %2$s" : "Sie haben %1$s mit der Gruppe %2$s geteilt",
"%2$s shared %1$s with group %3$s" : "%2$s hat %1$s mit der Gruppe %3$s geteilt",
"You removed the share of group %2$s for %1$s" : "Sie haben die Freigabe der Gruppe %2$s für %1$s entfernt",
"%2$s removed the share of group %3$s for %1$s" : "%2$s hat die Freigabe der Gruppe %3$s für %1$s entfernt",
@@ -158,6 +129,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"Your public link for %1$s expired" : "Ihre Freigabe als Link für %1$s ist abgelaufen",
"The public link of %2$s for %1$s expired" : "Die Freigabe als Link von %2$s für %1$s ist abgelaufen",
+ "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt",
"%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"Shared with %2$s" : "Geteilt mit %2$s",
"Shared with %3$s by %2$s" : "Geteilt mit %3$s von %2$s",
@@ -170,9 +142,40 @@ OC.L10N.register(
"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 ö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"
+ "Shares" : "Geteiltes",
+ "Downloaded by %1$s" : "Heruntergeladen von %1$s",
+ "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
+ "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
+ "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
+ "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
+ "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
+ "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
+ "You removed group %2$s from %1$s" : "Sie haben die Gruppe %2$s von %1$s entfernt",
+ "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
+ "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
+ "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
+ "You shared %1$s as public link" : "Sie haben %1$s über einen öffentlichen Link geteilt",
+ "You removed public link for %1$s" : "Sie haben die öffentliche Freigabe für %1$s entfernt",
+ "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
+ "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
+ "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
+ "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
+ "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
+ "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit Ihnen",
+ "Shared with %1$s" : "Geteilt mit %1$s",
+ "Removed share for %1$s" : "Freigabe für %1$s entfernt",
+ "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
+ "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
+ "Shared by %1$s" : "Geteilt von %1$s",
+ "%1$s removed share" : "%1$s hat die Freigabe entfernt",
+ "You removed %2$s from %1$s" : "Sie haben %2$s von %1$s entfernt",
+ "%3$s shared %1$s with %2$s" : "%3$s hat %1$s mit %2$s geteilt",
+ "%3$s removed %2$s from %1$s" : "%3$s hat %2$s von %1$s entfernt",
+ "%2$s removed you from %1$s" : "Sie wurden durch %2$s von %1$s entfernt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index e62bb0d816f..6870a2b7d4d 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -18,76 +18,45 @@
"Sharing" : "Teilen",
"File shares" : "Dateifreigaben",
"Downloaded via public link" : "Über den öffentlichen Link heruntergeladen",
- "Downloaded by %1$s" : "Heruntergeladen von %1$s",
"Downloaded by {email}" : "Heruntergeladen von {email}",
- "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
"{file} downloaded via public link" : "{file} heruntergeladen mittels öffentlichen Link",
- "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
"{email} downloaded {file}" : "{email} hat {file} heruntergeladen",
- "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
"Shared with group {group}" : "Geteilt mit der Gruppe {group}",
- "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
"Removed share for group {group}" : "Freigabe für die Gruppe {group} entfernt",
- "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
"{actor} shared with group {group}" : "{actor} geteilt mit der Gruppe {group}",
- "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
"{actor} removed share for group {group}" : "{actor} hat die Freigabe für die Gruppe {group} entfernt",
- "You shared %1$s with group %2$s" : "Sie haben %1$s mit der Gruppe %2$s geteilt",
"You shared {file} with group {group}" : "Sie haben {file} mit der Gruppe {group} geteilt",
- "You removed group %2$s from %1$s" : "Sie haben die Gruppe %2$s von %1$s entfernt",
"You removed group {group} from {file}" : "Sie haben die Gruppe {group} von {file} entfernt",
- "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
"{actor} shared {file} with group {group}" : "{actor} hat {file} mit der Gruppe {group} geteilt",
- "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
"{actor} removed group {group} from {file}" : "{actor} hat die Gruppe {group} von {file} entfernt",
"Shared as public link" : "Als öffentlichen Link geteilt",
"Removed public link" : "Öffentlichen Link entfernt",
- "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "Public link expired" : "öffentlicher Link ist abgelaufen",
"{actor} shared as public link" : "{actor} hat einen öffentlichen Link geteilt",
- "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
"{actor} removed public link" : "{actor} hat einen öffentlichen Link entfernt",
- "You shared %1$s as public link" : "Sie haben %1$s über einen öffentlichen Link geteilt",
+ "Public link of {actor} expired" : "Öffentlicher Link von {actor} ist abgelaufen",
"You shared {file} as public link" : "Sie haben {file} über einen öffentlichen Link geteilt",
- "You removed public link for %1$s" : "Sie haben die öffentliche Freigabe für %1$s entfernt",
"You removed public link for {file}" : "Sie haben die öffentliche Freigabe für {file} entfernt",
- "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "Public link expired for {file}" : "Öffentlicher Link für {file} ist abgelaufen",
"{actor} shared {file} as public link" : "{actor} hat {file} über einen öffentlichen Link geteilt",
- "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"{actor} removed public link for {file}" : "{actor} hat einen öffentlichen Link {file} entfernt",
- "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "Public link of {actor} for {file} expired" : "Öffentlicher Link von {actor} für {file} ist abgelaufen",
"{user} accepted the remote share" : "{user} hat die Remotefreigabe akzeptiert",
- "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
"{user} declined the remote share" : "{user} hat die Remotefreigabe abgelehnt",
- "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
"You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten",
- "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
"{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert",
- "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
"{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt",
- "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit Ihnen",
"{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit Ihnen",
- "Shared with %1$s" : "Geteilt mit %1$s",
"Shared with {user}" : "Geteilt mit {user}",
- "Removed share for %1$s" : "Freigabe für %1$s entfernt",
"Removed share for {user}" : "Freigabe für {user} entfernt",
- "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
"{actor} shared with {user}" : "{actor} hat mit {user} geteilt",
- "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"{actor} removed share for {user}" : "{actor} hat die Freigabe für {user} entfernt",
- "Shared by %1$s" : "Geteilt von %1$s",
"Shared by {actor}" : "Geteilt von {actor}",
- "%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}" : "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",
"{actor} shared {file} with you" : "{actor} hat {file} mit Ihnen geteilt",
- "%2$s removed you from %1$s" : "Sie wurden durch %2$s von %1$s entfernt",
"{actor} removed you from {file}" : "Sie wurden 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 was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
@@ -95,7 +64,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",
@@ -144,9 +113,11 @@
"%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 öffentlich geteilte Ordner %1$s wurde heruntergeladen",
"Public shared file %1$s was downloaded" : "Die öffentlich geteilte Datei %1$s wurde heruntergeladen",
+ "You shared %1$s with %2$s" : "Sie haben %1$s mit %2$s geteilt",
"%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",
+ "You shared %1$s with group %2$s" : "Sie haben %1$s mit der Gruppe %2$s geteilt",
"%2$s shared %1$s with group %3$s" : "%2$s hat %1$s mit der Gruppe %3$s geteilt",
"You removed the share of group %2$s for %1$s" : "Sie haben die Freigabe der Gruppe %2$s für %1$s entfernt",
"%2$s removed the share of group %3$s for %1$s" : "%2$s hat die Freigabe der Gruppe %3$s für %1$s entfernt",
@@ -156,6 +127,7 @@
"%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
"Your public link for %1$s expired" : "Ihre Freigabe als Link für %1$s ist abgelaufen",
"The public link of %2$s for %1$s expired" : "Die Freigabe als Link von %2$s für %1$s ist abgelaufen",
+ "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt",
"%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
"Shared with %2$s" : "Geteilt mit %2$s",
"Shared with %3$s by %2$s" : "Geteilt mit %3$s von %2$s",
@@ -168,9 +140,40 @@
"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 ö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"
+ "Shares" : "Geteiltes",
+ "Downloaded by %1$s" : "Heruntergeladen von %1$s",
+ "%1$s downloaded via public link" : "%1$s heruntergeladen mittels öffentlichen Link",
+ "%1$s downloaded %2$s" : "%1$s hat %2$s heruntergeladen",
+ "Shared with group %1$s" : "Geteilt mit der Gruppe %1$s",
+ "Removed share for group %1$s" : "Freigabe für die Gruppe %1$s entfernt",
+ "%2$s shared with group %1$s" : "%2$s geteilt mit der Gruppe %1$s",
+ "%2$s removed share for group %1$s" : "%2$s hat die Freigabe für die Gruppe %1$s entfernt",
+ "You removed group %2$s from %1$s" : "Sie haben die Gruppe %2$s von %1$s entfernt",
+ "%3$s shared %1$s with group %2$s" : "%3$s hat %1$s mit der Gruppe %2$s geteilt",
+ "%3$s removed group %2$s from %1$s" : "%3$s hat die Gruppe %2$s von %1$s entfernt",
+ "%1$s shared as public link" : "%1$s hat einen öffentlichen Link geteilt",
+ "%1$s removed public link" : "%1$s hat einen öffentlichen Link entfernt",
+ "You shared %1$s as public link" : "Sie haben %1$s über einen öffentlichen Link geteilt",
+ "You removed public link for %1$s" : "Sie haben die öffentliche Freigabe für %1$s entfernt",
+ "%2$s shared %1$s as public link" : "%2$s hat %1$s über einen öffentlichen Link geteilt",
+ "%2$s removed public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt",
+ "%1$s accepted the remote share" : "%1$s hat die Remotefreigabe akzeptiert",
+ "%1$s declined the remote share" : "%1$s hat die Remotefreigabe abgelehnt",
+ "You received a new remote share %1$s from %2$s" : "Du hast eine neue Remotefreigabe %1$s von %2$s erhalten",
+ "%2$s accepted the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s akzeptiert",
+ "%2$s declined the remote share of %1$s" : "%2$s hat die Remotefreigabe von %1$s abgelehnt",
+ "%2$s unshared %1$s from you" : "%2$s teilt %1$s nicht mehr mit Ihnen",
+ "Shared with %1$s" : "Geteilt mit %1$s",
+ "Removed share for %1$s" : "Freigabe für %1$s entfernt",
+ "%2$s shared with %1$s" : "%2$s hat mit %1$s geteilt",
+ "%2$s removed share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt",
+ "Shared by %1$s" : "Geteilt von %1$s",
+ "%1$s removed share" : "%1$s hat die Freigabe entfernt",
+ "You removed %2$s from %1$s" : "Sie haben %2$s von %1$s entfernt",
+ "%3$s shared %1$s with %2$s" : "%3$s hat %1$s mit %2$s geteilt",
+ "%3$s removed %2$s from %1$s" : "%3$s hat %2$s von %1$s entfernt",
+ "%2$s removed you from %1$s" : "Sie wurden durch %2$s von %1$s entfernt"
},"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 abada5b6efb..40bdeafee29 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"files_sharing",
{
- "Shared with you" : "Compartido con usted",
+ "Shared with you" : "Compartido contigo",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por medio de enlaces",
"Nothing shared with you yet" : "Todavía no han compartido nada contigo",
@@ -20,76 +20,45 @@ OC.L10N.register(
"Sharing" : "Compartiendo",
"File shares" : "Archivos compartidos",
"Downloaded via public link" : "Descargado vía enlace público",
- "Downloaded by %1$s" : "Descargado por %1$s",
"Downloaded by {email}" : "Descargado por {email}",
- "%1$s downloaded via public link" : "%1$s descargado por vía enlace público",
"{file} downloaded via public link" : "{file} descargado vía enlace público",
- "%1$s downloaded %2$s" : "%1$s descargó %2$s",
"{email} downloaded {file}" : "{email} descargó {file}",
- "Shared with group %1$s" : "Compartido con el grupo %1$s",
"Shared with group {group}" : "Compartido con el grupo {grupo}",
- "Removed share for group %1$s" : "Eliminado el compartido para el grupo %1$s",
"Removed share for group {group}" : "Eliminado el compartido para el grupo {group}",
- "%2$s shared with group %1$s" : "%2$s compartido con el grupo %1$s",
"{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
- "%2$s removed share for group %1$s" : "%2$s removió archivo del grupo %1$s",
"{actor} removed share for group {group}" : "{actor} eliminó el compartido para el grupo {group}",
- "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
"You shared {file} with group {group}" : "Ha compartido {file} con el grupo {group}",
- "You removed group %2$s from %1$s" : "Ha eliminado el grupo %2$s de %1$s",
"You removed group {group} from {file}" : "Ha eliminado el grupo {group} del {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s compartió %1$s con el grupo %2$s",
"{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s eliminó el grupo %2$s de %1$s",
"{actor} removed group {group} from {file}" : "{actor} eliminó grupo {group} de {file}",
"Shared as public link" : "Compartido como enlace público",
"Removed public link" : "Eliminado enlace público",
- "%1$s shared as public link" : "%1$s compartido como enlace público",
+ "Public link expired" : "El enlace público ha expirado",
"{actor} shared as public link" : "{actor} compartió como enlace público",
- "%1$s removed public link" : "%1$s eliminó el enlace público",
"{actor} removed public link" : "{actor} eliminó el enlace público",
- "You shared %1$s as public link" : "Compartió %1$s como un enlace público",
+ "Public link of {actor} expired" : "Enlace público de {actor} caducado",
"You shared {file} as public link" : "Compartió {file} como un enlace público",
- "You removed public link for %1$s" : "Eliminó el enlace público para %1$s",
"You removed public link for {file}" : "Eliminó el enlace público para {file}",
- "%2$s shared %1$s as public link" : "%2$s compartió %1$s como un enlace público",
+ "Public link expired for {file}" : "Enlace público caducado para {file}",
"{actor} shared {file} as public link" : "{actor} compartió {file} como enlace público",
- "%2$s removed public link for %1$s" : "%2$s eliminó el enlace público para %1$s",
"{actor} removed public link for {file}" : "{actor} eliminó el enlace público para {file}",
- "%1$s accepted the remote share" : "%1$s aceptó el recurso compartido remotamente",
+ "Public link of {actor} for {file} expired" : "Enlace público de {actor} para {file} caducado",
"{user} accepted the remote share" : "{user} aceptó el recurso compartido remotamente",
- "%1$s declined the remote share" : "%1$s rechazó el recurso compartido",
"{user} declined the remote share" : "{user} rechazó el recurso compartido",
- "You received a new remote share %1$s from %2$s" : "Ha recibido un nuevo recurso compartido remoto %1$s de %2$s",
"You received a new remote share {file} from {user}" : "Ha recibido un nuevo recurso compartido remoto {file} de {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s aceptó el recurso compartido de %1$s",
"{user} accepted the remote share of {file}" : "{user} aceptó la compartición remota de {file}",
- "%2$s declined the remote share of %1$s" : "%2$s rechazó el recurso compartido de %1$s",
"{user} declined the remote share of {file}" : "{user} rechazó el recurso compartido de {file}",
- "%2$s unshared %1$s from you" : "%2$s dejó de compartir %1$s contigo",
"{user} unshared {file} from you" : "{user} dejó de compartir {file} contigo",
- "Shared with %1$s" : "Compartido con %1$s",
"Shared with {user}" : "Compartido con {user}",
- "Removed share for %1$s" : "Eliminó el recurso compartido a %1$s",
"Removed share for {user}" : "Eliminó el recurso compartido a {user}",
- "%2$s shared with %1$s" : "%2$s compartió con %1$s",
"{actor} shared with {user}" : "{actor} compartió con {user}",
- "%2$s removed share for %1$s" : "%2$s eliminó recurso compartido para %1$s",
"{actor} removed share for {user}" : "{actor} eliminó recurso compartido para {user}",
- "Shared by %1$s" : "Compartido por %1$s",
"Shared by {actor}" : "Compartido por {actor}",
- "%1$s removed share" : "%1$s eliminó el recurso compartido",
"{actor} removed share" : "{actor} eliminó el recurso compartido",
- "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
"You shared {file} with {user}" : "Ha compartido {file} con {user}",
- "You removed %2$s from %1$s" : "Ha eliminado %2$s de %1$s",
"You removed {user} from {file}" : "Ha eliminado {user} de {file}",
- "%3$s shared %1$s with %2$s" : "%3$s compartió %1$s con %2$s",
"{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
- "%3$s removed %2$s from %1$s" : "%3$s eliminó a %2$s de %1$s",
- "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
"{actor} shared {file} with you" : "{actor} compartió {file} contigo",
- "%2$s removed you from %1$s" : "%2$s lo ha eliminado de %1$s",
"{actor} removed you from {file}" : "{actor} lo ha eliminado de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta compartida por correo o enlace público fue <strong>descargado</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
@@ -146,9 +115,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti",
"Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s",
"Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s",
+ "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
"%2$s shared %1$s with %3$s" : "%2$s compartó %1$s con %3$s",
"You removed the share of %2$s for %1$s" : "Ha cambiado el compartido %2$s por %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s eliminó la compartición de %3$s con %1$s",
+ "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s compartió %1$s con el grupo %3$s",
"You removed the share of group %2$s for %1$s" : "Ha cambiado el compartido del grupo %2$s por %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s ha cambiado el compartido del grupo %3$s por %1$s",
@@ -158,6 +129,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s ha eliminado el enlace público de %1$s",
"Your public link for %1$s expired" : "Su enlace público %1$s ha expirado",
"The public link of %2$s for %1$s expired" : "El enlace público de %2$s para %1$s ha expirado",
+ "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
"%2$s removed the share for %1$s" : "%2$s ha borrado el compartido %1$s",
"Shared with %2$s" : "Compartido con %2$s",
"Shared with %3$s by %2$s" : "Compartido con %3$s por %2$s",
@@ -170,9 +142,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Compartido vía enlace por %2$s",
"Shared via public link" : "Compartido vía enlace público",
"%2$s removed public link" : "%2$s ha borrado el enlace público",
- "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"
+ "Shares" : "Compartidos",
+ "Downloaded by %1$s" : "Descargado por %1$s",
+ "%1$s downloaded via public link" : "%1$s descargado por vía enlace público",
+ "%1$s downloaded %2$s" : "%1$s descargó %2$s",
+ "Shared with group %1$s" : "Compartido con el grupo %1$s",
+ "Removed share for group %1$s" : "Eliminado el compartido para el grupo %1$s",
+ "%2$s shared with group %1$s" : "%2$s compartido con el grupo %1$s",
+ "%2$s removed share for group %1$s" : "%2$s removió archivo del grupo %1$s",
+ "You removed group %2$s from %1$s" : "Ha eliminado el grupo %2$s de %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s compartió %1$s con el grupo %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s eliminó el grupo %2$s de %1$s",
+ "%1$s shared as public link" : "%1$s compartido como enlace público",
+ "%1$s removed public link" : "%1$s eliminó el enlace público",
+ "You shared %1$s as public link" : "Compartió %1$s como un enlace público",
+ "You removed public link for %1$s" : "Eliminó el enlace público para %1$s",
+ "%2$s shared %1$s as public link" : "%2$s compartió %1$s como un enlace público",
+ "%2$s removed public link for %1$s" : "%2$s eliminó el enlace público para %1$s",
+ "%1$s accepted the remote share" : "%1$s aceptó el recurso compartido remotamente",
+ "%1$s declined the remote share" : "%1$s rechazó el recurso compartido",
+ "You received a new remote share %1$s from %2$s" : "Ha recibido un nuevo recurso compartido remoto %1$s de %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s aceptó el recurso compartido de %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s rechazó el recurso compartido de %1$s",
+ "%2$s unshared %1$s from you" : "%2$s dejó de compartir %1$s contigo",
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Removed share for %1$s" : "Eliminó el recurso compartido a %1$s",
+ "%2$s shared with %1$s" : "%2$s compartió con %1$s",
+ "%2$s removed share for %1$s" : "%2$s eliminó recurso compartido para %1$s",
+ "Shared by %1$s" : "Compartido por %1$s",
+ "%1$s removed share" : "%1$s eliminó el recurso compartido",
+ "You removed %2$s from %1$s" : "Ha eliminado %2$s de %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s compartió %1$s con %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s eliminó a %2$s de %1$s",
+ "%2$s removed you from %1$s" : "%2$s lo ha eliminado de %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index 64463b90054..5df6c6331ec 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Shared with you" : "Compartido con usted",
+ "Shared with you" : "Compartido contigo",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por medio de enlaces",
"Nothing shared with you yet" : "Todavía no han compartido nada contigo",
@@ -18,76 +18,45 @@
"Sharing" : "Compartiendo",
"File shares" : "Archivos compartidos",
"Downloaded via public link" : "Descargado vía enlace público",
- "Downloaded by %1$s" : "Descargado por %1$s",
"Downloaded by {email}" : "Descargado por {email}",
- "%1$s downloaded via public link" : "%1$s descargado por vía enlace público",
"{file} downloaded via public link" : "{file} descargado vía enlace público",
- "%1$s downloaded %2$s" : "%1$s descargó %2$s",
"{email} downloaded {file}" : "{email} descargó {file}",
- "Shared with group %1$s" : "Compartido con el grupo %1$s",
"Shared with group {group}" : "Compartido con el grupo {grupo}",
- "Removed share for group %1$s" : "Eliminado el compartido para el grupo %1$s",
"Removed share for group {group}" : "Eliminado el compartido para el grupo {group}",
- "%2$s shared with group %1$s" : "%2$s compartido con el grupo %1$s",
"{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
- "%2$s removed share for group %1$s" : "%2$s removió archivo del grupo %1$s",
"{actor} removed share for group {group}" : "{actor} eliminó el compartido para el grupo {group}",
- "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
"You shared {file} with group {group}" : "Ha compartido {file} con el grupo {group}",
- "You removed group %2$s from %1$s" : "Ha eliminado el grupo %2$s de %1$s",
"You removed group {group} from {file}" : "Ha eliminado el grupo {group} del {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s compartió %1$s con el grupo %2$s",
"{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s eliminó el grupo %2$s de %1$s",
"{actor} removed group {group} from {file}" : "{actor} eliminó grupo {group} de {file}",
"Shared as public link" : "Compartido como enlace público",
"Removed public link" : "Eliminado enlace público",
- "%1$s shared as public link" : "%1$s compartido como enlace público",
+ "Public link expired" : "El enlace público ha expirado",
"{actor} shared as public link" : "{actor} compartió como enlace público",
- "%1$s removed public link" : "%1$s eliminó el enlace público",
"{actor} removed public link" : "{actor} eliminó el enlace público",
- "You shared %1$s as public link" : "Compartió %1$s como un enlace público",
+ "Public link of {actor} expired" : "Enlace público de {actor} caducado",
"You shared {file} as public link" : "Compartió {file} como un enlace público",
- "You removed public link for %1$s" : "Eliminó el enlace público para %1$s",
"You removed public link for {file}" : "Eliminó el enlace público para {file}",
- "%2$s shared %1$s as public link" : "%2$s compartió %1$s como un enlace público",
+ "Public link expired for {file}" : "Enlace público caducado para {file}",
"{actor} shared {file} as public link" : "{actor} compartió {file} como enlace público",
- "%2$s removed public link for %1$s" : "%2$s eliminó el enlace público para %1$s",
"{actor} removed public link for {file}" : "{actor} eliminó el enlace público para {file}",
- "%1$s accepted the remote share" : "%1$s aceptó el recurso compartido remotamente",
+ "Public link of {actor} for {file} expired" : "Enlace público de {actor} para {file} caducado",
"{user} accepted the remote share" : "{user} aceptó el recurso compartido remotamente",
- "%1$s declined the remote share" : "%1$s rechazó el recurso compartido",
"{user} declined the remote share" : "{user} rechazó el recurso compartido",
- "You received a new remote share %1$s from %2$s" : "Ha recibido un nuevo recurso compartido remoto %1$s de %2$s",
"You received a new remote share {file} from {user}" : "Ha recibido un nuevo recurso compartido remoto {file} de {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s aceptó el recurso compartido de %1$s",
"{user} accepted the remote share of {file}" : "{user} aceptó la compartición remota de {file}",
- "%2$s declined the remote share of %1$s" : "%2$s rechazó el recurso compartido de %1$s",
"{user} declined the remote share of {file}" : "{user} rechazó el recurso compartido de {file}",
- "%2$s unshared %1$s from you" : "%2$s dejó de compartir %1$s contigo",
"{user} unshared {file} from you" : "{user} dejó de compartir {file} contigo",
- "Shared with %1$s" : "Compartido con %1$s",
"Shared with {user}" : "Compartido con {user}",
- "Removed share for %1$s" : "Eliminó el recurso compartido a %1$s",
"Removed share for {user}" : "Eliminó el recurso compartido a {user}",
- "%2$s shared with %1$s" : "%2$s compartió con %1$s",
"{actor} shared with {user}" : "{actor} compartió con {user}",
- "%2$s removed share for %1$s" : "%2$s eliminó recurso compartido para %1$s",
"{actor} removed share for {user}" : "{actor} eliminó recurso compartido para {user}",
- "Shared by %1$s" : "Compartido por %1$s",
"Shared by {actor}" : "Compartido por {actor}",
- "%1$s removed share" : "%1$s eliminó el recurso compartido",
"{actor} removed share" : "{actor} eliminó el recurso compartido",
- "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
"You shared {file} with {user}" : "Ha compartido {file} con {user}",
- "You removed %2$s from %1$s" : "Ha eliminado %2$s de %1$s",
"You removed {user} from {file}" : "Ha eliminado {user} de {file}",
- "%3$s shared %1$s with %2$s" : "%3$s compartió %1$s con %2$s",
"{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
- "%3$s removed %2$s from %1$s" : "%3$s eliminó a %2$s de %1$s",
- "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
"{actor} shared {file} with you" : "{actor} compartió {file} contigo",
- "%2$s removed you from %1$s" : "%2$s lo ha eliminado de %1$s",
"{actor} removed you from {file}" : "{actor} lo ha eliminado de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta compartida por correo o enlace público fue <strong>descargado</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
@@ -144,9 +113,11 @@
"%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti",
"Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s",
"Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s",
+ "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s",
"%2$s shared %1$s with %3$s" : "%2$s compartó %1$s con %3$s",
"You removed the share of %2$s for %1$s" : "Ha cambiado el compartido %2$s por %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s eliminó la compartición de %3$s con %1$s",
+ "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s compartió %1$s con el grupo %3$s",
"You removed the share of group %2$s for %1$s" : "Ha cambiado el compartido del grupo %2$s por %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s ha cambiado el compartido del grupo %3$s por %1$s",
@@ -156,6 +127,7 @@
"%2$s removed the public link for %1$s" : "%2$s ha eliminado el enlace público de %1$s",
"Your public link for %1$s expired" : "Su enlace público %1$s ha expirado",
"The public link of %2$s for %1$s expired" : "El enlace público de %2$s para %1$s ha expirado",
+ "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted",
"%2$s removed the share for %1$s" : "%2$s ha borrado el compartido %1$s",
"Shared with %2$s" : "Compartido con %2$s",
"Shared with %3$s by %2$s" : "Compartido con %3$s por %2$s",
@@ -168,9 +140,40 @@
"Shared via link by %2$s" : "Compartido vía enlace por %2$s",
"Shared via public link" : "Compartido vía enlace público",
"%2$s removed public link" : "%2$s ha borrado el enlace público",
- "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"
+ "Shares" : "Compartidos",
+ "Downloaded by %1$s" : "Descargado por %1$s",
+ "%1$s downloaded via public link" : "%1$s descargado por vía enlace público",
+ "%1$s downloaded %2$s" : "%1$s descargó %2$s",
+ "Shared with group %1$s" : "Compartido con el grupo %1$s",
+ "Removed share for group %1$s" : "Eliminado el compartido para el grupo %1$s",
+ "%2$s shared with group %1$s" : "%2$s compartido con el grupo %1$s",
+ "%2$s removed share for group %1$s" : "%2$s removió archivo del grupo %1$s",
+ "You removed group %2$s from %1$s" : "Ha eliminado el grupo %2$s de %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s compartió %1$s con el grupo %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s eliminó el grupo %2$s de %1$s",
+ "%1$s shared as public link" : "%1$s compartido como enlace público",
+ "%1$s removed public link" : "%1$s eliminó el enlace público",
+ "You shared %1$s as public link" : "Compartió %1$s como un enlace público",
+ "You removed public link for %1$s" : "Eliminó el enlace público para %1$s",
+ "%2$s shared %1$s as public link" : "%2$s compartió %1$s como un enlace público",
+ "%2$s removed public link for %1$s" : "%2$s eliminó el enlace público para %1$s",
+ "%1$s accepted the remote share" : "%1$s aceptó el recurso compartido remotamente",
+ "%1$s declined the remote share" : "%1$s rechazó el recurso compartido",
+ "You received a new remote share %1$s from %2$s" : "Ha recibido un nuevo recurso compartido remoto %1$s de %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s aceptó el recurso compartido de %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s rechazó el recurso compartido de %1$s",
+ "%2$s unshared %1$s from you" : "%2$s dejó de compartir %1$s contigo",
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Removed share for %1$s" : "Eliminó el recurso compartido a %1$s",
+ "%2$s shared with %1$s" : "%2$s compartió con %1$s",
+ "%2$s removed share for %1$s" : "%2$s eliminó recurso compartido para %1$s",
+ "Shared by %1$s" : "Compartido por %1$s",
+ "%1$s removed share" : "%1$s eliminó el recurso compartido",
+ "You removed %2$s from %1$s" : "Ha eliminado %2$s de %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s compartió %1$s con %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s eliminó a %2$s de %1$s",
+ "%2$s removed you from %1$s" : "%2$s lo ha eliminado de %1$s"
},"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 ce7f6154280..16b68eaa37a 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -13,83 +13,49 @@ 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",
"Sharing" : "Partage",
"File shares" : "Partages de fichiers",
"Downloaded via public link" : "Téléchargé par lien public",
- "Downloaded by %1$s" : "Téléchargé par %1$s",
"Downloaded by {email}" : "Téléchargé par {email}",
- "%1$s downloaded via public link" : "%1$s téléchargé par lien public",
"{file} downloaded via public link" : "{file} téléchargé par lien public",
- "%1$s downloaded %2$s" : "%1$s a téléchargé %2$s",
"{email} downloaded {file}" : "{email} a téléchargé {file}",
- "Shared with group %1$s" : "Partagé avec le groupe %1$s",
"Shared with group {group}" : "Partagé avec le groupe {group}",
- "Removed share for group %1$s" : "Partage supprimé avec le groupe %1$s",
"Removed share for group {group}" : "Partage supprimé avec le groupe {group}",
- "%2$s shared with group %1$s" : "%2$s a partagé avec le groupe %1$s",
"{actor} shared with group {group}" : "{actor} a partagé avec le groupe {group}",
- "%2$s removed share for group %1$s" : "%2$s a supprimé le partage avec le groupe %1$s",
"{actor} removed share for group {group}" : "{actor} a supprimé le partage avec le groupe {group}",
- "You shared %1$s with group %2$s" : "Vous avez partagé %1$s avec le groupe %2$s",
"You shared {file} with group {group}" : "Vous avez partagé {file} avec le groupe {group}",
- "You removed group %2$s from %1$s" : "Vous avez supprimé le group %2$s de %1$s",
"You removed group {group} from {file}" : "Vous avez supprimé le groupe {group} de {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s a partagé %1$s avec le groupe %2$s",
"{actor} shared {file} with group {group}" : "{actor} a partagé {file} avec le groupe {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s a supprimé le groupe %2$s de %1$s",
"{actor} removed group {group} from {file}" : "{actor} a supprimé le groupe {group} de {file}",
"Shared as public link" : "Partagé avec un lien public",
"Removed public link" : "Lien public supprimé",
- "%1$s shared as public link" : "%1$s a partagé avec un lien public",
+ "Public link expired" : "Lien public expiré",
"{actor} shared as public link" : "{actor} a partagé avec un lien public",
- "%1$s removed public link" : "%1$s a supprimé le lien public",
"{actor} removed public link" : "{actor} a supprimé le lien public",
- "You shared %1$s as public link" : "Vous avez partagé %1$s avec un lien public",
"You shared {file} as public link" : "Vous avez partagé {file} avec un lien public",
- "You removed public link for %1$s" : "Vous avez supprimé le lien public pour %1$s",
"You removed public link for {file}" : "Vous avez supprimé le lien public pour {file}",
- "%2$s shared %1$s as public link" : "%2$s a partagé %1$s avec un lien public",
"{actor} shared {file} as public link" : "{actor} a partagé {file} avec un lien public",
- "%2$s removed public link for %1$s" : "%2$s a supprimé le lien public pour %1$s",
"{actor} removed public link for {file}" : "{actor} a supprimé le lien public pour {file}",
- "%1$s accepted the remote share" : "%1$s a accepté le partage distant",
"{user} accepted the remote share" : "{user} a accepté le partage distant",
- "%1$s declined the remote share" : "%1$s a refusé le partage distant",
"{user} declined the remote share" : "{user} a refusé le partage distant",
- "You received a new remote share %1$s from %2$s" : "L'utilisateur %2$s a partagé la ressource distante %1$s avec vous",
"You received a new remote share {file} from {user}" : "Vous avez reçu le partage distant {file} de {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s a accepté le partage distant de %1$s",
"{user} accepted the remote share of {file}" : "{user} a accepté le partage distant de {file}",
- "%2$s declined the remote share of %1$s" : "%2$s a refusé le partage distant de %1$s",
"{user} declined the remote share of {file}" : "{user} a refusé le partage distant de {file}",
- "%2$s unshared %1$s from you" : "%2$s a cessé de partager %1$s avec vous",
"{user} unshared {file} from you" : "{user} a cessé de partager {file} avec vous",
- "Shared with %1$s" : "Partagé avec %1$s",
"Shared with {user}" : "Partagé avec {user}",
- "Removed share for %1$s" : "Partage supprimé pour %1$s",
"Removed share for {user}" : "Partage supprimé pour {user}",
- "%2$s shared with %1$s" : "%2$s a partagé avec %1$s",
"{actor} shared with {user}" : "{actor} a partagé avec {user}",
- "%2$s removed share for %1$s" : "%2$s a supprimé le partage pour %1$s",
"{actor} removed share for {user}" : "{actor} a supprimé le partage pour {user}",
- "Shared by %1$s" : "Partagé par %1$s",
"Shared by {actor}" : "Partagé par {actor}",
- "%1$s removed share" : "%1$s a supprimé le partage",
"{actor} removed share" : "{actor} a supprimé le partage",
- "You shared %1$s with %2$s" : "Vous avez partagé %1$s avec %2$s",
"You shared {file} with {user}" : "Vous avez partagé {file} avec {user}",
- "You removed %2$s from %1$s" : "Vous avez supprimé %2$s de %1$s",
"You removed {user} from {file}" : "Vous avez supprimé {user} de {file}",
- "%3$s shared %1$s with %2$s" : "%3$s a partagé %1$s avec %2$s",
"{actor} removed {user} from {file}" : "{actor} a supprimé {user} de {file}",
- "%3$s removed %2$s from %1$s" : "%3$s a supprimé %2$s de %1$s",
- "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous",
"{actor} shared {file} with you" : "{actor} a partagé {file} avec vous",
- "%2$s removed you from %1$s" : "%2$s vous a supprimé de %1$s",
"{actor} removed you from {file}" : "{actor} vous a supprimé de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un fichier ou un dossier partagé par mail ou par lien public a été <strong>téléchargé</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>",
@@ -97,7 +63,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",
@@ -146,9 +112,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s a cessé de partager %2$s avec vous",
"Public shared folder %1$s was downloaded" : "Le dossier public %1$s a été téléchargé",
"Public shared file %1$s was downloaded" : "Le fichier public %1$s a été téléchargé",
+ "You shared %1$s with %2$s" : "Vous avez partagé %1$s avec %2$s",
"%2$s shared %1$s with %3$s" : "%2$s a partagé %1$s avec %3$s",
"You removed the share of %2$s for %1$s" : "Vous avez supprimé le partage de %2$s pour %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s a supprimé votre partage de %3$s pour %1$s",
+ "You shared %1$s with group %2$s" : "Vous avez partagé %1$s avec le groupe %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s partagé %1$s avec le groupe %3$s",
"You removed the share of group %2$s for %1$s" : "Vous avez supprimé le partage du groupe %2$s pour %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s a supprimé le partage du groupe %3$s pour %1$s",
@@ -158,6 +126,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s a supprimé le lien public pour %1$s",
"Your public link for %1$s expired" : "Le lien public pour %1$s a expiré",
"The public link of %2$s for %1$s expired" : "Le lien public de %2$s pour %1$s a expiré",
+ "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous",
"%2$s removed the share for %1$s" : "%2$s a supprimé le partage pour %1$s",
"Shared with %2$s" : "Partagé avec %2$s",
"Shared with %3$s by %2$s" : "Partagé avec %3$s par %2$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Partagé via lien par %2$s",
"Shared via public link" : "Partagé par lien public",
"%2$s removed public link" : "%2$s a supprimé le lien public",
- "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"
+ "Shares" : "Partages",
+ "Downloaded by %1$s" : "Téléchargé par %1$s",
+ "%1$s downloaded via public link" : "%1$s téléchargé par lien public",
+ "%1$s downloaded %2$s" : "%1$s a téléchargé %2$s",
+ "Shared with group %1$s" : "Partagé avec le groupe %1$s",
+ "Removed share for group %1$s" : "Partage supprimé avec le groupe %1$s",
+ "%2$s shared with group %1$s" : "%2$s a partagé avec le groupe %1$s",
+ "%2$s removed share for group %1$s" : "%2$s a supprimé le partage avec le groupe %1$s",
+ "You removed group %2$s from %1$s" : "Vous avez supprimé le group %2$s de %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s a partagé %1$s avec le groupe %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s a supprimé le groupe %2$s de %1$s",
+ "%1$s shared as public link" : "%1$s a partagé avec un lien public",
+ "%1$s removed public link" : "%1$s a supprimé le lien public",
+ "You shared %1$s as public link" : "Vous avez partagé %1$s avec un lien public",
+ "You removed public link for %1$s" : "Vous avez supprimé le lien public pour %1$s",
+ "%2$s shared %1$s as public link" : "%2$s a partagé %1$s avec un lien public",
+ "%2$s removed public link for %1$s" : "%2$s a supprimé le lien public pour %1$s",
+ "%1$s accepted the remote share" : "%1$s a accepté le partage distant",
+ "%1$s declined the remote share" : "%1$s a refusé le partage distant",
+ "You received a new remote share %1$s from %2$s" : "L'utilisateur %2$s a partagé la ressource distante %1$s avec vous",
+ "%2$s accepted the remote share of %1$s" : "%2$s a accepté le partage distant de %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s a refusé le partage distant de %1$s",
+ "%2$s unshared %1$s from you" : "%2$s a cessé de partager %1$s avec vous",
+ "Shared with %1$s" : "Partagé avec %1$s",
+ "Removed share for %1$s" : "Partage supprimé pour %1$s",
+ "%2$s shared with %1$s" : "%2$s a partagé avec %1$s",
+ "%2$s removed share for %1$s" : "%2$s a supprimé le partage pour %1$s",
+ "Shared by %1$s" : "Partagé par %1$s",
+ "%1$s removed share" : "%1$s a supprimé le partage",
+ "You removed %2$s from %1$s" : "Vous avez supprimé %2$s de %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s a partagé %1$s avec %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s a supprimé %2$s de %1$s",
+ "%2$s removed you from %1$s" : "%2$s vous a supprimé de %1$s"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index ba1cc34f790..f9450eac166 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -11,83 +11,49 @@
"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",
"Sharing" : "Partage",
"File shares" : "Partages de fichiers",
"Downloaded via public link" : "Téléchargé par lien public",
- "Downloaded by %1$s" : "Téléchargé par %1$s",
"Downloaded by {email}" : "Téléchargé par {email}",
- "%1$s downloaded via public link" : "%1$s téléchargé par lien public",
"{file} downloaded via public link" : "{file} téléchargé par lien public",
- "%1$s downloaded %2$s" : "%1$s a téléchargé %2$s",
"{email} downloaded {file}" : "{email} a téléchargé {file}",
- "Shared with group %1$s" : "Partagé avec le groupe %1$s",
"Shared with group {group}" : "Partagé avec le groupe {group}",
- "Removed share for group %1$s" : "Partage supprimé avec le groupe %1$s",
"Removed share for group {group}" : "Partage supprimé avec le groupe {group}",
- "%2$s shared with group %1$s" : "%2$s a partagé avec le groupe %1$s",
"{actor} shared with group {group}" : "{actor} a partagé avec le groupe {group}",
- "%2$s removed share for group %1$s" : "%2$s a supprimé le partage avec le groupe %1$s",
"{actor} removed share for group {group}" : "{actor} a supprimé le partage avec le groupe {group}",
- "You shared %1$s with group %2$s" : "Vous avez partagé %1$s avec le groupe %2$s",
"You shared {file} with group {group}" : "Vous avez partagé {file} avec le groupe {group}",
- "You removed group %2$s from %1$s" : "Vous avez supprimé le group %2$s de %1$s",
"You removed group {group} from {file}" : "Vous avez supprimé le groupe {group} de {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s a partagé %1$s avec le groupe %2$s",
"{actor} shared {file} with group {group}" : "{actor} a partagé {file} avec le groupe {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s a supprimé le groupe %2$s de %1$s",
"{actor} removed group {group} from {file}" : "{actor} a supprimé le groupe {group} de {file}",
"Shared as public link" : "Partagé avec un lien public",
"Removed public link" : "Lien public supprimé",
- "%1$s shared as public link" : "%1$s a partagé avec un lien public",
+ "Public link expired" : "Lien public expiré",
"{actor} shared as public link" : "{actor} a partagé avec un lien public",
- "%1$s removed public link" : "%1$s a supprimé le lien public",
"{actor} removed public link" : "{actor} a supprimé le lien public",
- "You shared %1$s as public link" : "Vous avez partagé %1$s avec un lien public",
"You shared {file} as public link" : "Vous avez partagé {file} avec un lien public",
- "You removed public link for %1$s" : "Vous avez supprimé le lien public pour %1$s",
"You removed public link for {file}" : "Vous avez supprimé le lien public pour {file}",
- "%2$s shared %1$s as public link" : "%2$s a partagé %1$s avec un lien public",
"{actor} shared {file} as public link" : "{actor} a partagé {file} avec un lien public",
- "%2$s removed public link for %1$s" : "%2$s a supprimé le lien public pour %1$s",
"{actor} removed public link for {file}" : "{actor} a supprimé le lien public pour {file}",
- "%1$s accepted the remote share" : "%1$s a accepté le partage distant",
"{user} accepted the remote share" : "{user} a accepté le partage distant",
- "%1$s declined the remote share" : "%1$s a refusé le partage distant",
"{user} declined the remote share" : "{user} a refusé le partage distant",
- "You received a new remote share %1$s from %2$s" : "L'utilisateur %2$s a partagé la ressource distante %1$s avec vous",
"You received a new remote share {file} from {user}" : "Vous avez reçu le partage distant {file} de {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s a accepté le partage distant de %1$s",
"{user} accepted the remote share of {file}" : "{user} a accepté le partage distant de {file}",
- "%2$s declined the remote share of %1$s" : "%2$s a refusé le partage distant de %1$s",
"{user} declined the remote share of {file}" : "{user} a refusé le partage distant de {file}",
- "%2$s unshared %1$s from you" : "%2$s a cessé de partager %1$s avec vous",
"{user} unshared {file} from you" : "{user} a cessé de partager {file} avec vous",
- "Shared with %1$s" : "Partagé avec %1$s",
"Shared with {user}" : "Partagé avec {user}",
- "Removed share for %1$s" : "Partage supprimé pour %1$s",
"Removed share for {user}" : "Partage supprimé pour {user}",
- "%2$s shared with %1$s" : "%2$s a partagé avec %1$s",
"{actor} shared with {user}" : "{actor} a partagé avec {user}",
- "%2$s removed share for %1$s" : "%2$s a supprimé le partage pour %1$s",
"{actor} removed share for {user}" : "{actor} a supprimé le partage pour {user}",
- "Shared by %1$s" : "Partagé par %1$s",
"Shared by {actor}" : "Partagé par {actor}",
- "%1$s removed share" : "%1$s a supprimé le partage",
"{actor} removed share" : "{actor} a supprimé le partage",
- "You shared %1$s with %2$s" : "Vous avez partagé %1$s avec %2$s",
"You shared {file} with {user}" : "Vous avez partagé {file} avec {user}",
- "You removed %2$s from %1$s" : "Vous avez supprimé %2$s de %1$s",
"You removed {user} from {file}" : "Vous avez supprimé {user} de {file}",
- "%3$s shared %1$s with %2$s" : "%3$s a partagé %1$s avec %2$s",
"{actor} removed {user} from {file}" : "{actor} a supprimé {user} de {file}",
- "%3$s removed %2$s from %1$s" : "%3$s a supprimé %2$s de %1$s",
- "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous",
"{actor} shared {file} with you" : "{actor} a partagé {file} avec vous",
- "%2$s removed you from %1$s" : "%2$s vous a supprimé de %1$s",
"{actor} removed you from {file}" : "{actor} vous a supprimé de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un fichier ou un dossier partagé par mail ou par lien public a été <strong>téléchargé</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>",
@@ -95,7 +61,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",
@@ -144,9 +110,11 @@
"%1$s unshared %2$s from you" : "%1$s a cessé de partager %2$s avec vous",
"Public shared folder %1$s was downloaded" : "Le dossier public %1$s a été téléchargé",
"Public shared file %1$s was downloaded" : "Le fichier public %1$s a été téléchargé",
+ "You shared %1$s with %2$s" : "Vous avez partagé %1$s avec %2$s",
"%2$s shared %1$s with %3$s" : "%2$s a partagé %1$s avec %3$s",
"You removed the share of %2$s for %1$s" : "Vous avez supprimé le partage de %2$s pour %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s a supprimé votre partage de %3$s pour %1$s",
+ "You shared %1$s with group %2$s" : "Vous avez partagé %1$s avec le groupe %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s partagé %1$s avec le groupe %3$s",
"You removed the share of group %2$s for %1$s" : "Vous avez supprimé le partage du groupe %2$s pour %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s a supprimé le partage du groupe %3$s pour %1$s",
@@ -156,6 +124,7 @@
"%2$s removed the public link for %1$s" : "%2$s a supprimé le lien public pour %1$s",
"Your public link for %1$s expired" : "Le lien public pour %1$s a expiré",
"The public link of %2$s for %1$s expired" : "Le lien public de %2$s pour %1$s a expiré",
+ "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous",
"%2$s removed the share for %1$s" : "%2$s a supprimé le partage pour %1$s",
"Shared with %2$s" : "Partagé avec %2$s",
"Shared with %3$s by %2$s" : "Partagé avec %3$s par %2$s",
@@ -168,9 +137,40 @@
"Shared via link by %2$s" : "Partagé via lien par %2$s",
"Shared via public link" : "Partagé par lien public",
"%2$s removed public link" : "%2$s a supprimé le lien public",
- "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"
+ "Shares" : "Partages",
+ "Downloaded by %1$s" : "Téléchargé par %1$s",
+ "%1$s downloaded via public link" : "%1$s téléchargé par lien public",
+ "%1$s downloaded %2$s" : "%1$s a téléchargé %2$s",
+ "Shared with group %1$s" : "Partagé avec le groupe %1$s",
+ "Removed share for group %1$s" : "Partage supprimé avec le groupe %1$s",
+ "%2$s shared with group %1$s" : "%2$s a partagé avec le groupe %1$s",
+ "%2$s removed share for group %1$s" : "%2$s a supprimé le partage avec le groupe %1$s",
+ "You removed group %2$s from %1$s" : "Vous avez supprimé le group %2$s de %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s a partagé %1$s avec le groupe %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s a supprimé le groupe %2$s de %1$s",
+ "%1$s shared as public link" : "%1$s a partagé avec un lien public",
+ "%1$s removed public link" : "%1$s a supprimé le lien public",
+ "You shared %1$s as public link" : "Vous avez partagé %1$s avec un lien public",
+ "You removed public link for %1$s" : "Vous avez supprimé le lien public pour %1$s",
+ "%2$s shared %1$s as public link" : "%2$s a partagé %1$s avec un lien public",
+ "%2$s removed public link for %1$s" : "%2$s a supprimé le lien public pour %1$s",
+ "%1$s accepted the remote share" : "%1$s a accepté le partage distant",
+ "%1$s declined the remote share" : "%1$s a refusé le partage distant",
+ "You received a new remote share %1$s from %2$s" : "L'utilisateur %2$s a partagé la ressource distante %1$s avec vous",
+ "%2$s accepted the remote share of %1$s" : "%2$s a accepté le partage distant de %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s a refusé le partage distant de %1$s",
+ "%2$s unshared %1$s from you" : "%2$s a cessé de partager %1$s avec vous",
+ "Shared with %1$s" : "Partagé avec %1$s",
+ "Removed share for %1$s" : "Partage supprimé pour %1$s",
+ "%2$s shared with %1$s" : "%2$s a partagé avec %1$s",
+ "%2$s removed share for %1$s" : "%2$s a supprimé le partage pour %1$s",
+ "Shared by %1$s" : "Partagé par %1$s",
+ "%1$s removed share" : "%1$s a supprimé le partage",
+ "You removed %2$s from %1$s" : "Vous avez supprimé %2$s de %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s a partagé %1$s avec %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s a supprimé %2$s de %1$s",
+ "%2$s removed you from %1$s" : "%2$s vous a supprimé de %1$s"
},"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 debb82f3254..028837deba5 100644
--- a/apps/files_sharing/l10n/hu_HU.js
+++ b/apps/files_sharing/l10n/hu_HU.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"Sharing" : "Megosztás",
"File shares" : "Fájl megosztások",
"Downloaded via public link" : "Letöltve nyilvános hivatkozással",
- "Downloaded by %1$s" : "Letöltötte: %1$s",
"Downloaded by {email}" : "Letöltötte: {email}",
- "%1$s downloaded via public link" : "%1$s letöltve nyilvános hibatkozással",
"{file} downloaded via public link" : "{file} letöltve nyilvános hibatkozással",
- "%1$s downloaded %2$s" : "%1$s letöltötte ezt: %2$s",
"{email} downloaded {file}" : "{email} letöltötte ezt: {file}",
- "Shared with group %1$s" : "Megosztva ezzel a csoporttal: %1$s",
"Shared with group {group}" : "Megosztva ezzel a csoporttal: {group}",
- "Removed share for group %1$s" : "%1$s csoport megosztása eltávolítva",
"Removed share for group {group}" : "{group} csoport megosztása eltávolítva",
- "%2$s shared with group %1$s" : "%2$s megosztva ezzel a csoporttal: %1$s",
"{actor} shared with group {group}" : "{actor} megosztva ezzel a csoporttal: {group}",
- "%2$s removed share for group %1$s" : "%2$s eltávolította %1$s csoport megosztását",
"{actor} removed share for group {group}" : "{actor} eltávolította {group} csoport megosztását",
- "You shared %1$s with group %2$s" : "Megosztottad ezt: %1$s ezzel a csoporttal: %2$s",
"You shared {file} with group {group}" : "Megosztottad ezt: {file} ezzel a csoporttal: {group}",
- "You removed group %2$s from %1$s" : "Eltávolítottad ezt csoportot: %2$s innen: %1$s",
"You removed group {group} from {file}" : "Eltávolítottad ezt csoportot: {group} innen: {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s megosztotta ezt: %1$s, ezzel a csoporttal: %2$s",
"{actor} shared {file} with group {group}" : "{actor} megosztotta ezt: {file} ezzel a csoporttal: {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s eltávolította ezt a csoportot: %2$s innen: %1$s",
"{actor} removed group {group} from {file}" : "{actor} eltávolította ezt a csoportot {group} innen: {file}",
"Shared as public link" : "Megosztva nyilvános hivatkozásként",
"Removed public link" : "Eltávolított nyilvános hivatkozás",
- "%1$s shared as public link" : "%1$s megosztva nyilvános hivatkozásként",
+ "Public link expired" : "Nyilvános hivatkozás lejárt",
"{actor} shared as public link" : "{actor} megosztva nyilvános hivatkozásként",
- "%1$s removed public link" : "%1$s eltávolított egy nyilvános hivatkozást",
"{actor} removed public link" : "{actor} eltávolított egy nyilvános hivatkozást",
- "You shared %1$s as public link" : "Nyilvános hivatkozáskánt megosztottad ezt: %1$s",
"You shared {file} as public link" : "Nyilvános hivatkozáskánt megosztottad ezt: {file}",
- "You removed public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
"You removed public link for {file}" : "Eltávolítottad {file} nyilvános hivatkozását",
- "%2$s shared %1$s as public link" : "%2$s nyilvános hivatkozásként megosztotta ezt: %1$s",
"{actor} shared {file} as public link" : "{actor} nyilvános hivatkozásként megosztotta ezt: {file}",
- "%2$s removed public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
"{actor} removed public link for {file}" : "{actor} eltávolította {file} nyilvános hivatkozását",
- "%1$s accepted the remote share" : "%1$s elfogadta a távoli megosztást",
"{user} accepted the remote share" : "{user} elfogadta a távoli megosztást",
- "%1$s declined the remote share" : "%1$s visszautasította a távoli megosztást",
"{user} declined the remote share" : "{user} visszautasította a távoli megosztást",
- "You received a new remote share %1$s from %2$s" : "Egy új távoli megosztást kaptál ehhez: %1$s tőle: %2$s",
"You received a new remote share {file} from {user}" : "Egy új távoli megosztást kaptál ehhez: {file} tőle: {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s elfogadta %1$s távoli megosztását",
"{user} accepted the remote share of {file}" : "{user} elfogadta {file} távoli megosztását",
- "%2$s declined the remote share of %1$s" : "%2$s visszautasította %1$s távoli megosztását",
"{user} declined the remote share of {file}" : "{user} visszautasította {file} távoli megosztását",
- "%2$s unshared %1$s from you" : "%2$s visszavonta tőled %1$s megosztását",
"{user} unshared {file} from you" : "{user} visszavonta tőled {file} megosztását",
- "Shared with %1$s" : "Megosztva vele: %1$s",
"Shared with {user}" : "Megosztva vele: {user}",
- "Removed share for %1$s" : "%1$s megosztása eltávolítva",
"Removed share for {user}" : "{user} megosztása eltávolítva",
- "%2$s shared with %1$s" : "%2$s megosztotta vele: %1$s",
"{actor} shared with {user}" : "{actor} megosztotta vele: {user}",
- "%2$s removed share for %1$s" : "%2$s eltávolította %1$s megosztását",
"{actor} removed share for {user}" : "{actor} eltávolította {user} megosztását",
- "Shared by %1$s" : "Megosztotta: %1$s",
"Shared by {actor}" : "Megosztotta: {actor}",
- "%1$s removed share" : "%1$s eltávolította a megosztást",
"{actor} removed share" : "{actor} eltávolította a megosztást",
- "You shared %1$s with %2$s" : "Megosztottad ezt: %1$s vele: %2$s",
"You shared {file} with {user}" : "Megosztottad ezt: {file} vele: {user}",
- "You removed %2$s from %1$s" : "Eltávolítottad ezt: %2$s tőle: %1$s",
"You removed {user} from {file}" : "Eltávolítottad ezt: {user} tőle: {file}",
- "%3$s shared %1$s with %2$s" : "%3$s megosztotta ezt: %1$s vele: %2$s",
"{actor} removed {user} from {file}" : "{actor} eltávolította ezt: {user} innen: {file}",
- "%3$s removed %2$s from %1$s" : "%3$s eltávolította ezt: %2$s innen: %1$s",
- "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"{actor} shared {file} with you" : "{actor} megosztotta veled ezt: {file}",
- "%2$s removed you from %1$s" : "%2$s eltívolított innen: %1$s",
"{actor} removed you from {file}" : "{actor} eltávolított innen: {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Egy e-mailben vagy nyilvános hivatkozással megosztott fájl vagy mappa <strong>letöltve</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy mappa meg lett osztva egy <strong>másik szerverről</strong>",
@@ -146,9 +112,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s megosztás visszavonva %2$s által",
"Public shared folder %1$s was downloaded" : "%1$s nyilvánosan megosztott mappa le lett töltve",
"Public shared file %1$s was downloaded" : "Nyilvánosan megosztott fálj %1$s le lett töltve",
+ "You shared %1$s with %2$s" : "Megosztottad ezt: %1$s vele: %2$s",
"%2$s shared %1$s with %3$s" : "%2$s megosztotta ezt: %1$s, ővele: %3$s",
"You removed the share of %2$s for %1$s" : "Eltávolítottad %2$s következő megosztását: %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s eltávolította %3$s következő megosztását: %1$s",
+ "You shared %1$s with group %2$s" : "Megosztottad ezt: %1$s ezzel a csoporttal: %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s megosztotta ezt: %1$s, ezzel a csoporttal: %3$s",
"You removed the share of group %2$s for %1$s" : "Eltávolítottad %2$s csoport %1$s megosztását",
"%2$s removed the share of group %3$s for %1$s" : "%2$s eltávolította %3$s csoport %1$s megosztását",
@@ -158,6 +126,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
"Your public link for %1$s expired" : "%1$s nyilvános hivatkozásod lejárt",
"The public link of %2$s for %1$s expired" : "%2$s %1$s nyilvános hivatkozása lejárt",
+ "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"%2$s removed the share for %1$s" : "%2$s eltávolította %1$s megosztását",
"Shared with %2$s" : "Megosztva vele: %2$s",
"Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
"Shared via public link" : "Megosztva nyilvános hivatkozással",
"%2$s removed public link" : "%2$s eltávolított egy nyilvános hivatkozást",
- "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"
+ "Shares" : "Megosztások",
+ "Downloaded by %1$s" : "Letöltötte: %1$s",
+ "%1$s downloaded via public link" : "%1$s letöltve nyilvános hibatkozással",
+ "%1$s downloaded %2$s" : "%1$s letöltötte ezt: %2$s",
+ "Shared with group %1$s" : "Megosztva ezzel a csoporttal: %1$s",
+ "Removed share for group %1$s" : "%1$s csoport megosztása eltávolítva",
+ "%2$s shared with group %1$s" : "%2$s megosztva ezzel a csoporttal: %1$s",
+ "%2$s removed share for group %1$s" : "%2$s eltávolította %1$s csoport megosztását",
+ "You removed group %2$s from %1$s" : "Eltávolítottad ezt csoportot: %2$s innen: %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s megosztotta ezt: %1$s, ezzel a csoporttal: %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s eltávolította ezt a csoportot: %2$s innen: %1$s",
+ "%1$s shared as public link" : "%1$s megosztva nyilvános hivatkozásként",
+ "%1$s removed public link" : "%1$s eltávolított egy nyilvános hivatkozást",
+ "You shared %1$s as public link" : "Nyilvános hivatkozáskánt megosztottad ezt: %1$s",
+ "You removed public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
+ "%2$s shared %1$s as public link" : "%2$s nyilvános hivatkozásként megosztotta ezt: %1$s",
+ "%2$s removed public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
+ "%1$s accepted the remote share" : "%1$s elfogadta a távoli megosztást",
+ "%1$s declined the remote share" : "%1$s visszautasította a távoli megosztást",
+ "You received a new remote share %1$s from %2$s" : "Egy új távoli megosztást kaptál ehhez: %1$s tőle: %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s elfogadta %1$s távoli megosztását",
+ "%2$s declined the remote share of %1$s" : "%2$s visszautasította %1$s távoli megosztását",
+ "%2$s unshared %1$s from you" : "%2$s visszavonta tőled %1$s megosztását",
+ "Shared with %1$s" : "Megosztva vele: %1$s",
+ "Removed share for %1$s" : "%1$s megosztása eltávolítva",
+ "%2$s shared with %1$s" : "%2$s megosztotta vele: %1$s",
+ "%2$s removed share for %1$s" : "%2$s eltávolította %1$s megosztását",
+ "Shared by %1$s" : "Megosztotta: %1$s",
+ "%1$s removed share" : "%1$s eltávolította a megosztást",
+ "You removed %2$s from %1$s" : "Eltávolítottad ezt: %2$s tőle: %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s megosztotta ezt: %1$s vele: %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s eltávolította ezt: %2$s innen: %1$s",
+ "%2$s removed you from %1$s" : "%2$s eltívolított innen: %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json
index 75ec4969e69..650d631e365 100644
--- a/apps/files_sharing/l10n/hu_HU.json
+++ b/apps/files_sharing/l10n/hu_HU.json
@@ -18,76 +18,42 @@
"Sharing" : "Megosztás",
"File shares" : "Fájl megosztások",
"Downloaded via public link" : "Letöltve nyilvános hivatkozással",
- "Downloaded by %1$s" : "Letöltötte: %1$s",
"Downloaded by {email}" : "Letöltötte: {email}",
- "%1$s downloaded via public link" : "%1$s letöltve nyilvános hibatkozással",
"{file} downloaded via public link" : "{file} letöltve nyilvános hibatkozással",
- "%1$s downloaded %2$s" : "%1$s letöltötte ezt: %2$s",
"{email} downloaded {file}" : "{email} letöltötte ezt: {file}",
- "Shared with group %1$s" : "Megosztva ezzel a csoporttal: %1$s",
"Shared with group {group}" : "Megosztva ezzel a csoporttal: {group}",
- "Removed share for group %1$s" : "%1$s csoport megosztása eltávolítva",
"Removed share for group {group}" : "{group} csoport megosztása eltávolítva",
- "%2$s shared with group %1$s" : "%2$s megosztva ezzel a csoporttal: %1$s",
"{actor} shared with group {group}" : "{actor} megosztva ezzel a csoporttal: {group}",
- "%2$s removed share for group %1$s" : "%2$s eltávolította %1$s csoport megosztását",
"{actor} removed share for group {group}" : "{actor} eltávolította {group} csoport megosztását",
- "You shared %1$s with group %2$s" : "Megosztottad ezt: %1$s ezzel a csoporttal: %2$s",
"You shared {file} with group {group}" : "Megosztottad ezt: {file} ezzel a csoporttal: {group}",
- "You removed group %2$s from %1$s" : "Eltávolítottad ezt csoportot: %2$s innen: %1$s",
"You removed group {group} from {file}" : "Eltávolítottad ezt csoportot: {group} innen: {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s megosztotta ezt: %1$s, ezzel a csoporttal: %2$s",
"{actor} shared {file} with group {group}" : "{actor} megosztotta ezt: {file} ezzel a csoporttal: {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s eltávolította ezt a csoportot: %2$s innen: %1$s",
"{actor} removed group {group} from {file}" : "{actor} eltávolította ezt a csoportot {group} innen: {file}",
"Shared as public link" : "Megosztva nyilvános hivatkozásként",
"Removed public link" : "Eltávolított nyilvános hivatkozás",
- "%1$s shared as public link" : "%1$s megosztva nyilvános hivatkozásként",
+ "Public link expired" : "Nyilvános hivatkozás lejárt",
"{actor} shared as public link" : "{actor} megosztva nyilvános hivatkozásként",
- "%1$s removed public link" : "%1$s eltávolított egy nyilvános hivatkozást",
"{actor} removed public link" : "{actor} eltávolított egy nyilvános hivatkozást",
- "You shared %1$s as public link" : "Nyilvános hivatkozáskánt megosztottad ezt: %1$s",
"You shared {file} as public link" : "Nyilvános hivatkozáskánt megosztottad ezt: {file}",
- "You removed public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
"You removed public link for {file}" : "Eltávolítottad {file} nyilvános hivatkozását",
- "%2$s shared %1$s as public link" : "%2$s nyilvános hivatkozásként megosztotta ezt: %1$s",
"{actor} shared {file} as public link" : "{actor} nyilvános hivatkozásként megosztotta ezt: {file}",
- "%2$s removed public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
"{actor} removed public link for {file}" : "{actor} eltávolította {file} nyilvános hivatkozását",
- "%1$s accepted the remote share" : "%1$s elfogadta a távoli megosztást",
"{user} accepted the remote share" : "{user} elfogadta a távoli megosztást",
- "%1$s declined the remote share" : "%1$s visszautasította a távoli megosztást",
"{user} declined the remote share" : "{user} visszautasította a távoli megosztást",
- "You received a new remote share %1$s from %2$s" : "Egy új távoli megosztást kaptál ehhez: %1$s tőle: %2$s",
"You received a new remote share {file} from {user}" : "Egy új távoli megosztást kaptál ehhez: {file} tőle: {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s elfogadta %1$s távoli megosztását",
"{user} accepted the remote share of {file}" : "{user} elfogadta {file} távoli megosztását",
- "%2$s declined the remote share of %1$s" : "%2$s visszautasította %1$s távoli megosztását",
"{user} declined the remote share of {file}" : "{user} visszautasította {file} távoli megosztását",
- "%2$s unshared %1$s from you" : "%2$s visszavonta tőled %1$s megosztását",
"{user} unshared {file} from you" : "{user} visszavonta tőled {file} megosztását",
- "Shared with %1$s" : "Megosztva vele: %1$s",
"Shared with {user}" : "Megosztva vele: {user}",
- "Removed share for %1$s" : "%1$s megosztása eltávolítva",
"Removed share for {user}" : "{user} megosztása eltávolítva",
- "%2$s shared with %1$s" : "%2$s megosztotta vele: %1$s",
"{actor} shared with {user}" : "{actor} megosztotta vele: {user}",
- "%2$s removed share for %1$s" : "%2$s eltávolította %1$s megosztását",
"{actor} removed share for {user}" : "{actor} eltávolította {user} megosztását",
- "Shared by %1$s" : "Megosztotta: %1$s",
"Shared by {actor}" : "Megosztotta: {actor}",
- "%1$s removed share" : "%1$s eltávolította a megosztást",
"{actor} removed share" : "{actor} eltávolította a megosztást",
- "You shared %1$s with %2$s" : "Megosztottad ezt: %1$s vele: %2$s",
"You shared {file} with {user}" : "Megosztottad ezt: {file} vele: {user}",
- "You removed %2$s from %1$s" : "Eltávolítottad ezt: %2$s tőle: %1$s",
"You removed {user} from {file}" : "Eltávolítottad ezt: {user} tőle: {file}",
- "%3$s shared %1$s with %2$s" : "%3$s megosztotta ezt: %1$s vele: %2$s",
"{actor} removed {user} from {file}" : "{actor} eltávolította ezt: {user} innen: {file}",
- "%3$s removed %2$s from %1$s" : "%3$s eltávolította ezt: %2$s innen: %1$s",
- "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"{actor} shared {file} with you" : "{actor} megosztotta veled ezt: {file}",
- "%2$s removed you from %1$s" : "%2$s eltívolított innen: %1$s",
"{actor} removed you from {file}" : "{actor} eltávolított innen: {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Egy e-mailben vagy nyilvános hivatkozással megosztott fájl vagy mappa <strong>letöltve</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy mappa meg lett osztva egy <strong>másik szerverről</strong>",
@@ -144,9 +110,11 @@
"%1$s unshared %2$s from you" : "%1$s megosztás visszavonva %2$s által",
"Public shared folder %1$s was downloaded" : "%1$s nyilvánosan megosztott mappa le lett töltve",
"Public shared file %1$s was downloaded" : "Nyilvánosan megosztott fálj %1$s le lett töltve",
+ "You shared %1$s with %2$s" : "Megosztottad ezt: %1$s vele: %2$s",
"%2$s shared %1$s with %3$s" : "%2$s megosztotta ezt: %1$s, ővele: %3$s",
"You removed the share of %2$s for %1$s" : "Eltávolítottad %2$s következő megosztását: %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s eltávolította %3$s következő megosztását: %1$s",
+ "You shared %1$s with group %2$s" : "Megosztottad ezt: %1$s ezzel a csoporttal: %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s megosztotta ezt: %1$s, ezzel a csoporttal: %3$s",
"You removed the share of group %2$s for %1$s" : "Eltávolítottad %2$s csoport %1$s megosztását",
"%2$s removed the share of group %3$s for %1$s" : "%2$s eltávolította %3$s csoport %1$s megosztását",
@@ -156,6 +124,7 @@
"%2$s removed the public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
"Your public link for %1$s expired" : "%1$s nyilvános hivatkozásod lejárt",
"The public link of %2$s for %1$s expired" : "%2$s %1$s nyilvános hivatkozása lejárt",
+ "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"%2$s removed the share for %1$s" : "%2$s eltávolította %1$s megosztását",
"Shared with %2$s" : "Megosztva vele: %2$s",
"Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
@@ -168,9 +137,40 @@
"Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
"Shared via public link" : "Megosztva nyilvános hivatkozással",
"%2$s removed public link" : "%2$s eltávolított egy nyilvános hivatkozást",
- "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"
+ "Shares" : "Megosztások",
+ "Downloaded by %1$s" : "Letöltötte: %1$s",
+ "%1$s downloaded via public link" : "%1$s letöltve nyilvános hibatkozással",
+ "%1$s downloaded %2$s" : "%1$s letöltötte ezt: %2$s",
+ "Shared with group %1$s" : "Megosztva ezzel a csoporttal: %1$s",
+ "Removed share for group %1$s" : "%1$s csoport megosztása eltávolítva",
+ "%2$s shared with group %1$s" : "%2$s megosztva ezzel a csoporttal: %1$s",
+ "%2$s removed share for group %1$s" : "%2$s eltávolította %1$s csoport megosztását",
+ "You removed group %2$s from %1$s" : "Eltávolítottad ezt csoportot: %2$s innen: %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s megosztotta ezt: %1$s, ezzel a csoporttal: %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s eltávolította ezt a csoportot: %2$s innen: %1$s",
+ "%1$s shared as public link" : "%1$s megosztva nyilvános hivatkozásként",
+ "%1$s removed public link" : "%1$s eltávolított egy nyilvános hivatkozást",
+ "You shared %1$s as public link" : "Nyilvános hivatkozáskánt megosztottad ezt: %1$s",
+ "You removed public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
+ "%2$s shared %1$s as public link" : "%2$s nyilvános hivatkozásként megosztotta ezt: %1$s",
+ "%2$s removed public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
+ "%1$s accepted the remote share" : "%1$s elfogadta a távoli megosztást",
+ "%1$s declined the remote share" : "%1$s visszautasította a távoli megosztást",
+ "You received a new remote share %1$s from %2$s" : "Egy új távoli megosztást kaptál ehhez: %1$s tőle: %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s elfogadta %1$s távoli megosztását",
+ "%2$s declined the remote share of %1$s" : "%2$s visszautasította %1$s távoli megosztását",
+ "%2$s unshared %1$s from you" : "%2$s visszavonta tőled %1$s megosztását",
+ "Shared with %1$s" : "Megosztva vele: %1$s",
+ "Removed share for %1$s" : "%1$s megosztása eltávolítva",
+ "%2$s shared with %1$s" : "%2$s megosztotta vele: %1$s",
+ "%2$s removed share for %1$s" : "%2$s eltávolította %1$s megosztását",
+ "Shared by %1$s" : "Megosztotta: %1$s",
+ "%1$s removed share" : "%1$s eltávolította a megosztást",
+ "You removed %2$s from %1$s" : "Eltávolítottad ezt: %2$s tőle: %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s megosztotta ezt: %1$s vele: %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s eltávolította ezt: %2$s innen: %1$s",
+ "%2$s removed you from %1$s" : "%2$s eltívolított innen: %1$s"
},"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 b216a0ccacc..3b8d4e47d94 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"Sharing" : "Condivisione",
"File shares" : "Condivisioni dei file",
"Downloaded via public link" : "Scaricata tramite collegamento pubblico",
- "Downloaded by %1$s" : "Scaricato da %1$s",
"Downloaded by {email}" : "Scaricato da {email}",
- "%1$s downloaded via public link" : "%1$s scaricato tramite collegamento pubblico",
"{file} downloaded via public link" : "{file} scaricato tramite collegamento pubblico",
- "%1$s downloaded %2$s" : "%1$s ha scaricato %2$s",
"{email} downloaded {file}" : "{email} ha scaricato {file}",
- "Shared with group %1$s" : "Condivisa con il gruppo %1$s",
"Shared with group {group}" : "Condivisa con il gruppo {group}",
- "Removed share for group %1$s" : "Condivisione rimossa per %1$s",
"Removed share for group {group}" : "Condivisione rimossa per il gruppo {group}",
- "%2$s shared with group %1$s" : "%2$s ha condiviso con il gruppo %1$s",
"{actor} shared with group {group}" : "{actor} ha condiviso con il gruppo {group}",
- "%2$s removed share for group %1$s" : "%2$s ha rimosso la condivisione del gruppo %1$s",
"{actor} removed share for group {group}" : "{actor} ha rimosso la condivisione del gruppo {group}",
- "You shared %1$s with group %2$s" : "Hai condiviso %1$s con il gruppo %2$s",
"You shared {file} with group {group}" : "Hai condiviso {file} con il gruppo {group}",
- "You removed group %2$s from %1$s" : "Hai rimosso il gruppo %2$s da %1$s",
"You removed group {group} from {file}" : "Hai rimosso il gruppo {group} da {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s ha condiviso %1$s con il gruppo %2$s",
"{actor} shared {file} with group {group}" : "{actor} ha condiviso {file} con il gruppo {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s ha rimosso il gruppo %2$s da %1$s",
"{actor} removed group {group} from {file}" : "{actor} ha ti rimosso il gruppo {group} da {file}",
"Shared as public link" : "Condivisa tramite collegamento pubblico",
"Removed public link" : "Collegamento pubblico rimosso",
- "%1$s shared as public link" : "%1$s condivisa tramite collegamento pubblico",
+ "Public link expired" : "Collegamento pubblico scaduto",
"{actor} shared as public link" : "{actor} ha condiviso tramite collegamento pubblico",
- "%1$s removed public link" : "%1$s ha rimosso il collegamento pubblico",
"{actor} removed public link" : "{actor} ha rimosso il collegamento pubblico",
- "You shared %1$s as public link" : "Hai condiviso %1$s tramite collegamento",
"You shared {file} as public link" : "Hai condiviso {file} tramite collegamento",
- "You removed public link for %1$s" : "Hai rimosso il collegamento pubblico per %1$s",
"You removed public link for {file}" : "Hai rimosso il collegamento pubblico per {file}",
- "%2$s shared %1$s as public link" : "%2$s ha condiviso %1$s tramite collegamento pubblico",
"{actor} shared {file} as public link" : "{actor} ha condiviso {file} tramite collegamento pubblico",
- "%2$s removed public link for %1$s" : "%2$s ha rimosso il collegamento pubblico per %1$s",
"{actor} removed public link for {file}" : "{actor} ha rimosso il collegamento pubblico per {file}",
- "%1$s accepted the remote share" : "%1$s ha accettato la condivisione remota",
"{user} accepted the remote share" : "{user} ha accettato la condivisione remota",
- "%1$s declined the remote share" : "%1$s ha rifiutato la condivisione remota",
"{user} declined the remote share" : "{user} ha rifiutato la condivisione remota",
- "You received a new remote share %1$s from %2$s" : "Hai ricevuto una nuova condivisione remota %1$s da %2$s",
"You received a new remote share {file} from {user}" : "Hai ricevuto una nuova condivisione remota {file} da {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s ha accettato la condivisione remota di %1$s",
"{user} accepted the remote share of {file}" : "{user} ha accettato la condivisione remota di {file}",
- "%2$s declined the remote share of %1$s" : "%2$s ha rifiutato la condivisione remota %1$s",
"{user} declined the remote share of {file}" : "{user} ha rifiutato la condivisione remota di {file}",
- "%2$s unshared %1$s from you" : "%2$s ha rimosso la condivisione %1$s con te",
"{user} unshared {file} from you" : "{user} ha rimosso la condivisione {file} con te",
- "Shared with %1$s" : "Condivisa con %1$s",
"Shared with {user}" : "Condivisa con {user}",
- "Removed share for %1$s" : "Condivisione rimossa per %1$s",
"Removed share for {user}" : "Condivisione rimossa per {user}",
- "%2$s shared with %1$s" : "%2$s condivisa con %1$s",
"{actor} shared with {user}" : "{actor} ha condiviso con {user}",
- "%2$s removed share for %1$s" : "%2$s ha rimosso la condivisione per %1$s",
"{actor} removed share for {user}" : "{actor} ha rimosso la condivisione con {user}",
- "Shared by %1$s" : "Condivisa da %1$s",
"Shared by {actor}" : "Condiviso da {actor}",
- "%1$s removed share" : "%1$s ha rimosso la condivisione",
"{actor} removed share" : "{actor} ha rimosso la condivisione",
- "You shared %1$s with %2$s" : "Hai condiviso %1$s con %2$s",
"You shared {file} with {user}" : "Hai condiviso {file} con {user}",
- "You removed %2$s from %1$s" : "Hai rimosso %2$s da %1$s",
"You removed {user} from {file}" : "Hai rimosso {user} da {file}",
- "%3$s shared %1$s with %2$s" : "%3$s ha condiviso %1$s con %2$s",
"{actor} removed {user} from {file}" : "{actor} ha rimosso {user} da {file}",
- "%3$s removed %2$s from %1$s" : "%3$s ha rimosso %2$s da %1$s",
- "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te",
"{actor} shared {file} with you" : "{actor} ha condiviso {file} con te",
- "%2$s removed you from %1$s" : "%2$s ti ha rimosso da %1$s",
"{actor} removed you from {file}" : "{actor} ha ti rimosso da {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un file o una cartella condiviso via posta elettronica o collegamento pubblico è stato <strong>scaricato</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>",
@@ -146,9 +112,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s ha rimosso la condivisione %2$s con te",
"Public shared folder %1$s was downloaded" : "La cartella condivisa pubblicamente %1$s è stata scaricata",
"Public shared file %1$s was downloaded" : "Il file condiviso pubblicamente %1$s è stato scaricato",
+ "You shared %1$s with %2$s" : "Hai condiviso %1$s con %2$s",
"%2$s shared %1$s with %3$s" : "%2$s ha condiviso %1$s con %3$s",
"You removed the share of %2$s for %1$s" : "Hai rimosso la condivisione di %2$s per %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s ha rimosso la condivisione di %3$s per %1$s",
+ "You shared %1$s with group %2$s" : "Hai condiviso %1$s con il gruppo %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s ha condiviso %1$s con il gruppo %3$s",
"You removed the share of group %2$s for %1$s" : "Hai rimosso la condivisione del gruppo %2$s per %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s ha rimosso la condivisione del gruppo %3$s per %1$s",
@@ -158,6 +126,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s ha rimosso il collegamento pubblico per %1$s",
"Your public link for %1$s expired" : "il tuo collegamento pubblico per %1$s è scaduto",
"The public link of %2$s for %1$s expired" : "il collegamento pubblico di %2$s per %1$s è scaduto",
+ "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te",
"%2$s removed the share for %1$s" : "%2$s ha rimosso la condivisione per %1$s",
"Shared with %2$s" : "Condivisa con %2$s",
"Shared with %3$s by %2$s" : "Condivisa con %3$s da %2$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Condivisa tramite collegamento da %2$s",
"Shared via public link" : "Condivisa tramite collegamento pubblico",
"%2$s removed public link" : "%2$s ha rimosso il collegamento pubblico",
- "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"
+ "Shares" : "Condivisioni",
+ "Downloaded by %1$s" : "Scaricato da %1$s",
+ "%1$s downloaded via public link" : "%1$s scaricato tramite collegamento pubblico",
+ "%1$s downloaded %2$s" : "%1$s ha scaricato %2$s",
+ "Shared with group %1$s" : "Condivisa con il gruppo %1$s",
+ "Removed share for group %1$s" : "Condivisione rimossa per %1$s",
+ "%2$s shared with group %1$s" : "%2$s ha condiviso con il gruppo %1$s",
+ "%2$s removed share for group %1$s" : "%2$s ha rimosso la condivisione del gruppo %1$s",
+ "You removed group %2$s from %1$s" : "Hai rimosso il gruppo %2$s da %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s ha condiviso %1$s con il gruppo %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s ha rimosso il gruppo %2$s da %1$s",
+ "%1$s shared as public link" : "%1$s condivisa tramite collegamento pubblico",
+ "%1$s removed public link" : "%1$s ha rimosso il collegamento pubblico",
+ "You shared %1$s as public link" : "Hai condiviso %1$s tramite collegamento",
+ "You removed public link for %1$s" : "Hai rimosso il collegamento pubblico per %1$s",
+ "%2$s shared %1$s as public link" : "%2$s ha condiviso %1$s tramite collegamento pubblico",
+ "%2$s removed public link for %1$s" : "%2$s ha rimosso il collegamento pubblico per %1$s",
+ "%1$s accepted the remote share" : "%1$s ha accettato la condivisione remota",
+ "%1$s declined the remote share" : "%1$s ha rifiutato la condivisione remota",
+ "You received a new remote share %1$s from %2$s" : "Hai ricevuto una nuova condivisione remota %1$s da %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s ha accettato la condivisione remota di %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s ha rifiutato la condivisione remota %1$s",
+ "%2$s unshared %1$s from you" : "%2$s ha rimosso la condivisione %1$s con te",
+ "Shared with %1$s" : "Condivisa con %1$s",
+ "Removed share for %1$s" : "Condivisione rimossa per %1$s",
+ "%2$s shared with %1$s" : "%2$s condivisa con %1$s",
+ "%2$s removed share for %1$s" : "%2$s ha rimosso la condivisione per %1$s",
+ "Shared by %1$s" : "Condivisa da %1$s",
+ "%1$s removed share" : "%1$s ha rimosso la condivisione",
+ "You removed %2$s from %1$s" : "Hai rimosso %2$s da %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s ha condiviso %1$s con %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s ha rimosso %2$s da %1$s",
+ "%2$s removed you from %1$s" : "%2$s ti ha rimosso da %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index dc2f25f1676..b1243cb8a77 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -18,76 +18,42 @@
"Sharing" : "Condivisione",
"File shares" : "Condivisioni dei file",
"Downloaded via public link" : "Scaricata tramite collegamento pubblico",
- "Downloaded by %1$s" : "Scaricato da %1$s",
"Downloaded by {email}" : "Scaricato da {email}",
- "%1$s downloaded via public link" : "%1$s scaricato tramite collegamento pubblico",
"{file} downloaded via public link" : "{file} scaricato tramite collegamento pubblico",
- "%1$s downloaded %2$s" : "%1$s ha scaricato %2$s",
"{email} downloaded {file}" : "{email} ha scaricato {file}",
- "Shared with group %1$s" : "Condivisa con il gruppo %1$s",
"Shared with group {group}" : "Condivisa con il gruppo {group}",
- "Removed share for group %1$s" : "Condivisione rimossa per %1$s",
"Removed share for group {group}" : "Condivisione rimossa per il gruppo {group}",
- "%2$s shared with group %1$s" : "%2$s ha condiviso con il gruppo %1$s",
"{actor} shared with group {group}" : "{actor} ha condiviso con il gruppo {group}",
- "%2$s removed share for group %1$s" : "%2$s ha rimosso la condivisione del gruppo %1$s",
"{actor} removed share for group {group}" : "{actor} ha rimosso la condivisione del gruppo {group}",
- "You shared %1$s with group %2$s" : "Hai condiviso %1$s con il gruppo %2$s",
"You shared {file} with group {group}" : "Hai condiviso {file} con il gruppo {group}",
- "You removed group %2$s from %1$s" : "Hai rimosso il gruppo %2$s da %1$s",
"You removed group {group} from {file}" : "Hai rimosso il gruppo {group} da {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s ha condiviso %1$s con il gruppo %2$s",
"{actor} shared {file} with group {group}" : "{actor} ha condiviso {file} con il gruppo {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s ha rimosso il gruppo %2$s da %1$s",
"{actor} removed group {group} from {file}" : "{actor} ha ti rimosso il gruppo {group} da {file}",
"Shared as public link" : "Condivisa tramite collegamento pubblico",
"Removed public link" : "Collegamento pubblico rimosso",
- "%1$s shared as public link" : "%1$s condivisa tramite collegamento pubblico",
+ "Public link expired" : "Collegamento pubblico scaduto",
"{actor} shared as public link" : "{actor} ha condiviso tramite collegamento pubblico",
- "%1$s removed public link" : "%1$s ha rimosso il collegamento pubblico",
"{actor} removed public link" : "{actor} ha rimosso il collegamento pubblico",
- "You shared %1$s as public link" : "Hai condiviso %1$s tramite collegamento",
"You shared {file} as public link" : "Hai condiviso {file} tramite collegamento",
- "You removed public link for %1$s" : "Hai rimosso il collegamento pubblico per %1$s",
"You removed public link for {file}" : "Hai rimosso il collegamento pubblico per {file}",
- "%2$s shared %1$s as public link" : "%2$s ha condiviso %1$s tramite collegamento pubblico",
"{actor} shared {file} as public link" : "{actor} ha condiviso {file} tramite collegamento pubblico",
- "%2$s removed public link for %1$s" : "%2$s ha rimosso il collegamento pubblico per %1$s",
"{actor} removed public link for {file}" : "{actor} ha rimosso il collegamento pubblico per {file}",
- "%1$s accepted the remote share" : "%1$s ha accettato la condivisione remota",
"{user} accepted the remote share" : "{user} ha accettato la condivisione remota",
- "%1$s declined the remote share" : "%1$s ha rifiutato la condivisione remota",
"{user} declined the remote share" : "{user} ha rifiutato la condivisione remota",
- "You received a new remote share %1$s from %2$s" : "Hai ricevuto una nuova condivisione remota %1$s da %2$s",
"You received a new remote share {file} from {user}" : "Hai ricevuto una nuova condivisione remota {file} da {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s ha accettato la condivisione remota di %1$s",
"{user} accepted the remote share of {file}" : "{user} ha accettato la condivisione remota di {file}",
- "%2$s declined the remote share of %1$s" : "%2$s ha rifiutato la condivisione remota %1$s",
"{user} declined the remote share of {file}" : "{user} ha rifiutato la condivisione remota di {file}",
- "%2$s unshared %1$s from you" : "%2$s ha rimosso la condivisione %1$s con te",
"{user} unshared {file} from you" : "{user} ha rimosso la condivisione {file} con te",
- "Shared with %1$s" : "Condivisa con %1$s",
"Shared with {user}" : "Condivisa con {user}",
- "Removed share for %1$s" : "Condivisione rimossa per %1$s",
"Removed share for {user}" : "Condivisione rimossa per {user}",
- "%2$s shared with %1$s" : "%2$s condivisa con %1$s",
"{actor} shared with {user}" : "{actor} ha condiviso con {user}",
- "%2$s removed share for %1$s" : "%2$s ha rimosso la condivisione per %1$s",
"{actor} removed share for {user}" : "{actor} ha rimosso la condivisione con {user}",
- "Shared by %1$s" : "Condivisa da %1$s",
"Shared by {actor}" : "Condiviso da {actor}",
- "%1$s removed share" : "%1$s ha rimosso la condivisione",
"{actor} removed share" : "{actor} ha rimosso la condivisione",
- "You shared %1$s with %2$s" : "Hai condiviso %1$s con %2$s",
"You shared {file} with {user}" : "Hai condiviso {file} con {user}",
- "You removed %2$s from %1$s" : "Hai rimosso %2$s da %1$s",
"You removed {user} from {file}" : "Hai rimosso {user} da {file}",
- "%3$s shared %1$s with %2$s" : "%3$s ha condiviso %1$s con %2$s",
"{actor} removed {user} from {file}" : "{actor} ha rimosso {user} da {file}",
- "%3$s removed %2$s from %1$s" : "%3$s ha rimosso %2$s da %1$s",
- "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te",
"{actor} shared {file} with you" : "{actor} ha condiviso {file} con te",
- "%2$s removed you from %1$s" : "%2$s ti ha rimosso da %1$s",
"{actor} removed you from {file}" : "{actor} ha ti rimosso da {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un file o una cartella condiviso via posta elettronica o collegamento pubblico è stato <strong>scaricato</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>",
@@ -144,9 +110,11 @@
"%1$s unshared %2$s from you" : "%1$s ha rimosso la condivisione %2$s con te",
"Public shared folder %1$s was downloaded" : "La cartella condivisa pubblicamente %1$s è stata scaricata",
"Public shared file %1$s was downloaded" : "Il file condiviso pubblicamente %1$s è stato scaricato",
+ "You shared %1$s with %2$s" : "Hai condiviso %1$s con %2$s",
"%2$s shared %1$s with %3$s" : "%2$s ha condiviso %1$s con %3$s",
"You removed the share of %2$s for %1$s" : "Hai rimosso la condivisione di %2$s per %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s ha rimosso la condivisione di %3$s per %1$s",
+ "You shared %1$s with group %2$s" : "Hai condiviso %1$s con il gruppo %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s ha condiviso %1$s con il gruppo %3$s",
"You removed the share of group %2$s for %1$s" : "Hai rimosso la condivisione del gruppo %2$s per %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s ha rimosso la condivisione del gruppo %3$s per %1$s",
@@ -156,6 +124,7 @@
"%2$s removed the public link for %1$s" : "%2$s ha rimosso il collegamento pubblico per %1$s",
"Your public link for %1$s expired" : "il tuo collegamento pubblico per %1$s è scaduto",
"The public link of %2$s for %1$s expired" : "il collegamento pubblico di %2$s per %1$s è scaduto",
+ "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te",
"%2$s removed the share for %1$s" : "%2$s ha rimosso la condivisione per %1$s",
"Shared with %2$s" : "Condivisa con %2$s",
"Shared with %3$s by %2$s" : "Condivisa con %3$s da %2$s",
@@ -168,9 +137,40 @@
"Shared via link by %2$s" : "Condivisa tramite collegamento da %2$s",
"Shared via public link" : "Condivisa tramite collegamento pubblico",
"%2$s removed public link" : "%2$s ha rimosso il collegamento pubblico",
- "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"
+ "Shares" : "Condivisioni",
+ "Downloaded by %1$s" : "Scaricato da %1$s",
+ "%1$s downloaded via public link" : "%1$s scaricato tramite collegamento pubblico",
+ "%1$s downloaded %2$s" : "%1$s ha scaricato %2$s",
+ "Shared with group %1$s" : "Condivisa con il gruppo %1$s",
+ "Removed share for group %1$s" : "Condivisione rimossa per %1$s",
+ "%2$s shared with group %1$s" : "%2$s ha condiviso con il gruppo %1$s",
+ "%2$s removed share for group %1$s" : "%2$s ha rimosso la condivisione del gruppo %1$s",
+ "You removed group %2$s from %1$s" : "Hai rimosso il gruppo %2$s da %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s ha condiviso %1$s con il gruppo %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s ha rimosso il gruppo %2$s da %1$s",
+ "%1$s shared as public link" : "%1$s condivisa tramite collegamento pubblico",
+ "%1$s removed public link" : "%1$s ha rimosso il collegamento pubblico",
+ "You shared %1$s as public link" : "Hai condiviso %1$s tramite collegamento",
+ "You removed public link for %1$s" : "Hai rimosso il collegamento pubblico per %1$s",
+ "%2$s shared %1$s as public link" : "%2$s ha condiviso %1$s tramite collegamento pubblico",
+ "%2$s removed public link for %1$s" : "%2$s ha rimosso il collegamento pubblico per %1$s",
+ "%1$s accepted the remote share" : "%1$s ha accettato la condivisione remota",
+ "%1$s declined the remote share" : "%1$s ha rifiutato la condivisione remota",
+ "You received a new remote share %1$s from %2$s" : "Hai ricevuto una nuova condivisione remota %1$s da %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s ha accettato la condivisione remota di %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s ha rifiutato la condivisione remota %1$s",
+ "%2$s unshared %1$s from you" : "%2$s ha rimosso la condivisione %1$s con te",
+ "Shared with %1$s" : "Condivisa con %1$s",
+ "Removed share for %1$s" : "Condivisione rimossa per %1$s",
+ "%2$s shared with %1$s" : "%2$s condivisa con %1$s",
+ "%2$s removed share for %1$s" : "%2$s ha rimosso la condivisione per %1$s",
+ "Shared by %1$s" : "Condivisa da %1$s",
+ "%1$s removed share" : "%1$s ha rimosso la condivisione",
+ "You removed %2$s from %1$s" : "Hai rimosso %2$s da %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s ha condiviso %1$s con %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s ha rimosso %2$s da %1$s",
+ "%2$s removed you from %1$s" : "%2$s ti ha rimosso da %1$s"
},"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 c9e842c5d8b..07692b58fe9 100644
--- a/apps/files_sharing/l10n/nb_NO.js
+++ b/apps/files_sharing/l10n/nb_NO.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"Sharing" : "Deling",
"File shares" : "Fildelinger",
"Downloaded via public link" : "Nedlastet 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",
- "%1$s shared as public link" : "%1$s delt som offentlig lenke",
+ "Public link expired" : "Offentlig lenke er utløpt",
"{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>",
@@ -146,9 +112,11 @@ OC.L10N.register(
"%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",
@@ -158,6 +126,7 @@ OC.L10N.register(
"%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",
"Shared with %2$s" : "Delt med %2$s",
"Shared with %3$s by %2$s" : "Delt med %3$s av %2$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"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"
+ "Shares" : "Delinger",
+ "Downloaded by %1$s" : "Lastet ned av %1$s",
+ "%1$s downloaded via public link" : "%1$s lastet ned via offentlig lenke",
+ "%1$s downloaded %2$s" : "%1$s lastet ned %2$s",
+ "Shared with group %1$s" : "Delt med gruppen %1$s",
+ "Removed share for group %1$s" : "Fjernet deling for gruppen %1$s",
+ "%2$s shared with group %1$s" : "%2$s delt med gruppen %1$s",
+ "%2$s removed share for group %1$s" : "%2$s fjernet deling for gruppen %1$s",
+ "You removed group %2$s from %1$s" : "Du fjernet gruppen %2$s fra %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s delte %1$s med gruppen %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s fjernet gruppen %2$s fra %1$s",
+ "%1$s shared as public link" : "%1$s delt som offentlig lenke",
+ "%1$s removed public link" : "%1$s fjernet offentlig lenke",
+ "You shared %1$s as public link" : "Du delte %1$s som offentlig lenke",
+ "You removed public link for %1$s" : "Du fjernet offentlig lenke for %1$s",
+ "%2$s shared %1$s as public link" : "%2$s delte %1$s som offentlig lenke",
+ "%2$s removed public link for %1$s" : "%2$s fjernet offentlig lenke for %1$s",
+ "%1$s accepted the remote share" : "%1$s godtok den offentlige delingen",
+ "%1$s declined the remote share" : "%1$s avslo fjerndelingen",
+ "You received a new remote share %1$s from %2$s" : "Du har mottatt en ny fjerndeling %1$s fra %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s godtok fjerndelingen av %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s avslo fjerndelingen av %1$s",
+ "%2$s unshared %1$s from you" : "%2$s fjernet deling av %1$s med deg",
+ "Shared with %1$s" : "Delt med %1$s",
+ "Removed share for %1$s" : "Fjernet deling med %1$s",
+ "%2$s shared with %1$s" : "%2$s delt med %1$s",
+ "%2$s removed share for %1$s" : "%2$s fjernet deling med %1$s",
+ "Shared by %1$s" : "Delt av %1$s",
+ "%1$s removed share" : "%1$s fjernet deling",
+ "You removed %2$s from %1$s" : "Du fjernet %2$s fra %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s delte %1$s med %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s fjernet %2$s fra %1$s",
+ "%2$s removed you from %1$s" : "%2$s fjernet deg fra %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nb_NO.json b/apps/files_sharing/l10n/nb_NO.json
index bc829079db6..7dac9de24af 100644
--- a/apps/files_sharing/l10n/nb_NO.json
+++ b/apps/files_sharing/l10n/nb_NO.json
@@ -18,76 +18,42 @@
"Sharing" : "Deling",
"File shares" : "Fildelinger",
"Downloaded via public link" : "Nedlastet 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",
- "%1$s shared as public link" : "%1$s delt som offentlig lenke",
+ "Public link expired" : "Offentlig lenke er utløpt",
"{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>",
@@ -144,9 +110,11 @@
"%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",
@@ -156,6 +124,7 @@
"%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",
"Shared with %2$s" : "Delt med %2$s",
"Shared with %3$s by %2$s" : "Delt med %3$s av %2$s",
@@ -168,9 +137,40 @@
"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"
+ "Shares" : "Delinger",
+ "Downloaded by %1$s" : "Lastet ned av %1$s",
+ "%1$s downloaded via public link" : "%1$s lastet ned via offentlig lenke",
+ "%1$s downloaded %2$s" : "%1$s lastet ned %2$s",
+ "Shared with group %1$s" : "Delt med gruppen %1$s",
+ "Removed share for group %1$s" : "Fjernet deling for gruppen %1$s",
+ "%2$s shared with group %1$s" : "%2$s delt med gruppen %1$s",
+ "%2$s removed share for group %1$s" : "%2$s fjernet deling for gruppen %1$s",
+ "You removed group %2$s from %1$s" : "Du fjernet gruppen %2$s fra %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s delte %1$s med gruppen %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s fjernet gruppen %2$s fra %1$s",
+ "%1$s shared as public link" : "%1$s delt som offentlig lenke",
+ "%1$s removed public link" : "%1$s fjernet offentlig lenke",
+ "You shared %1$s as public link" : "Du delte %1$s som offentlig lenke",
+ "You removed public link for %1$s" : "Du fjernet offentlig lenke for %1$s",
+ "%2$s shared %1$s as public link" : "%2$s delte %1$s som offentlig lenke",
+ "%2$s removed public link for %1$s" : "%2$s fjernet offentlig lenke for %1$s",
+ "%1$s accepted the remote share" : "%1$s godtok den offentlige delingen",
+ "%1$s declined the remote share" : "%1$s avslo fjerndelingen",
+ "You received a new remote share %1$s from %2$s" : "Du har mottatt en ny fjerndeling %1$s fra %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s godtok fjerndelingen av %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s avslo fjerndelingen av %1$s",
+ "%2$s unshared %1$s from you" : "%2$s fjernet deling av %1$s med deg",
+ "Shared with %1$s" : "Delt med %1$s",
+ "Removed share for %1$s" : "Fjernet deling med %1$s",
+ "%2$s shared with %1$s" : "%2$s delt med %1$s",
+ "%2$s removed share for %1$s" : "%2$s fjernet deling med %1$s",
+ "Shared by %1$s" : "Delt av %1$s",
+ "%1$s removed share" : "%1$s fjernet deling",
+ "You removed %2$s from %1$s" : "Du fjernet %2$s fra %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s delte %1$s med %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s fjernet %2$s fra %1$s",
+ "%2$s removed you from %1$s" : "%2$s fjernet deg fra %1$s"
},"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 e5ba0ad7c21..5bda54d67f0 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"Sharing" : "Delen",
"File shares" : "File shares",
"Downloaded via public link" : "Gedownload via een openbare link",
- "Downloaded by %1$s" : "Gedownload door %1$s",
"Downloaded by {email}" : "Gedownload via {email}",
- "%1$s downloaded via public link" : "%1$s gedownload via openbare link",
"{file} downloaded via public link" : "{file} gedownload via openbare link",
- "%1$s downloaded %2$s" : "%1$s downloadde %2$s",
"{email} downloaded {file}" : "{email} downloadde {file}",
- "Shared with group %1$s" : "Deelde met groep %1$s",
"Shared with group {group}" : "Deelde met groep {group}",
- "Removed share for group %1$s" : "Share van de groep %1$s verwijderd",
"Removed share for group {group}" : "Share van de groep {group} verwijderd",
- "%2$s shared with group %1$s" : "%2$s deelde met groep %1$s",
"{actor} shared with group {group}" : "{actor} deelde met groep {group}",
- "%2$s removed share for group %1$s" : "%2$s verwijderde share voor groep %1$s",
"{actor} removed share for group {group}" : "{actor} verwijderde de share voor groep {group}",
- "You shared %1$s with group %2$s" : "Je deelde %1$s met groep %2$s",
"You shared {file} with group {group}" : "Je deelde {file} met groep {group}",
- "You removed group %2$s from %1$s" : "Je verwijderde groep %2$s van %1$s",
"You removed group {group} from {file}" : "Je verwijderde groep {group} van {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s deelde %1$s met groep %2$s",
"{actor} shared {file} with group {group}" : "{actor} deelde {file} met groep {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s verwijderde groep %2$s van %1$s",
"{actor} removed group {group} from {file}" : "{actor} verwijderde groep {group} van {file}",
"Shared as public link" : "Gedeeld als een openbare link",
"Removed public link" : "Openbare link verwijderd",
- "%1$s shared as public link" : "%1$s deelde als een openbare link",
+ "Public link expired" : "Openbare link is verlopen",
"{actor} shared as public link" : "{actor} deelde als een openbare link",
- "%1$s removed public link" : "%1$s verwijderde openbare link",
"{actor} removed public link" : "{actor} verwijderde openbare link",
- "You shared %1$s as public link" : "Je deelde %1$s als openbare link",
"You shared {file} as public link" : "Je deelde {file} als openbare link",
- "You removed public link for %1$s" : "Je verwijderde de openbare link voor %1$s",
"You removed public link for {file}" : "Je verwijderde de openbare link voor {file}",
- "%2$s shared %1$s as public link" : "%2$s deelde %1$s als een openbare link",
"{actor} shared {file} as public link" : "{actor} deelde {file} als openbare link",
- "%2$s removed public link for %1$s" : "%2$s verwijderde openbare link voor %1$s",
"{actor} removed public link for {file}" : "{actor} verwijderde openbare link voor {file}",
- "%1$s accepted the remote share" : "%1$s accepteerde externe share",
"{user} accepted the remote share" : "{user} accepteerde externe share",
- "%1$s declined the remote share" : "%1$s weigerde externe share",
"{user} declined the remote share" : "{user} weigerde externe share",
- "You received a new remote share %1$s from %2$s" : "Je ontving een nieuwe externe share voor %1$s van %2$s",
"You received a new remote share {file} from {user}" : "Je ontving een nieuwe externe share voor {file} van {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s accepteerde externe share van %1$s",
"{user} accepted the remote share of {file}" : "{user} accepteerde externe share van {file}",
- "%2$s declined the remote share of %1$s" : "%2$s weigerde de externe share van %1$s",
"{user} declined the remote share of {file}" : "{user} weigerde de externe share van {file}",
- "%2$s unshared %1$s from you" : "%2$s stopte met delen van %1$s met jou",
"{user} unshared {file} from you" : "{user} stopte met delen van {file} met jou",
- "Shared with %1$s" : "Gedeeld met %1$s",
"Shared with {user}" : "Gedeeld met {user}",
- "Removed share for %1$s" : "Verwijderde share voor %1$s",
"Removed share for {user}" : "Verwijderde share voor {user}",
- "%2$s shared with %1$s" : "%2$s deelde met %1$s",
"{actor} shared with {user}" : "{actor} deelde met {user}",
- "%2$s removed share for %1$s" : "%2$s verwijderde de share voor %1$s",
"{actor} removed share for {user}" : "{actor} verwijderde de share voor {user}",
- "Shared by %1$s" : "Gedeeld door %1$s",
"Shared by {actor}" : "Gedeeld door {actor}",
- "%1$s removed share" : "%1$s verwijderde de share",
"{actor} removed share" : "{actor} verwijderde de share",
- "You shared %1$s with %2$s" : "Je deelde %1$s met %2$s",
"You shared {file} with {user}" : "Je deelde {file} mey {user}",
- "You removed %2$s from %1$s" : "Je verwijderde %2$s van %1$s",
"You removed {user} from {file}" : "Je verwijderde {user} van {file}",
- "%3$s shared %1$s with %2$s" : "%3$s deelde %1$s met %2$s",
"{actor} removed {user} from {file}" : "{actor} verwijderde {user} van {file}",
- "%3$s removed %2$s from %1$s" : "%3$s verwijderde %2$s van %1$s",
- "%2$s shared %1$s with you" : "%2$s deelde %1$s met u",
"{actor} shared {file} with you" : "{actor} deelde {file} met jou",
- "%2$s removed you from %1$s" : "%2$s verwijderde jou van %1$s",
"{actor} removed you from {file}" : "{actor} verwijderde jou van {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Een bestand of map gedeeld via mail of publieke link werd <strong>gedownload</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>",
@@ -146,9 +112,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s stopte met delen van %2$s met je",
"Public shared folder %1$s was downloaded" : "Openbaar gedeelde map %1$s werd gedownloaded",
"Public shared file %1$s was downloaded" : "Openbaar gedeeld bestand %1$s werd gedownloaded",
+ "You shared %1$s with %2$s" : "Je deelde %1$s met %2$s",
"%2$s shared %1$s with %3$s" : "%2$s deelde %1$s met %3$s",
"You removed the share of %2$s for %1$s" : "Je hebt de share van %1$s met %2$s verwijderd",
"%2$s removed the share of %3$s for %1$s" : "%2$s heeft de share van %1$s met %3$s verwijderd",
+ "You shared %1$s with group %2$s" : "Je deelde %1$s met groep %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s deelde %1$s met groep %3$s",
"You removed the share of group %2$s for %1$s" : "Je hebt de share van %1$s met de groep %2$s verwijderd",
"%2$s removed the share of group %3$s for %1$s" : "%2$s heeft de share van %1$s met de groep %3$s verwijderd",
@@ -158,6 +126,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s heeft de openbare link voor %1$s verwijderd",
"Your public link for %1$s expired" : "Je openbare link voor %1$s is verlopen",
"The public link of %2$s for %1$s expired" : "De openbare link van %2$s voor %1$s is verlopen",
+ "%2$s shared %1$s with you" : "%2$s deelde %1$s met u",
"%2$s removed the share for %1$s" : "%2$s heeft de share van %1$s verwijderd",
"Shared with %2$s" : "Gedeeld met %2$s",
"Shared with %3$s by %2$s" : "Gedeeld met %3$s door %2$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Gedeeld via link door %2$s",
"Shared via public link" : "Gedeeld via een openbare link",
"%2$s removed public link" : "%2$s verwijderede openbare link",
- "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"
+ "Shares" : "Gedeeld",
+ "Downloaded by %1$s" : "Gedownload door %1$s",
+ "%1$s downloaded via public link" : "%1$s gedownload via openbare link",
+ "%1$s downloaded %2$s" : "%1$s downloadde %2$s",
+ "Shared with group %1$s" : "Deelde met groep %1$s",
+ "Removed share for group %1$s" : "Share van de groep %1$s verwijderd",
+ "%2$s shared with group %1$s" : "%2$s deelde met groep %1$s",
+ "%2$s removed share for group %1$s" : "%2$s verwijderde share voor groep %1$s",
+ "You removed group %2$s from %1$s" : "Je verwijderde groep %2$s van %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s deelde %1$s met groep %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s verwijderde groep %2$s van %1$s",
+ "%1$s shared as public link" : "%1$s deelde als een openbare link",
+ "%1$s removed public link" : "%1$s verwijderde openbare link",
+ "You shared %1$s as public link" : "Je deelde %1$s als openbare link",
+ "You removed public link for %1$s" : "Je verwijderde de openbare link voor %1$s",
+ "%2$s shared %1$s as public link" : "%2$s deelde %1$s als een openbare link",
+ "%2$s removed public link for %1$s" : "%2$s verwijderde openbare link voor %1$s",
+ "%1$s accepted the remote share" : "%1$s accepteerde externe share",
+ "%1$s declined the remote share" : "%1$s weigerde externe share",
+ "You received a new remote share %1$s from %2$s" : "Je ontving een nieuwe externe share voor %1$s van %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s accepteerde externe share van %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s weigerde de externe share van %1$s",
+ "%2$s unshared %1$s from you" : "%2$s stopte met delen van %1$s met jou",
+ "Shared with %1$s" : "Gedeeld met %1$s",
+ "Removed share for %1$s" : "Verwijderde share voor %1$s",
+ "%2$s shared with %1$s" : "%2$s deelde met %1$s",
+ "%2$s removed share for %1$s" : "%2$s verwijderde de share voor %1$s",
+ "Shared by %1$s" : "Gedeeld door %1$s",
+ "%1$s removed share" : "%1$s verwijderde de share",
+ "You removed %2$s from %1$s" : "Je verwijderde %2$s van %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s deelde %1$s met %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s verwijderde %2$s van %1$s",
+ "%2$s removed you from %1$s" : "%2$s verwijderde jou van %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index b3ceedff6be..78895e4b7f9 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -18,76 +18,42 @@
"Sharing" : "Delen",
"File shares" : "File shares",
"Downloaded via public link" : "Gedownload via een openbare link",
- "Downloaded by %1$s" : "Gedownload door %1$s",
"Downloaded by {email}" : "Gedownload via {email}",
- "%1$s downloaded via public link" : "%1$s gedownload via openbare link",
"{file} downloaded via public link" : "{file} gedownload via openbare link",
- "%1$s downloaded %2$s" : "%1$s downloadde %2$s",
"{email} downloaded {file}" : "{email} downloadde {file}",
- "Shared with group %1$s" : "Deelde met groep %1$s",
"Shared with group {group}" : "Deelde met groep {group}",
- "Removed share for group %1$s" : "Share van de groep %1$s verwijderd",
"Removed share for group {group}" : "Share van de groep {group} verwijderd",
- "%2$s shared with group %1$s" : "%2$s deelde met groep %1$s",
"{actor} shared with group {group}" : "{actor} deelde met groep {group}",
- "%2$s removed share for group %1$s" : "%2$s verwijderde share voor groep %1$s",
"{actor} removed share for group {group}" : "{actor} verwijderde de share voor groep {group}",
- "You shared %1$s with group %2$s" : "Je deelde %1$s met groep %2$s",
"You shared {file} with group {group}" : "Je deelde {file} met groep {group}",
- "You removed group %2$s from %1$s" : "Je verwijderde groep %2$s van %1$s",
"You removed group {group} from {file}" : "Je verwijderde groep {group} van {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s deelde %1$s met groep %2$s",
"{actor} shared {file} with group {group}" : "{actor} deelde {file} met groep {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s verwijderde groep %2$s van %1$s",
"{actor} removed group {group} from {file}" : "{actor} verwijderde groep {group} van {file}",
"Shared as public link" : "Gedeeld als een openbare link",
"Removed public link" : "Openbare link verwijderd",
- "%1$s shared as public link" : "%1$s deelde als een openbare link",
+ "Public link expired" : "Openbare link is verlopen",
"{actor} shared as public link" : "{actor} deelde als een openbare link",
- "%1$s removed public link" : "%1$s verwijderde openbare link",
"{actor} removed public link" : "{actor} verwijderde openbare link",
- "You shared %1$s as public link" : "Je deelde %1$s als openbare link",
"You shared {file} as public link" : "Je deelde {file} als openbare link",
- "You removed public link for %1$s" : "Je verwijderde de openbare link voor %1$s",
"You removed public link for {file}" : "Je verwijderde de openbare link voor {file}",
- "%2$s shared %1$s as public link" : "%2$s deelde %1$s als een openbare link",
"{actor} shared {file} as public link" : "{actor} deelde {file} als openbare link",
- "%2$s removed public link for %1$s" : "%2$s verwijderde openbare link voor %1$s",
"{actor} removed public link for {file}" : "{actor} verwijderde openbare link voor {file}",
- "%1$s accepted the remote share" : "%1$s accepteerde externe share",
"{user} accepted the remote share" : "{user} accepteerde externe share",
- "%1$s declined the remote share" : "%1$s weigerde externe share",
"{user} declined the remote share" : "{user} weigerde externe share",
- "You received a new remote share %1$s from %2$s" : "Je ontving een nieuwe externe share voor %1$s van %2$s",
"You received a new remote share {file} from {user}" : "Je ontving een nieuwe externe share voor {file} van {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s accepteerde externe share van %1$s",
"{user} accepted the remote share of {file}" : "{user} accepteerde externe share van {file}",
- "%2$s declined the remote share of %1$s" : "%2$s weigerde de externe share van %1$s",
"{user} declined the remote share of {file}" : "{user} weigerde de externe share van {file}",
- "%2$s unshared %1$s from you" : "%2$s stopte met delen van %1$s met jou",
"{user} unshared {file} from you" : "{user} stopte met delen van {file} met jou",
- "Shared with %1$s" : "Gedeeld met %1$s",
"Shared with {user}" : "Gedeeld met {user}",
- "Removed share for %1$s" : "Verwijderde share voor %1$s",
"Removed share for {user}" : "Verwijderde share voor {user}",
- "%2$s shared with %1$s" : "%2$s deelde met %1$s",
"{actor} shared with {user}" : "{actor} deelde met {user}",
- "%2$s removed share for %1$s" : "%2$s verwijderde de share voor %1$s",
"{actor} removed share for {user}" : "{actor} verwijderde de share voor {user}",
- "Shared by %1$s" : "Gedeeld door %1$s",
"Shared by {actor}" : "Gedeeld door {actor}",
- "%1$s removed share" : "%1$s verwijderde de share",
"{actor} removed share" : "{actor} verwijderde de share",
- "You shared %1$s with %2$s" : "Je deelde %1$s met %2$s",
"You shared {file} with {user}" : "Je deelde {file} mey {user}",
- "You removed %2$s from %1$s" : "Je verwijderde %2$s van %1$s",
"You removed {user} from {file}" : "Je verwijderde {user} van {file}",
- "%3$s shared %1$s with %2$s" : "%3$s deelde %1$s met %2$s",
"{actor} removed {user} from {file}" : "{actor} verwijderde {user} van {file}",
- "%3$s removed %2$s from %1$s" : "%3$s verwijderde %2$s van %1$s",
- "%2$s shared %1$s with you" : "%2$s deelde %1$s met u",
"{actor} shared {file} with you" : "{actor} deelde {file} met jou",
- "%2$s removed you from %1$s" : "%2$s verwijderde jou van %1$s",
"{actor} removed you from {file}" : "{actor} verwijderde jou van {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Een bestand of map gedeeld via mail of publieke link werd <strong>gedownload</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>",
@@ -144,9 +110,11 @@
"%1$s unshared %2$s from you" : "%1$s stopte met delen van %2$s met je",
"Public shared folder %1$s was downloaded" : "Openbaar gedeelde map %1$s werd gedownloaded",
"Public shared file %1$s was downloaded" : "Openbaar gedeeld bestand %1$s werd gedownloaded",
+ "You shared %1$s with %2$s" : "Je deelde %1$s met %2$s",
"%2$s shared %1$s with %3$s" : "%2$s deelde %1$s met %3$s",
"You removed the share of %2$s for %1$s" : "Je hebt de share van %1$s met %2$s verwijderd",
"%2$s removed the share of %3$s for %1$s" : "%2$s heeft de share van %1$s met %3$s verwijderd",
+ "You shared %1$s with group %2$s" : "Je deelde %1$s met groep %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s deelde %1$s met groep %3$s",
"You removed the share of group %2$s for %1$s" : "Je hebt de share van %1$s met de groep %2$s verwijderd",
"%2$s removed the share of group %3$s for %1$s" : "%2$s heeft de share van %1$s met de groep %3$s verwijderd",
@@ -156,6 +124,7 @@
"%2$s removed the public link for %1$s" : "%2$s heeft de openbare link voor %1$s verwijderd",
"Your public link for %1$s expired" : "Je openbare link voor %1$s is verlopen",
"The public link of %2$s for %1$s expired" : "De openbare link van %2$s voor %1$s is verlopen",
+ "%2$s shared %1$s with you" : "%2$s deelde %1$s met u",
"%2$s removed the share for %1$s" : "%2$s heeft de share van %1$s verwijderd",
"Shared with %2$s" : "Gedeeld met %2$s",
"Shared with %3$s by %2$s" : "Gedeeld met %3$s door %2$s",
@@ -168,9 +137,40 @@
"Shared via link by %2$s" : "Gedeeld via link door %2$s",
"Shared via public link" : "Gedeeld via een openbare link",
"%2$s removed public link" : "%2$s verwijderede openbare link",
- "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"
+ "Shares" : "Gedeeld",
+ "Downloaded by %1$s" : "Gedownload door %1$s",
+ "%1$s downloaded via public link" : "%1$s gedownload via openbare link",
+ "%1$s downloaded %2$s" : "%1$s downloadde %2$s",
+ "Shared with group %1$s" : "Deelde met groep %1$s",
+ "Removed share for group %1$s" : "Share van de groep %1$s verwijderd",
+ "%2$s shared with group %1$s" : "%2$s deelde met groep %1$s",
+ "%2$s removed share for group %1$s" : "%2$s verwijderde share voor groep %1$s",
+ "You removed group %2$s from %1$s" : "Je verwijderde groep %2$s van %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s deelde %1$s met groep %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s verwijderde groep %2$s van %1$s",
+ "%1$s shared as public link" : "%1$s deelde als een openbare link",
+ "%1$s removed public link" : "%1$s verwijderde openbare link",
+ "You shared %1$s as public link" : "Je deelde %1$s als openbare link",
+ "You removed public link for %1$s" : "Je verwijderde de openbare link voor %1$s",
+ "%2$s shared %1$s as public link" : "%2$s deelde %1$s als een openbare link",
+ "%2$s removed public link for %1$s" : "%2$s verwijderde openbare link voor %1$s",
+ "%1$s accepted the remote share" : "%1$s accepteerde externe share",
+ "%1$s declined the remote share" : "%1$s weigerde externe share",
+ "You received a new remote share %1$s from %2$s" : "Je ontving een nieuwe externe share voor %1$s van %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s accepteerde externe share van %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s weigerde de externe share van %1$s",
+ "%2$s unshared %1$s from you" : "%2$s stopte met delen van %1$s met jou",
+ "Shared with %1$s" : "Gedeeld met %1$s",
+ "Removed share for %1$s" : "Verwijderde share voor %1$s",
+ "%2$s shared with %1$s" : "%2$s deelde met %1$s",
+ "%2$s removed share for %1$s" : "%2$s verwijderde de share voor %1$s",
+ "Shared by %1$s" : "Gedeeld door %1$s",
+ "%1$s removed share" : "%1$s verwijderde de share",
+ "You removed %2$s from %1$s" : "Je verwijderde %2$s van %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s deelde %1$s met %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s verwijderde %2$s van %1$s",
+ "%2$s removed you from %1$s" : "%2$s verwijderde jou van %1$s"
},"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 0e2339b6581..515f15fd091 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"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",
+ "You removed group {group} from {file}" : "Usunięto grupę {group} z {file}",
"{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",
+ "Public link expired" : "Link publiczny wygasł",
"{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>",
@@ -146,23 +112,59 @@ OC.L10N.register(
"%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",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
"%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",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$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 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",
"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",
+ "%2$s removed share of group %3$s" : "%2$s usunął(-ęła) udostępnianie grupie %3$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ł",
+ "Public link of %2$s expired" : "Publiczne łącze użytkownika %2$s wygasło",
"Shared by %2$s" : "Udostępniane przez %2$s",
- "Shares" : "Udziały"
+ "Shares" : "Udziały",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$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_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index 955222647b3..14db7d9b38f 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -18,76 +18,42 @@
"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",
+ "You removed group {group} from {file}" : "Usunięto grupę {group} z {file}",
"{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",
+ "Public link expired" : "Link publiczny wygasł",
"{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>",
@@ -144,23 +110,59 @@
"%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",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
"%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",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$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 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",
"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",
+ "%2$s removed share of group %3$s" : "%2$s usunął(-ęła) udostępnianie grupie %3$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ł",
+ "Public link of %2$s expired" : "Publiczne łącze użytkownika %2$s wygasło",
"Shared by %2$s" : "Udostępniane przez %2$s",
- "Shares" : "Udziały"
+ "Shares" : "Udziały",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$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_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index 6fe2b4ce50b..5bf4da4924d 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -20,76 +20,45 @@ OC.L10N.register(
"Sharing" : "Compartilhamento",
"File shares" : "Compartilhamentos de arquivos",
"Downloaded via public link" : "Baixar via link público",
- "Downloaded by %1$s" : "Baixado por %1$s",
"Downloaded by {email}" : "Baixado por {email}",
- "%1$s downloaded via public link" : "%1$s baixado via link público",
"{file} downloaded via public link" : "{file} baixado via link público",
- "%1$s downloaded %2$s" : "%1$s baixado %2$s",
"{email} downloaded {file}" : "{email} baixado {file}",
- "Shared with group %1$s" : "Compartilhado com o grupo %1$s",
"Shared with group {group}" : "Compartilhado com o grupo {group}",
- "Removed share for group %1$s" : "Compartilhamento removido para o grupo %1$s",
"Removed share for group {group}" : "Compartilhamento removido para o grupo {group}",
- "%2$s shared with group %1$s" : "%2$s compartilhado do o grupo %1$s",
"{actor} shared with group {group}" : "{actor} compartilhado com o grupo {group}",
- "%2$s removed share for group %1$s" : "%2$s compartilhamento removido para o grupo %1$s",
"{actor} removed share for group {group}" : "{actor} removeu compartilhamento para o grupo {group}",
- "You shared %1$s with group %2$s" : "Você compartilhou %1$s com o grupo %2$s",
"You shared {file} with group {group}" : "Você compartilhou {file} com o grupo {group} ",
- "You removed group %2$s from %1$s" : "Voce removeu o grupo %2$s de %1$s",
"You removed group {group} from {file}" : "Voce removeu o grupo {group} de {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s compartilhado %1$s com o grupo %2$s",
"{actor} shared {file} with group {group}" : "{actor} compartilhado {file} com o grupo {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s removido grupo %2$s de %1$s",
"{actor} removed group {group} from {file}" : "{actor} removido grupo {group} de {file}",
"Shared as public link" : "Compartilhado como um link publico",
"Removed public link" : "Removido o link público",
- "%1$s shared as public link" : "%1$s compartilhado como um link publico",
+ "Public link expired" : "O link público expirou",
"{actor} shared as public link" : "{actor} compartilhado como um link publico",
- "%1$s removed public link" : "%1$s removido link publico",
"{actor} removed public link" : "{actor} removido link publico",
- "You shared %1$s as public link" : "Voce compartilhou %1$s como um link publico",
+ "Public link of {actor} expired" : "O Link público de {actor} expirou.",
"You shared {file} as public link" : "Voce compartilhou {file} como um link publico",
- "You removed public link for %1$s" : "Voce removeu o link publico para %1$s",
"You removed public link for {file}" : "Voce removeu o link publico para {file}",
- "%2$s shared %1$s as public link" : "%2$s compartilhado %1$s como um link publico",
+ "Public link expired for {file}" : "O Link Público para {file} expirou",
"{actor} shared {file} as public link" : "{actor} compartilhado {file} como um link publico",
- "%2$s removed public link for %1$s" : "%2$s removido link publico para %1$s",
"{actor} removed public link for {file}" : "{actor} removido link publico para {file}",
- "%1$s accepted the remote share" : "%1$s aceitou o compartilhamento remoto",
+ "Public link of {actor} for {file} expired" : "O Link Público de {actor} para {file} espirou",
"{user} accepted the remote share" : "{user} aceitou o compartilhamento remoto",
- "%1$s declined the remote share" : "%1$s declinou do compartilhamento remoto",
"{user} declined the remote share" : "{user} declinou do compartilhamento remoto",
- "You received a new remote share %1$s from %2$s" : "Voce recebeu um novo compartilhamento remoto %1$s de %2$s",
"You received a new remote share {file} from {user}" : "Voce recebeu um novo compartilhamento remoto {file} de {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s aceitou o compartilhamento remoto de %1$s",
"{user} accepted the remote share of {file}" : "{user} aceitou o compartilhamento remoto de {file}",
- "%2$s declined the remote share of %1$s" : "%2$s declinou o compartilhamento remoto de %1$s",
"{user} declined the remote share of {file}" : "{user} declinou o compartilhamento remoto de {file}",
- "%2$s unshared %1$s from you" : "%2$s descompartilhou %1$s de voce",
"{user} unshared {file} from you" : "{user} descompartilhou {file} de voce",
- "Shared with %1$s" : "Compartilhado com %1$s",
"Shared with {user}" : "Compartilhado com {user}",
- "Removed share for %1$s" : "Compartilhamento removido para %1$s",
"Removed share for {user}" : "Compartilhamento removido para {user}",
- "%2$s shared with %1$s" : "%2$s compartilhado com %1$s",
"{actor} shared with {user}" : "{actor} compartilhado com {user}",
- "%2$s removed share for %1$s" : "%2$s compartilhamento removido para %1$s",
"{actor} removed share for {user}" : "{actor} compartilhamento removido para {user}",
- "Shared by %1$s" : "Compartilhado por %1$s",
"Shared by {actor}" : "Compartilhado por {actor}",
- "%1$s removed share" : "%1$s compartilhamento removido",
"{actor} removed share" : "{actor} compartilhamento removido",
- "You shared %1$s with %2$s" : "Você compartilhou %1$s com %2$s",
"You shared {file} with {user}" : "Voce compartilhou {arquivo} com {user}",
- "You removed %2$s from %1$s" : "Voce removeu %2$s de %1$s",
"You removed {user} from {file}" : "Voce removeu {user} de {file}",
- "%3$s shared %1$s with %2$s" : "%3$s compartilhado %1$s com %2$s",
"{actor} removed {user} from {file}" : "{actor} removido {user} de {file}",
- "%3$s removed %2$s from %1$s" : "%3$s removido %2$s de %1$s",
- "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você",
"{actor} shared {file} with you" : "{actor} compartilhado {file} com voce",
- "%2$s removed you from %1$s" : "%2$s removeu voce de %1$s",
"{actor} removed you from {file}" : "{actor} removeu voce de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado por email ou por link publico foi <strong>baixado</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>",
@@ -146,9 +115,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s não compartilhados %2$s de você",
"Public shared folder %1$s was downloaded" : "A pasta %1$s compartilhada publicamente foi baixada",
"Public shared file %1$s was downloaded" : "O arquivo %1$s compartilhado publicamente foi baixado",
+ "You shared %1$s with %2$s" : "Você compartilhou %1$s com %2$s",
"%2$s shared %1$s with %3$s" : "%2$s compartilhado %1$s com %3$s",
"You removed the share of %2$s for %1$s" : "Você removeu o compartilhamento de %2$s para %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s removido o compartilhamento de %3$s para %1$s",
+ "You shared %1$s with group %2$s" : "Você compartilhou %1$s com o grupo %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s compartilhado %1$s com o grupo %3$s",
"You removed the share of group %2$s for %1$s" : "Você removeu o compartilhamento de %2$s para %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s removido o compartilhamento do grupo %3$s para %1$s",
@@ -158,6 +129,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s removeu o link público de %1$s",
"Your public link for %1$s expired" : "O seu link público para %1$s expirou",
"The public link of %2$s for %1$s expired" : "O link público de %2$s para %1$s expirou",
+ "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você",
"%2$s removed the share for %1$s" : "%2$s removeu o compartilhamento para %1$s",
"Shared with %2$s" : "Compartilhado com %2$s",
"Shared with %3$s by %2$s" : "Compartilhado com %3$s por %2$s",
@@ -170,9 +142,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Compartilhado via link por %2$s",
"Shared via public link" : "Compartilhado via link público",
"%2$s removed public link" : "%2$s removeu o link público",
- "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"
+ "Shares" : "Compartilhamentos",
+ "Downloaded by %1$s" : "Baixado por %1$s",
+ "%1$s downloaded via public link" : "%1$s baixado via link público",
+ "%1$s downloaded %2$s" : "%1$s baixado %2$s",
+ "Shared with group %1$s" : "Compartilhado com o grupo %1$s",
+ "Removed share for group %1$s" : "Compartilhamento removido para o grupo %1$s",
+ "%2$s shared with group %1$s" : "%2$s compartilhado do o grupo %1$s",
+ "%2$s removed share for group %1$s" : "%2$s compartilhamento removido para o grupo %1$s",
+ "You removed group %2$s from %1$s" : "Voce removeu o grupo %2$s de %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s compartilhado %1$s com o grupo %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s removido grupo %2$s de %1$s",
+ "%1$s shared as public link" : "%1$s compartilhado como um link publico",
+ "%1$s removed public link" : "%1$s removido link publico",
+ "You shared %1$s as public link" : "Voce compartilhou %1$s como um link publico",
+ "You removed public link for %1$s" : "Voce removeu o link publico para %1$s",
+ "%2$s shared %1$s as public link" : "%2$s compartilhado %1$s como um link publico",
+ "%2$s removed public link for %1$s" : "%2$s removido link publico para %1$s",
+ "%1$s accepted the remote share" : "%1$s aceitou o compartilhamento remoto",
+ "%1$s declined the remote share" : "%1$s declinou do compartilhamento remoto",
+ "You received a new remote share %1$s from %2$s" : "Voce recebeu um novo compartilhamento remoto %1$s de %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s aceitou o compartilhamento remoto de %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s declinou o compartilhamento remoto de %1$s",
+ "%2$s unshared %1$s from you" : "%2$s descompartilhou %1$s de voce",
+ "Shared with %1$s" : "Compartilhado com %1$s",
+ "Removed share for %1$s" : "Compartilhamento removido para %1$s",
+ "%2$s shared with %1$s" : "%2$s compartilhado com %1$s",
+ "%2$s removed share for %1$s" : "%2$s compartilhamento removido para %1$s",
+ "Shared by %1$s" : "Compartilhado por %1$s",
+ "%1$s removed share" : "%1$s compartilhamento removido",
+ "You removed %2$s from %1$s" : "Voce removeu %2$s de %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s compartilhado %1$s com %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s removido %2$s de %1$s",
+ "%2$s removed you from %1$s" : "%2$s removeu voce de %1$s"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index 59536fa6e15..8019c841685 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -18,76 +18,45 @@
"Sharing" : "Compartilhamento",
"File shares" : "Compartilhamentos de arquivos",
"Downloaded via public link" : "Baixar via link público",
- "Downloaded by %1$s" : "Baixado por %1$s",
"Downloaded by {email}" : "Baixado por {email}",
- "%1$s downloaded via public link" : "%1$s baixado via link público",
"{file} downloaded via public link" : "{file} baixado via link público",
- "%1$s downloaded %2$s" : "%1$s baixado %2$s",
"{email} downloaded {file}" : "{email} baixado {file}",
- "Shared with group %1$s" : "Compartilhado com o grupo %1$s",
"Shared with group {group}" : "Compartilhado com o grupo {group}",
- "Removed share for group %1$s" : "Compartilhamento removido para o grupo %1$s",
"Removed share for group {group}" : "Compartilhamento removido para o grupo {group}",
- "%2$s shared with group %1$s" : "%2$s compartilhado do o grupo %1$s",
"{actor} shared with group {group}" : "{actor} compartilhado com o grupo {group}",
- "%2$s removed share for group %1$s" : "%2$s compartilhamento removido para o grupo %1$s",
"{actor} removed share for group {group}" : "{actor} removeu compartilhamento para o grupo {group}",
- "You shared %1$s with group %2$s" : "Você compartilhou %1$s com o grupo %2$s",
"You shared {file} with group {group}" : "Você compartilhou {file} com o grupo {group} ",
- "You removed group %2$s from %1$s" : "Voce removeu o grupo %2$s de %1$s",
"You removed group {group} from {file}" : "Voce removeu o grupo {group} de {file}",
- "%3$s shared %1$s with group %2$s" : "%3$s compartilhado %1$s com o grupo %2$s",
"{actor} shared {file} with group {group}" : "{actor} compartilhado {file} com o grupo {group}",
- "%3$s removed group %2$s from %1$s" : "%3$s removido grupo %2$s de %1$s",
"{actor} removed group {group} from {file}" : "{actor} removido grupo {group} de {file}",
"Shared as public link" : "Compartilhado como um link publico",
"Removed public link" : "Removido o link público",
- "%1$s shared as public link" : "%1$s compartilhado como um link publico",
+ "Public link expired" : "O link público expirou",
"{actor} shared as public link" : "{actor} compartilhado como um link publico",
- "%1$s removed public link" : "%1$s removido link publico",
"{actor} removed public link" : "{actor} removido link publico",
- "You shared %1$s as public link" : "Voce compartilhou %1$s como um link publico",
+ "Public link of {actor} expired" : "O Link público de {actor} expirou.",
"You shared {file} as public link" : "Voce compartilhou {file} como um link publico",
- "You removed public link for %1$s" : "Voce removeu o link publico para %1$s",
"You removed public link for {file}" : "Voce removeu o link publico para {file}",
- "%2$s shared %1$s as public link" : "%2$s compartilhado %1$s como um link publico",
+ "Public link expired for {file}" : "O Link Público para {file} expirou",
"{actor} shared {file} as public link" : "{actor} compartilhado {file} como um link publico",
- "%2$s removed public link for %1$s" : "%2$s removido link publico para %1$s",
"{actor} removed public link for {file}" : "{actor} removido link publico para {file}",
- "%1$s accepted the remote share" : "%1$s aceitou o compartilhamento remoto",
+ "Public link of {actor} for {file} expired" : "O Link Público de {actor} para {file} espirou",
"{user} accepted the remote share" : "{user} aceitou o compartilhamento remoto",
- "%1$s declined the remote share" : "%1$s declinou do compartilhamento remoto",
"{user} declined the remote share" : "{user} declinou do compartilhamento remoto",
- "You received a new remote share %1$s from %2$s" : "Voce recebeu um novo compartilhamento remoto %1$s de %2$s",
"You received a new remote share {file} from {user}" : "Voce recebeu um novo compartilhamento remoto {file} de {user}",
- "%2$s accepted the remote share of %1$s" : "%2$s aceitou o compartilhamento remoto de %1$s",
"{user} accepted the remote share of {file}" : "{user} aceitou o compartilhamento remoto de {file}",
- "%2$s declined the remote share of %1$s" : "%2$s declinou o compartilhamento remoto de %1$s",
"{user} declined the remote share of {file}" : "{user} declinou o compartilhamento remoto de {file}",
- "%2$s unshared %1$s from you" : "%2$s descompartilhou %1$s de voce",
"{user} unshared {file} from you" : "{user} descompartilhou {file} de voce",
- "Shared with %1$s" : "Compartilhado com %1$s",
"Shared with {user}" : "Compartilhado com {user}",
- "Removed share for %1$s" : "Compartilhamento removido para %1$s",
"Removed share for {user}" : "Compartilhamento removido para {user}",
- "%2$s shared with %1$s" : "%2$s compartilhado com %1$s",
"{actor} shared with {user}" : "{actor} compartilhado com {user}",
- "%2$s removed share for %1$s" : "%2$s compartilhamento removido para %1$s",
"{actor} removed share for {user}" : "{actor} compartilhamento removido para {user}",
- "Shared by %1$s" : "Compartilhado por %1$s",
"Shared by {actor}" : "Compartilhado por {actor}",
- "%1$s removed share" : "%1$s compartilhamento removido",
"{actor} removed share" : "{actor} compartilhamento removido",
- "You shared %1$s with %2$s" : "Você compartilhou %1$s com %2$s",
"You shared {file} with {user}" : "Voce compartilhou {arquivo} com {user}",
- "You removed %2$s from %1$s" : "Voce removeu %2$s de %1$s",
"You removed {user} from {file}" : "Voce removeu {user} de {file}",
- "%3$s shared %1$s with %2$s" : "%3$s compartilhado %1$s com %2$s",
"{actor} removed {user} from {file}" : "{actor} removido {user} de {file}",
- "%3$s removed %2$s from %1$s" : "%3$s removido %2$s de %1$s",
- "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você",
"{actor} shared {file} with you" : "{actor} compartilhado {file} com voce",
- "%2$s removed you from %1$s" : "%2$s removeu voce de %1$s",
"{actor} removed you from {file}" : "{actor} removeu voce de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado por email ou por link publico foi <strong>baixado</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>",
@@ -144,9 +113,11 @@
"%1$s unshared %2$s from you" : "%1$s não compartilhados %2$s de você",
"Public shared folder %1$s was downloaded" : "A pasta %1$s compartilhada publicamente foi baixada",
"Public shared file %1$s was downloaded" : "O arquivo %1$s compartilhado publicamente foi baixado",
+ "You shared %1$s with %2$s" : "Você compartilhou %1$s com %2$s",
"%2$s shared %1$s with %3$s" : "%2$s compartilhado %1$s com %3$s",
"You removed the share of %2$s for %1$s" : "Você removeu o compartilhamento de %2$s para %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s removido o compartilhamento de %3$s para %1$s",
+ "You shared %1$s with group %2$s" : "Você compartilhou %1$s com o grupo %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s compartilhado %1$s com o grupo %3$s",
"You removed the share of group %2$s for %1$s" : "Você removeu o compartilhamento de %2$s para %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s removido o compartilhamento do grupo %3$s para %1$s",
@@ -156,6 +127,7 @@
"%2$s removed the public link for %1$s" : "%2$s removeu o link público de %1$s",
"Your public link for %1$s expired" : "O seu link público para %1$s expirou",
"The public link of %2$s for %1$s expired" : "O link público de %2$s para %1$s expirou",
+ "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você",
"%2$s removed the share for %1$s" : "%2$s removeu o compartilhamento para %1$s",
"Shared with %2$s" : "Compartilhado com %2$s",
"Shared with %3$s by %2$s" : "Compartilhado com %3$s por %2$s",
@@ -168,9 +140,40 @@
"Shared via link by %2$s" : "Compartilhado via link por %2$s",
"Shared via public link" : "Compartilhado via link público",
"%2$s removed public link" : "%2$s removeu o link público",
- "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"
+ "Shares" : "Compartilhamentos",
+ "Downloaded by %1$s" : "Baixado por %1$s",
+ "%1$s downloaded via public link" : "%1$s baixado via link público",
+ "%1$s downloaded %2$s" : "%1$s baixado %2$s",
+ "Shared with group %1$s" : "Compartilhado com o grupo %1$s",
+ "Removed share for group %1$s" : "Compartilhamento removido para o grupo %1$s",
+ "%2$s shared with group %1$s" : "%2$s compartilhado do o grupo %1$s",
+ "%2$s removed share for group %1$s" : "%2$s compartilhamento removido para o grupo %1$s",
+ "You removed group %2$s from %1$s" : "Voce removeu o grupo %2$s de %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s compartilhado %1$s com o grupo %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s removido grupo %2$s de %1$s",
+ "%1$s shared as public link" : "%1$s compartilhado como um link publico",
+ "%1$s removed public link" : "%1$s removido link publico",
+ "You shared %1$s as public link" : "Voce compartilhou %1$s como um link publico",
+ "You removed public link for %1$s" : "Voce removeu o link publico para %1$s",
+ "%2$s shared %1$s as public link" : "%2$s compartilhado %1$s como um link publico",
+ "%2$s removed public link for %1$s" : "%2$s removido link publico para %1$s",
+ "%1$s accepted the remote share" : "%1$s aceitou o compartilhamento remoto",
+ "%1$s declined the remote share" : "%1$s declinou do compartilhamento remoto",
+ "You received a new remote share %1$s from %2$s" : "Voce recebeu um novo compartilhamento remoto %1$s de %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s aceitou o compartilhamento remoto de %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s declinou o compartilhamento remoto de %1$s",
+ "%2$s unshared %1$s from you" : "%2$s descompartilhou %1$s de voce",
+ "Shared with %1$s" : "Compartilhado com %1$s",
+ "Removed share for %1$s" : "Compartilhamento removido para %1$s",
+ "%2$s shared with %1$s" : "%2$s compartilhado com %1$s",
+ "%2$s removed share for %1$s" : "%2$s compartilhamento removido para %1$s",
+ "Shared by %1$s" : "Compartilhado por %1$s",
+ "%1$s removed share" : "%1$s compartilhamento removido",
+ "You removed %2$s from %1$s" : "Voce removeu %2$s de %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s compartilhado %1$s com %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s removido %2$s de %1$s",
+ "%2$s removed you from %1$s" : "%2$s removeu voce de %1$s"
},"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 e12622cd00e..71f1c6f92f3 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"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}",
- "%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",
"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 поделился общедоступной ссылкой",
+ "Public link expired" : "Срок действия общедоступнной ссылки закончился",
"{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",
"{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>",
@@ -146,9 +112,11 @@ 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",
@@ -158,6 +126,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",
"Shared with %2$s" : "Поделился с %2$s",
"Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"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" : "События обмена файлами"
+ "Shares" : "События обмена файлами",
+ "Downloaded by %1$s" : "Скачано %1$s",
+ "%1$s downloaded via public link" : "%1$s скачано по общедоступной ссылке",
+ "%1$s downloaded %2$s" : "%1$s скачан %2$s",
+ "Shared with group %1$s" : "Поделился с группой %1$s",
+ "Removed share for group %1$s" : "Закрыт общий доступ для группы %1$s",
+ "%2$s shared with group %1$s" : "%2$s поделился с группой %1$s",
+ "%2$s removed share for group %1$s" : "%2$s удалил общий доступ для группы %1$s",
+ "You removed group %2$s from %1$s" : "Вы удалили группу %2$s из %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s поделился %1$s с группой %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s удалил группу %2$s из %1$s",
+ "%1$s shared as public link" : "%1$s поделился общедоступной ссылкой",
+ "%1$s removed public link" : "%1$s удалил общедоступной сслыку",
+ "You shared %1$s as public link" : "Вы поделись %1$s в виде общедоступной ссылки",
+ "You removed public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде общедоступной ссылки",
+ "%2$s removed public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "%1$s accepted the remote share" : "%1$s принял удаленный общий ресурс",
+ "%1$s declined the remote share" : "%1$s отклонил удаленный общий ресурс",
+ "You received a new remote share %1$s from %2$s" : "Вы получили новый удаленный общий ресурс %1$s от %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s принял удаленный общий ресурс %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s отклонил удаленный общий ресурс %1$s",
+ "%2$s unshared %1$s from you" : "%2$s закрыл для вас доступ к %1$s ",
+ "Shared with %1$s" : "Поделился с %1$s",
+ "Removed share for %1$s" : "Закрыт общий доступ для %1$s",
+ "%2$s shared with %1$s" : "%2$s поделился с %1$s",
+ "%2$s removed share for %1$s" : "%2$s закрыл общий доступ к %1$s",
+ "Shared by %1$s" : "Поделился через %1$s",
+ "%1$s removed share" : "%1$s закрыл общий доступ",
+ "You removed %2$s from %1$s" : "Вы удалили %2$s из %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s поделился %1$s с %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s удалил %2$s из %1$s",
+ "%2$s removed you from %1$s" : "%2$s удалил вас из %1$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_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index fe9b1660292..d159503041e 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -18,76 +18,42 @@
"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}",
- "%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",
"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 поделился общедоступной ссылкой",
+ "Public link expired" : "Срок действия общедоступнной ссылки закончился",
"{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",
"{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>",
@@ -144,9 +110,11 @@
"%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",
@@ -156,6 +124,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",
"Shared with %2$s" : "Поделился с %2$s",
"Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
@@ -168,9 +137,40 @@
"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" : "События обмена файлами"
+ "Shares" : "События обмена файлами",
+ "Downloaded by %1$s" : "Скачано %1$s",
+ "%1$s downloaded via public link" : "%1$s скачано по общедоступной ссылке",
+ "%1$s downloaded %2$s" : "%1$s скачан %2$s",
+ "Shared with group %1$s" : "Поделился с группой %1$s",
+ "Removed share for group %1$s" : "Закрыт общий доступ для группы %1$s",
+ "%2$s shared with group %1$s" : "%2$s поделился с группой %1$s",
+ "%2$s removed share for group %1$s" : "%2$s удалил общий доступ для группы %1$s",
+ "You removed group %2$s from %1$s" : "Вы удалили группу %2$s из %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s поделился %1$s с группой %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s удалил группу %2$s из %1$s",
+ "%1$s shared as public link" : "%1$s поделился общедоступной ссылкой",
+ "%1$s removed public link" : "%1$s удалил общедоступной сслыку",
+ "You shared %1$s as public link" : "Вы поделись %1$s в виде общедоступной ссылки",
+ "You removed public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде общедоступной ссылки",
+ "%2$s removed public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "%1$s accepted the remote share" : "%1$s принял удаленный общий ресурс",
+ "%1$s declined the remote share" : "%1$s отклонил удаленный общий ресурс",
+ "You received a new remote share %1$s from %2$s" : "Вы получили новый удаленный общий ресурс %1$s от %2$s",
+ "%2$s accepted the remote share of %1$s" : "%2$s принял удаленный общий ресурс %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s отклонил удаленный общий ресурс %1$s",
+ "%2$s unshared %1$s from you" : "%2$s закрыл для вас доступ к %1$s ",
+ "Shared with %1$s" : "Поделился с %1$s",
+ "Removed share for %1$s" : "Закрыт общий доступ для %1$s",
+ "%2$s shared with %1$s" : "%2$s поделился с %1$s",
+ "%2$s removed share for %1$s" : "%2$s закрыл общий доступ к %1$s",
+ "Shared by %1$s" : "Поделился через %1$s",
+ "%1$s removed share" : "%1$s закрыл общий доступ",
+ "You removed %2$s from %1$s" : "Вы удалили %2$s из %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s поделился %1$s с %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s удалил %2$s из %1$s",
+ "%2$s removed you from %1$s" : "%2$s удалил вас из %1$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_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js
index b4872abb55b..64c49392735 100644
--- a/apps/files_sharing/l10n/sq.js
+++ b/apps/files_sharing/l10n/sq.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"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",
+ "Public link expired" : "Lidhja publike skadoi",
"{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>",
@@ -146,9 +112,11 @@ 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",
@@ -158,6 +126,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",
"Shared with %2$s" : "U nda me %2$s",
"Shared with %3$s by %2$s" : "U nda me %3$s nga %2$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"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",
"%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"
+ "Shares" : "Ndarje",
+ "Downloaded by %1$s" : "Shkarkuar nga %1$s",
+ "%1$s downloaded via public link" : "%1$s shkarkuar nga një lidhje publike",
+ "%1$s downloaded %2$s" : "%1$s shkarkuar nga %2$s",
+ "Shared with group %1$s" : "U nda me grupin %1$s",
+ "Removed share for group %1$s" : "Hoqi ndarjen për grupin %1$s",
+ "%2$s shared with group %1$s" : "%2$s u nda e grupin %1$s",
+ "%2$s removed share for group %1$s" : "%2$s hoqi ndarjen për grupin %1$s",
+ "You removed group %2$s from %1$s" : "Hoqët grupin %2$s nga %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s ndau %1$s me grupin %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s hoqi grupin %2$s nga %1$s",
+ "%1$s shared as public link" : "%1$s u nda si një lidhje publike",
+ "%1$s removed public link" : "%1$s hoqi lidhje publike",
+ "You shared %1$s as public link" : "Ndatë %1$s si një lidhje publike",
+ "You removed public link for %1$s" : "Hoqët lidhje publike për %1$s",
+ "%2$s shared %1$s as public link" : "%2$s u nda %1$s si një lidhje publike",
+ "%2$s removed public link for %1$s" : "%2$s hoqi lidhje publike për %1$s",
+ "%1$s accepted the remote share" : "%1$s pranoi ndarjen e largët",
+ "%1$s declined the remote share" : "%1$s 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s pranoi ndarjen e largët e %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s hodhi tej ndarjen e largët të %1$s",
+ "%2$s unshared %1$s from you" : "%2$s nuk ndau %1$s nga ju",
+ "Shared with %1$s" : "Ndarë me %1$s",
+ "Removed share for %1$s" : "Hoqi ndarjen për %1$s",
+ "%2$s shared with %1$s" : "%2$s ndau me %1$s",
+ "%2$s removed share for %1$s" : "%2$s hoqi ndarjen për %1$s",
+ "Shared by %1$s" : "U nda nga %1$s",
+ "%1$s removed share" : "%1$s hoqi ndarjen",
+ "You removed %2$s from %1$s" : "Hoqët %2$s nga %1$s ",
+ "%3$s shared %1$s with %2$s" : "%3$s ndau %1$s me %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s hoqi %2$s nga %1$s",
+ "%2$s removed you from %1$s" : "%2$s iu hoqi nga %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json
index c1323784cf1..2206d5019a3 100644
--- a/apps/files_sharing/l10n/sq.json
+++ b/apps/files_sharing/l10n/sq.json
@@ -18,76 +18,42 @@
"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",
+ "Public link expired" : "Lidhja publike skadoi",
"{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>",
@@ -144,9 +110,11 @@
"%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",
@@ -156,6 +124,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",
"Shared with %2$s" : "U nda me %2$s",
"Shared with %3$s by %2$s" : "U nda me %3$s nga %2$s",
@@ -168,9 +137,40 @@
"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",
"%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"
+ "Shares" : "Ndarje",
+ "Downloaded by %1$s" : "Shkarkuar nga %1$s",
+ "%1$s downloaded via public link" : "%1$s shkarkuar nga një lidhje publike",
+ "%1$s downloaded %2$s" : "%1$s shkarkuar nga %2$s",
+ "Shared with group %1$s" : "U nda me grupin %1$s",
+ "Removed share for group %1$s" : "Hoqi ndarjen për grupin %1$s",
+ "%2$s shared with group %1$s" : "%2$s u nda e grupin %1$s",
+ "%2$s removed share for group %1$s" : "%2$s hoqi ndarjen për grupin %1$s",
+ "You removed group %2$s from %1$s" : "Hoqët grupin %2$s nga %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s ndau %1$s me grupin %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s hoqi grupin %2$s nga %1$s",
+ "%1$s shared as public link" : "%1$s u nda si një lidhje publike",
+ "%1$s removed public link" : "%1$s hoqi lidhje publike",
+ "You shared %1$s as public link" : "Ndatë %1$s si një lidhje publike",
+ "You removed public link for %1$s" : "Hoqët lidhje publike për %1$s",
+ "%2$s shared %1$s as public link" : "%2$s u nda %1$s si një lidhje publike",
+ "%2$s removed public link for %1$s" : "%2$s hoqi lidhje publike për %1$s",
+ "%1$s accepted the remote share" : "%1$s pranoi ndarjen e largët",
+ "%1$s declined the remote share" : "%1$s 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s pranoi ndarjen e largët e %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s hodhi tej ndarjen e largët të %1$s",
+ "%2$s unshared %1$s from you" : "%2$s nuk ndau %1$s nga ju",
+ "Shared with %1$s" : "Ndarë me %1$s",
+ "Removed share for %1$s" : "Hoqi ndarjen për %1$s",
+ "%2$s shared with %1$s" : "%2$s ndau me %1$s",
+ "%2$s removed share for %1$s" : "%2$s hoqi ndarjen për %1$s",
+ "Shared by %1$s" : "U nda nga %1$s",
+ "%1$s removed share" : "%1$s hoqi ndarjen",
+ "You removed %2$s from %1$s" : "Hoqët %2$s nga %1$s ",
+ "%3$s shared %1$s with %2$s" : "%3$s ndau %1$s me %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s hoqi %2$s nga %1$s",
+ "%2$s removed you from %1$s" : "%2$s iu hoqi nga %1$s"
},"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 fb6d04c52c2..8c8e16de8d0 100644
--- a/apps/files_sharing/l10n/sv.js
+++ b/apps/files_sharing/l10n/sv.js
@@ -20,76 +20,42 @@ OC.L10N.register(
"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",
+ "Public link expired" : "Tidsgräns för offentlig länk har löpt ut",
"{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>",
@@ -146,9 +112,11 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig",
"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",
+ "You shared %1$s with %2$s" : "Du delade %1$s med %2$s",
"%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",
@@ -158,6 +126,7 @@ OC.L10N.register(
"%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 shared %1$s with you" : "%2$s delade %1$s med dig",
"%2$s removed the share for %1$s" : "%2$s tog bort delningen av %1$s",
"Shared with %2$s" : "Delad med %2$s",
"Shared with %3$s by %2$s" : "Delad med %3$s av %2$s",
@@ -170,9 +139,40 @@ OC.L10N.register(
"Shared via link by %2$s" : "Delad via länk av %2$s",
"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"
+ "Shares" : "Delningar",
+ "Downloaded by %1$s" : "Nedladdad av %1$s",
+ "%1$s downloaded via public link" : "%1$s nedladdad via offentlig länk",
+ "%1$s downloaded %2$s" : "%1$s laddade ned %2$s",
+ "Shared with group %1$s" : "Delad med grupp %1$s",
+ "Removed share for group %1$s" : "Tog bort delning för grupp %1$s",
+ "%2$s shared with group %1$s" : "%2$s delad med grupp %1$s",
+ "%2$s removed share for group %1$s" : "%2$s tog bort delningen för gruppen %1$s",
+ "You removed group %2$s from %1$s" : "Du tog bort gruppen %2$s från %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s delade %1$s med gruppen %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s tog bort gruppen %2$s från %1$s",
+ "%1$s shared as public link" : "%1$s delade offentligt",
+ "%1$s removed public link" : "%1$s tog bort offentlig länk",
+ "You shared %1$s as public link" : "Du delade %1$s offentligt",
+ "You removed public link for %1$s" : "Du tog bort den offentliga länken för %1$s",
+ "%2$s shared %1$s as public link" : "%2$s delade %1$s offentligt",
+ "%2$s removed public link for %1$s" : "%2$s tog bort den offentliga länken för %1$s",
+ "%1$s accepted the remote share" : "%1$s accepterade extern delning",
+ "%1$s declined the remote share" : "%1$s 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s accepterade extern delning av %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s nekade extern delning av %1$s",
+ "%2$s unshared %1$s from you" : "%2$s slutade dela %1$s med dig",
+ "Shared with %1$s" : "Delade med %1$s",
+ "Removed share for %1$s" : "Tog bort delningen för %1$s",
+ "%2$s shared with %1$s" : "%2$s delade med %1$s",
+ "%2$s removed share for %1$s" : "%2$s tog bort delningen för %1$s",
+ "Shared by %1$s" : "Delad av %1$s",
+ "%1$s removed share" : "%1$s tog bort delning",
+ "You removed %2$s from %1$s" : "Du tog bort %2$s från %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s delade %1$s med %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s tog bort %2$s från %1$s",
+ "%2$s removed you from %1$s" : "%2$s tog bort dig från %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json
index 84a1e4a83bf..dfe0cf3f25a 100644
--- a/apps/files_sharing/l10n/sv.json
+++ b/apps/files_sharing/l10n/sv.json
@@ -18,76 +18,42 @@
"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",
+ "Public link expired" : "Tidsgräns för offentlig länk har löpt ut",
"{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>",
@@ -144,9 +110,11 @@
"%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig",
"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",
+ "You shared %1$s with %2$s" : "Du delade %1$s med %2$s",
"%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",
@@ -156,6 +124,7 @@
"%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 shared %1$s with you" : "%2$s delade %1$s med dig",
"%2$s removed the share for %1$s" : "%2$s tog bort delningen av %1$s",
"Shared with %2$s" : "Delad med %2$s",
"Shared with %3$s by %2$s" : "Delad med %3$s av %2$s",
@@ -168,9 +137,40 @@
"Shared via link by %2$s" : "Delad via länk av %2$s",
"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"
+ "Shares" : "Delningar",
+ "Downloaded by %1$s" : "Nedladdad av %1$s",
+ "%1$s downloaded via public link" : "%1$s nedladdad via offentlig länk",
+ "%1$s downloaded %2$s" : "%1$s laddade ned %2$s",
+ "Shared with group %1$s" : "Delad med grupp %1$s",
+ "Removed share for group %1$s" : "Tog bort delning för grupp %1$s",
+ "%2$s shared with group %1$s" : "%2$s delad med grupp %1$s",
+ "%2$s removed share for group %1$s" : "%2$s tog bort delningen för gruppen %1$s",
+ "You removed group %2$s from %1$s" : "Du tog bort gruppen %2$s från %1$s",
+ "%3$s shared %1$s with group %2$s" : "%3$s delade %1$s med gruppen %2$s",
+ "%3$s removed group %2$s from %1$s" : "%3$s tog bort gruppen %2$s från %1$s",
+ "%1$s shared as public link" : "%1$s delade offentligt",
+ "%1$s removed public link" : "%1$s tog bort offentlig länk",
+ "You shared %1$s as public link" : "Du delade %1$s offentligt",
+ "You removed public link for %1$s" : "Du tog bort den offentliga länken för %1$s",
+ "%2$s shared %1$s as public link" : "%2$s delade %1$s offentligt",
+ "%2$s removed public link for %1$s" : "%2$s tog bort den offentliga länken för %1$s",
+ "%1$s accepted the remote share" : "%1$s accepterade extern delning",
+ "%1$s declined the remote share" : "%1$s 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",
+ "%2$s accepted the remote share of %1$s" : "%2$s accepterade extern delning av %1$s",
+ "%2$s declined the remote share of %1$s" : "%2$s nekade extern delning av %1$s",
+ "%2$s unshared %1$s from you" : "%2$s slutade dela %1$s med dig",
+ "Shared with %1$s" : "Delade med %1$s",
+ "Removed share for %1$s" : "Tog bort delningen för %1$s",
+ "%2$s shared with %1$s" : "%2$s delade med %1$s",
+ "%2$s removed share for %1$s" : "%2$s tog bort delningen för %1$s",
+ "Shared by %1$s" : "Delad av %1$s",
+ "%1$s removed share" : "%1$s tog bort delning",
+ "You removed %2$s from %1$s" : "Du tog bort %2$s från %1$s",
+ "%3$s shared %1$s with %2$s" : "%3$s delade %1$s med %2$s",
+ "%3$s removed %2$s from %1$s" : "%3$s tog bort %2$s från %1$s",
+ "%2$s removed you from %1$s" : "%2$s tog bort dig från %1$s"
},"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..f79d080f907 100644
--- a/apps/files_sharing/l10n/zh_CN.js
+++ b/apps/files_sharing/l10n/zh_CN.js
@@ -4,19 +4,49 @@ 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 {email}" : "已被 {email} 下载",
+ "{file} downloaded via public link" : "{file} 被通过公开链接下载",
+ "{email} downloaded {file}" : "{email} 已下载 {file}",
+ "Shared with group {group}" : "分享到群组 {group}",
+ "Removed share for group {group}" : "到群组 {group} 的分享已被移除 ",
+ "{actor} shared with group {group}" : "{actor} 被分享到群组 {group}",
+ "Shared as public link" : "共享为公开链接",
+ "Removed public link" : "移除公开链接",
+ "Public link expired" : "公开链接已过期",
+ "{actor} shared as public link" : "{actor} 公共链接分享",
+ "{actor} removed public link" : "{actor} 删除公共链接",
+ "You shared {file} as public link" : "你共享了 {file} 为公开链接",
+ "You removed public link for {file}" : "你移除了 {file} 的公开链接",
+ "{user} accepted the remote share" : "{user} 接受了远程共享",
+ "Shared with {user}" : "与 {user} 分享",
+ "Removed share for {user}" : "移除给 {user} 的共享",
+ "Shared by {actor}" : "由 {actor} 共享",
+ "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}",
+ "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 +61,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收到了新的远程分享",
@@ -45,7 +96,7 @@ OC.L10N.register(
"%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 组",
+ "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",
@@ -57,7 +108,6 @@ OC.L10N.register(
"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 +118,23 @@ 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" : "直接链接"
+ "Downloaded by %1$s" : "已被 %1$s 下载",
+ "%1$s downloaded via public link" : "已被 %1$s 通过公开链接下载",
+ "%1$s downloaded %2$s" : "%1$s 已下载 %2$s",
+ "Shared with group %1$s" : "分享到群组 %1$s",
+ "Removed share for group %1$s" : "到群组 %1$s 的分享已被移除",
+ "%2$s shared with group %1$s" : "%2$s 被分享到群组 %1$s",
+ "You removed group %2$s from %1$s" : "你移除了群组 %2$s 在 %1$s",
+ "%1$s shared as public link" : "%1$s 公共链接分享",
+ "%1$s removed public link" : "%1$s 删除公共链接",
+ "You shared %1$s as public link" : "你共享了 %1$s 为公开链接",
+ "You removed public link for %1$s" : "你移除了 %1$s 的公开链接",
+ "Shared with %1$s" : "与 %1$s 分享",
+ "Shared by %1$s" : "由 %1$s 共享",
+ "%1$s removed share" : "%1$s 移除共享"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json
index 6110036a466..a630bb5b77e 100644
--- a/apps/files_sharing/l10n/zh_CN.json
+++ b/apps/files_sharing/l10n/zh_CN.json
@@ -2,19 +2,49 @@
"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 {email}" : "已被 {email} 下载",
+ "{file} downloaded via public link" : "{file} 被通过公开链接下载",
+ "{email} downloaded {file}" : "{email} 已下载 {file}",
+ "Shared with group {group}" : "分享到群组 {group}",
+ "Removed share for group {group}" : "到群组 {group} 的分享已被移除 ",
+ "{actor} shared with group {group}" : "{actor} 被分享到群组 {group}",
+ "Shared as public link" : "共享为公开链接",
+ "Removed public link" : "移除公开链接",
+ "Public link expired" : "公开链接已过期",
+ "{actor} shared as public link" : "{actor} 公共链接分享",
+ "{actor} removed public link" : "{actor} 删除公共链接",
+ "You shared {file} as public link" : "你共享了 {file} 为公开链接",
+ "You removed public link for {file}" : "你移除了 {file} 的公开链接",
+ "{user} accepted the remote share" : "{user} 接受了远程共享",
+ "Shared with {user}" : "与 {user} 分享",
+ "Removed share for {user}" : "移除给 {user} 的共享",
+ "Shared by {actor}" : "由 {actor} 共享",
+ "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}",
+ "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 +59,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收到了新的远程分享",
@@ -43,7 +94,7 @@
"%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 组",
+ "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,7 +106,6 @@
"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 +116,23 @@
"%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" : "直接链接"
+ "Downloaded by %1$s" : "已被 %1$s 下载",
+ "%1$s downloaded via public link" : "已被 %1$s 通过公开链接下载",
+ "%1$s downloaded %2$s" : "%1$s 已下载 %2$s",
+ "Shared with group %1$s" : "分享到群组 %1$s",
+ "Removed share for group %1$s" : "到群组 %1$s 的分享已被移除",
+ "%2$s shared with group %1$s" : "%2$s 被分享到群组 %1$s",
+ "You removed group %2$s from %1$s" : "你移除了群组 %2$s 在 %1$s",
+ "%1$s shared as public link" : "%1$s 公共链接分享",
+ "%1$s removed public link" : "%1$s 删除公共链接",
+ "You shared %1$s as public link" : "你共享了 %1$s 为公开链接",
+ "You removed public link for %1$s" : "你移除了 %1$s 的公开链接",
+ "Shared with %1$s" : "与 %1$s 分享",
+ "Shared by %1$s" : "由 %1$s 共享",
+ "%1$s removed share" : "%1$s 移除共享"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/Activity/Providers/Base.php b/apps/files_sharing/lib/Activity/Providers/Base.php
new file mode 100644
index 00000000000..3b73c23786e
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Providers/Base.php
@@ -0,0 +1,184 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 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 OCA\Files_Sharing\Activity\Providers;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\L10N\IFactory;
+
+abstract class Base implements IProvider {
+
+ /** @var IFactory */
+ protected $languageFactory;
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var array */
+ protected $displayNames = [];
+
+ /**
+ * @param IFactory $languageFactory
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ * @param IUserManager $userManager
+ */
+ public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
+ $this->languageFactory = $languageFactory;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ $this->userManager = $userManager;
+ }
+
+ /**
+ * @param string $language
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse($language, IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'files_sharing') {
+ throw new \InvalidArgumentException();
+ }
+
+ $this->l = $this->languageFactory->get('files_sharing', $language);
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ abstract protected function parseShortVersion(IEvent $event);
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ abstract protected function parseLongVersion(IEvent $event);
+
+ /**
+ * @param IEvent $event
+ * @param string $subject
+ * @param array $parameters
+ * @throws \InvalidArgumentException
+ */
+ protected function setSubjects(IEvent $event, $subject, array $parameters) {
+ $placeholders = $replacements = [];
+ foreach ($parameters as $placeholder => $parameter) {
+ $placeholders[] = '{' . $placeholder . '}';
+ if ($parameter['type'] === 'file') {
+ $replacements[] = $parameter['path'];
+ } else {
+ $replacements[] = $parameter['name'];
+ }
+ }
+
+ $event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
+ ->setRichSubject($subject, $parameters);
+ }
+
+ /**
+ * @param array|string $parameter
+ * @param IEvent|null $event
+ * @return array
+ * @throws \InvalidArgumentException
+ */
+ protected function getFile($parameter, IEvent $event = null) {
+ if (is_array($parameter)) {
+ $path = reset($parameter);
+ $id = (string) key($parameter);
+ } else if ($event !== null) {
+ // Legacy from before ownCloud 8.2
+ $path = $parameter;
+ $id = $event->getObjectId();
+ } else {
+ throw new \InvalidArgumentException('Could not generate file parameter');
+ }
+
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => trim($path, '/'),
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return array
+ */
+ protected function getUser($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
+ }
+ }
+}
diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php
index 01012e4785b..eb14c16266c 100644
--- a/apps/files_sharing/lib/Activity/Providers/Downloads.php
+++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php
@@ -22,25 +22,9 @@
namespace OCA\Files_Sharing\Activity\Providers;
use OCP\Activity\IEvent;
-use OCP\Activity\IManager;
-use OCP\Activity\IProvider;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\L10N\IFactory;
-class Downloads implements IProvider {
+class Downloads extends Base {
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IL10N */
- protected $l;
-
- /** @var IURLGenerator */
- protected $url;
-
- /** @var IManager */
- protected $activityManager;
const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded';
const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded';
@@ -49,43 +33,6 @@ class Downloads implements IProvider {
const SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED = 'folder_shared_with_email_downloaded';
/**
- * @param IFactory $languageFactory
- * @param IURLGenerator $url
- * @param IManager $activityManager
- */
- public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager) {
- $this->languageFactory = $languageFactory;
- $this->url = $url;
- $this->activityManager = $activityManager;
- }
-
- /**
- * @param string $language
- * @param IEvent $event
- * @param IEvent|null $previousEvent
- * @return IEvent
- * @throws \InvalidArgumentException
- * @since 11.0.0
- */
- public function parse($language, IEvent $event, IEvent $previousEvent = null) {
- if ($event->getApp() !== 'files_sharing') {
- throw new \InvalidArgumentException();
- }
-
- $this->l = $this->languageFactory->get('files_sharing', $language);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- try {
- return $this->parseShortVersion($event);
- } catch (\InvalidArgumentException $e) {
- // Ignore and simply use the long version...
- }
- }
-
- return $this->parseLongVersion($event);
- }
-
- /**
* @param IEvent $event
* @return IEvent
* @throws \InvalidArgumentException
@@ -96,19 +43,17 @@ class Downloads implements IProvider {
if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED ||
$event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) {
- $event->setParsedSubject($this->l->t('Downloaded via public link'))
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ $subject = $this->l->t('Downloaded via public link');
} else if ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED ||
$event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) {
- $event->setParsedSubject($this->l->t('Downloaded by %1$s', $parsedParameters['email']['name']))
- ->setRichSubject($this->l->t('Downloaded by {email}'), [
- 'email' => $parsedParameters['email'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ $subject = $this->l->t('Downloaded by {email}');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -123,34 +68,24 @@ class Downloads implements IProvider {
if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED ||
$event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) {
- $event->setParsedSubject($this->l->t('%1$s downloaded via public link', [
- $parsedParameters['file']['path'],
- ]))
- ->setRichSubject($this->l->t('{file} downloaded via public link'), [
- 'file' => $parsedParameters['file'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ $subject = $this->l->t('{file} downloaded via public link');
} else if ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED ||
$event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) {
- $event->setParsedSubject($this->l->t('%1$s downloaded %2$s', [
- $parsedParameters['email']['name'],
- $parsedParameters['file']['path'],
- ]))
- ->setRichSubject($this->l->t('{email} downloaded {file}'), [
- 'email' => $parsedParameters['email'],
- 'file' => $parsedParameters['file'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ $subject = $this->l->t('{email} downloaded {file}');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
/**
* @param IEvent $event
* @return array
+ * @throws \InvalidArgumentException
*/
protected function getParsedParameters(IEvent $event) {
$subject = $event->getSubject();
@@ -160,12 +95,12 @@ class Downloads implements IProvider {
case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
return [
- 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]),
+ 'file' => $this->getFile($parameters[0], $event),
];
case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
return [
- 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]),
+ 'file' => $this->getFile($parameters[0], $event),
'email' => [
'type' => 'email',
'id' => $parameters[1],
@@ -176,19 +111,4 @@ class Downloads implements IProvider {
throw new \InvalidArgumentException();
}
-
- /**
- * @param int $id
- * @param string $path
- * @return array
- */
- protected function generateFileParameter($id, $path) {
- return [
- 'type' => 'file',
- 'id' => $id,
- 'name' => basename($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 6c25572d0d4..06ccdaa98b3 100644
--- a/apps/files_sharing/lib/Activity/Providers/Groups.php
+++ b/apps/files_sharing/lib/Activity/Providers/Groups.php
@@ -22,79 +22,14 @@
namespace OCA\Files_Sharing\Activity\Providers;
use OCP\Activity\IEvent;
-use OCP\Activity\IManager;
-use OCP\Activity\IProvider;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\IUser;
-use OCP\IUserManager;
-use OCP\L10N\IFactory;
-class Groups implements IProvider {
-
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IL10N */
- protected $l;
-
- /** @var IURLGenerator */
- protected $url;
-
- /** @var IManager */
- protected $activityManager;
-
- /** @var IUserManager */
- protected $userManager;
-
- /** @var array */
- protected $displayNames = [];
+class Groups extends Base {
const SUBJECT_SHARED_GROUP_SELF = 'shared_group_self';
const SUBJECT_RESHARED_GROUP_BY = 'reshared_group_by';
const SUBJECT_UNSHARED_GROUP_SELF = 'unshared_group_self';
const SUBJECT_UNSHARED_GROUP_BY = 'unshared_group_by';
-
- /**
- * @param IFactory $languageFactory
- * @param IURLGenerator $url
- * @param IManager $activityManager
- * @param IUserManager $userManager
- */
- public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
- $this->languageFactory = $languageFactory;
- $this->url = $url;
- $this->activityManager = $activityManager;
- $this->userManager = $userManager;
- }
-
- /**
- * @param string $language
- * @param IEvent $event
- * @param IEvent|null $previousEvent
- * @return IEvent
- * @throws \InvalidArgumentException
- * @since 11.0.0
- */
- public function parse($language, IEvent $event, IEvent $previousEvent = null) {
- if ($event->getApp() !== 'files_sharing') {
- throw new \InvalidArgumentException();
- }
-
- $this->l = $this->languageFactory->get('files_sharing', $language);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- try {
- return $this->parseShortVersion($event);
- } catch (\InvalidArgumentException $e) {
- // Ignore and simply use the long version...
- }
- }
-
- return $this->parseLongVersion($event);
- }
-
/**
* @param IEvent $event
* @return IEvent
@@ -105,42 +40,20 @@ class Groups implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_SHARED_GROUP_SELF) {
- $event->setParsedSubject($this->l->t('Shared with group %1$s', [$parsedParameters['group']['name']]))
- ->setRichSubject($this->l->t('Shared with group {group}'), [
- 'group' => $parsedParameters['group'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('Shared with group {group}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_SELF) {
- $event->setParsedSubject($this->l->t('Removed share for group %1$s', [$parsedParameters['group']['name']]))
- ->setRichSubject($this->l->t('Removed share for group {group}'), [
- 'group' => $parsedParameters['group'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('Removed share for group {group}');
} else if ($event->getSubject() === self::SUBJECT_RESHARED_GROUP_BY) {
- $event->setParsedSubject($this->l->t('%2$s shared with group %1$s', [
- $parsedParameters['group']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} shared with group {group}'), [
- 'group' => $parsedParameters['group'],
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} shared with group {group}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) {
- $event->setParsedSubject($this->l->t('%2$s removed share for group %1$s', [
- $parsedParameters['group']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed share for group {group}'), [
- 'group' => $parsedParameters['group'],
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
-
+ $subject = $this->l->t('{actor} removed share for group {group}');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -154,39 +67,20 @@ class Groups implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_SHARED_GROUP_SELF) {
- $event->setParsedSubject($this->l->t('You shared %1$s with group %2$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['group']['name'],
- ]))
- ->setRichSubject($this->l->t('You shared {file} with group {group}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('You shared {file} with group {group}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_SELF) {
- $event->setParsedSubject($this->l->t('You removed group %2$s from %1$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['group']['name'],
- ]))
- ->setRichSubject($this->l->t('You removed group {group} from {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('You removed group {group} from {file}');
} else if ($event->getSubject() === self::SUBJECT_RESHARED_GROUP_BY) {
- $event->setParsedSubject($this->l->t('%3$s shared %1$s with group %2$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['group']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} shared {file} with group {group}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} shared {file} with group {group}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) {
- $event->setParsedSubject($this->l->t('%3$s removed group %2$s from %1$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['group']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed group {group} from {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed group {group} from {file}');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -197,21 +91,19 @@ class Groups implements IProvider {
switch ($subject) {
case self::SUBJECT_RESHARED_GROUP_BY:
case self::SUBJECT_UNSHARED_GROUP_BY:
- $id = key($parameters[0]);
return [
- 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'file' => $this->getFile($parameters[0], $event),
'group' => [
'type' => 'group',
'id' => $parameters[2],
'name' => $parameters[2],
],
- 'actor' => $this->generateUserParameter($parameters[1]),
+ 'actor' => $this->getUser($parameters[1]),
];
case self::SUBJECT_SHARED_GROUP_SELF:
case self::SUBJECT_UNSHARED_GROUP_SELF:
- $id = key($parameters[0]);
return [
- 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'file' => $this->getFile($parameters[0], $event),
'group' => [
'type' => 'group',
'id' => $parameters[1],
@@ -221,48 +113,4 @@ class Groups implements IProvider {
}
return [];
}
-
- /**
- * @param int $id
- * @param string $path
- * @return array
- */
- protected function generateFileParameter($id, $path) {
- return [
- 'type' => 'file',
- 'id' => $id,
- 'name' => basename($path),
- 'path' => trim($path, '/'),
- 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
- ];
- }
-
- /**
- * @param string $uid
- * @return array
- */
- protected function generateUserParameter($uid) {
- if (!isset($this->displayNames[$uid])) {
- $this->displayNames[$uid] = $this->getDisplayName($uid);
- }
-
- return [
- 'type' => 'user',
- 'id' => $uid,
- 'name' => $this->displayNames[$uid],
- ];
- }
-
- /**
- * @param string $uid
- * @return string
- */
- protected function getDisplayName($uid) {
- $user = $this->userManager->get($uid);
- if ($user instanceof IUser) {
- return $user->getDisplayName();
- } else {
- return $uid;
- }
- }
}
diff --git a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
index 20070970bca..b22ae0aa9b5 100644
--- a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
+++ b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
@@ -22,33 +22,8 @@
namespace OCA\Files_Sharing\Activity\Providers;
use OCP\Activity\IEvent;
-use OCP\Activity\IManager;
-use OCP\Activity\IProvider;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\IUser;
-use OCP\IUserManager;
-use OCP\L10N\IFactory;
-class PublicLinks implements IProvider {
-
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IL10N */
- protected $l;
-
- /** @var IURLGenerator */
- protected $url;
-
- /** @var IManager */
- protected $activityManager;
-
- /** @var IUserManager */
- protected $userManager;
-
- /** @var array */
- protected $displayNames = [];
+class PublicLinks extends Base {
const SUBJECT_SHARED_LINK_SELF = 'shared_link_self';
const SUBJECT_RESHARED_LINK_BY = 'reshared_link_by';
@@ -57,46 +32,6 @@ class PublicLinks implements IProvider {
const SUBJECT_LINK_EXPIRED = 'link_expired';
const SUBJECT_LINK_BY_EXPIRED = 'link_by_expired';
-
- /**
- * @param IFactory $languageFactory
- * @param IURLGenerator $url
- * @param IManager $activityManager
- * @param IUserManager $userManager
- */
- public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
- $this->languageFactory = $languageFactory;
- $this->url = $url;
- $this->activityManager = $activityManager;
- $this->userManager = $userManager;
- }
-
- /**
- * @param string $language
- * @param IEvent $event
- * @param IEvent|null $previousEvent
- * @return IEvent
- * @throws \InvalidArgumentException
- * @since 11.0.0
- */
- public function parse($language, IEvent $event, IEvent $previousEvent = null) {
- if ($event->getApp() !== 'files_sharing') {
- throw new \InvalidArgumentException();
- }
-
- $this->l = $this->languageFactory->get('files_sharing', $language);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- try {
- return $this->parseShortVersion($event);
- } catch (\InvalidArgumentException $e) {
- // Ignore and simply use the long version...
- }
- }
-
- return $this->parseLongVersion($event);
- }
-
/**
* @param IEvent $event
* @return IEvent
@@ -107,46 +42,25 @@ class PublicLinks implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_SHARED_LINK_SELF) {
- $event->setParsedSubject($this->l->t('Shared as public link'))
- ->setRichSubject($this->l->t('Shared as public link'))
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('Shared as public link');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_SELF) {
- $event->setParsedSubject($this->l->t('Removed public link'))
- ->setRichSubject($this->l->t('Removed public link'))
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
-// } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) {
-// $event->setParsedSubject($this->l->t('Public link expired'))
-// ->setRichSubject($this->l->t('Public link expired'))
-// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('Removed public link');
+ } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) {
+ $subject = $this->l->t('Public link expired');
} else if ($event->getSubject() === self::SUBJECT_RESHARED_LINK_BY) {
- $event->setParsedSubject($this->l->t('%1$s shared as public link', [
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} shared as public link'), [
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} shared as public link');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_BY) {
- $event->setParsedSubject($this->l->t('%1$s removed public link', [
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed public link'), [
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
-// } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) {
-// $event->setParsedSubject($this->l->t('Public link of %1$s expired', [
-// $parsedParameters['actor']['name'],
-// ]))
-// ->setRichSubject($this->l->t('Public link of {actor} expired',[
-// 'actor' => $parsedParameters['actor'],
-// ]))
-// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed public link');
+ } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) {
+ $subject = $this->l->t('Public link of {actor} expired');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -160,48 +74,25 @@ class PublicLinks implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_SHARED_LINK_SELF) {
- $event->setParsedSubject($this->l->t('You shared %1$s as public link', [
- $parsedParameters['file']['path'],
- ]))
- ->setRichSubject($this->l->t('You shared {file} as public link'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('You shared {file} as public link');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_SELF) {
- $event->setParsedSubject($this->l->t('You removed public link for %1$s', [
- $parsedParameters['file']['path'],
- ]))
- ->setRichSubject($this->l->t('You removed public link for {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
-// } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) {
-// $event->setParsedSubject($this->l->t('Public link expired'))
-// ->setRichSubject($this->l->t('Public link expired'))
-// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('You removed public link for {file}');
+ } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) {
+ $subject = $this->l->t('Public link expired for {file}');
} else if ($event->getSubject() === self::SUBJECT_RESHARED_LINK_BY) {
- $event->setParsedSubject($this->l->t('%2$s shared %1$s as public link', [
- $parsedParameters['file']['path'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} shared {file} as public link'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} shared {file} as public link');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_BY) {
- $event->setParsedSubject($this->l->t('%2$s removed public link for %1$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed public link for {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
-// } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) {
-// $event->setParsedSubject($this->l->t('Public link of %1$s expired', [
-// $parsedParameters['actor']['name'],
-// ]))
-// ->setRichSubject($this->l->t('Public link of {actor} expired',[
-// 'actor' => $parsedParameters['actor'],
-// ]))
-// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed public link for {file}');
+ } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) {
+ $subject = $this->l->t('Public link of {actor} for {file} expired');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -213,63 +104,18 @@ class PublicLinks implements IProvider {
case self::SUBJECT_SHARED_LINK_SELF:
case self::SUBJECT_UNSHARED_LINK_SELF:
case self::SUBJECT_LINK_EXPIRED:
- $id = key($parameters[0]);
return [
- 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'file' => $this->getFile($parameters[0], $event),
];
case self::SUBJECT_RESHARED_LINK_BY:
case self::SUBJECT_UNSHARED_LINK_BY:
case self::SUBJECT_LINK_BY_EXPIRED:
- $id = key($parameters[0]);
return [
- 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
- 'actor' => $this->generateUserParameter($parameters[1]),
+ 'file' => $this->getFile($parameters[0], $event),
+ 'actor' => $this->getUser($parameters[1]),
];
}
return [];
}
- /**
- * @param int $id
- * @param string $path
- * @return array
- */
- protected function generateFileParameter($id, $path) {
- return [
- 'type' => 'file',
- 'id' => $id,
- 'name' => basename($path),
- 'path' => trim($path, '/'),
- 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
- ];
- }
-
- /**
- * @param string $uid
- * @return array
- */
- protected function generateUserParameter($uid) {
- if (!isset($this->displayNames[$uid])) {
- $this->displayNames[$uid] = $this->getDisplayName($uid);
- }
-
- return [
- 'type' => 'user',
- 'id' => $uid,
- 'name' => $this->displayNames[$uid],
- ];
- }
-
- /**
- * @param string $uid
- * @return string
- */
- protected function getDisplayName($uid) {
- $user = $this->userManager->get($uid);
- if ($user instanceof IUser) {
- return $user->getDisplayName();
- } else {
- return $uid;
- }
- }
}
diff --git a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
index 3ee5d82e932..4e7d8ef3e27 100644
--- a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
+++ b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
@@ -24,23 +24,15 @@ namespace OCA\Files_Sharing\Activity\Providers;
use OCP\Activity\IEvent;
use OCP\Activity\IManager;
use OCP\Activity\IProvider;
+use OCP\Federation\ICloudIdManager;
use OCP\IL10N;
use OCP\IURLGenerator;
+use OCP\IUserManager;
use OCP\L10N\IFactory;
-class RemoteShares implements IProvider {
+class RemoteShares extends Base {
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IL10N */
- protected $l;
-
- /** @var IURLGenerator */
- protected $url;
-
- /** @var IManager */
- protected $activityManager;
+ protected $cloudIdManager;
const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted';
const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined';
@@ -51,37 +43,17 @@ class RemoteShares implements IProvider {
* @param IFactory $languageFactory
* @param IURLGenerator $url
* @param IManager $activityManager
+ * @param IUserManager $userManager
+ * @param ICloudIdManager $cloudIdManager
*/
- public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager) {
- $this->languageFactory = $languageFactory;
- $this->url = $url;
- $this->activityManager = $activityManager;
- }
-
- /**
- * @param string $language
- * @param IEvent $event
- * @param IEvent|null $previousEvent
- * @return IEvent
- * @throws \InvalidArgumentException
- * @since 11.0.0
- */
- public function parse($language, IEvent $event, IEvent $previousEvent = null) {
- if ($event->getApp() !== 'files_sharing') {
- throw new \InvalidArgumentException();
- }
-
- $this->l = $this->languageFactory->get('files_sharing', $language);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- try {
- return $this->parseShortVersion($event);
- } catch (\InvalidArgumentException $e) {
- // Ignore and simply use the long version...
- }
- }
-
- return $this->parseLongVersion($event);
+ public function __construct(IFactory $languageFactory,
+ IURLGenerator $url,
+ IManager $activityManager,
+ IUserManager $userManager,
+ ICloudIdManager $cloudIdManager
+ ) {
+ parent::__construct($languageFactory, $url, $activityManager, $userManager);
+ $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -94,25 +66,16 @@ class RemoteShares implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_ACCEPTED) {
- $event->setParsedSubject($this->l->t('%1$s accepted the remote share', [
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('{user} accepted the remote share'), [
- 'user' => $parsedParameters['user']
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{user} accepted the remote share');
} else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_DECLINED) {
- $event->setParsedSubject($this->l->t('%1$s declined the remote share', [
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('{user} declined the remote share'), [
- 'user' => $parsedParameters['user']
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{user} declined the remote share');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -126,37 +89,20 @@ class RemoteShares implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_RECEIVED) {
- $event->setParsedSubject($this->l->t('You received a new remote share %1$s from %2$s', [
- $parsedParameters['file']['name'],
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('You received a new remote share {file} from {user}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('You received a new remote share {file} from {user}');
} else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_ACCEPTED) {
- $event->setParsedSubject($this->l->t('%2$s accepted the remote share of %1$s', [
- $parsedParameters['file']['name'],
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('{user} accepted the remote share of {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{user} accepted the remote share of {file}');
} else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_DECLINED) {
- $event->setParsedSubject($this->l->t('%2$s declined the remote share of %1$s', [
- $parsedParameters['file']['name'],
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('{user} declined the remote share of {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{user} declined the remote share of {file}');
} else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_UNSHARED) {
- $event->setParsedSubject($this->l->t('%2$s unshared %1$s from you', [
- $parsedParameters['file']['name'],
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('{user} unshared {file} from you'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{user} unshared {file} from you');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -167,48 +113,35 @@ class RemoteShares implements IProvider {
switch ($subject) {
case self::SUBJECT_REMOTE_SHARE_RECEIVED:
case self::SUBJECT_REMOTE_SHARE_UNSHARED:
- $remoteUser = explode('@', $parameters[0], 2);
return [
'file' => [
'type' => 'pending-federated-share',
'id' => $parameters[1],
'name' => $parameters[1],
],
- 'user' => [
- 'type' => 'user',
- 'id' => $remoteUser[0],
- 'name' => $parameters[0],// Todo display name from contacts
- 'server' => $remoteUser[1],
- ],
+ 'user' => $this->getFederatedUser($parameters[0]),
];
case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
case self::SUBJECT_REMOTE_SHARE_DECLINED:
- $remoteUser = explode('@', $parameters[0], 2);
return [
- 'file' => $this->generateFileParameter($event->getObjectId(), $event->getObjectName()),
- 'user' => [
- 'type' => 'user',
- 'id' => $remoteUser[0],
- 'name' => $parameters[0],// Todo display name from contacts
- 'server' => $remoteUser[1],
- ],
+ 'file' => $this->getFile([$event->getObjectId() => $event->getObjectName()]),
+ 'user' => $this->getFederatedUser($parameters[0]),
];
}
throw new \InvalidArgumentException();
}
/**
- * @param int $id
- * @param string $path
+ * @param string $cloudId
* @return array
*/
- protected function generateFileParameter($id, $path) {
+ protected function getFederatedUser($cloudId) {
+ $remoteUser = $this->cloudIdManager->resolveCloudId($cloudId);
return [
- 'type' => 'file',
- 'id' => $id,
- 'name' => basename($path),
- 'path' => $path,
- 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ 'type' => 'user',
+ 'id' => $remoteUser->getUser(),
+ 'name' => $cloudId,// Todo display name from contacts
+ 'server' => $remoteUser->getRemote(),
];
}
}
diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php
index 4db72136a85..f5cd4e8bfe3 100644
--- a/apps/files_sharing/lib/Activity/Providers/Users.php
+++ b/apps/files_sharing/lib/Activity/Providers/Users.php
@@ -22,33 +22,9 @@
namespace OCA\Files_Sharing\Activity\Providers;
use OCP\Activity\IEvent;
-use OCP\Activity\IManager;
-use OCP\Activity\IProvider;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\IUser;
-use OCP\IUserManager;
-use OCP\L10N\IFactory;
-class Users implements IProvider {
+class Users extends Base {
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IL10N */
- protected $l;
-
- /** @var IURLGenerator */
- protected $url;
-
- /** @var IManager */
- protected $activityManager;
-
- /** @var IUserManager */
- protected $userManager;
-
- /** @var array */
- protected $displayNames = [];
const SUBJECT_SHARED_USER_SELF = 'shared_user_self';
const SUBJECT_RESHARED_USER_BY = 'reshared_user_by';
@@ -59,45 +35,6 @@ class Users implements IProvider {
const SUBJECT_UNSHARED_BY = 'unshared_by';
/**
- * @param IFactory $languageFactory
- * @param IURLGenerator $url
- * @param IManager $activityManager
- * @param IUserManager $userManager
- */
- public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
- $this->languageFactory = $languageFactory;
- $this->url = $url;
- $this->activityManager = $activityManager;
- $this->userManager = $userManager;
- }
-
- /**
- * @param string $language
- * @param IEvent $event
- * @param IEvent|null $previousEvent
- * @return IEvent
- * @throws \InvalidArgumentException
- * @since 11.0.0
- */
- public function parse($language, IEvent $event, IEvent $previousEvent = null) {
- if ($event->getApp() !== 'files_sharing') {
- throw new \InvalidArgumentException();
- }
-
- $this->l = $this->languageFactory->get('files_sharing', $language);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- try {
- return $this->parseShortVersion($event);
- } catch (\InvalidArgumentException $e) {
- // Ignore and simply use the long version...
- }
- }
-
- return $this->parseLongVersion($event);
- }
-
- /**
* @param IEvent $event
* @return IEvent
* @throws \InvalidArgumentException
@@ -107,54 +44,25 @@ class Users implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_SHARED_USER_SELF) {
- $event->setParsedSubject($this->l->t('Shared with %1$s', [$parsedParameters['user']['name']]))
- ->setRichSubject($this->l->t('Shared with {user}'), [
- 'user' => $parsedParameters['user'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('Shared with {user}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_SELF) {
- $event->setParsedSubject($this->l->t('Removed share for %1$s', [$parsedParameters['user']['name']]))
- ->setRichSubject($this->l->t('Removed share for {user}'), [
- 'user' => $parsedParameters['user'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('Removed share for {user}');
} else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) {
- $event->setParsedSubject($this->l->t('%2$s shared with %1$s', [
- $parsedParameters['user']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} shared with {user}'), [
- 'user' => $parsedParameters['user'],
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} shared with {user}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_BY) {
- $event->setParsedSubject($this->l->t('%2$s removed share for %1$s', [
- $parsedParameters['user']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed share for {user}'), [
- 'user' => $parsedParameters['user'],
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed share for {user}');
} else if ($event->getSubject() === self::SUBJECT_SHARED_WITH_BY) {
- $event->setParsedSubject($this->l->t('Shared by %1$s', [$parsedParameters['actor']['name']]))
- ->setRichSubject($this->l->t('Shared by {actor}'), [
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('Shared by {actor}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) {
- $event->setParsedSubject($this->l->t('%1$s removed share', [$parsedParameters['actor']['name']]))
- ->setRichSubject($this->l->t('{actor} removed share'), [
- 'actor' => $parsedParameters['actor'],
- ])
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed share');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -168,54 +76,25 @@ class Users implements IProvider {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_SHARED_USER_SELF) {
- $event->setParsedSubject($this->l->t('You shared %1$s with %2$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('You shared {file} with {user}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('You shared {file} with {user}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_SELF) {
- $event->setParsedSubject($this->l->t('You removed %2$s from %1$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['user']['name'],
- ]))
- ->setRichSubject($this->l->t('You removed {user} from {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('You removed {user} from {file}');
} else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) {
- $event->setParsedSubject($this->l->t('%3$s shared %1$s with %2$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['user']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed {user} from {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed {user} from {file}');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_BY) {
- $event->setParsedSubject($this->l->t('%3$s removed %2$s from %1$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['user']['name'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed {user} from {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed {user} from {file}');
} else if ($event->getSubject() === self::SUBJECT_SHARED_WITH_BY) {
- $event->setParsedSubject($this->l->t('%2$s shared %1$s with you', [
- $parsedParameters['file']['path'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} shared {file} with you'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} shared {file} with you');
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) {
- $event->setParsedSubject($this->l->t('%2$s removed you from %1$s', [
- $parsedParameters['file']['path'],
- $parsedParameters['actor']['name'],
- ]))
- ->setRichSubject($this->l->t('{actor} removed you from {file}'), $parsedParameters)
- ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $subject = $this->l->t('{actor} removed you from {file}');
} else {
throw new \InvalidArgumentException();
}
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ $this->setSubjects($event, $subject, $parsedParameters);
+
return $event;
}
@@ -226,71 +105,24 @@ class Users implements IProvider {
switch ($subject) {
case self::SUBJECT_SHARED_USER_SELF:
case self::SUBJECT_UNSHARED_USER_SELF:
- $id = key($parameters[0]);
return [
- 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
- 'user' => $this->generateUserParameter($parameters[1]),
+ 'file' => $this->getFile($parameters[0], $event),
+ 'user' => $this->getUser($parameters[1]),
];
case self::SUBJECT_SHARED_WITH_BY:
case self::SUBJECT_UNSHARED_BY:
- $id = key($parameters[0]);
return [
- 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
- 'actor' => $this->generateUserParameter($parameters[1]),
+ 'file' => $this->getFile($parameters[0], $event),
+ 'actor' => $this->getUser($parameters[1]),
];
case self::SUBJECT_RESHARED_USER_BY:
case self::SUBJECT_UNSHARED_USER_BY:
- $id = key($parameters[0]);
return [
- 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
- 'user' => $this->generateUserParameter($parameters[2]),
- 'actor' => $this->generateUserParameter($parameters[1]),
+ 'file' => $this->getFile($parameters[0], $event),
+ 'user' => $this->getUser($parameters[2]),
+ 'actor' => $this->getUser($parameters[1]),
];
}
return [];
}
-
- /**
- * @param int $id
- * @param string $path
- * @return array
- */
- protected function generateFileParameter($id, $path) {
- return [
- 'type' => 'file',
- 'id' => $id,
- 'name' => basename($path),
- 'path' => trim($path, '/'),
- 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
- ];
- }
-
- /**
- * @param string $uid
- * @return array
- */
- protected function generateUserParameter($uid) {
- if (!isset($this->displayNames[$uid])) {
- $this->displayNames[$uid] = $this->getDisplayName($uid);
- }
-
- return [
- 'type' => 'user',
- 'id' => $uid,
- 'name' => $this->displayNames[$uid],
- ];
- }
-
- /**
- * @param string $uid
- * @return string
- */
- protected function getDisplayName($uid) {
- $user = $this->userManager->get($uid);
- if ($user instanceof IUser) {
- return $user->getDisplayName();
- } else {
- return $uid;
- }
- }
}
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index 403d30ae2e6..c8cf723630b 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -35,6 +35,7 @@ use OC\AppFramework\Utility\SimpleContainer;
use OCA\Files_Sharing\Controller\ExternalSharesController;
use OCA\Files_Sharing\Controller\ShareController;
use OCA\Files_Sharing\Middleware\SharingCheckMiddleware;
+use OCP\Federation\ICloudIdManager;
use \OCP\IContainer;
use OCP\IServerContainer;
@@ -84,6 +85,9 @@ class Application extends App {
$container->registerService('HttpClientService', function (SimpleContainer $c) use ($server) {
return $server->getHTTPClientService();
});
+ $container->registerService(ICloudIdManager::class, function (SimpleContainer $c) use ($server) {
+ return $server->getCloudIdManager();
+ });
$container->registerService('ExternalManager', function (SimpleContainer $c) use ($server) {
$user = $server->getUserSession()->getUser();
$uid = $user ? $user->getUID() : null;
@@ -145,7 +149,8 @@ class Application extends App {
$server->getDatabaseConnection(),
function() use ($c) {
return $c->query('ExternalManager');
- }
+ },
+ $server->getCloudIdManager()
);
});
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index ccd0e3aa31d..6181cde6fe6 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -668,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 178c4265dd5..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
diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php
index cd5139693cf..40a9b272bc8 100644
--- a/apps/files_sharing/lib/Controller/ShareesAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php
@@ -28,6 +28,7 @@ use OCP\AppFramework\Http;
use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\AppFramework\OCSController;
use OCP\Contacts\IManager;
+use OCP\Federation\ICloudIdManager;
use OCP\Http\Client\IClientService;
use OCP\IGroup;
use OCP\IGroupManager;
@@ -69,6 +70,9 @@ class ShareesAPIController extends OCSController {
/** @var IClientService */
protected $clientService;
+ /** @var ICloudIdManager */
+ protected $cloudIdManager;
+
/** @var bool */
protected $shareWithGroupOnly = false;
@@ -110,6 +114,7 @@ class ShareesAPIController extends OCSController {
* @param ILogger $logger
* @param \OCP\Share\IManager $shareManager
* @param IClientService $clientService
+ * @param ICloudIdManager $cloudIdManager
*/
public function __construct($appName,
IRequest $request,
@@ -121,7 +126,9 @@ class ShareesAPIController extends OCSController {
IURLGenerator $urlGenerator,
ILogger $logger,
\OCP\Share\IManager $shareManager,
- IClientService $clientService) {
+ IClientService $clientService,
+ ICloudIdManager $cloudIdManager
+ ) {
parent::__construct($appName, $request);
$this->groupManager = $groupManager;
@@ -133,6 +140,7 @@ class ShareesAPIController extends OCSController {
$this->logger = $logger;
$this->shareManager = $shareManager;
$this->clientService = $clientService;
+ $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -339,7 +347,7 @@ class ShareesAPIController extends OCSController {
$result['results'] = [];
}
- if (!$result['exactIdMatch'] && substr_count($search, '@') >= 1 && $this->offset === 0) {
+ if (!$result['exactIdMatch'] && $this->cloudIdManager->isValidCloudId($search) && $this->offset === 0) {
$result['exact'][] = [
'label' => $search,
'value' => [
@@ -362,42 +370,12 @@ class ShareesAPIController extends OCSController {
* @throws \Exception
*/
public function splitUserRemote($address) {
- if (strpos($address, '@') === false) {
- throw new \Exception('Invalid Federated Cloud ID');
- }
-
- // Find the first character that is not allowed in user names
- $id = str_replace('\\', '/', $address);
- $posSlash = strpos($id, '/');
- $posColon = strpos($id, ':');
-
- if ($posSlash === false && $posColon === false) {
- $invalidPos = strlen($id);
- } else if ($posSlash === false) {
- $invalidPos = $posColon;
- } else if ($posColon === false) {
- $invalidPos = $posSlash;
- } else {
- $invalidPos = min($posSlash, $posColon);
- }
-
- // Find the last @ before $invalidPos
- $pos = $lastAtPos = 0;
- while ($lastAtPos !== false && $lastAtPos <= $invalidPos) {
- $pos = $lastAtPos;
- $lastAtPos = strpos($id, '@', $pos + 1);
- }
-
- if ($pos !== false) {
- $user = substr($id, 0, $pos);
- $remote = substr($id, $pos + 1);
- $remote = $this->fixRemoteURL($remote);
- if (!empty($user) && !empty($remote)) {
- return array($user, $remote);
- }
+ try {
+ $cloudId = $this->cloudIdManager->resolveCloudId($address);
+ return [$cloudId->getUser(), $cloudId->getRemote()];
+ } catch (\InvalidArgumentException $e) {
+ throw new \Exception('Invalid Federated Cloud ID', 0, $e);
}
-
- throw new \Exception('Invalid Federated Cloud ID');
}
/**
diff --git a/apps/files_sharing/lib/External/Cache.php b/apps/files_sharing/lib/External/Cache.php
index eaf8e0c4acf..c7793cf0595 100644
--- a/apps/files_sharing/lib/External/Cache.php
+++ b/apps/files_sharing/lib/External/Cache.php
@@ -24,21 +24,25 @@
namespace OCA\Files_Sharing\External;
+use OCP\Federation\ICloudId;
+
class Cache extends \OC\Files\Cache\Cache {
+ /** @var ICloudId */
+ private $cloudId;
private $remote;
private $remoteUser;
private $storage;
/**
* @param \OCA\Files_Sharing\External\Storage $storage
- * @param string $remote
- * @param string $remoteUser
+ * @param ICloudId $cloudId
*/
- public function __construct($storage, $remote, $remoteUser) {
+ public function __construct($storage, ICloudId $cloudId) {
+ $this->cloudId = $cloudId;
$this->storage = $storage;
- list(, $remote) = explode('://', $remote, 2);
+ list(, $remote) = explode('://', $cloudId->getRemote(), 2);
$this->remote = $remote;
- $this->remoteUser = $remoteUser;
+ $this->remoteUser = $cloudId->getUser();
parent::__construct($storage);
}
@@ -47,7 +51,7 @@ class Cache extends \OC\Files\Cache\Cache {
if (!$result) {
return false;
}
- $result['displayname_owner'] = $this->remoteUser . '@' . $this->remote;
+ $result['displayname_owner'] = $this->cloudId->getDisplayId();
if (!$file || $file === '') {
$result['is_share_mount_point'] = true;
$mountPoint = rtrim($this->storage->getMountPoint());
@@ -59,7 +63,7 @@ class Cache extends \OC\Files\Cache\Cache {
public function getFolderContentsById($id) {
$results = parent::getFolderContentsById($id);
foreach ($results as &$file) {
- $file['displayname_owner'] = $this->remoteUser . '@' . $this->remote;
+ $file['displayname_owner'] = $this->cloudId->getDisplayId();
}
return $results;
}
diff --git a/apps/files_sharing/lib/External/MountProvider.php b/apps/files_sharing/lib/External/MountProvider.php
index 3f2f39a74f7..27ee9fcb46b 100644
--- a/apps/files_sharing/lib/External/MountProvider.php
+++ b/apps/files_sharing/lib/External/MountProvider.php
@@ -22,6 +22,7 @@
namespace OCA\Files_Sharing\External;
+use OCP\Federation\ICloudIdManager;
use OCP\Files\Config\IMountProvider;
use OCP\Files\Storage\IStorageFactory;
use OCP\IDBConnection;
@@ -41,12 +42,19 @@ class MountProvider implements IMountProvider {
private $managerProvider;
/**
+ * @var ICloudIdManager
+ */
+ private $cloudIdManager;
+
+ /**
* @param \OCP\IDBConnection $connection
* @param callable $managerProvider due to setup order we need a callable that return the manager instead of the manager itself
+ * @param ICloudIdManager $cloudIdManager
*/
- public function __construct(IDBConnection $connection, callable $managerProvider) {
+ public function __construct(IDBConnection $connection, callable $managerProvider, ICloudIdManager $cloudIdManager) {
$this->connection = $connection;
$this->managerProvider = $managerProvider;
+ $this->cloudIdManager = $cloudIdManager;
}
public function getMount(IUser $user, $data, IStorageFactory $storageFactory) {
@@ -55,6 +63,7 @@ class MountProvider implements IMountProvider {
$data['manager'] = $manager;
$mountPoint = '/' . $user->getUID() . '/files/' . ltrim($data['mountpoint'], '/');
$data['mountpoint'] = $mountPoint;
+ $data['cloudId'] = $this->cloudIdManager->getCloudId($data['owner'], $data['remote']);
$data['certificateManager'] = \OC::$server->getCertificateManager($user->getUID());
$data['HttpClientService'] = \OC::$server->getHTTPClientService();
return new Mount(self::STORAGE, $mountPoint, $data, $manager, $storageFactory);
diff --git a/apps/files_sharing/lib/External/Storage.php b/apps/files_sharing/lib/External/Storage.php
index 93f3571e803..51d97388db7 100644
--- a/apps/files_sharing/lib/External/Storage.php
+++ b/apps/files_sharing/lib/External/Storage.php
@@ -35,15 +35,14 @@ use OC\ForbiddenException;
use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\Files_Sharing\ISharedStorage;
use OCP\AppFramework\Http;
+use OCP\Federation\ICloudId;
use OCP\Files\NotFoundException;
use OCP\Files\StorageInvalidException;
use OCP\Files\StorageNotAvailableException;
class Storage extends DAV implements ISharedStorage {
- /** @var string */
- private $remoteUser;
- /** @var string */
- private $remote;
+ /** @var ICloudId */
+ private $cloudId;
/** @var string */
private $mountPoint;
/** @var string */
@@ -72,9 +71,8 @@ class Storage extends DAV implements ISharedStorage {
$this->manager = $options['manager'];
$this->certificateManager = $options['certificateManager'];
- $this->remote = $options['remote'];
- $this->remoteUser = $options['owner'];
- list($protocol, $remote) = explode('://', $this->remote);
+ $this->cloudId = $options['cloudId'];
+ list($protocol, $remote) = explode('://', $this->cloudId->getRemote());
if (strpos($remote, '/')) {
list($host, $root) = explode('/', $remote, 2);
} else {
@@ -82,7 +80,7 @@ class Storage extends DAV implements ISharedStorage {
$root = '';
}
$secure = $protocol === 'https';
- $root = rtrim($root, '/') . $discoveryManager->getWebDavEndpoint($this->remote);
+ $root = rtrim($root, '/') . $discoveryManager->getWebDavEndpoint($this->cloudId->getRemote());
$this->mountPoint = $options['mountpoint'];
$this->token = $options['token'];
parent::__construct(array(
@@ -106,11 +104,11 @@ class Storage extends DAV implements ISharedStorage {
}
public function getRemoteUser() {
- return $this->remoteUser;
+ return $this->cloudId->getUser();
}
public function getRemote() {
- return $this->remote;
+ return $this->cloudId->getRemote();
}
public function getMountPoint() {
@@ -130,12 +128,12 @@ class Storage extends DAV implements ISharedStorage {
* @return string
*/
public function getId() {
- return 'shared::' . md5($this->token . '@' . $this->remote);
+ return 'shared::' . md5($this->token . '@' . $this->getRemote());
}
public function getCache($path = '', $storage = null) {
if (is_null($this->cache)) {
- $this->cache = new Cache($this, $this->remote, $this->remoteUser);
+ $this->cache = new Cache($this, $this->cloudId);
}
return $this->cache;
}
@@ -251,9 +249,9 @@ class Storage extends DAV implements ISharedStorage {
*/
protected function testRemote() {
try {
- return $this->testRemoteUrl($this->remote . '/ocs-provider/index.php')
- || $this->testRemoteUrl($this->remote . '/ocs-provider/')
- || $this->testRemoteUrl($this->remote . '/status.php');
+ return $this->testRemoteUrl($this->getRemote() . '/ocs-provider/index.php')
+ || $this->testRemoteUrl($this->getRemote() . '/ocs-provider/')
+ || $this->testRemoteUrl($this->getRemote() . '/status.php');
} catch (\Exception $e) {
return false;
}
@@ -343,8 +341,7 @@ class Storage extends DAV implements ISharedStorage {
}
public function getOwner($path) {
- list(, $remote) = explode('://', $this->remote, 2);
- return $this->remoteUser . '@' . $remote;
+ return $this->cloudId->getDisplayId();
}
public function isSharable($path) {
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/ShareesAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
index c68e2304743..035085d811a 100644
--- a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
@@ -25,10 +25,12 @@
namespace OCA\Files_Sharing\Tests\Controller;
+use OC\Federation\CloudIdManager;
use OCA\Files_Sharing\Controller\ShareesAPIController;
use OCA\Files_Sharing\Tests\TestCase;
use OCP\AppFramework\Http;
use OCP\AppFramework\OCS\OCSBadRequestException;
+use OCP\Federation\ICloudIdManager;
use OCP\Http\Client\IClientService;
use OCP\Share;
@@ -64,6 +66,9 @@ class ShareesAPIControllerTest extends TestCase {
/** @var IClientService|\PHPUnit_Framework_MockObject_MockObject */
private $clientService;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
protected function setUp() {
parent::setUp();
@@ -93,6 +98,8 @@ class ShareesAPIControllerTest extends TestCase {
$this->clientService = $this->createMock(IClientService::class);
+ $this->cloudIdManager = new CloudIdManager();
+
$this->sharees = new ShareesAPIController(
'files_sharing',
$this->request,
@@ -104,7 +111,8 @@ class ShareesAPIControllerTest extends TestCase {
$this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(),
$this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(),
$this->shareManager,
- $this->clientService
+ $this->clientService,
+ $this->cloudIdManager
);
}
@@ -1434,7 +1442,8 @@ class ShareesAPIControllerTest extends TestCase {
$this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(),
$this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(),
$this->shareManager,
- $this->clientService
+ $this->clientService,
+ $this->cloudIdManager
])
->setMethods(array('searchSharees', 'isRemoteSharingAllowed', 'shareProviderExists'))
->getMock();
@@ -1526,7 +1535,8 @@ class ShareesAPIControllerTest extends TestCase {
$this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(),
$this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(),
$this->shareManager,
- $this->clientService
+ $this->clientService,
+ $this->cloudIdManager
])
->setMethods(array('searchSharees', 'isRemoteSharingAllowed'))
->getMock();
@@ -1692,7 +1702,8 @@ class ShareesAPIControllerTest extends TestCase {
$this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(),
$this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(),
$this->shareManager,
- $this->clientService
+ $this->clientService,
+ $this->cloudIdManager
])
->setMethods(array('getShareesForShareIds', 'getUsers', 'getGroups', 'getRemote'))
->getMock();
diff --git a/apps/files_sharing/tests/External/CacheTest.php b/apps/files_sharing/tests/External/CacheTest.php
index a31a748a69b..0129e760648 100644
--- a/apps/files_sharing/tests/External/CacheTest.php
+++ b/apps/files_sharing/tests/External/CacheTest.php
@@ -24,7 +24,9 @@
*/
namespace OCA\Files_Sharing\Tests\External;
+use OC\Federation\CloudIdManager;
use OCA\Files_Sharing\Tests\TestCase;
+use OCP\Federation\ICloudIdManager;
/**
* Class Cache
@@ -50,9 +52,13 @@ class CacheTest extends TestCase {
*/
private $remoteUser;
+ /** @var ICloudIdManager */
+ private $cloudIdManager;
+
protected function setUp() {
parent::setUp();
+ $this->cloudIdManager = new CloudIdManager();
$this->remoteUser = $this->getUniqueID('remoteuser');
$this->storage = $this->getMockBuilder('\OCA\Files_Sharing\External\Storage')
@@ -64,8 +70,7 @@ class CacheTest extends TestCase {
->will($this->returnValue('dummystorage::'));
$this->cache = new \OCA\Files_Sharing\External\Cache(
$this->storage,
- 'http://example.com/owncloud',
- $this->remoteUser
+ $this->cloudIdManager->getCloudId($this->remoteUser, 'http://example.com/owncloud')
);
$this->cache->put(
'test.txt',
diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php
index 48476888bdd..f2a55babcc7 100644
--- a/apps/files_sharing/tests/External/ManagerTest.php
+++ b/apps/files_sharing/tests/External/ManagerTest.php
@@ -25,6 +25,7 @@
namespace OCA\Files_Sharing\Tests\External;
+use OC\Federation\CloudIdManager;
use OC\Files\Storage\StorageFactory;
use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\Files_Sharing\External\Manager;
@@ -84,7 +85,7 @@ class ManagerTest extends TestCase {
);
$this->testMountProvider = new MountProvider(\OC::$server->getDatabaseConnection(), function() {
return $this->manager;
- });
+ }, new CloudIdManager());
}
private function setupMounts() {
diff --git a/apps/files_sharing/tests/ExternalStorageTest.php b/apps/files_sharing/tests/ExternalStorageTest.php
index 49b72be1391..1246b0edb98 100644
--- a/apps/files_sharing/tests/ExternalStorageTest.php
+++ b/apps/files_sharing/tests/ExternalStorageTest.php
@@ -25,6 +25,7 @@
*/
namespace OCA\Files_Sharing\Tests;
+use OC\Federation\CloudId;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\Http\Client\IResponse;
@@ -90,6 +91,7 @@ class ExternalStorageTest extends \Test\TestCase {
return new TestSharingExternalStorage(
array(
+ 'cloudId' => new CloudId('testOwner@' . $uri, 'testOwner', $uri),
'remote' => $uri,
'owner' => 'testOwner',
'mountpoint' => 'remoteshare',
diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php
index e73d6b0ac69..2e66a6b96e1 100644
--- a/apps/files_trashbin/lib/Trashbin.php
+++ b/apps/files_trashbin/lib/Trashbin.php
@@ -902,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/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/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/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/pl.js b/apps/files_versions/l10n/pl.js
index 1b6778ca9e0..e330499d8ef 100644
--- a/apps/files_versions/l10n/pl.js
+++ b/apps/files_versions/l10n/pl.js
@@ -4,7 +4,7 @@ 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 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...",
diff --git a/apps/files_versions/l10n/pl.json b/apps/files_versions/l10n/pl.json
index 1d8a2ed33cc..7d241cc4254 100644
--- a/apps/files_versions/l10n/pl.json
+++ b/apps/files_versions/l10n/pl.json
@@ -2,7 +2,7 @@
"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 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...",
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/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/sharebymail/l10n/.gitkeep b/apps/sharebymail/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/sharebymail/l10n/.gitkeep
diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js
index 2fb855a859b..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",
diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json
index defb3f58a0c..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",
diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js
index 33554f5086d..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",
diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json
index f1a71612dfb..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",
diff --git a/apps/systemtags/l10n/sq.js b/apps/systemtags/l10n/sq.js
index 9312d671bd1..424c221d3e8 100644
--- a/apps/systemtags/l10n/sq.js
+++ b/apps/systemtags/l10n/sq.js
@@ -2,31 +2,53 @@ 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",
+ "Invisible" : "I padukshëm",
+ "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..9e9f5789040 100644
--- a/apps/systemtags/l10n/sq.json
+++ b/apps/systemtags/l10n/sq.json
@@ -1,30 +1,52 @@
{ "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",
+ "Invisible" : "I padukshëm",
+ "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/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 9145717c4a0..24ac1c7d8d5 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -446,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 c19d609d909..97a5e985860 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -914,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);
@@ -952,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);
@@ -987,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/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 cd6f0699255..98ad943d2cd 100644
--- a/apps/twofactor_backupcodes/l10n/nb_NO.js
+++ b/apps/twofactor_backupcodes/l10n/nb_NO.js
@@ -13,9 +13,9 @@ OC.L10N.register(
"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 bekreftelses sikkerhetskopi-koder",
+ "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 bekreftelses sikkerhetskopi-koder"
+ "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 33f26496b8e..1fe3d2a9a32 100644
--- a/apps/twofactor_backupcodes/l10n/nb_NO.json
+++ b/apps/twofactor_backupcodes/l10n/nb_NO.json
@@ -11,9 +11,9 @@
"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 bekreftelses sikkerhetskopi-koder",
+ "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 bekreftelses sikkerhetskopi-koder"
+ "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/pl.js b/apps/twofactor_backupcodes/l10n/pl.js
index 1291e75856f..152e6ba1554 100644
--- a/apps/twofactor_backupcodes/l10n/pl.js
+++ b/apps/twofactor_backupcodes/l10n/pl.js
@@ -3,15 +3,19 @@ OC.L10N.register(
{
"Generate backup codes" : "Generowanie kodów zapasowych",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Kody zapasowe zostały wygenerowane. {{used}} z {{total}} kodów zostało wykorzystanych.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "To są kody zapasowe. Proszę zapisać i / lub wydrukować, ponieważ później nie będzie można je ponownie przeczytać",
- "Save backup codes" : "Zapis kodów zapasowych",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "To są kody zapasowe. Proszę je zapisać i/lub wydrukować, ponieważ później nie będzie można ich ponownie odczytać",
+ "Save backup codes" : "Zapisz kody zapasowe",
"Print backup codes" : "Drukuj kody zapasowe",
"Regenerate backup codes" : "Ponownie generuj kody zapasowe",
- "If you regenerate backup codes, you automatically invalidate old codes." : "Jeśli generujesz kody zapasowe ponownie, automatycznie unieważnia stare kody.",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Jeśli generujesz kody zapasowe ponownie, automatycznie unieważniasz 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"
+ "Second-factor backup codes" : "Drugi składnik kodów zapasowych"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/twofactor_backupcodes/l10n/pl.json b/apps/twofactor_backupcodes/l10n/pl.json
index be569fe740f..035bdf1514f 100644
--- a/apps/twofactor_backupcodes/l10n/pl.json
+++ b/apps/twofactor_backupcodes/l10n/pl.json
@@ -1,15 +1,19 @@
{ "translations": {
"Generate backup codes" : "Generowanie kodów zapasowych",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Kody zapasowe zostały wygenerowane. {{used}} z {{total}} kodów zostało wykorzystanych.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "To są kody zapasowe. Proszę zapisać i / lub wydrukować, ponieważ później nie będzie można je ponownie przeczytać",
- "Save backup codes" : "Zapis kodów zapasowych",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "To są kody zapasowe. Proszę je zapisać i/lub wydrukować, ponieważ później nie będzie można ich ponownie odczytać",
+ "Save backup codes" : "Zapisz kody zapasowe",
"Print backup codes" : "Drukuj kody zapasowe",
"Regenerate backup codes" : "Ponownie generuj kody zapasowe",
- "If you regenerate backup codes, you automatically invalidate old codes." : "Jeśli generujesz kody zapasowe ponownie, automatycznie unieważnia stare kody.",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Jeśli generujesz kody zapasowe ponownie, automatycznie unieważniasz 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"
+ "Second-factor backup codes" : "Drugi składnik kodów zapasowych"
},"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/de_DE.js b/apps/updatenotification/l10n/de_DE.js
index 6be042afa8b..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,6 +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."
+ "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 268b929a25f..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,6 +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."
+ "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/ja.js b/apps/updatenotification/l10n/ja.js
index 2e8e64decb3..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" : "今すぐダウンロード",
@@ -17,6 +18,7 @@ OC.L10N.register(
"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." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。"
+ "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/ja.json b/apps/updatenotification/l10n/ja.json
index 22fb09f50fc..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" : "今すぐダウンロード",
@@ -15,6 +16,7 @@
"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." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。"
+ "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/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/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/zh_CN.js b/apps/updatenotification/l10n/zh_CN.js
index ddfe6179139..9c224667f6b 100644
--- a/apps/updatenotification/l10n/zh_CN.js
+++ b/apps/updatenotification/l10n/zh_CN.js
@@ -6,8 +6,8 @@ OC.L10N.register(
"{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。",
"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 。",
+ "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" : "开始下载",
diff --git a/apps/updatenotification/l10n/zh_CN.json b/apps/updatenotification/l10n/zh_CN.json
index fc886540cb4..4ffaf9f9e96 100644
--- a/apps/updatenotification/l10n/zh_CN.json
+++ b/apps/updatenotification/l10n/zh_CN.json
@@ -4,8 +4,8 @@
"{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。",
"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 。",
+ "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" : "开始下载",
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/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index cbbe871d9cc..3f77a537d03 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -10,7 +10,7 @@ OC.L10N.register(
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -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,7 +36,7 @@ OC.L10N.register(
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
@@ -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",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index e31c5f7fbe2..7f402c10a50 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -8,7 +8,7 @@
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -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,7 +34,7 @@
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
@@ -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",
diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js
index 8c62d7df617..7f256c26649 100644
--- a/apps/user_ldap/l10n/id.js
+++ b/apps/user_ldap/l10n/id.js
@@ -40,12 +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 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.",
@@ -140,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",
diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json
index a356fdac06b..7fc32321558 100644
--- a/apps/user_ldap/l10n/id.json
+++ b/apps/user_ldap/l10n/id.json
@@ -38,12 +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 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.",
@@ -138,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",
diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js
index 0c2955c2881..a7732731cab 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,26 @@ 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.",
+ "Please provide a login name to test against" : "Wprowadź nazwę użytkownika, aby wykonać test ponownie",
+ "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 +63,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 +83,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 +117,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 +134,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..9aa9e4e478e 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,26 @@
"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.",
+ "Please provide a login name to test against" : "Wprowadź nazwę użytkownika, aby wykonać test ponownie",
+ "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 +61,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 +81,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 +115,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 +132,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/sq.js b/apps/user_ldap/l10n/sq.js
index dd53169a6bd..2f09cd96511 100644
--- a/apps/user_ldap/l10n/sq.js
+++ b/apps/user_ldap/l10n/sq.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"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.",
@@ -140,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",
diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json
index 135a2f27170..053ae0f5a2d 100644
--- a/apps/user_ldap/l10n/sq.json
+++ b/apps/user_ldap/l10n/sq.json
@@ -44,6 +44,7 @@
"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.",
@@ -138,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",
diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js
index aba8488f0d1..9a1768fe01e 100644
--- a/apps/user_ldap/l10n/sv.js
+++ b/apps/user_ldap/l10n/sv.js
@@ -44,6 +44,7 @@ OC.L10N.register(
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
"Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
"Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json
index 8f5b48cbf7e..a4019761f96 100644
--- a/apps/user_ldap/l10n/sv.json
+++ b/apps/user_ldap/l10n/sv.json
@@ -42,6 +42,7 @@
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
"Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
"Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index cace64a7deb..9f6639c0db0 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -678,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/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/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..ebec68bd463 100644
--- a/apps/workflowengine/l10n/pl.js
+++ b/apps/workflowengine/l10n/pl.js
@@ -1,8 +1,9 @@
OC.L10N.register(
"workflowengine",
{
- "Successfully saved" : "Zapisywanie powiodło się",
- "Saving failed:" : "Zapisywanie nie powiodło się:",
+ "Successfully saved" : "Zapis się powiódł",
+ "Saving failed:" : "Zapis się nie udał:",
+ "File mime type" : "Typ MIME pliku",
"is" : "jest",
"is not" : "nie jest",
"matches" : "pasuje",
@@ -16,13 +17,13 @@ OC.L10N.register(
"File system tag" : "Etykieta systemu plików",
"is tagged with" : "jest oznaczony",
"is not tagged with" : "Nie jest oznaczony",
- "Select tag…" : "Wybierz etykietę ...",
+ "Select tag…" : "Wybierz etykietę...",
"Request remote address" : "Uzyskaj zdalny adres",
"matches IPv4" : "pasuje IPv4",
"does not match IPv4" : "nie pasuje IPv4",
"matches IPv6" : "pasuje IPv6",
"does not match IPv6" : "nie pasuje IPv6",
- "Request time" : "Przekroczono czas odpowiedzi",
+ "Request time" : "Czas odpowiedzi",
"between" : "pomiędzy",
"not between" : "nie pomiędzy",
"Start" : "Start",
@@ -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",
- "is member of" : "Jest członkiem z",
- "is not member of" : "Nie jest członkiem z",
+ "User group membership" : "Członkostwo grupy użytkownika",
+ "is member of" : "jest członkiem w",
+ "is not member of" : "nie jest członkiem w",
"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",
@@ -56,10 +60,10 @@ OC.L10N.register(
"Check #%s does not exist" : "Sprawdź, czy #%s nie istnieje",
"Workflow" : "Wpływ na pracę",
"Open documentation" : "Otwórz dokumentację",
- "Add rule group" : "Dodaj regułę grupy",
+ "Add rule group" : "Dodaj grupę reguł",
"Short rule description" : "Krótki opis reguły",
"Add rule" : "Dodaj regułę",
- "Reset" : "Reset",
+ "Reset" : "Zresetuj",
"Save" : "Zapisz",
"Saving…" : "Zapisywanie...",
"Loading…" : "Wczytywanie..."
diff --git a/apps/workflowengine/l10n/pl.json b/apps/workflowengine/l10n/pl.json
index c2f3a149b6a..9c0c69f914e 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ę:",
+ "Successfully saved" : "Zapis się powiódł",
+ "Saving failed:" : "Zapis się nie udał:",
+ "File mime type" : "Typ MIME pliku",
"is" : "jest",
"is not" : "nie jest",
"matches" : "pasuje",
@@ -14,13 +15,13 @@
"File system tag" : "Etykieta systemu plików",
"is tagged with" : "jest oznaczony",
"is not tagged with" : "Nie jest oznaczony",
- "Select tag…" : "Wybierz etykietę ...",
+ "Select tag…" : "Wybierz etykietę...",
"Request remote address" : "Uzyskaj zdalny adres",
"matches IPv4" : "pasuje IPv4",
"does not match IPv4" : "nie pasuje IPv4",
"matches IPv6" : "pasuje IPv6",
"does not match IPv6" : "nie pasuje IPv6",
- "Request time" : "Przekroczono czas odpowiedzi",
+ "Request time" : "Czas odpowiedzi",
"between" : "pomiędzy",
"not between" : "nie pomiędzy",
"Start" : "Start",
@@ -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",
- "is member of" : "Jest członkiem z",
- "is not member of" : "Nie jest członkiem z",
+ "User group membership" : "Członkostwo grupy użytkownika",
+ "is member of" : "jest członkiem w",
+ "is not member of" : "nie jest członkiem w",
"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",
@@ -54,10 +58,10 @@
"Check #%s does not exist" : "Sprawdź, czy #%s nie istnieje",
"Workflow" : "Wpływ na pracę",
"Open documentation" : "Otwórz dokumentację",
- "Add rule group" : "Dodaj regułę grupy",
+ "Add rule group" : "Dodaj grupę reguł",
"Short rule description" : "Krótki opis reguły",
"Add rule" : "Dodaj regułę",
- "Reset" : "Reset",
+ "Reset" : "Zresetuj",
"Save" : "Zapisz",
"Saving…" : "Zapisywanie...",
"Loading…" : "Wczytywanie..."
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/build/integration/config/behat.yml b/build/integration/config/behat.yml
index 82ad6eaa170..3573f9d6a6b 100644
--- a/build/integration/config/behat.yml
+++ b/build/integration/config/behat.yml
@@ -75,6 +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/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/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/config/config.sample.php b/config/config.sample.php
index 534af5a3a31..3d1829e17e6 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -310,9 +310,9 @@ $CONFIG = array(
* For ``qmail`` the binary is /var/qmail/bin/sendmail, and it must be installed
* on your Unix system.
*
- * Defaults to ``sendmail``
+ * Defaults to ``php``
*/
-'mail_smtpmode' => 'sendmail',
+'mail_smtpmode' => 'php',
/**
* This depends on ``mail_smtpmode``. Specify the IP address of your mail
@@ -716,7 +716,8 @@ $CONFIG = array(
/**
* This uses PHP.date formatting; see http://php.net/manual/en/function.date.php
*
- * Defaults to ``Y-m-d\TH:i:sO`` (ISO8601)
+ * 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',
diff --git a/core/Application.php b/core/Application.php
index dad7546dcb8..6621964c289 100644
--- a/core/Application.php
+++ b/core/Application.php
@@ -30,7 +30,9 @@
namespace OC\Core;
+use OC\Core\Controller\OCJSController;
use OC\Security\IdentityProof\Manager;
+use OC\Server;
use OCP\AppFramework\App;
use OC\Core\Controller\CssController;
use OCP\AppFramework\Utility\ITimeFactory;
@@ -66,5 +68,24 @@ class Application extends App {
$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/User/Setting.php b/core/Command/User/Setting.php
index 368a0c15dcd..d7bb436783f 100644
--- a/core/Command/User/Setting.php
+++ b/core/Command/User/Setting.php
@@ -25,6 +25,7 @@ namespace OC\Core\Command\User;
use OC\Core\Command\Base;
use OCP\IConfig;
use OCP\IDBConnection;
+use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@@ -174,6 +175,14 @@ class Setting extends Base {
return 1;
}
+ if ($app === 'settings' && $key === 'email') {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ $user->setEMailAddress($input->getArgument('value'));
+ return 0;
+ }
+ }
+
$this->config->setUserValue($uid, $app, $key, $input->getArgument('value'));
return 0;
@@ -183,6 +192,14 @@ class Setting extends Base {
return 1;
}
+ if ($app === 'settings' && $key === 'email') {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ $user->setEMailAddress('');
+ return 0;
+ }
+ }
+
$this->config->deleteUserValue($uid, $app, $key);
return 0;
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index 187c818b9e1..954a18e8778 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -98,7 +98,7 @@ class LoginController extends Controller {
* @return RedirectResponse
*/
public function logout() {
- $loginToken = $this->request->getCookie('oc_token');
+ $loginToken = $this->request->getCookie('nc_token');
if (!is_null($loginToken)) {
$this->config->deleteUserValue($this->userSession->getUser()->getUID(), 'login_token', $loginToken);
}
@@ -159,7 +159,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 !== '') {
diff --git a/core/Controller/OCSController.php b/core/Controller/OCSController.php
index dc9775f2603..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
diff --git a/core/css/apps.scss b/core/css/apps.scss
index 93e60fbfbf1..f1ddc95e092 100644
--- a/core/css/apps.scss
+++ b/core/css/apps.scss
@@ -1,6 +1,16 @@
/**
- * @copyright Copyright (c) 2014, Jan-Christoph Borchardt (http://jancborchardt.net)
- * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
+ * @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
*
@@ -52,12 +62,26 @@ em {
-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;
@@ -94,15 +118,11 @@ em {
color: #000;
opacity: .57;
}
- li:hover > a,
- li:focus > a,
- a:focus,
- .selected,
- .selected a,
- .active,
- .active a {
- opacity: 1;
- box-shadow: inset 2px 0 #0082c9;
+ li > a:first-child img {
+ margin-bottom: -3px;
+ margin-right: 11px;
+ width: 16px;
+ margin-left: 2px;
}
.collapse {
display: none;
@@ -214,7 +234,8 @@ em {
top: 0;
bottom: 0;
font-size: 12px;
- button, .counter {
+ button,
+ .counter {
width: 44px;
height: 44px;
padding-top: 12px;
@@ -258,6 +279,7 @@ em {
height: 100%;
width: 100%;
margin: 0;
+ box-shadow: none;
}
.app-navigation-entry-utils-menu-button {
button {
@@ -541,7 +563,6 @@ em {
background-color: #fff;
color: #333;
border-radius: 3px;
- border-top-right-radius: 0;
z-index: 110;
margin: 5px;
margin-top: -5px;
@@ -574,7 +595,6 @@ em {
transform: translateX(50%);
right: 50%;
margin-right: 0;
- border-top-right-radius: 3px;
&:after {
right: 50%;
transform: translateX(50%);
@@ -585,8 +605,6 @@ em {
right: auto;
left: 0;
margin-right: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 3px;
&:after {
left: 6px;
right: auto;
@@ -620,6 +638,8 @@ em {
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;
@@ -632,16 +652,17 @@ em {
}
> 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;
- > span {
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)' !important;
- filter: alpha(opacity = 70) !important;
- opacity: .7 !important;
- }
}
/* Add padding if contains icon+text */
&:not(:empty) {
@@ -660,7 +681,8 @@ em {
padding: 18px 0 18px 36px;
min-width: 0; /* Overwrite icons*/
min-height: 0;
- background-position: 10px center
+ 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..292ae40e8d6
--- /dev/null
+++ b/core/css/guest.css
@@ -0,0 +1,632 @@
+/* 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,
+#forgot-password:hover,
+p.info a:hover {
+ 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;
+}
+
+/* Checkboxes */
+input[type='checkbox'].checkbox {
+ height:1px;
+ left:-10000px;
+ overflow:hidden;
+ position:absolute;
+ top:auto;
+ width:1px;
+}
+input[type='checkbox'].checkbox + label {
+ user-select:none;
+}
+input[type='checkbox'].checkbox:disabled + label,
+input[type='checkbox'].checkbox:disabled + label:before {
+ cursor:default;
+}
+input[type='checkbox'].checkbox + label:before {
+ background-position:center;
+ border:1px solid #888;
+ border-radius:1px;
+ content:'';
+ display:inline-block;
+ height:10px;
+ margin:3px;
+ margin-top:1px;
+ vertical-align:middle;
+ width:10px;
+}
+input[type='checkbox'].checkbox--white:not(:disabled):not(:checked) + label:hover:before,
+input[type='checkbox'].checkbox--white:focus + label:before {
+ border-color:#fff;
+}
+input[type='checkbox'].checkbox--white:checked + label:before,
+input[type='checkbox'].checkbox--white.checkbox:indeterminate + label:before {
+ border-color:#fff;
+ background-color: #eee;
+}
+input[type='checkbox'].checkbox--white:disabled + label:before {
+ background-color:#666;
+ border-color:#999;
+}
+input[type='checkbox'].checkbox--white:checked:disabled + label:before {
+ border-color:#666;
+}
+input[type='checkbox'].checkbox--white:checked + label:before {
+ background-image:url('../img/actions/checkbox-mark-white.svg');
+}
+input[type='checkbox'].checkbox--white:indeterminate + label:before {
+ background-image:url('../img/actions/checkbox-mixed-white.svg');
+}
+input[type='checkbox'].checkbox--white:indeterminate:disabled + label:after {
+ background-color:#aaa;
+ border-color:#888;
+}
+input[type='checkbox'].checkbox--white + label:before,
+input[type='checkbox'].checkbox--white:checked:disabled + label:after {
+ border-color:#aaa;
+}
+
+/* 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-toggle {
+ position: absolute;
+ right: 1em;
+ top: .8em;
+ float: right;
+}
+#show, #dbpassword-toggle, #personal-show {
+ display: none;
+}
+#show + label, #dbpassword-toggle + label {
+ right: 21px;
+ top: 15px !important;
+ margin: -14px !important;
+ padding: 14px !important;
+}
+#show:checked + label, #dbpassword-toggle:checked + label, #personal-show:checked + label {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+ opacity: .8;
+}
+#show + label, #dbpassword-toggle + 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-toggle + 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;
+}
+
+/* TOTP */
+.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);
+}
+
+/* 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=2');
+}
+.icon-confirm {
+ background-image: url('../img/actions/confirm.svg?v=2');
+}
+.icon-confirm-white {
+ background-image: url('../img/actions/confirm-white.svg?v=2');
+}
+
+
+/* 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.scss b/core/css/header.scss
index 886c2489a63..2b73937a3c4 100644
--- a/core/css/header.scss
+++ b/core/css/header.scss
@@ -1,8 +1,13 @@
/**
- * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
- * @copyright Copyright (c) 2016, Lukas Reschke (lukas@statuscode.ch)
- * @copyright Copyright (c) 2016, Julius Härtl (jus@bitgrid.net)
- * @copyright Copyright (c) 2016, Jos Poortvliet (jospoortvliet@gmail.com)
+ * @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
*
@@ -15,6 +20,21 @@
-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 */
@@ -38,22 +58,20 @@
#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;
- line-height: 2.5em;
background-color: #0082c9;
box-sizing: border-box;
+ justify-content: space-between;
}
/* LOGO and APP NAME -------------------------------------------------------- */
#nextcloud {
- position: absolute;
- top: 0;
- left: 0;
padding: 5px;
padding-bottom: 0;
height: 45px;
@@ -92,11 +110,9 @@
}
.header-appname-container {
display: inline-block;
- position: absolute;
- left: 70px;
- height: 27px;
- padding-top: 18px;
+ padding-top: 22px;
padding-right: 10px;
+ flex-shrink: 0;
}
/* show caret indicator next to logo to make clear it is tappable */
.icon-caret {
@@ -108,6 +124,21 @@
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 */
@@ -150,7 +181,7 @@
font-size: 16px;
font-weight: 300;
margin: 0;
- margin-top: -24px;
+ margin-top: -27px;
padding: 7px 0 7px 5px;
vertical-align: middle;
}
@@ -178,21 +209,8 @@
border-top-right-radius: 0;
display: none;
box-sizing: border-box;
- /*overflow-y: auto;
- overflow-x: hidden;*/
z-index: 2000;
&: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, 0.97);
- border-width: 10px;
- margin-left: -10px;
left: 47%;
}
* {
@@ -293,20 +311,8 @@
/* 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;
-}
-
#settings {
- float: right;
+ display: inline-block;
color: #ddd;
cursor: pointer;
.icon-loading-small-dark {
@@ -315,11 +321,13 @@
margin-right: 6px;
background-size: 16px 16px;
}
+ flex: 0 0 auto;
}
/* User menu on the right */
#expand {
- display: block;
+ display: flex;
+ align-items: center;
padding: 7px 30px 6px 10px;
cursor: pointer;
* {
@@ -345,8 +353,6 @@
/* Profile picture in header */
.avatardiv {
- float: left;
- display: inline-block;
margin-right: 8px;
cursor: pointer;
height: 32px;
@@ -377,23 +383,12 @@
&:after {
/* position of dropdown arrow */
right: 15px;
- border-color: rgba(0, 0, 0, 0);
- border-bottom-color: rgba(255, 255, 255, 1);
- bottom: 100%;
- border: solid transparent;
- content: ' ';
- height: 0;
- width: 0;
- position: absolute;
- pointer-events: none;
- border-width: 10px;
- margin-left: -10px;
}
a {
display: block;
height: 40px;
color: #000;
- padding: 4px 12px 0;
+ padding: 10px 12px 0;
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
opacity: .5;
box-sizing: border-box;
diff --git a/core/css/icons.scss b/core/css/icons.scss
index b1f9cc6df67..28f6bd9bbb8 100644
--- a/core/css/icons.scss
+++ b/core/css/icons.scss
@@ -1,5 +1,12 @@
/**
- * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
+ * @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
*
@@ -131,6 +138,10 @@ img, object, video, button, textarea, input, select {
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');
}
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
index aa9c841f2b2..f7b9cdb723c 100644
--- a/core/css/inputs.scss
+++ b/core/css/inputs.scss
@@ -1,163 +1,203 @@
-/* INPUTS */
-
-/* specifically override browser styles */
-
+/**
+ * @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;
}
-input {
- &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'], &[type='date'] {
- 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;
- }
-}
-
-textarea, select, button, .button {
+/* Simple selector to allow easy overriding */
+select,
+button,
+input,
+textarea {
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='submit'], &[type='button'] {
- 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;
- }
+ min-height: 32px;
+ box-sizing: border-box;
}
-#quota, .pager li a {
- width: 130px;
+/* Default global values */
+select,
+button, .button,
+input:not([type='range']),
+textarea,
+#quota, .pager li a {
margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
+ padding: 7px 6px;
font-size: 13px;
background-color: #fff;
color: #333;
border: 1px solid #ddd;
outline: none;
border-radius: 3px;
-}
-
-input {
- &[type='hidden'] {
- height: 0;
- width: 0;
+ &: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;
+ }
}
- &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'] {
- background: #fff;
- color: #555;
- cursor: text;
- font-family: inherit;
- /* use default ownCloud font instead of default textarea monospace */
+ &: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;
+ }
}
}
-textarea {
- background: #fff;
- color: #555;
- cursor: text;
- font-family: inherit;
- /* use default ownCloud font instead of default textarea monospace */
-}
-
+/* Specific override */
input {
- &[type='text'], &[type='password'], &[type='search'], &[type='number'], &[type='email'], &[type='tel'], &[type='url'], &[type='time'] {
+ &: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;
- box-sizing: content-box;
- }
- &[type='text'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
- }
- &[type='password'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
}
- &[type='number'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
- }
- &[type='search'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
- }
- &[type='email'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
+ &[type='radio'],
+ &[type='checkbox'],
+ &[type='file'],
+ &[type='image'] {
+ height: auto;
+ width: auto;
}
- &[type='tel'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
+ /* 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='url'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
+ &[type='hidden'] {
+ height: 0;
+ width: 0;
}
&[type='time'] {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
+ 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 {
- &:hover, &:focus, &:active {
- color: #333;
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
+ 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='checkbox'],
+ &[type='radio'] {
+ &.radio,
&.checkbox {
position: absolute;
left: -10000px;
@@ -165,126 +205,109 @@ input {
width: 1px;
height: 1px;
overflow: hidden;
+ + label {
+ user-select: none;
+ }
+ &:disabled + label,
+ &:disabled + label:before {
+ cursor: default;
+ }
+ label:before {
content: '';
display: inline-block;
- height: 20px;
- width: 20px;
+ height: 12px;
+ width: 12px;
vertical-align: middle;
- background: url('../img/actions/checkbox.svg') left top no-repeat;
- }
- &:disabled + label:before {
- opacity: .6;
+ border-radius: 50%;
+ margin: 3px;
+ margin-top: 1px;
+ border: 1px solid #888;
}
- &.u-left + label:before {
- float: left;
+ &:not(:disabled):not(:checked) + label:hover:before,
+ &:focus + label:before {
+ border-color: #0082c9;
}
- &.u-hidden + label:before {
- display: none;
- }
- &:checked + label:before {
- background-image: url('../img/actions/checkbox-checked.svg');
- }
- &:indeterminate + label:before {
- background-image: url('../img/actions/checkbox-mixed.svg');
+ &: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-image: url('../img/actions/checkbox-disabled.svg');
+ background-color: #ccc !important; /* override other status */
}
&:checked:disabled + label:before {
- background-image: url('../img/actions/checkbox-checked-disabled.svg');
- }
- &:indeterminate:disabled + label:before {
- background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+ box-shadow: inset 0px 0px 0px 2px #fff;
+ border-color: #aaa;
+ background-color: #bbb;
}
}
- &.checkbox--white {
+ &.checkbox {
+ label:before {
- background-image: url('../img/actions/checkbox-white.svg');
+ border-radius: 1px;
+ height: 10px;
+ width: 10px;
+ box-shadow: none !important;
+ background-position: center;
}
&:checked + label:before {
- background-image: url('../img/actions/checkbox-checked-white.svg');
+ background-image: url('../img/actions/checkbox-mark.svg');
}
&:indeterminate + label:before {
- background-image: url('../img/actions/checkbox-mixed-white.svg');
- }
- &:disabled + label:before {
- background-image: url('../img/actions/checkbox-disabled-white.svg');
- }
- &:checked:disabled + label:before {
- background-image: url('../img/actions/checkbox-checked-disabled.svg');
+ background-image: url('../img/actions/checkbox-mixed.svg');
}
&:indeterminate:disabled + label:before {
- background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+ border-color: #888;
}
}
- &.checkbox:hover + label:before, &:focus + label:before {
- color: #111 !important;
- }
- }
- &[type='radio'] {
- &.radio {
- position: absolute;
- left: -10000px;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
+ &.radio--white,
+ &.checkbox--white {
+ label:before {
- content: '';
- display: inline-block;
- height: 20px;
- width: 20px;
- vertical-align: middle;
- background: url('../img/actions/radio.svg') left top no-repeat;
+ border-color: #aaa;
}
- &:checked + label:before {
- background-image: url('../img/actions/radio-checked.svg');
+ &: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-image: url('../img/actions/radio-disabled.svg');
+ background-color: #666 !important; /* override other status */
+ border-color: #999 !important; /* override other status */
}
&:checked:disabled + label:before {
- background-image: url('../img/actions/radio-checked-disabled.svg');
+ box-shadow: inset 0px 0px 0px 2px #000;
+ border-color: #666;
+ background-color: #222;
}
}
- &.radio--white {
- + label:before {
- background-image: url('../img/actions/radio-white.svg');
- }
+ &.checkbox--white {
&:checked + label:before {
- background-image: url('../img/actions/radio-checked-white.svg');
+ background-image: url('../img/actions/checkbox-mark-white.svg');
}
- &:disabled + label:before {
- background-image: url('../img/actions/radio-disabled.svg');
+ &:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed-white.svg');
}
- &:checked:disabled + label:before {
- background-image: url('../img/actions/radio-checked-disabled.svg');
+ &:checked:disabled + label:after {
+ border-color: #aaa;
+ }
+ &:indeterminate:disabled + label:after {
+ background-color: #aaa;
}
}
}
- &[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.9);
- outline: 0;
- padding-right: 24px !important;
- &:hover {
- background-color: #fefefe;
- }
-}
-
-/* select2 adjustments */
-
-#select2-drop {
+/* Select2 overriding. Merged to core with vendor stylesheet */
+.select2-drop {
margin-top: -2px;
&.select2-drop-active {
border-color: #ddd;
@@ -297,15 +320,7 @@ select {
cursor: pointer;
}
}
-}
-
-.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;
@@ -322,7 +337,9 @@ select {
cursor: pointer;
}
}
- .select2-result, .select2-no-results, .select2-searching {
+ .select2-result,
+ .select2-no-results,
+ .select2-searching {
position: relative;
display: list-item;
padding: 12px;
@@ -341,9 +358,16 @@ select {
}
}
}
-
+.select2-chosen,
+#select2-drop {
+ .avatar,
+ .avatar img {
+ cursor: pointer;
+ }
+}
.select2-container-multi {
- .select2-choices, &.select2-container-active .select2-choices {
+ .select2-choices,
+ &.select2-container-active .select2-choices {
box-shadow: none;
white-space: nowrap;
text-overflow: ellipsis;
@@ -355,83 +379,28 @@ select {
margin: 0;
padding: 2px 0;
min-height: auto;
- }
-}
-
-.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-active .select2-choices .select2-search-choice {
- line-height: 20px;
- padding-left: 5px;
- background-image: none;
- background-color: #f8f8f8;
- border-color: #f8f8f8;
- }
-}
-
-.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, &:hover {
- background-color: #f0f0f0;
- border-color: #f0f0f0;
+ .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-container-active .select2-choices .select2-search-choice {
- &.select2-search-choice-focus, &:hover {
- background-color: #f0f0f0;
- border-color: #f0f0f0;
+ .select2-search-field input {
+ line-height: 20px;
}
}
}
-
-.select2-container .select2-choice .select2-search-choice {
- &.select2-search-choice-focus, &:hover {
- background-color: #f0f0f0;
- border-color: #f0f0f0;
- }
-}
-
-.select2-container-multi {
- .select2-choices .select2-search-choice .select2-search-choice-close, &.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close {
- display: none;
- }
-}
-
-.select2-container .select2-choice .select2-search-choice .select2-search-choice-close {
- display: none;
-}
-
-.select2-container-multi {
- .select2-choices .select2-search-field input, &.select2-container-active .select2-choices .select2-search-field input {
- line-height: 20px;
- }
-}
-
.select2-container {
- .select2-choice .select2-search-field input {
- line-height: 20px;
- }
margin: 3px 3px 3px 0;
&.select2-container-multi .select2-choices {
display: flex;
@@ -441,7 +410,33 @@ select {
}
}
.select2-choice {
- padding-left: 38px;
+ 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;
@@ -451,14 +446,19 @@ select {
opacity: .5;
}
}
- &:hover .select2-arrow b, &:focus .select2-arrow b, &:active .select2-arrow b {
+ &:hover .select2-arrow b,
+ &:focus .select2-arrow b,
+ &:active .select2-arrow b {
opacity: .7;
}
+ .select2-search-field input {
+ line-height: 20px;
+ }
}
}
-/* jQuery UI fixes */
-
+/* Select menus - TODO: move to jquery-ui-fixes.css
+----------------------------------*/
.ui-menu {
padding: 0;
.ui-menu-item a {
@@ -485,298 +485,28 @@ select {
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'], &[type='button'] {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240, 240, 240, 0.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240, 240, 240, 0.9);
- cursor: pointer;
- }
-}
-
-button, .button, #quota, select, .pager li a {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240, 240, 240, 0.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240, 240, 240, 0.9);
- cursor: pointer;
-}
-
-select, .button.multiselect {
- font-weight: 400;
-}
-
-input {
- &[type='submit'] {
- &:hover, &:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
- }
- &[type='button'] {
- &:hover, &:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
- }
-}
-
-button {
- &:hover, &:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
-}
-
-.button {
- &:hover, &:focus, a:focus {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
-}
-
-select {
- &:hover, &:focus, &:active {
- background-color: rgba(255, 255, 255, 0.95);
- color: #111;
- }
-}
-
-input {
- &[type='submit'] img, &[type='button'] img {
- cursor: pointer;
- }
-}
-
-button img, .button img {
- cursor: pointer;
-}
-
-#header .button {
- border: none;
- box-shadow: none;
-}
-
-/* disabled input fields and buttons */
-
-input:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-button:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-.button:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-a.disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- &:hover, &:focus {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
- }
-}
-
-textarea:disabled {
- background-color: rgba(230, 230, 230, 0.9);
- color: #999;
- cursor: default;
-}
-
-input:disabled {
- + label, &:hover + label, &:focus + label {
- color: #999 !important;
- cursor: default;
- }
-}
-
-/* Primary action button, use sparingly */
-
-.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-input {
- &[type='submit'].primary, &[type='button'].primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
- }
-}
-
-button.primary, .button.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-.primary:hover {
- background-color: #0092d9;
- color: #fff;
-}
-
-input {
- &[type='submit'].primary:hover, &[type='button'].primary:hover {
- background-color: #0092d9;
- color: #fff;
- }
-}
-
-button.primary:hover, .button.primary:hover, .primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-input {
- &[type='submit'].primary:focus, &[type='button'].primary:focus {
- background-color: #0092d9;
- color: #fff;
- }
-}
-
-button.primary:focus, .button.primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-.primary:active {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:active, &[type='button'].primary:active {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:active, .button.primary:active, .primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:disabled, &[type='button'].primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:disabled, .button.primary:disabled, .primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:disabled:hover, &[type='button'].primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:disabled:hover, .button.primary:disabled:hover, .primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input {
- &[type='submit'].primary:disabled:focus, &[type='button'].primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
- }
-}
-
-button.primary:disabled:focus, .button.primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
+/* Animation */
@keyframes shake {
- 0% {
- transform: translate(-5px, 0);
+ 10%,
+ 90% {
+ transform: translate(-1px);
}
-
- 20% {
- transform: translate(5px, 0);
+ 20%,
+ 80% {
+ transform: translate(2px);
}
-
- 40% {
- transform: translate(-5px, 0);
+ 30%,
+ 50%,
+ 70% {
+ transform: translate(-4px);
}
-
+ 40%,
60% {
- transform: translate(5px, 0);
- }
-
- 80% {
- transform: translate(-5px, 0);
- }
-
- 100% {
- transform: translate(5px, 0);
+ transform: translate(4px);
}
}
-
-
.shake {
animation-name: shake;
- animation-duration: .3s;
+ animation-duration: .7s;
animation-timing-function: ease-out;
}
diff --git a/core/css/installation.css b/core/css/installation.css
deleted file mode 100644
index 69c98f1ea22..00000000000
--- a/core/css/installation.css
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
-* Installation css file.
-* This file is used on the install page only when the database
-* isn't set, preventing scss files to be stored using the AppdataController.
-* It should contain every style needed to correctly display the installation template.
-*
-*/
-
-/* 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;
- cursor: pointer;
-}
-a * {
- cursor: pointer;
-}
-
-input {
- cursor: pointer;
-}
-input * {
- 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;
-}
-
-/* Global */
-#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;
- background-attachment: fixed;
- /* fix background gradient */
- height: 100%;
- /* fix sticky footer */
-}
-
-
-/* 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;
-}
-
-
-/* do not use italic typeface style, instead lighter color */
-em {
- font-style: normal;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
-}
-
-#header {
- padding-top: 100px;
-}
-
-p.info, form fieldset legend, #datadirContent label {
- text-align: center;
- color: #fff;
-}
-
-form fieldset .warning-info, form input[type='checkbox'] + label {
- text-align: center;
- color: #fff;
-}
-form .warning input[type='checkbox']:hover + label, form .warning input[type='checkbox']:focus + label, form .warning input[type='checkbox'] + label {
- color: #fff !important;
-}
-
-.infogroup {
- margin-bottom: 15px;
-}
-
-p#message img {
- vertical-align: middle;
- padding: 5px;
-}
-
-div.buttons {
- text-align: center;
-}
-
-p.info {
- width: 22em;
- margin: 0 auto;
- padding-top: 20px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-p.info a {
- font-weight: 600;
- padding: 13px;
- margin: -13px;
- color: #fff;
-}
-
-#body-login .warning, #body-login .update, #body-login .error {
- display: block;
- padding: 10px;
- background-color: rgba(0, 0, 0, 0.3);
- color: #fff;
- text-align: left;
- border-radius: 3px;
- cursor: default;
-}
-
-#body-login .warning {
- margin: 0 7px 5px 4px;
-}
-
-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 {
- width: 100%;
-}
-form fieldset.warning legend, form fieldset.update legend {
- top: 18px;
- position: relative;
-}
-form fieldset.warning legend + p, form fieldset.update legend + p {
- margin-top: 12px;
-}
-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;
-}
-form .errors {
- background: #fed7d7;
- border: 1px solid #f00;
- list-style-indent: inside;
- margin: 0 0 2em;
- padding: 1em;
-}
-form .success {
- background: #d7fed7;
- border: 1px solid #0f0;
- width: 35%;
- margin: 30px auto;
- padding: 1em;
- text-align: center;
-}
-form #showAdvanced > img {
- padding: 4px;
- box-sizing: border-box;
-}
-form p.info a, form #showAdvanced {
- color: #fff;
-}
-form #remember_login:hover + label, form #remember_login:focus + label {
- opacity: .6;
-}
-form #forgot-password:hover, form #forgot-password:focus {
- opacity: .6;
-}
-form p.info a:hover, form p.info a:focus {
- opacity: .6;
-}
-form footer .info {
- white-space: nowrap;
-}
-
-#datadirContent label {
- display: block;
- width: 100%;
- margin: 0;
-}
-
-form #datadirField legend {
- margin-bottom: 15px;
-}
-
-#showAdvanced {
- padding: 13px;
- /* increase clickable area of Advanced dropdown */
-}
-#showAdvanced img {
- vertical-align: bottom;
- /* adjust position of Advanced dropdown arrow */
- margin-left: -4px;
-}
-
-.icon-info-white {
- padding: 10px;
-}
-
-.float-spinner {
- height: 32px;
- display: none;
-}
-
-.strengthify-wrapper {
- display: inline-block;
- position: relative;
- left: 15px;
- top: -23px;
- width: 250px;
-}
-
-.tipsy-inner {
- font-weight: bold;
- color: #ccc;
-}
-
-
-/* LOGO */
-#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;
-}
-
-/* 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;
-}
-
-/* LOADER */
-#body-login .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;
-}
-
-.icon-info-white {
- background-image: url(../img/actions/info-white.svg?v=1);
-}
-
-@-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);
- }
-}
-/*!
- * 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;
- z-index: 1070;
- 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;
- 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;
-}
-
-/* SCROLLING */
-::-webkit-scrollbar {
- width: 5px;
-}
-
-::-webkit-scrollbar-track-piece {
- background-color: transparent;
-}
-
-::-webkit-scrollbar-thumb {
- background: #ddd;
- border-radius: 3px;
-}
-.error-wide {
- width: 700px;
- margin-left: -200px !important;
-}
-
-/* Config write issue */
-#body-login .v-align {
- width: inherit;
-}
-#body-login .wrapper {
- min-height: 100%;
- margin: 0 auto -70px;
- width: 300px;
-}
-.warning legend, .warning a, .error a {
- color: #fff !important;
- font-weight: 600 !important;
-}
-#body-login ul.error-wide {
- margin-top: 35px;
-}
-
-/* Update info */
-#body-login .update {
- width: inherit;
- text-align: center;
-}
-#body-login .update h2 {
- margin: 0 0 20px;
-}
-
-#body-login .update a {
- color: #fff;
- border-bottom: 1px solid #aaa;
-}
-
-/* INPUTS */
-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;
-}
-#body-login input {
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
-}
-input[type="submit"], input[type="button"], button, .button {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240, 240, 240, 0.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240, 240, 240, 0.9);
- cursor: pointer;
-}
-
-input {
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
-}
-input[type='text'], input[type='password'], input[type='email'] {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
- border: none;
- font-weight: 300;
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
- -webkit-appearance: textfield;
- -moz-appearance: textfield;
- box-sizing: content-box;
- background: #fff;
- color: #555;
- cursor: text;
- font-family: inherit;
- outline: none;
- border-radius: 3px;
- width: 249px;
-}
-input.login {
- width: 269px;
- background-position: right 16px center;
-}
-input[type='submit'] {
- padding: 10px 20px;
- /* larger log in and installation buttons */
-}
-
-/* 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, 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, 0.1) inset !important;
-}
-
-.groupbottom input[type=submit] {
- box-shadow: none !important;
-}
-
-label.infield {
- display: none;
-}
-
-/* Primary action button, use sparingly */
-.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-input[type='submit'].primary, input[type='button'].primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-button.primary, .button.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-
-.primary:hover {
- background-color: #0092d9;
- color: #fff;
-}
-
-input[type='submit'].primary:hover, input[type='button'].primary:hover {
- background-color: #0092d9;
- color: #fff;
-}
-
-button.primary:hover, .button.primary:hover, .primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-input[type='submit'].primary:focus, input[type='button'].primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-button.primary:focus, .button.primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-
-.primary:active {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:active, input[type='button'].primary:active {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:active, .button.primary:active, .primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:disabled, input[type='button'].primary:disabled {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:disabled, .button.primary:disabled, .primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:disabled:hover, input[type='button'].primary:disabled:hover {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:disabled:hover, .button.primary:disabled:hover, .primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-input[type='submit'].primary:disabled:focus, input[type='button'].primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-button.primary:disabled:focus, .button.primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-input, textarea, select, button {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
-}
diff --git a/core/css/jquery-ui-fixes.scss b/core/css/jquery-ui-fixes.css
index 4cf4f4cdd4a..e8cf2b769b8 100644
--- a/core/css/jquery-ui-fixes.scss
+++ b/core/css/jquery-ui-fixes.css
@@ -1,124 +1,134 @@
/* Component containers
----------------------------------*/
-
.ui-widget {
- font-family: 'Lucida Grande', Arial, Verdana, sans-serif;
+ font-family: "Lucida Grande", Arial, Verdana, sans-serif;
font-size: 1em;
- button {
- font-family: 'Lucida Grande', Arial, Verdana, sans-serif;
- }
}
-
+.ui-widget button {
+ font-family: "Lucida Grande", Arial, Verdana, sans-serif;
+}
.ui-widget-content {
border: 1px solid #dddddd;
background: #eeeeee url('images/ui-bg_highlight-soft_100_eeeeee_1x100.png') 50% top repeat-x;
color: #333333;
- a {
- color: #333333;
- }
}
-
+.ui-widget-content a {
+ color: #333333;
+}
.ui-widget-header {
border: 1px solid #0082c9;
background: #0082c9;
color: #ffffff;
- a {
- color: #ffffff;
- }
+}
+.ui-widget-header a {
+ color: #ffffff;
}
/* Interaction states
----------------------------------*/
-
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
border: 1px solid #ddd;
background: #f8f8f8 url('images/ui-bg_glass_100_f8f8f8_1x400.png') 50% 50% repeat-x;
font-weight: bold;
color: #555;
}
-
-.ui-state-default a {
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
color: #555;
- &:link, &:visited {
- color: #555;
- }
}
-
-.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 {
+.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: 1px solid #ddd;
background: #ffffff url('images/ui-bg_flat_100_ffffff_40x100.png') 50% 50% repeat-x;
font-weight: bold;
color: #333;
}
-
-.ui-state-hover a {
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
color: #333;
- &:hover, &:link, &:visited {
- color: #333;
- }
}
-
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
border: 1px solid #0082c9;
background: #f8f8f8 url('images/ui-bg_glass_100_f8f8f8_1x400.png') 50% 50% repeat-x;
font-weight: bold;
color: #0082c9;
}
-
-.ui-state-active a {
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
color: #0082c9;
- &:link, &:visited {
- color: #0082c9;
- }
}
/* Interaction Cues
----------------------------------*/
-
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
border: 1px solid #ddd;
background: #f8f8f8 url('images/ui-bg_highlight-hard_100_f8f8f8_1x100.png') 50% top repeat-x;
color: #555;
}
-
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a {
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
color: #555;
}
-
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
border: 1px solid #cd0a0a;
background: #b81900 url('images/ui-bg_diagonals-thick_18_b81900_40x40.png') 50% 50% repeat;
color: #ffffff;
}
-
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a, .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text {
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
color: #ffffff;
}
/* Icons
----------------------------------*/
-
-.ui-state-default .ui-icon, .ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-state-active .ui-icon {
+.ui-state-default .ui-icon {
+ background-image: url('images/ui-icons_1d2d44_256x240.png');
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url('images/ui-icons_1d2d44_256x240.png');
+}
+.ui-state-active .ui-icon {
background-image: url('images/ui-icons_1d2d44_256x240.png');
}
-
.ui-state-highlight .ui-icon {
background-image: url('images/ui-icons_ffffff_256x240.png');
}
-
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
background-image: url('images/ui-icons_ffd27a_256x240.png');
}
/* Misc visuals
----------------------------------*/
/* Overlays */
-
.ui-widget-overlay {
background: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;
opacity: .5;
}
-
.ui-widget-shadow {
margin: -5px 0 0 -5px;
padding: 5px;
diff --git a/core/css/multiselect.scss b/core/css/multiselect.scss
index 024e5818a40..4b5d9cb6cf3 100644
--- a/core/css/multiselect.scss
+++ b/core/css/multiselect.scss
@@ -1,5 +1,16 @@
/**
- * @copyright Copyright (c) 2011, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @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
*
diff --git a/core/css/share.scss b/core/css/share.scss
index 7ce365a1454..8852ad2748e 100644
--- a/core/css/share.scss
+++ b/core/css/share.scss
@@ -1,6 +1,14 @@
/**
- * @copyright Copyright (c) 2011, Jan-Christoph Borchardt <hey@jancborchardt.net>
- * @copyright Copyright (c) 2017, John Molakvoæ (skjnldsv@protonmail.com)
+ * @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
*
@@ -73,7 +81,7 @@
#shareWithList {
list-style-type: none;
padding: 8px;
- li {
+ > li {
padding-top: 10px;
padding-bottom: 10px;
font-weight: bold;
@@ -85,8 +93,8 @@
flex-shrink: 0;
position: relative;
.popovermenu {
- right: -6px;
- top: 40px;
+ right: -11px;
+ top: 35px;
padding: 3px 6px;
}
}
@@ -112,9 +120,6 @@
vertical-align: middle;
flex-grow: 5;
}
- li label {
- margin-right: 8px;
- }
}
a {
diff --git a/core/css/styles.scss b/core/css/styles.scss
index affaec14342..d958a01655b 100644
--- a/core/css/styles.scss
+++ b/core/css/styles.scss
@@ -1,6 +1,17 @@
-/* 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. */
+/**
+ * @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;
@@ -159,30 +170,49 @@ body {
/* Searchbox */
-.searchbox input[type='search'] {
+.searchbox {
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;
- &:focus, &:active, &:valid {
+ 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;
- width: 155px;
- max-width: 50%;
- cursor: text;
- background-color: #0082c9;
- border: 1px solid rgba(255, 255, 255, 0.5);
+ 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;
+ }
}
}
@@ -567,19 +597,19 @@ label.infield {
}
#pass2, input[name='personal-password-clone'] {
- padding: .6em 2.5em .4em .4em;
- width: 8em;
+ padding-right: 30px;
}
+.personal-show-container {
+ position: relative;
+ display: inline-block;
+ margin-right: 6px;
+}
#personal-show + label {
- height: 14px;
- margin-top: -25px;
- left: 295px;
display: block;
-}
-
-#passwordbutton {
- margin-left: .5em;
+ right: 0;
+ margin-top: -36px;
+ padding: 6px 4px;
}
/* Database selector */
@@ -724,9 +754,9 @@ label.infield {
#body-login input {
font-size: 20px;
margin: 5px;
- padding: 11px 10px 9px;
+ padding: 10px 10px 8px;
&[type='text'], &[type='password'] {
- width: 249px;
+ width: calc(100% - 10px); /* 5px margin */
}
&.login {
width: 269px;
diff --git a/core/css/systemtags.scss b/core/css/systemtags.scss
index 1ae26710108..b32f33f36e5 100644
--- a/core/css/systemtags.scss
+++ b/core/css/systemtags.scss
@@ -1,5 +1,10 @@
/**
- * @copyright Copyright (c) 2017
+ * @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
*
diff --git a/core/css/tooltip.scss b/core/css/tooltip.scss
index 96073962884..263dad0b0c9 100644
--- a/core/css/tooltip.scss
+++ b/core/css/tooltip.scss
@@ -1,4 +1,10 @@
-/*!
+/**
+ * @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)
diff --git a/core/css/update.css b/core/css/update.css
deleted file mode 100644
index 0ae72fd04a0..00000000000
--- a/core/css/update.css
+++ /dev/null
@@ -1,449 +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;
-}
-
-/**
- * Below this is a copy of the original CSS because we moved to on-the-fly
- * generated CSS from SCSS which doesn't work during update
- */
-
-/** HEADER **/
-
-/* prevent ugly selection effect on accidental selection */
-#header {
- -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 ------------------------------------------------------------------ */
-
-#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;
-}
-
-/** STYLES **/
-
-/* 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;
-}
-
-#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;
-}
-
-/* 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 {
- text-align: center;
- color: #fff;
-}
-
-#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 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;
- color: #fff;
-}
-
-#body-login .success {
- background:#d7fed7;
- border:1px solid #0f0;
- width: 35%;
- margin: 30px auto;
- padding:1em;
- text-align: center;
-}
-
-#body-login p.info a:hover,
-#body-login p.info a:focus {
- opacity: .6;
-}
-
-/* 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;
-}
-
-.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;
-}
-
-/* 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;
-}
-
-/* Log in and install button */
-#body-login input {
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
-}
-#body-login input.login {
- width: 269px;
- background-position: right 16px center;
-}
-
-/* Sticky footer */
-#body-login .wrapper {
- min-height: 100%;
- margin: 0 auto -70px;
- width: 300px;
-}
-#body-login footer, #body-login .push {
- height: 70px;
-}
-
-code { font-family:"Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; }
-
-/* for IE10 */
-@-ms-viewport {
- width: device-width;
-}
-
-/** APPS **/
-
-/* buttons */
-button.loading {
- background-image: url('../img/loading.gif');
- background-position: right 10px center; background-repeat: no-repeat;
- background-size: 16px;
- padding-right: 30px;
-}
-
-/* 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;
-}
-
-/* do not use italic typeface style, instead lighter color */
-em {
- font-style: normal;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
-}
-
-/** ICONS **/
-
-[class^="icon-"], [class*=" icon-"] {
- background-repeat: no-repeat;
- background-position: center;
- min-width: 16px;
- min-height: 16px;
-}
-
-/* general assets */
-
-.icon-loading-dark {
- position: relative;
-}
-.icon-loading-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;
-}
-.icon-loading-dark:after {
- border: 2px solid rgba(150, 150, 150, .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-top-color: #bbb;
-}
-
-/* Css replaced elements don't have ::after nor ::before */
-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");
-}
-
-@-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);
- }
-}
-
-.icon-32 {
- background-size: 32px !important;
-}
-
-.icon-checkmark-white {
- background-image: url('../img/actions/checkmark-white.svg?v=1');
-}
-
-.icon-error-white {
- background-image: url('../img/actions/error-white.svg?v=1');
-}
-
-/* INPUTS */
-
-/* specifically override browser styles */
-input {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
-}
-
-input[type="button"] {
- 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;
-}
-
-/* correctly align images inside of buttons */
-input img {
- vertical-align: text-bottom;
-}
-
-/* BUTTONS */
-input[type="button"] {
- 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="button"]:hover, input[type="button"]:focus {
- background-color: rgba(255, 255, 255, .95);
- color: #111;
-}
-input[type="button"] img {
- border: none;
- box-shadow: 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/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/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
index 0fe0747dd59..4647dedd722 100644
--- a/core/js/sharedialogshareelistview.js
+++ b/core/js/sharedialogshareelistview.js
@@ -59,7 +59,7 @@
'<ul>' +
'{{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<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>' +
@@ -68,7 +68,7 @@
'{{#if isFolder}}' +
'{{#if createPermissionPossible}}{{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<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>' +
@@ -76,7 +76,7 @@
'{{/unless}}{{/if}}' +
'{{#if updatePermissionPossible}}{{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<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>' +
@@ -84,7 +84,7 @@
'{{/unless}}{{/if}}' +
'{{#if deletePermissionPossible}}{{#unless isMailShare}}' +
'<li>' +
- '<span class="shareOption">' +
+ '<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>' +
diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js
index 9b10f067afc..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}
*/
@@ -679,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) {
@@ -762,6 +777,7 @@
linkShare: linkShare,
permissions: permissions,
allowPublicUploadStatus: allowPublicUploadStatus,
+ allowPublicEditingStatus: allowPublicEditingStatus,
hideFileListStatus: hideFileListStatus
};
},
diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js
index cb41f4e1437..a23ead44e93 100644
--- a/core/l10n/bg_BG.js
+++ b/core/l10n/bg_BG.js
@@ -121,6 +121,7 @@ OC.L10N.register(
"Link" : "Връзка",
"Password protect" : "Защитено с парола",
"Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Allow editing" : "Позволяване на редактиране",
"File drop (upload only)" : "Пускане на файл (качване само)",
"Email link to person" : "Имейл връзка към човек",
"Send" : "Изпращане",
@@ -238,8 +239,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" : "Отписване",
"This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:",
"Confirm your password" : "Потвърдете паролата си",
"Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!",
@@ -340,7 +341,6 @@ OC.L10N.register(
"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" : "Имейла е изпратен",
diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json
index 91ea33e4c87..7146057c1f0 100644
--- a/core/l10n/bg_BG.json
+++ b/core/l10n/bg_BG.json
@@ -119,6 +119,7 @@
"Link" : "Връзка",
"Password protect" : "Защитено с парола",
"Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Allow editing" : "Позволяване на редактиране",
"File drop (upload only)" : "Пускане на файл (качване само)",
"Email link to person" : "Имейл връзка към човек",
"Send" : "Изпращане",
@@ -236,8 +237,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" : "Отписване",
"This action requires you to confirm your password:" : "Това действие изисква да потвърдите паролата си:",
"Confirm your password" : "Потвърдете паролата си",
"Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!",
@@ -338,7 +339,6 @@
"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" : "Имейла е изпратен",
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
new file mode 100644
index 00000000000..d907297a45d
--- /dev/null
+++ b/core/l10n/ca.js
@@ -0,0 +1,288 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Seleccioneu un fitxer.",
+ "File is too big" : "El fitxer és massa gran",
+ "The selected file is not an image." : "El fitxer seleccionat no és una imatge",
+ "The selected file cannot be read." : "El fitxer seleccionat no es pot llegir.",
+ "Invalid file provided" : "El fitxer proporcionat no és vàlid",
+ "No image or file provided" : "No s'han proporcionat imatges o fitxers",
+ "Unknown filetype" : "Tipus de fitxer desconegut",
+ "Invalid image" : "Imatge no vàlida",
+ "An error occurred. Please contact your admin." : "Hi ha hagut un error. Contacteu amb l'administrador.",
+ "No temporary profile picture available, try again" : "No hi ha imatge temporal de perfil disponible, torneu a intentar-ho",
+ "No crop data provided" : "No heu proporcionat dades del retall",
+ "No valid crop data provided" : "Les dades del retall proporcionades no són vàlides",
+ "Crop is not square" : "El retall no és quadrat",
+ "Couldn't reset password because the token is invalid" : "No es pot restablir la contrasenya perquè el testimoni no és vàlid",
+ "Couldn't reset password because the token is expired" : "No es pot restablir la contrasenya perquè el testimoni ha vençut",
+ "Couldn't send reset email. Please make sure your username is correct." : "No s'ha pogut enviar el correu de restabliment. Assegureu-vos que el vostre nom d'usuari és correcte.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar correu de restabliment. No hi ha correu per aquest compte. Contacteu amb l'administrador.",
+ "%s password reset" : "restableix la contrasenya %s",
+ "Couldn't send reset email. Please contact your administrator." : "No s'ha pogut restablir el correu. Contacteu amb l'administrador.",
+ "Preparing update" : "Preparant l'actualització",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Advertiment de reparació:",
+ "Repair error: " : "Error de reparació:",
+ "Turned on maintenance mode" : "Activat el mode de manteniment",
+ "Turned off maintenance mode" : "Desactivat el mode de manteniment",
+ "Maintenance mode is kept active" : "El mode de manteniment es manté activat",
+ "Updated database" : "Actualitzada la base de dades",
+ "Checked database schema update" : "S'ha comprobat l'actualització de l'esquema de la base de dades",
+ "Checked database schema update for apps" : "S'ha comprobat l'actualització de l'esquema de la base de dades per les apps",
+ "Updated \"%s\" to %s" : "Actualitzat \"%s\" a %s",
+ "Following apps have been disabled: %s" : "Les aplicacions següents s'han deshabilitat: %s",
+ "Already up to date" : "Ja actualitzat",
+ "Settings" : "Configuració",
+ "Saving..." : "Desant...",
+ "Dismiss" : "Rebutja",
+ "Authentication required" : "Es requereix autenticació",
+ "Password" : "Contrasenya",
+ "Cancel" : "Cancel·la",
+ "Confirm" : "Confirma",
+ "seconds ago" : "segons enrere",
+ "Logging in …" : "Accedint a...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "L'enllaç per reiniciar la vostra contrasenya s'ha enviat al vostre correu. Si no el rebeu en un temps raonable comproveu les carpetes de spam. <br>Si no és allà, pregunteu a l'administrador local.",
+ "I know what I'm doing" : "Sé el que faig",
+ "Password can not be changed. Please contact your administrator." : "La contrasenya no es pot canviar. Contacteu amb l'administrador.",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hi ha arxius aquí",
+ "Choose" : "Escull",
+ "Error loading file picker template: {error}" : "Error en carregar la plantilla de càrrega de fitxers: {error}",
+ "Ok" : "D'acord",
+ "Error loading message template: {error}" : "Error en carregar la plantilla de missatge: {error}",
+ "read-only" : "Només de lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicte de fitxer","{count} conflictes de fitxer"],
+ "One file conflict" : "Un fitxer en conflicte",
+ "New Files" : "Fitxers nous",
+ "Already existing files" : "Fitxers que ja existeixen",
+ "Which files do you want to keep?" : "Quin fitxer voleu conservar?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si seleccioneu les dues versions, el fitxer copiat tindrà un número afegit al seu nom.",
+ "Continue" : "Continua",
+ "(all selected)" : "(selecciona-ho tot)",
+ "({count} selected)" : "({count} seleccionats)",
+ "Error loading file exists template" : "Error en carregar la plantilla de fitxer existent",
+ "Pending" : "Pendent",
+ "Very weak password" : "Contrasenya massa feble",
+ "Weak password" : "Contrasenya feble",
+ "So-so password" : "Contrasenya passable",
+ "Good password" : "Contrasenya bona",
+ "Strong password" : "Contrasenya forta",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.",
+ "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
+ "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>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>",
+ "Shared" : "Compartit",
+ "Shared with {recipients}" : "Compartit amb {recipients}",
+ "Error" : "Error",
+ "Error while sharing" : "Error en compartir",
+ "Error while unsharing" : "Error en deixar de compartir",
+ "Error setting expiration date" : "Error en establir la data de venciment",
+ "The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo",
+ "Set expiration date" : "Estableix la data de venciment",
+ "Expiration" : "Expiració",
+ "Expiration date" : "Data de venciment",
+ "Choose a password for the public link" : "Escolliu una contrasenya per l'enllaç públic",
+ "Copied!" : "Copiat!",
+ "Copy" : "Copia",
+ "Not supported!" : "No soportat!",
+ "Press ⌘-C to copy." : "Prem ⌘-C per copiar.",
+ "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.",
+ "Resharing is not allowed" : "No es permet compartir de nou",
+ "Share link" : "Enllaç de compartició",
+ "Link" : "Enllaç",
+ "Password protect" : "Protegir amb contrasenya",
+ "Allow editing" : "Permetre edició",
+ "Email link to person" : "Enllaç per correu electrónic amb la persona",
+ "Send" : "Envia",
+ "Shared with you and the group {group} by {owner}" : "Compartit amb vos i amb el grup {group} per {owner}",
+ "Shared with you by {owner}" : "Compartit amb vos per {owner}",
+ "group" : "grup",
+ "remote" : "remot",
+ "email" : "email",
+ "Unshare" : "Deixa de compartir",
+ "can edit" : "pot editar",
+ "can create" : "pot crear",
+ "can change" : "pot canviar",
+ "can delete" : "Pot esborrar",
+ "access control" : "control d'accés",
+ "No users found for {search}" : "No s'han trobat usuaris per {search}",
+ "An error occurred. Please try again" : "S'ha produït un error. Si us plau, torni a intentar-ho.",
+ "Share" : "Comparteix",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Esborra",
+ "Rename" : "Reanomena",
+ "Collaborative tags" : "Etiquetes col·laboratives",
+ "No tags found" : "No s'han trobat etiquetes",
+ "The object type is not specified." : "No s'ha especificat el tipus d'objecte.",
+ "Enter new" : "Escriu nou",
+ "Add" : "Afegeix",
+ "Edit tags" : "Edita etiquetes",
+ "Error loading dialog template: {error}" : "Error en carregar la plantilla de diàleg: {error}",
+ "No tags selected for deletion." : "No heu seleccionat les etiquetes a eliminar.",
+ "unknown text" : "text desconegut",
+ "Hello world!" : "Hola món!",
+ "sunny" : "asolellat",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el temps és {weather}",
+ "Hello {name}" : "Hola {name}",
+ "new" : "Nou",
+ "_download %n file_::_download %n files_" : ["descarregar l'arxiu %n","descarregar arxius %n "],
+ "Update to {version}" : "Actualitza a {version}",
+ "An error occurred." : "S'ha produït un error",
+ "Please reload the page." : "Carregueu la pàgina de nou.",
+ "Continue to Nextcloud" : "Continua a Nextcloud",
+ "Searching other places" : "Buscant altres ubicacions",
+ "Personal" : "Personal",
+ "Users" : "Usuaris",
+ "Apps" : "Aplicacions",
+ "Admin" : "Administració",
+ "Help" : "Ajuda",
+ "Access forbidden" : "Accés prohibit",
+ "File not found" : "No s'ha trobat l'arxiu",
+ "The specified document has not been found on the server." : "El document especificat no s'ha trobat al servidor.",
+ "You can click here to return to %s." : "Pots clicar aquí per tornar a %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n",
+ "The share will expire on %s." : "La compartició venç el %s.",
+ "Cheers!" : "Salut!",
+ "Internal Server Error" : "Error Intern del Servidor",
+ "The server encountered an internal error and was unable to complete your request." : "El servidor ha trobat un error intern i no pot finalitzar la teva petició.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Per favor, posi's en contacte amb l'administrador del servidor si aquest error torna a aparèixer diverses vegades, per favor inclogui els detalls tècnics de baix en el seu informe.",
+ "More details can be found in the server log." : "Pots trobar més detalls al llistat del servidor.",
+ "Technical details" : "Detalls tècnics",
+ "Remote Address: %s" : "Adreça remota: %s",
+ "Request ID: %s" : "Sol·licitud ID: %s ",
+ "Type: %s" : "Tipus: %s",
+ "Code: %s" : "Codi: %s",
+ "Message: %s" : "Missatge: %s",
+ "File: %s" : "Fitxer: %s",
+ "Line: %s" : "Línia: %s",
+ "Trace" : "Traça",
+ "Security warning" : "Advertiment de seguretat",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.",
+ "Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>",
+ "Username" : "Nom d'usuari",
+ "Storage & database" : "Emmagatzematge i base de dades",
+ "Data folder" : "Carpeta de dades",
+ "Configure the database" : "Configura la base de dades",
+ "Only %s is available." : "Només hi ha disponible %s",
+ "Install and activate additional PHP modules to choose other database types." : "Instal·la i activa mòduls PHP addicionals per seleccionar altres tipus de bases de dades.",
+ "For more details check out the documentation." : "Per més detalls consulteu la documentació.",
+ "Database user" : "Usuari de la base de dades",
+ "Database password" : "Contrasenya de la base de dades",
+ "Database name" : "Nom de la base de dades",
+ "Database tablespace" : "Espai de taula de la base de dades",
+ "Database host" : "Ordinador central de la base de dades",
+ "Performance warning" : "Alerta de rendiment",
+ "SQLite will be used as database." : "SQLite s'utilitzarà com a base de dades.",
+ "For larger installations we recommend to choose a different database backend." : "Per a instal·lacions més grans es recomana triar una base de dades diferent.",
+ "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.",
+ "Finish setup" : "Acaba la configuració",
+ "Finishing …" : "Acabant...",
+ "Need help?" : "Necessites ajuda?",
+ "See the documentation" : "Consulti la documentació",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicació requereix Javascript per al seu correcte funcionament . Per favor, {linkstart}habiliti Javascript{linkend} i torni a carregar la pàgina.",
+ "Search" : "Cerca",
+ "Log out" : "Surt",
+ "Confirm your password" : "Confirma la teva contrasenya",
+ "Server side authentication failed!" : "L'autenticació del servidor ha fallat!",
+ "Please contact your administrator." : "Contacteu amb l'administrador.",
+ "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.",
+ "Username or email" : "Nom d'usuari o correu electrònic",
+ "Wrong password. Reset it?" : "Contrasenya incorrecta. Voleu restablir-la?",
+ "Wrong password." : "Contrasenya incorrecta.",
+ "Log in" : "Inici de sessió",
+ "Stay logged in" : "Mantén la sessió connectada",
+ "Alternative Logins" : "Acreditacions alternatives",
+ "Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
+ "New password" : "Contrasenya nova",
+ "New Password" : "Contrasenya nova",
+ "Reset password" : "Reinicialitza la contrasenya",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ei, <br><br>només fer-vos saber que %s us ha comparti <strong>%s</strong>. <br><a href=\"%s\">Mireu-ho!</a>",
+ "This Nextcloud instance is currently in single user mode." : "La instància Nextcloud està en mode d'usuari únic.",
+ "This means only administrators can use the instance." : "Això significa que només els administradors poden usar la instància.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacteu amb l'administrador del sistema si aquest missatge persisteix o apareix inesperadament.",
+ "Thank you for your patience." : "Gràcies per la paciència.",
+ "Two-factor authentication" : "Segon factor d'autenticació",
+ "Cancel log in" : "Cancel·la l'accés a",
+ "Use backup code" : "Utilitza un codi de copia de seguretat",
+ "You are accessing the server from an untrusted domain." : "Esteu accedint al servidor des d'un domini no fiable",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En funció de la teva configuració, com a administrador podries utilitzar el botó d'abaix per confiar en aquest domini.",
+ "Add \"%s\" as trusted domain" : "Afegeix \"%s\" com a domini de confiança",
+ "App update required" : "Cal que actualitzeu la aplicació",
+ "%s will be updated to version %s" : "%s s'actualitzarà a la versió %s",
+ "These apps will be updated:" : "Aquestes aplicacions s'actualitzaran:",
+ "These incompatible apps will be disabled:" : "Aquestes aplicacions incompatibles es desactivaran:",
+ "The theme %s has been disabled." : "S'ha desactivat el tema %s",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.",
+ "Start update" : "Inicia l'actualització",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. ",
+ "Update needed" : "Actualització necessaria",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància %s està actualment en manteniment i podria trigar una estona.",
+ "This page will refresh itself when the %s instance is available again." : "Aquesta pàgina s'actualitzarà automàticament quan la instància %s estigui disponible de nou.",
+ "Error loading tags" : "Error en carregar les etiquetes",
+ "Tag already exists" : "L'etiqueta ja existeix",
+ "Error deleting tag(s)" : "Error en eliminar etiqueta(s)",
+ "Error tagging" : "Error en etiquetar",
+ "Error untagging" : "Error en treure les etiquetes",
+ "Error favoriting" : "Error en posar a preferits",
+ "Error unfavoriting" : "Error en treure de preferits",
+ "Couldn't send mail to following users: %s " : "No s'ha pogut enviar correu als usuaris següents: %s",
+ "Sunday" : "Diumenge",
+ "Monday" : "Dilluns",
+ "Tuesday" : "Dimarts",
+ "Wednesday" : "Dimecres",
+ "Thursday" : "Dijous",
+ "Friday" : "Divendres",
+ "Saturday" : "Dissabte",
+ "Sun." : "Dg.",
+ "Mon." : "Dl.",
+ "Tue." : "Dm.",
+ "Wed." : "Dc.",
+ "Thu." : "Dj.",
+ "Fri." : "Dv.",
+ "Sat." : "Ds.",
+ "Su" : "Dg",
+ "Mo" : "Dl",
+ "Tu" : "Dm",
+ "We" : "Dc",
+ "Th" : "Dj",
+ "Fr" : "Dv",
+ "Sa" : "Ds",
+ "January" : "Gener",
+ "February" : "Febrer",
+ "March" : "Març",
+ "April" : "Abril",
+ "May" : "Maig",
+ "June" : "Juny",
+ "July" : "Juliol",
+ "August" : "Agost",
+ "September" : "Setembre",
+ "October" : "Octubre",
+ "November" : "Novembre",
+ "December" : "Desembre",
+ "Jan." : "Gen.",
+ "Feb." : "Febr.",
+ "Mar." : "Març",
+ "Apr." : "Abr.",
+ "May." : "Maig",
+ "Jun." : "Juny",
+ "Jul." : "Jul.",
+ "Aug." : "Ag.",
+ "Sep." : "Set.",
+ "Oct." : "Oct.",
+ "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?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. <br />Si sabeu què fer, contacteu amb l'administrador abans de continuar.<br />Voleu continuar?",
+ "Sending ..." : "Enviant...",
+ "Email sent" : "El correu electrónic s'ha enviat",
+ "notify by email" : "notifica per correu electrònic",
+ "can share" : "pot compartir",
+ "create" : "crea",
+ "change" : "canvi",
+ "delete" : "elimina",
+ "Warning" : "Avís",
+ "Cancel login" : "Cancel·la l'inici de sessió"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/ca.json b/core/l10n/ca.json
new file mode 100644
index 00000000000..49c17f21b63
--- /dev/null
+++ b/core/l10n/ca.json
@@ -0,0 +1,286 @@
+{ "translations": {
+ "Please select a file." : "Seleccioneu un fitxer.",
+ "File is too big" : "El fitxer és massa gran",
+ "The selected file is not an image." : "El fitxer seleccionat no és una imatge",
+ "The selected file cannot be read." : "El fitxer seleccionat no es pot llegir.",
+ "Invalid file provided" : "El fitxer proporcionat no és vàlid",
+ "No image or file provided" : "No s'han proporcionat imatges o fitxers",
+ "Unknown filetype" : "Tipus de fitxer desconegut",
+ "Invalid image" : "Imatge no vàlida",
+ "An error occurred. Please contact your admin." : "Hi ha hagut un error. Contacteu amb l'administrador.",
+ "No temporary profile picture available, try again" : "No hi ha imatge temporal de perfil disponible, torneu a intentar-ho",
+ "No crop data provided" : "No heu proporcionat dades del retall",
+ "No valid crop data provided" : "Les dades del retall proporcionades no són vàlides",
+ "Crop is not square" : "El retall no és quadrat",
+ "Couldn't reset password because the token is invalid" : "No es pot restablir la contrasenya perquè el testimoni no és vàlid",
+ "Couldn't reset password because the token is expired" : "No es pot restablir la contrasenya perquè el testimoni ha vençut",
+ "Couldn't send reset email. Please make sure your username is correct." : "No s'ha pogut enviar el correu de restabliment. Assegureu-vos que el vostre nom d'usuari és correcte.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar correu de restabliment. No hi ha correu per aquest compte. Contacteu amb l'administrador.",
+ "%s password reset" : "restableix la contrasenya %s",
+ "Couldn't send reset email. Please contact your administrator." : "No s'ha pogut restablir el correu. Contacteu amb l'administrador.",
+ "Preparing update" : "Preparant l'actualització",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Advertiment de reparació:",
+ "Repair error: " : "Error de reparació:",
+ "Turned on maintenance mode" : "Activat el mode de manteniment",
+ "Turned off maintenance mode" : "Desactivat el mode de manteniment",
+ "Maintenance mode is kept active" : "El mode de manteniment es manté activat",
+ "Updated database" : "Actualitzada la base de dades",
+ "Checked database schema update" : "S'ha comprobat l'actualització de l'esquema de la base de dades",
+ "Checked database schema update for apps" : "S'ha comprobat l'actualització de l'esquema de la base de dades per les apps",
+ "Updated \"%s\" to %s" : "Actualitzat \"%s\" a %s",
+ "Following apps have been disabled: %s" : "Les aplicacions següents s'han deshabilitat: %s",
+ "Already up to date" : "Ja actualitzat",
+ "Settings" : "Configuració",
+ "Saving..." : "Desant...",
+ "Dismiss" : "Rebutja",
+ "Authentication required" : "Es requereix autenticació",
+ "Password" : "Contrasenya",
+ "Cancel" : "Cancel·la",
+ "Confirm" : "Confirma",
+ "seconds ago" : "segons enrere",
+ "Logging in …" : "Accedint a...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "L'enllaç per reiniciar la vostra contrasenya s'ha enviat al vostre correu. Si no el rebeu en un temps raonable comproveu les carpetes de spam. <br>Si no és allà, pregunteu a l'administrador local.",
+ "I know what I'm doing" : "Sé el que faig",
+ "Password can not be changed. Please contact your administrator." : "La contrasenya no es pot canviar. Contacteu amb l'administrador.",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hi ha arxius aquí",
+ "Choose" : "Escull",
+ "Error loading file picker template: {error}" : "Error en carregar la plantilla de càrrega de fitxers: {error}",
+ "Ok" : "D'acord",
+ "Error loading message template: {error}" : "Error en carregar la plantilla de missatge: {error}",
+ "read-only" : "Només de lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicte de fitxer","{count} conflictes de fitxer"],
+ "One file conflict" : "Un fitxer en conflicte",
+ "New Files" : "Fitxers nous",
+ "Already existing files" : "Fitxers que ja existeixen",
+ "Which files do you want to keep?" : "Quin fitxer voleu conservar?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si seleccioneu les dues versions, el fitxer copiat tindrà un número afegit al seu nom.",
+ "Continue" : "Continua",
+ "(all selected)" : "(selecciona-ho tot)",
+ "({count} selected)" : "({count} seleccionats)",
+ "Error loading file exists template" : "Error en carregar la plantilla de fitxer existent",
+ "Pending" : "Pendent",
+ "Very weak password" : "Contrasenya massa feble",
+ "Weak password" : "Contrasenya feble",
+ "So-so password" : "Contrasenya passable",
+ "Good password" : "Contrasenya bona",
+ "Strong password" : "Contrasenya forta",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.",
+ "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
+ "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>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>",
+ "Shared" : "Compartit",
+ "Shared with {recipients}" : "Compartit amb {recipients}",
+ "Error" : "Error",
+ "Error while sharing" : "Error en compartir",
+ "Error while unsharing" : "Error en deixar de compartir",
+ "Error setting expiration date" : "Error en establir la data de venciment",
+ "The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo",
+ "Set expiration date" : "Estableix la data de venciment",
+ "Expiration" : "Expiració",
+ "Expiration date" : "Data de venciment",
+ "Choose a password for the public link" : "Escolliu una contrasenya per l'enllaç públic",
+ "Copied!" : "Copiat!",
+ "Copy" : "Copia",
+ "Not supported!" : "No soportat!",
+ "Press ⌘-C to copy." : "Prem ⌘-C per copiar.",
+ "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.",
+ "Resharing is not allowed" : "No es permet compartir de nou",
+ "Share link" : "Enllaç de compartició",
+ "Link" : "Enllaç",
+ "Password protect" : "Protegir amb contrasenya",
+ "Allow editing" : "Permetre edició",
+ "Email link to person" : "Enllaç per correu electrónic amb la persona",
+ "Send" : "Envia",
+ "Shared with you and the group {group} by {owner}" : "Compartit amb vos i amb el grup {group} per {owner}",
+ "Shared with you by {owner}" : "Compartit amb vos per {owner}",
+ "group" : "grup",
+ "remote" : "remot",
+ "email" : "email",
+ "Unshare" : "Deixa de compartir",
+ "can edit" : "pot editar",
+ "can create" : "pot crear",
+ "can change" : "pot canviar",
+ "can delete" : "Pot esborrar",
+ "access control" : "control d'accés",
+ "No users found for {search}" : "No s'han trobat usuaris per {search}",
+ "An error occurred. Please try again" : "S'ha produït un error. Si us plau, torni a intentar-ho.",
+ "Share" : "Comparteix",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Esborra",
+ "Rename" : "Reanomena",
+ "Collaborative tags" : "Etiquetes col·laboratives",
+ "No tags found" : "No s'han trobat etiquetes",
+ "The object type is not specified." : "No s'ha especificat el tipus d'objecte.",
+ "Enter new" : "Escriu nou",
+ "Add" : "Afegeix",
+ "Edit tags" : "Edita etiquetes",
+ "Error loading dialog template: {error}" : "Error en carregar la plantilla de diàleg: {error}",
+ "No tags selected for deletion." : "No heu seleccionat les etiquetes a eliminar.",
+ "unknown text" : "text desconegut",
+ "Hello world!" : "Hola món!",
+ "sunny" : "asolellat",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el temps és {weather}",
+ "Hello {name}" : "Hola {name}",
+ "new" : "Nou",
+ "_download %n file_::_download %n files_" : ["descarregar l'arxiu %n","descarregar arxius %n "],
+ "Update to {version}" : "Actualitza a {version}",
+ "An error occurred." : "S'ha produït un error",
+ "Please reload the page." : "Carregueu la pàgina de nou.",
+ "Continue to Nextcloud" : "Continua a Nextcloud",
+ "Searching other places" : "Buscant altres ubicacions",
+ "Personal" : "Personal",
+ "Users" : "Usuaris",
+ "Apps" : "Aplicacions",
+ "Admin" : "Administració",
+ "Help" : "Ajuda",
+ "Access forbidden" : "Accés prohibit",
+ "File not found" : "No s'ha trobat l'arxiu",
+ "The specified document has not been found on the server." : "El document especificat no s'ha trobat al servidor.",
+ "You can click here to return to %s." : "Pots clicar aquí per tornar a %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n",
+ "The share will expire on %s." : "La compartició venç el %s.",
+ "Cheers!" : "Salut!",
+ "Internal Server Error" : "Error Intern del Servidor",
+ "The server encountered an internal error and was unable to complete your request." : "El servidor ha trobat un error intern i no pot finalitzar la teva petició.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Per favor, posi's en contacte amb l'administrador del servidor si aquest error torna a aparèixer diverses vegades, per favor inclogui els detalls tècnics de baix en el seu informe.",
+ "More details can be found in the server log." : "Pots trobar més detalls al llistat del servidor.",
+ "Technical details" : "Detalls tècnics",
+ "Remote Address: %s" : "Adreça remota: %s",
+ "Request ID: %s" : "Sol·licitud ID: %s ",
+ "Type: %s" : "Tipus: %s",
+ "Code: %s" : "Codi: %s",
+ "Message: %s" : "Missatge: %s",
+ "File: %s" : "Fitxer: %s",
+ "Line: %s" : "Línia: %s",
+ "Trace" : "Traça",
+ "Security warning" : "Advertiment de seguretat",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.",
+ "Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>",
+ "Username" : "Nom d'usuari",
+ "Storage & database" : "Emmagatzematge i base de dades",
+ "Data folder" : "Carpeta de dades",
+ "Configure the database" : "Configura la base de dades",
+ "Only %s is available." : "Només hi ha disponible %s",
+ "Install and activate additional PHP modules to choose other database types." : "Instal·la i activa mòduls PHP addicionals per seleccionar altres tipus de bases de dades.",
+ "For more details check out the documentation." : "Per més detalls consulteu la documentació.",
+ "Database user" : "Usuari de la base de dades",
+ "Database password" : "Contrasenya de la base de dades",
+ "Database name" : "Nom de la base de dades",
+ "Database tablespace" : "Espai de taula de la base de dades",
+ "Database host" : "Ordinador central de la base de dades",
+ "Performance warning" : "Alerta de rendiment",
+ "SQLite will be used as database." : "SQLite s'utilitzarà com a base de dades.",
+ "For larger installations we recommend to choose a different database backend." : "Per a instal·lacions més grans es recomana triar una base de dades diferent.",
+ "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.",
+ "Finish setup" : "Acaba la configuració",
+ "Finishing …" : "Acabant...",
+ "Need help?" : "Necessites ajuda?",
+ "See the documentation" : "Consulti la documentació",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicació requereix Javascript per al seu correcte funcionament . Per favor, {linkstart}habiliti Javascript{linkend} i torni a carregar la pàgina.",
+ "Search" : "Cerca",
+ "Log out" : "Surt",
+ "Confirm your password" : "Confirma la teva contrasenya",
+ "Server side authentication failed!" : "L'autenticació del servidor ha fallat!",
+ "Please contact your administrator." : "Contacteu amb l'administrador.",
+ "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.",
+ "Username or email" : "Nom d'usuari o correu electrònic",
+ "Wrong password. Reset it?" : "Contrasenya incorrecta. Voleu restablir-la?",
+ "Wrong password." : "Contrasenya incorrecta.",
+ "Log in" : "Inici de sessió",
+ "Stay logged in" : "Mantén la sessió connectada",
+ "Alternative Logins" : "Acreditacions alternatives",
+ "Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
+ "New password" : "Contrasenya nova",
+ "New Password" : "Contrasenya nova",
+ "Reset password" : "Reinicialitza la contrasenya",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ei, <br><br>només fer-vos saber que %s us ha comparti <strong>%s</strong>. <br><a href=\"%s\">Mireu-ho!</a>",
+ "This Nextcloud instance is currently in single user mode." : "La instància Nextcloud està en mode d'usuari únic.",
+ "This means only administrators can use the instance." : "Això significa que només els administradors poden usar la instància.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacteu amb l'administrador del sistema si aquest missatge persisteix o apareix inesperadament.",
+ "Thank you for your patience." : "Gràcies per la paciència.",
+ "Two-factor authentication" : "Segon factor d'autenticació",
+ "Cancel log in" : "Cancel·la l'accés a",
+ "Use backup code" : "Utilitza un codi de copia de seguretat",
+ "You are accessing the server from an untrusted domain." : "Esteu accedint al servidor des d'un domini no fiable",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En funció de la teva configuració, com a administrador podries utilitzar el botó d'abaix per confiar en aquest domini.",
+ "Add \"%s\" as trusted domain" : "Afegeix \"%s\" com a domini de confiança",
+ "App update required" : "Cal que actualitzeu la aplicació",
+ "%s will be updated to version %s" : "%s s'actualitzarà a la versió %s",
+ "These apps will be updated:" : "Aquestes aplicacions s'actualitzaran:",
+ "These incompatible apps will be disabled:" : "Aquestes aplicacions incompatibles es desactivaran:",
+ "The theme %s has been disabled." : "S'ha desactivat el tema %s",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.",
+ "Start update" : "Inicia l'actualització",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. ",
+ "Update needed" : "Actualització necessaria",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància %s està actualment en manteniment i podria trigar una estona.",
+ "This page will refresh itself when the %s instance is available again." : "Aquesta pàgina s'actualitzarà automàticament quan la instància %s estigui disponible de nou.",
+ "Error loading tags" : "Error en carregar les etiquetes",
+ "Tag already exists" : "L'etiqueta ja existeix",
+ "Error deleting tag(s)" : "Error en eliminar etiqueta(s)",
+ "Error tagging" : "Error en etiquetar",
+ "Error untagging" : "Error en treure les etiquetes",
+ "Error favoriting" : "Error en posar a preferits",
+ "Error unfavoriting" : "Error en treure de preferits",
+ "Couldn't send mail to following users: %s " : "No s'ha pogut enviar correu als usuaris següents: %s",
+ "Sunday" : "Diumenge",
+ "Monday" : "Dilluns",
+ "Tuesday" : "Dimarts",
+ "Wednesday" : "Dimecres",
+ "Thursday" : "Dijous",
+ "Friday" : "Divendres",
+ "Saturday" : "Dissabte",
+ "Sun." : "Dg.",
+ "Mon." : "Dl.",
+ "Tue." : "Dm.",
+ "Wed." : "Dc.",
+ "Thu." : "Dj.",
+ "Fri." : "Dv.",
+ "Sat." : "Ds.",
+ "Su" : "Dg",
+ "Mo" : "Dl",
+ "Tu" : "Dm",
+ "We" : "Dc",
+ "Th" : "Dj",
+ "Fr" : "Dv",
+ "Sa" : "Ds",
+ "January" : "Gener",
+ "February" : "Febrer",
+ "March" : "Març",
+ "April" : "Abril",
+ "May" : "Maig",
+ "June" : "Juny",
+ "July" : "Juliol",
+ "August" : "Agost",
+ "September" : "Setembre",
+ "October" : "Octubre",
+ "November" : "Novembre",
+ "December" : "Desembre",
+ "Jan." : "Gen.",
+ "Feb." : "Febr.",
+ "Mar." : "Març",
+ "Apr." : "Abr.",
+ "May." : "Maig",
+ "Jun." : "Juny",
+ "Jul." : "Jul.",
+ "Aug." : "Ag.",
+ "Sep." : "Set.",
+ "Oct." : "Oct.",
+ "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?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. <br />Si sabeu què fer, contacteu amb l'administrador abans de continuar.<br />Voleu continuar?",
+ "Sending ..." : "Enviant...",
+ "Email sent" : "El correu electrónic s'ha enviat",
+ "notify by email" : "notifica per correu electrònic",
+ "can share" : "pot compartir",
+ "create" : "crea",
+ "change" : "canvi",
+ "delete" : "elimina",
+ "Warning" : "Avís",
+ "Cancel login" : "Cancel·la l'inici de sessió"
+},"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 67ea21fd64a..3c590e6f727 100644
--- a/core/l10n/cs_CZ.js
+++ b/core/l10n/cs_CZ.js
@@ -60,6 +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. 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",
@@ -121,6 +122,7 @@ 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",
@@ -239,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!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json
index b1b7501e039..ef9261ac7b9 100644
--- a/core/l10n/cs_CZ.json
+++ b/core/l10n/cs_CZ.json
@@ -58,6 +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. 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",
@@ -119,6 +120,7 @@
"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",
@@ -237,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!",
@@ -339,7 +341,6 @@
"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",
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 8b8bfa3c9de..16740e8fc55 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -100,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}",
@@ -191,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.",
@@ -280,7 +281,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index c94b4019f56..b479be4e426 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -98,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}",
@@ -189,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.",
@@ -278,7 +279,6 @@
"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",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 9c558ffd2a8..3ac9e1ab061 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -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",
@@ -240,8 +241,8 @@ 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!",
@@ -342,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 9491465ac37..be81fc7f0a2 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -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",
@@ -238,8 +239,8 @@
"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!",
@@ -340,7 +341,6 @@
"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",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index c73bccbf0b2..626653e7d63 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -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",
@@ -240,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!",
@@ -342,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 024fb770198..213f7886d71 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -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",
@@ -238,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!",
@@ -340,7 +341,6 @@
"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",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index fe3def81035..65d74719596 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" : "Άγνωστος τύπος αρχείου",
@@ -43,14 +45,17 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, επαναφόρτωση σε 5 λεπτά",
"Saving..." : "Γίνεται αποθήκευση...",
"Dismiss" : "Απόρριψη",
+ "Authentication required" : "Απαιτείται πιστοποίηση",
"Password" : "Συνθηματικό",
"Cancel" : "Άκυρο",
+ "Confirm" : "Επιβεβαίωση",
"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" : "Ναι",
+ "No files in here" : "Δεν υπάρχουν αρχεία",
"Choose" : "Επιλέξτε",
"Error loading file picker template: {error}" : "Σφάλμα κατά την φόρτωση προτύπου επιλογέα αρχείων: {σφάλμα}",
"Ok" : "Οκ",
@@ -66,6 +71,7 @@ OC.L10N.register(
"(all selected)" : "(όλα τα επιλεγμένα)",
"({count} selected)" : "({count} επιλέχθησαν)",
"Error loading file exists template" : "Σφάλμα κατά την φόρτωση του προτύπου \"αρχείο υπάρχει\"",
+ "Pending" : "Εκκρεμεί",
"Very weak password" : "Πολύ αδύναμο συνθηματικό",
"Weak password" : "Αδύναμο συνθηματικό",
"So-so password" : "Μέτριο συνθηματικό",
@@ -88,6 +94,7 @@ OC.L10N.register(
"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.",
@@ -95,12 +102,14 @@ 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}",
"Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
"group" : "ομάδα",
"remote" : "απομακρυσμένα",
+ "email" : "ηλεκτρονικό ταχυδρομείο",
"Unshare" : "Διακοπή διαμοιρασμού",
"can edit" : "δυνατότητα αλλαγής",
"access control" : "έλεγχος πρόσβασης",
@@ -183,8 +192,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 +283,6 @@ OC.L10N.register(
"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 />Θέλετε στ' αλήθεια να συνεχίσετε;",
- "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Sending ..." : "Αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Send link via email" : "Αποστολή συνδέσμου μέσω email",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index b2ba470c7b0..7f00f028836 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" : "Άγνωστος τύπος αρχείου",
@@ -41,14 +43,17 @@
"Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, επαναφόρτωση σε 5 λεπτά",
"Saving..." : "Γίνεται αποθήκευση...",
"Dismiss" : "Απόρριψη",
+ "Authentication required" : "Απαιτείται πιστοποίηση",
"Password" : "Συνθηματικό",
"Cancel" : "Άκυρο",
+ "Confirm" : "Επιβεβαίωση",
"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" : "Ναι",
+ "No files in here" : "Δεν υπάρχουν αρχεία",
"Choose" : "Επιλέξτε",
"Error loading file picker template: {error}" : "Σφάλμα κατά την φόρτωση προτύπου επιλογέα αρχείων: {σφάλμα}",
"Ok" : "Οκ",
@@ -64,6 +69,7 @@
"(all selected)" : "(όλα τα επιλεγμένα)",
"({count} selected)" : "({count} επιλέχθησαν)",
"Error loading file exists template" : "Σφάλμα κατά την φόρτωση του προτύπου \"αρχείο υπάρχει\"",
+ "Pending" : "Εκκρεμεί",
"Very weak password" : "Πολύ αδύναμο συνθηματικό",
"Weak password" : "Αδύναμο συνθηματικό",
"So-so password" : "Μέτριο συνθηματικό",
@@ -86,6 +92,7 @@
"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.",
@@ -93,12 +100,14 @@
"Share link" : "Διαμοιρασμός συνδέσμου",
"Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Email link to person" : "Αποστολή συνδέσμου με email ",
"Send" : "Αποστολή",
"Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}",
"Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
"group" : "ομάδα",
"remote" : "απομακρυσμένα",
+ "email" : "ηλεκτρονικό ταχυδρομείο",
"Unshare" : "Διακοπή διαμοιρασμού",
"can edit" : "δυνατότητα αλλαγής",
"access control" : "έλεγχος πρόσβασης",
@@ -181,8 +190,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 +281,6 @@
"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 />Θέλετε στ' αλήθεια να συνεχίσετε;",
- "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Sending ..." : "Αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Send link via email" : "Αποστολή συνδέσμου μέσω email",
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index a12d3a48840..d78122ce116 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -116,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}",
@@ -211,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.",
@@ -305,7 +306,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index b5cb70086ef..64f79a7e768 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -114,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}",
@@ -209,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.",
@@ -303,7 +304,6 @@
"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",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index e8b699a87d2..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,6 +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. 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",
@@ -121,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",
@@ -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.",
@@ -341,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index 3d239d2c769..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,6 +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. 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",
@@ -119,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",
@@ -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.",
@@ -339,7 +341,6 @@
"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",
diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js
index bce3567feae..1d0653a51a3 100644
--- a/core/l10n/fi_FI.js
+++ b/core/l10n/fi_FI.js
@@ -110,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",
@@ -210,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",
@@ -309,7 +310,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json
index 205eb023c05..da11bc2635d 100644
--- a/core/l10n/fi_FI.json
+++ b/core/l10n/fi_FI.json
@@ -108,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",
@@ -208,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",
@@ -307,7 +308,6 @@
"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",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 660cedc31a0..90e99370f2e 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
"Allow upload and editing" : "Autoriser l'envoi et l'édition",
+ "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",
@@ -240,8 +241,8 @@ OC.L10N.register(
"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é !",
@@ -342,7 +343,6 @@ OC.L10N.register(
"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é",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index e99e1adc9ad..df5e24efb1d 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -120,6 +120,7 @@
"Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
"Allow upload and editing" : "Autoriser l'envoi et l'édition",
+ "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",
@@ -238,8 +239,8 @@
"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é !",
@@ -340,7 +341,6 @@
"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é",
diff --git a/core/l10n/he.js b/core/l10n/he.js
index dc544b6eece..8212568973e 100644
--- a/core/l10n/he.js
+++ b/core/l10n/he.js
@@ -103,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}",
@@ -196,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." : "אירעה שגיאה פנימית.",
@@ -290,7 +291,6 @@ OC.L10N.register(
"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" : "שליחת קישור באמצעות דואר אלקטרוני",
diff --git a/core/l10n/he.json b/core/l10n/he.json
index aa562c78360..60e70973ebe 100644
--- a/core/l10n/he.json
+++ b/core/l10n/he.json
@@ -101,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}",
@@ -194,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." : "אירעה שגיאה פנימית.",
@@ -288,7 +289,6 @@
"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" : "שליחת קישור באמצעות דואר אלקטרוני",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index a3b04dc33e3..5a8251eb0bb 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -121,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",
@@ -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!",
@@ -341,7 +342,6 @@ OC.L10N.register(
"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!",
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 81458973e3d..a3c1cab9276 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -119,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",
@@ -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!",
@@ -339,7 +340,6 @@
"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!",
diff --git a/core/l10n/id.js b/core/l10n/id.js
index 1f8d96e4001..3fa97fd963d 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -60,6 +60,7 @@ OC.L10N.register(
"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. 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 anda terenkripsi. Tidak ada jalan untuk mendapatkan kembali data anda setelah sandi disetel ulang.<br />Jika anda tidak yakin, harap hubungi administrator anda sebelum melanjutkannya. <br />Apa anda ingin melanjutkannya?",
"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",
@@ -121,14 +122,22 @@ OC.L10N.register(
"Link" : "Tautan",
"Password protect" : "Lindungi dengan sandi",
"Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan",
+ "Allow editing" : "Izinkan penyuntingan",
+ "File drop (upload only)" : "Berkas jatuh (hanya unggah)",
"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}",
"Shared with you by {owner}" : "Dibagikan dengan anda oleh {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} dibagikan lewat tautan",
"group" : "grup",
"remote" : "remote",
+ "email" : "surel",
"Unshare" : "Batalkan berbagi",
+ "can reshare" : "dapat dibagi ulang",
"can edit" : "dapat sunting",
+ "can create" : "dapat membuat",
+ "can change" : "dapat mengubah",
+ "can delete" : "dapat menghapus",
"access control" : "kontrol akses",
"Could not unshare" : "Tidak dapat membatalkan pembagian",
"Share details could not be loaded for this item." : "Rincian berbagi tidak dapat dimuat untuk item ini.",
@@ -137,7 +146,17 @@ OC.L10N.register(
"An error occurred. Please try again" : "Terjadi kesalahan. Silakan coba lagi",
"{sharee} (group)" : "{sharee} (grup)",
"{sharee} (remote)" : "{sharee} (remote)",
+ "{sharee} (email)" : "{sharee} (surel)",
"Share" : "Bagikan",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Berbagi dengan orang dipeladen lainnya menggunakan Federated Cloud ID mereka username@example.com/nextcloud",
+ "Share with users or by mail..." : "Bagikan dengan pengguna atau lewat surel...",
+ "Share with users or remote users..." : "Bagikan dengan pengguna atau pengguna jarak jauh...",
+ "Share with users, remote users or by mail..." : "Bagikan dengan pengguna, pengguna jarak jauh atau lewat surel...",
+ "Share with users or groups..." : "Bagikan dengan pengguna atau grup...",
+ "Share with users, groups or by mail..." : "Bagikan dengan pengguna, grup atau lewat surel...",
+ "Share with users, groups or remote users..." : "Bagikan dengan pengguna, grup atau pengguna jarak jauh...",
+ "Share with users, groups, remote users or by mail..." : "Bagikan dengan pengguna, grup, pengguna jarak jauh atau lewat surel...",
+ "Share with users..." : "Bagikan dengan pengguna...",
"Error removing share" : "Terjadi kesalahan saat menghapus pembagian",
"Non-existing tag #{tag}" : "Tag tidak ada #{tag}",
"restricted" : "terbatas",
@@ -146,6 +165,7 @@ OC.L10N.register(
"Delete" : "Hapus",
"Rename" : "Ubah nama",
"Collaborative tags" : "Tag kolaboratif",
+ "No tags found" : "Tag tidak ditemukan",
"The object type is not specified." : "Tipe objek tidak ditentukan.",
"Enter new" : "Masukkan baru",
"Add" : "Tambah",
@@ -168,6 +188,7 @@ OC.L10N.register(
"Continue to Nextcloud" : "Lanjutkan ke Nextcloud",
"The update was successful. Redirecting you to Nextcloud now." : "Pembaruan berhasil. Mengarahkan Anda ke Nextcloud.",
"Searching other places" : "Mencari tempat lainnya",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Hasil pencarian tidak ditemukan difolder lainnya untuk '{tag}{filter}{endtag}'",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} hasil pencarian di folder lain"],
"Personal" : "Pribadi",
"Users" : "Pengguna",
@@ -210,6 +231,7 @@ OC.L10N.register(
"Database name" : "Nama basis data",
"Database tablespace" : "Tablespace basis data",
"Database host" : "Host basis data",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Harap tentukan nomor port beserta nama host (contoh., localhost:5432).",
"Performance warning" : "Peringatan kinerja",
"SQLite will be used as database." : "SQLite akan digunakan sebagai basis data.",
"For larger installations we recommend to choose a different database backend." : "Untuk instalasi yang lebih besar, kami menyarankan untuk memilih backend basis data yang berbeda.",
@@ -219,8 +241,10 @@ 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",
+ "This action requires you to confirm your password:" : "Aksi ini mengharuskan anda mengkonfirmasi sandi anda:",
+ "Confirm your password" : "Konfirmasi sandi anda",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"An internal error occurred." : "Terjadi kesalahan internal.",
@@ -240,6 +264,11 @@ OC.L10N.register(
"This means only administrators can use the instance." : "Ini berarti hanya administrator yang dapat menggunakan ownCloud.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Hubungi administrator sistem anda jika pesan ini terus muncul atau muncul tiba-tiba.",
"Thank you for your patience." : "Terima kasih atas kesabaran anda.",
+ "Two-factor authentication" : "Otentikasi Two-factor",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Keamanan tambahan diaktifkan untuk akun anda. Harap otentikasi menggunakan faktor kedua.",
+ "Cancel log in" : "Batalkan masuk log",
+ "Use backup code" : "Gunakan kode cadangan",
+ "Error while validating your second factor" : "Galat ketika memvalidasi faktor kedua anda",
"You are accessing the server from an untrusted domain." : "Anda mengakses server dari domain yang tidak terpercaya.",
"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." : "Silakan hubungi administrator Anda. Apabila Anda adalah administrator dari instansi ini, konfigurasikan aturan \"trusted_domains\" di config/config.php. Contoh konfigurasi disediakan di 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." : "Tergantung pada konfigurasi Anda, sebagai seorang administrator Anda kemungkinan dapat menggunakan tombol bawah untuk mempercayai domain ini.",
@@ -314,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 8ca0ea8a28d..b0d9c903a0b 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -58,6 +58,7 @@
"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. 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 anda terenkripsi. Tidak ada jalan untuk mendapatkan kembali data anda setelah sandi disetel ulang.<br />Jika anda tidak yakin, harap hubungi administrator anda sebelum melanjutkannya. <br />Apa anda ingin melanjutkannya?",
"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",
@@ -119,14 +120,22 @@
"Link" : "Tautan",
"Password protect" : "Lindungi dengan sandi",
"Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan",
+ "Allow editing" : "Izinkan penyuntingan",
+ "File drop (upload only)" : "Berkas jatuh (hanya unggah)",
"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}",
"Shared with you by {owner}" : "Dibagikan dengan anda oleh {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} dibagikan lewat tautan",
"group" : "grup",
"remote" : "remote",
+ "email" : "surel",
"Unshare" : "Batalkan berbagi",
+ "can reshare" : "dapat dibagi ulang",
"can edit" : "dapat sunting",
+ "can create" : "dapat membuat",
+ "can change" : "dapat mengubah",
+ "can delete" : "dapat menghapus",
"access control" : "kontrol akses",
"Could not unshare" : "Tidak dapat membatalkan pembagian",
"Share details could not be loaded for this item." : "Rincian berbagi tidak dapat dimuat untuk item ini.",
@@ -135,7 +144,17 @@
"An error occurred. Please try again" : "Terjadi kesalahan. Silakan coba lagi",
"{sharee} (group)" : "{sharee} (grup)",
"{sharee} (remote)" : "{sharee} (remote)",
+ "{sharee} (email)" : "{sharee} (surel)",
"Share" : "Bagikan",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Berbagi dengan orang dipeladen lainnya menggunakan Federated Cloud ID mereka username@example.com/nextcloud",
+ "Share with users or by mail..." : "Bagikan dengan pengguna atau lewat surel...",
+ "Share with users or remote users..." : "Bagikan dengan pengguna atau pengguna jarak jauh...",
+ "Share with users, remote users or by mail..." : "Bagikan dengan pengguna, pengguna jarak jauh atau lewat surel...",
+ "Share with users or groups..." : "Bagikan dengan pengguna atau grup...",
+ "Share with users, groups or by mail..." : "Bagikan dengan pengguna, grup atau lewat surel...",
+ "Share with users, groups or remote users..." : "Bagikan dengan pengguna, grup atau pengguna jarak jauh...",
+ "Share with users, groups, remote users or by mail..." : "Bagikan dengan pengguna, grup, pengguna jarak jauh atau lewat surel...",
+ "Share with users..." : "Bagikan dengan pengguna...",
"Error removing share" : "Terjadi kesalahan saat menghapus pembagian",
"Non-existing tag #{tag}" : "Tag tidak ada #{tag}",
"restricted" : "terbatas",
@@ -144,6 +163,7 @@
"Delete" : "Hapus",
"Rename" : "Ubah nama",
"Collaborative tags" : "Tag kolaboratif",
+ "No tags found" : "Tag tidak ditemukan",
"The object type is not specified." : "Tipe objek tidak ditentukan.",
"Enter new" : "Masukkan baru",
"Add" : "Tambah",
@@ -166,6 +186,7 @@
"Continue to Nextcloud" : "Lanjutkan ke Nextcloud",
"The update was successful. Redirecting you to Nextcloud now." : "Pembaruan berhasil. Mengarahkan Anda ke Nextcloud.",
"Searching other places" : "Mencari tempat lainnya",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Hasil pencarian tidak ditemukan difolder lainnya untuk '{tag}{filter}{endtag}'",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} hasil pencarian di folder lain"],
"Personal" : "Pribadi",
"Users" : "Pengguna",
@@ -208,6 +229,7 @@
"Database name" : "Nama basis data",
"Database tablespace" : "Tablespace basis data",
"Database host" : "Host basis data",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Harap tentukan nomor port beserta nama host (contoh., localhost:5432).",
"Performance warning" : "Peringatan kinerja",
"SQLite will be used as database." : "SQLite akan digunakan sebagai basis data.",
"For larger installations we recommend to choose a different database backend." : "Untuk instalasi yang lebih besar, kami menyarankan untuk memilih backend basis data yang berbeda.",
@@ -217,8 +239,10 @@
"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",
+ "This action requires you to confirm your password:" : "Aksi ini mengharuskan anda mengkonfirmasi sandi anda:",
+ "Confirm your password" : "Konfirmasi sandi anda",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"An internal error occurred." : "Terjadi kesalahan internal.",
@@ -238,6 +262,11 @@
"This means only administrators can use the instance." : "Ini berarti hanya administrator yang dapat menggunakan ownCloud.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Hubungi administrator sistem anda jika pesan ini terus muncul atau muncul tiba-tiba.",
"Thank you for your patience." : "Terima kasih atas kesabaran anda.",
+ "Two-factor authentication" : "Otentikasi Two-factor",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Keamanan tambahan diaktifkan untuk akun anda. Harap otentikasi menggunakan faktor kedua.",
+ "Cancel log in" : "Batalkan masuk log",
+ "Use backup code" : "Gunakan kode cadangan",
+ "Error while validating your second factor" : "Galat ketika memvalidasi faktor kedua anda",
"You are accessing the server from an untrusted domain." : "Anda mengakses server dari domain yang tidak terpercaya.",
"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." : "Silakan hubungi administrator Anda. Apabila Anda adalah administrator dari instansi ini, konfigurasikan aturan \"trusted_domains\" di config/config.php. Contoh konfigurasi disediakan di 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." : "Tergantung pada konfigurasi Anda, sebagai seorang administrator Anda kemungkinan dapat menggunakan tombol bawah untuk mempercayai domain ini.",
@@ -312,7 +341,6 @@
"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",
diff --git a/core/l10n/is.js b/core/l10n/is.js
index 1c20ea4faa6..ac8414d4cf8 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -109,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}",
@@ -207,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.",
@@ -307,7 +308,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/is.json b/core/l10n/is.json
index c4b579cd2bd..a389453cfc7 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -107,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}",
@@ -205,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.",
@@ -305,7 +306,6 @@
"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",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index 1e8630be362..b37eb695a1f 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -60,6 +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. 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",
@@ -121,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",
@@ -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!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index a2269c3dea2..877972e78f7 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -58,6 +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. 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",
@@ -119,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",
@@ -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!",
@@ -339,7 +341,6 @@
"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",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index c27c4f1c2ff..8b411db8077 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -60,6 +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. 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" : "いいえ",
@@ -121,6 +122,7 @@ OC.L10N.register(
"Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
+ "Allow editing" : "編集を許可",
"File drop (upload only)" : "ファイルドロップ(アップロードのみ)",
"Email link to person" : "メールリンク",
"Send" : "送信",
@@ -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!" : "サーバーサイドの認証に失敗しました!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"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" : "メールを送信しました",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index f43227e85b4..03bfcd2173e 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -58,6 +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. 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" : "いいえ",
@@ -119,6 +120,7 @@
"Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
+ "Allow editing" : "編集を許可",
"File drop (upload only)" : "ファイルドロップ(アップロードのみ)",
"Email link to person" : "メールリンク",
"Send" : "送信",
@@ -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!" : "サーバーサイドの認証に失敗しました!",
@@ -339,7 +341,6 @@
"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" : "メールを送信しました",
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index 446672597f0..11ec45f71a9 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -119,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}와(과) 공유 중",
@@ -220,8 +221,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" : "로그아웃",
"This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:",
"Confirm your password" : "암호를 입력하십시오",
"Server side authentication failed!" : "서버 인증 실패!",
@@ -322,7 +323,6 @@ OC.L10N.register(
"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자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
"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>를 참고하십시오.",
- "Allow editing" : "편집 허용",
"Hide file listing" : "숨김 파일 목록",
"Sending ..." : "전송 중...",
"Email sent" : "이메일 발송됨",
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index 8341f8a846a..c36e174afb3 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -117,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}와(과) 공유 중",
@@ -218,8 +219,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" : "로그아웃",
"This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:",
"Confirm your password" : "암호를 입력하십시오",
"Server side authentication failed!" : "서버 인증 실패!",
@@ -320,7 +321,6 @@
"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자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
"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>를 참고하십시오.",
- "Allow editing" : "편집 허용",
"Hide file listing" : "숨김 파일 목록",
"Sending ..." : "전송 중...",
"Email sent" : "이메일 발송됨",
diff --git a/core/l10n/lv.js b/core/l10n/lv.js
new file mode 100644
index 00000000000..a821b440181
--- /dev/null
+++ b/core/l10n/lv.js
@@ -0,0 +1,304 @@
+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",
+ "The share will expire on %s." : "Koplietošana beigsies %s.",
+ "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..e5e0d59b293
--- /dev/null
+++ b/core/l10n/lv.json
@@ -0,0 +1,302 @@
+{ "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",
+ "The share will expire on %s." : "Koplietošana beigsies %s.",
+ "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 c8083c8fe3a..4a34917025b 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -117,6 +117,7 @@ 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",
@@ -142,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...",
@@ -224,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.",
@@ -233,8 +236,8 @@ 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!",
@@ -334,7 +337,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index 4e7eeedb33a..a7504ffb97f 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -115,6 +115,7 @@
"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",
@@ -140,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...",
@@ -222,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.",
@@ -231,8 +234,8 @@
"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!",
@@ -332,7 +335,6 @@
"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",
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 4c3dc21b210..af191be30b1 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -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",
@@ -240,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!",
@@ -342,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index 9109a279abb..c53918ff27a 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -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",
@@ -238,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!",
@@ -340,7 +341,6 @@
"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",
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 6fef626b0ea..44bb7d06d17 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -70,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",
@@ -111,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}",
@@ -164,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",
@@ -175,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",
@@ -217,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.",
@@ -226,8 +228,8 @@ 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ę!",
@@ -326,7 +328,6 @@ OC.L10N.register(
"Nov." : "Lis.",
"Dec." : "Gru.",
"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 ",
- "Allow editing" : "Pozwól na edycję",
"Hide file listing" : "Schowaj listę plików",
"Sending ..." : "Wysyłanie...",
"Email sent" : "E-mail wysłany",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index c768d3bf79f..a7ccd87a34c 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -68,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",
@@ -109,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}",
@@ -162,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",
@@ -173,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",
@@ -215,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.",
@@ -224,8 +226,8 @@
"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ę!",
@@ -324,7 +326,6 @@
"Nov." : "Lis.",
"Dec." : "Gru.",
"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 ",
- "Allow editing" : "Pozwól na edycję",
"Hide file listing" : "Schowaj listę plików",
"Sending ..." : "Wysyłanie...",
"Email sent" : "E-mail wysłany",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 0f073a81176..7f5bea95d53 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -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",
@@ -240,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!",
@@ -282,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.",
@@ -342,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 83f931be39c..caa468c1de4 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -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",
@@ -238,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!",
@@ -280,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.",
@@ -340,7 +341,6 @@
"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",
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index 3dc75f4f190..28fc45b20e2 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -103,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}",
@@ -196,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.",
@@ -290,7 +291,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index 54693ed0609..fd0d06d47a4 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -101,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}",
@@ -194,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.",
@@ -288,7 +289,6 @@
"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",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index ee9b5d8a270..9487a79c578 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -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" : "Отправить",
@@ -240,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. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.",
- "Log out" : "Выйти",
"Search" : "Найти",
+ "Log out" : "Выйти",
"This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:",
"Confirm your password" : "Подтвердите свой пароль",
"Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!",
@@ -342,7 +343,6 @@ OC.L10N.register(
"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" : "Письмо отправлено",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index f55f0e0cca2..0644b0af787 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -120,6 +120,7 @@
"Link" : "Ссылка",
"Password protect" : "Защитить паролем",
"Allow upload and editing" : "Разрешить загрузку и редактирование",
+ "Allow editing" : "Разрешить редактирование",
"File drop (upload only)" : "Хранилище (только для приема файлов)",
"Email link to person" : "Отправить ссылку по электронной почте",
"Send" : "Отправить",
@@ -238,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. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.",
- "Log out" : "Выйти",
"Search" : "Найти",
+ "Log out" : "Выйти",
"This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:",
"Confirm your password" : "Подтвердите свой пароль",
"Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!",
@@ -340,7 +341,6 @@
"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" : "Письмо отправлено",
diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js
index f09fefc1343..0b1e2d05f07 100644
--- a/core/l10n/sk_SK.js
+++ b/core/l10n/sk_SK.js
@@ -111,6 +111,7 @@ OC.L10N.register(
"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}",
@@ -207,8 +208,8 @@ OC.L10N.register(
"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",
- "Log out" : "Odhlásiť",
"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.",
@@ -298,7 +299,6 @@ OC.L10N.register(
"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>.",
- "Allow editing" : "Povoliť úpravy",
"Sending ..." : "Odosielam ...",
"Email sent" : "Email odoslaný",
"notify by email" : "informovať emailom",
diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json
index 52cd2b135d4..ae464c73869 100644
--- a/core/l10n/sk_SK.json
+++ b/core/l10n/sk_SK.json
@@ -109,6 +109,7 @@
"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}",
@@ -205,8 +206,8 @@
"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",
- "Log out" : "Odhlásiť",
"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.",
@@ -296,7 +297,6 @@
"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>.",
- "Allow editing" : "Povoliť úpravy",
"Sending ..." : "Odosielam ...",
"Email sent" : "Email odoslaný",
"notify by email" : "informovať emailom",
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index 17f6185aa0d..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",
@@ -107,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}.",
@@ -205,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 +305,6 @@ OC.L10N.register(
"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?" : "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?",
- "Allow editing" : "Dovoli urejanje",
"Hide file listing" : "Skrij spisek datotek",
"Sending ..." : "Pošiljanje ...",
"Email sent" : "Elektronska pošta je poslana",
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index a9c6cd78d1a..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",
@@ -105,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}.",
@@ -203,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 +303,6 @@
"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?" : "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?",
- "Allow editing" : "Dovoli urejanje",
"Hide file listing" : "Skrij spisek datotek",
"Sending ..." : "Pošiljanje ...",
"Email sent" : "Elektronska pošta je poslana",
diff --git a/core/l10n/sq.js b/core/l10n/sq.js
index 729ce181d33..29a0ee5ff97 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -60,6 +60,7 @@ OC.L10N.register(
"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. 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",
@@ -121,6 +122,7 @@ OC.L10N.register(
"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",
@@ -239,8 +241,8 @@ 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!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index 5e15937e5b4..b61584cc5f3 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -58,6 +58,7 @@
"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. 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",
@@ -119,6 +120,7 @@
"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",
@@ -237,8 +239,8 @@
"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!",
@@ -339,7 +341,6 @@
"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",
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index 7e220940d23..f5cad1205bd 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -60,6 +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. 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",
@@ -121,6 +122,7 @@ 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" : "Skicka länken som e-postmeddelande",
"Send" : "Skicka",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Behöver du hjälp?",
"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!",
@@ -341,7 +343,6 @@ OC.L10N.register(
"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å 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>.",
- "Allow editing" : "Tillåt redigering",
"Hide file listing" : "Dölj filer i mappen",
"Sending ..." : "Skickar ...",
"Email sent" : "E-post skickat",
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index b709cdeaa8c..642187b356c 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -58,6 +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. 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",
@@ -119,6 +120,7 @@
"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" : "Skicka länken som e-postmeddelande",
"Send" : "Skicka",
@@ -237,8 +239,8 @@
"Need help?" : "Behöver du hjälp?",
"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!",
@@ -339,7 +341,6 @@
"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å 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>.",
- "Allow editing" : "Tillåt redigering",
"Hide file listing" : "Dölj filer i mappen",
"Sending ..." : "Skickar ...",
"Email sent" : "E-post skickat",
diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js
index beb7f903de8..09129861c82 100644
--- a/core/l10n/th_TH.js
+++ b/core/l10n/th_TH.js
@@ -97,6 +97,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}",
@@ -181,8 +182,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." : "กรุณาติดต่อผู้ดูแลระบบ",
"Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ",
@@ -268,7 +269,6 @@ OC.L10N.register(
"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 /> คุณต้องการดำเนินการต่อ?",
- "Allow editing" : "อนุญาตให้แก้ไข",
"Sending ..." : "กำลังส่ง...",
"Email sent" : "ส่งอีเมล์แล้ว",
"notify by email" : "แจ้งเตือนทางอีเมล",
diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json
index 745b520128a..589a776139f 100644
--- a/core/l10n/th_TH.json
+++ b/core/l10n/th_TH.json
@@ -95,6 +95,7 @@
"Share link" : "แชร์ลิงค์",
"Link" : "ลิงค์",
"Password protect" : "ป้องกันด้วยรหัสผ่าน",
+ "Allow editing" : "อนุญาตให้แก้ไข",
"Email link to person" : "ส่งลิงก์ให้ทางอีเมล",
"Send" : "ส่ง",
"Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}",
@@ -179,8 +180,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." : "กรุณาติดต่อผู้ดูแลระบบ",
"Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ",
@@ -266,7 +267,6 @@
"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 /> คุณต้องการดำเนินการต่อ?",
- "Allow editing" : "อนุญาตให้แก้ไข",
"Sending ..." : "กำลังส่ง...",
"Email sent" : "ส่งอีเมล์แล้ว",
"notify by email" : "แจ้งเตือนทางอีเมล",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 92e3ce5ba70..f938e97716a 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -108,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ış",
@@ -203,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.",
@@ -297,7 +298,6 @@ OC.L10N.register(
"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",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 764d16e978a..79c15a5ecee 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -106,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ış",
@@ -201,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.",
@@ -295,7 +296,6 @@
"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",
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index 45b8810cd50..aef131f69fe 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -95,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}",
@@ -186,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 +279,6 @@ OC.L10N.register(
"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 /> Ви дійсно хочете продовжити?",
- "Allow editing" : "Дозволити редагування",
"Sending ..." : "Надсилання...",
"Email sent" : "Лист надіслано",
"Send link via email" : "Надіслати посилання електронною поштою",
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index d93853483d5..da69ffaea29 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -93,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}",
@@ -184,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 +277,6 @@
"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 /> Ви дійсно хочете продовжити?",
- "Allow editing" : "Дозволити редагування",
"Sending ..." : "Надсилання...",
"Email sent" : "Лист надіслано",
"Send link via email" : "Надіслати посилання електронною поштою",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index 9018b26d645..4157cb3d1c3 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -1,7 +1,7 @@
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." : "无法读取所选文件.",
@@ -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" : "发送",
@@ -145,7 +146,7 @@ OC.L10N.register(
"An error occurred. Please try again" : "发生错误. 请重试.",
"{sharee} (group)" : "{sharee} (分组)",
"{sharee} (remote)" : "{sharee} (外部)",
- "{sharee} (email)" : "{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..." : "通过邮件分享...",
@@ -240,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. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.",
- "Log out" : "注销",
"Search" : "搜索",
+ "Log out" : "注销",
"This action requires you to confirm your password:" : "此操作需要确认您的密码:",
"Confirm your password" : "确认您的密码",
"Server side authentication failed!" : "服务端认证失败!",
@@ -308,13 +309,13 @@ OC.L10N.register(
"Thu." : "周四",
"Fri." : "周五",
"Sat." : "周六",
- "Su" : "日",
- "Mo" : "一",
+ "Su" : "日",
+ "Mo" : "一",
"Tu" : "二",
- "We" : "三",
+ "We" : "三",
"Th" : "四",
"Fr" : "五",
- "Sa" : "六",
+ "Sa" : "六",
"January" : "一月",
"February" : "二月",
"March" : "三月",
@@ -342,7 +343,6 @@ OC.L10N.register(
"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>.",
- "Allow editing" : "允许编辑",
"Hide file listing" : "隐藏列出的文件",
"Sending ..." : "正在发送...",
"Email sent" : "邮件已发送",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index c6efd72710f..b99348b05ee 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -1,5 +1,5 @@
{ "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." : "无法读取所选文件.",
@@ -120,6 +120,7 @@
"Link" : "链接",
"Password protect" : "密码保护",
"Allow upload and editing" : "允许上传和编辑",
+ "Allow editing" : "允许编辑",
"File drop (upload only)" : "文件拖拽 (仅上传)",
"Email link to person" : "发送链接到个人",
"Send" : "发送",
@@ -143,7 +144,7 @@
"An error occurred. Please try again" : "发生错误. 请重试.",
"{sharee} (group)" : "{sharee} (分组)",
"{sharee} (remote)" : "{sharee} (外部)",
- "{sharee} (email)" : "{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..." : "通过邮件分享...",
@@ -238,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. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.",
- "Log out" : "注销",
"Search" : "搜索",
+ "Log out" : "注销",
"This action requires you to confirm your password:" : "此操作需要确认您的密码:",
"Confirm your password" : "确认您的密码",
"Server side authentication failed!" : "服务端认证失败!",
@@ -306,13 +307,13 @@
"Thu." : "周四",
"Fri." : "周五",
"Sat." : "周六",
- "Su" : "日",
- "Mo" : "一",
+ "Su" : "日",
+ "Mo" : "一",
"Tu" : "二",
- "We" : "三",
+ "We" : "三",
"Th" : "四",
"Fr" : "五",
- "Sa" : "六",
+ "Sa" : "六",
"January" : "一月",
"February" : "二月",
"March" : "三月",
@@ -340,7 +341,6 @@
"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>.",
- "Allow editing" : "允许编辑",
"Hide file listing" : "隐藏列出的文件",
"Sending ..." : "正在发送...",
"Email sent" : "邮件已发送",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 45fa22b72a8..81b2e43f908 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -49,14 +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. 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" : "好",
@@ -72,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" : "密碼強度普通",
@@ -79,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}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定",
@@ -103,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}",
@@ -201,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 +306,6 @@ OC.L10N.register(
"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/>您確定要繼續嗎?",
- "Allow editing" : "允許編輯",
"Hide file listing" : "隱藏檔案列表",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index e3a8544d9db..8dd18be415a 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -47,14 +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. 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" : "好",
@@ -70,6 +76,7 @@
"(all selected)" : "(已全選)",
"({count} selected)" : "(已選 {count} 項)",
"Error loading file exists template" : "載入檔案存在樣板出錯",
+ "Pending" : "等候中",
"Very weak password" : "密碼強度非常弱",
"Weak password" : "密碼強度弱",
"So-so password" : "密碼強度普通",
@@ -77,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}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定",
@@ -101,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}",
@@ -199,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 +304,6 @@
"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/>您確定要繼續嗎?",
- "Allow editing" : "允許編輯",
"Hide file listing" : "隱藏檔案列表",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
diff --git a/core/routes.php b/core/routes.php
index 6f1892d19ac..5d61d58e037 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -59,7 +59,6 @@ $application->registerRoutes($this, [
],
'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 2f645454128..058049d8946 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -108,13 +108,13 @@ script('core', [
autocomplete="off" autocapitalize="off" autocorrect="off">
</p>
<p class="groupmiddle">
- <input type="password" name="dbpass" id="dbpass" data-typetoggle="#dbpassword"
+ <input type="password" name="dbpass" id="dbpass" data-typetoggle="#dbpassword-toggle"
placeholder="<?php p($l->t( 'Database password' )); ?>"
value="<?php p($_['dbpass']); ?>"
autocomplete="off" autocapitalize="off" autocorrect="off">
<label for="dbpass" class="infield"><?php p($l->t( 'Database password' )); ?></label>
- <input type="checkbox" id="dbpassword" name="dbpassword">
- <label for="dbpassword"></label>
+ <input type="checkbox" id="dbpassword-toggle" name="dbpassword-toggle">
+ <label for="dbpassword-toggle"></label>
</p>
<p class="groupmiddle">
<label for="dbname" class="infield"><?php p($l->t( 'Database name' )); ?></label>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index c53e016c1c2..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">
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/issue_template.md b/issue_template.md
index 70eca36c9b6..6714371a4eb 100644
--- a/issue_template.md
+++ b/issue_template.md
@@ -104,6 +104,7 @@ Eventually replace sensitive data as the name/IP-address of your LDAP server or
#### Web server error log
<details>
<summary>Web server error log</summary>
+
```
Insert your webserver log here
```
@@ -112,6 +113,7 @@ Insert your webserver log here
#### Nextcloud log (data/nextcloud.log)
<details>
<summary>Nextcloud log</summary>
+
```
Insert your Nextcloud log here
```
@@ -120,6 +122,7 @@ Insert your Nextcloud log here
#### Browser log
<details>
<summary>Browser log</summary>
+
```
Insert your browser log here, this could for example include:
diff --git a/l10n/.tx/config b/l10n/.tx/config
index 3554cf6954b..3368c3e7097 100644
--- a/l10n/.tx/config
+++ b/l10n/.tx/config
@@ -86,6 +86,12 @@ source_file = templates/federation.pot
source_lang = en
type = PO
+[nextcloud.sharebymail]
+file_filter = <lang>/sharebymail.po
+source_file = templates/sharebymail.pot
+source_lang = en
+type = PO
+
[nextcloud.systemtags]
file_filter = <lang>/systemtags.po
source_file = templates/systemtags.pot
diff --git a/lib/base.php b/lib/base.php
index 23eda212f03..9f480c0b0dc 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -281,7 +281,6 @@ class OC {
// render error page
$template = new OC_Template('', 'update.user', 'guest');
OC_Util::addScript('maintenance-check');
- OC_Util::addStyle('update');
$template->printPage();
die();
}
@@ -355,8 +354,6 @@ class OC {
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 120');
- \OCP\Util::addStyle('update');
-
// render error page
$template = new OC_Template('', 'update.use-cli', 'guest');
$template->assign('productName', 'nextcloud'); // for now
@@ -376,9 +373,8 @@ 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');
/** @var \OC\App\AppManager $appManager */
$appManager = \OC::$server->getAppManager();
@@ -708,6 +704,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;
}
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index d0ca4646e52..5bd9da04072 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -54,7 +54,10 @@ return array(
'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',
@@ -95,6 +98,8 @@ return array(
'OCP\\Encryption\\IFile' => $baseDir . '/lib/public/Encryption/IFile.php',
'OCP\\Encryption\\IManager' => $baseDir . '/lib/public/Encryption/IManager.php',
'OCP\\Encryption\\Keys\\IStorage' => $baseDir . '/lib/public/Encryption/Keys/IStorage.php',
+ 'OCP\\Federation\\ICloudId' => $baseDir . '/lib/public/Federation/ICloudId.php',
+ 'OCP\\Federation\\ICloudIdManager' => $baseDir . '/lib/public/Federation/ICloudIdManager.php',
'OCP\\Files' => $baseDir . '/lib/public/Files.php',
'OCP\\Files\\AlreadyExistsException' => $baseDir . '/lib/public/Files/AlreadyExistsException.php',
'OCP\\Files\\Cache\\ICache' => $baseDir . '/lib/public/Files/Cache/ICache.php',
@@ -131,6 +136,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',
@@ -225,6 +233,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',
@@ -320,6 +329,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',
@@ -488,6 +499,8 @@ return array(
'OC\\Encryption\\Manager' => $baseDir . '/lib/private/Encryption/Manager.php',
'OC\\Encryption\\Update' => $baseDir . '/lib/private/Encryption/Update.php',
'OC\\Encryption\\Util' => $baseDir . '/lib/private/Encryption/Util.php',
+ 'OC\\Federation\\CloudId' => $baseDir . '/lib/private/Federation/CloudId.php',
+ 'OC\\Federation\\CloudIdManager' => $baseDir . '/lib/private/Federation/CloudIdManager.php',
'OC\\Files\\AppData\\AppData' => $baseDir . '/lib/private/Files/AppData/AppData.php',
'OC\\Files\\AppData\\Factory' => $baseDir . '/lib/private/Files/AppData/Factory.php',
'OC\\Files\\Cache\\Cache' => $baseDir . '/lib/private/Files/Cache/Cache.php',
@@ -526,6 +539,8 @@ 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',
@@ -665,7 +680,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',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 6fe9a95c249..475b4c15542 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -84,7 +84,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'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',
@@ -125,6 +128,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Encryption\\IFile' => __DIR__ . '/../../..' . '/lib/public/Encryption/IFile.php',
'OCP\\Encryption\\IManager' => __DIR__ . '/../../..' . '/lib/public/Encryption/IManager.php',
'OCP\\Encryption\\Keys\\IStorage' => __DIR__ . '/../../..' . '/lib/public/Encryption/Keys/IStorage.php',
+ 'OCP\\Federation\\ICloudId' => __DIR__ . '/../../..' . '/lib/public/Federation/ICloudId.php',
+ 'OCP\\Federation\\ICloudIdManager' => __DIR__ . '/../../..' . '/lib/public/Federation/ICloudIdManager.php',
'OCP\\Files' => __DIR__ . '/../../..' . '/lib/public/Files.php',
'OCP\\Files\\AlreadyExistsException' => __DIR__ . '/../../..' . '/lib/public/Files/AlreadyExistsException.php',
'OCP\\Files\\Cache\\ICache' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/ICache.php',
@@ -161,6 +166,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',
@@ -255,6 +263,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',
@@ -350,6 +359,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',
@@ -518,6 +529,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Encryption\\Manager' => __DIR__ . '/../../..' . '/lib/private/Encryption/Manager.php',
'OC\\Encryption\\Update' => __DIR__ . '/../../..' . '/lib/private/Encryption/Update.php',
'OC\\Encryption\\Util' => __DIR__ . '/../../..' . '/lib/private/Encryption/Util.php',
+ 'OC\\Federation\\CloudId' => __DIR__ . '/../../..' . '/lib/private/Federation/CloudId.php',
+ 'OC\\Federation\\CloudIdManager' => __DIR__ . '/../../..' . '/lib/private/Federation/CloudIdManager.php',
'OC\\Files\\AppData\\AppData' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/AppData.php',
'OC\\Files\\AppData\\Factory' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/Factory.php',
'OC\\Files\\Cache\\Cache' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/Cache.php',
@@ -556,6 +569,8 @@ 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',
@@ -695,7 +710,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',
diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js
new file mode 100644
index 00000000000..daa9ae7a3d6
--- /dev/null
+++ b/lib/l10n/ca.js
@@ -0,0 +1,177 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "No es pot escriure a la carpeta \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Això normalment es pot solucionar donant al servidor web permís d'escriptura a la carpeta de configuració",
+ "See %s" : "Comproveu %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
+ "Sample configuration detected" : "Configuració d'exemple detectada",
+ "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" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php",
+ "%1$s and %2$s" : "%1$s i %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s",
+ "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
+ "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior",
+ "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior",
+ "Unknown filetype" : "Tipus de fitxer desconegut",
+ "Invalid image" : "Imatge no vàlida",
+ "Avatar image is not square" : "La imatge de perfil no és quadrada",
+ "today" : "avui",
+ "yesterday" : "ahir",
+ "_%n day ago_::_%n days ago_" : ["fa %n dia","fa %n dies"],
+ "last month" : "el mes passat",
+ "_%n month ago_::_%n months ago_" : ["fa %n mes","fa %n mesos"],
+ "last year" : "l'any passat",
+ "_%n year ago_::_%n years ago_" : ["fa %n any","fa %n anys"],
+ "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"],
+ "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"],
+ "seconds ago" : "segons enrere",
+ "File name contains at least one invalid character" : "El nom del fitxer conté al menys un caràcter invàlid",
+ "File name is too long" : "el nom del fitxer es massa gran",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Configuració del Servidor",
+ "Sharing" : "Compartir",
+ "Encryption" : "Xifrat",
+ "Additional settings" : "Configuració adicional",
+ "Tips & tricks" : "Consells i trucs",
+ "%s enter the database username and name." : "%s escriviu el nom d'usuari i el nom de la base de dades.",
+ "%s enter the database username." : "%s escriviu el nom d'usuari de la base de dades.",
+ "%s enter the database name." : "%s escriviu el nom de la base de dades.",
+ "%s you may not use dots in the database name" : "%s no podeu usar punts en el nom de la base de dades",
+ "Oracle connection could not be established" : "No s'ha pogut establir la connexió Oracle",
+ "Oracle username and/or password not valid" : "Nom d'usuari i/o contrasenya Oracle no vàlids",
+ "DB Error: \"%s\"" : "Error DB: \"%s\"",
+ "Offending command was: \"%s\"" : "L'ordre en conflicte és: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Heu d'escriure un compte existent o el d'administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "L'ordre en conflicte és: \"%s\", nom: %s, contrasenya: %s",
+ "PostgreSQL username and/or password not valid" : "Nom d'usuari i/o contrasenya PostgreSQL no vàlids",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.",
+ "Set an admin username." : "Establiu un nom d'usuari per l'administrador.",
+ "Set an admin password." : "Establiu una contrasenya per l'administrador.",
+ "Invalid Federated Cloud ID" : "ID de núvol federat invàlid",
+ "%s shared »%s« with you" : "%s ha compartit »%s« amb tu",
+ "%s via %s" : "%s via %s",
+ "Sharing %s failed, because the file does not exist" : "Ha fallat en compartir %s, perquè el fitxer no existeix",
+ "You are not allowed to share %s" : "No se us permet compartir %s",
+ "Sharing %s failed, because the user %s does not exist" : "Ha fallat en compartir %s, perquè l'usuari %s no existeix",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ha fallat en compartir %s, perquè l'usuari %s no és membre de cap grup dels que %s és membre",
+ "Sharing %s failed, because this item is already shared with %s" : "Ha fallat en compartir %s, perquè l'element ja està compartit amb %s",
+ "Sharing %s failed, because the group %s does not exist" : "Ha fallat en compartir %s, perquè el grup %s no existeix",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Ha fallat en compartir %s, perquè %s no és membre del grup %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Heu de proporcionar una contrasenya per crear un enllaç públic. Només es permeten enllaços segurs.",
+ "Sharing %s failed, because sharing with links is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir amb enllaços",
+ "Not allowed to create a federated share with the same user" : "No està permés crear una compartició federada amb el mateix usuari",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La compartició de %s ha fallat, no es pot trobar %s, potser el servidor està actualment innacessible.",
+ "Share type %s is not valid for %s" : "La compartició tipus %s no és vàlida per %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en establir els permisos per %s perquè aquests excedeixen els permesos per a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Ha fallat en establir els permisos per %s, perquè no s'ha trobat l'element",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No es pot guardar la data d'expiració. Els fitxers o carpetes compartits no poden expirar més tard de %s després d'haver-se compratit.",
+ "Cannot set expiration date. Expiration date is in the past" : "No es pot guardar la data d'expiració. La data d'expiració ja ha passat.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El rerefons de compartició %s ha d'implementar la interfície OCP\\Share_Backend",
+ "Sharing backend %s not found" : "El rerefons de compartició %s no s'ha trobat",
+ "Sharing backend for %s not found" : "El rerefons de compartició per a %s no s'ha trobat",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en compartir %s perquè els permisos excedeixen els permesos per a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir de nou",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ha fallat en compartir %s, perquè el rerefons de compartir per %s no pot trobar la seva font",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Ha fallat en compartir %s, perquè el fitxer no s'ha trobat en el fitxer cau",
+ "Could not find category \"%s\"" : "No s'ha trobat la categoria \"%s\"",
+ "Sunday" : "Diumenge",
+ "Monday" : "Dilluns",
+ "Tuesday" : "Dimarts",
+ "Wednesday" : "Dimecres",
+ "Thursday" : "Dijous",
+ "Friday" : "Divendres",
+ "Saturday" : "Dissabte",
+ "Sun." : "Dg.",
+ "Mon." : "Mon.",
+ "Tue." : "Dm.",
+ "Wed." : "Dc.",
+ "Thu." : "Dj.",
+ "Fri." : "Dv.",
+ "Sat." : "Ds.",
+ "Su" : "Dg",
+ "Mo" : "Dl",
+ "Tu" : "Dm",
+ "We" : "Dc",
+ "Th" : "Dj",
+ "Fr" : "Dv",
+ "Sa" : "Ds",
+ "January" : "Gener",
+ "February" : "Febrer",
+ "March" : "Març",
+ "April" : "Abril",
+ "May" : "Maig",
+ "June" : "Juny",
+ "July" : "Juliol",
+ "August" : "Agost",
+ "September" : "Setembre",
+ "October" : "Octubre",
+ "November" : "Novembre",
+ "December" : "Desembre",
+ "Jan." : "Gen.",
+ "Feb." : "Febr.",
+ "Mar." : "Març",
+ "Apr." : "Abr",
+ "May." : "Maig",
+ "Jun." : "Juny",
+ "Jul." : "Jul.",
+ "Aug." : "Ag.",
+ "Sep." : "Set",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Des.",
+ "Apps" : "Aplicacions",
+ "A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
+ "A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
+ "The username is already being used" : "El nom d'usuari ja està en ús",
+ "Login canceled by app" : "Accés cancel·lat per l'App",
+ "User disabled" : "Usuari desactivat",
+ "Help" : "Ajuda",
+ "Personal" : "Personal",
+ "Users" : "Usuaris",
+ "Admin" : "Administració",
+ "No app name specified" : "No heu especificat cap nom d'aplicació",
+ "Can't read file" : "No es pot llegir el fitxer",
+ "Application is not enabled" : "L'aplicació no està habilitada",
+ "Authentication error" : "Error d'autenticació",
+ "Token expired. Please reload page." : "El testimoni ha expirat. Torneu a carregar la pàgina.",
+ "Unknown user" : "Usuari desconegut",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).",
+ "Cannot write into \"config\" directory" : "No es pot escriure a la carpeta \"config\"",
+ "Cannot write into \"apps\" directory" : "No es pot escriure a la carpeta \"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." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta d'aplicacions %s o inhabilitant la botiga d'aplicacions en el fitxer de configuració.",
+ "Cannot create \"data\" directory (%s)" : "No es pot crear la carpeta \"data\" (%s)",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
+ "Setting locale to %s failed" : "Ha fallat en establir la llengua a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.",
+ "Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.",
+ "PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Això probablement està provocat per una cau/accelerador com Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "S'han instal·lat mòduls PHP, però encara es llisten com una mancança?",
+ "Please ask your server administrator to restart the web server." : "Demaneu a l'administrador que reinici el servidor web.",
+ "PostgreSQL >= 9 required" : "Es requereix PostgreSQL >= 9",
+ "Please upgrade your database version" : "Actualitzeu la versió de la base de dades",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Canvieu els permisos a 0770 per tal que la carpeta no es pugui llistar per altres usuaris.",
+ "Data directory (%s) is readable by other users" : "La carpeta de dades (%s) és llegible per altres usuaris",
+ "Data directory (%s) is invalid" : "La carpeta de dades (%s) no és vàlida",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Comproveu que la carpeta de dades contingui un fitxer \".ocdata\" a la seva arrel.",
+ "Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\".",
+ "App directory already exists" : "La carpeta de l'aplicació ja existeix",
+ "Can't create app folder. Please fix permissions. %s" : "No es pot crear la carpeta de l'aplicació. Arregleu els permisos. %s",
+ "No source specified when installing app" : "No heu especificat la font en instal·lar l'aplicació",
+ "No href specified when installing app from http" : "No heu especificat href en instal·lar l'aplicació des de http",
+ "No path specified when installing app from local file" : "No heu seleccionat el camí en instal·lar una aplicació des d'un fitxer local",
+ "Archives of type %s are not supported" : "Els fitxers del tipus %s no són compatibles",
+ "Failed to open archive when installing app" : "Ha fallat l'obertura del fitxer en instal·lar l'aplicació",
+ "App does not provide an info.xml file" : "L'aplicació no proporciona un fitxer info.xml",
+ "App can't be installed because of not allowed code in the App" : "L'aplicació no es pot instal·lar perquè hi ha codi no autoritzat en l'aplicació",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'aplicació no es pot instal·lar perquè conté l'etiqueta <shipped>vertader</shipped> que no es permet per aplicacions no enviades",
+ "Logging" : "Iniciant",
+ "Recommended" : "Recomanat",
+ "Microsoft Windows Platform is not supported" : "La plataforma de Microsoft Windows no està soportat!",
+ "Storage not available" : "Emmagatzemament no disponible"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json
new file mode 100644
index 00000000000..f6c692aef0d
--- /dev/null
+++ b/lib/l10n/ca.json
@@ -0,0 +1,175 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "No es pot escriure a la carpeta \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Això normalment es pot solucionar donant al servidor web permís d'escriptura a la carpeta de configuració",
+ "See %s" : "Comproveu %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
+ "Sample configuration detected" : "Configuració d'exemple detectada",
+ "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" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php",
+ "%1$s and %2$s" : "%1$s i %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s",
+ "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
+ "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior",
+ "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior",
+ "Unknown filetype" : "Tipus de fitxer desconegut",
+ "Invalid image" : "Imatge no vàlida",
+ "Avatar image is not square" : "La imatge de perfil no és quadrada",
+ "today" : "avui",
+ "yesterday" : "ahir",
+ "_%n day ago_::_%n days ago_" : ["fa %n dia","fa %n dies"],
+ "last month" : "el mes passat",
+ "_%n month ago_::_%n months ago_" : ["fa %n mes","fa %n mesos"],
+ "last year" : "l'any passat",
+ "_%n year ago_::_%n years ago_" : ["fa %n any","fa %n anys"],
+ "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"],
+ "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"],
+ "seconds ago" : "segons enrere",
+ "File name contains at least one invalid character" : "El nom del fitxer conté al menys un caràcter invàlid",
+ "File name is too long" : "el nom del fitxer es massa gran",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Configuració del Servidor",
+ "Sharing" : "Compartir",
+ "Encryption" : "Xifrat",
+ "Additional settings" : "Configuració adicional",
+ "Tips & tricks" : "Consells i trucs",
+ "%s enter the database username and name." : "%s escriviu el nom d'usuari i el nom de la base de dades.",
+ "%s enter the database username." : "%s escriviu el nom d'usuari de la base de dades.",
+ "%s enter the database name." : "%s escriviu el nom de la base de dades.",
+ "%s you may not use dots in the database name" : "%s no podeu usar punts en el nom de la base de dades",
+ "Oracle connection could not be established" : "No s'ha pogut establir la connexió Oracle",
+ "Oracle username and/or password not valid" : "Nom d'usuari i/o contrasenya Oracle no vàlids",
+ "DB Error: \"%s\"" : "Error DB: \"%s\"",
+ "Offending command was: \"%s\"" : "L'ordre en conflicte és: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Heu d'escriure un compte existent o el d'administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "L'ordre en conflicte és: \"%s\", nom: %s, contrasenya: %s",
+ "PostgreSQL username and/or password not valid" : "Nom d'usuari i/o contrasenya PostgreSQL no vàlids",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.",
+ "Set an admin username." : "Establiu un nom d'usuari per l'administrador.",
+ "Set an admin password." : "Establiu una contrasenya per l'administrador.",
+ "Invalid Federated Cloud ID" : "ID de núvol federat invàlid",
+ "%s shared »%s« with you" : "%s ha compartit »%s« amb tu",
+ "%s via %s" : "%s via %s",
+ "Sharing %s failed, because the file does not exist" : "Ha fallat en compartir %s, perquè el fitxer no existeix",
+ "You are not allowed to share %s" : "No se us permet compartir %s",
+ "Sharing %s failed, because the user %s does not exist" : "Ha fallat en compartir %s, perquè l'usuari %s no existeix",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ha fallat en compartir %s, perquè l'usuari %s no és membre de cap grup dels que %s és membre",
+ "Sharing %s failed, because this item is already shared with %s" : "Ha fallat en compartir %s, perquè l'element ja està compartit amb %s",
+ "Sharing %s failed, because the group %s does not exist" : "Ha fallat en compartir %s, perquè el grup %s no existeix",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Ha fallat en compartir %s, perquè %s no és membre del grup %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Heu de proporcionar una contrasenya per crear un enllaç públic. Només es permeten enllaços segurs.",
+ "Sharing %s failed, because sharing with links is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir amb enllaços",
+ "Not allowed to create a federated share with the same user" : "No està permés crear una compartició federada amb el mateix usuari",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La compartició de %s ha fallat, no es pot trobar %s, potser el servidor està actualment innacessible.",
+ "Share type %s is not valid for %s" : "La compartició tipus %s no és vàlida per %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en establir els permisos per %s perquè aquests excedeixen els permesos per a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Ha fallat en establir els permisos per %s, perquè no s'ha trobat l'element",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No es pot guardar la data d'expiració. Els fitxers o carpetes compartits no poden expirar més tard de %s després d'haver-se compratit.",
+ "Cannot set expiration date. Expiration date is in the past" : "No es pot guardar la data d'expiració. La data d'expiració ja ha passat.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El rerefons de compartició %s ha d'implementar la interfície OCP\\Share_Backend",
+ "Sharing backend %s not found" : "El rerefons de compartició %s no s'ha trobat",
+ "Sharing backend for %s not found" : "El rerefons de compartició per a %s no s'ha trobat",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en compartir %s perquè els permisos excedeixen els permesos per a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir de nou",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ha fallat en compartir %s, perquè el rerefons de compartir per %s no pot trobar la seva font",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Ha fallat en compartir %s, perquè el fitxer no s'ha trobat en el fitxer cau",
+ "Could not find category \"%s\"" : "No s'ha trobat la categoria \"%s\"",
+ "Sunday" : "Diumenge",
+ "Monday" : "Dilluns",
+ "Tuesday" : "Dimarts",
+ "Wednesday" : "Dimecres",
+ "Thursday" : "Dijous",
+ "Friday" : "Divendres",
+ "Saturday" : "Dissabte",
+ "Sun." : "Dg.",
+ "Mon." : "Mon.",
+ "Tue." : "Dm.",
+ "Wed." : "Dc.",
+ "Thu." : "Dj.",
+ "Fri." : "Dv.",
+ "Sat." : "Ds.",
+ "Su" : "Dg",
+ "Mo" : "Dl",
+ "Tu" : "Dm",
+ "We" : "Dc",
+ "Th" : "Dj",
+ "Fr" : "Dv",
+ "Sa" : "Ds",
+ "January" : "Gener",
+ "February" : "Febrer",
+ "March" : "Març",
+ "April" : "Abril",
+ "May" : "Maig",
+ "June" : "Juny",
+ "July" : "Juliol",
+ "August" : "Agost",
+ "September" : "Setembre",
+ "October" : "Octubre",
+ "November" : "Novembre",
+ "December" : "Desembre",
+ "Jan." : "Gen.",
+ "Feb." : "Febr.",
+ "Mar." : "Març",
+ "Apr." : "Abr",
+ "May." : "Maig",
+ "Jun." : "Juny",
+ "Jul." : "Jul.",
+ "Aug." : "Ag.",
+ "Sep." : "Set",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Des.",
+ "Apps" : "Aplicacions",
+ "A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
+ "A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
+ "The username is already being used" : "El nom d'usuari ja està en ús",
+ "Login canceled by app" : "Accés cancel·lat per l'App",
+ "User disabled" : "Usuari desactivat",
+ "Help" : "Ajuda",
+ "Personal" : "Personal",
+ "Users" : "Usuaris",
+ "Admin" : "Administració",
+ "No app name specified" : "No heu especificat cap nom d'aplicació",
+ "Can't read file" : "No es pot llegir el fitxer",
+ "Application is not enabled" : "L'aplicació no està habilitada",
+ "Authentication error" : "Error d'autenticació",
+ "Token expired. Please reload page." : "El testimoni ha expirat. Torneu a carregar la pàgina.",
+ "Unknown user" : "Usuari desconegut",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).",
+ "Cannot write into \"config\" directory" : "No es pot escriure a la carpeta \"config\"",
+ "Cannot write into \"apps\" directory" : "No es pot escriure a la carpeta \"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." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta d'aplicacions %s o inhabilitant la botiga d'aplicacions en el fitxer de configuració.",
+ "Cannot create \"data\" directory (%s)" : "No es pot crear la carpeta \"data\" (%s)",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
+ "Setting locale to %s failed" : "Ha fallat en establir la llengua a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.",
+ "Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.",
+ "PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Això probablement està provocat per una cau/accelerador com Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "S'han instal·lat mòduls PHP, però encara es llisten com una mancança?",
+ "Please ask your server administrator to restart the web server." : "Demaneu a l'administrador que reinici el servidor web.",
+ "PostgreSQL >= 9 required" : "Es requereix PostgreSQL >= 9",
+ "Please upgrade your database version" : "Actualitzeu la versió de la base de dades",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Canvieu els permisos a 0770 per tal que la carpeta no es pugui llistar per altres usuaris.",
+ "Data directory (%s) is readable by other users" : "La carpeta de dades (%s) és llegible per altres usuaris",
+ "Data directory (%s) is invalid" : "La carpeta de dades (%s) no és vàlida",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Comproveu que la carpeta de dades contingui un fitxer \".ocdata\" a la seva arrel.",
+ "Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\".",
+ "App directory already exists" : "La carpeta de l'aplicació ja existeix",
+ "Can't create app folder. Please fix permissions. %s" : "No es pot crear la carpeta de l'aplicació. Arregleu els permisos. %s",
+ "No source specified when installing app" : "No heu especificat la font en instal·lar l'aplicació",
+ "No href specified when installing app from http" : "No heu especificat href en instal·lar l'aplicació des de http",
+ "No path specified when installing app from local file" : "No heu seleccionat el camí en instal·lar una aplicació des d'un fitxer local",
+ "Archives of type %s are not supported" : "Els fitxers del tipus %s no són compatibles",
+ "Failed to open archive when installing app" : "Ha fallat l'obertura del fitxer en instal·lar l'aplicació",
+ "App does not provide an info.xml file" : "L'aplicació no proporciona un fitxer info.xml",
+ "App can't be installed because of not allowed code in the App" : "L'aplicació no es pot instal·lar perquè hi ha codi no autoritzat en l'aplicació",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'aplicació no es pot instal·lar perquè conté l'etiqueta <shipped>vertader</shipped> que no es permet per aplicacions no enviades",
+ "Logging" : "Iniciant",
+ "Recommended" : "Recomanat",
+ "Microsoft Windows Platform is not supported" : "La plataforma de Microsoft Windows no està soportat!",
+ "Storage not available" : "Emmagatzemament no disponible"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
new file mode 100644
index 00000000000..f983c13b6e2
--- /dev/null
+++ b/lib/l10n/el.js
@@ -0,0 +1,199 @@
+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",
+ "Server version %s or higher is required." : "Απαιτείται έκδοση διακομιστή %s ή νεότερη.",
+ "Server version %s or lower is required." : "Απαιτείται έκδοση διακομιστή %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 χρόνια πριν"],
+ "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" : "Δεν επιτρέπονται αρχεία που ξεκινούν από τελεία - Dot ",
+ "Empty filename is not allowed" : "Δεν επιτρέπεται άδειο όνομα αρχείου",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Ρυθμίσεις διακομιστή",
+ "Sharing" : "Διαμοιρασμός",
+ "Encryption" : "Κρυπτογράφηση",
+ "Additional settings" : "Επιπρόσθετες ρυθμίσεις",
+ "%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",
+ "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-bit PHP και η επιλογη open_basedir έχει ρυθμιστεί στο αρχείο php.ini. Αυτό θα οδηγήσει σε προβλήματα με αρχεία πάνω από 4 GB και δεν συνίσταται.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Παρακαλώ αφαιρέστε την ρύθμιση open_basedir μέσα στο αρχείο php.ini ή αλλάξτε σε 64-bit PHP.",
+ "Set an admin username." : "Εισάγετε όνομα χρήστη διαχειριστή.",
+ "Set an admin password." : "Εισάγετε συνθηματικό διαχειριστή.",
+ "Can't create or write into the data directory %s" : "Αδύνατη η δημιουργία ή συγγραφή στον κατάλογο δεδομένων %s",
+ "Invalid Federated Cloud ID" : "Μη έγκυρο Federated Cloud 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 απέτυχε, γιατί δεν επιτρέπεται ο διαμοιρασμός με συνδέσμους",
+ "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 απέτυχε, γιατί το αρχείο δεν βρέθηκε στην προσωρινή αποθήκευση αρχείων",
+ "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" : "Εφαρμογές",
+ "A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
+ "A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
+ "The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο",
+ "Help" : "Βοήθεια",
+ "Personal" : "Προσωπικά",
+ "Users" : "Χρήστες",
+ "Admin" : "Διαχείριση",
+ "No app name specified" : "Δεν προδιορίστηκε όνομα εφαρμογής",
+ "App '%s' could not be installed!" : "Δεν μπορεί να εγκατασταθεί η εφαρμογή '%s'!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Αυτή η εφαρμογή %s δεν μπορεί να εγκατασταθεί διότι δεν πληρούνται οι ακόλουθες εξαρτήσεις: %s",
+ "File is currently busy, please try again later" : "Το αρχείο χρησιμοποιείται αυτή τη στιγμή, παρακαλώ προσπαθήστε αργότερα",
+ "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, or 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δίνοντας διακαιώματα εγγραφής για τον κατάλογο εφαρμογών στο διακομιστή δικτύου%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δίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%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." : "Η μονάδα %s PHP δεν είναι εγκατεστημένη. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Η ρύθμιση \"%s\"της PHP δεν είναι ορισμένη σε \"%s\".",
+ "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" : "Για να διορθώσετε αυτό το πρόβλημα ορίστε το <code>mbstring.func_overload</code> σε <code>0</code> στο αρχείο php.ini",
+ "To fix this issue update your libxml2 version and restart your web server." : "Για να διορθώσετε το σφάλμα ενημερώστε την έκδοση του libxml2 και επανεκκινήστε τον διακομιστή.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Η PHP φαίνεται να είναι ρυθμισμένη ώστε να αφαιρεί inline doc blocks. Αυτό θα καταστήσει πολλές βασικές εφαρμογές μη διαθέσιμες.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη 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." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να επανεκκινήσει το διακομιστή δικτύου σας.",
+ "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" : "Ελέγξτε την τιμή του \"Φάκελος Δεδομένων\" στις ρυθμίσεις σας",
+ "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.",
+ "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".",
+ "4-byte characters are not supported in file names" : "Χαρακτήρες 4-byte δεν υποστηρίζονται σε ονόματα αρχείων",
+ "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" : "Δεν προσδιορίστηκε href κατά την εγκατάσταση της εφαρμογής μέσω 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>σωστή</shipped> που δεν επιτρέπεται για μη-ενσωματωμένες εφαρμογές",
+ "Recommended" : "Προτείνεται",
+ "Microsoft Windows Platform is not supported" : "Η Πλατφόρμα Microsoft Windows δεν υποστηρίζεται",
+ "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
new file mode 100644
index 00000000000..c12a116e334
--- /dev/null
+++ b/lib/l10n/el.json
@@ -0,0 +1,197 @@
+{ "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",
+ "Server version %s or higher is required." : "Απαιτείται έκδοση διακομιστή %s ή νεότερη.",
+ "Server version %s or lower is required." : "Απαιτείται έκδοση διακομιστή %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 χρόνια πριν"],
+ "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" : "Δεν επιτρέπονται αρχεία που ξεκινούν από τελεία - Dot ",
+ "Empty filename is not allowed" : "Δεν επιτρέπεται άδειο όνομα αρχείου",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Ρυθμίσεις διακομιστή",
+ "Sharing" : "Διαμοιρασμός",
+ "Encryption" : "Κρυπτογράφηση",
+ "Additional settings" : "Επιπρόσθετες ρυθμίσεις",
+ "%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",
+ "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-bit PHP και η επιλογη open_basedir έχει ρυθμιστεί στο αρχείο php.ini. Αυτό θα οδηγήσει σε προβλήματα με αρχεία πάνω από 4 GB και δεν συνίσταται.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Παρακαλώ αφαιρέστε την ρύθμιση open_basedir μέσα στο αρχείο php.ini ή αλλάξτε σε 64-bit PHP.",
+ "Set an admin username." : "Εισάγετε όνομα χρήστη διαχειριστή.",
+ "Set an admin password." : "Εισάγετε συνθηματικό διαχειριστή.",
+ "Can't create or write into the data directory %s" : "Αδύνατη η δημιουργία ή συγγραφή στον κατάλογο δεδομένων %s",
+ "Invalid Federated Cloud ID" : "Μη έγκυρο Federated Cloud 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 απέτυχε, γιατί δεν επιτρέπεται ο διαμοιρασμός με συνδέσμους",
+ "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 απέτυχε, γιατί το αρχείο δεν βρέθηκε στην προσωρινή αποθήκευση αρχείων",
+ "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" : "Εφαρμογές",
+ "A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
+ "A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
+ "The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο",
+ "Help" : "Βοήθεια",
+ "Personal" : "Προσωπικά",
+ "Users" : "Χρήστες",
+ "Admin" : "Διαχείριση",
+ "No app name specified" : "Δεν προδιορίστηκε όνομα εφαρμογής",
+ "App '%s' could not be installed!" : "Δεν μπορεί να εγκατασταθεί η εφαρμογή '%s'!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Αυτή η εφαρμογή %s δεν μπορεί να εγκατασταθεί διότι δεν πληρούνται οι ακόλουθες εξαρτήσεις: %s",
+ "File is currently busy, please try again later" : "Το αρχείο χρησιμοποιείται αυτή τη στιγμή, παρακαλώ προσπαθήστε αργότερα",
+ "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, or 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δίνοντας διακαιώματα εγγραφής για τον κατάλογο εφαρμογών στο διακομιστή δικτύου%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δίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%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." : "Η μονάδα %s PHP δεν είναι εγκατεστημένη. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Η ρύθμιση \"%s\"της PHP δεν είναι ορισμένη σε \"%s\".",
+ "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" : "Για να διορθώσετε αυτό το πρόβλημα ορίστε το <code>mbstring.func_overload</code> σε <code>0</code> στο αρχείο php.ini",
+ "To fix this issue update your libxml2 version and restart your web server." : "Για να διορθώσετε το σφάλμα ενημερώστε την έκδοση του libxml2 και επανεκκινήστε τον διακομιστή.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Η PHP φαίνεται να είναι ρυθμισμένη ώστε να αφαιρεί inline doc blocks. Αυτό θα καταστήσει πολλές βασικές εφαρμογές μη διαθέσιμες.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη 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." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να επανεκκινήσει το διακομιστή δικτύου σας.",
+ "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" : "Ελέγξτε την τιμή του \"Φάκελος Δεδομένων\" στις ρυθμίσεις σας",
+ "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.",
+ "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".",
+ "4-byte characters are not supported in file names" : "Χαρακτήρες 4-byte δεν υποστηρίζονται σε ονόματα αρχείων",
+ "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" : "Δεν προσδιορίστηκε href κατά την εγκατάσταση της εφαρμογής μέσω 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>σωστή</shipped> που δεν επιτρέπεται για μη-ενσωματωμένες εφαρμογές",
+ "Recommended" : "Προτείνεται",
+ "Microsoft Windows Platform is not supported" : "Η Πλατφόρμα Microsoft Windows δεν υποστηρίζεται",
+ "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος"
+},"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 c473cc18a71..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 !",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 121c031e5a0..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 !",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index e345d5a079f..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",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index 7414b134f53..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",
diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
index 91bfe834f95..0e4854cdef0 100644
--- a/lib/l10n/sk_SK.js
+++ b/lib/l10n/sk_SK.js
@@ -36,6 +36,8 @@ OC.L10N.register(
"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",
@@ -64,6 +66,7 @@ OC.L10N.register(
"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",
@@ -72,6 +75,7 @@ OC.L10N.register(
"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",
@@ -136,6 +140,7 @@ OC.L10N.register(
"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",
@@ -146,6 +151,8 @@ OC.L10N.register(
"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",
@@ -161,14 +168,18 @@ OC.L10N.register(
"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ú?",
@@ -192,6 +203,8 @@ OC.L10N.register(
"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",
diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json
index f67c99dd28c..ddd42d62b8e 100644
--- a/lib/l10n/sk_SK.json
+++ b/lib/l10n/sk_SK.json
@@ -34,6 +34,8 @@
"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",
@@ -62,6 +64,7 @@
"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",
@@ -70,6 +73,7 @@
"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",
@@ -134,6 +138,7 @@
"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",
@@ -144,6 +149,8 @@
"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",
@@ -159,14 +166,18 @@
"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ú?",
@@ -190,6 +201,8 @@
"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",
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/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index 57499f3ffe8..0879b3e9330 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -93,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();
});
diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php
index 62d7fc7ed30..404c31879d2 100644
--- a/lib/private/AppFramework/Http/Request.php
+++ b/lib/private/AppFramework/Http/Request.php
@@ -490,7 +490,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
* @return bool
*/
private function cookieCheckRequired() {
- if($this->getCookie(session_name()) === null && $this->getCookie('oc_token') === null) {
+ if($this->getCookie(session_name()) === null && $this->getCookie('nc_token') === null) {
return false;
}
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/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/Federation/CloudId.php b/lib/private/Federation/CloudId.php
new file mode 100644
index 00000000000..6ba4ff9166b
--- /dev/null
+++ b/lib/private/Federation/CloudId.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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\Federation;
+
+use OCP\Federation\ICloudId;
+
+class CloudId implements ICloudId {
+ /** @var string */
+ private $id;
+ /** @var string */
+ private $user;
+ /** @var string */
+ private $remote;
+
+ /**
+ * CloudId constructor.
+ *
+ * @param string $id
+ * @param string $user
+ * @param string $remote
+ */
+ public function __construct($id, $user, $remote) {
+ $this->id = $id;
+ $this->user = $user;
+ $this->remote = $remote;
+ }
+
+ /**
+ * The full remote cloud id
+ *
+ * @return string
+ */
+ public function getId() {
+ return $this->id;
+ }
+
+ public function getDisplayId() {
+ return str_replace('https://', '', str_replace('http://', '', $this->getId()));
+ }
+
+ /**
+ * The username on the remote server
+ *
+ * @return string
+ */
+ public function getUser() {
+ return $this->user;
+ }
+
+ /**
+ * The base address of the remote server
+ *
+ * @return string
+ */
+ public function getRemote() {
+ return $this->remote;
+ }
+}
diff --git a/lib/private/Federation/CloudIdManager.php b/lib/private/Federation/CloudIdManager.php
new file mode 100644
index 00000000000..45cc69b306e
--- /dev/null
+++ b/lib/private/Federation/CloudIdManager.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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\Federation;
+
+use OCP\Federation\ICloudId;
+use OCP\Federation\ICloudIdManager;
+
+class CloudIdManager implements ICloudIdManager {
+ /**
+ * @param string $cloudId
+ * @return ICloudId
+ */
+ public function resolveCloudId($cloudId) {
+ // TODO magic here to get the url and user instead of just splitting on @
+
+ if (!$this->isValidCloudId($cloudId)) {
+ throw new \InvalidArgumentException('Invalid cloud id');
+ }
+
+ // Find the first character that is not allowed in user names
+ $id = $this->fixRemoteURL($cloudId);
+ $posSlash = strpos($id, '/');
+ $posColon = strpos($id, ':');
+
+ if ($posSlash === false && $posColon === false) {
+ $invalidPos = strlen($id);
+ } else if ($posSlash === false) {
+ $invalidPos = $posColon;
+ } else if ($posColon === false) {
+ $invalidPos = $posSlash;
+ } else {
+ $invalidPos = min($posSlash, $posColon);
+ }
+
+ // Find the last @ before $invalidPos
+ $pos = $lastAtPos = 0;
+ while ($lastAtPos !== false && $lastAtPos <= $invalidPos) {
+ $pos = $lastAtPos;
+ $lastAtPos = strpos($id, '@', $pos + 1);
+ }
+
+ if ($pos !== false) {
+ $user = substr($id, 0, $pos);
+ $remote = substr($id, $pos + 1);
+ if (!empty($user) && !empty($remote)) {
+ return new CloudId($id, $user, $remote);
+ }
+ }
+ throw new \InvalidArgumentException('Invalid cloud id');
+ }
+
+ /**
+ * @param string $user
+ * @param string $remote
+ * @return CloudId
+ */
+ public function getCloudId($user, $remote) {
+ // TODO check what the correct url is for remote (asking the remote)
+ return new CloudId($user. '@' . $remote, $user, $remote);
+ }
+
+ /**
+ * Strips away a potential file names and trailing slashes:
+ * - http://localhost
+ * - http://localhost/
+ * - http://localhost/index.php
+ * - http://localhost/index.php/s/{shareToken}
+ *
+ * all return: http://localhost
+ *
+ * @param string $remote
+ * @return string
+ */
+ protected function fixRemoteURL($remote) {
+ $remote = str_replace('\\', '/', $remote);
+ if ($fileNamePosition = strpos($remote, '/index.php')) {
+ $remote = substr($remote, 0, $fileNamePosition);
+ }
+ $remote = rtrim($remote, '/');
+
+ return $remote;
+ }
+
+ /**
+ * @param string $cloudId
+ * @return bool
+ */
+ public function isValidCloudId($cloudId) {
+ return strpos($cloudId, '@') !== false;
+ }
+}
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/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 abe219f99f2..3b89a66d6a2 100644
--- a/lib/private/Files/Storage/DAV.php
+++ b/lib/private/Files/Storage/DAV.php
@@ -569,8 +569,8 @@ class DAV extends Common {
public function stat($path) {
try {
$response = $this->propfind($path);
- if ($response === false) {
- return [];
+ if (!$response) {
+ return false;
}
return [
'mtime' => strtotime($response['{DAV:}getlastmodified']),
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/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/View.php b/lib/private/Files/View.php
index 909c49197b8..db21d400b39 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -1146,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);
diff --git a/lib/private/Lockdown/Filesystem/NullStorage.php b/lib/private/Lockdown/Filesystem/NullStorage.php
index 967b6d2c6e7..ea911b90064 100644
--- a/lib/private/Lockdown/Filesystem/NullStorage.php
+++ b/lib/private/Lockdown/Filesystem/NullStorage.php
@@ -20,6 +20,7 @@
namespace OC\Lockdown\Filesystem;
use Icewind\Streams\IteratorDirectory;
+use OC\Files\FileInfo;
use OC\Files\Storage\Common;
class NullStorage extends Common {
@@ -128,7 +129,7 @@ class NullStorage extends Common {
}
public function free_space($path) {
- return 0;
+ return FileInfo::SPACE_UNKNOWN;
}
public function touch($path, $mtime = null) {
diff --git a/lib/private/Log.php b/lib/private/Log.php
index fddd3593127..bcaa788603a 100644
--- a/lib/private/Log.php
+++ b/lib/private/Log.php
@@ -88,7 +88,8 @@ class Log implements ILogger {
'decrypt',
//LoginController
- 'tryLogin'
+ 'tryLogin',
+ 'confirmPassword',
];
/**
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/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/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/Repair.php b/lib/private/Repair.php
index f1bf586b49d..e8d466cd844 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -31,7 +31,6 @@
namespace OC;
use OC\Repair\AssetCache;
-use OC\Repair\AvatarPermissions;
use OC\Repair\CleanTags;
use OC\Repair\Collation;
use OC\Repair\DropOldJobs;
@@ -142,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(),
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/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/Server.php b/lib/private/Server.php
index d88a687bbc4..bcbe23b0181 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -46,11 +46,13 @@ use OC\App\AppStore\Fetcher\AppFetcher;
use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Http\Request;
use OC\AppFramework\Utility\TimeFactory;
+use OC\Authentication\LoginCredentials\Store;
use OC\Command\AsyncBus;
use OC\Diagnostics\EventLogger;
use OC\Diagnostics\NullEventLogger;
use OC\Diagnostics\NullQueryLogger;
use OC\Diagnostics\QueryLogger;
+use OC\Federation\CloudIdManager;
use OC\Files\Config\UserMountCache;
use OC\Files\Config\UserMountCacheListener;
use OC\Files\Mount\CacheMountProvider;
@@ -89,6 +91,8 @@ use OC\Security\TrustedDomainHelper;
use OC\Session\CryptoWrapper;
use OC\Tagging\TagMapper;
use OCA\Theming\ThemingDefaults;
+use OCP\Federation\ICloudIdManager;
+use OCP\Authentication\LoginCredentials\IStore;
use OCP\IL10N;
use OCP\IServerContainer;
use OCP\RichObjectStrings\IValidator;
@@ -246,6 +250,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);
@@ -316,8 +331,12 @@ class Server extends ServerContainer implements IServerContainer {
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(
@@ -377,7 +396,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),
@@ -792,7 +811,8 @@ class Server extends ServerContainer implements IServerContainer {
$c->getEncryptionManager(),
$c->getUserManager(),
$c->getLockingProvider(),
- new \OC\Settings\Mapper($c->getDatabaseConnection())
+ new \OC\Settings\Mapper($c->getDatabaseConnection()),
+ $c->getURLGenerator()
);
return $manager;
});
@@ -807,6 +827,10 @@ class Server extends ServerContainer implements IServerContainer {
return new LockdownManager();
});
+ $this->registerService(ICloudIdManager::class, function (Server $c) {
+ return new CloudIdManager();
+ });
+
/* To trick DI since we don't extend the DIContainer here */
$this->registerService(CleanPreviewsBackgroundJob::class, function (Server $c) {
return new CleanPreviewsBackgroundJob(
@@ -995,7 +1019,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);
}
/**
@@ -1551,4 +1576,11 @@ class Server extends ServerContainer implements IServerContainer {
public function getLockdownManager() {
return $this->query('LockdownManager');
}
+
+ /**
+ * @return \OCP\Federation\ICloudIdManager
+ */
+ public function getCloudIdManager() {
+ return $this->query(ICloudIdManager::class);
+ }
}
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 949826aa246..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;
@@ -55,6 +56,8 @@ class Manager implements IManager {
private $userManager;
/** @var ILockingProvider */
private $lockingProvider;
+ /** @var IURLGenerator */
+ private $url;
/**
* @param ILogger $log
@@ -65,7 +68,7 @@ class Manager implements IManager {
* @param IUserManager $userManager
* @param ILockingProvider $lockingProvider
* @param Mapper $mapper
- * @internal param IDBConnection $dbc
+ * @param IURLGenerator $url
*/
public function __construct(
ILogger $log,
@@ -75,7 +78,8 @@ class Manager implements IManager {
EncryptionManager $encryptionManager,
IUserManager $userManager,
ILockingProvider $lockingProvider,
- Mapper $mapper
+ Mapper $mapper,
+ IURLGenerator $url
) {
$this->log = $log;
$this->dbc = $dbc;
@@ -85,6 +89,7 @@ class Manager implements IManager {
$this->encryptionManager = $encryptionManager;
$this->userManager = $userManager;
$this->lockingProvider = $lockingProvider;
+ $this->url = $url;
}
/**
@@ -260,11 +265,11 @@ 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'))],
];
$rows = $this->mapper->getAdminSectionsFromDB();
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/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/Share/Helper.php b/lib/private/Share/Helper.php
index 20aaa793728..a1a56077d40 100644
--- a/lib/private/Share/Helper.php
+++ b/lib/private/Share/Helper.php
@@ -249,46 +249,14 @@ class Helper extends \OC\Share\Constants {
* @throws HintException
*/
public static function splitUserRemote($id) {
- if (strpos($id, '@') === false) {
+ try {
+ $cloudId = \OC::$server->getCloudIdManager()->resolveCloudId($id);
+ return [$cloudId->getUser(), $cloudId->getRemote()];
+ } catch (\InvalidArgumentException $e) {
$l = \OC::$server->getL10N('core');
$hint = $l->t('Invalid Federated Cloud ID');
- throw new HintException('Invalid Federated Cloud ID', $hint);
+ throw new HintException('Invalid Federated Cloud ID', $hint, 0, $e);
}
-
- // Find the first character that is not allowed in user names
- $id = str_replace('\\', '/', $id);
- $posSlash = strpos($id, '/');
- $posColon = strpos($id, ':');
-
- if ($posSlash === false && $posColon === false) {
- $invalidPos = strlen($id);
- } else if ($posSlash === false) {
- $invalidPos = $posColon;
- } else if ($posColon === false) {
- $invalidPos = $posSlash;
- } else {
- $invalidPos = min($posSlash, $posColon);
- }
-
- // Find the last @ before $invalidPos
- $pos = $lastAtPos = 0;
- while ($lastAtPos !== false && $lastAtPos <= $invalidPos) {
- $pos = $lastAtPos;
- $lastAtPos = strpos($id, '@', $pos + 1);
- }
-
- if ($pos !== false) {
- $user = substr($id, 0, $pos);
- $remote = substr($id, $pos + 1);
- $remote = self::fixRemoteURL($remote);
- if (!empty($user) && !empty($remote)) {
- return array($user, $remote);
- }
- }
-
- $l = \OC::$server->getL10N('core');
- $hint = $l->t('Invalid Federated Cloud ID');
- throw new HintException('Invalid Fededrated Cloud ID', $hint);
}
/**
diff --git a/lib/private/Share20/ProviderFactory.php b/lib/private/Share20/ProviderFactory.php
index 3f277a852b3..87d9d221810 100644
--- a/lib/private/Share20/ProviderFactory.php
+++ b/lib/private/Share20/ProviderFactory.php
@@ -96,7 +96,8 @@ class ProviderFactory implements IProviderFactory {
$l = $this->serverContainer->getL10N('federatedfilessharing');
$addressHandler = new AddressHandler(
$this->serverContainer->getURLGenerator(),
- $l
+ $l,
+ $this->serverContainer->getCloudIdManager()
);
$discoveryManager = new DiscoveryManager(
$this->serverContainer->getMemCacheFactory(),
@@ -121,7 +122,8 @@ class ProviderFactory implements IProviderFactory {
$this->serverContainer->getLogger(),
$this->serverContainer->getLazyRootFolder(),
$this->serverContainer->getConfig(),
- $this->serverContainer->getUserManager()
+ $this->serverContainer->getUserManager(),
+ $this->serverContainer->getCloudIdManager()
);
}
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/Template/CSSResourceLocator.php b/lib/private/Template/CSSResourceLocator.php
index 351e6d1366f..3a474a1ecfd 100644
--- a/lib/private/Template/CSSResourceLocator.php
+++ b/lib/private/Template/CSSResourceLocator.php
@@ -39,7 +39,7 @@ class CSSResourceLocator extends ResourceLocator {
* @param array $party_map
* @param SCSSCacher $scssCacher
*/
- public function __construct(ILogger $logger, $theme, $core_map, $party_map, SCSSCacher $scssCacher) {
+ public function __construct(ILogger $logger, $theme, $core_map, $party_map, $scssCacher) {
$this->scssCacher = $scssCacher;
parent::__construct($logger, $theme, $core_map, $party_map);
@@ -49,20 +49,22 @@ class CSSResourceLocator extends ResourceLocator {
* @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')
+ || $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);
+ }
}
/**
@@ -80,17 +82,21 @@ class CSSResourceLocator extends ResourceLocator {
*
* @param string $root path to check
* @param string $file the filename
- * @param string|null $webRoot base for path, default map $root to $webRoot
* @return bool True if the resource was found and cached, false otherwise
*/
- protected function cacheAndAppendScssIfExist($root, $file, $webRoot = null) {
+ protected function cacheAndAppendScssIfExist($root, $file, $app = 'core') {
if (is_file($root.'/'.$file)) {
- if($this->scssCacher->process($root, $file)) {
- $this->append($root, $this->scssCacher->getCachedSCSS('core', $file), $webRoot, false);
- return true;
+ 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->error('Failed to compile and/or save '.$root.'/'.$file, ['app' => 'core']);
- return false;
+ $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 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
index 0c1711b9fb7..d6f5a2c6fd3 100644
--- a/lib/private/Template/SCSSCacher.php
+++ b/lib/private/Template/SCSSCacher.php
@@ -63,9 +63,10 @@ class SCSSCacher {
* 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) {
+ public function process($root, $file, $app) {
$path = explode('/', $root . '/' . $file);
$fileNameSCSS = array_pop($path);
@@ -78,10 +79,10 @@ class SCSSCacher {
$webDir = implode('/', $webDir);
try {
- $folder = $this->appData->getFolder('core');
+ $folder = $this->appData->getFolder($app);
} catch(NotFoundException $e) {
// creating css appdata folder
- $folder = $this->appData->newFolder('core');
+ $folder = $this->appData->newFolder($app);
}
if($this->isCached($fileNameCSS, $fileNameSCSS, $folder, $path)) {
diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php
index 2551f8417a5..19fc9462185 100644
--- a/lib/private/TemplateLayout.php
+++ b/lib/private/TemplateLayout.php
@@ -160,17 +160,19 @@ class TemplateLayout extends \OC_Template {
$this->append( 'jsfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
}
- // Add the css files and check if server is already installed to prevent
- // appdata initialisation before database configuration
- if(\OC::$server->getSystemConfig()->getValue('installed', false)) {
+ // 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()
+ && !preg_match('/^\/login/', \OC::$server->getRequest()->getPathInfo())) {
$cssFiles = self::findStylesheetFiles(\OC_Util::$styles);
} else {
- $cssFiles = array(
- [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/global.css'],
- [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/fonts.css'],
- [\OC::$SERVERROOT, \OC::$WEBROOT, 'core/css/installation.css']
- );
+ // If we ignore the scss compiler,
+ // we need to load the guest css fallback
+ \OC_Util::addStyle('guest');
+ $cssFiles = self::findStylesheetFiles(\OC_Util::$styles, false);
}
+
$this->assign('cssfiles', array());
$this->assign('printcssfiles', []);
$this->assign('versionHash', self::$versionHash);
@@ -199,16 +201,20 @@ class TemplateLayout extends \OC_Template {
* @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();
- $SCSSCacher = new SCSSCacher(
- \OC::$server->getLogger(),
- \OC::$server->getAppDataDir('css'),
- \OC::$server->getURLGenerator(),
- \OC::$server->getSystemConfig()
- );
+ 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(),
diff --git a/lib/private/Updater.php b/lib/private/Updater.php
index a66d49941cd..3f4e54cf803 100644
--- a/lib/private/Updater.php
+++ b/lib/private/Updater.php
@@ -157,9 +157,9 @@ class Updater extends BasicEmitter {
/**
* Return version from which this version is allowed to upgrade from
*
- * @return string allowed previous version
+ * @return array allowed previous versions per vendor
*/
- private function getAllowedPreviousVersion() {
+ private function getAllowedPreviousVersions() {
// this should really be a JSON file
require \OC::$SERVERROOT . '/version.php';
/** @var array $OC_VersionCanBeUpgradedFrom */
@@ -182,26 +182,22 @@ class Updater extends BasicEmitter {
* Whether an upgrade to a specified version is possible
* @param string $oldVersion
* @param string $newVersion
- * @param string $allowedPreviousVersion
+ * @param array $allowedPreviousVersions
* @return bool
*/
- public function isUpgradePossible($oldVersion, $newVersion, $allowedPreviousVersion) {
- $allowedUpgrade = (version_compare($allowedPreviousVersion, $oldVersion, '<=')
- && (version_compare($oldVersion, $newVersion, '<=') || $this->config->getSystemValue('debug', false)));
-
- if ($allowedUpgrade) {
- return $allowedUpgrade;
+ public function isUpgradePossible($oldVersion, $newVersion, array $allowedPreviousVersions) {
+ $version = explode('.', $oldVersion);
+ $majorMinor = $version[0] . '.' . $version[1];
+
+ $currentVendor = $this->config->getAppValue('core', 'vendor', '');
+ if ($currentVendor === 'nextcloud') {
+ return isset($allowedPreviousVersions[$currentVendor][$majorMinor])
+ && (version_compare($oldVersion, $newVersion, '<=') ||
+ $this->config->getSystemValue('debug', false));
}
- // Upgrade not allowed, someone switching vendor?
- if ($this->getVendor() !== $this->config->getAppValue('core', 'vendor', '')) {
- $oldVersion = explode('.', $oldVersion);
- $newVersion = explode('.', $newVersion);
-
- return $oldVersion[0] === $newVersion[0] && $oldVersion[1] === $newVersion[1];
- }
-
- return false;
+ // Check if the instance can be migrated
+ return isset($allowedPreviousVersions[$currentVendor][$majorMinor]);
}
/**
@@ -215,8 +211,8 @@ class Updater extends BasicEmitter {
*/
private function doUpgrade($currentVersion, $installedVersion) {
// Stop update if the update is over several major versions
- $allowedPreviousVersion = $this->getAllowedPreviousVersion();
- if (!self::isUpgradePossible($installedVersion, $currentVersion, $allowedPreviousVersion)) {
+ $allowedPreviousVersions = $this->getAllowedPreviousVersions();
+ if (!$this->isUpgradePossible($installedVersion, $currentVersion, $allowedPreviousVersions)) {
throw new \Exception('Updates between multiple major versions and downgrades are unsupported.');
}
diff --git a/lib/private/User/User.php b/lib/private/User/User.php
index 4b37efe0705..961f70f8a8e 100644
--- a/lib/private/User/User.php
+++ b/lib/private/User/User.php
@@ -267,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;
}
@@ -411,7 +411,8 @@ class User implements IUser {
public function getCloudId() {
$uid = $this->getUID();
$server = $this->urlGenerator->getAbsoluteURL('/');
- return $uid . '@' . rtrim( $this->removeProtocolFromUrl($server), '/');
+ $server = rtrim( $this->removeProtocolFromUrl($server), '/');
+ return \OC::$server->getCloudIdManager()->getCloudId($uid, $server)->getId();
}
/**
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/util.php b/lib/private/legacy/util.php
index d97ba37c4c0..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
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/Federation/ICloudId.php b/lib/public/Federation/ICloudId.php
new file mode 100644
index 00000000000..f9c84a2fd07
--- /dev/null
+++ b/lib/public/Federation/ICloudId.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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\Federation;
+
+/**
+ * Parsed federated cloud id
+ *
+ * @since 12.0.0
+ */
+interface ICloudId {
+ /**
+ * The remote cloud id
+ *
+ * @return string
+ * @since 12.0.0
+ */
+ public function getId();
+
+ /**
+ * Get a clean representation of the cloud id for display
+ *
+ * @return string
+ * @since 12.0.0
+ */
+ public function getDisplayId();
+
+ /**
+ * The username on the remote server
+ *
+ * @return string
+ * @since 12.0.0
+ */
+ public function getUser();
+
+ /**
+ * The base address of the remote server
+ *
+ * @return string
+ * @since 12.0.0
+ */
+ public function getRemote();
+}
diff --git a/lib/public/Federation/ICloudIdManager.php b/lib/public/Federation/ICloudIdManager.php
new file mode 100644
index 00000000000..7be8f08c6b7
--- /dev/null
+++ b/lib/public/Federation/ICloudIdManager.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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\Federation;
+
+/**
+ * Interface for resolving federated cloud ids
+ *
+ * @since 12.0.0
+ */
+interface ICloudIdManager {
+ /**
+ * @param string $cloudId
+ * @return ICloudId
+ *
+ * @since 12.0.0
+ */
+ public function resolveCloudId($cloudId);
+
+ /**
+ * Get the cloud id for a remote user
+ *
+ * @param string $user
+ * @param string $remote
+ * @return ICloudId
+ *
+ * @since 12.0.0
+ */
+ public function getCloudId($user, $remote);
+
+ /**
+ * Check if the input is a correctly formatted cloud id
+ *
+ * @param string $cloudId
+ * @return bool
+ *
+ * @since 12.0.0
+ */
+ public function isValidCloudId($cloudId);
+}
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/IServerContainer.php b/lib/public/IServerContainer.php
index 87628be01f7..02a092ea660 100644
--- a/lib/public/IServerContainer.php
+++ b/lib/public/IServerContainer.php
@@ -525,4 +525,10 @@ interface IServerContainer {
* @since 8.0.0
*/
public function getDateTimeFormatter();
+
+ /**
+ * @return \OCP\Federation\ICloudIdManager
+ * @since 12.0.0
+ */
+ public function getCloudIdManager();
}
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 79e74f20cdf..31eb0687955 100644
--- a/ocs/v1.php
+++ b/ocs/v1.php
@@ -90,6 +90,7 @@ try {
} catch (\OC\User\LoginException $e) {
OC_API::respond(new OC_OCS_Result(null, \OCP\API::RESPOND_UNAUTHORISED, 'Unauthorised'));
} catch (\Exception $e) {
+ \OC::$server->getLogger()->logException($e);
OC_API::setContentType();
OC_OCS::notFound();
}
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 557395c5717..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;
@@ -703,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;
@@ -804,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/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 a2ccc059f15..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
});
},
diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js
index f23e16c9091..7567276456c 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -15,9 +15,6 @@ 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" : "الكل",
@@ -95,6 +92,9 @@ 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)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index 7f9fbff55d3..a44eebfbfa8 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -13,9 +13,6 @@
"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" : "الكل",
@@ -93,6 +90,9 @@
"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)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 743e0a2f967..5c0a54c4083 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -18,9 +18,6 @@ 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...",
@@ -131,6 +128,9 @@ 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)",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index 25ec57af772..847b3822dc3 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -16,9 +16,6 @@
"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...",
@@ -129,6 +126,9 @@
"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)",
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index baa771e4def..a48f28672bc 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -32,9 +32,6 @@ 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...",
@@ -184,6 +181,9 @@ 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)",
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index 203c526ba55..c1c57e15a07 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -30,9 +30,6 @@
"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...",
@@ -182,6 +179,9 @@
"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)",
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index 02f75415856..b92b3642b7a 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -32,9 +32,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" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
@@ -205,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" : "Изпращай писмо към нов потребител",
@@ -228,6 +226,9 @@ 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",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index 054f5cdfda0..ec1e46f7719 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -30,9 +30,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" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
@@ -203,6 +200,7 @@
"Name" : "Име",
"Username" : "Потребител",
"Done" : "Завършен",
+ "Subscribe to our newsletter!" : "Абонирайте се за нашата емисия!",
"Show storage location" : "Покажи мястото на хранилището",
"Show last log in" : "Покажи последно вписване",
"Send email to new user" : "Изпращай писмо към нов потребител",
@@ -226,6 +224,9 @@
"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",
diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js
index 8b47f30f20d..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,6 +69,9 @@ 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" : "গোষ্ঠীসমূহ"
diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json
index 716f5e23e75..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,6 +67,9 @@
"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" : "গোষ্ঠীসমূহ"
diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js
index ec346198073..f1d6d4a48e7 100644
--- a/settings/l10n/bs.js
+++ b/settings/l10n/bs.js
@@ -28,9 +28,6 @@ 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...",
@@ -158,6 +155,9 @@ 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)",
diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json
index 364c0bab5a6..b45efaeea0c 100644
--- a/settings/l10n/bs.json
+++ b/settings/l10n/bs.json
@@ -26,9 +26,6 @@
"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...",
@@ -156,6 +153,9 @@
"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)",
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index b7c54a09206..e95c0fd38e2 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -23,29 +23,31 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
"Invalid request" : "Sol·licitud no vàlida",
"Invalid mail address" : "Adreça de correu invàlida",
+ "No valid group selected" : "No s'ha seleccionat un grup vàlid",
"A user with that name already exists." : "Ja existeix un usuari amb est nom.",
"Unable to create user." : "No es pot crear el usuari.",
"Your %s account was created" : "S'ha creat el seu compte %s",
"Unable to delete user." : "No es pot eliminar l'usuari",
+ "Settings saved" : "Paràmetres desats",
"Unable to change full name" : "No s'ha pogut canviar el nom complet",
+ "Unable to change email address" : "No es pot canviar l'adreça de correu",
"Your full name has been changed." : "El vostre nom complet ha canviat.",
"Forbidden" : "Prohibit",
"Invalid user" : "Usuari no vàlid",
"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ó",
"Migration started …" : "Migració iniciada ...",
+ "Not saved" : "No desat",
"Sending..." : "Enviant...",
"Official" : "Oficial",
"All" : "Tots",
"Update to %s" : "Actualitzar a %s",
"No apps found for your version" : "No s'han trobat aplicacions per la seva versió",
+ "Enabling app …" : "Activant aplicació...",
"Error while disabling app" : "Error en desactivar l'aplicació",
"Disable" : "Desactiva",
"Enable" : "Habilita",
@@ -56,10 +58,34 @@ OC.L10N.register(
"Uninstalling ...." : "Desintal·lant ...",
"Error while uninstalling app" : "Error en desinstal·lar l'aplicació",
"Uninstall" : "Desinstal·la",
+ "App update" : "Actualització de la App",
"Approved" : "Aprovat",
"Experimental" : "Experimental",
+ "Disconnect" : "Desconnecta",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome per Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS Client",
+ "Android Client" : "Client Android",
+ "This session" : "Aquesta sessió",
+ "Copy" : "Copia",
+ "Copied!" : "Copiat!",
+ "Not supported!" : "No soportat!",
+ "Press ⌘-C to copy." : "Prem ⌘-C per copiar.",
+ "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.",
"Valid until {date}" : "Vàlid fins {date}",
"Delete" : "Esborra",
+ "Local" : "Local",
+ "Private" : "Privat",
+ "Only visible to local users" : "Només visible per a usuaris locals",
+ "Only visible to you" : "Només visible per tu",
+ "Contacts" : "Contactes",
+ "Public" : "Públic",
"Select a profile picture" : "Seleccioneu una imatge de perfil",
"Very weak password" : "Contrasenya massa feble",
"Weak password" : "Contrasenya feble",
@@ -73,6 +99,8 @@ OC.L10N.register(
"undo" : "desfés",
"never" : "mai",
"deleted {userName}" : "eliminat {userName}",
+ "Add group" : "Afegeix grup",
+ "no group" : "sense grup",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Canviar la contrasenya provocarà pèrdua de dades, perquè la recuperació de dades no està disponible per a aquest usuari",
"A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
@@ -80,6 +108,8 @@ OC.L10N.register(
"__language_name__" : "Català",
"Unlimited" : "Il·limitat",
"Personal info" : "Informació personal",
+ "Sessions" : "Sessions",
+ "App passwords" : "Contrasenyes de l'Apliació",
"Sync clients" : "Sincronitzar clients",
"None" : "Cap",
"Login" : "Inici de sessió",
@@ -116,6 +146,7 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomanem fermament que instal·leu els paquets requerits en el vostre sistema per suportar un dels següents idiomes: %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\")" : "Si la seva instal·lació no està situada en l'arrel del domini i usa el sistema cron, pot haver-hi problemes en generar-se els URL. Per evitar-los, configuri l'opció \"overwrite.cli.url\" en el seu arxiu config.php perquè usi la ruta de l'arrel del lloc web de la seva instal·lació (suggeriment: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No va ser possible executar cronjob via CLI. Han aparegut els següents errors tècnics:",
+ "All checks passed." : "Totes les comprovacions correctes.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Última execució de la tasca cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execució de la tasca cron: %s. Alguna cosa sembla malament.",
@@ -145,12 +176,16 @@ OC.L10N.register(
"Theming" : "Tematització",
"Hardening and security guidance" : "Guia de protecció i seguretat",
"Developer documentation" : "Documentació para desenvolupadors",
+ "by %s" : "per %s",
"Documentation:" : "Documentació:",
"User documentation" : "Documentació d'usuari",
+ "Visit website" : "Visita el lloc web",
+ "Report a bug" : "Reportar un error",
"Show description …" : "Mostrar descripció...",
"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" : "Desinstala la app",
"Common Name" : "Nom comú",
"Valid until" : "Valid fins",
"Issued By" : "Emès Per",
@@ -160,16 +195,26 @@ OC.L10N.register(
"Administrator documentation" : "Documentació d'administrador",
"Online documentation" : "Documentació en línia",
"Forum" : "Fòrum",
+ "Getting help" : "Obtenint ajuda",
"Commercial support" : "Suport comercial",
"Profile picture" : "Foto de perfil",
"Upload new" : "Puja'n una de nova",
"Remove image" : "Elimina imatge",
+ "png or jpg, max. 20 MB" : "png or jpg, max. 20 MB",
"Cancel" : "Cancel·la",
+ "Choose as profile picture" : "Elegeix una imatge de perfil",
"Full name" : "Nom complet",
"No display name set" : "No s'ha establert cap nom para mostrar",
"Email" : "Correu electrònic",
"Your email address" : "Correu electrònic",
"No email address set" : "No s'ha establert cap adreça de correu",
+ "Phone number" : "Número de telèfon",
+ "Your phone number" : "El teu número de telèfon",
+ "Address" : "Adreça",
+ "Your postal address" : "La teva adreça postal",
+ "Website" : "Lloc web",
+ "Your website" : "El teu lloc web",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Vostè és membre dels següents grups:",
"Password" : "Contrasenya",
"Current password" : "Contrasenya actual",
@@ -182,8 +227,13 @@ OC.L10N.register(
"Android app" : "aplicació para Android",
"iOS app" : "aplicació para iOS",
"Show First Run Wizard again" : "Torna a mostrar l'assistent de primera execució",
+ "Device" : "Dispositiu",
+ "Last activity" : "Última activitat",
"Name" : "Nom",
+ "App name" : "Nom de l'aplicació",
+ "Create new app password" : "Crea una nova contrasenya de l'aplicació",
"Username" : "Nom d'usuari",
+ "Done" : "Fet",
"Show storage location" : "Mostra la ubicació del magatzem",
"Show last log in" : "Mostrar l'últim accés",
"Show user backend" : "Mostrar backend d'usuari",
@@ -193,19 +243,27 @@ OC.L10N.register(
"Create" : "Crea",
"Admin Recovery Password" : "Recuperació de contrasenya d'administrador",
"Enter the recovery password in order to recover the users files during password change" : "Escriviu la contrasenya de recuperació per a poder recuperar els fitxers dels usuaris en canviar la contrasenya",
+ "Group name" : "Nom del grup",
"Everyone" : "Tothom",
"Admins" : "Administradors",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Escriviu la quota d'emmagatzemament (per ex.: \"512 MB\" o \"12 GB\")",
"Other" : "Un altre",
"Quota" : "Quota",
+ "Storage location" : "Ubicació de l'emmagatzemament",
+ "Last login" : "Últim accés",
"change full name" : "canvia el nom complet",
"set new password" : "estableix nova contrasenya",
"change email address" : "canvi d'adreça de correu electrònic",
"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...",
+ "iPhone" : "iPhone",
+ "add group" : "afegeix grup",
"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",
@@ -224,6 +282,10 @@ OC.L10N.register(
"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"
+ "Add Group" : "Afegeix el grup",
+ "Group" : "Grup",
+ "Full Name" : "Nom complet",
+ "Storage Location" : "Ubicació de l'emmagatzemament",
+ "Last Login" : "Últim accés"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index 62a7867f23a..e4c73cac389 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -21,29 +21,31 @@
"You need to set your user email before being able to send test emails." : "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
"Invalid request" : "Sol·licitud no vàlida",
"Invalid mail address" : "Adreça de correu invàlida",
+ "No valid group selected" : "No s'ha seleccionat un grup vàlid",
"A user with that name already exists." : "Ja existeix un usuari amb est nom.",
"Unable to create user." : "No es pot crear el usuari.",
"Your %s account was created" : "S'ha creat el seu compte %s",
"Unable to delete user." : "No es pot eliminar l'usuari",
+ "Settings saved" : "Paràmetres desats",
"Unable to change full name" : "No s'ha pogut canviar el nom complet",
+ "Unable to change email address" : "No es pot canviar l'adreça de correu",
"Your full name has been changed." : "El vostre nom complet ha canviat.",
"Forbidden" : "Prohibit",
"Invalid user" : "Usuari no vàlid",
"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ó",
"Migration started …" : "Migració iniciada ...",
+ "Not saved" : "No desat",
"Sending..." : "Enviant...",
"Official" : "Oficial",
"All" : "Tots",
"Update to %s" : "Actualitzar a %s",
"No apps found for your version" : "No s'han trobat aplicacions per la seva versió",
+ "Enabling app …" : "Activant aplicació...",
"Error while disabling app" : "Error en desactivar l'aplicació",
"Disable" : "Desactiva",
"Enable" : "Habilita",
@@ -54,10 +56,34 @@
"Uninstalling ...." : "Desintal·lant ...",
"Error while uninstalling app" : "Error en desinstal·lar l'aplicació",
"Uninstall" : "Desinstal·la",
+ "App update" : "Actualització de la App",
"Approved" : "Aprovat",
"Experimental" : "Experimental",
+ "Disconnect" : "Desconnecta",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome per Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS Client",
+ "Android Client" : "Client Android",
+ "This session" : "Aquesta sessió",
+ "Copy" : "Copia",
+ "Copied!" : "Copiat!",
+ "Not supported!" : "No soportat!",
+ "Press ⌘-C to copy." : "Prem ⌘-C per copiar.",
+ "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.",
"Valid until {date}" : "Vàlid fins {date}",
"Delete" : "Esborra",
+ "Local" : "Local",
+ "Private" : "Privat",
+ "Only visible to local users" : "Només visible per a usuaris locals",
+ "Only visible to you" : "Només visible per tu",
+ "Contacts" : "Contactes",
+ "Public" : "Públic",
"Select a profile picture" : "Seleccioneu una imatge de perfil",
"Very weak password" : "Contrasenya massa feble",
"Weak password" : "Contrasenya feble",
@@ -71,6 +97,8 @@
"undo" : "desfés",
"never" : "mai",
"deleted {userName}" : "eliminat {userName}",
+ "Add group" : "Afegeix grup",
+ "no group" : "sense grup",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Canviar la contrasenya provocarà pèrdua de dades, perquè la recuperació de dades no està disponible per a aquest usuari",
"A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
@@ -78,6 +106,8 @@
"__language_name__" : "Català",
"Unlimited" : "Il·limitat",
"Personal info" : "Informació personal",
+ "Sessions" : "Sessions",
+ "App passwords" : "Contrasenyes de l'Apliació",
"Sync clients" : "Sincronitzar clients",
"None" : "Cap",
"Login" : "Inici de sessió",
@@ -114,6 +144,7 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomanem fermament que instal·leu els paquets requerits en el vostre sistema per suportar un dels següents idiomes: %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\")" : "Si la seva instal·lació no està situada en l'arrel del domini i usa el sistema cron, pot haver-hi problemes en generar-se els URL. Per evitar-los, configuri l'opció \"overwrite.cli.url\" en el seu arxiu config.php perquè usi la ruta de l'arrel del lloc web de la seva instal·lació (suggeriment: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No va ser possible executar cronjob via CLI. Han aparegut els següents errors tècnics:",
+ "All checks passed." : "Totes les comprovacions correctes.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Última execució de la tasca cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execució de la tasca cron: %s. Alguna cosa sembla malament.",
@@ -143,12 +174,16 @@
"Theming" : "Tematització",
"Hardening and security guidance" : "Guia de protecció i seguretat",
"Developer documentation" : "Documentació para desenvolupadors",
+ "by %s" : "per %s",
"Documentation:" : "Documentació:",
"User documentation" : "Documentació d'usuari",
+ "Visit website" : "Visita el lloc web",
+ "Report a bug" : "Reportar un error",
"Show description …" : "Mostrar descripció...",
"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" : "Desinstala la app",
"Common Name" : "Nom comú",
"Valid until" : "Valid fins",
"Issued By" : "Emès Per",
@@ -158,16 +193,26 @@
"Administrator documentation" : "Documentació d'administrador",
"Online documentation" : "Documentació en línia",
"Forum" : "Fòrum",
+ "Getting help" : "Obtenint ajuda",
"Commercial support" : "Suport comercial",
"Profile picture" : "Foto de perfil",
"Upload new" : "Puja'n una de nova",
"Remove image" : "Elimina imatge",
+ "png or jpg, max. 20 MB" : "png or jpg, max. 20 MB",
"Cancel" : "Cancel·la",
+ "Choose as profile picture" : "Elegeix una imatge de perfil",
"Full name" : "Nom complet",
"No display name set" : "No s'ha establert cap nom para mostrar",
"Email" : "Correu electrònic",
"Your email address" : "Correu electrònic",
"No email address set" : "No s'ha establert cap adreça de correu",
+ "Phone number" : "Número de telèfon",
+ "Your phone number" : "El teu número de telèfon",
+ "Address" : "Adreça",
+ "Your postal address" : "La teva adreça postal",
+ "Website" : "Lloc web",
+ "Your website" : "El teu lloc web",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Vostè és membre dels següents grups:",
"Password" : "Contrasenya",
"Current password" : "Contrasenya actual",
@@ -180,8 +225,13 @@
"Android app" : "aplicació para Android",
"iOS app" : "aplicació para iOS",
"Show First Run Wizard again" : "Torna a mostrar l'assistent de primera execució",
+ "Device" : "Dispositiu",
+ "Last activity" : "Última activitat",
"Name" : "Nom",
+ "App name" : "Nom de l'aplicació",
+ "Create new app password" : "Crea una nova contrasenya de l'aplicació",
"Username" : "Nom d'usuari",
+ "Done" : "Fet",
"Show storage location" : "Mostra la ubicació del magatzem",
"Show last log in" : "Mostrar l'últim accés",
"Show user backend" : "Mostrar backend d'usuari",
@@ -191,19 +241,27 @@
"Create" : "Crea",
"Admin Recovery Password" : "Recuperació de contrasenya d'administrador",
"Enter the recovery password in order to recover the users files during password change" : "Escriviu la contrasenya de recuperació per a poder recuperar els fitxers dels usuaris en canviar la contrasenya",
+ "Group name" : "Nom del grup",
"Everyone" : "Tothom",
"Admins" : "Administradors",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Escriviu la quota d'emmagatzemament (per ex.: \"512 MB\" o \"12 GB\")",
"Other" : "Un altre",
"Quota" : "Quota",
+ "Storage location" : "Ubicació de l'emmagatzemament",
+ "Last login" : "Últim accés",
"change full name" : "canvia el nom complet",
"set new password" : "estableix nova contrasenya",
"change email address" : "canvi d'adreça de correu electrònic",
"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...",
+ "iPhone" : "iPhone",
+ "add group" : "afegeix grup",
"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,6 +280,10 @@
"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"
+ "Add Group" : "Afegeix el grup",
+ "Group" : "Grup",
+ "Full Name" : "Nom complet",
+ "Storage Location" : "Ubicació de l'emmagatzemament",
+ "Last Login" : "Últim accés"
},"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 0d06d1a6042..ebc36fcd119 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -25,6 +25,7 @@ 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",
@@ -39,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",
@@ -125,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ě",
@@ -341,6 +341,9 @@ 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",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 30ce1f499e0..7e73f9f6989 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -23,6 +23,7 @@
"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",
@@ -37,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",
@@ -123,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ě",
@@ -339,6 +339,9 @@
"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",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index b715757bb98..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",
@@ -224,6 +221,9 @@ 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)",
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 3bfbca279de..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",
@@ -222,6 +219,9 @@
"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)",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 4baf07cb9a9..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,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?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -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",
@@ -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,6 +341,9 @@ 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",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 2b69afd9886..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,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?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -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",
@@ -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,6 +339,9 @@
"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",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 2463552498f..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,7 +50,7 @@ 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.",
@@ -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",
@@ -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,6 +341,9 @@ 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",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 01c0883803d..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,7 +48,7 @@
"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.",
@@ -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",
@@ -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,6 +339,9 @@
"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",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 2918b6d753c..a84d4dd9502 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -29,16 +29,15 @@ OC.L10N.register(
"Unable to create user." : "Αδυναμία δημιουργίας χρήστη.",
"Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε",
"Unable to delete user." : "Αδυναμία διαγραφής χρήστη.",
+ "Settings saved" : "Οι ρυθμίσεις αποθηκεύτηκαν",
"Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
"Forbidden" : "Δεν επιτρέπεται",
"Invalid user" : "Μη έγκυρος χρήστης",
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
+ "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." : "Αδυναμία ενημέρωσης εφαρμογής",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -76,9 +75,12 @@ OC.L10N.register(
"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",
"This session" : "Αυτή η συνεδρία",
+ "Copy" : "Αντιγραφή",
"Copied!" : "Αντιγράφτηκε!",
"Not supported!" : "Δεν υποστηρίζονται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
@@ -89,6 +91,9 @@ OC.L10N.register(
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.",
"Valid until {date}" : "Έγκυρο έως {date}",
"Delete" : "Διαγραφή",
+ "Local" : "Τοπικά",
+ "Contacts" : "Επαφές",
+ "Public" : "Δημόσιο",
"Select a profile picture" : "Επιλογή εικόνας προφίλ",
"Very weak password" : "Πολύ αδύναμο συνθηματικό",
"Weak password" : "Αδύναμο συνθηματικό",
@@ -121,6 +126,8 @@ OC.L10N.register(
"Login" : "Σύνδεση",
"Plain" : "Απλό",
"NT LAN Manager" : "Διαχειριστης NT LAN",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "Διακομιστής Email",
"Open documentation" : "Ανοιχτή τεκμηρίωση.",
"This is used for sending out notifications." : "Χρησιμοποιείται για αποστολή ειδοποιήσεων.",
@@ -205,6 +212,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" : "Απεγκατάσταση εφαρμογης",
"SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
"Common Name" : "Κοινό Όνομα",
"Valid until" : "Έγκυρο έως",
@@ -215,6 +223,7 @@ OC.L10N.register(
"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" : "Φωτογραφία προφίλ",
@@ -231,6 +240,14 @@ OC.L10N.register(
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"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" : "Τρέχων συνθηματικό",
@@ -264,6 +281,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" : "Προεπιλέγμενη χωρητικότητα",
@@ -279,6 +297,9 @@ 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",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 0a5630b7ac1..b976646240d 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -27,16 +27,15 @@
"Unable to create user." : "Αδυναμία δημιουργίας χρήστη.",
"Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε",
"Unable to delete user." : "Αδυναμία διαγραφής χρήστη.",
+ "Settings saved" : "Οι ρυθμίσεις αποθηκεύτηκαν",
"Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
"Forbidden" : "Δεν επιτρέπεται",
"Invalid user" : "Μη έγκυρος χρήστης",
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
+ "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." : "Αδυναμία ενημέρωσης εφαρμογής",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -74,9 +73,12 @@
"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",
"This session" : "Αυτή η συνεδρία",
+ "Copy" : "Αντιγραφή",
"Copied!" : "Αντιγράφτηκε!",
"Not supported!" : "Δεν υποστηρίζονται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
@@ -87,6 +89,9 @@
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.",
"Valid until {date}" : "Έγκυρο έως {date}",
"Delete" : "Διαγραφή",
+ "Local" : "Τοπικά",
+ "Contacts" : "Επαφές",
+ "Public" : "Δημόσιο",
"Select a profile picture" : "Επιλογή εικόνας προφίλ",
"Very weak password" : "Πολύ αδύναμο συνθηματικό",
"Weak password" : "Αδύναμο συνθηματικό",
@@ -119,6 +124,8 @@
"Login" : "Σύνδεση",
"Plain" : "Απλό",
"NT LAN Manager" : "Διαχειριστης NT LAN",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "Διακομιστής Email",
"Open documentation" : "Ανοιχτή τεκμηρίωση.",
"This is used for sending out notifications." : "Χρησιμοποιείται για αποστολή ειδοποιήσεων.",
@@ -203,6 +210,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" : "Απεγκατάσταση εφαρμογης",
"SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
"Common Name" : "Κοινό Όνομα",
"Valid until" : "Έγκυρο έως",
@@ -213,6 +221,7 @@
"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" : "Φωτογραφία προφίλ",
@@ -229,6 +238,14 @@
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"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" : "Τρέχων συνθηματικό",
@@ -262,6 +279,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" : "Προεπιλέγμενη χωρητικότητα",
@@ -277,6 +295,9 @@
"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",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 34acd971716..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",
@@ -264,6 +261,9 @@ 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)",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 6fe3e756980..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",
@@ -262,6 +259,9 @@
"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)",
diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js
index 4406664c16d..57bacd60c50 100644
--- a/settings/l10n/eo.js
+++ b/settings/l10n/eo.js
@@ -14,9 +14,6 @@ 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",
@@ -124,6 +121,9 @@ 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",
diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json
index 977c235a952..adb48f15be5 100644
--- a/settings/l10n/eo.json
+++ b/settings/l10n/eo.json
@@ -12,9 +12,6 @@
"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",
@@ -122,6 +119,9 @@
"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",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index 251015180a1..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",
@@ -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",
@@ -341,6 +341,9 @@ 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",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 04f9f551f20..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",
@@ -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",
@@ -339,6 +339,9 @@
"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",
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index 6822b46a57a..a557cec74b1 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -16,9 +16,6 @@ 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",
@@ -103,6 +100,9 @@ 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",
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index 9ec6ee099c5..2d6ed9b8c32 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -14,9 +14,6 @@
"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",
@@ -101,6 +98,9 @@
"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",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index 09c843f9fa6..c07e9a94267 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -14,9 +14,6 @@ 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",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -79,6 +76,9 @@ 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",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index e2a78820f11..0eca2bb49ae 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -12,9 +12,6 @@
"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",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -77,6 +74,9 @@
"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",
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index 76b2854ff70..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",
@@ -197,6 +194,9 @@ 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)",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 678d1072bb6..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",
@@ -195,6 +192,9 @@
"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)",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index 996ea37e205..ac332f20a21 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -29,9 +29,6 @@ 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...",
@@ -165,6 +162,9 @@ 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)",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 0643dd34ab5..a7d45148ef3 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -27,9 +27,6 @@
"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...",
@@ -163,6 +160,9 @@
"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)",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index 350c9e24b21..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" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
@@ -189,6 +186,9 @@ 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" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index 1b75b935e24..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" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
@@ -187,6 +184,9 @@
"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" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index 22170fe0e9b..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",
@@ -245,6 +242,9 @@ 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)",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index 93730c125ff..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",
@@ -243,6 +240,9 @@
"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)",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index da1108667eb..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",
@@ -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",
@@ -210,7 +210,7 @@ OC.L10N.register(
"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.",
@@ -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,6 +341,9 @@ 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",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index bfeab18cf7d..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",
@@ -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",
@@ -208,7 +208,7 @@
"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.",
@@ -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,6 +339,9 @@
"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",
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 8f1ea962f1a..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.",
@@ -216,6 +213,9 @@ 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)",
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index 2b4ec949579..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.",
@@ -214,6 +211,9 @@
"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)",
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index 37eaf589d01..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" : "המרה בביצוע. יש להמתין עד סיום ההמרה",
@@ -258,6 +255,9 @@ 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)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)",
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index fed31aaa2a1..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" : "המרה בביצוע. יש להמתין עד סיום ההמרה",
@@ -256,6 +253,9 @@
"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)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)",
diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js
index 744ed9b410f..267befb6645 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -17,9 +17,6 @@ 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...",
@@ -133,6 +130,9 @@ 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)",
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index 1b2c51c42ef..22f56cf81f4 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -15,9 +15,6 @@
"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...",
@@ -131,6 +128,9 @@
"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)",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index d10f05504c1..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",
@@ -341,6 +338,9 @@ 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",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index ee97655631f..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",
@@ -339,6 +336,9 @@
"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",
diff --git a/settings/l10n/ia.js b/settings/l10n/ia.js
new file mode 100644
index 00000000000..e6aa618838f
--- /dev/null
+++ b/settings/l10n/ia.js
@@ -0,0 +1,133 @@
+OC.L10N.register(
+ "settings",
+ {
+ "Enabled" : "Activate",
+ "Not enabled" : "Non activate",
+ "Wrong password" : "Contrasigno incorrecte",
+ "Saved" : "Salveguardate",
+ "No user supplied" : "Nulle usator fornite",
+ "Unable to change password" : "Impossibile cambiar contrasigno",
+ "Authentication error" : "Error in authentication",
+ "Migration Completed" : "Migration completate",
+ "Group already exists." : "Gruppo ja existe.",
+ "Unable to add group." : "Impossibile adder gruppo.",
+ "Unable to delete group." : "Impossibile deler gruppo.",
+ "test email settings" : "testar configurationes de e-posta",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Un problema occurreva durante le invio del e-posta. Per favor, revide tu configurationes. (Error: %s)",
+ "Email sent" : "Message de e-posta inviate",
+ "You need to set your user email before being able to send test emails." : "Tu debe configurar tu e-posta de usator ante esser capace a inviar e-posta de test.",
+ "Invalid request" : "Requesta non valide",
+ "Invalid mail address" : "Adresse de e-posta non valide",
+ "No valid group selected" : "Nulle gruppo valide selectionate",
+ "A user with that name already exists." : "Un usator con iste nomine ja existe.",
+ "Unable to create user." : "Impossibile crear usator.",
+ "Your %s account was created" : "Tu conto %s esseva create",
+ "Unable to delete user." : "Impossibile deler usator.",
+ "Settings saved" : "Configurationes salveguardate",
+ "Unable to change full name" : "Impossibile cambiar nomine complete",
+ "Unable to change email address" : "Impossibile cambiar adresse de e-posta",
+ "Your full name has been changed." : "Tu nomine complete esseva cambiate.",
+ "Forbidden" : "Prohibite",
+ "Invalid user" : "Usator invalide",
+ "Unable to change mail address" : "Impossibile cambiar adresse de e-posta",
+ "Password confirmation is required" : "Un confirmation del contrasigno es necessari",
+ "Couldn't remove app." : "Impossibile remover application.",
+ "Couldn't update app." : "Impossibile actualisar application.",
+ "Official" : "Official",
+ "All" : "Tote",
+ "Update to %s" : "Actualisar a %s",
+ "Disable" : "Disactivar",
+ "Enable" : "Activar",
+ "Updating...." : "Actualisante...",
+ "Uninstall" : "De-installar",
+ "Experimental" : "Experimental",
+ "Disconnect" : "Disconnecter",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome pro Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "This session" : "Iste session",
+ "Copy" : "Copiar",
+ "Copied!" : "Copiate!",
+ "Press ⌘-C to copy." : "Pulsa ⌘-C pro copiar.",
+ "Press Ctrl-C to copy." : "Pulsa Ctrl-C pro copiar.",
+ "Delete" : "Deler",
+ "Local" : "Local",
+ "Only visible to local users" : "Solmente visibile a usatores local",
+ "Only visible to you" : "Solmente visibile a tu",
+ "Contacts" : "Contactos",
+ "Groups" : "Gruppos",
+ "undo" : "disfacer",
+ "never" : "nunquam",
+ "Personal info" : "Information personal",
+ "Sessions" : "Sessiones",
+ "App passwords" : "Contrasignos de applicationes",
+ "Email server" : "Servitor de e-posta",
+ "Encryption" : "Cryptographia",
+ "Version" : "Version",
+ "days" : "dies",
+ "Tips & tricks" : "Consilios e maneos",
+ "Theming" : "Themas",
+ "Documentation:" : "Documentation:",
+ "User documentation" : "Documentation de usator",
+ "Admin documentation" : "Documentation de administrator",
+ "Visit website" : "Visitar sito web",
+ "Report a bug" : "Reportar un defecto",
+ "Show description …" : "Monstrar description...",
+ "Hide description …" : "Celar description...",
+ "Common Name" : "Nomine Commun",
+ "Valid until" : "Valide usque",
+ "Valid until %s" : "Valide usque %s",
+ "Import root certificate" : "Importar certificato root",
+ "Administrator documentation" : "Documentation de administrator",
+ "Online documentation" : "Documentation in linea",
+ "Forum" : "Foro",
+ "Commercial support" : "Supporto commercial",
+ "Upload new" : "Incargar nove",
+ "Remove image" : "Remover imagine",
+ "Cancel" : "Cancellar",
+ "Address" : "Adresse",
+ "Your postal address" : "Tu adresse postal",
+ "Website" : "Sito web",
+ "Your website" : "Tu sito web",
+ "Twitter" : "Twitter",
+ "You are member of the following groups:" : "Tu es membro del sequente gruppos:",
+ "Password" : "Contrasigno",
+ "Current password" : "Contrasigno actual",
+ "New password" : "Nove contrasigno",
+ "Change password" : "Cambiar contrasigno",
+ "Language" : "Lingua",
+ "Help translate" : "Adjuta a traducer",
+ "Device" : "Dispositivo",
+ "Passcodes that give an app or device permissions to access your account." : "Contrasignos que dona a tu application o dispositivo le permissiones pro acceder a tu conto.",
+ "Name" : "Nomine",
+ "App name" : "Nomine del application",
+ "Create new app password" : "Crear un nove contrasigno pro application",
+ "Use the credentials below to configure your app or device." : "Usa le datos de authentication infra pro configurar tu application o dispositivo.",
+ "Username" : "Nomine de usator",
+ "Done" : "Preste",
+ "Follow us on Google Plus!" : "Seque nos in Google Plus!",
+ "E-Mail" : "E-posta",
+ "Create" : "Crear",
+ "Group name" : "Nomine del gruppo",
+ "Everyone" : "Totos",
+ "Admins" : "Administratores",
+ "Default quota" : "Quota predefinite",
+ "Other" : "Altere",
+ "Quota" : "Quota",
+ "Please wait...." : "Per favor attende...",
+ "iPhone" : "iPhone",
+ "add group" : "adder gruppo",
+ "Log" : "Registro",
+ "What to log" : "Que registrar?",
+ "Download logfile" : "Discargar file de registro",
+ "More" : "Plus",
+ "Less" : "Minus",
+ "Add Group" : "Adder Gruppo",
+ "Group" : "Gruppo"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ia.json b/settings/l10n/ia.json
new file mode 100644
index 00000000000..7643ea24822
--- /dev/null
+++ b/settings/l10n/ia.json
@@ -0,0 +1,131 @@
+{ "translations": {
+ "Enabled" : "Activate",
+ "Not enabled" : "Non activate",
+ "Wrong password" : "Contrasigno incorrecte",
+ "Saved" : "Salveguardate",
+ "No user supplied" : "Nulle usator fornite",
+ "Unable to change password" : "Impossibile cambiar contrasigno",
+ "Authentication error" : "Error in authentication",
+ "Migration Completed" : "Migration completate",
+ "Group already exists." : "Gruppo ja existe.",
+ "Unable to add group." : "Impossibile adder gruppo.",
+ "Unable to delete group." : "Impossibile deler gruppo.",
+ "test email settings" : "testar configurationes de e-posta",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Un problema occurreva durante le invio del e-posta. Per favor, revide tu configurationes. (Error: %s)",
+ "Email sent" : "Message de e-posta inviate",
+ "You need to set your user email before being able to send test emails." : "Tu debe configurar tu e-posta de usator ante esser capace a inviar e-posta de test.",
+ "Invalid request" : "Requesta non valide",
+ "Invalid mail address" : "Adresse de e-posta non valide",
+ "No valid group selected" : "Nulle gruppo valide selectionate",
+ "A user with that name already exists." : "Un usator con iste nomine ja existe.",
+ "Unable to create user." : "Impossibile crear usator.",
+ "Your %s account was created" : "Tu conto %s esseva create",
+ "Unable to delete user." : "Impossibile deler usator.",
+ "Settings saved" : "Configurationes salveguardate",
+ "Unable to change full name" : "Impossibile cambiar nomine complete",
+ "Unable to change email address" : "Impossibile cambiar adresse de e-posta",
+ "Your full name has been changed." : "Tu nomine complete esseva cambiate.",
+ "Forbidden" : "Prohibite",
+ "Invalid user" : "Usator invalide",
+ "Unable to change mail address" : "Impossibile cambiar adresse de e-posta",
+ "Password confirmation is required" : "Un confirmation del contrasigno es necessari",
+ "Couldn't remove app." : "Impossibile remover application.",
+ "Couldn't update app." : "Impossibile actualisar application.",
+ "Official" : "Official",
+ "All" : "Tote",
+ "Update to %s" : "Actualisar a %s",
+ "Disable" : "Disactivar",
+ "Enable" : "Activar",
+ "Updating...." : "Actualisante...",
+ "Uninstall" : "De-installar",
+ "Experimental" : "Experimental",
+ "Disconnect" : "Disconnecter",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome pro Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "This session" : "Iste session",
+ "Copy" : "Copiar",
+ "Copied!" : "Copiate!",
+ "Press ⌘-C to copy." : "Pulsa ⌘-C pro copiar.",
+ "Press Ctrl-C to copy." : "Pulsa Ctrl-C pro copiar.",
+ "Delete" : "Deler",
+ "Local" : "Local",
+ "Only visible to local users" : "Solmente visibile a usatores local",
+ "Only visible to you" : "Solmente visibile a tu",
+ "Contacts" : "Contactos",
+ "Groups" : "Gruppos",
+ "undo" : "disfacer",
+ "never" : "nunquam",
+ "Personal info" : "Information personal",
+ "Sessions" : "Sessiones",
+ "App passwords" : "Contrasignos de applicationes",
+ "Email server" : "Servitor de e-posta",
+ "Encryption" : "Cryptographia",
+ "Version" : "Version",
+ "days" : "dies",
+ "Tips & tricks" : "Consilios e maneos",
+ "Theming" : "Themas",
+ "Documentation:" : "Documentation:",
+ "User documentation" : "Documentation de usator",
+ "Admin documentation" : "Documentation de administrator",
+ "Visit website" : "Visitar sito web",
+ "Report a bug" : "Reportar un defecto",
+ "Show description …" : "Monstrar description...",
+ "Hide description …" : "Celar description...",
+ "Common Name" : "Nomine Commun",
+ "Valid until" : "Valide usque",
+ "Valid until %s" : "Valide usque %s",
+ "Import root certificate" : "Importar certificato root",
+ "Administrator documentation" : "Documentation de administrator",
+ "Online documentation" : "Documentation in linea",
+ "Forum" : "Foro",
+ "Commercial support" : "Supporto commercial",
+ "Upload new" : "Incargar nove",
+ "Remove image" : "Remover imagine",
+ "Cancel" : "Cancellar",
+ "Address" : "Adresse",
+ "Your postal address" : "Tu adresse postal",
+ "Website" : "Sito web",
+ "Your website" : "Tu sito web",
+ "Twitter" : "Twitter",
+ "You are member of the following groups:" : "Tu es membro del sequente gruppos:",
+ "Password" : "Contrasigno",
+ "Current password" : "Contrasigno actual",
+ "New password" : "Nove contrasigno",
+ "Change password" : "Cambiar contrasigno",
+ "Language" : "Lingua",
+ "Help translate" : "Adjuta a traducer",
+ "Device" : "Dispositivo",
+ "Passcodes that give an app or device permissions to access your account." : "Contrasignos que dona a tu application o dispositivo le permissiones pro acceder a tu conto.",
+ "Name" : "Nomine",
+ "App name" : "Nomine del application",
+ "Create new app password" : "Crear un nove contrasigno pro application",
+ "Use the credentials below to configure your app or device." : "Usa le datos de authentication infra pro configurar tu application o dispositivo.",
+ "Username" : "Nomine de usator",
+ "Done" : "Preste",
+ "Follow us on Google Plus!" : "Seque nos in Google Plus!",
+ "E-Mail" : "E-posta",
+ "Create" : "Crear",
+ "Group name" : "Nomine del gruppo",
+ "Everyone" : "Totos",
+ "Admins" : "Administratores",
+ "Default quota" : "Quota predefinite",
+ "Other" : "Altere",
+ "Quota" : "Quota",
+ "Please wait...." : "Per favor attende...",
+ "iPhone" : "iPhone",
+ "add group" : "adder gruppo",
+ "Log" : "Registro",
+ "What to log" : "Que registrar?",
+ "Download logfile" : "Discargar file de registro",
+ "More" : "Plus",
+ "Less" : "Minus",
+ "Add Group" : "Adder Gruppo",
+ "Group" : "Gruppo"
+},"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 192fcee5e67..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.",
@@ -292,6 +289,9 @@ 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",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index 63d53f1ba14..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.",
@@ -290,6 +287,9 @@
"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",
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index 5718ce727d5..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ð",
@@ -296,6 +293,9 @@ 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",
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index 2629549dbc6..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ð",
@@ -294,6 +291,9 @@
"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",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 59b7a06f2a2..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",
@@ -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",
@@ -341,6 +341,9 @@ 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",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 6edd1efd647..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",
@@ -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",
@@ -339,6 +339,9 @@
"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",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index e64915ef5c2..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" : "信頼するドメイン名に追加",
@@ -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" : "グループなし",
@@ -341,6 +340,9 @@ 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",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index c998cccc687..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" : "信頼するドメイン名に追加",
@@ -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" : "グループなし",
@@ -339,6 +338,9 @@
"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",
diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js
index 6371621de15..131f1beb0f3 100644
--- a/settings/l10n/ka_GE.js
+++ b/settings/l10n/ka_GE.js
@@ -5,9 +5,6 @@ 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" : "ყველა",
"Disable" : "გამორთვა",
@@ -56,6 +53,9 @@ 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" : "უფრო მეტი",
diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json
index bd1c1b4dd8c..d2953e86a98 100644
--- a/settings/l10n/ka_GE.json
+++ b/settings/l10n/ka_GE.json
@@ -3,9 +3,6 @@
"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" : "ყველა",
"Disable" : "გამორთვა",
@@ -54,6 +51,9 @@
"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" : "უფრო მეტი",
diff --git a/settings/l10n/km.js b/settings/l10n/km.js
index 5632b01a146..5c604f03c49 100644
--- a/settings/l10n/km.js
+++ b/settings/l10n/km.js
@@ -10,9 +10,6 @@ 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" : "ទាំងអស់",
@@ -73,6 +70,9 @@ 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" : "ច្រើន​ទៀត",
diff --git a/settings/l10n/km.json b/settings/l10n/km.json
index a08b32a609b..00f212fc436 100644
--- a/settings/l10n/km.json
+++ b/settings/l10n/km.json
@@ -8,9 +8,6 @@
"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" : "ទាំងអស់",
@@ -71,6 +68,9 @@
"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" : "ច្រើន​ទៀត",
diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js
index 00942e0680e..441cc3e1ee6 100644
--- a/settings/l10n/kn.js
+++ b/settings/l10n/kn.js
@@ -26,9 +26,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." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
@@ -107,6 +104,9 @@ 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" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json
index 766de4c9410..76d068bfb5a 100644
--- a/settings/l10n/kn.json
+++ b/settings/l10n/kn.json
@@ -24,9 +24,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." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
@@ -105,6 +102,9 @@
"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" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index e665803a971..adaff000a69 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.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" : "신뢰할 수 있는 도메인 추가",
@@ -337,6 +334,9 @@ 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" : "아이폰",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index 451b7b17b26..08934a74bd5 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.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" : "신뢰할 수 있는 도메인 추가",
@@ -335,6 +332,9 @@
"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" : "아이폰",
diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js
index 33960d9b9ae..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,6 +47,8 @@ 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",
diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json
index 20f255a6be9..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,6 +45,8 @@
"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",
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 60645a30070..6d564652550 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -29,9 +29,6 @@ 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.",
"Add trusted domain" : "Pridėti patikimą domeną",
"Not saved" : "Neįrašyta",
@@ -166,6 +163,9 @@ 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",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index cd359354248..85d13b49170 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -27,9 +27,6 @@
"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.",
"Add trusted domain" : "Pridėti patikimą domeną",
"Not saved" : "Neįrašyta",
@@ -164,6 +161,9 @@
"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",
diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js
index 13ea3628329..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,46 +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",
- "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",
@@ -58,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",
@@ -117,35 +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",
- "Group" : "Grupa"
+ "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",
+ "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 2633c64ed15..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,46 +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",
- "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",
@@ -56,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",
@@ -115,35 +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",
- "Group" : "Grupa"
+ "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",
+ "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 ed5cde4f7d0..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 …" : "Миграцијата е започнаа ...",
@@ -163,6 +160,9 @@ 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" : "Предупредувања, грешки и фатални работи",
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index 65d7b25933f..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 …" : "Миграцијата е започнаа ...",
@@ -161,6 +158,9 @@
"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" : "Предупредувања, грешки и фатални работи",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 9dd8ab0ac72..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.",
@@ -309,6 +306,9 @@ 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",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 96f6a5b8be4..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.",
@@ -307,6 +304,9 @@
"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",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index ad50ed8781e..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",
@@ -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",
@@ -341,6 +341,9 @@ 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",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index bb09350a18d..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",
@@ -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",
@@ -339,6 +339,9 @@
"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",
diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js
index 8e55154fd83..a3715eaf4d8 100644
--- a/settings/l10n/nn_NO.js
+++ b/settings/l10n/nn_NO.js
@@ -10,9 +10,6 @@ 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",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
@@ -72,6 +69,9 @@ 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",
diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json
index 2fdd74a5424..940aa42c3b1 100644
--- a/settings/l10n/nn_NO.json
+++ b/settings/l10n/nn_NO.json
@@ -8,9 +8,6 @@
"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",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
@@ -70,6 +67,9 @@
"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",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index 44444e737dc..b746aadd750 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -38,9 +38,6 @@ OC.L10N.register(
"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ę",
@@ -51,7 +48,7 @@ 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",
"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",
@@ -310,6 +307,9 @@ 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",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index 87b0f8f1d57..e060b28d5ed 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -36,9 +36,6 @@
"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ę",
@@ -49,7 +46,7 @@
"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",
"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",
@@ -308,6 +305,9 @@
"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",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 807f63c7618..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",
@@ -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",
@@ -341,6 +341,9 @@ 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",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 29fef7a6721..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",
@@ -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",
@@ -339,6 +339,9 @@
"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",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 91f8d3570ca..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..",
@@ -254,6 +251,9 @@ 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)",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 9b2e2b49c24..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..",
@@ -252,6 +249,9 @@
"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)",
diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js
index 8d21c64415b..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ă",
@@ -188,6 +185,9 @@ 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",
diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json
index bf931ed386d..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ă",
@@ -186,6 +183,9 @@
"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",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 906bf2e7b53..6c5ad892fda 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -22,9 +22,10 @@ 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 создана",
@@ -39,9 +40,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" : "Добавить доверенный домен",
@@ -125,6 +123,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" : "Без группы",
@@ -341,6 +341,9 @@ 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",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index acc42b2cb49..e9c916fde66 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -20,9 +20,10 @@
"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 создана",
@@ -37,9 +38,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" : "Добавить доверенный домен",
@@ -123,6 +121,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" : "Без группы",
@@ -339,6 +339,9 @@
"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",
diff --git a/settings/l10n/si_LK.js b/settings/l10n/si_LK.js
index fb8754b18cc..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,6 +34,8 @@ 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" : "අඩු"
diff --git a/settings/l10n/si_LK.json b/settings/l10n/si_LK.json
index 93559d04eb8..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,6 +32,8 @@
"Other" : "වෙනත්",
"Quota" : "සලාකය",
"Language changed" : "භාෂාව ාවනස් කිරීම",
+ "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
+ "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Log" : "ලඝුව",
"More" : "වැඩි",
"Less" : "අඩු"
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 6af204caaa9..2d3e4a35609 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -37,9 +37,6 @@ OC.L10N.register(
"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",
@@ -225,6 +222,7 @@ OC.L10N.register(
"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",
@@ -303,6 +301,9 @@ OC.L10N.register(
"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",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index faf66bbaca6..227e9b1b061 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -35,9 +35,6 @@
"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",
@@ -223,6 +220,7 @@
"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",
@@ -301,6 +299,9 @@
"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",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index 2192820e220..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.",
@@ -242,6 +239,9 @@ 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)",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 860b93c4415..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.",
@@ -240,6 +237,9 @@
"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)",
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index 6e9217c7ad9..0f55b61956e 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"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",
@@ -341,6 +338,9 @@ OC.L10N.register(
"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",
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index c2d345f3ad2..62d72bb52dc 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -37,9 +37,6 @@
"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",
@@ -339,6 +336,9 @@
"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",
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index c548718a801..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" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -214,6 +211,9 @@ 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)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)",
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index 87e1a5094bd..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" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -212,6 +209,9 @@
"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)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)",
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index cc738f841ed..964c65427cd 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"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",
@@ -174,7 +171,7 @@ OC.L10N.register(
"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",
@@ -206,7 +203,7 @@ OC.L10N.register(
"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",
@@ -341,6 +338,9 @@ OC.L10N.register(
"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",
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index 55a40b7173a..8bfa6e9b38e 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -37,9 +37,6 @@
"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",
@@ -172,7 +169,7 @@
"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",
@@ -204,7 +201,7 @@
"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",
@@ -339,6 +336,9 @@
"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",
diff --git a/settings/l10n/ta_LK.js b/settings/l10n/ta_LK.js
index d16ebf306e3..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,6 +33,8 @@ 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" : "குறைவான"
},
diff --git a/settings/l10n/ta_LK.json b/settings/l10n/ta_LK.json
index ac3f00ca2e0..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,6 +31,8 @@
"Other" : "மற்றவை",
"Quota" : "பங்கு",
"Language changed" : "மொழி மாற்றப்பட்டது",
+ "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
+ "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"More" : "மேலதிக",
"Less" : "குறைவான"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js
index 7c493b11a53..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" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น",
@@ -244,6 +241,9 @@ 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)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)",
diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json
index 19e9b941834..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" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น",
@@ -242,6 +239,9 @@
"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)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index e37b8dfa955..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",
@@ -285,6 +282,9 @@ 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",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 95fbac30ff9..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",
@@ -283,6 +280,9 @@
"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",
diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js
index bf4b16b3027..c93f085439d 100644
--- a/settings/l10n/ug.js
+++ b/settings/l10n/ug.js
@@ -4,9 +4,6 @@ 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" : "ھەممىسى",
"Disable" : "چەكلە",
@@ -46,6 +43,9 @@ 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" : "تېخىمۇ كۆپ",
diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json
index b99ed2b034b..70a46e94da0 100644
--- a/settings/l10n/ug.json
+++ b/settings/l10n/ug.json
@@ -2,9 +2,6 @@
"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" : "ھەممىسى",
"Disable" : "چەكلە",
@@ -44,6 +41,9 @@
"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" : "تېخىمۇ كۆپ",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index af6a3735ec5..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" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -218,6 +215,9 @@ 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)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index 13159cb589f..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" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -216,6 +213,9 @@
"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)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)",
diff --git a/settings/l10n/vi.js b/settings/l10n/vi.js
index c989c037a72..cd73020bddb 100644
--- a/settings/l10n/vi.js
+++ b/settings/l10n/vi.js
@@ -9,9 +9,6 @@ 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ả",
"Disable" : "Tắt",
@@ -62,6 +59,9 @@ 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",
diff --git a/settings/l10n/vi.json b/settings/l10n/vi.json
index a6f1e0427d6..cd1a4245ca0 100644
--- a/settings/l10n/vi.json
+++ b/settings/l10n/vi.json
@@ -7,9 +7,6 @@
"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ả",
"Disable" : "Tắt",
@@ -60,6 +57,9 @@
"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",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index 5c7fd8feb8d..9392b2d92e1 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -3,57 +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." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。",
+ "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" : "错误: 无法禁用损坏的应用",
@@ -61,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" : "必须提供合法的密码",
@@ -93,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" : "来自地址",
@@ -117,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" : "强制密码保护",
@@ -157,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" : "仅对特定的组开放",
+ "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}\" 为信任域?",
+ "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" : "警告,错误和灾难性问题",
+ "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" : "日志",
@@ -251,17 +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",
- "Group" : "分组"
+ "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" : "分组",
+ "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 10e7ca844a8..46079a83ceb 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -1,57 +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." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。",
+ "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" : "错误: 无法禁用损坏的应用",
@@ -59,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" : "必须提供合法的密码",
@@ -91,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" : "来自地址",
@@ -115,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" : "强制密码保护",
@@ -155,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" : "仅对特定的组开放",
+ "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}\" 为信任域?",
+ "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" : "警告,错误和灾难性问题",
+ "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" : "日志",
@@ -249,17 +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",
- "Group" : "分组"
+ "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" : "分组",
+ "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_TW.js b/settings/l10n/zh_TW.js
index f19a6e825d0..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" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -253,6 +250,9 @@ 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",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 595b47eb9be..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" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -251,6 +248,9 @@
"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",
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 a4b08f11693..80689237e60 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -150,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/tests/Core/Controller/LoginControllerTest.php b/tests/Core/Controller/LoginControllerTest.php
index 600179a1dc5..72f921724a5 100644
--- a/tests/Core/Controller/LoginControllerTest.php
+++ b/tests/Core/Controller/LoginControllerTest.php
@@ -89,7 +89,7 @@ class LoginControllerTest extends TestCase {
$this->request
->expects($this->once())
->method('getCookie')
- ->with('oc_token')
+ ->with('nc_token')
->willReturn(null);
$this->config
->expects($this->never())
@@ -108,7 +108,7 @@ class LoginControllerTest extends TestCase {
$this->request
->expects($this->once())
->method('getCookie')
- ->with('oc_token')
+ ->with('nc_token')
->willReturn('MyLoginToken');
$user = $this->getMockBuilder('\\OCP\\IUser')->getMock();
$user
@@ -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/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/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/lib/AppFramework/Http/RequestTest.php b/tests/lib/AppFramework/Http/RequestTest.php
index b1515b0efb5..6c6504b4de8 100644
--- a/tests/lib/AppFramework/Http/RequestTest.php
+++ b/tests/lib/AppFramework/Http/RequestTest.php
@@ -1651,7 +1651,7 @@ class RequestTest extends \Test\TestCase {
'HTTP_REQUESTTOKEN' => 'AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds',
],
'cookies' => [
- 'oc_token' => 'asdf',
+ 'nc_token' => 'asdf',
],
],
$this->secureRandom,
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/Federation/CloudIdManagerTest.php b/tests/lib/Federation/CloudIdManagerTest.php
new file mode 100644
index 00000000000..fe673588bba
--- /dev/null
+++ b/tests/lib/Federation/CloudIdManagerTest.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 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 Test\Federation;
+
+use OC\Federation\CloudIdManager;
+use Test\TestCase;
+
+class CloudIdManagerTest extends TestCase {
+ /** @var CloudIdManager */
+ private $cloudIdManager;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->cloudIdManager = new CloudIdManager();
+ }
+
+ public function cloudIdProvider() {
+ return [
+ ['test@example.com', 'test', 'example.com', 'test@example.com'],
+ ['test@example.com/cloud', 'test', 'example.com/cloud', 'test@example.com/cloud'],
+ ['test@example.com/cloud/', 'test', 'example.com/cloud', 'test@example.com/cloud'],
+ ['test@example.com/cloud/index.php', 'test', 'example.com/cloud', 'test@example.com/cloud'],
+ ['test@example.com@example.com', 'test@example.com', 'example.com', 'test@example.com@example.com'],
+ ];
+ }
+
+ /**
+ * @dataProvider cloudIdProvider
+ *
+ * @param string $cloudId
+ * @param string $user
+ * @param string $remote
+ */
+ public function testResolveCloudId($cloudId, $user, $remote, $cleanId) {
+ $cloudId = $this->cloudIdManager->resolveCloudId($cloudId);
+
+ $this->assertEquals($user, $cloudId->getUser());
+ $this->assertEquals($remote, $cloudId->getRemote());
+ $this->assertEquals($cleanId, $cloudId->getId());
+ }
+
+ public function invalidCloudIdProvider() {
+ return [
+ ['example.com'],
+ ['test:foo@example.com'],
+ ['test/foo@example.com']
+ ];
+ }
+
+ /**
+ * @dataProvider invalidCloudIdProvider
+ *
+ * @param string $cloudId
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testInvalidCloudId($cloudId) {
+ $this->cloudIdManager->resolveCloudId($cloudId);
+ }
+
+ public function getCloudIdProvider() {
+ return [
+ ['test', 'example.com', 'test@example.com'],
+ ['test@example.com', 'example.com', 'test@example.com@example.com'],
+ ];
+ }
+
+ /**
+ * @dataProvider getCloudIdProvider
+ *
+ * @param string $user
+ * @param string $remote
+ * @param string $id
+ */
+ public function testGetCloudId($user, $remote, $id) {
+ $cloudId = $this->cloudIdManager->getCloudId($user, $remote);
+
+ $this->assertEquals($id, $cloudId->getId());
+ }
+}
diff --git a/tests/lib/Federation/CloudIdTest.php b/tests/lib/Federation/CloudIdTest.php
new file mode 100644
index 00000000000..7a6e841fb34
--- /dev/null
+++ b/tests/lib/Federation/CloudIdTest.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 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 Test\Federation;
+
+use OC\Federation\CloudId;
+use Test\TestCase;
+
+class CloudIdTest extends TestCase {
+ public function testGetDisplayCloudIdProvider() {
+ return [
+ ['test@example.com', 'test@example.com'],
+ ['test@http://example.com', 'test@example.com'],
+ ['test@https://example.com', 'test@example.com'],
+ ];
+ }
+
+ /**
+ * @dataProvider testGetDisplayCloudIdProvider
+ *
+ * @param string $id
+ * @param string $display
+ */
+ public function testGetDisplayCloudId($id, $display) {
+ $cloudId = new CloudId($id, '', '');
+ $this->assertEquals($display, $cloudId->getDisplayId());
+ }
+}
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/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/Lockdown/Filesystem/NullStorageTest.php b/tests/lib/Lockdown/Filesystem/NullStorageTest.php
index dc99eb4c03a..c6faf325cd4 100644
--- a/tests/lib/Lockdown/Filesystem/NullStorageTest.php
+++ b/tests/lib/Lockdown/Filesystem/NullStorageTest.php
@@ -27,6 +27,7 @@ use Icewind\Streams\IteratorDirectory;
use OC\ForbiddenException;
use OC\Lockdown\Filesystem\NullCache;
use OC\Lockdown\Filesystem\NullStorage;
+use OC\Files\FileInfo;
use OCP\Files\Storage;
use Test\TestCase;
@@ -182,7 +183,7 @@ class NullStorageTest extends TestCase {
}
public function testFree_space() {
- $this->assertSame(0, $this->storage->free_space('foo'));
+ $this->assertSame(FileInfo::SPACE_UNKNOWN, $this->storage->free_space('foo'));
}
public function testTouch() {
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/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/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/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php
index b91331a1d30..70401abb652 100644
--- a/tests/lib/Settings/ManagerTest.php
+++ b/tests/lib/Settings/ManagerTest.php
@@ -32,6 +32,7 @@ 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;
@@ -55,18 +56,21 @@ class ManagerTest extends TestCase {
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->mapper = $this->getMockBuilder(Mapper::class)->disableOriginalConstructor()->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,
@@ -76,7 +80,8 @@ class ManagerTest extends TestCase {
$this->encryptionManager,
$this->userManager,
$this->lockingProvider,
- $this->mapper
+ $this->mapper,
+ $this->url
);
}
@@ -133,22 +138,26 @@ class ManagerTest extends TestCase {
$this->mapper->expects($this->once())
->method('getAdminSectionsFromDB')
->will($this->returnValue([
- ['class' => '\OCA\LogReader\Settings\Section', 'priority' => 90]
+ ['class' => \OCA\WorkflowEngine\Settings\Section::class, 'priority' => 90]
]));
- $this->mapper->expects($this->once())
- ->method('getAdminSettingsCountFromDB')
- ->will($this->returnValue([
- 'logging' => 1
- ]));
+ $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)],
- 90 => [new \OCA\LogReader\Settings\Section(\OC::$server->getL10N('logreader'))],
- 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')],
+ 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());
}
@@ -161,19 +170,24 @@ class ManagerTest extends TestCase {
$this->mapper->expects($this->once())
->method('getAdminSectionsFromDB')
->will($this->returnValue([
- ['class' => '\OCA\LogReader\Settings\Section', 'priority' => 90]
]));
- $this->mapper->expects($this->once())
- ->method('getAdminSettingsCountFromDB')
- ->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());
}
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/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/UpdaterTest.php b/tests/lib/UpdaterTest.php
index 80c7c28cd68..afa0635768d 100644
--- a/tests/lib/UpdaterTest.php
+++ b/tests/lib/UpdaterTest.php
@@ -57,92 +57,31 @@ class UpdaterTest extends TestCase {
}
/**
- * @param string $baseUrl
- * @return string
- */
- private function buildUpdateUrl($baseUrl) {
- return $baseUrl . '?version='.implode('x', \OCP\Util::getVersion()).'xinstalledatxlastupdatedatx'.\OC_Util::getChannel().'xx';
- }
-
- /**
* @return array
*/
public function versionCompatibilityTestData() {
return [
- ['1', '2', '1', true],
- ['2', '2', '2', true],
- ['6.0.5.0', '6.0.6.0', '5.0', true],
- ['5.0.6.0', '7.0.4.0', '6.0', false],
- // allow upgrading within the same major release
- ['8.0.0.0', '8.0.0.0', '8.0', true],
- ['8.0.0.0', '8.0.0.4', '8.0', true],
- ['8.0.0.0', '8.0.1.0', '8.0', true],
- ['8.0.0.0', '8.0.2.0', '8.0', true],
- // does not allow downgrading within the same major release
- ['8.0.1.0', '8.0.0.0', '8.0', false],
- ['8.0.2.0', '8.0.1.0', '8.0', false],
- ['8.0.0.4', '8.0.0.0', '8.0', false],
- // allows upgrading within the patch version
- ['8.0.0.0', '8.0.0.1', '8.0', true],
- ['8.0.0.0', '8.0.0.2', '8.0', true],
- // does not allow downgrading within the same major release
- ['8.0.0.1', '8.0.0.0', '8.0', false],
- ['8.0.0.2', '8.0.0.0', '8.0', false],
- // allow upgrading to the next major release
- ['8.0.0.0', '8.1.0.0', '8.0', true],
- ['8.0.0.0', '8.1.1.0', '8.0', true],
- ['8.0.0.0', '8.1.1.5', '8.0', true],
- ['8.0.0.2', '8.1.1.5', '8.0', true],
- ['8.1.0.0', '8.2.0.0', '8.1', true],
- ['8.1.0.2', '8.2.0.4', '8.1', true],
- ['8.1.0.5', '8.2.0.1', '8.1', true],
- ['8.1.0.0', '8.2.1.0', '8.1', true],
- ['8.1.0.2', '8.2.1.5', '8.1', true],
- ['8.1.0.5', '8.2.1.1', '8.1', true],
- // does not allow downgrading to the previous major release
- ['8.1.0.0', '8.0.0.0', '7.0', false],
- ['8.1.1.0', '8.0.0.0', '7.0', false],
- // does not allow skipping major releases
- ['8.0.0.0', '8.2.0.0', '8.1', false],
- ['8.0.0.0', '8.2.1.0', '8.1', false],
- ['8.0.0.0', '9.0.1.0', '8.2', false],
- ['8.0.0.0', '10.0.0.0', '9.3', false],
- // allows updating to the next major release
- ['8.2.0.0', '9.0.0.0', '8.2', true],
- ['8.2.0.0', '9.0.0.0', '8.2', true],
- ['8.2.0.0', '9.0.1.0', '8.2', true],
- ['8.2.0.0', '9.0.1.1', '8.2', true],
- ['8.2.0.2', '9.0.1.1', '8.2', true],
- ['8.2.2.0', '9.0.1.0', '8.2', true],
- ['8.2.2.2', '9.0.1.1', '8.2', true],
- ['9.0.0.0', '9.1.0.0', '9.0', true],
- ['9.0.0.0', '9.1.0.2', '9.0', true],
- ['9.0.0.2', '9.1.0.1', '9.0', true],
- ['9.1.0.0', '9.2.0.0', '9.1', true],
- ['9.2.0.0', '9.3.0.0', '9.2', true],
- ['9.3.0.0', '10.0.0.0', '9.3', true],
- // does not allow updating to the next major release (first number)
- ['9.0.0.0', '8.2.0.0', '8.1', false],
- // other cases
- ['8.0.0.0', '8.1.5.0', '8.0', true],
- ['8.2.0.0', '9.0.0.0', '8.2', true],
- ['8.2.0.0', '9.1.0.0', '9.0', false],
- ['9.0.0.0', '8.1.0.0', '8.0', false],
- ['9.0.0.0', '8.0.0.0', '7.0', false],
- ['9.1.0.0', '8.0.0.0', '7.0', false],
- ['8.2.0.0', '8.1.0.0', '8.0', false],
-
- // With debug enabled
- ['8.0.0.0', '8.2.0.0', '8.1', false, true],
- ['8.1.0.0', '8.2.0.0', '8.1', true, true],
- ['8.2.0.1', '8.2.0.1', '8.1', true, true],
- ['8.3.0.0', '8.2.0.0', '8.1', true, true],
+ // Upgrade with invalid version
+ ['9.1.1.13', '11.0.2.25', ['nextcloud' => ['11.0' => true]], false],
+ ['10.0.1.13', '11.0.2.25', ['nextcloud' => ['11.0' => true]], false],
+ // Upgrad with valid version
+ ['11.0.1.13', '11.0.2.25', ['nextcloud' => ['11.0' => true]], true],
+ // Downgrade with valid version
+ ['11.0.2.25', '11.0.1.13', ['nextcloud' => ['11.0' => true]], false],
+ ['11.0.2.25', '11.0.1.13', ['nextcloud' => ['11.0' => true]], true, true],
+ // Downgrade with invalid version
+ ['11.0.2.25', '10.0.1.13', ['nextcloud' => ['10.0' => true]], false],
+ ['11.0.2.25', '10.0.1.13', ['nextcloud' => ['10.0' => true]], false, true],
- // Downgrade of maintenance
- ['9.0.53.0', '9.0.4.0', '8.1', false, false, 'nextcloud'],
- // with vendor switch
- ['9.0.53.0', '9.0.4.0', '8.1', true, false, ''],
- ['9.0.53.0', '9.0.4.0', '8.1', true, false, 'owncloud'],
+ // Migration with unknown vendor
+ ['9.1.1.13', '11.0.2.25', ['nextcloud' => ['9.1' => true]], false, false, 'owncloud'],
+ ['9.1.1.13', '11.0.2.25', ['nextcloud' => ['9.1' => true]], false, true, 'owncloud'],
+ // Migration with unsupported vendor version
+ ['9.1.1.13', '11.0.2.25', ['owncloud' => ['10.0' => true]], false, false, 'owncloud'],
+ ['9.1.1.13', '11.0.2.25', ['owncloud' => ['10.0' => true]], false, true, 'owncloud'],
+ // Migration with valid vendor version
+ ['9.1.1.13', '11.0.2.25', ['owncloud' => ['9.1' => true]], true, false, 'owncloud'],
+ ['9.1.1.13', '11.0.2.25', ['owncloud' => ['9.1' => true]], true, true, 'owncloud'],
];
}
@@ -151,12 +90,12 @@ class UpdaterTest extends TestCase {
*
* @param string $oldVersion
* @param string $newVersion
- * @param string $allowedVersion
+ * @param array $allowedVersions
* @param bool $result
* @param bool $debug
* @param string $vendor
*/
- public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result, $debug = false, $vendor = 'nextcloud') {
+ public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersions, $result, $debug = false, $vendor = 'nextcloud') {
$this->config->expects($this->any())
->method('getSystemValue')
->with('debug', false)
@@ -166,7 +105,7 @@ class UpdaterTest extends TestCase {
->with('core', 'vendor', '')
->willReturn($vendor);
- $this->assertSame($result, $this->updater->isUpgradePossible($oldVersion, $newVersion, $allowedVersion));
+ $this->assertSame($result, $this->updater->isUpgradePossible($oldVersion, $newVersion, $allowedVersions));
}
public function testSetSkip3rdPartyAppsDisable() {
diff --git a/version.php b/version.php
index 90f4e65055a..3d8abb5f2f4 100644
--- a/version.php
+++ b/version.php
@@ -31,7 +31,15 @@ $OC_Version = array(12, 0, 0, 12);
// The human readable string
$OC_VersionString = '12.0 alpha';
-$OC_VersionCanBeUpgradedFrom = array(11);
+$OC_VersionCanBeUpgradedFrom = [
+ 'nextcloud' => [
+ '11.0' => true,
+ '12.0' => true,
+ ],
+ 'owncloud' => [
+ '10.0' => true,
+ ],
+];
// default Nextcloud channel
$OC_Channel = 'git';