aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore9
-rw-r--r--.htaccess5
-rw-r--r--.idea/codeStyleSettings.xml2
-rw-r--r--.scrutinizer.yml3
m---------3rdparty0
-rw-r--r--README.md2
-rw-r--r--apps/files/ajax/delete.php4
-rw-r--r--apps/files/ajax/getstoragestats.php6
-rw-r--r--apps/files/ajax/list.php1
-rw-r--r--apps/files/ajax/mimeicon.php4
-rw-r--r--apps/files/ajax/newfile.php3
-rw-r--r--apps/files/ajax/upload.php38
-rw-r--r--apps/files/appinfo/app.php2
-rw-r--r--apps/files/appinfo/application.php40
-rw-r--r--apps/files/appinfo/remote.php3
-rw-r--r--apps/files/appinfo/routes.php29
-rw-r--r--apps/files/appinfo/update.php8
-rw-r--r--apps/files/command/scan.php43
-rw-r--r--apps/files/controller/apicontroller.php56
-rw-r--r--apps/files/css/files.css148
-rw-r--r--apps/files/css/mobile.css2
-rw-r--r--apps/files/css/upload.css24
-rw-r--r--apps/files/index.php23
-rw-r--r--apps/files/js/app.js27
-rw-r--r--apps/files/js/breadcrumb.js30
-rw-r--r--apps/files/js/favoritesfilelist.js99
-rw-r--r--apps/files/js/favoritesplugin.js116
-rw-r--r--apps/files/js/file-upload.js45
-rw-r--r--apps/files/js/fileactions.js389
-rw-r--r--apps/files/js/filelist.js318
-rw-r--r--apps/files/js/files.js16
-rw-r--r--apps/files/js/filesummary.js46
-rw-r--r--apps/files/js/navigation.js11
-rw-r--r--apps/files/js/search.js191
-rw-r--r--apps/files/js/tagsplugin.js172
-rw-r--r--apps/files/js/upload.js1
-rw-r--r--apps/files/l10n/ach.js3
-rw-r--r--apps/files/l10n/ach.json3
-rw-r--r--apps/files/l10n/ady.js3
-rw-r--r--apps/files/l10n/ady.json3
-rw-r--r--apps/files/l10n/af_ZA.js4
-rw-r--r--apps/files/l10n/af_ZA.json4
-rw-r--r--apps/files/l10n/ak.js3
-rw-r--r--apps/files/l10n/ak.json3
-rw-r--r--apps/files/l10n/am_ET.js3
-rw-r--r--apps/files/l10n/am_ET.json3
-rw-r--r--apps/files/l10n/ar.js12
-rw-r--r--apps/files/l10n/ar.json12
-rw-r--r--apps/files/l10n/ast.js12
-rw-r--r--apps/files/l10n/ast.json12
-rw-r--r--apps/files/l10n/az.js8
-rw-r--r--apps/files/l10n/az.json8
-rw-r--r--apps/files/l10n/be.js4
-rw-r--r--apps/files/l10n/be.json4
-rw-r--r--apps/files/l10n/bg_BG.js14
-rw-r--r--apps/files/l10n/bg_BG.json14
-rw-r--r--apps/files/l10n/bn_BD.js11
-rw-r--r--apps/files/l10n/bn_BD.json11
-rw-r--r--apps/files/l10n/bn_IN.js6
-rw-r--r--apps/files/l10n/bn_IN.json6
-rw-r--r--apps/files/l10n/bs.js107
-rw-r--r--apps/files/l10n/bs.json107
-rw-r--r--apps/files/l10n/ca.js14
-rw-r--r--apps/files/l10n/ca.json14
-rw-r--r--apps/files/l10n/ca@valencia.js3
-rw-r--r--apps/files/l10n/ca@valencia.json3
-rw-r--r--apps/files/l10n/cs_CZ.js24
-rw-r--r--apps/files/l10n/cs_CZ.json24
-rw-r--r--apps/files/l10n/cy_GB.js10
-rw-r--r--apps/files/l10n/cy_GB.json10
-rw-r--r--apps/files/l10n/da.js22
-rw-r--r--apps/files/l10n/da.json22
-rw-r--r--apps/files/l10n/de.js24
-rw-r--r--apps/files/l10n/de.json24
-rw-r--r--apps/files/l10n/de_AT.js3
-rw-r--r--apps/files/l10n/de_AT.json3
-rw-r--r--apps/files/l10n/de_DE.js24
-rw-r--r--apps/files/l10n/de_DE.json24
-rw-r--r--apps/files/l10n/el.js14
-rw-r--r--apps/files/l10n/el.json14
-rw-r--r--apps/files/l10n/en@pirate.js1
-rw-r--r--apps/files/l10n/en@pirate.json1
-rw-r--r--apps/files/l10n/en_GB.js24
-rw-r--r--apps/files/l10n/en_GB.json24
-rw-r--r--apps/files/l10n/en_NZ.js3
-rw-r--r--apps/files/l10n/en_NZ.json3
-rw-r--r--apps/files/l10n/eo.js13
-rw-r--r--apps/files/l10n/eo.json13
-rw-r--r--apps/files/l10n/es.js24
-rw-r--r--apps/files/l10n/es.json24
-rw-r--r--apps/files/l10n/es_AR.js13
-rw-r--r--apps/files/l10n/es_AR.json13
-rw-r--r--apps/files/l10n/es_BO.js3
-rw-r--r--apps/files/l10n/es_BO.json3
-rw-r--r--apps/files/l10n/es_CL.js5
-rw-r--r--apps/files/l10n/es_CL.json5
-rw-r--r--apps/files/l10n/es_CO.js3
-rw-r--r--apps/files/l10n/es_CO.json3
-rw-r--r--apps/files/l10n/es_CR.js3
-rw-r--r--apps/files/l10n/es_CR.json3
-rw-r--r--apps/files/l10n/es_EC.js3
-rw-r--r--apps/files/l10n/es_EC.json3
-rw-r--r--apps/files/l10n/es_MX.js12
-rw-r--r--apps/files/l10n/es_MX.json12
-rw-r--r--apps/files/l10n/es_PE.js3
-rw-r--r--apps/files/l10n/es_PE.json3
-rw-r--r--apps/files/l10n/es_PY.js3
-rw-r--r--apps/files/l10n/es_PY.json3
-rw-r--r--apps/files/l10n/es_US.js3
-rw-r--r--apps/files/l10n/es_US.json3
-rw-r--r--apps/files/l10n/es_UY.js3
-rw-r--r--apps/files/l10n/es_UY.json3
-rw-r--r--apps/files/l10n/et_EE.js13
-rw-r--r--apps/files/l10n/et_EE.json13
-rw-r--r--apps/files/l10n/eu.js13
-rw-r--r--apps/files/l10n/eu.json13
-rw-r--r--apps/files/l10n/fa.js11
-rw-r--r--apps/files/l10n/fa.json11
-rw-r--r--apps/files/l10n/fi.js17
-rw-r--r--apps/files/l10n/fi.json15
-rw-r--r--apps/files/l10n/fi_FI.js24
-rw-r--r--apps/files/l10n/fi_FI.json24
-rw-r--r--apps/files/l10n/fil.js3
-rw-r--r--apps/files/l10n/fil.json3
-rw-r--r--apps/files/l10n/fr.js60
-rw-r--r--apps/files/l10n/fr.json60
-rw-r--r--apps/files/l10n/fr_CA.js3
-rw-r--r--apps/files/l10n/fr_CA.json3
-rw-r--r--apps/files/l10n/fy_NL.js3
-rw-r--r--apps/files/l10n/fy_NL.json3
-rw-r--r--apps/files/l10n/gl.js25
-rw-r--r--apps/files/l10n/gl.json25
-rw-r--r--apps/files/l10n/gu.js3
-rw-r--r--apps/files/l10n/gu.json3
-rw-r--r--apps/files/l10n/he.js13
-rw-r--r--apps/files/l10n/he.json13
-rw-r--r--apps/files/l10n/hi.js6
-rw-r--r--apps/files/l10n/hi.json6
-rw-r--r--apps/files/l10n/hr.js12
-rw-r--r--apps/files/l10n/hr.json12
-rw-r--r--apps/files/l10n/hu_HU.js20
-rw-r--r--apps/files/l10n/hu_HU.json20
-rw-r--r--apps/files/l10n/hy.js1
-rw-r--r--apps/files/l10n/hy.json1
-rw-r--r--apps/files/l10n/ia.js6
-rw-r--r--apps/files/l10n/ia.json6
-rw-r--r--apps/files/l10n/id.js12
-rw-r--r--apps/files/l10n/id.json12
-rw-r--r--apps/files/l10n/io.js3
-rw-r--r--apps/files/l10n/io.json3
-rw-r--r--apps/files/l10n/is.js9
-rw-r--r--apps/files/l10n/is.json9
-rw-r--r--apps/files/l10n/it.js32
-rw-r--r--apps/files/l10n/it.json32
-rw-r--r--apps/files/l10n/ja.js22
-rw-r--r--apps/files/l10n/ja.json22
-rw-r--r--apps/files/l10n/jv.js1
-rw-r--r--apps/files/l10n/jv.json1
-rw-r--r--apps/files/l10n/ka_GE.js12
-rw-r--r--apps/files/l10n/ka_GE.json12
-rw-r--r--apps/files/l10n/km.js9
-rw-r--r--apps/files/l10n/km.json9
-rw-r--r--apps/files/l10n/kn.js87
-rw-r--r--apps/files/l10n/kn.json87
-rw-r--r--apps/files/l10n/ko.js13
-rw-r--r--apps/files/l10n/ko.json13
-rw-r--r--apps/files/l10n/ku_IQ.js5
-rw-r--r--apps/files/l10n/ku_IQ.json5
-rw-r--r--apps/files/l10n/lb.js11
-rw-r--r--apps/files/l10n/lb.json11
-rw-r--r--apps/files/l10n/lo.js9
-rw-r--r--apps/files/l10n/lo.json7
-rw-r--r--apps/files/l10n/lt_LT.js37
-rw-r--r--apps/files/l10n/lt_LT.json37
-rw-r--r--apps/files/l10n/lv.js61
-rw-r--r--apps/files/l10n/lv.json61
-rw-r--r--apps/files/l10n/mg.js3
-rw-r--r--apps/files/l10n/mg.json3
-rw-r--r--apps/files/l10n/mk.js12
-rw-r--r--apps/files/l10n/mk.json12
-rw-r--r--apps/files/l10n/ml.js3
-rw-r--r--apps/files/l10n/ml.json3
-rw-r--r--apps/files/l10n/ml_IN.js3
-rw-r--r--apps/files/l10n/ml_IN.json3
-rw-r--r--apps/files/l10n/mn.js7
-rw-r--r--apps/files/l10n/mn.json7
-rw-r--r--apps/files/l10n/ms_MY.js9
-rw-r--r--apps/files/l10n/ms_MY.json9
-rw-r--r--apps/files/l10n/mt_MT.js3
-rw-r--r--apps/files/l10n/mt_MT.json3
-rw-r--r--apps/files/l10n/my_MM.js1
-rw-r--r--apps/files/l10n/my_MM.json1
-rw-r--r--apps/files/l10n/nb_NO.js22
-rw-r--r--apps/files/l10n/nb_NO.json22
-rw-r--r--apps/files/l10n/nds.js3
-rw-r--r--apps/files/l10n/nds.json3
-rw-r--r--apps/files/l10n/ne.js3
-rw-r--r--apps/files/l10n/ne.json3
-rw-r--r--apps/files/l10n/nl.js24
-rw-r--r--apps/files/l10n/nl.json24
-rw-r--r--apps/files/l10n/nn_NO.js12
-rw-r--r--apps/files/l10n/nn_NO.json12
-rw-r--r--apps/files/l10n/nqo.js3
-rw-r--r--apps/files/l10n/nqo.json3
-rw-r--r--apps/files/l10n/oc.js8
-rw-r--r--apps/files/l10n/oc.json8
-rw-r--r--apps/files/l10n/or_IN.js3
-rw-r--r--apps/files/l10n/or_IN.json3
-rw-r--r--apps/files/l10n/pa.js7
-rw-r--r--apps/files/l10n/pa.json7
-rw-r--r--apps/files/l10n/pl.js13
-rw-r--r--apps/files/l10n/pl.json13
-rw-r--r--apps/files/l10n/pt_BR.js24
-rw-r--r--apps/files/l10n/pt_BR.json24
-rw-r--r--apps/files/l10n/pt_PT.js18
-rw-r--r--apps/files/l10n/pt_PT.json18
-rw-r--r--apps/files/l10n/ro.js13
-rw-r--r--apps/files/l10n/ro.json13
-rw-r--r--apps/files/l10n/ru.js42
-rw-r--r--apps/files/l10n/ru.json42
-rw-r--r--apps/files/l10n/si_LK.js10
-rw-r--r--apps/files/l10n/si_LK.json10
-rw-r--r--apps/files/l10n/sk_SK.js13
-rw-r--r--apps/files/l10n/sk_SK.json13
-rw-r--r--apps/files/l10n/sl.js22
-rw-r--r--apps/files/l10n/sl.json22
-rw-r--r--apps/files/l10n/sq.js47
-rw-r--r--apps/files/l10n/sq.json47
-rw-r--r--apps/files/l10n/sr.js10
-rw-r--r--apps/files/l10n/sr.json10
-rw-r--r--apps/files/l10n/sr@latin.js8
-rw-r--r--apps/files/l10n/sr@latin.json8
-rw-r--r--apps/files/l10n/su.js3
-rw-r--r--apps/files/l10n/su.json3
-rw-r--r--apps/files/l10n/sv.js28
-rw-r--r--apps/files/l10n/sv.json28
-rw-r--r--apps/files/l10n/sw_KE.js3
-rw-r--r--apps/files/l10n/sw_KE.json3
-rw-r--r--apps/files/l10n/ta_IN.js5
-rw-r--r--apps/files/l10n/ta_IN.json5
-rw-r--r--apps/files/l10n/ta_LK.js12
-rw-r--r--apps/files/l10n/ta_LK.json12
-rw-r--r--apps/files/l10n/te.js3
-rw-r--r--apps/files/l10n/te.json3
-rw-r--r--apps/files/l10n/tg_TJ.js3
-rw-r--r--apps/files/l10n/tg_TJ.json3
-rw-r--r--apps/files/l10n/th_TH.js12
-rw-r--r--apps/files/l10n/th_TH.json12
-rw-r--r--apps/files/l10n/tl_PH.js3
-rw-r--r--apps/files/l10n/tl_PH.json3
-rw-r--r--apps/files/l10n/tr.js13
-rw-r--r--apps/files/l10n/tr.json13
-rw-r--r--apps/files/l10n/tzm.js3
-rw-r--r--apps/files/l10n/tzm.json3
-rw-r--r--apps/files/l10n/ug.js12
-rw-r--r--apps/files/l10n/ug.json12
-rw-r--r--apps/files/l10n/uk.js13
-rw-r--r--apps/files/l10n/uk.json13
-rw-r--r--apps/files/l10n/ur_PK.js3
-rw-r--r--apps/files/l10n/ur_PK.json3
-rw-r--r--apps/files/l10n/uz.js3
-rw-r--r--apps/files/l10n/uz.json3
-rw-r--r--apps/files/l10n/vi.js13
-rw-r--r--apps/files/l10n/vi.json13
-rw-r--r--apps/files/l10n/zh_CN.js31
-rw-r--r--apps/files/l10n/zh_CN.json31
-rw-r--r--apps/files/l10n/zh_HK.js8
-rw-r--r--apps/files/l10n/zh_HK.json8
-rw-r--r--apps/files/l10n/zh_TW.js13
-rw-r--r--apps/files/l10n/zh_TW.json13
-rw-r--r--apps/files/lib/capabilities.php1
-rw-r--r--apps/files/lib/helper.php26
-rw-r--r--apps/files/service/tagservice.php94
-rw-r--r--apps/files/simplelist.php29
-rw-r--r--apps/files/templates/appnavigation.php10
-rw-r--r--apps/files/templates/fileexists.html1
-rw-r--r--apps/files/templates/index.php1
-rw-r--r--apps/files/templates/list.php31
-rw-r--r--apps/files/templates/simplelist.php46
-rw-r--r--apps/files/tests/ajax_rename.php17
-rw-r--r--apps/files/tests/helper.php11
-rw-r--r--apps/files/tests/js/favoritesfilelistspec.js109
-rw-r--r--apps/files/tests/js/favoritespluginspec.js130
-rw-r--r--apps/files/tests/js/fileactionsSpec.js48
-rw-r--r--apps/files/tests/js/filelistSpec.js109
-rw-r--r--apps/files/tests/js/filesummarySpec.js63
-rw-r--r--apps/files/tests/js/tagspluginspec.js87
-rw-r--r--apps/files/tests/service/tagservice.php121
-rw-r--r--apps/files/triggerupdate.php23
-rw-r--r--apps/files_encryption/ajax/adminrecovery.php7
-rw-r--r--apps/files_encryption/ajax/changeRecoveryPassword.php15
-rw-r--r--apps/files_encryption/ajax/getMigrationStatus.php3
-rw-r--r--apps/files_encryption/ajax/updatePrivateKeyPassword.php21
-rw-r--r--apps/files_encryption/ajax/userrecovery.php4
-rw-r--r--apps/files_encryption/appinfo/app.php26
-rw-r--r--apps/files_encryption/appinfo/routes.php2
-rw-r--r--apps/files_encryption/appinfo/update.php5
-rw-r--r--apps/files_encryption/appinfo/version2
-rw-r--r--apps/files_encryption/exception/encryptionexception.php50
-rw-r--r--apps/files_encryption/exception/multikeydecryptexception.php (renamed from apps/files_encryption/lib/exceptions.php)33
-rw-r--r--apps/files_encryption/exception/multikeyencryptexception.php34
-rw-r--r--apps/files_encryption/files/error.php8
-rw-r--r--apps/files_encryption/js/encryption.js4
-rw-r--r--apps/files_encryption/l10n/ar.js2
-rw-r--r--apps/files_encryption/l10n/ar.json2
-rw-r--r--apps/files_encryption/l10n/ast.js2
-rw-r--r--apps/files_encryption/l10n/ast.json2
-rw-r--r--apps/files_encryption/l10n/bg_BG.js5
-rw-r--r--apps/files_encryption/l10n/bg_BG.json5
-rw-r--r--apps/files_encryption/l10n/bs.js10
-rw-r--r--apps/files_encryption/l10n/bs.json8
-rw-r--r--apps/files_encryption/l10n/ca.js2
-rw-r--r--apps/files_encryption/l10n/ca.json2
-rw-r--r--apps/files_encryption/l10n/cs_CZ.js14
-rw-r--r--apps/files_encryption/l10n/cs_CZ.json14
-rw-r--r--apps/files_encryption/l10n/da.js6
-rw-r--r--apps/files_encryption/l10n/da.json6
-rw-r--r--apps/files_encryption/l10n/de.js6
-rw-r--r--apps/files_encryption/l10n/de.json6
-rw-r--r--apps/files_encryption/l10n/de_DE.js6
-rw-r--r--apps/files_encryption/l10n/de_DE.json6
-rw-r--r--apps/files_encryption/l10n/el.js8
-rw-r--r--apps/files_encryption/l10n/el.json8
-rw-r--r--apps/files_encryption/l10n/en_GB.js6
-rw-r--r--apps/files_encryption/l10n/en_GB.json6
-rw-r--r--apps/files_encryption/l10n/es.js24
-rw-r--r--apps/files_encryption/l10n/es.json24
-rw-r--r--apps/files_encryption/l10n/es_AR.js2
-rw-r--r--apps/files_encryption/l10n/es_AR.json2
-rw-r--r--apps/files_encryption/l10n/es_MX.js2
-rw-r--r--apps/files_encryption/l10n/es_MX.json2
-rw-r--r--apps/files_encryption/l10n/et_EE.js5
-rw-r--r--apps/files_encryption/l10n/et_EE.json5
-rw-r--r--apps/files_encryption/l10n/eu.js2
-rw-r--r--apps/files_encryption/l10n/eu.json2
-rw-r--r--apps/files_encryption/l10n/fa.js1
-rw-r--r--apps/files_encryption/l10n/fa.json1
-rw-r--r--apps/files_encryption/l10n/fi_FI.js6
-rw-r--r--apps/files_encryption/l10n/fi_FI.json6
-rw-r--r--apps/files_encryption/l10n/fr.js20
-rw-r--r--apps/files_encryption/l10n/fr.json20
-rw-r--r--apps/files_encryption/l10n/gl.js18
-rw-r--r--apps/files_encryption/l10n/gl.json18
-rw-r--r--apps/files_encryption/l10n/hr.js2
-rw-r--r--apps/files_encryption/l10n/hr.json2
-rw-r--r--apps/files_encryption/l10n/hu_HU.js2
-rw-r--r--apps/files_encryption/l10n/hu_HU.json2
-rw-r--r--apps/files_encryption/l10n/id.js2
-rw-r--r--apps/files_encryption/l10n/id.json2
-rw-r--r--apps/files_encryption/l10n/it.js6
-rw-r--r--apps/files_encryption/l10n/it.json6
-rw-r--r--apps/files_encryption/l10n/ja.js10
-rw-r--r--apps/files_encryption/l10n/ja.json10
-rw-r--r--apps/files_encryption/l10n/kn.js9
-rw-r--r--apps/files_encryption/l10n/kn.json7
-rw-r--r--apps/files_encryption/l10n/ko.js2
-rw-r--r--apps/files_encryption/l10n/ko.json2
-rw-r--r--apps/files_encryption/l10n/lt_LT.js2
-rw-r--r--apps/files_encryption/l10n/lt_LT.json2
-rw-r--r--apps/files_encryption/l10n/lv.js4
-rw-r--r--apps/files_encryption/l10n/lv.json4
-rw-r--r--apps/files_encryption/l10n/nb_NO.js16
-rw-r--r--apps/files_encryption/l10n/nb_NO.json16
-rw-r--r--apps/files_encryption/l10n/nl.js6
-rw-r--r--apps/files_encryption/l10n/nl.json6
-rw-r--r--apps/files_encryption/l10n/pl.js10
-rw-r--r--apps/files_encryption/l10n/pl.json10
-rw-r--r--apps/files_encryption/l10n/pt_BR.js6
-rw-r--r--apps/files_encryption/l10n/pt_BR.json6
-rw-r--r--apps/files_encryption/l10n/pt_PT.js11
-rw-r--r--apps/files_encryption/l10n/pt_PT.json11
-rw-r--r--apps/files_encryption/l10n/ro.js1
-rw-r--r--apps/files_encryption/l10n/ro.json1
-rw-r--r--apps/files_encryption/l10n/ru.js66
-rw-r--r--apps/files_encryption/l10n/ru.json66
-rw-r--r--apps/files_encryption/l10n/sk_SK.js7
-rw-r--r--apps/files_encryption/l10n/sk_SK.json7
-rw-r--r--apps/files_encryption/l10n/sl.js6
-rw-r--r--apps/files_encryption/l10n/sl.json6
-rw-r--r--apps/files_encryption/l10n/sq.js3
-rw-r--r--apps/files_encryption/l10n/sq.json3
-rw-r--r--apps/files_encryption/l10n/sv.js18
-rw-r--r--apps/files_encryption/l10n/sv.json18
-rw-r--r--apps/files_encryption/l10n/tr.js6
-rw-r--r--apps/files_encryption/l10n/tr.json6
-rw-r--r--apps/files_encryption/l10n/uk.js5
-rw-r--r--apps/files_encryption/l10n/uk.json5
-rw-r--r--apps/files_encryption/l10n/vi.js1
-rw-r--r--apps/files_encryption/l10n/vi.json1
-rw-r--r--apps/files_encryption/l10n/zh_CN.js2
-rw-r--r--apps/files_encryption/l10n/zh_CN.json2
-rw-r--r--apps/files_encryption/l10n/zh_TW.js2
-rw-r--r--apps/files_encryption/l10n/zh_TW.json2
-rw-r--r--apps/files_encryption/lib/capabilities.php2
-rw-r--r--apps/files_encryption/lib/crypt.php41
-rw-r--r--apps/files_encryption/lib/helper.php161
-rw-r--r--apps/files_encryption/lib/hooks.php (renamed from apps/files_encryption/hooks/hooks.php)270
-rw-r--r--apps/files_encryption/lib/keymanager.php594
-rw-r--r--apps/files_encryption/lib/migration.php264
-rw-r--r--apps/files_encryption/lib/proxy.php27
-rw-r--r--apps/files_encryption/lib/session.php75
-rw-r--r--apps/files_encryption/lib/stream.php51
-rw-r--r--apps/files_encryption/lib/util.php211
-rw-r--r--apps/files_encryption/settings-admin.php2
-rw-r--r--apps/files_encryption/settings-personal.php5
-rw-r--r--apps/files_encryption/templates/invalid_private_key.php2
-rw-r--r--apps/files_encryption/templates/settings-admin.php2
-rw-r--r--apps/files_encryption/templates/settings-personal.php6
-rwxr-xr-xapps/files_encryption/tests/crypt.php204
-rw-r--r--apps/files_encryption/tests/helper.php123
-rw-r--r--apps/files_encryption/tests/hooks.php240
-rw-r--r--apps/files_encryption/tests/keymanager.php400
-rw-r--r--apps/files_encryption/tests/migration.php271
-rw-r--r--apps/files_encryption/tests/proxy.php64
-rwxr-xr-xapps/files_encryption/tests/share.php660
-rw-r--r--apps/files_encryption/tests/stream.php76
-rw-r--r--apps/files_encryption/tests/testcase.php96
-rwxr-xr-xapps/files_encryption/tests/trashbin.php184
-rwxr-xr-xapps/files_encryption/tests/util.php264
-rwxr-xr-xapps/files_encryption/tests/webdav.php80
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Aws.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/AbstractClient.php30
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/ClientBuilder.php42
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Enum/Region.php3
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Hash/HashUtils.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php10
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/aws-config.php30
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/public-endpoints.php64
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/RulesEndpointProvider.php67
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Signature/SignatureV4.php48
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Acp.php10
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/AcpBuilder.php14
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/ClearBucket.php6
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsBatch.php8
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsTransfer.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grant.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grantee.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/MultipartUpload/UploadBuilder.php22
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Resources/s3-2006-03-01.php236
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3Client.php27
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3SignatureV4.php14
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/StreamWrapper.php44
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/AbstractSyncBuilder.php30
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/DownloadSyncBuilder.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/UploadSyncBuilder.php10
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ApcClassLoader.php5
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ClassMapGenerator.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Psr4ClassLoader.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/README.md48
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ApcUniversalClassLoaderTest.php32
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/A.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/B.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeClass.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeInterface.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeParent.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/multipleNs.php20
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/sameNsMultipleClasses.php8
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/deps/traits.php3
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/php5.4/traits.php3
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php8
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/UniversalClassLoader.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/XcacheClassLoader.php32
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/EventDispatcherInterface.php4
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/README.md16
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php14
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php14
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php2
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php1
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/composer.json2
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/NOTICE4
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/README40
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/README.md77
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php)25
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/AssertionCredentials.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php)52
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php22
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/LoginTicket.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php)20
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php620
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php62
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php)16
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php73
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php21
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php145
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php137
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php665
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php96
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php371
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Exception.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php)8
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Batch.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php)79
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/CacheParser.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php)37
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php301
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/REST.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php)75
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php476
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php332
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php137
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php22
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php211
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/cacerts.pem (renamed from apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem)24
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php265
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php39
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php6136
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php53
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php210
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php)5
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php91
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Utils.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php)56
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php333
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php)5
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Pem.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php)26
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php462
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php48
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php445
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php70
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php98
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php137
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php130
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/config.php81
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php3143
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php209
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php278
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php304
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php49
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php262
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php115
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php205
-rw-r--r--apps/files_external/ajax/google.php3
-rw-r--r--apps/files_external/appinfo/app.php12
-rw-r--r--apps/files_external/appinfo/info.xml4
-rw-r--r--apps/files_external/img/app.svg212
-rw-r--r--apps/files_external/js/app.js6
-rw-r--r--apps/files_external/js/mountsfilelist.js33
-rw-r--r--apps/files_external/js/settings.js4
-rw-r--r--apps/files_external/l10n/ast.js5
-rw-r--r--apps/files_external/l10n/ast.json5
-rw-r--r--apps/files_external/l10n/bg_BG.js5
-rw-r--r--apps/files_external/l10n/bg_BG.json5
-rw-r--r--apps/files_external/l10n/bn_BD.js2
-rw-r--r--apps/files_external/l10n/bn_BD.json2
-rw-r--r--apps/files_external/l10n/bs.js10
-rw-r--r--apps/files_external/l10n/bs.json10
-rw-r--r--apps/files_external/l10n/ca.js5
-rw-r--r--apps/files_external/l10n/ca.json5
-rw-r--r--apps/files_external/l10n/cs_CZ.js8
-rw-r--r--apps/files_external/l10n/cs_CZ.json8
-rw-r--r--apps/files_external/l10n/da.js8
-rw-r--r--apps/files_external/l10n/da.json8
-rw-r--r--apps/files_external/l10n/de.js14
-rw-r--r--apps/files_external/l10n/de.json14
-rw-r--r--apps/files_external/l10n/de_DE.js12
-rw-r--r--apps/files_external/l10n/de_DE.json12
-rw-r--r--apps/files_external/l10n/el.js6
-rw-r--r--apps/files_external/l10n/el.json6
-rw-r--r--apps/files_external/l10n/en_GB.js8
-rw-r--r--apps/files_external/l10n/en_GB.json8
-rw-r--r--apps/files_external/l10n/eo.js4
-rw-r--r--apps/files_external/l10n/eo.json4
-rw-r--r--apps/files_external/l10n/es.js12
-rw-r--r--apps/files_external/l10n/es.json12
-rw-r--r--apps/files_external/l10n/et_EE.js5
-rw-r--r--apps/files_external/l10n/et_EE.json5
-rw-r--r--apps/files_external/l10n/eu.js5
-rw-r--r--apps/files_external/l10n/eu.json5
-rw-r--r--apps/files_external/l10n/fi.js9
-rw-r--r--apps/files_external/l10n/fi.json7
-rw-r--r--apps/files_external/l10n/fi_FI.js7
-rw-r--r--apps/files_external/l10n/fi_FI.json7
-rw-r--r--apps/files_external/l10n/fr.js19
-rw-r--r--apps/files_external/l10n/fr.json19
-rw-r--r--apps/files_external/l10n/gl.js10
-rw-r--r--apps/files_external/l10n/gl.json10
-rw-r--r--apps/files_external/l10n/hr.js5
-rw-r--r--apps/files_external/l10n/hr.json5
-rw-r--r--apps/files_external/l10n/hu_HU.js22
-rw-r--r--apps/files_external/l10n/hu_HU.json22
-rw-r--r--apps/files_external/l10n/id.js50
-rw-r--r--apps/files_external/l10n/id.json50
-rw-r--r--apps/files_external/l10n/it.js8
-rw-r--r--apps/files_external/l10n/it.json8
-rw-r--r--apps/files_external/l10n/ja.js21
-rw-r--r--apps/files_external/l10n/ja.json21
-rw-r--r--apps/files_external/l10n/kn.js16
-rw-r--r--apps/files_external/l10n/kn.json14
-rw-r--r--apps/files_external/l10n/lv.js1
-rw-r--r--apps/files_external/l10n/lv.json1
-rw-r--r--apps/files_external/l10n/mn.js8
-rw-r--r--apps/files_external/l10n/mn.json6
-rw-r--r--apps/files_external/l10n/nb_NO.js8
-rw-r--r--apps/files_external/l10n/nb_NO.json8
-rw-r--r--apps/files_external/l10n/nl.js8
-rw-r--r--apps/files_external/l10n/nl.json8
-rw-r--r--apps/files_external/l10n/pl.js7
-rw-r--r--apps/files_external/l10n/pl.json7
-rw-r--r--apps/files_external/l10n/pt_BR.js8
-rw-r--r--apps/files_external/l10n/pt_BR.json8
-rw-r--r--apps/files_external/l10n/pt_PT.js8
-rw-r--r--apps/files_external/l10n/pt_PT.json8
-rw-r--r--apps/files_external/l10n/ro.js1
-rw-r--r--apps/files_external/l10n/ro.json1
-rw-r--r--apps/files_external/l10n/ru.js18
-rw-r--r--apps/files_external/l10n/ru.json18
-rw-r--r--apps/files_external/l10n/sk.php8
-rw-r--r--apps/files_external/l10n/sk_SK.js5
-rw-r--r--apps/files_external/l10n/sk_SK.json5
-rw-r--r--apps/files_external/l10n/sl.js8
-rw-r--r--apps/files_external/l10n/sl.json8
-rw-r--r--apps/files_external/l10n/sr@latin.js63
-rw-r--r--apps/files_external/l10n/sr@latin.json63
-rw-r--r--apps/files_external/l10n/sv.js18
-rw-r--r--apps/files_external/l10n/sv.json18
-rw-r--r--apps/files_external/l10n/tr.js6
-rw-r--r--apps/files_external/l10n/tr.json6
-rw-r--r--apps/files_external/l10n/uk.js5
-rw-r--r--apps/files_external/l10n/uk.json5
-rw-r--r--apps/files_external/l10n/zh_CN.js5
-rw-r--r--apps/files_external/l10n/zh_CN.json5
-rw-r--r--apps/files_external/l10n/zh_HK.js1
-rw-r--r--apps/files_external/l10n/zh_HK.json1
-rw-r--r--apps/files_external/l10n/zh_TW.js2
-rw-r--r--apps/files_external/l10n/zh_TW.json2
-rw-r--r--apps/files_external/lib/amazons3.php5
-rw-r--r--apps/files_external/lib/api.php4
-rw-r--r--apps/files_external/lib/config.php296
-rw-r--r--apps/files_external/lib/config/configadapter.php45
-rw-r--r--apps/files_external/lib/google.php73
-rw-r--r--apps/files_external/lib/personalmount.php4
-rw-r--r--apps/files_external/lib/sftp.php2
-rw-r--r--apps/files_external/lib/smb.php9
-rw-r--r--apps/files_external/lib/smb_oc.php31
-rw-r--r--apps/files_external/templates/list.php6
-rw-r--r--apps/files_external/templates/settings.php2
-rw-r--r--apps/files_external/tests/amazons3migration.php21
-rw-r--r--apps/files_external/tests/backends/amazons3.php (renamed from apps/files_external/tests/amazons3.php)8
-rw-r--r--apps/files_external/tests/backends/dropbox.php (renamed from apps/files_external/tests/dropbox.php)20
-rw-r--r--apps/files_external/tests/backends/ftp.php (renamed from apps/files_external/tests/ftp.php)10
-rw-r--r--apps/files_external/tests/backends/google.php (renamed from apps/files_external/tests/google.php)4
-rw-r--r--apps/files_external/tests/backends/owncloud.php (renamed from apps/files_external/tests/owncloud.php)10
-rw-r--r--apps/files_external/tests/backends/sftp.php (renamed from apps/files_external/tests/sftp.php)10
-rw-r--r--apps/files_external/tests/backends/smb.php (renamed from apps/files_external/tests/smb.php)10
-rw-r--r--apps/files_external/tests/backends/swift.php (renamed from apps/files_external/tests/swift.php)8
-rw-r--r--apps/files_external/tests/backends/webdav.php38
-rw-r--r--apps/files_external/tests/dynamicmountconfig.php4
-rwxr-xr-xapps/files_external/tests/env/start-webdav-ownCloud.sh82
-rwxr-xr-xapps/files_external/tests/env/stop-webdav-ownCloud.sh41
-rw-r--r--apps/files_external/tests/etagpropagator.php4
-rw-r--r--apps/files_external/tests/js/mountsfilelistSpec.js8
-rw-r--r--apps/files_external/tests/mountconfig.php50
-rw-r--r--apps/files_external/tests/owncloudfunctions.php2
-rw-r--r--apps/files_external/tests/smbfunctions.php10
-rw-r--r--apps/files_external/tests/webdav.php34
-rw-r--r--apps/files_sharing/ajax/external.php11
-rw-r--r--apps/files_sharing/ajax/list.php4
-rw-r--r--apps/files_sharing/ajax/shareinfo.php2
-rw-r--r--apps/files_sharing/ajax/testremote.php3
-rw-r--r--apps/files_sharing/api/local.php (renamed from apps/files_sharing/lib/api.php)6
-rw-r--r--apps/files_sharing/api/server2server.php241
-rw-r--r--apps/files_sharing/appinfo/app.php26
-rw-r--r--apps/files_sharing/appinfo/database.xml15
-rw-r--r--apps/files_sharing/appinfo/routes.php33
-rw-r--r--apps/files_sharing/appinfo/update.php120
-rw-r--r--apps/files_sharing/appinfo/version2
-rw-r--r--apps/files_sharing/application.php95
-rw-r--r--apps/files_sharing/js/app.js21
-rw-r--r--apps/files_sharing/js/external.js95
-rw-r--r--apps/files_sharing/js/public.js31
-rw-r--r--apps/files_sharing/js/share.js81
-rw-r--r--apps/files_sharing/js/sharedfilelist.js66
-rw-r--r--apps/files_sharing/l10n/ast.js4
-rw-r--r--apps/files_sharing/l10n/ast.json4
-rw-r--r--apps/files_sharing/l10n/az.js2
-rw-r--r--apps/files_sharing/l10n/az.json2
-rw-r--r--apps/files_sharing/l10n/bg_BG.js9
-rw-r--r--apps/files_sharing/l10n/bg_BG.json9
-rw-r--r--apps/files_sharing/l10n/bn_BD.js1
-rw-r--r--apps/files_sharing/l10n/bn_BD.json1
-rw-r--r--apps/files_sharing/l10n/bs.js5
-rw-r--r--apps/files_sharing/l10n/bs.json5
-rw-r--r--apps/files_sharing/l10n/ca.js8
-rw-r--r--apps/files_sharing/l10n/ca.json8
-rw-r--r--apps/files_sharing/l10n/cs_CZ.js25
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json25
-rw-r--r--apps/files_sharing/l10n/da.js23
-rw-r--r--apps/files_sharing/l10n/da.json23
-rw-r--r--apps/files_sharing/l10n/de.js25
-rw-r--r--apps/files_sharing/l10n/de.json25
-rw-r--r--apps/files_sharing/l10n/de_DE.js25
-rw-r--r--apps/files_sharing/l10n/de_DE.json25
-rw-r--r--apps/files_sharing/l10n/el.js10
-rw-r--r--apps/files_sharing/l10n/el.json10
-rw-r--r--apps/files_sharing/l10n/en_GB.js25
-rw-r--r--apps/files_sharing/l10n/en_GB.json25
-rw-r--r--apps/files_sharing/l10n/eo.js4
-rw-r--r--apps/files_sharing/l10n/eo.json4
-rw-r--r--apps/files_sharing/l10n/es.js25
-rw-r--r--apps/files_sharing/l10n/es.json25
-rw-r--r--apps/files_sharing/l10n/et_EE.js9
-rw-r--r--apps/files_sharing/l10n/et_EE.json9
-rw-r--r--apps/files_sharing/l10n/eu.js4
-rw-r--r--apps/files_sharing/l10n/eu.json4
-rw-r--r--apps/files_sharing/l10n/fa.js4
-rw-r--r--apps/files_sharing/l10n/fa.json4
-rw-r--r--apps/files_sharing/l10n/fi.js7
-rw-r--r--apps/files_sharing/l10n/fi.json5
-rw-r--r--apps/files_sharing/l10n/fi_FI.js25
-rw-r--r--apps/files_sharing/l10n/fi_FI.json25
-rw-r--r--apps/files_sharing/l10n/fr.js27
-rw-r--r--apps/files_sharing/l10n/fr.json27
-rw-r--r--apps/files_sharing/l10n/gl.js26
-rw-r--r--apps/files_sharing/l10n/gl.json26
-rw-r--r--apps/files_sharing/l10n/hr.js4
-rw-r--r--apps/files_sharing/l10n/hr.json4
-rw-r--r--apps/files_sharing/l10n/hu_HU.js4
-rw-r--r--apps/files_sharing/l10n/hu_HU.json4
-rw-r--r--apps/files_sharing/l10n/id.js4
-rw-r--r--apps/files_sharing/l10n/id.json4
-rw-r--r--apps/files_sharing/l10n/it.js25
-rw-r--r--apps/files_sharing/l10n/it.json25
-rw-r--r--apps/files_sharing/l10n/ja.js17
-rw-r--r--apps/files_sharing/l10n/ja.json17
-rw-r--r--apps/files_sharing/l10n/kn.js9
-rw-r--r--apps/files_sharing/l10n/kn.json7
-rw-r--r--apps/files_sharing/l10n/mk.js3
-rw-r--r--apps/files_sharing/l10n/mk.json3
-rw-r--r--apps/files_sharing/l10n/mn.js6
-rw-r--r--apps/files_sharing/l10n/mn.json4
-rw-r--r--apps/files_sharing/l10n/nb_NO.js23
-rw-r--r--apps/files_sharing/l10n/nb_NO.json23
-rw-r--r--apps/files_sharing/l10n/nl.js25
-rw-r--r--apps/files_sharing/l10n/nl.json25
-rw-r--r--apps/files_sharing/l10n/pl.js4
-rw-r--r--apps/files_sharing/l10n/pl.json4
-rw-r--r--apps/files_sharing/l10n/pt_BR.js25
-rw-r--r--apps/files_sharing/l10n/pt_BR.json25
-rw-r--r--apps/files_sharing/l10n/pt_PT.js21
-rw-r--r--apps/files_sharing/l10n/pt_PT.json21
-rw-r--r--apps/files_sharing/l10n/ro.js2
-rw-r--r--apps/files_sharing/l10n/ro.json2
-rw-r--r--apps/files_sharing/l10n/ru.js45
-rw-r--r--apps/files_sharing/l10n/ru.json45
-rw-r--r--apps/files_sharing/l10n/sk.php6
-rw-r--r--apps/files_sharing/l10n/sk_SK.js4
-rw-r--r--apps/files_sharing/l10n/sk_SK.json4
-rw-r--r--apps/files_sharing/l10n/sl.js24
-rw-r--r--apps/files_sharing/l10n/sl.json24
-rw-r--r--apps/files_sharing/l10n/sv.js29
-rw-r--r--apps/files_sharing/l10n/sv.json29
-rw-r--r--apps/files_sharing/l10n/tr.js9
-rw-r--r--apps/files_sharing/l10n/tr.json9
-rw-r--r--apps/files_sharing/l10n/uk.js9
-rw-r--r--apps/files_sharing/l10n/uk.json9
-rw-r--r--apps/files_sharing/l10n/zh_CN.js4
-rw-r--r--apps/files_sharing/l10n/zh_CN.json4
-rw-r--r--apps/files_sharing/l10n/zh_TW.js4
-rw-r--r--apps/files_sharing/l10n/zh_TW.json4
-rw-r--r--apps/files_sharing/lib/activity.php216
-rw-r--r--apps/files_sharing/lib/cache.php72
-rw-r--r--apps/files_sharing/lib/connector/publicauth.php26
-rw-r--r--apps/files_sharing/lib/controllers/externalsharescontroller.php86
-rw-r--r--apps/files_sharing/lib/controllers/sharecontroller.php282
-rw-r--r--apps/files_sharing/lib/external/manager.php146
-rw-r--r--apps/files_sharing/lib/external/mount.php5
-rw-r--r--apps/files_sharing/lib/external/storage.php8
-rw-r--r--apps/files_sharing/lib/helper.php37
-rw-r--r--apps/files_sharing/lib/middleware/sharingcheckmiddleware.php84
-rw-r--r--apps/files_sharing/lib/readonlycache.php4
-rw-r--r--apps/files_sharing/lib/readonlywrapper.php2
-rw-r--r--apps/files_sharing/lib/share/file.php18
-rw-r--r--apps/files_sharing/lib/share/folder.php5
-rw-r--r--apps/files_sharing/lib/sharedmount.php12
-rw-r--r--apps/files_sharing/lib/sharedstorage.php19
-rw-r--r--apps/files_sharing/lib/updater.php7
-rw-r--r--apps/files_sharing/public.php220
-rw-r--r--apps/files_sharing/publicwebdav.php3
-rw-r--r--apps/files_sharing/templates/authenticate.php8
-rw-r--r--apps/files_sharing/templates/list.php6
-rw-r--r--apps/files_sharing/templates/public.php34
-rw-r--r--apps/files_sharing/tests/api.php82
-rw-r--r--apps/files_sharing/tests/backend.php4
-rw-r--r--apps/files_sharing/tests/cache.php117
-rw-r--r--apps/files_sharing/tests/controller/sharecontroller.php171
-rw-r--r--apps/files_sharing/tests/externalstorage.php2
-rw-r--r--apps/files_sharing/tests/helper.php2
-rw-r--r--apps/files_sharing/tests/js/shareSpec.js20
-rw-r--r--apps/files_sharing/tests/js/sharedfilelistSpec.js123
-rw-r--r--apps/files_sharing/tests/middleware/sharingcheckmiddleware.php76
-rw-r--r--apps/files_sharing/tests/permissions.php4
-rw-r--r--apps/files_sharing/tests/proxy.php4
-rw-r--r--apps/files_sharing/tests/server2server.php135
-rw-r--r--apps/files_sharing/tests/share.php66
-rw-r--r--apps/files_sharing/tests/sharedmount.php8
-rw-r--r--apps/files_sharing/tests/sharedstorage.php30
-rw-r--r--apps/files_sharing/tests/testcase.php36
-rw-r--r--apps/files_sharing/tests/update.php252
-rw-r--r--apps/files_sharing/tests/updater.php5
-rw-r--r--apps/files_sharing/tests/watcher.php4
-rw-r--r--apps/files_trashbin/appinfo/app.php2
-rw-r--r--apps/files_trashbin/appinfo/routes.php4
-rw-r--r--apps/files_trashbin/js/app.js50
-rw-r--r--apps/files_trashbin/js/filelist.js24
-rw-r--r--apps/files_trashbin/l10n/af_ZA.js6
-rw-r--r--apps/files_trashbin/l10n/af_ZA.json4
-rw-r--r--apps/files_trashbin/l10n/ar.js2
-rw-r--r--apps/files_trashbin/l10n/ar.json2
-rw-r--r--apps/files_trashbin/l10n/ast.js2
-rw-r--r--apps/files_trashbin/l10n/ast.json2
-rw-r--r--apps/files_trashbin/l10n/az.js1
-rw-r--r--apps/files_trashbin/l10n/az.json1
-rw-r--r--apps/files_trashbin/l10n/bg_BG.js2
-rw-r--r--apps/files_trashbin/l10n/bg_BG.json2
-rw-r--r--apps/files_trashbin/l10n/bn_BD.js1
-rw-r--r--apps/files_trashbin/l10n/bn_BD.json1
-rw-r--r--apps/files_trashbin/l10n/bn_IN.js2
-rw-r--r--apps/files_trashbin/l10n/bn_IN.json2
-rw-r--r--apps/files_trashbin/l10n/bs.js6
-rw-r--r--apps/files_trashbin/l10n/bs.json6
-rw-r--r--apps/files_trashbin/l10n/ca.js2
-rw-r--r--apps/files_trashbin/l10n/ca.json2
-rw-r--r--apps/files_trashbin/l10n/cs_CZ.js6
-rw-r--r--apps/files_trashbin/l10n/cs_CZ.json6
-rw-r--r--apps/files_trashbin/l10n/cy_GB.js2
-rw-r--r--apps/files_trashbin/l10n/cy_GB.json2
-rw-r--r--apps/files_trashbin/l10n/da.js5
-rw-r--r--apps/files_trashbin/l10n/da.json5
-rw-r--r--apps/files_trashbin/l10n/de.js6
-rw-r--r--apps/files_trashbin/l10n/de.json6
-rw-r--r--apps/files_trashbin/l10n/de_DE.js6
-rw-r--r--apps/files_trashbin/l10n/de_DE.json6
-rw-r--r--apps/files_trashbin/l10n/el.js4
-rw-r--r--apps/files_trashbin/l10n/el.json4
-rw-r--r--apps/files_trashbin/l10n/en_GB.js6
-rw-r--r--apps/files_trashbin/l10n/en_GB.json6
-rw-r--r--apps/files_trashbin/l10n/eo.js2
-rw-r--r--apps/files_trashbin/l10n/eo.json2
-rw-r--r--apps/files_trashbin/l10n/es.js6
-rw-r--r--apps/files_trashbin/l10n/es.json6
-rw-r--r--apps/files_trashbin/l10n/es_AR.js2
-rw-r--r--apps/files_trashbin/l10n/es_AR.json2
-rw-r--r--apps/files_trashbin/l10n/es_MX.js2
-rw-r--r--apps/files_trashbin/l10n/es_MX.json2
-rw-r--r--apps/files_trashbin/l10n/et_EE.js2
-rw-r--r--apps/files_trashbin/l10n/et_EE.json2
-rw-r--r--apps/files_trashbin/l10n/eu.js2
-rw-r--r--apps/files_trashbin/l10n/eu.json2
-rw-r--r--apps/files_trashbin/l10n/fa.js2
-rw-r--r--apps/files_trashbin/l10n/fa.json2
-rw-r--r--apps/files_trashbin/l10n/fi.js7
-rw-r--r--apps/files_trashbin/l10n/fi.json5
-rw-r--r--apps/files_trashbin/l10n/fi_FI.js6
-rw-r--r--apps/files_trashbin/l10n/fi_FI.json6
-rw-r--r--apps/files_trashbin/l10n/fr.js5
-rw-r--r--apps/files_trashbin/l10n/fr.json5
-rw-r--r--apps/files_trashbin/l10n/gl.js6
-rw-r--r--apps/files_trashbin/l10n/gl.json6
-rw-r--r--apps/files_trashbin/l10n/he.js2
-rw-r--r--apps/files_trashbin/l10n/he.json2
-rw-r--r--apps/files_trashbin/l10n/hr.js2
-rw-r--r--apps/files_trashbin/l10n/hr.json2
-rw-r--r--apps/files_trashbin/l10n/hu_HU.js3
-rw-r--r--apps/files_trashbin/l10n/hu_HU.json3
-rw-r--r--apps/files_trashbin/l10n/id.js2
-rw-r--r--apps/files_trashbin/l10n/id.json2
-rw-r--r--apps/files_trashbin/l10n/it.js6
-rw-r--r--apps/files_trashbin/l10n/it.json6
-rw-r--r--apps/files_trashbin/l10n/ja.js5
-rw-r--r--apps/files_trashbin/l10n/ja.json5
-rw-r--r--apps/files_trashbin/l10n/ka_GE.js2
-rw-r--r--apps/files_trashbin/l10n/ka_GE.json2
-rw-r--r--apps/files_trashbin/l10n/km.js2
-rw-r--r--apps/files_trashbin/l10n/km.json2
-rw-r--r--apps/files_trashbin/l10n/kn.js10
-rw-r--r--apps/files_trashbin/l10n/kn.json8
-rw-r--r--apps/files_trashbin/l10n/ko.js2
-rw-r--r--apps/files_trashbin/l10n/ko.json2
-rw-r--r--apps/files_trashbin/l10n/lt_LT.js5
-rw-r--r--apps/files_trashbin/l10n/lt_LT.json5
-rw-r--r--apps/files_trashbin/l10n/lv.js3
-rw-r--r--apps/files_trashbin/l10n/lv.json3
-rw-r--r--apps/files_trashbin/l10n/mk.js2
-rw-r--r--apps/files_trashbin/l10n/mk.json2
-rw-r--r--apps/files_trashbin/l10n/ms_MY.js1
-rw-r--r--apps/files_trashbin/l10n/ms_MY.json1
-rw-r--r--apps/files_trashbin/l10n/nb_NO.js5
-rw-r--r--apps/files_trashbin/l10n/nb_NO.json5
-rw-r--r--apps/files_trashbin/l10n/nl.js6
-rw-r--r--apps/files_trashbin/l10n/nl.json6
-rw-r--r--apps/files_trashbin/l10n/nn_NO.js2
-rw-r--r--apps/files_trashbin/l10n/nn_NO.json2
-rw-r--r--apps/files_trashbin/l10n/pl.js2
-rw-r--r--apps/files_trashbin/l10n/pl.json2
-rw-r--r--apps/files_trashbin/l10n/pt_BR.js6
-rw-r--r--apps/files_trashbin/l10n/pt_BR.json6
-rw-r--r--apps/files_trashbin/l10n/pt_PT.js6
-rw-r--r--apps/files_trashbin/l10n/pt_PT.json6
-rw-r--r--apps/files_trashbin/l10n/ro.js1
-rw-r--r--apps/files_trashbin/l10n/ro.json1
-rw-r--r--apps/files_trashbin/l10n/ru.js8
-rw-r--r--apps/files_trashbin/l10n/ru.json8
-rw-r--r--apps/files_trashbin/l10n/sk.php5
-rw-r--r--apps/files_trashbin/l10n/sk_SK.js2
-rw-r--r--apps/files_trashbin/l10n/sk_SK.json2
-rw-r--r--apps/files_trashbin/l10n/sl.js5
-rw-r--r--apps/files_trashbin/l10n/sl.json5
-rw-r--r--apps/files_trashbin/l10n/sq.js2
-rw-r--r--apps/files_trashbin/l10n/sq.json2
-rw-r--r--apps/files_trashbin/l10n/sr.js2
-rw-r--r--apps/files_trashbin/l10n/sr.json2
-rw-r--r--apps/files_trashbin/l10n/sv.js5
-rw-r--r--apps/files_trashbin/l10n/sv.json5
-rw-r--r--apps/files_trashbin/l10n/te.js1
-rw-r--r--apps/files_trashbin/l10n/te.json1
-rw-r--r--apps/files_trashbin/l10n/th_TH.js1
-rw-r--r--apps/files_trashbin/l10n/th_TH.json1
-rw-r--r--apps/files_trashbin/l10n/tr.js2
-rw-r--r--apps/files_trashbin/l10n/tr.json2
-rw-r--r--apps/files_trashbin/l10n/ug.js2
-rw-r--r--apps/files_trashbin/l10n/ug.json2
-rw-r--r--apps/files_trashbin/l10n/uk.js2
-rw-r--r--apps/files_trashbin/l10n/uk.json2
-rw-r--r--apps/files_trashbin/l10n/ur.php5
-rw-r--r--apps/files_trashbin/l10n/ur_PK.js1
-rw-r--r--apps/files_trashbin/l10n/ur_PK.json1
-rw-r--r--apps/files_trashbin/l10n/vi.js2
-rw-r--r--apps/files_trashbin/l10n/vi.json2
-rw-r--r--apps/files_trashbin/l10n/zh_CN.js3
-rw-r--r--apps/files_trashbin/l10n/zh_CN.json3
-rw-r--r--apps/files_trashbin/l10n/zh_TW.js2
-rw-r--r--apps/files_trashbin/l10n/zh_TW.json2
-rw-r--r--apps/files_trashbin/lib/capabilities.php32
-rw-r--r--apps/files_trashbin/lib/exceptions/copyrecursiveexception.php (renamed from apps/files_trashbin/lib/exceptions.php)0
-rw-r--r--apps/files_trashbin/lib/helper.php8
-rw-r--r--apps/files_trashbin/lib/trashbin.php195
-rw-r--r--apps/files_trashbin/templates/index.php20
-rw-r--r--apps/files_trashbin/tests/trashbin.php14
-rw-r--r--apps/files_versions/appinfo/api.php34
-rw-r--r--apps/files_versions/appinfo/app.php5
-rw-r--r--apps/files_versions/appinfo/routes.php2
-rw-r--r--apps/files_versions/download.php2
-rw-r--r--apps/files_versions/js/versions.js2
-rw-r--r--apps/files_versions/l10n/bs.js11
-rw-r--r--apps/files_versions/l10n/bs.json9
-rw-r--r--apps/files_versions/l10n/kn.js11
-rw-r--r--apps/files_versions/l10n/kn.json9
-rw-r--r--apps/files_versions/l10n/ru.js6
-rw-r--r--apps/files_versions/l10n/ru.json6
-rw-r--r--apps/files_versions/lib/storage.php (renamed from apps/files_versions/lib/versions.php)7
-rw-r--r--apps/files_versions/tests/versions.php28
-rw-r--r--apps/provisioning_api/appinfo/app.php23
-rw-r--r--apps/provisioning_api/appinfo/info.xml22
-rw-r--r--apps/provisioning_api/appinfo/routes.php50
-rw-r--r--apps/provisioning_api/appinfo/version1
-rw-r--r--apps/provisioning_api/lib/apps.php81
-rw-r--r--apps/provisioning_api/lib/groups.php108
-rw-r--r--apps/provisioning_api/lib/users.php346
-rw-r--r--apps/provisioning_api/tests/appstest.php84
-rw-r--r--apps/provisioning_api/tests/groupstest.php142
-rw-r--r--apps/provisioning_api/tests/testcase.php61
-rw-r--r--apps/provisioning_api/tests/userstest.php770
-rw-r--r--apps/user_ldap/ajax/clearMappings.php20
-rw-r--r--apps/user_ldap/ajax/deleteConfiguration.php3
-rw-r--r--apps/user_ldap/ajax/getNewServerConfigPrefix.php3
-rw-r--r--apps/user_ldap/ajax/wizard.php5
-rw-r--r--apps/user_ldap/appinfo/app.php30
-rw-r--r--apps/user_ldap/appinfo/register_command.php26
-rw-r--r--apps/user_ldap/appinfo/update.php33
-rw-r--r--apps/user_ldap/appinfo/version2
-rw-r--r--apps/user_ldap/command/checkuser.php121
-rw-r--r--apps/user_ldap/command/search.php113
-rw-r--r--apps/user_ldap/command/setconfig.php3
-rw-r--r--apps/user_ldap/command/showconfig.php3
-rw-r--r--apps/user_ldap/command/showremnants.php73
-rw-r--r--apps/user_ldap/command/testconfig.php3
-rw-r--r--apps/user_ldap/js/ldapFilter.js63
-rw-r--r--apps/user_ldap/js/settings.js117
-rw-r--r--apps/user_ldap/l10n/af_ZA.js1
-rw-r--r--apps/user_ldap/l10n/af_ZA.json1
-rw-r--r--apps/user_ldap/l10n/ar.js1
-rw-r--r--apps/user_ldap/l10n/ar.json1
-rw-r--r--apps/user_ldap/l10n/bg_BG.js1
-rw-r--r--apps/user_ldap/l10n/bg_BG.json1
-rw-r--r--apps/user_ldap/l10n/bs.js9
-rw-r--r--apps/user_ldap/l10n/bs.json9
-rw-r--r--apps/user_ldap/l10n/cs_CZ.js9
-rw-r--r--apps/user_ldap/l10n/cs_CZ.json9
-rw-r--r--apps/user_ldap/l10n/da.js1
-rw-r--r--apps/user_ldap/l10n/da.json1
-rw-r--r--apps/user_ldap/l10n/de.js1
-rw-r--r--apps/user_ldap/l10n/de.json1
-rw-r--r--apps/user_ldap/l10n/de_DE.js1
-rw-r--r--apps/user_ldap/l10n/de_DE.json1
-rw-r--r--apps/user_ldap/l10n/el.js2
-rw-r--r--apps/user_ldap/l10n/el.json2
-rw-r--r--apps/user_ldap/l10n/en_GB.js1
-rw-r--r--apps/user_ldap/l10n/en_GB.json1
-rw-r--r--apps/user_ldap/l10n/es.js9
-rw-r--r--apps/user_ldap/l10n/es.json9
-rw-r--r--apps/user_ldap/l10n/fi.js13
-rw-r--r--apps/user_ldap/l10n/fi.json11
-rw-r--r--apps/user_ldap/l10n/fr.js21
-rw-r--r--apps/user_ldap/l10n/fr.json21
-rw-r--r--apps/user_ldap/l10n/gl.js6
-rw-r--r--apps/user_ldap/l10n/gl.json6
-rw-r--r--apps/user_ldap/l10n/hi_IN.php6
-rw-r--r--apps/user_ldap/l10n/id.js10
-rw-r--r--apps/user_ldap/l10n/id.json10
-rw-r--r--apps/user_ldap/l10n/it.js3
-rw-r--r--apps/user_ldap/l10n/it.json3
-rw-r--r--apps/user_ldap/l10n/ja.js1
-rw-r--r--apps/user_ldap/l10n/ja.json1
-rw-r--r--apps/user_ldap/l10n/kn.js9
-rw-r--r--apps/user_ldap/l10n/kn.json9
-rw-r--r--apps/user_ldap/l10n/lo.js7
-rw-r--r--apps/user_ldap/l10n/lo.json5
-rw-r--r--apps/user_ldap/l10n/mn.js4
-rw-r--r--apps/user_ldap/l10n/mn.json4
-rw-r--r--apps/user_ldap/l10n/nb_NO.js6
-rw-r--r--apps/user_ldap/l10n/nb_NO.json6
-rw-r--r--apps/user_ldap/l10n/nl.js5
-rw-r--r--apps/user_ldap/l10n/nl.json5
-rw-r--r--apps/user_ldap/l10n/pl.js5
-rw-r--r--apps/user_ldap/l10n/pl.json5
-rw-r--r--apps/user_ldap/l10n/pt_BR.js1
-rw-r--r--apps/user_ldap/l10n/pt_BR.json1
-rw-r--r--apps/user_ldap/l10n/ru.js9
-rw-r--r--apps/user_ldap/l10n/ru.json9
-rw-r--r--apps/user_ldap/l10n/sk.php8
-rw-r--r--apps/user_ldap/l10n/sl.js2
-rw-r--r--apps/user_ldap/l10n/sl.json2
-rw-r--r--apps/user_ldap/l10n/sq.js1
-rw-r--r--apps/user_ldap/l10n/sq.json1
-rw-r--r--apps/user_ldap/l10n/sr@latin.js3
-rw-r--r--apps/user_ldap/l10n/sr@latin.json3
-rw-r--r--apps/user_ldap/l10n/sv.js52
-rw-r--r--apps/user_ldap/l10n/sv.json52
-rw-r--r--apps/user_ldap/l10n/tr.js1
-rw-r--r--apps/user_ldap/l10n/tr.json1
-rw-r--r--apps/user_ldap/l10n/uk.js1
-rw-r--r--apps/user_ldap/l10n/uk.json1
-rw-r--r--apps/user_ldap/l10n/ur.php7
-rw-r--r--apps/user_ldap/l10n/zh_HK.js16
-rw-r--r--apps/user_ldap/l10n/zh_HK.json16
-rw-r--r--apps/user_ldap/lib/access.php403
-rw-r--r--apps/user_ldap/lib/connection.php6
-rw-r--r--apps/user_ldap/lib/helper.php37
-rw-r--r--apps/user_ldap/lib/jobs.php14
-rw-r--r--apps/user_ldap/lib/jobs/cleanup.php217
-rw-r--r--apps/user_ldap/lib/mapping/abstractmapping.php222
-rw-r--r--apps/user_ldap/lib/mapping/groupmapping.php25
-rw-r--r--apps/user_ldap/lib/mapping/usermapping.php25
-rw-r--r--apps/user_ldap/lib/proxy.php16
-rw-r--r--apps/user_ldap/lib/user/deletedusersindex.php114
-rw-r--r--apps/user_ldap/lib/user/iusertools.php1
-rw-r--r--apps/user_ldap/lib/user/manager.php118
-rw-r--r--apps/user_ldap/lib/user/offlineuser.php223
-rw-r--r--apps/user_ldap/lib/user/user.php27
-rw-r--r--apps/user_ldap/lib/wizard.php60
-rw-r--r--apps/user_ldap/settings.php10
-rw-r--r--apps/user_ldap/tests/access.php5
-rw-r--r--apps/user_ldap/tests/connection.php2
-rw-r--r--apps/user_ldap/tests/group_ldap.php7
-rw-r--r--apps/user_ldap/tests/helper.php31
-rw-r--r--apps/user_ldap/tests/jobs/cleanup.php135
-rw-r--r--apps/user_ldap/tests/mapping/abstractmappingtest.php218
-rw-r--r--apps/user_ldap/tests/mapping/groupmapping.php17
-rw-r--r--apps/user_ldap/tests/mapping/usermapping.php17
-rw-r--r--apps/user_ldap/tests/user/manager.php31
-rw-r--r--apps/user_ldap/tests/user/user.php65
-rw-r--r--apps/user_ldap/tests/user_ldap.php153
-rw-r--r--apps/user_ldap/tests/wizard.php5
-rw-r--r--apps/user_ldap/user_ldap.php159
-rw-r--r--apps/user_ldap/user_proxy.php30
-rw-r--r--apps/user_ldap/vendor/ui-multiselect/MIT-LICENSE20
-rw-r--r--apps/user_ldap/vendor/ui-multiselect/jquery.multiselect.css (renamed from core/css/jquery.multiselect.css)0
-rw-r--r--apps/user_ldap/vendor/ui-multiselect/src/jquery.multiselect.js (renamed from core/js/jquery.multiselect.js)0
-rw-r--r--apps/user_webdavauth/l10n/bs.js5
-rw-r--r--apps/user_webdavauth/l10n/bs.json5
-rw-r--r--apps/user_webdavauth/l10n/fi.js6
-rw-r--r--apps/user_webdavauth/l10n/fi.json4
-rw-r--r--apps/user_webdavauth/l10n/fr.js2
-rw-r--r--apps/user_webdavauth/l10n/fr.json2
-rw-r--r--apps/user_webdavauth/l10n/id.js3
-rw-r--r--apps/user_webdavauth/l10n/id.json3
-rw-r--r--apps/user_webdavauth/l10n/kn.js6
-rw-r--r--apps/user_webdavauth/l10n/kn.json4
-rw-r--r--apps/user_webdavauth/l10n/mn.js8
-rw-r--r--apps/user_webdavauth/l10n/mn.json6
-rw-r--r--apps/user_webdavauth/l10n/sk.php5
-rw-r--r--apps/user_webdavauth/l10n/sr@latin.js5
-rw-r--r--apps/user_webdavauth/l10n/sr@latin.json5
-rw-r--r--apps/user_webdavauth/l10n/sv.js2
-rw-r--r--apps/user_webdavauth/l10n/sv.json2
-rw-r--r--apps/user_webdavauth/user_webdavauth.php10
-rwxr-xr-xautotest-external.sh308
-rwxr-xr-xautotest-hhvm.sh266
-rw-r--r--autotest.cmd55
-rwxr-xr-xautotest.sh8
-rw-r--r--bower.json13
-rw-r--r--build/README.TXT28
-rw-r--r--build/build.xml158
-rw-r--r--build/phpcs.xml80
-rw-r--r--build/phpmd.xml9
-rwxr-xr-xbuildjsdocs.sh42
-rw-r--r--config/config.sample.php99
-rw-r--r--core/ajax/preview.php26
-rw-r--r--core/ajax/share.php21
-rw-r--r--core/ajax/update.php6
-rw-r--r--core/application.php64
-rw-r--r--core/command/db/converttype.php32
-rw-r--r--core/command/maintenance/mode.php11
-rw-r--r--core/command/maintenance/repair.php12
-rw-r--r--core/command/upgrade.php2
-rw-r--r--core/command/user/delete.php47
-rw-r--r--core/css/apps.css14
-rw-r--r--core/css/header.css27
-rw-r--r--core/css/icons.css4
-rw-r--r--core/css/images/ui-icons_222222_256x240.pngbin4196 -> 0 bytes
-rw-r--r--core/css/jquery-ui-fixes.css140
-rw-r--r--core/css/styles.css89
-rw-r--r--core/img/actions/external.pngbin0 -> 392 bytes
-rw-r--r--core/img/actions/external.svg4
-rw-r--r--core/img/filetypes/image-vector.png (renamed from core/img/filetypes/image-svg+xml.png)bin885 -> 885 bytes
-rw-r--r--core/img/filetypes/image-vector.svg (renamed from core/img/filetypes/image-svg+xml.svg)0
-rw-r--r--core/img/filetypes/image.pngbin903 -> 695 bytes
-rw-r--r--core/img/filetypes/image.svg66
-rw-r--r--core/js/config.js3
-rw-r--r--core/js/core.json8
-rw-r--r--core/js/eventsource.js21
-rw-r--r--core/js/installation.js5
-rw-r--r--core/js/js.js296
-rw-r--r--core/js/jstz.js358
-rw-r--r--core/js/l10n.js70
-rw-r--r--core/js/lostpassword.js29
-rw-r--r--core/js/oc-dialogs.js74
-rw-r--r--core/js/oc-requesttoken.js3
-rw-r--r--core/js/setup.js14
-rw-r--r--core/js/setupchecks.js7
-rw-r--r--core/js/share.js118
-rw-r--r--core/js/snap.js785
-rw-r--r--core/js/tests/specHelper.js3
-rw-r--r--core/js/tests/specs/coreSpec.js128
-rw-r--r--core/js/tests/specs/l10nSpec.js62
-rw-r--r--core/js/tests/specs/shareSpec.js15
-rw-r--r--core/js/update.js5
-rw-r--r--core/l10n/af_ZA.js10
-rw-r--r--core/l10n/af_ZA.json10
-rw-r--r--core/l10n/ar.js12
-rw-r--r--core/l10n/ar.json12
-rw-r--r--core/l10n/ast.js17
-rw-r--r--core/l10n/ast.json17
-rw-r--r--core/l10n/az.js6
-rw-r--r--core/l10n/az.json6
-rw-r--r--core/l10n/bg_BG.js22
-rw-r--r--core/l10n/bg_BG.json22
-rw-r--r--core/l10n/bn_BD.js10
-rw-r--r--core/l10n/bn_BD.json10
-rw-r--r--core/l10n/bn_IN.js2
-rw-r--r--core/l10n/bn_IN.json2
-rw-r--r--core/l10n/bs.js204
-rw-r--r--core/l10n/bs.json204
-rw-r--r--core/l10n/ca.js18
-rw-r--r--core/l10n/ca.json18
-rw-r--r--core/l10n/cs_CZ.js57
-rw-r--r--core/l10n/cs_CZ.json57
-rw-r--r--core/l10n/cy_GB.js9
-rw-r--r--core/l10n/cy_GB.json9
-rw-r--r--core/l10n/da.js47
-rw-r--r--core/l10n/da.json47
-rw-r--r--core/l10n/de.js27
-rw-r--r--core/l10n/de.json27
-rw-r--r--core/l10n/de_AT.js4
-rw-r--r--core/l10n/de_AT.json4
-rw-r--r--core/l10n/de_DE.js27
-rw-r--r--core/l10n/de_DE.json27
-rw-r--r--core/l10n/el.js27
-rw-r--r--core/l10n/el.json27
-rw-r--r--core/l10n/en@pirate.js4
-rw-r--r--core/l10n/en@pirate.json4
-rw-r--r--core/l10n/en_GB.js29
-rw-r--r--core/l10n/en_GB.json29
-rw-r--r--core/l10n/eo.js11
-rw-r--r--core/l10n/eo.json11
-rw-r--r--core/l10n/es.js60
-rw-r--r--core/l10n/es.json60
-rw-r--r--core/l10n/es_AR.js15
-rw-r--r--core/l10n/es_AR.json15
-rw-r--r--core/l10n/es_CL.js4
-rw-r--r--core/l10n/es_CL.json4
-rw-r--r--core/l10n/es_MX.js15
-rw-r--r--core/l10n/es_MX.json15
-rw-r--r--core/l10n/et_EE.js16
-rw-r--r--core/l10n/et_EE.json16
-rw-r--r--core/l10n/eu.js16
-rw-r--r--core/l10n/eu.json16
-rw-r--r--core/l10n/fa.js16
-rw-r--r--core/l10n/fa.json16
-rw-r--r--core/l10n/fi.js20
-rw-r--r--core/l10n/fi.json18
-rw-r--r--core/l10n/fi_FI.js30
-rw-r--r--core/l10n/fi_FI.json30
-rw-r--r--core/l10n/fr.js34
-rw-r--r--core/l10n/fr.json34
-rw-r--r--core/l10n/gl.js27
-rw-r--r--core/l10n/gl.json27
-rw-r--r--core/l10n/he.js10
-rw-r--r--core/l10n/he.json10
-rw-r--r--core/l10n/hi.js5
-rw-r--r--core/l10n/hi.json5
-rw-r--r--core/l10n/hi_IN.php5
-rw-r--r--core/l10n/hr.js15
-rw-r--r--core/l10n/hr.json15
-rw-r--r--core/l10n/hu_HU.js26
-rw-r--r--core/l10n/hu_HU.json26
-rw-r--r--core/l10n/ia.js13
-rw-r--r--core/l10n/ia.json13
-rw-r--r--core/l10n/id.js16
-rw-r--r--core/l10n/id.json16
-rw-r--r--core/l10n/is.js8
-rw-r--r--core/l10n/is.json8
-rw-r--r--core/l10n/it.js27
-rw-r--r--core/l10n/it.json27
-rw-r--r--core/l10n/ja.js26
-rw-r--r--core/l10n/ja.json26
-rw-r--r--core/l10n/ka_GE.js10
-rw-r--r--core/l10n/ka_GE.json10
-rw-r--r--core/l10n/km.js9
-rw-r--r--core/l10n/km.json9
-rw-r--r--core/l10n/kn.js172
-rw-r--r--core/l10n/kn.json172
-rw-r--r--core/l10n/ko.js15
-rw-r--r--core/l10n/ko.json15
-rw-r--r--core/l10n/ku_IQ.js9
-rw-r--r--core/l10n/ku_IQ.json9
-rw-r--r--core/l10n/lb.js13
-rw-r--r--core/l10n/lb.json13
-rw-r--r--core/l10n/lo.js7
-rw-r--r--core/l10n/lo.json5
-rw-r--r--core/l10n/lt_LT.js15
-rw-r--r--core/l10n/lt_LT.json15
-rw-r--r--core/l10n/lv.js29
-rw-r--r--core/l10n/lv.json29
-rw-r--r--core/l10n/mk.js13
-rw-r--r--core/l10n/mk.json13
-rw-r--r--core/l10n/mn.js13
-rw-r--r--core/l10n/mn.json13
-rw-r--r--core/l10n/ms_MY.js8
-rw-r--r--core/l10n/ms_MY.json8
-rw-r--r--core/l10n/my_MM.js5
-rw-r--r--core/l10n/my_MM.json5
-rw-r--r--core/l10n/nb_NO.js33
-rw-r--r--core/l10n/nb_NO.json33
-rw-r--r--core/l10n/nl.js27
-rw-r--r--core/l10n/nl.json27
-rw-r--r--core/l10n/nn_NO.js13
-rw-r--r--core/l10n/nn_NO.json13
-rw-r--r--core/l10n/oc.js9
-rw-r--r--core/l10n/oc.json9
-rw-r--r--core/l10n/pa.js5
-rw-r--r--core/l10n/pa.json5
-rw-r--r--core/l10n/pl.js33
-rw-r--r--core/l10n/pl.json33
-rw-r--r--core/l10n/pt_BR.js29
-rw-r--r--core/l10n/pt_BR.json29
-rw-r--r--core/l10n/pt_PT.js151
-rw-r--r--core/l10n/pt_PT.json151
-rw-r--r--core/l10n/ro.js16
-rw-r--r--core/l10n/ro.json16
-rw-r--r--core/l10n/ru.js133
-rw-r--r--core/l10n/ru.json133
-rw-r--r--core/l10n/si_LK.js9
-rw-r--r--core/l10n/si_LK.json9
-rw-r--r--core/l10n/sk.php30
-rw-r--r--core/l10n/sk_SK.js24
-rw-r--r--core/l10n/sk_SK.json24
-rw-r--r--core/l10n/sl.js32
-rw-r--r--core/l10n/sl.json32
-rw-r--r--core/l10n/sq.js126
-rw-r--r--core/l10n/sq.json126
-rw-r--r--core/l10n/sr.js9
-rw-r--r--core/l10n/sr.json9
-rw-r--r--core/l10n/sr@latin.js137
-rw-r--r--core/l10n/sr@latin.json137
-rw-r--r--core/l10n/sv.js54
-rw-r--r--core/l10n/sv.json54
-rw-r--r--core/l10n/ta_LK.js9
-rw-r--r--core/l10n/ta_LK.json9
-rw-r--r--core/l10n/te.js4
-rw-r--r--core/l10n/te.json4
-rw-r--r--core/l10n/th_TH.js9
-rw-r--r--core/l10n/th_TH.json9
-rw-r--r--core/l10n/tr.js19
-rw-r--r--core/l10n/tr.json19
-rw-r--r--core/l10n/ug.js7
-rw-r--r--core/l10n/ug.json7
-rw-r--r--core/l10n/uk.js22
-rw-r--r--core/l10n/uk.json22
-rw-r--r--core/l10n/ur.php6
-rw-r--r--core/l10n/ur_PK.js12
-rw-r--r--core/l10n/ur_PK.json12
-rw-r--r--core/l10n/vi.js14
-rw-r--r--core/l10n/vi.json14
-rw-r--r--core/l10n/zh_CN.js44
-rw-r--r--core/l10n/zh_CN.json44
-rw-r--r--core/l10n/zh_HK.js11
-rw-r--r--core/l10n/zh_HK.json11
-rw-r--r--core/l10n/zh_TW.js16
-rw-r--r--core/l10n/zh_TW.json16
-rw-r--r--core/lostpassword/controller/lostcontroller.php169
-rw-r--r--core/lostpassword/css/resetpassword.css4
-rw-r--r--core/lostpassword/encrypteddataexception.php14
-rw-r--r--core/lostpassword/templates/lostpassword.php20
-rw-r--r--core/lostpassword/templates/resetpassword.php12
-rw-r--r--core/register_command.php7
-rw-r--r--core/routes.php19
-rw-r--r--core/setup/controller.php79
-rw-r--r--core/share/controller.php23
-rw-r--r--core/templates/filetemplates/template.odtbin8381 -> 8449 bytes
-rw-r--r--core/templates/installation.php6
-rw-r--r--core/templates/layout.base.php2
-rw-r--r--core/templates/layout.guest.php6
-rw-r--r--core/templates/layout.user.php27
-rw-r--r--core/templates/login.php16
-rw-r--r--core/vendor/.gitignore66
-rw-r--r--core/vendor/blueimp-md5/.bower.json53
-rw-r--r--core/vendor/handlebars/.bower.json16
-rw-r--r--core/vendor/jcrop/.bower.json14
-rw-r--r--core/vendor/jquery-ui/MIT-LICENSE.txt26
-rw-r--r--core/vendor/jquery-ui/themes/base/images/animated-overlay.gif (renamed from core/css/images/animated-overlay.gif)bin1738 -> 1738 bytes
-rw-r--r--core/vendor/jquery-ui/themes/base/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rw-r--r--core/vendor/jquery-ui/themes/base/jquery-ui.css (renamed from core/css/jquery-ui-1.10.0.custom.css)276
-rw-r--r--core/vendor/jquery-ui/ui/jquery-ui.custom.js (renamed from core/js/jquery-ui-1.10.0.custom.js)2
-rw-r--r--core/vendor/jquery/.bower.json21
-rw-r--r--core/vendor/jsTimezoneDetect/.bower.json23
-rw-r--r--core/vendor/jsTimezoneDetect/LICENCE.txt22
-rw-r--r--core/vendor/jsTimezoneDetect/jstz.js358
-rw-r--r--core/vendor/moment/.bower.json30
-rw-r--r--core/vendor/select2/.bower.json24
-rw-r--r--core/vendor/snapjs/.bower.json31
-rw-r--r--core/vendor/strengthify/.bower.json20
-rw-r--r--core/vendor/strengthify/LICENSE20
-rw-r--r--core/vendor/strengthify/jquery.strengthify.js134
-rw-r--r--core/vendor/strengthify/strengthify.css48
-rw-r--r--core/vendor/underscore/.bower.json33
-rw-r--r--core/vendor/zxcvbn/.bower.json14
-rw-r--r--issue_template.md2
-rw-r--r--l10n/.gitignore1
-rw-r--r--l10n/templates/core.pot944
-rw-r--r--l10n/templates/files.pot423
-rw-r--r--l10n/templates/files_encryption.pot229
-rw-r--r--l10n/templates/files_external.pot313
-rw-r--r--l10n/templates/files_sharing.pot163
-rw-r--r--l10n/templates/files_trashbin.pot60
-rw-r--r--l10n/templates/files_versions.pot43
-rw-r--r--l10n/templates/lib.pot621
-rw-r--r--l10n/templates/private.pot582
-rw-r--r--l10n/templates/settings.pot1048
-rw-r--r--l10n/templates/user_ldap.pot609
-rw-r--r--l10n/templates/user_webdavauth.pot37
-rw-r--r--lib/base.php139
-rw-r--r--lib/l10n/ach.js7
-rw-r--r--lib/l10n/ach.json7
-rw-r--r--lib/l10n/ady.js7
-rw-r--r--lib/l10n/ady.json7
-rw-r--r--lib/l10n/af_ZA.js12
-rw-r--r--lib/l10n/af_ZA.json12
-rw-r--r--lib/l10n/ak.js7
-rw-r--r--lib/l10n/ak.json7
-rw-r--r--lib/l10n/am_ET.js7
-rw-r--r--lib/l10n/am_ET.json7
-rw-r--r--lib/l10n/ar.js20
-rw-r--r--lib/l10n/ar.json20
-rw-r--r--lib/l10n/ast.js26
-rw-r--r--lib/l10n/ast.json26
-rw-r--r--lib/l10n/az.js9
-rw-r--r--lib/l10n/az.json9
-rw-r--r--lib/l10n/be.js10
-rw-r--r--lib/l10n/be.json10
-rw-r--r--lib/l10n/bg_BG.js28
-rw-r--r--lib/l10n/bg_BG.json28
-rw-r--r--lib/l10n/bn_BD.js23
-rw-r--r--lib/l10n/bn_BD.json23
-rw-r--r--lib/l10n/bn_IN.js7
-rw-r--r--lib/l10n/bn_IN.json7
-rw-r--r--lib/l10n/bs.js18
-rw-r--r--lib/l10n/bs.json18
-rw-r--r--lib/l10n/ca.js27
-rw-r--r--lib/l10n/ca.json27
-rw-r--r--lib/l10n/ca@valencia.js7
-rw-r--r--lib/l10n/ca@valencia.json7
-rw-r--r--lib/l10n/cs_CZ.js46
-rw-r--r--lib/l10n/cs_CZ.json46
-rw-r--r--lib/l10n/cy_GB.js22
-rw-r--r--lib/l10n/cy_GB.json22
-rw-r--r--lib/l10n/da.js44
-rw-r--r--lib/l10n/da.json44
-rw-r--r--lib/l10n/de.js44
-rw-r--r--lib/l10n/de.json44
-rw-r--r--lib/l10n/de_AT.js7
-rw-r--r--lib/l10n/de_AT.json7
-rw-r--r--lib/l10n/de_DE.js40
-rw-r--r--lib/l10n/de_DE.json40
-rw-r--r--lib/l10n/el.js28
-rw-r--r--lib/l10n/el.json28
-rw-r--r--lib/l10n/en@pirate.js9
-rw-r--r--lib/l10n/en@pirate.json9
-rw-r--r--lib/l10n/en_GB.js40
-rw-r--r--lib/l10n/en_GB.json40
-rw-r--r--lib/l10n/en_NZ.js7
-rw-r--r--lib/l10n/en_NZ.json7
-rw-r--r--lib/l10n/eo.js22
-rw-r--r--lib/l10n/eo.json22
-rw-r--r--lib/l10n/es.js84
-rw-r--r--lib/l10n/es.json84
-rw-r--r--lib/l10n/es_AR.js20
-rw-r--r--lib/l10n/es_AR.json20
-rw-r--r--lib/l10n/es_BO.js7
-rw-r--r--lib/l10n/es_BO.json7
-rw-r--r--lib/l10n/es_CL.js18
-rw-r--r--lib/l10n/es_CL.json18
-rw-r--r--lib/l10n/es_CO.js7
-rw-r--r--lib/l10n/es_CO.json7
-rw-r--r--lib/l10n/es_CR.js7
-rw-r--r--lib/l10n/es_CR.json7
-rw-r--r--lib/l10n/es_EC.js7
-rw-r--r--lib/l10n/es_EC.json7
-rw-r--r--lib/l10n/es_MX.js20
-rw-r--r--lib/l10n/es_MX.json20
-rw-r--r--lib/l10n/es_PE.js7
-rw-r--r--lib/l10n/es_PE.json7
-rw-r--r--lib/l10n/es_PY.js7
-rw-r--r--lib/l10n/es_PY.json7
-rw-r--r--lib/l10n/es_US.js7
-rw-r--r--lib/l10n/es_US.json7
-rw-r--r--lib/l10n/es_UY.js7
-rw-r--r--lib/l10n/es_UY.json7
-rw-r--r--lib/l10n/et_EE.js26
-rw-r--r--lib/l10n/et_EE.json26
-rw-r--r--lib/l10n/eu.js26
-rw-r--r--lib/l10n/eu.json26
-rw-r--r--lib/l10n/eu_ES.js7
-rw-r--r--lib/l10n/eu_ES.json7
-rw-r--r--lib/l10n/fa.js20
-rw-r--r--lib/l10n/fa.json20
-rw-r--r--lib/l10n/fi.js12
-rw-r--r--lib/l10n/fi.json10
-rw-r--r--lib/l10n/fi_FI.js34
-rw-r--r--lib/l10n/fi_FI.json34
-rw-r--r--lib/l10n/fil.js7
-rw-r--r--lib/l10n/fil.json7
-rw-r--r--lib/l10n/fr.js50
-rw-r--r--lib/l10n/fr.json50
-rw-r--r--lib/l10n/fr_CA.js7
-rw-r--r--lib/l10n/fr_CA.json7
-rw-r--r--lib/l10n/fy_NL.js7
-rw-r--r--lib/l10n/fy_NL.json7
-rw-r--r--lib/l10n/gl.js46
-rw-r--r--lib/l10n/gl.json46
-rw-r--r--lib/l10n/gu.js7
-rw-r--r--lib/l10n/gu.json7
-rw-r--r--lib/l10n/he.js20
-rw-r--r--lib/l10n/he.json20
-rw-r--r--lib/l10n/hi.js7
-rw-r--r--lib/l10n/hi.json7
-rw-r--r--lib/l10n/hi_IN.php8
-rw-r--r--lib/l10n/hr.js26
-rw-r--r--lib/l10n/hr.json26
-rw-r--r--lib/l10n/hu_HU.js26
-rw-r--r--lib/l10n/hu_HU.json26
-rw-r--r--lib/l10n/hy.js7
-rw-r--r--lib/l10n/hy.json7
-rw-r--r--lib/l10n/ia.js12
-rw-r--r--lib/l10n/ia.json12
-rw-r--r--lib/l10n/id.js23
-rw-r--r--lib/l10n/id.json23
-rw-r--r--lib/l10n/io.js7
-rw-r--r--lib/l10n/io.json7
-rw-r--r--lib/l10n/is.js20
-rw-r--r--lib/l10n/is.json20
-rw-r--r--lib/l10n/it.js40
-rw-r--r--lib/l10n/it.json40
-rw-r--r--lib/l10n/ja.js40
-rw-r--r--lib/l10n/ja.json40
-rw-r--r--lib/l10n/jv.js7
-rw-r--r--lib/l10n/jv.json7
-rw-r--r--lib/l10n/ka_GE.js20
-rw-r--r--lib/l10n/ka_GE.json20
-rw-r--r--lib/l10n/km.js20
-rw-r--r--lib/l10n/km.json20
-rw-r--r--lib/l10n/kn.js18
-rw-r--r--lib/l10n/kn.json18
-rw-r--r--lib/l10n/ko.js22
-rw-r--r--lib/l10n/ko.json22
-rw-r--r--lib/l10n/ku_IQ.js9
-rw-r--r--lib/l10n/ku_IQ.json9
-rw-r--r--lib/l10n/lb.js16
-rw-r--r--lib/l10n/lb.json16
-rw-r--r--lib/l10n/lo.js10
-rw-r--r--lib/l10n/lo.json8
-rw-r--r--lib/l10n/lt_LT.js20
-rw-r--r--lib/l10n/lt_LT.json20
-rw-r--r--lib/l10n/lv.js23
-rw-r--r--lib/l10n/lv.json23
-rw-r--r--lib/l10n/mg.js7
-rw-r--r--lib/l10n/mg.json7
-rw-r--r--lib/l10n/mk.js20
-rw-r--r--lib/l10n/mk.json20
-rw-r--r--lib/l10n/ml.js7
-rw-r--r--lib/l10n/ml.json7
-rw-r--r--lib/l10n/ml_IN.js7
-rw-r--r--lib/l10n/ml_IN.json7
-rw-r--r--lib/l10n/mn.js9
-rw-r--r--lib/l10n/mn.json9
-rw-r--r--lib/l10n/ms_MY.js11
-rw-r--r--lib/l10n/ms_MY.json11
-rw-r--r--lib/l10n/mt_MT.js7
-rw-r--r--lib/l10n/mt_MT.json7
-rw-r--r--lib/l10n/my_MM.js16
-rw-r--r--lib/l10n/my_MM.json16
-rw-r--r--lib/l10n/nb_NO.js41
-rw-r--r--lib/l10n/nb_NO.json41
-rw-r--r--lib/l10n/nds.js7
-rw-r--r--lib/l10n/nds.json7
-rw-r--r--lib/l10n/ne.js7
-rw-r--r--lib/l10n/ne.json7
-rw-r--r--lib/l10n/nl.js44
-rw-r--r--lib/l10n/nl.json44
-rw-r--r--lib/l10n/nn_NO.js16
-rw-r--r--lib/l10n/nn_NO.json16
-rw-r--r--lib/l10n/nqo.js7
-rw-r--r--lib/l10n/nqo.json7
-rw-r--r--lib/l10n/oc.js14
-rw-r--r--lib/l10n/oc.json14
-rw-r--r--lib/l10n/or_IN.js7
-rw-r--r--lib/l10n/or_IN.json7
-rw-r--r--lib/l10n/pa.js10
-rw-r--r--lib/l10n/pa.json10
-rw-r--r--lib/l10n/pl.js26
-rw-r--r--lib/l10n/pl.json26
-rw-r--r--lib/l10n/pt_BR.js40
-rw-r--r--lib/l10n/pt_BR.json40
-rw-r--r--lib/l10n/pt_PT.js28
-rw-r--r--lib/l10n/pt_PT.json28
-rw-r--r--lib/l10n/ro.js22
-rw-r--r--lib/l10n/ro.json22
-rw-r--r--lib/l10n/ru.js116
-rw-r--r--lib/l10n/ru.json116
-rw-r--r--lib/l10n/si_LK.js18
-rw-r--r--lib/l10n/si_LK.json18
-rw-r--r--lib/l10n/sk.php10
-rw-r--r--lib/l10n/sk_SK.js28
-rw-r--r--lib/l10n/sk_SK.json28
-rw-r--r--lib/l10n/sl.js40
-rw-r--r--lib/l10n/sl.json40
-rw-r--r--lib/l10n/sq.js23
-rw-r--r--lib/l10n/sq.json23
-rw-r--r--lib/l10n/sr.js20
-rw-r--r--lib/l10n/sr.json20
-rw-r--r--lib/l10n/sr@latin.js14
-rw-r--r--lib/l10n/sr@latin.json14
-rw-r--r--lib/l10n/su.js7
-rw-r--r--lib/l10n/su.json7
-rw-r--r--lib/l10n/sv.js51
-rw-r--r--lib/l10n/sv.json51
-rw-r--r--lib/l10n/sw_KE.js7
-rw-r--r--lib/l10n/sw_KE.json7
-rw-r--r--lib/l10n/ta_IN.js7
-rw-r--r--lib/l10n/ta_IN.json7
-rw-r--r--lib/l10n/ta_LK.js20
-rw-r--r--lib/l10n/ta_LK.json20
-rw-r--r--lib/l10n/te.js10
-rw-r--r--lib/l10n/te.json10
-rw-r--r--lib/l10n/tg_TJ.js7
-rw-r--r--lib/l10n/tg_TJ.json7
-rw-r--r--lib/l10n/th_TH.js20
-rw-r--r--lib/l10n/th_TH.json20
-rw-r--r--lib/l10n/tl_PH.js7
-rw-r--r--lib/l10n/tl_PH.json7
-rw-r--r--lib/l10n/tr.js29
-rw-r--r--lib/l10n/tr.json29
-rw-r--r--lib/l10n/tzm.js7
-rw-r--r--lib/l10n/tzm.json7
-rw-r--r--lib/l10n/ug.js9
-rw-r--r--lib/l10n/ug.json9
-rw-r--r--lib/l10n/uk.js31
-rw-r--r--lib/l10n/uk.json31
-rw-r--r--lib/l10n/ur.php8
-rw-r--r--lib/l10n/ur_PK.js12
-rw-r--r--lib/l10n/ur_PK.json12
-rw-r--r--lib/l10n/uz.js7
-rw-r--r--lib/l10n/uz.json7
-rw-r--r--lib/l10n/vi.js22
-rw-r--r--lib/l10n/vi.json22
-rw-r--r--lib/l10n/zh_CN.js26
-rw-r--r--lib/l10n/zh_CN.json26
-rw-r--r--lib/l10n/zh_HK.js11
-rw-r--r--lib/l10n/zh_HK.json11
-rw-r--r--lib/l10n/zh_TW.js27
-rw-r--r--lib/l10n/zh_TW.json27
-rw-r--r--lib/private/activitymanager.php35
-rw-r--r--lib/private/allconfig.php293
-rw-r--r--lib/private/api.php46
-rw-r--r--lib/private/app.php94
-rw-r--r--lib/private/app/appmanager.php138
-rw-r--r--lib/private/app/dependencyanalyzer.php215
-rw-r--r--lib/private/app/infoparser.php149
-rw-r--r--lib/private/app/platform.php80
-rw-r--r--lib/private/app/platformrepository.php210
-rw-r--r--lib/private/appframework/app.php54
-rw-r--r--lib/private/appframework/core/api.php14
-rw-r--r--lib/private/appframework/dependencyinjection/dicontainer.php181
-rw-r--r--lib/private/appframework/http/dispatcher.php8
-rw-r--r--lib/private/appframework/middleware/security/securitymiddleware.php14
-rw-r--r--lib/private/appframework/routing/routeconfig.php8
-rw-r--r--lib/private/appframework/utility/controllermethodreflector.php6
-rw-r--r--lib/private/appframework/utility/simplecontainer.php87
-rw-r--r--lib/private/appframework/utility/timefactory.php4
-rw-r--r--lib/private/arrayparser.php5
-rw-r--r--lib/private/assetic/separatorfilter.php57
-rw-r--r--lib/private/config.php24
-rw-r--r--lib/private/connector/sabre/appenabledplugin.php75
-rw-r--r--lib/private/connector/sabre/directory.php95
-rw-r--r--lib/private/connector/sabre/file.php165
-rw-r--r--lib/private/connector/sabre/filesplugin.php10
-rw-r--r--lib/private/connector/sabre/node.php11
-rw-r--r--lib/private/connector/sabre/objecttree.php64
-rw-r--r--lib/private/connector/sabre/principal.php83
-rw-r--r--lib/private/connector/sabre/quotaplugin.php8
-rw-r--r--lib/private/connector/sabre/server.php7
-rw-r--r--lib/private/connector/sabre/taglist.php102
-rw-r--r--lib/private/connector/sabre/tagsplugin.php289
-rw-r--r--lib/private/contacts/localaddressbook.php2
-rw-r--r--lib/private/contactsmanager.php12
-rw-r--r--lib/private/databaseexception.php23
-rw-r--r--lib/private/databasesetupexception.php12
-rw-r--r--lib/private/datetimeformatter.php269
-rw-r--r--lib/private/datetimezone.php62
-rw-r--r--lib/private/davclient.php59
-rw-r--r--lib/private/db.php84
-rw-r--r--lib/private/db/adapter.php10
-rw-r--r--lib/private/db/adaptersqlite.php18
-rw-r--r--lib/private/db/connection.php36
-rw-r--r--lib/private/db/connectionfactory.php22
-rw-r--r--lib/private/db/mdb2schemamanager.php22
-rw-r--r--lib/private/db/mdb2schemareader.php11
-rw-r--r--lib/private/db/mdb2schemawriter.php14
-rw-r--r--lib/private/db/migrator.php12
-rw-r--r--lib/private/db/mssqlmigrator.php2
-rw-r--r--lib/private/db/oracleconnection.php37
-rw-r--r--lib/private/db/pgsqltools.php15
-rw-r--r--lib/private/db/sqlitemigrator.php16
-rw-r--r--lib/private/db/sqlitesessioninit.php10
-rw-r--r--lib/private/db/statementwrapper.php16
-rw-r--r--lib/private/files.php25
-rw-r--r--lib/private/files/cache/cache.php55
-rw-r--r--lib/private/files/cache/scanner.php6
-rw-r--r--lib/private/files/cache/updater.php5
-rw-r--r--lib/private/files/cache/wrapper/cachejail.php267
-rw-r--r--lib/private/files/cache/wrapper/cachepermissionsmask.php32
-rw-r--r--lib/private/files/cache/wrapper/cachewrapper.php268
-rw-r--r--lib/private/files/config/mountprovidercollection.php55
-rw-r--r--lib/private/files/fileinfo.php33
-rw-r--r--lib/private/files/filesystem.php39
-rw-r--r--lib/private/files/mount/manager.php16
-rw-r--r--lib/private/files/mount/mountpoint.php (renamed from lib/private/files/mount/mount.php)55
-rw-r--r--lib/private/files/node/file.php20
-rw-r--r--lib/private/files/node/folder.php40
-rw-r--r--lib/private/files/node/node.php82
-rw-r--r--lib/private/files/node/nonexistingfolder.php4
-rw-r--r--lib/private/files/node/root.php20
-rw-r--r--lib/private/files/objectstore/objectstorestorage.php6
-rw-r--r--lib/private/files/storage/common.php26
-rw-r--r--lib/private/files/storage/dav.php60
-rw-r--r--lib/private/files/storage/local.php78
-rw-r--r--lib/private/files/storage/mappedlocal.php90
-rw-r--r--lib/private/files/storage/storagefactory.php (renamed from lib/private/files/storage/loader.php)13
-rw-r--r--lib/private/files/storage/wrapper/jail.php413
-rw-r--r--lib/private/files/storage/wrapper/permissionsmask.php111
-rw-r--r--lib/private/files/storage/wrapper/wrapper.php12
-rw-r--r--lib/private/files/utils/scanner.php9
-rw-r--r--lib/private/files/view.php101
-rw-r--r--lib/private/group.php22
-rw-r--r--lib/private/group/backend.php32
-rw-r--r--lib/private/group/database.php6
-rw-r--r--lib/private/group/group.php13
-rw-r--r--lib/private/group/interface.php2
-rw-r--r--lib/private/group/manager.php32
-rw-r--r--lib/private/group/metadata.php7
-rw-r--r--lib/private/helper.php38
-rw-r--r--lib/private/httphelper.php61
-rw-r--r--lib/private/image.php525
-rw-r--r--lib/private/installer.php6
-rw-r--r--lib/private/l10n.php58
-rw-r--r--lib/private/l10n/string.php22
-rw-r--r--lib/private/largefilehelper.php2
-rw-r--r--lib/private/legacy/config.php8
-rw-r--r--lib/private/legacy/preferences.php64
-rw-r--r--lib/private/log/errorlog.php48
-rw-r--r--lib/private/log/owncloud.php9
-rw-r--r--lib/private/memcache/apc.php2
-rw-r--r--lib/private/memcache/factory.php4
-rw-r--r--lib/private/memcache/memcached.php8
-rw-r--r--lib/private/memcache/redis.php94
-rw-r--r--lib/private/migrate.php626
-rw-r--r--lib/private/migration/content.php246
-rw-r--r--lib/private/migration/provider.php52
-rw-r--r--lib/private/naturalsort.php11
-rw-r--r--lib/private/naturalsort_defaultcollator.php19
-rw-r--r--lib/private/ocs/cloud.php2
-rw-r--r--lib/private/preferences.php234
-rw-r--r--lib/private/preview.php212
-rw-r--r--lib/private/preview/bitmap.php126
-rw-r--r--lib/private/preview/illustrator.php19
-rw-r--r--lib/private/preview/image.php11
-rw-r--r--lib/private/preview/markdown.php18
-rw-r--r--lib/private/preview/movie.php94
-rw-r--r--lib/private/preview/movies.php122
-rw-r--r--lib/private/preview/mp3.php15
-rw-r--r--lib/private/preview/msoffice2003.php18
-rw-r--r--lib/private/preview/msoffice2007.php18
-rw-r--r--lib/private/preview/msofficedoc.php18
-rw-r--r--lib/private/preview/office-cl.php138
-rw-r--r--lib/private/preview/office.php84
-rw-r--r--lib/private/preview/opendocument.php18
-rw-r--r--lib/private/preview/pdf.php19
-rw-r--r--lib/private/preview/photoshop.php19
-rw-r--r--lib/private/preview/postscript.php19
-rw-r--r--lib/private/preview/provider.php12
-rw-r--r--lib/private/preview/staroffice.php18
-rw-r--r--lib/private/preview/svg.php71
-rw-r--r--lib/private/preview/tiff.php19
-rw-r--r--lib/private/preview/txt.php29
-rw-r--r--lib/private/repair.php5
-rw-r--r--lib/private/request.php37
-rw-r--r--lib/private/route/router.php39
-rw-r--r--lib/private/search.php48
-rw-r--r--lib/private/search/result/file.php2
-rw-r--r--lib/private/security/certificatemanager.php17
-rw-r--r--lib/private/security/crypto.php20
-rw-r--r--lib/private/security/hasher.php146
-rw-r--r--lib/private/server.php163
-rw-r--r--lib/private/setup.php40
-rw-r--r--lib/private/setup/mssql.php2
-rw-r--r--lib/private/setup/mysql.php6
-rw-r--r--lib/private/setup/oci.php6
-rw-r--r--lib/private/setup/postgresql.php4
-rw-r--r--lib/private/share/constants.php4
-rw-r--r--lib/private/share/helper.php19
-rw-r--r--lib/private/share/mailnotifications.php2
-rw-r--r--lib/private/share/share.php354
-rw-r--r--lib/private/systemconfig.php49
-rw-r--r--lib/private/tagmanager.php22
-rw-r--r--lib/private/tags.php42
-rw-r--r--lib/private/template.php80
-rw-r--r--lib/private/template/cssresourcelocator.php10
-rw-r--r--lib/private/template/functions.php40
-rw-r--r--lib/private/template/jsresourcelocator.php9
-rw-r--r--lib/private/template/resourcelocator.php8
-rw-r--r--lib/private/template/templatefilelocator.php12
-rw-r--r--lib/private/templatelayout.php29
-rw-r--r--lib/private/updater.php89
-rw-r--r--lib/private/urlgenerator.php12
-rw-r--r--lib/private/user.php47
-rw-r--r--lib/private/user/backend.php45
-rw-r--r--lib/private/user/database.php49
-rw-r--r--lib/private/user/dummy.php31
-rw-r--r--lib/private/user/http.php10
-rw-r--r--lib/private/user/interface.php4
-rw-r--r--lib/private/user/manager.php45
-rw-r--r--lib/private/user/session.php39
-rw-r--r--lib/private/user/user.php56
-rw-r--r--lib/private/util.php117
-rw-r--r--lib/public/activity/iextension.php20
-rw-r--r--lib/public/activity/imanager.php7
-rw-r--r--lib/public/app/iappmanager.php51
-rw-r--r--lib/public/appframework/app.php16
-rw-r--r--lib/public/appframework/controller.php2
-rw-r--r--lib/public/appframework/http/datadownloadresponse.php42
-rw-r--r--lib/public/appframework/http/response.php73
-rw-r--r--lib/public/appframework/iapi.php10
-rw-r--r--lib/public/appframework/iappcontainer.php8
-rw-r--r--lib/public/appframework/queryexception.php28
-rw-r--r--lib/public/appframework/utility/icontrollermethodreflector.php63
-rw-r--r--lib/public/appframework/utility/itimefactory.php38
-rw-r--r--lib/public/config.php22
-rw-r--r--lib/public/constants.php28
-rw-r--r--lib/public/defaults.php8
-rw-r--r--lib/public/files/config/imountprovider.php26
-rw-r--r--lib/public/files/config/imountprovidercollection.php31
-rw-r--r--lib/public/files/fileinfo.php19
-rw-r--r--lib/public/files/folder.php9
-rw-r--r--lib/public/files/ihomestorage.php24
-rw-r--r--lib/public/files/irootfolder.php32
-rw-r--r--lib/public/files/mount/imountpoint.php67
-rw-r--r--lib/public/files/node.php10
-rw-r--r--lib/public/files/storage.php12
-rw-r--r--lib/public/files/storage/istoragefactory.php32
-rw-r--r--lib/public/iappconfig.php7
-rw-r--r--lib/public/iavatar.php6
-rw-r--r--lib/public/iconfig.php46
-rw-r--r--lib/public/idatetimeformatter.php121
-rw-r--r--lib/public/idatetimezone.php21
-rw-r--r--lib/public/idbconnection.php16
-rw-r--r--lib/public/igroupmanager.php15
-rw-r--r--lib/public/isearch.php16
-rw-r--r--lib/public/iservercontainer.php46
-rw-r--r--lib/public/itagmanager.php7
-rw-r--r--lib/public/itags.php18
-rw-r--r--lib/public/iurlgenerator.php8
-rw-r--r--lib/public/iuser.php7
-rw-r--r--lib/public/iuserbackend.php27
-rw-r--r--lib/public/iusermanager.php6
-rw-r--r--lib/public/iusersession.php11
-rw-r--r--lib/public/preconditionnotmetexception.php30
-rw-r--r--lib/public/search/pagedprovider.php58
-rw-r--r--lib/public/search/provider.php36
-rw-r--r--lib/public/security/ihasher.php48
-rw-r--r--lib/public/share.php95
-rw-r--r--lib/public/share_backend.php80
-rw-r--r--lib/public/share_backend_collection.php29
-rw-r--r--lib/public/share_backend_file_dependent.php31
-rw-r--r--lib/public/template.php94
-rw-r--r--lib/public/user.php3
-rw-r--r--lib/public/util.php6
-rw-r--r--lib/repair/assetcache.php2
-rw-r--r--lib/repair/repairconfig.php29
-rwxr-xr-xocc2
-rw-r--r--ocs/routes.php30
-rw-r--r--public.php4
-rw-r--r--remote.php4
-rw-r--r--search/ajax/search.php28
-rw-r--r--search/css/results.css103
-rw-r--r--search/js/result.js138
-rw-r--r--search/js/search.js378
-rw-r--r--search/templates/part.results.html13
-rw-r--r--search/templates/part.results.php15
-rw-r--r--settings/admin.php53
-rw-r--r--settings/ajax/checksetup.php5
-rw-r--r--settings/ajax/creategroup.php21
-rw-r--r--settings/ajax/createuser.php59
-rw-r--r--settings/ajax/decryptall.php2
-rw-r--r--settings/ajax/geteveryonecount.php2
-rw-r--r--settings/ajax/getlog.php21
-rw-r--r--settings/ajax/grouplist.php46
-rw-r--r--settings/ajax/lostpassword.php15
-rw-r--r--settings/ajax/removegroup.php14
-rw-r--r--settings/ajax/removeuser.php26
-rw-r--r--settings/ajax/setlanguage.php2
-rw-r--r--settings/ajax/setloglevel.php13
-rw-r--r--settings/ajax/setquota.php2
-rw-r--r--settings/ajax/setsecurity.php21
-rw-r--r--settings/ajax/userlist.php92
-rw-r--r--settings/application.php99
-rw-r--r--settings/changepassword/controller.php2
-rw-r--r--settings/controller/appsettingscontroller.php19
-rw-r--r--settings/controller/groupscontroller.php140
-rw-r--r--settings/controller/logsettingscontroller.php126
-rw-r--r--settings/controller/securitysettingscontroller.php95
-rw-r--r--settings/controller/userscontroller.php441
-rw-r--r--settings/css/settings.css19
-rw-r--r--settings/js/admin.js32
-rw-r--r--settings/js/log.js12
-rw-r--r--settings/js/personal.js18
-rw-r--r--settings/js/settings.js30
-rw-r--r--settings/js/users/deleteHandler.js7
-rw-r--r--settings/js/users/filter.js9
-rw-r--r--settings/js/users/groups.js37
-rw-r--r--settings/js/users/users.js335
-rw-r--r--settings/l10n/ar.js15
-rw-r--r--settings/l10n/ar.json15
-rw-r--r--settings/l10n/ast.js20
-rw-r--r--settings/l10n/ast.json20
-rw-r--r--settings/l10n/az.js9
-rw-r--r--settings/l10n/az.json9
-rw-r--r--settings/l10n/bg_BG.js23
-rw-r--r--settings/l10n/bg_BG.json23
-rw-r--r--settings/l10n/bn_BD.js11
-rw-r--r--settings/l10n/bn_BD.json11
-rw-r--r--settings/l10n/bs.js258
-rw-r--r--settings/l10n/bs.json256
-rw-r--r--settings/l10n/ca.js50
-rw-r--r--settings/l10n/ca.json50
-rw-r--r--settings/l10n/cs_CZ.js89
-rw-r--r--settings/l10n/cs_CZ.json89
-rw-r--r--settings/l10n/cy_GB.js5
-rw-r--r--settings/l10n/cy_GB.json5
-rw-r--r--settings/l10n/da.js53
-rw-r--r--settings/l10n/da.json53
-rw-r--r--settings/l10n/de.js53
-rw-r--r--settings/l10n/de.json53
-rw-r--r--settings/l10n/de_DE.js53
-rw-r--r--settings/l10n/de_DE.json53
-rw-r--r--settings/l10n/el.js40
-rw-r--r--settings/l10n/el.json40
-rw-r--r--settings/l10n/en_GB.js53
-rw-r--r--settings/l10n/en_GB.json53
-rw-r--r--settings/l10n/eo.js12
-rw-r--r--settings/l10n/eo.json12
-rw-r--r--settings/l10n/es.js59
-rw-r--r--settings/l10n/es.json59
-rw-r--r--settings/l10n/es_AR.js18
-rw-r--r--settings/l10n/es_AR.json18
-rw-r--r--settings/l10n/es_MX.js16
-rw-r--r--settings/l10n/es_MX.json16
-rw-r--r--settings/l10n/et_EE.js23
-rw-r--r--settings/l10n/et_EE.json23
-rw-r--r--settings/l10n/eu.js20
-rw-r--r--settings/l10n/eu.json20
-rw-r--r--settings/l10n/fa.js15
-rw-r--r--settings/l10n/fa.json15
-rw-r--r--settings/l10n/fi.js11
-rw-r--r--settings/l10n/fi.json9
-rw-r--r--settings/l10n/fi_FI.js49
-rw-r--r--settings/l10n/fi_FI.json49
-rw-r--r--settings/l10n/fr.js67
-rw-r--r--settings/l10n/fr.json67
-rw-r--r--settings/l10n/gl.js73
-rw-r--r--settings/l10n/gl.json73
-rw-r--r--settings/l10n/he.js10
-rw-r--r--settings/l10n/he.json10
-rw-r--r--settings/l10n/hr.js20
-rw-r--r--settings/l10n/hr.json20
-rw-r--r--settings/l10n/hu_HU.js20
-rw-r--r--settings/l10n/hu_HU.json20
-rw-r--r--settings/l10n/ia.js3
-rw-r--r--settings/l10n/ia.json3
-rw-r--r--settings/l10n/id.js28
-rw-r--r--settings/l10n/id.json28
-rw-r--r--settings/l10n/is.js9
-rw-r--r--settings/l10n/is.json9
-rw-r--r--settings/l10n/it.js52
-rw-r--r--settings/l10n/it.json52
-rw-r--r--settings/l10n/ja.js51
-rw-r--r--settings/l10n/ja.json51
-rw-r--r--settings/l10n/ka_GE.js10
-rw-r--r--settings/l10n/ka_GE.json10
-rw-r--r--settings/l10n/km.js10
-rw-r--r--settings/l10n/km.json10
-rw-r--r--settings/l10n/kn.js163
-rw-r--r--settings/l10n/kn.json161
-rw-r--r--settings/l10n/ko.js17
-rw-r--r--settings/l10n/ko.json17
-rw-r--r--settings/l10n/ku_IQ.js1
-rw-r--r--settings/l10n/ku_IQ.json1
-rw-r--r--settings/l10n/lb.js11
-rw-r--r--settings/l10n/lb.json11
-rw-r--r--settings/l10n/lt_LT.js16
-rw-r--r--settings/l10n/lt_LT.json16
-rw-r--r--settings/l10n/lv.js94
-rw-r--r--settings/l10n/lv.json94
-rw-r--r--settings/l10n/mk.js13
-rw-r--r--settings/l10n/mk.json13
-rw-r--r--settings/l10n/mn.js27
-rw-r--r--settings/l10n/mn.json25
-rw-r--r--settings/l10n/ms_MY.js6
-rw-r--r--settings/l10n/ms_MY.json6
-rw-r--r--settings/l10n/nb_NO.js65
-rw-r--r--settings/l10n/nb_NO.json65
-rw-r--r--settings/l10n/nl.js53
-rw-r--r--settings/l10n/nl.json53
-rw-r--r--settings/l10n/nn_NO.js11
-rw-r--r--settings/l10n/nn_NO.json11
-rw-r--r--settings/l10n/oc.js10
-rw-r--r--settings/l10n/oc.json10
-rw-r--r--settings/l10n/pa.js1
-rw-r--r--settings/l10n/pa.json1
-rw-r--r--settings/l10n/pl.js20
-rw-r--r--settings/l10n/pl.json20
-rw-r--r--settings/l10n/pt_BR.js53
-rw-r--r--settings/l10n/pt_BR.json53
-rw-r--r--settings/l10n/pt_PT.js199
-rw-r--r--settings/l10n/pt_PT.json199
-rw-r--r--settings/l10n/ro.js14
-rw-r--r--settings/l10n/ro.json14
-rw-r--r--settings/l10n/ru.js91
-rw-r--r--settings/l10n/ru.json91
-rw-r--r--settings/l10n/si_LK.js10
-rw-r--r--settings/l10n/si_LK.json10
-rw-r--r--settings/l10n/sk_SK.js24
-rw-r--r--settings/l10n/sk_SK.json24
-rw-r--r--settings/l10n/sl.js31
-rw-r--r--settings/l10n/sl.json31
-rw-r--r--settings/l10n/sq.js37
-rw-r--r--settings/l10n/sq.json37
-rw-r--r--settings/l10n/sr.js10
-rw-r--r--settings/l10n/sr.json10
-rw-r--r--settings/l10n/sr@latin.js8
-rw-r--r--settings/l10n/sr@latin.json8
-rw-r--r--settings/l10n/sv.js95
-rw-r--r--settings/l10n/sv.json95
-rw-r--r--settings/l10n/ta_LK.js10
-rw-r--r--settings/l10n/ta_LK.json10
-rw-r--r--settings/l10n/th_TH.js10
-rw-r--r--settings/l10n/th_TH.json10
-rw-r--r--settings/l10n/tr.js42
-rw-r--r--settings/l10n/tr.json42
-rw-r--r--settings/l10n/ug.js10
-rw-r--r--settings/l10n/ug.json10
-rw-r--r--settings/l10n/uk.js25
-rw-r--r--settings/l10n/uk.json25
-rw-r--r--settings/l10n/ur_PK.js5
-rw-r--r--settings/l10n/ur_PK.json5
-rw-r--r--settings/l10n/vi.js12
-rw-r--r--settings/l10n/vi.json12
-rw-r--r--settings/l10n/zh_CN.js20
-rw-r--r--settings/l10n/zh_CN.json20
-rw-r--r--settings/l10n/zh_HK.js36
-rw-r--r--settings/l10n/zh_HK.json36
-rw-r--r--settings/l10n/zh_TW.js19
-rw-r--r--settings/l10n/zh_TW.json19
-rw-r--r--settings/middleware/subadminmiddleware.php65
-rw-r--r--settings/personal.php21
-rw-r--r--settings/routes.php47
-rw-r--r--settings/templates/admin.php77
-rw-r--r--settings/templates/apps.php21
-rw-r--r--settings/templates/email.new_user.php36
-rw-r--r--settings/templates/email.new_user_plain_text.php10
-rw-r--r--settings/templates/personal.php22
-rw-r--r--settings/templates/users/main.php47
-rw-r--r--settings/templates/users/part.createuser.php7
-rw-r--r--settings/templates/users/part.userlist.php95
-rw-r--r--settings/tests/js/users/deleteHandlerSpec.js12
-rw-r--r--settings/users.php44
-rw-r--r--status.php6
-rw-r--r--tests/core/lostpassword/controller/lostcontrollertest.php203
-rw-r--r--tests/data/app/expected-info.json71
-rw-r--r--tests/data/app/invalid-info.xml22
-rw-r--r--tests/data/app/valid-info.xml34
-rw-r--r--tests/data/l10n/ru.json3
-rw-r--r--tests/enable_all.php2
-rw-r--r--tests/lib/activitymanager.php33
-rw-r--r--tests/lib/allconfig.php422
-rw-r--r--tests/lib/api.php4
-rw-r--r--tests/lib/app.php5
-rw-r--r--tests/lib/app/dependencyanalyzer.php249
-rw-r--r--tests/lib/app/infoparser.php62
-rw-r--r--tests/lib/app/manager.php195
-rw-r--r--tests/lib/app/platformrepository.php65
-rw-r--r--tests/lib/appconfig.php6
-rw-r--r--tests/lib/appframework/AppTest.php51
-rw-r--r--tests/lib/appframework/controller/ApiControllerTest.php2
-rw-r--r--tests/lib/appframework/controller/ControllerTest.php7
-rw-r--r--tests/lib/appframework/db/EntityTest.php3
-rw-r--r--tests/lib/appframework/db/mappertest.php2
-rw-r--r--tests/lib/appframework/db/mappertestutility.php6
-rw-r--r--tests/lib/appframework/dependencyinjection/DIContainerTest.php3
-rw-r--r--tests/lib/appframework/http/DataResponseTest.php3
-rw-r--r--tests/lib/appframework/http/DispatcherTest.php29
-rw-r--r--tests/lib/appframework/http/DownloadResponseTest.php3
-rw-r--r--tests/lib/appframework/http/HttpTest.php4
-rw-r--r--tests/lib/appframework/http/JSONResponseTest.php3
-rw-r--r--tests/lib/appframework/http/RedirectResponseTest.php3
-rw-r--r--tests/lib/appframework/http/RequestTest.php9
-rw-r--r--tests/lib/appframework/http/ResponseTest.php89
-rw-r--r--tests/lib/appframework/http/TemplateResponseTest.php4
-rw-r--r--tests/lib/appframework/middleware/MiddlewareDispatcherTest.php5
-rw-r--r--tests/lib/appframework/middleware/MiddlewareTest.php4
-rw-r--r--tests/lib/appframework/middleware/security/CORSMiddlewareTest.php3
-rw-r--r--tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php10
-rw-r--r--tests/lib/appframework/middleware/sessionmiddlewaretest.php4
-rw-r--r--tests/lib/appframework/routing/RoutingTest.php17
-rw-r--r--tests/lib/appframework/utility/ControllerMethodReflectorTest.php2
-rw-r--r--tests/lib/appframework/utility/SimpleContainerTest.php167
-rw-r--r--tests/lib/archive.php2
-rw-r--r--tests/lib/archive/tar.php7
-rw-r--r--tests/lib/archive/zip.php10
-rw-r--r--tests/lib/autoloader.php5
-rw-r--r--tests/lib/avatar.php8
-rw-r--r--tests/lib/backgroundjob/job.php5
-rw-r--r--tests/lib/backgroundjob/joblist.php6
-rw-r--r--tests/lib/backgroundjob/queuedjob.php6
-rw-r--r--tests/lib/backgroundjob/timedjob.php6
-rw-r--r--tests/lib/cache.php6
-rw-r--r--tests/lib/cache/file.php19
-rw-r--r--tests/lib/cache/usercache.php18
-rw-r--r--tests/lib/config.php42
-rw-r--r--tests/lib/connector/sabre/directory.php60
-rw-r--r--tests/lib/connector/sabre/file.php32
-rw-r--r--tests/lib/connector/sabre/node.php20
-rw-r--r--tests/lib/connector/sabre/objecttree.php6
-rw-r--r--tests/lib/connector/sabre/principal.php249
-rw-r--r--tests/lib/connector/sabre/quotaplugin.php2
-rw-r--r--tests/lib/connector/sabre/tagsplugin.php314
-rw-r--r--tests/lib/contacts/localadressbook.php5
-rw-r--r--tests/lib/contactsmanager.php209
-rw-r--r--tests/lib/datetimeformatter.php175
-rw-r--r--tests/lib/db.php12
-rw-r--r--tests/lib/db/connection.php88
-rw-r--r--tests/lib/db/mdb2schemamanager.php11
-rw-r--r--tests/lib/db/mdb2schemareader.php6
-rw-r--r--tests/lib/db/migrator.php11
-rw-r--r--tests/lib/db/mysqlmigration.php11
-rw-r--r--tests/lib/db/sqlitemigration.php11
-rw-r--r--tests/lib/dbschema.php10
-rw-r--r--tests/lib/errorHandler.php2
-rw-r--r--tests/lib/files/cache/cache.php83
-rw-r--r--tests/lib/files/cache/changepropagator.php8
-rw-r--r--tests/lib/files/cache/homecache.php6
-rw-r--r--tests/lib/files/cache/scanner.php10
-rw-r--r--tests/lib/files/cache/updater.php18
-rw-r--r--tests/lib/files/cache/updaterlegacy.php20
-rw-r--r--tests/lib/files/cache/watcher.php17
-rw-r--r--tests/lib/files/cache/wrapper/cachejail.php67
-rw-r--r--tests/lib/files/cache/wrapper/cachepermissionsmask.php94
-rw-r--r--tests/lib/files/etagtest.php17
-rw-r--r--tests/lib/files/filesystem.php196
-rw-r--r--tests/lib/files/mapper.php5
-rw-r--r--tests/lib/files/mount/manager.php15
-rw-r--r--tests/lib/files/mount/mount.php12
-rw-r--r--tests/lib/files/node/file.php46
-rw-r--r--tests/lib/files/node/folder.php75
-rw-r--r--tests/lib/files/node/integration.php17
-rw-r--r--tests/lib/files/node/node.php57
-rw-r--r--tests/lib/files/node/root.php12
-rw-r--r--tests/lib/files/objectstore/swift.php14
-rw-r--r--tests/lib/files/storage/commontest.php7
-rw-r--r--tests/lib/files/storage/home.php16
-rw-r--r--tests/lib/files/storage/local.php11
-rw-r--r--tests/lib/files/storage/mappedlocal.php7
-rw-r--r--tests/lib/files/storage/mappedlocalwithdotteddatadir.php7
-rw-r--r--tests/lib/files/storage/storage.php8
-rw-r--r--tests/lib/files/storage/wrapper/jail.php55
-rw-r--r--tests/lib/files/storage/wrapper/permissionsmask.php105
-rw-r--r--tests/lib/files/storage/wrapper/quota.php10
-rw-r--r--tests/lib/files/storage/wrapper/wrapper.php7
-rw-r--r--tests/lib/files/stream/quota.php5
-rw-r--r--tests/lib/files/stream/staticstream.php8
-rw-r--r--tests/lib/files/utils/scanner.php29
-rw-r--r--tests/lib/files/view.php55
-rw-r--r--tests/lib/geo.php2
-rw-r--r--tests/lib/group.php58
-rw-r--r--tests/lib/group/backend.php8
-rw-r--r--tests/lib/group/database.php23
-rw-r--r--tests/lib/group/dummy.php3
-rw-r--r--tests/lib/group/group.php2
-rw-r--r--tests/lib/group/manager.php74
-rw-r--r--tests/lib/group/metadata.php2
-rw-r--r--tests/lib/helper.php6
-rw-r--r--tests/lib/helperstorage.php21
-rw-r--r--tests/lib/hooks/basicemitter.php5
-rw-r--r--tests/lib/hooks/legacyemitter.php4
-rw-r--r--tests/lib/httphelper.php38
-rw-r--r--tests/lib/image.php14
-rw-r--r--tests/lib/installer.php10
-rw-r--r--tests/lib/l10n.php20
-rw-r--r--tests/lib/largefilehelper.php4
-rw-r--r--tests/lib/largefilehelpergetfilesize.php64
-rw-r--r--tests/lib/logger.php6
-rw-r--r--tests/lib/mail.php4
-rw-r--r--tests/lib/memcache/apc.php6
-rw-r--r--tests/lib/memcache/apcu.php6
-rw-r--r--tests/lib/memcache/cache.php4
-rw-r--r--tests/lib/memcache/memcached.php11
-rw-r--r--tests/lib/memcache/redis.php29
-rw-r--r--tests/lib/memcache/xcache.php6
-rw-r--r--tests/lib/migrate.php90
-rw-r--r--tests/lib/naturalsort.php4
-rw-r--r--tests/lib/ocs/privatedata.php12
-rw-r--r--tests/lib/preferences-singleton.php172
-rw-r--r--tests/lib/preferences.php241
-rw-r--r--tests/lib/preview.php38
-rw-r--r--tests/lib/public/contacts.php11
-rw-r--r--tests/lib/public/ocpconfig.php5
-rw-r--r--tests/lib/repair.php2
-rw-r--r--tests/lib/repair/repaircollation.php11
-rw-r--r--tests/lib/repair/repairinnodb.php11
-rw-r--r--tests/lib/repair/repairlegacystorage.php18
-rw-r--r--tests/lib/repair/repairmimetypes.php9
-rw-r--r--tests/lib/request.php35
-rw-r--r--tests/lib/security/certificate.php6
-rw-r--r--tests/lib/security/certificatemanager.php13
-rw-r--r--tests/lib/security/crypto.php3
-rw-r--r--tests/lib/security/hasher.php115
-rw-r--r--tests/lib/security/securerandom.php3
-rw-r--r--tests/lib/security/stringutils.php2
-rw-r--r--tests/lib/session/memory.php5
-rw-r--r--tests/lib/session/session.php5
-rw-r--r--tests/lib/setup.php21
-rw-r--r--tests/lib/share/backend.php6
-rw-r--r--tests/lib/share/helper.php8
-rw-r--r--tests/lib/share/searchresultsorter.php2
-rw-r--r--tests/lib/share/share.php262
-rw-r--r--tests/lib/streamwrappers.php7
-rw-r--r--tests/lib/tags.php107
-rw-r--r--tests/lib/template.php26
-rw-r--r--tests/lib/template/resourcelocator.php18
-rw-r--r--tests/lib/templatelayout.php12
-rw-r--r--tests/lib/tempmanager.php21
-rw-r--r--tests/lib/testcase.php172
-rw-r--r--tests/lib/updater.php85
-rw-r--r--tests/lib/urlgenerator.php2
-rw-r--r--tests/lib/user.php4
-rw-r--r--tests/lib/user/backend.php21
-rw-r--r--tests/lib/user/database.php13
-rw-r--r--tests/lib/user/dummy.php3
-rw-r--r--tests/lib/user/manager.php23
-rw-r--r--tests/lib/user/session.php48
-rw-r--r--tests/lib/user/user.php23
-rw-r--r--tests/lib/util.php32
-rw-r--r--tests/lib/utilcheckserver.php13
-rw-r--r--tests/lib/vobject.php6
-rw-r--r--tests/phpunit-autotest-external.xml36
-rw-r--r--tests/phpunit-autotest.xml11
-rw-r--r--tests/phpunit.xml.dist4
-rw-r--r--tests/preseed-config.php33
-rw-r--r--tests/settings/controller/groupscontrollertest.php246
-rw-r--r--tests/settings/controller/logsettingscontrollertest.php79
-rw-r--r--tests/settings/controller/mailsettingscontrollertest.php10
-rw-r--r--tests/settings/controller/securitysettingscontrollertest.php138
-rw-r--r--tests/settings/controller/userscontrollertest.php568
-rw-r--r--tests/settings/middleware/subadminmiddlewaretest.php91
-rw-r--r--tests/testcleanuplistener.php176
-rw-r--r--version.php7
2210 files changed, 57997 insertions, 32060 deletions
diff --git a/.gitignore b/.gitignore
index a36fd98b79f..72e631fa7af 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,11 +17,13 @@
!/apps/files_versions
!/apps/user_ldap
!/apps/user_webdavauth
+!apps/provisioning_api
/apps/files_external/3rdparty/irodsphp/PHPUnitTest
/apps/files_external/3rdparty/irodsphp/web
/apps/files_external/3rdparty/irodsphp/prods/test
/apps/files_external/3rdparty/irodsphp/prods/tutorials
/apps/files_external/3rdparty/irodsphp/prods/test*
+/apps/files_external/tests/config.*.php
@@ -89,8 +91,15 @@ nbproject
# nodejs
/build/lib/
+/build/jsdocs/
/npm-debug.log
+# puphpet
+puphpet
+
+# vagrant
+.vagrant
+Vagrantfile
# Tests - auto-generated files
/data-autotest
diff --git a/.htaccess b/.htaccess
index e45810d0a05..af7e961379c 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,3 +1,4 @@
+# Version: 8.0.0
<IfModule mod_fcgid.c>
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
@@ -25,6 +26,8 @@ RewriteRule ^\.well-known/caldav /remote.php/caldav/ [R]
RewriteRule ^apps/calendar/caldav\.php remote.php/caldav/ [QSA,L]
RewriteRule ^apps/contacts/carddav\.php remote.php/carddav/ [QSA,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
+RewriteRule ^(build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
+RewriteRule ^(\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>
<IfModule mod_mime.c>
AddType image/svg+xml svg svgz
@@ -39,7 +42,7 @@ Options -Indexes
ModPagespeed Off
</IfModule>
<IfModule mod_headers.c>
- <FilesMatch ".(css|js)$">
+ <FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=7200, public"
</FilesMatch>
</IfModule>
diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
index 81f0715c288..cecd69c3c97 100644
--- a/.idea/codeStyleSettings.xml
+++ b/.idea/codeStyleSettings.xml
@@ -3,6 +3,7 @@
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
+ <option name="RIGHT_MARGIN" value="80" />
<PHPCodeStyleSettings>
<option name="PHPDOC_BLANK_LINE_BEFORE_TAGS" value="true" />
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
@@ -46,7 +47,6 @@
</value>
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
- <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default (1)" />
</component>
</project>
diff --git a/.scrutinizer.yml b/.scrutinizer.yml
index 2a555ad28f6..78e878a42a4 100644
--- a/.scrutinizer.yml
+++ b/.scrutinizer.yml
@@ -2,6 +2,7 @@ filter:
excluded_paths:
- '3rdparty/*'
- 'apps/*/3rdparty/*'
+ - 'apps/*/vendor/*'
- 'l10n/*'
- 'core/l10n/*'
- 'apps/*/l10n/*'
@@ -11,9 +12,7 @@ filter:
- 'core/js/tests/specs/*.js'
- 'core/js/jquery-showpassword.js'
- 'core/js/jquery-tipsy.js'
- - 'core/js/jquery-ui-1.10.0.custom.js'
- 'core/js/placeholders.js'
- - 'core/js/jquery.multiselect.js'
imports:
diff --git a/3rdparty b/3rdparty
-Subproject 4966ff082e7a51c1109b8a665c18b2d72ba6960
+Subproject 3c5c49860e49ff20bfcfb001d13edb8c152d277
diff --git a/README.md b/README.md
index 6a95e329962..9c316fc7f0b 100644
--- a/README.md
+++ b/README.md
@@ -26,5 +26,7 @@ http://owncloud.org/contribute/
Please submit translations via Transifex:
https://www.transifex.com/projects/p/owncloud/
+[![Transifex](https://www.transifex.com/projects/p/owncloud/resource/core/chart/image_png)](https://www.transifex.com/projects/p/owncloud/)
+
For more detailed information about translations:
http://doc.owncloud.org/server/7.0/developer_manual/core/translation.html
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index 323b70706ce..4d4232e872e 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -27,7 +27,9 @@ $success = true;
//Now delete
foreach ($files as $file) {
if (\OC\Files\Filesystem::file_exists($dir . '/' . $file) &&
- !\OC\Files\Filesystem::unlink($dir . '/' . $file)) {
+ !(\OC\Files\Filesystem::isDeletable($dir . '/' . $file) &&
+ \OC\Files\Filesystem::unlink($dir . '/' . $file))
+ ) {
$filesWithError .= $file . "\n";
$success = false;
}
diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php
index 4ab5b9a779c..fb7ccdc86cc 100644
--- a/apps/files/ajax/getstoragestats.php
+++ b/apps/files/ajax/getstoragestats.php
@@ -10,4 +10,8 @@ OCP\JSON::checkLoggedIn();
\OC::$server->getSession()->close();
// send back json
-OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics($dir)));
+try {
+ OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics($dir)));
+} catch (\OCP\Files\NotFoundException $e) {
+ OCP\JSON::error(['data' => ['message' => 'Folder not found']]);
+}
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index 4abf5ad7607..4aed79d70f7 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -26,6 +26,7 @@ try {
// make filelist
$files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection);
+ $files = \OCA\Files\Helper::populateTags($files);
$data['directory'] = $dir;
$data['files'] = \OCA\Files\Helper::formatFileInfos($files);
$data['permissions'] = $permissions;
diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php
index fdbcc441a78..c531f5a3e81 100644
--- a/apps/files/ajax/mimeicon.php
+++ b/apps/files/ajax/mimeicon.php
@@ -1,4 +1,6 @@
<?php
\OC::$server->getSession()->close();
-print OC_Helper::mimetypeIcon($_GET['mime']);
+$mime = isset($_GET['mime']) ? $_GET['mime'] : '';
+
+print OC_Helper::mimetypeIcon($mime);
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index b4d91514a2a..c162237fe92 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -120,6 +120,9 @@ if($source) {
$freeSpace = $storageStats['freeSpace'];
foreach($meta['wrapper_data'] as $header) {
+ if (strpos($header, ':') === false){
+ continue;
+ }
list($name, $value) = explode(':', $header);
if ('content-length' === strtolower(trim($name))) {
$length = (int) trim($value);
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index b960e02ced7..fcee0166da6 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -1,5 +1,7 @@
<?php
+\OC::$server->getSession()->close();
+
// Firefox and Konqueror tries to download application/json for me. --Arthur
OCP\JSON::setContentTypeHeader('text/plain');
@@ -7,7 +9,7 @@ OCP\JSON::setContentTypeHeader('text/plain');
// If not, check the login.
// If no token is sent along, rely on login only
-$allowedPermissions = OCP\PERMISSION_ALL;
+$allowedPermissions = \OCP\Constants::PERMISSION_ALL;
$errorCode = null;
$l = \OC::$server->getL10N('files');
@@ -27,7 +29,7 @@ if (empty($_POST['dirToken'])) {
\OC_User::setIncognitoMode(true);
// return only read permissions for public upload
- $allowedPermissions = OCP\PERMISSION_READ;
+ $allowedPermissions = \OCP\Constants::PERMISSION_READ;
$publicDirectory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/';
$linkItem = OCP\Share::getShareByToken($_POST['dirToken']);
@@ -36,7 +38,7 @@ if (empty($_POST['dirToken'])) {
die();
}
- if (!($linkItem['permissions'] & OCP\PERMISSION_CREATE)) {
+ if (!($linkItem['permissions'] & \OCP\Constants::PERMISSION_CREATE)) {
OCP\JSON::checkLoggedIn();
} else {
// resolve reshares
@@ -64,13 +66,7 @@ if (empty($_POST['dirToken'])) {
}
}
-
OCP\JSON::callCheck();
-if (!\OCP\App::isEnabled('files_encryption')) {
- // encryption app need to create keys later, so can't close too early
- \OC::$server->getSession()->close();
-}
-
// get array with current storage stats (e.g. max file size)
$storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir);
@@ -121,6 +117,12 @@ if (strpos($dir, '..') === false) {
$fileCount = count($files['name']);
for ($i = 0; $i < $fileCount; $i++) {
+ if (isset($_POST['resolution'])) {
+ $resolution = $_POST['resolution'];
+ } else {
+ $resolution = null;
+ }
+
// target directory for when uploading folders
$relativePath = '';
if(!empty($_POST['file_directory'])) {
@@ -128,7 +130,7 @@ if (strpos($dir, '..') === false) {
}
// $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder
- if (isset($_POST['resolution']) && $_POST['resolution']==='autorename') {
+ if ($resolution === 'autorename') {
// append a number in brackets like 'filename (2).ext'
$target = OCP\Files::buildNotExistingFileName(stripslashes($dir . $relativePath), $files['name'][$i]);
} else {
@@ -145,9 +147,12 @@ if (strpos($dir, '..') === false) {
}
$returnedDir = \OC\Files\Filesystem::normalizePath($returnedDir);
- if ( ! \OC\Files\Filesystem::file_exists($target)
- || (isset($_POST['resolution']) && $_POST['resolution']==='replace')
- ) {
+
+ $exists = \OC\Files\Filesystem::file_exists($target);
+ if ($exists) {
+ $updatable = \OC\Files\Filesystem::isUpdatable($target);
+ }
+ if ( ! $exists || ($updatable && $resolution === 'replace' ) ) {
// upload and overwrite file
try
{
@@ -185,8 +190,11 @@ if (strpos($dir, '..') === false) {
$error = $l->t('Upload failed. Could not get file info.');
} else {
$data = \OCA\Files\Helper::formatFileInfo($meta);
- $data['permissions'] = $data['permissions'] & $allowedPermissions;
- $data['status'] = 'existserror';
+ if ($updatable) {
+ $data['status'] = 'existserror';
+ } else {
+ $data['status'] = 'readonly';
+ }
$data['originalname'] = $files['tmp_name'][$i];
$data['uploadMaxFilesize'] = $maxUploadFileSize;
$data['maxHumanFilesize'] = $maxHumanFileSize;
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 3567bc26def..62c205add52 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -10,7 +10,7 @@ OCP\App::addNavigationEntry(array("id" => "files_index",
"icon" => OCP\Util::imagePath("core", "places/files.svg"),
"name" => $l->t("Files")));
-\OC::$server->getSearch()->registerProvider('OC\Search\Provider\File');
+\OC::$server->getSearch()->registerProvider('OC\Search\Provider\File', array('apps' => array('files')));
$templateManager = OC_Helper::getFileTemplateManager();
$templateManager->registerTemplate('text/html', 'core/templates/filetemplates/template.html');
diff --git a/apps/files/appinfo/application.php b/apps/files/appinfo/application.php
index 7ca48bab474..13ff60daf89 100644
--- a/apps/files/appinfo/application.php
+++ b/apps/files/appinfo/application.php
@@ -11,6 +11,8 @@ namespace OCA\Files\Appinfo;
use OC\AppFramework\Utility\SimpleContainer;
use OCA\Files\Controller\ApiController;
use OCP\AppFramework\App;
+use \OCA\Files\Service\TagService;
+use \OCP\IContainer;
class Application extends App {
public function __construct(array $urlParams=array()) {
@@ -21,10 +23,44 @@ class Application extends App {
/**
* Controllers
*/
- $container->registerService('APIController', function (SimpleContainer $c) {
+ $container->registerService('APIController', function (IContainer $c) {
return new ApiController(
$c->query('AppName'),
- $c->query('Request')
+ $c->query('Request'),
+ $c->query('TagService')
+ );
+ });
+
+ /**
+ * Core
+ */
+ $container->registerService('L10N', function(IContainer $c) {
+ return $c->query('ServerContainer')->getL10N($c->query('AppName'));
+ });
+
+ /**
+ * Services
+ */
+ $container->registerService('Tagger', function(IContainer $c) {
+ return $c->query('ServerContainer')->getTagManager()->load('files');
+ });
+ $container->registerService('TagService', function(IContainer $c) {
+ $homeFolder = $c->query('ServerContainer')->getUserFolder();
+ return new TagService(
+ $c->query('ServerContainer')->getUserSession(),
+ $c->query('Tagger'),
+ $homeFolder
+ );
+ });
+
+ /**
+ * Controllers
+ */
+ $container->registerService('APIController', function (IContainer $c) {
+ return new ApiController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('TagService')
);
});
}
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 3ba25085bad..c622f083958 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -38,7 +38,7 @@ $server->setBaseUri($baseuri);
$defaults = new OC_Defaults();
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
-$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload
+$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false, false)); // Show something in the Browser, but no upload
$server->addPlugin(new OC_Connector_Sabre_FilesPlugin());
$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
$server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav'));
@@ -53,6 +53,7 @@ $server->subscribeEvent('beforeMethod', function () use ($server, $objectTree) {
$rootDir = new OC_Connector_Sabre_Directory($view, $rootInfo);
$objectTree->init($rootDir, $view, $mountManager);
+ $server->addPlugin(new \OC\Connector\Sabre\TagsPlugin($objectTree, \OC::$server->getTagManager()));
$server->addPlugin(new OC_Connector_Sabre_QuotaPlugin($view));
}, 30); // priority 30: after auth (10) and acl(20), before lock(50) and handling the request
diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index 96790a04855..349284ec52d 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -9,10 +9,31 @@
namespace OCA\Files\Appinfo;
$application = new Application();
-$application->registerRoutes($this, array('routes' => array(
- array('name' => 'API#getThumbnail', 'url' => '/api/v1/thumbnail/{x}/{y}/{file}', 'verb' => 'GET', 'requirements' => array('file' => '.+')),
-)));
-
+$application->registerRoutes(
+ $this,
+ array(
+ 'routes' => array(
+ array(
+ 'name' => 'API#getThumbnail',
+ 'url' => '/api/v1/thumbnail/{x}/{y}/{file}',
+ 'verb' => 'GET',
+ 'requirements' => array('file' => '.+')
+ ),
+ array(
+ 'name' => 'API#updateFileTags',
+ 'url' => '/api/v1/files/{path}',
+ 'verb' => 'POST',
+ 'requirements' => array('path' => '.+'),
+ ),
+ array(
+ 'name' => 'API#getFilesByTag',
+ 'url' => '/api/v1/tags/{tagName}/files',
+ 'verb' => 'GET',
+ 'requirements' => array('tagName' => '.+'),
+ ),
+ )
+ )
+);
/** @var $this \OC\Route\Router */
diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php
deleted file mode 100644
index de635e5ce6b..00000000000
--- a/apps/files/appinfo/update.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-// this drops the keys below, because they aren't needed anymore
-// core related
-if (version_compare(\OCP\Config::getSystemValue('version', '0.0.0'), '7.0.0', '<')) {
- \OCP\Config::deleteSystemValue('allowZipDownload');
- \OCP\Config::deleteSystemValue('maxZipInputSize');
-}
diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index 2dca0e0e67c..87f799a0187 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -38,6 +38,18 @@ class Scan extends Command {
'will rescan all files of the given user(s)'
)
->addOption(
+ 'path',
+ 'p',
+ InputArgument::OPTIONAL,
+ 'limit rescan to this path, eg. --path="/alice/files/Music", the user_id is determined by the path and the user_id parameter and --all are ignored'
+ )
+ ->addOption(
+ 'quiet',
+ 'q',
+ InputOption::VALUE_NONE,
+ 'suppress output'
+ )
+ ->addOption(
'all',
null,
InputOption::VALUE_NONE,
@@ -45,16 +57,18 @@ class Scan extends Command {
);
}
- protected function scanFiles($user, OutputInterface $output) {
+ protected function scanFiles($user, $path, $quiet, OutputInterface $output) {
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection());
- $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
- $output->writeln("Scanning <info>$path</info>");
- });
- $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
- $output->writeln("Scanning <info>$path</info>");
- });
+ if (!$quiet) {
+ $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
+ $output->writeln("Scanning file <info>$path</info>");
+ });
+ $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
+ $output->writeln("Scanning folder <info>$path</info>");
+ });
+ }
try {
- $scanner->scan('');
+ $scanner->scan($path);
} catch (ForbiddenException $e) {
$output->writeln("<error>Home storage for user $user not writable</error>");
$output->writeln("Make sure you're running the scan command only as the user the web server runs as");
@@ -62,14 +76,21 @@ class Scan extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- if ($input->getOption('all')) {
+ $path = $input->getOption('path');
+ if ($path) {
+ $path = '/'.trim($path, '/');
+ list (, $user, ) = explode('/', $path, 3);
+ $users = array($user);
+ } else if ($input->getOption('all')) {
$users = $this->userManager->search('');
} else {
$users = $input->getArgument('user_id');
}
+ $quiet = $input->getOption('quiet');
+
if (count($users) === 0) {
- $output->writeln("<error>Please specify the user id to scan or \"--all\" to scan for all users</error>");
+ $output->writeln("<error>Please specify the user id to scan, \"--all\" to scan for all users or \"--path=...\"</error>");
return;
}
@@ -78,7 +99,7 @@ class Scan extends Command {
$user = $user->getUID();
}
if ($this->userManager->userExists($user)) {
- $this->scanFiles($user, $output);
+ $this->scanFiles($user, $path, $quiet, $output);
} else {
$output->writeln("<error>Unknown user $user</error>");
}
diff --git a/apps/files/controller/apicontroller.php b/apps/files/controller/apicontroller.php
index 89d24a5c47f..902731a0492 100644
--- a/apps/files/controller/apicontroller.php
+++ b/apps/files/controller/apicontroller.php
@@ -12,13 +12,21 @@ use OCP\AppFramework\Http;
use OCP\AppFramework\Controller;
use OCP\IRequest;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\DownloadResponse;
use OC\Preview;
+use OCA\Files\Service\TagService;
class ApiController extends Controller {
- public function __construct($appName, IRequest $request){
+ /**
+ * @var TagService $tagService
+ */
+ private $tagService;
+
+ public function __construct($appName, IRequest $request, TagService $tagService){
parent::__construct($appName, $request);
+ $this->tagService = $tagService;
}
@@ -49,4 +57,50 @@ class ApiController extends Controller {
}
}
+ /**
+ * Updates the info of the specified file path
+ * The passed tags are absolute, which means they will
+ * replace the actual tag selection.
+ *
+ * @NoAdminRequired
+ * @CORS
+ *
+ * @param string $path path
+ * @param array $tags array of tags
+ */
+ public function updateFileTags($path, $tags = null) {
+ $result = array();
+ // if tags specified or empty array, update tags
+ if (!is_null($tags)) {
+ try {
+ $this->tagService->updateFileTags($path, $tags);
+ } catch (\OCP\Files\NotFoundException $e) {
+ return new DataResponse($e->getMessage(), Http::STATUS_NOT_FOUND);
+ }
+ $result['tags'] = $tags;
+ }
+ return new DataResponse($result, Http::STATUS_OK);
+ }
+
+ /**
+ * Returns a list of all files tagged with the given tag.
+ *
+ * @NoAdminRequired
+ * @CORS
+ *
+ * @param array $tagName tag name to filter by
+ */
+ public function getFilesByTag($tagName) {
+ $files = array();
+ $fileInfos = $this->tagService->getFilesByTag($tagName);
+ foreach ($fileInfos as &$fileInfo) {
+ $file = \OCA\Files\Helper::formatFileInfo($fileInfo);
+ $parts = explode('/', dirname($fileInfo->getPath()), 4);
+ $file['path'] = '/' . $parts[3];
+ $file['tags'] = array($tagName);
+ $files[] = $file;
+ }
+ return new DataResponse(array('files' => $files), Http::STATUS_OK);
+ }
+
}
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index fddfd02caa6..5b947fa326c 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -6,7 +6,11 @@
.actions { padding:5px; height:32px; display: inline-block; float: left; }
.actions input, .actions button, .actions .button { margin:0; float:left; }
.actions .button a { color: #555; }
-.actions .button a:hover, .actions .button a:active { color: #333; }
+.actions .button a:hover,
+.actions .button a:focus,
+.actions .button a:active {
+ color: #333;
+}
.actions.hidden { display: none; }
#new {
@@ -99,7 +103,10 @@
}
#filestable tbody tr { background-color:#fff; height:40px; }
-#filestable tbody tr:hover, tbody tr:active {
+#filestable tbody tr:hover,
+#filestable tbody tr:focus,
+#filestable tbody .name:focus,
+#filestable tbody tr:active {
background-color: rgb(240,240,240);
}
#filestable tbody tr.selected {
@@ -123,7 +130,8 @@ span.extension {
transition: opacity 300ms;
vertical-align: top;
}
-tr:hover span.extension {
+tr:hover span.extension,
+tr:focus span.extension {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: alpha(opacity=100);
opacity: 1;
@@ -166,7 +174,8 @@ table th .sort-indicator {
.sort-indicator.hidden {
visibility: hidden;
}
-table th:hover .sort-indicator.hidden {
+table th:hover .sort-indicator.hidden,
+table th:focus .sort-indicator.hidden {
visibility: visible;
}
@@ -183,10 +192,15 @@ table th#headerName {
width: 9999px; /* not really sure why this works better than 100% … table styling */
padding: 0;
}
+
#headerName-container {
position: relative;
height: 50px;
}
+.has-favorites #headerName-container {
+ padding-left: 50px;
+}
+
table th#headerSize, table td.filesize {
text-align: right;
}
@@ -236,12 +250,25 @@ table td.filename a.name {
line-height: 50px;
padding: 0;
}
+table td.filename .thumbnail {
+ display: inline-block;
+ width: 32px;
+ height: 32px;
+ margin-left: 8px;
+ margin-top: 9px;
+ cursor: pointer;
+ float: left;
+}
table td.filename input.filename {
width: 70%;
- margin-top: 1px;
- margin-left: 48px;
+ margin-top: 9px;
+ margin-left: 8px;
cursor: text;
}
+.has-favorites table td.filename input.filename {
+ margin-left: 52px;
+}
+
table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:3px 8px 8px 3px; }
table td.filename .nametext, .uploadtext, .modified, .column-last>span:first-child { float:left; padding:15px 0; }
@@ -252,8 +279,10 @@ table td.filename .nametext, .uploadtext, .modified, .column-last>span:first-chi
width: 90%;
}
/* ellipsize long modified dates to make room for showing delete button */
-#fileList tr:hover .modified, #fileList tr:hover .column-last>span:first-child,
-#fileList tr:focus .modified, #fileList tr:focus .column-last>span:first-child {
+#fileList tr:hover .modified,
+#fileList tr:focus .modified,
+#fileList tr:hover .column-last>span:first-child,
+#fileList tr:focus .column-last>span:first-child {
width: 75%;
}
@@ -267,6 +296,10 @@ table td.filename .nametext {
max-width: 800px;
height: 100%;
}
+.has-favorites #fileList td.filename a.name {
+ left: 50px;
+ margin-right: 50px;
+}
table td.filename .nametext .innernametext {
text-overflow: ellipsis;
@@ -280,7 +313,8 @@ table td.filename .nametext .innernametext {
max-width: 760px;
}
- table tr:hover td.filename .nametext .innernametext {
+ table tr:hover td.filename .nametext .innernametext,
+ table tr:focus td.filename .nametext .innernametext {
max-width: 480px;
}
}
@@ -290,7 +324,8 @@ table td.filename .nametext .innernametext {
max-width: 600px;
}
- table tr:hover td.filename .nametext .innernametext {
+ table tr:hover td.filename .nametext .innernametext,
+ table tr:focus td.filename .nametext .innernametext {
max-width: 320px;
}
}
@@ -300,7 +335,8 @@ table td.filename .nametext .innernametext {
max-width: 400px;
}
- table tr:hover td.filename .nametext .innernametext {
+ table tr:hover td.filename .nametext .innernametext,
+ table tr:focus td.filename .nametext .innernametext {
max-width: 120px;
}
}
@@ -310,7 +346,8 @@ table td.filename .nametext .innernametext {
max-width: 320px;
}
- table tr:hover td.filename .nametext .innernametext {
+ table tr:hover td.filename .nametext .innernametext,
+ table tr:focus td.filename .nametext .innernametext {
max-width: 40px;
}
}
@@ -334,7 +371,7 @@ table td.filename .uploadtext {
}
/* File checkboxes */
-#fileList tr td.filename>input[type="checkbox"]:first-child {
+#fileList tr td.filename>.selectCheckBox {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
opacity: 0;
@@ -343,34 +380,33 @@ table td.filename .uploadtext {
margin: 32px 0 4px 32px; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/
}
/* Show checkbox when hovering, checked, or selected */
-#fileList tr:hover td.filename>input[type="checkbox"]:first-child,
-#fileList tr td.filename>input[type="checkbox"]:checked:first-child,
-#fileList tr.selected td.filename>input[type="checkbox"]:first-child {
+#fileList tr:hover td.filename>.selectCheckBox,
+#fileList tr:focus td.filename>.selectCheckBox,
+#fileList tr td.filename>.selectCheckBox:checked,
+#fileList tr.selected td.filename>.selectCheckBox {
opacity: 1;
}
-.lte9 #fileList tr:hover td.filename>input[type="checkbox"]:first-child,
-.lte9 #fileList tr td.filename>input[type="checkbox"][checked=checked]:first-child,
-.lte9 #fileList tr.selected td.filename>input[type="checkbox"]:first-child {
+.lte9 #fileList tr:hover td.filename>.selectCheckBox,
+.lte9 #fileList tr:focus td.filename>.selectCheckBox,
+.lte9 #fileList tr td.filename>.selectCheckBox[checked=checked],
+.lte9 #fileList tr.selected td.filename>.selectCheckBox {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: alpha(opacity=100);
}
/* Use label to have bigger clickable size for checkbox */
-#fileList tr td.filename>input[type="checkbox"] + label,
+#fileList tr td.filename>.selectCheckBox + label,
.select-all + label {
height: 50px;
position: absolute;
width: 50px;
z-index: 5;
}
-#fileList tr td.filename>input[type="checkbox"]{
+#fileList tr td.filename>.selectCheckBox {
/* sometimes checkbox height is bigger (KDE/Qt), so setting to absolute
* to prevent it to increase the height */
position: absolute;
-}
-#fileList tr td.filename>input[type="checkbox"] + label {
- left: 0;
- top: 0;
+ z-index: 10;
}
.select-all + label {
top: 0;
@@ -379,6 +415,10 @@ table td.filename .uploadtext {
position: absolute;
top: 18px;
left: 18px;
+ z-index: 10;
+}
+.has-favorites .select-all {
+ left: 68px;
}
#fileList tr td.filename {
@@ -394,6 +434,18 @@ table td.filename .uploadtext {
height: 50px;
}
+#fileList tr td.filename .favorite {
+ display: inline-block;
+ float: left;
+}
+#fileList tr td.filename .action-favorite {
+ display: block;
+ float: left;
+ width: 30px;
+ line-height: 100%;
+ text-align: center;
+}
+
#uploadsize-message,#delete-confirm { display:none; }
/* File actions */
@@ -419,7 +471,7 @@ table td.filename .uploadtext {
padding: 17px 14px;
}
-#fileList .action.action-share-notification span, #fileList a {
+#fileList .action.action-share-notification span, #fileList a.name {
cursor: default !important;
}
@@ -456,7 +508,7 @@ a.action>img {
#fileList a.action {
display: inline;
- padding: 18px 8px;
+ padding: 17px 8px;
line-height: 50px;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
@@ -469,13 +521,19 @@ a.action>img {
position: relative;
top: -21px;
}
-#fileList tr:hover a.action, #fileList a.action.permanent {
+#fileList tr:hover a.action,
+#fileList a.action.permanent,
+#fileList tr:focus a.action,
+#fileList a.action.permanent
+/*#fileList .name:focus .action*/ {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter: alpha(opacity=50);
opacity: .5;
display:inline;
}
-#fileList tr:hover a.action:hover {
+#fileList tr:hover a.action:hover,
+#fileList tr:focus a.action:focus,
+#fileList .name:focus a.action:focus {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: alpha(opacity=100);
opacity: 1;
@@ -486,16 +544,17 @@ a.action>img {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
filter: alpha(opacity=30);
opacity: .3;
- height: 70px;
+ height: 60px;
}
-.summary:hover, .summary, table tr.summary td {
+.summary:hover,
+.summary:focus,
+.summary,
+table tr.summary td {
background-color: transparent;
}
.summary td {
- padding-top: 20px;
- padding-bottom: 150px;
border-bottom: none;
}
.summary .info {
@@ -544,3 +603,26 @@ table.dragshadow td.size {
.mask.transparent{
opacity: 0;
}
+
+.nofilterresults {
+ font-size: 16px;
+ color: #888;
+ position: absolute;
+ text-align: center;
+ top: 30%;
+ width: 100%;
+}
+.nofilterresults h2 {
+ font-size: 22px;
+ margin-bottom: 10px;
+}
+.nofilterresults [class^="icon-"],
+.nofilterresults [class*=" icon-"] {
+ background-size: 64px;
+ height: 64px;
+ width: 64px;
+ margin: 0 auto 15px;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ filter: alpha(opacity=50);
+ opacity: .5;
+} \ No newline at end of file
diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css
index 780b7ac8443..4881f7c70e4 100644
--- a/apps/files/css/mobile.css
+++ b/apps/files/css/mobile.css
@@ -24,7 +24,7 @@ table td {
}
/* and accordingly fix left margin of file list summary on mobile */
.summary .info {
- margin-left: 55px;
+ margin-left: 105px;
}
/* remove shift for multiselect bar to account for missing navigation */
diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css
index 98754b910de..adf1e9d13f8 100644
--- a/apps/files/css/upload.css
+++ b/apps/files/css/upload.css
@@ -9,7 +9,7 @@
overflow: hidden;
vertical-align: top;
}
-#upload a {
+#upload .icon-upload {
position: relative;
display: block;
width: 100%;
@@ -64,6 +64,28 @@
font-size: 13px;
}
+.oc-dialog .fileexists {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.oc-dialog .fileexists .conflict .filename,
+.oc-dialog .fileexists .conflict .mtime,
+.oc-dialog .fileexists .conflict .size {
+ -webkit-touch-callout: initial;
+ -webkit-user-select: initial;
+ -khtml-user-select: initial;
+ -moz-user-select: initial;
+ -ms-user-select: initial;
+ user-select: initial;
+}
+.oc-dialog .fileexists .conflict .message {
+ color: #e9322d;
+}
.oc-dialog .fileexists table {
width: 100%;
}
diff --git a/apps/files/index.php b/apps/files/index.php
index 4142a02b97e..767cb156ca2 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -20,6 +20,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
+use OCA\Files\Appinfo\Application;
// Check if we are a user
OCP\User::checkLoggedIn();
@@ -37,9 +38,18 @@ OCP\Util::addscript('files', 'jquery-visibility');
OCP\Util::addscript('files', 'filesummary');
OCP\Util::addscript('files', 'breadcrumb');
OCP\Util::addscript('files', 'filelist');
+OCP\Util::addscript('files', 'search');
+
+\OCP\Util::addScript('files', 'favoritesfilelist');
+\OCP\Util::addScript('files', 'tagsplugin');
+\OCP\Util::addScript('files', 'favoritesplugin');
+
+\OC_Util::addVendorScript('core', 'handlebars/handlebars');
OCP\App::setActiveNavigationEntry('files_index');
+$l = \OC::$server->getL10N('files');
+
$isIE8 = false;
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if (count($matches) > 0 && $matches[1] <= 9) {
@@ -69,7 +79,7 @@ $storageInfo=OC_Helper::getStorageInfo('/', $dirInfo);
// if the encryption app is disabled, than everything is fine (INIT_SUCCESSFUL status code)
$encryptionInitStatus = 2;
if (OC_App::isEnabled('files_encryption')) {
- $session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
+ $session = new \OCA\Files_Encryption\Session(new \OC\Files\View('/'));
$encryptionInitStatus = $session->getInitialized();
}
@@ -79,6 +89,16 @@ function sortNavigationItems($item1, $item2) {
return $item1['order'] - $item2['order'];
}
+\OCA\Files\App::getNavigationManager()->add(
+ array(
+ 'id' => 'favorites',
+ 'appname' => 'files',
+ 'script' => 'simplelist.php',
+ 'order' => 5,
+ 'name' => $l->t('Favorites')
+ )
+);
+
$navItems = \OCA\Files\App::getNavigationManager()->getAll();
usort($navItems, 'sortNavigationItems');
$nav->assign('navigationItems', $navItems);
@@ -120,6 +140,7 @@ $tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']);
$tmpl->assign('isPublic', false);
$tmpl->assign("encryptedFiles", \OCP\Util::encryptedFiles());
$tmpl->assign("mailNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_mail_notification', 'no'));
+$tmpl->assign("mailPublicNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_public_notification', 'no'));
$tmpl->assign("allowShareWithLink", $config->getAppValue('core', 'shareapi_allow_links', 'yes'));
$tmpl->assign("encryptionInitStatus", $encryptionInitStatus);
$tmpl->assign('appNavigation', $nav);
diff --git a/apps/files/js/app.js b/apps/files/js/app.js
index 89098e3a8a3..adb1893bb0e 100644
--- a/apps/files/js/app.js
+++ b/apps/files/js/app.js
@@ -15,12 +15,34 @@
(function() {
if (!OCA.Files) {
+ /**
+ * Namespace for the files app
+ * @namespace OCA.Files
+ */
OCA.Files = {};
}
- var App = {
+ /**
+ * @namespace OCA.Files.App
+ */
+ OCA.Files.App = {
+ /**
+ * Navigation control
+ *
+ * @member {OCA.Files.Navigation}
+ */
navigation: null,
+ /**
+ * File list for the "All files" section.
+ *
+ * @member {OCA.Files.FileList}
+ */
+ fileList: null,
+
+ /**
+ * Initializes the files app
+ */
initialize: function() {
this.navigation = new OCA.Files.Navigation($('#app-navigation'));
@@ -58,6 +80,8 @@
// refer to the one of the "files" view
window.FileList = this.fileList;
+ OC.Plugins.attach('OCA.Files.App', this);
+
this._setupEvents();
// trigger URL change event handlers
this._onPopState(urlParams);
@@ -191,7 +215,6 @@
OC.Util.History.pushState(params);
}
};
- OCA.Files.App = App;
})();
$(document).ready(function() {
diff --git a/apps/files/js/breadcrumb.js b/apps/files/js/breadcrumb.js
index 8df9b7ee6fe..5cea2639c7d 100644
--- a/apps/files/js/breadcrumb.js
+++ b/apps/files/js/breadcrumb.js
@@ -19,10 +19,17 @@
*
*/
-/* global OC */
(function() {
/**
- * Creates an breadcrumb element in the given container
+ * @class BreadCrumb
+ * @memberof OCA.Files
+ * @classdesc Breadcrumbs that represent the current path.
+ *
+ * @param {Object} [options] options
+ * @param {Function} [options.onClick] click event handler
+ * @param {Function} [options.onDrop] drop event handler
+ * @param {Function} [options.getCrumbUrl] callback that returns
+ * the URL of a given breadcrumb
*/
var BreadCrumb = function(options){
this.$el = $('<div class="breadcrumb"></div>');
@@ -37,12 +44,17 @@
this.getCrumbUrl = options.getCrumbUrl;
}
};
+ /**
+ * @memberof OCA.Files
+ */
BreadCrumb.prototype = {
$el: null,
dir: null,
/**
* Total width of all breadcrumbs
+ * @type int
+ * @private
*/
totalWidth: 0,
breadcrumbs: [],
@@ -64,8 +76,9 @@
/**
* Returns the full URL to the given directory
- * @param part crumb data as map
- * @param index crumb index
+ *
+ * @param {Object.<String, String>} part crumb data as map
+ * @param {int} index crumb index
* @return full URL
*/
getCrumbUrl: function(part, index) {
@@ -93,6 +106,7 @@
if (part.img) {
$image = $('<img class="svg"></img>');
$image.attr('src', part.img);
+ $image.attr('alt', part.alt);
$link.append($image);
}
this.breadcrumbs.push($crumb);
@@ -121,8 +135,9 @@
/**
* Makes a breadcrumb structure based on the given path
- * @param dir path to split into a breadcrumb structure
- * @return array of map {dir: path, name: displayName}
+ *
+ * @param {String} dir path to split into a breadcrumb structure
+ * @return {Object.<String, String>} map of {dir: path, name: displayName}
*/
_makeCrumbs: function(dir) {
var crumbs = [];
@@ -137,6 +152,7 @@
crumbs.push({
dir: '/',
name: '',
+ alt: t('files', 'Home'),
img: OC.imagePath('core', 'places/home.svg')
});
for (var i = 0; i < parts.length; i++) {
@@ -166,6 +182,8 @@
/**
* Show/hide breadcrumbs to fit the given width
+ *
+ * @param {int} availableWidth available width
*/
setMaxWidth: function (availableWidth) {
if (this.availableWidth !== availableWidth) {
diff --git a/apps/files/js/favoritesfilelist.js b/apps/files/js/favoritesfilelist.js
new file mode 100644
index 00000000000..0d555ce609d
--- /dev/null
+++ b/apps/files/js/favoritesfilelist.js
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+// HACK: this piece needs to be loaded AFTER the files app (for unit tests)
+$(document).ready(function() {
+ (function(OCA) {
+ /**
+ * @class OCA.Files.FavoritesFileList
+ * @augments OCA.Files.FavoritesFileList
+ *
+ * @classdesc Favorites file list.
+ * Displays the list of files marked as favorites
+ *
+ * @param $el container element with existing markup for the #controls
+ * and a table
+ * @param [options] map of options, see other parameters
+ */
+ var FavoritesFileList = function($el, options) {
+ this.initialize($el, options);
+ };
+ FavoritesFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,
+ /** @lends OCA.Files.FavoritesFileList.prototype */ {
+ id: 'favorites',
+ appName: 'Favorites',
+
+ _clientSideSort: true,
+ _allowSelection: false,
+
+ /**
+ * @private
+ */
+ initialize: function($el, options) {
+ OCA.Files.FileList.prototype.initialize.apply(this, arguments);
+ if (this.initialized) {
+ return;
+ }
+ OC.Plugins.attach('OCA.Files.FavoritesFileList', this);
+ },
+
+ updateEmptyContent: function() {
+ var dir = this.getCurrentDirectory();
+ if (dir === '/') {
+ // root has special permissions
+ this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);
+ this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);
+ }
+ else {
+ OCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments);
+ }
+ },
+
+ getDirectoryPermissions: function() {
+ return OC.PERMISSION_READ | OC.PERMISSION_DELETE;
+ },
+
+ updateStorageStatistics: function() {
+ // no op because it doesn't have
+ // storage info like free space / used space
+ },
+
+ reload: function() {
+ var tagName = OC.TAG_FAVORITE;
+ this.showMask();
+ if (this._reloadCall) {
+ this._reloadCall.abort();
+ }
+ this._reloadCall = $.ajax({
+ url: OC.generateUrl('/apps/files/api/v1/tags/{tagName}/files', {tagName: tagName}),
+ type: 'GET',
+ dataType: 'json'
+ });
+ var callBack = this.reloadCallback.bind(this);
+ return this._reloadCall.then(callBack, callBack);
+ },
+
+ reloadCallback: function(result) {
+ delete this._reloadCall;
+ this.hideMask();
+
+ if (result.files) {
+ this.setFiles(result.files.sort(this._sortComparator));
+ }
+ else {
+ // TODO: error handling
+ }
+ }
+ });
+
+ OCA.Files.FavoritesFileList = FavoritesFileList;
+ })(OCA);
+});
+
diff --git a/apps/files/js/favoritesplugin.js b/apps/files/js/favoritesplugin.js
new file mode 100644
index 00000000000..417a32ef804
--- /dev/null
+++ b/apps/files/js/favoritesplugin.js
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function(OCA) {
+ /**
+ * @namespace OCA.Files.FavoritesPlugin
+ *
+ * Registers the favorites file list from the files app sidebar.
+ */
+ OCA.Files.FavoritesPlugin = {
+ name: 'Favorites',
+
+ /**
+ * @type OCA.Files.FavoritesFileList
+ */
+ favoritesFileList: null,
+
+ attach: function() {
+ var self = this;
+ $('#app-content-favorites').on('show.plugin-favorites', function(e) {
+ self.showFileList($(e.target));
+ });
+ $('#app-content-favorites').on('hide.plugin-favorites', function() {
+ self.hideFileList();
+ });
+ },
+
+ detach: function() {
+ if (this.favoritesFileList) {
+ this.favoritesFileList.destroy();
+ OCA.Files.fileActions.off('setDefault.plugin-favorites', this._onActionsUpdated);
+ OCA.Files.fileActions.off('registerAction.plugin-favorites', this._onActionsUpdated);
+ $('#app-content-favorites').off('.plugin-favorites');
+ this.favoritesFileList = null;
+ }
+ },
+
+ showFileList: function($el) {
+ if (!this.favoritesFileList) {
+ this.favoritesFileList = this._createFavoritesFileList($el);
+ }
+ return this.favoritesFileList;
+ },
+
+ hideFileList: function() {
+ if (this.favoritesFileList) {
+ this.favoritesFileList.$fileList.empty();
+ }
+ },
+
+ /**
+ * Creates the favorites file list.
+ *
+ * @param $el container for the file list
+ * @return {OCA.Files.FavoritesFileList} file list
+ */
+ _createFavoritesFileList: function($el) {
+ var fileActions = this._createFileActions();
+ // register favorite list for sidebar section
+ return new OCA.Files.FavoritesFileList(
+ $el, {
+ fileActions: fileActions,
+ scrollContainer: $('#app-content')
+ }
+ );
+ },
+
+ _createFileActions: function() {
+ // inherit file actions from the files app
+ var fileActions = new OCA.Files.FileActions();
+ // note: not merging the legacy actions because legacy apps are not
+ // compatible with the sharing overview and need to be adapted first
+ fileActions.registerDefaultActions();
+ fileActions.merge(OCA.Files.fileActions);
+
+ if (!this._globalActionsInitialized) {
+ // in case actions are registered later
+ this._onActionsUpdated = _.bind(this._onActionsUpdated, this);
+ OCA.Files.fileActions.on('setDefault.plugin-favorites', this._onActionsUpdated);
+ OCA.Files.fileActions.on('registerAction.plugin-favorites', this._onActionsUpdated);
+ this._globalActionsInitialized = true;
+ }
+
+ // when the user clicks on a folder, redirect to the corresponding
+ // folder in the files app instead of opening it directly
+ fileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename, context) {
+ OCA.Files.App.setActiveView('files', {silent: true});
+ OCA.Files.App.fileList.changeDirectory(context.$file.attr('data-path') + '/' + filename, true, true);
+ });
+ fileActions.setDefault('dir', 'Open');
+ return fileActions;
+ },
+
+ _onActionsUpdated: function(ev) {
+ if (ev.action) {
+ this.favoritesFileList.fileActions.registerAction(ev.action);
+ } else if (ev.defaultAction) {
+ this.favoritesFileList.fileActions.setDefault(
+ ev.defaultAction.mime,
+ ev.defaultAction.name
+ );
+ }
+ }
+ };
+
+})(OCA);
+
+OC.Plugins.register('OCA.Files.App', OCA.Files.FavoritesPlugin);
+
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 460c2435642..8b0753fc647 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -49,7 +49,7 @@ function supportAjaxUploadWithProgress() {
/**
* keeps track of uploads in progress and implements callbacks for the conflicts dialog
- * @type {OC.Upload}
+ * @namespace
*/
OC.Upload = {
_uploads: [],
@@ -175,12 +175,19 @@ OC.Upload = {
* @param {function} callbacks.onCancel
*/
checkExistingFiles: function (selection, callbacks) {
- // TODO check filelist before uploading and show dialog on conflicts, use callbacks
+ /*
+ $.each(selection.uploads, function(i, upload) {
+ var $row = OCA.Files.App.fileList.findFileEl(upload.files[0].name);
+ if ($row) {
+ // TODO check filelist before uploading and show dialog on conflicts, use callbacks
+ }
+ });
+ */
callbacks.onNoConflicts(selection);
},
_hideProgressBar: function() {
- $('#uploadprogresswrapper input.stop').fadeOut();
+ $('#uploadprogresswrapper .stop').fadeOut();
$('#uploadprogressbar').fadeOut(function() {
$('#file_upload_start').trigger(new $.Event('resized'));
});
@@ -417,11 +424,15 @@ OC.Upload = {
data.textStatus = 'servererror';
data.errorThrown = t('files', 'Could not get result from server.');
fu._trigger('fail', e, data);
+ } else if (result[0].status === 'readonly') {
+ var original = result[0];
+ var replacement = data.files[0];
+ OC.dialogs.fileexists(data, original, replacement, OC.Upload);
} else if (result[0].status === 'existserror') {
//show "file already exists" dialog
var original = result[0];
var replacement = data.files[0];
- OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
+ OC.dialogs.fileexists(data, original, replacement, OC.Upload);
} else if (result[0].status !== 'success') {
//delete data.jqXHR;
data.textStatus = 'servererror';
@@ -458,13 +469,13 @@ OC.Upload = {
OC.Upload.log('progress handle fileuploadadd', e, data);
//show cancel button
//if (data.dataType !== 'iframe') { //FIXME when is iframe used? only for ie?
- // $('#uploadprogresswrapper input.stop').show();
+ // $('#uploadprogresswrapper .stop').show();
//}
});
// add progress handlers
fileupload.on('fileuploadstart', function(e, data) {
OC.Upload.log('progress handle fileuploadstart', e, data);
- $('#uploadprogresswrapper input.stop').show();
+ $('#uploadprogresswrapper .stop').show();
$('#uploadprogressbar').progressbar({value: 0});
OC.Upload._showProgressBar();
});
@@ -490,6 +501,21 @@ OC.Upload = {
}
});
+ } else {
+ // for all browsers that don't support the progress bar
+ // IE 8 & 9
+
+ // show a spinner
+ fileupload.on('fileuploadstart', function() {
+ $('#upload').addClass('icon-loading');
+ $('#upload .icon-upload').hide();
+ });
+
+ // hide a spinner
+ fileupload.on('fileuploadstop fileuploadfail', function() {
+ $('#upload').removeClass('icon-loading');
+ $('#upload .icon-upload').show();
+ });
}
}
@@ -563,10 +589,15 @@ OC.Upload = {
var form = $('<form></form>');
var input = $('<input type="text">');
var newName = $(this).attr('data-newname') || '';
+ var fileType = 'input-' + $(this).attr('data-type');
if (newName) {
input.val(newName);
+ input.attr('id', fileType);
}
- form.append(input);
+ var label = $('<label class="hidden-visually" for="">' + escapeHTML(newName) + '</label>');
+ label.attr('for', fileType);
+
+ form.append(label).append(input);
$(this).append(form);
var lastPos;
var checkInput = function () {
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 8ae0d8f1b2e..875857745b8 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -8,16 +8,18 @@
*
*/
-/* global trashBinApp */
(function() {
/**
* Construct a new FileActions instance
+ * @constructs FileActions
+ * @memberof OCA.Files
*/
var FileActions = function() {
this.initialize();
- }
+ };
FileActions.prototype = {
+ /** @lends FileActions.prototype */
actions: {},
defaults: {},
icons: {},
@@ -31,9 +33,14 @@
/**
* List of handlers to be notified whenever a register() or
* setDefault() was called.
+ *
+ * @member {Function[]}
*/
_updateListeners: {},
+ /**
+ * @private
+ */
initialize: function() {
this.clear();
// abusing jquery for events until we get a real event lib
@@ -45,7 +52,7 @@
* Adds an event handler
*
* @param {String} eventName event name
- * @param Function callback
+ * @param {Function} callback
*/
on: function(eventName, callback) {
this.$el.on(eventName, callback);
@@ -75,7 +82,7 @@
* Merges the actions from the given fileActions into
* this instance.
*
- * @param fileActions instance of OCA.Files.FileActions
+ * @param {OCA.Files.FileActions} fileActions instance of OCA.Files.FileActions
*/
merge: function(fileActions) {
var self = this;
@@ -101,35 +108,43 @@
permissions: permissions,
icon: icon,
actionHandler: action,
- displayName: displayName
+ displayName: displayName || name
});
},
/**
* Register action
*
- * @param {Object} action action object
- * @param {String} action.name identifier of the action
- * @param {String} action.displayName display name of the action, defaults
- * to the name given in action.name
- * @param {String} action.mime mime type
- * @param {int} action.permissions permissions
- * @param {(Function|String)} action.icon icon
- * @param {Function} action.actionHandler function that performs the action
+ * @param {OCA.Files.FileAction} action object
*/
registerAction: function (action) {
var mime = action.mime;
var name = action.name;
+ var actionSpec = {
+ action: action.actionHandler,
+ name: name,
+ displayName: action.displayName,
+ mime: mime,
+ icon: action.icon,
+ permissions: action.permissions
+ };
+ if (_.isUndefined(action.displayName)) {
+ actionSpec.displayName = t('files', name);
+ }
+ if (_.isFunction(action.render)) {
+ actionSpec.render = action.render;
+ } else {
+ actionSpec.render = _.bind(this._defaultRenderAction, this);
+ }
if (!this.actions[mime]) {
this.actions[mime] = {};
}
- this.actions[mime][name] = {
- action: action.actionHandler,
- permissions: action.permissions,
- displayName: action.displayName || t('files', name)
- };
+ this.actions[mime][name] = actionSpec;
this.icons[name] = action.icon;
this._notifyUpdateListeners('registerAction', {action: action});
},
+ /**
+ * Clears all registered file actions.
+ */
clear: function() {
this.actions = {};
this.defaults = {};
@@ -137,6 +152,12 @@
this.currentFile = null;
this._updateListeners = [];
},
+ /**
+ * Sets the default action for a given mime type.
+ *
+ * @param {String} mime mime type
+ * @param {String} name action name
+ */
setDefault: function (mime, name) {
this.defaults[mime] = name;
this._notifyUpdateListeners('setDefault', {defaultAction: {mime: mime, name: name}});
@@ -195,6 +216,130 @@
return actions[name];
},
/**
+ * Default function to render actions
+ *
+ * @param {OCA.Files.FileAction} actionSpec file action spec
+ * @param {boolean} isDefault true if the action is a default one,
+ * false otherwise
+ * @param {OCA.Files.FileActionContext} context action context
+ */
+ _defaultRenderAction: function(actionSpec, isDefault, context) {
+ var name = actionSpec.name;
+ if (name === 'Download' || !isDefault) {
+ var $actionLink = this._makeActionLink(actionSpec, context);
+ context.$file.find('a.name>span.fileactions').append($actionLink);
+ return $actionLink;
+ }
+ },
+ /**
+ * Renders the action link element
+ *
+ * @param {OCA.Files.FileAction} actionSpec action object
+ * @param {OCA.Files.FileActionContext} context action context
+ */
+ _makeActionLink: function(actionSpec, context) {
+ var img = actionSpec.icon;
+ if (img && img.call) {
+ img = img(context.$file.attr('data-file'));
+ }
+ var html = '<a href="#">';
+ if (img) {
+ html += '<img class="svg" alt="" src="' + img + '" />';
+ }
+ if (actionSpec.displayName) {
+ html += '<span> ' + actionSpec.displayName + '</span></a>';
+ }
+
+ return $(html);
+ },
+ /**
+ * Custom renderer for the "Rename" action.
+ * Displays the rename action as an icon behind the file name.
+ *
+ * @param {OCA.Files.FileAction} actionSpec file action to render
+ * @param {boolean} isDefault true if the action is a default action,
+ * false otherwise
+ * @param {OCAFiles.FileActionContext} context rendering context
+ */
+ _renderRenameAction: function(actionSpec, isDefault, context) {
+ var $actionEl = this._makeActionLink(actionSpec, context);
+ var $container = context.$file.find('a.name span.nametext');
+ $actionEl.find('img').attr('alt', t('files', 'Rename'));
+ $container.find('.action-rename').remove();
+ $container.append($actionEl);
+ return $actionEl;
+ },
+ /**
+ * Custom renderer for the "Delete" action.
+ * Displays the "Delete" action as a trash icon at the end of
+ * the table row.
+ *
+ * @param {OCA.Files.FileAction} actionSpec file action to render
+ * @param {boolean} isDefault true if the action is a default action,
+ * false otherwise
+ * @param {OCAFiles.FileActionContext} context rendering context
+ */
+ _renderDeleteAction: function(actionSpec, isDefault, context) {
+ var mountType = context.$file.attr('data-mounttype');
+ var deleteTitle = t('files', 'Delete');
+ if (mountType === 'external-root') {
+ deleteTitle = t('files', 'Disconnect storage');
+ } else if (mountType === 'shared-root') {
+ deleteTitle = t('files', 'Unshare');
+ }
+ var $actionLink = $('<a href="#" original-title="' +
+ escapeHTML(deleteTitle) +
+ '" class="action delete icon-delete">' +
+ '<span class="hidden-visually">' + escapeHTML(deleteTitle) + '</span>' +
+ '</a>'
+ );
+ var $container = context.$file.find('td:last');
+ $container.find('.delete').remove();
+ $container.append($actionLink);
+ return $actionLink;
+ },
+ /**
+ * Renders the action element by calling actionSpec.render() and
+ * registers the click event to process the action.
+ *
+ * @param {OCA.Files.FileAction} actionSpec file action to render
+ * @param {boolean} isDefault true if the action is a default action,
+ * false otherwise
+ * @param {OCAFiles.FileActionContext} context rendering context
+ */
+ _renderAction: function(actionSpec, isDefault, context) {
+ var $actionEl = actionSpec.render(actionSpec, isDefault, context);
+ if (!$actionEl || !$actionEl.length) {
+ return;
+ }
+ $actionEl.addClass('action action-' + actionSpec.name.toLowerCase());
+ $actionEl.attr('data-action', actionSpec.name);
+ $actionEl.on(
+ 'click', {
+ a: null
+ },
+ function(event) {
+ var $file = $(event.target).closest('tr');
+ var currentFile = $file.find('td.filename');
+ var fileName = $file.attr('data-file');
+ event.stopPropagation();
+ event.preventDefault();
+
+ context.fileActions.currentFile = currentFile;
+ // also set on global object for legacy apps
+ window.FileActions.currentFile = currentFile;
+
+ actionSpec.action(
+ fileName,
+ _.extend(context, {
+ dir: $file.attr('data-path') || context.fileList.getCurrentDirectory()
+ })
+ );
+ }
+ );
+ return $actionEl;
+ },
+ /**
* Display file actions for the given element
* @param parent "td" element of the file for which to display actions
* @param triggerEvent if true, triggers the fileActionsReady on the file
@@ -208,107 +353,51 @@
return;
}
this.currentFile = parent;
- var $tr = parent.closest('tr');
var self = this;
- var actions = this.getActions(this.getCurrentMimeType(), this.getCurrentType(), this.getCurrentPermissions());
- var file = this.getCurrentFile();
+ var $tr = parent.closest('tr');
+ var actions = this.getActions(
+ this.getCurrentMimeType(),
+ this.getCurrentType(),
+ this.getCurrentPermissions()
+ );
var nameLinks;
if ($tr.data('renaming')) {
return;
}
- // recreate fileactions
+ // recreate fileactions container
nameLinks = parent.children('a.name');
nameLinks.find('.fileactions, .nametext .action').remove();
nameLinks.append('<span class="fileactions" />');
- var defaultAction = this.getDefault(this.getCurrentMimeType(), this.getCurrentType(), this.getCurrentPermissions());
-
- var actionHandler = function (event) {
- event.stopPropagation();
- event.preventDefault();
-
- self.currentFile = event.data.elem;
- // also set on global object for legacy apps
- window.FileActions.currentFile = self.currentFile;
-
- var file = self.getCurrentFile();
- var $tr = $(this).closest('tr');
-
- event.data.actionFunc(file, {
- $file: $tr,
- fileList: fileList,
- fileActions: self,
- dir: $tr.attr('data-path') || fileList.getCurrentDirectory()
- });
- };
-
- var addAction = function (name, action, displayName) {
-
- if ((name === 'Download' || action !== defaultAction) && name !== 'Delete') {
+ var defaultAction = this.getDefault(
+ this.getCurrentMimeType(),
+ this.getCurrentType(),
+ this.getCurrentPermissions()
+ );
- var img = self.icons[name],
- actionText = displayName,
- actionContainer = 'a.name>span.fileactions';
-
- if (name === 'Rename') {
- // rename has only an icon which appears behind
- // the file name
- actionText = '';
- actionContainer = 'a.name span.nametext';
- }
- if (img.call) {
- img = img(file);
- }
- var html = '<a href="#" class="action action-' + name.toLowerCase() + '" data-action="' + name + '">';
- if (img) {
- html += '<img class ="svg" src="' + img + '" />';
- }
- html += '<span> ' + actionText + '</span></a>';
-
- var element = $(html);
- element.data('action', name);
- element.on('click', {a: null, elem: parent, actionFunc: actions[name].action}, actionHandler);
- parent.find(actionContainer).append(element);
- }
-
- };
-
- $.each(actions, function (name, action) {
+ $.each(actions, function (name, actionSpec) {
if (name !== 'Share') {
- displayName = action.displayName;
- ah = action.action;
-
- addAction(name, ah, displayName);
+ self._renderAction(
+ actionSpec,
+ actionSpec.action === defaultAction, {
+ $file: $tr,
+ fileActions: this,
+ fileList : fileList
+ }
+ );
}
});
- if(actions.Share){
- displayName = t('files', 'Share');
- addAction('Share', actions.Share, displayName);
- }
-
- // remove the existing delete action
- parent.parent().children().last().find('.action.delete').remove();
- if (actions['Delete']) {
- var img = self.icons['Delete'];
- var html;
- var mountType = $tr.attr('data-mounttype');
- var deleteTitle = t('files', 'Delete');
- if (mountType === 'external-root') {
- deleteTitle = t('files', 'Disconnect storage');
- } else if (mountType === 'shared-root') {
- deleteTitle = t('files', 'Unshare');
- } else if (fileList.id === 'trashbin') {
- deleteTitle = t('files', 'Delete permanently');
- }
-
- if (img.call) {
- img = img(file);
- }
- html = '<a href="#" original-title="' + escapeHTML(deleteTitle) + '" class="action delete icon-delete" />';
- var element = $(html);
- element.data('action', actions['Delete']);
- element.on('click', {a: null, elem: parent, actionFunc: actions['Delete'].action}, actionHandler);
- parent.parent().children().last().append(element);
+ // added here to make sure it's always the last action
+ var shareActionSpec = actions.Share;
+ if (shareActionSpec){
+ this._renderAction(
+ shareActionSpec,
+ shareActionSpec.action === defaultAction, {
+ $file: $tr,
+ fileActions: this,
+ fileList: fileList
+ }
+ );
}
if (triggerEvent){
@@ -332,18 +421,34 @@
* Register the actions that are used by default for the files app.
*/
registerDefaultActions: function() {
- this.register('all', 'Delete', OC.PERMISSION_DELETE, function () {
- return OC.imagePath('core', 'actions/delete');
- }, function (filename, context) {
- context.fileList.do_delete(filename, context.dir);
- $('.tipsy').remove();
+ this.registerAction({
+ name: 'Delete',
+ displayName: '',
+ mime: 'all',
+ permissions: OC.PERMISSION_DELETE,
+ icon: function() {
+ return OC.imagePath('core', 'actions/delete');
+ },
+ render: _.bind(this._renderDeleteAction, this),
+ actionHandler: function(fileName, context) {
+ context.fileList.do_delete(fileName, context.dir);
+ $('.tipsy').remove();
+ }
});
// t('files', 'Rename')
- this.register('all', 'Rename', OC.PERMISSION_UPDATE, function () {
- return OC.imagePath('core', 'actions/rename');
- }, function (filename, context) {
- context.fileList.rename(filename);
+ this.registerAction({
+ name: 'Rename',
+ displayName: '',
+ mime: 'all',
+ permissions: OC.PERMISSION_UPDATE,
+ icon: function() {
+ return OC.imagePath('core', 'actions/rename');
+ },
+ render: _.bind(this._renderRenameAction, this),
+ actionHandler: function (filename, context) {
+ context.fileList.rename(filename);
+ }
});
this.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename, context) {
@@ -370,6 +475,59 @@
OCA.Files.FileActions = FileActions;
+ /**
+ * File action attributes.
+ *
+ * @todo make this a real class in the future
+ * @typedef {Object} OCA.Files.FileAction
+ *
+ * @property {String} name identifier of the action
+ * @property {String} displayName display name of the action, defaults
+ * to the name given in name property
+ * @property {String} mime mime type
+ * @property {int} permissions permissions
+ * @property {(Function|String)} icon icon path to the icon or function
+ * that returns it
+ * @property {OCA.Files.FileActions~renderActionFunction} [render] optional rendering function
+ * @property {OCA.Files.FileActions~actionHandler} actionHandler action handler function
+ */
+
+ /**
+ * File action context attributes.
+ *
+ * @typedef {Object} OCA.Files.FileActionContext
+ *
+ * @property {Object} $file jQuery file row element
+ * @property {OCA.Files.FileActions} fileActions file actions object
+ * @property {OCA.Files.FileList} fileList file list object
+ */
+
+ /**
+ * Render function for actions.
+ * The function must render a link element somewhere in the DOM
+ * and return it. The function should NOT register the event handler
+ * as this will be done after the link was returned.
+ *
+ * @callback OCA.Files.FileActions~renderActionFunction
+ * @param {OCA.Files.FileAction} actionSpec action definition
+ * @param {Object} $row row container
+ * @param {boolean} isDefault true if the action is the default one,
+ * false otherwise
+ * @return {Object} jQuery link object
+ */
+
+ /**
+ * Action handler function for file actions
+ *
+ * @callback OCA.Files.FileActions~actionHandler
+ * @param {String} fileName name of the clicked file
+ * @param context context
+ * @param {String} context.dir directory of the file
+ * @param context.$file jQuery element of the file
+ * @param {OCA.Files.FileList} context.fileList the FileList instance on which the action occurred
+ * @param {OCA.Files.FileActions} context.fileActions the FileActions instance on which the action occurred
+ */
+
// global file actions to be used by all lists
OCA.Files.fileActions = new OCA.Files.FileActions();
OCA.Files.legacyFileActions = new OCA.Files.FileActions();
@@ -380,6 +538,7 @@
// their actions on. Since legacy apps are very likely to break with other
// FileList views than the main one ("All files"), actions registered
// through window.FileActions will be limited to the main file list.
+ // @deprecated use OCA.Files.FileActions instead
window.FileActions = OCA.Files.legacyFileActions;
window.FileActions.register = function (mime, name, permissions, icon, action, displayName) {
console.warn('FileActions.register() is deprecated, please use OCA.Files.fileActions.register() instead', arguments);
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index cf1d9780d99..e680ef4b3ed 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -10,13 +10,26 @@
(function() {
/**
+ * @class OCA.Files.FileList
+ * @classdesc
+ *
* The FileList class manages a file list view.
* A file list view consists of a controls bar and
* a file list table.
+ *
+ * @param $el container element with existing markup for the #controls
+ * and a table
+ * @param [options] map of options, see other parameters
+ * @param [options.scrollContainer] scrollable container, defaults to $(window)
+ * @param [options.dragOptions] drag options, disabled by default
+ * @param [options.folderDropOptions] folder drop options, disabled by default
*/
var FileList = function($el, options) {
this.initialize($el, options);
};
+ /**
+ * @memberof OCA.Files
+ */
FileList.prototype = {
SORT_INDICATOR_ASC_CLASS: 'icon-triangle-n',
SORT_INDICATOR_DESC_CLASS: 'icon-triangle-s',
@@ -41,15 +54,27 @@
*/
$fileList: null,
+ /**
+ * @type OCA.Files.BreadCrumb
+ */
breadcrumb: null,
/**
- * Instance of FileSummary
+ * @type OCA.Files.FileSummary
*/
fileSummary: null,
+
+ /**
+ * Whether the file list was initialized already.
+ * @type boolean
+ */
initialized: false,
- // number of files per page, calculated dynamically
+ /**
+ * Number of files per page
+ *
+ * @return {int} page size
+ */
pageSize: function() {
return Math.ceil(this.$container.height() / 50);
},
@@ -57,37 +82,56 @@
/**
* Array of files in the current folder.
* The entries are of file data.
+ *
+ * @type Array.<Object>
*/
files: [],
/**
* File actions handler, defaults to OCA.Files.FileActions
+ * @type OCA.Files.FileActions
*/
fileActions: null,
/**
+ * Whether selection is allowed, checkboxes and selection overlay will
+ * be rendered
+ */
+ _allowSelection: true,
+
+ /**
* Map of file id to file data
+ * @type Object.<int, Object>
*/
_selectedFiles: {},
/**
* Summary of selected files.
- * Instance of FileSummary.
+ * @type OCA.Files.FileSummary
*/
_selectionSummary: null,
/**
+ * If not empty, only files containing this string will be shown
+ * @type String
+ */
+ _filter: '',
+
+ /**
* Sort attribute
+ * @type String
*/
_sort: 'name',
/**
* Sort direction: 'asc' or 'desc'
+ * @type String
*/
_sortDirection: 'asc',
/**
* Sort comparator function for the current sort
+ * @type Function
*/
_sortComparator: null,
@@ -100,6 +144,7 @@
/**
* Current directory
+ * @type String
*/
_currentDirectory: null,
@@ -116,6 +161,7 @@
* @param options.dragOptions drag options, disabled by default
* @param options.folderDropOptions folder drop options, disabled by default
* @param options.scrollTo name of file to scroll to after the first load
+ * @private
*/
initialize: function($el, options) {
var self = this;
@@ -132,6 +178,9 @@
}
this.$el = $el;
+ if (options.id) {
+ this.id = options.id;
+ }
this.$container = options.scrollContainer || $(window);
this.$table = $el.find('table:first');
this.$fileList = $el.find('#fileList');
@@ -165,8 +214,10 @@
this.$el.on('show', this._onResize);
+ this.updateSearch();
+
this.$fileList.on('click','td.filename>a.name', _.bind(this._onClickFile, this));
- this.$fileList.on('change', 'td.filename>input:checkbox', _.bind(this._onClickFileCheckbox, this));
+ this.$fileList.on('change', 'td.filename>.selectCheckBox', _.bind(this._onClickFileCheckbox, this));
this.$el.on('urlChanged', _.bind(this._onUrlChanged, this));
this.$el.find('.select-all').click(_.bind(this._onClickSelectAll, this));
this.$el.find('.download').click(_.bind(this._onClickDownloadSelected, this));
@@ -181,6 +232,8 @@
self.scrollTo(options.scrollTo);
});
}
+
+ OC.Plugins.attach('OCA.Files.FileList', this);
},
/**
@@ -190,8 +243,14 @@
// TODO: also unregister other event handlers
this.fileActions.off('registerAction', this._onFileActionsUpdated);
this.fileActions.off('setDefault', this._onFileActionsUpdated);
+ OC.Plugins.detach('OCA.Files.FileList', this);
},
+ /**
+ * Initializes the file actions, set up listeners.
+ *
+ * @param {OCA.Files.FileActions} fileActions file actions
+ */
_initFileActions: function(fileActions) {
this.fileActions = fileActions;
if (!this.fileActions) {
@@ -217,6 +276,8 @@
containerWidth -= $('#app-navigation-toggle').width();
this.breadcrumb.setMaxWidth(containerWidth - actionsWidth - 10);
+
+ this.updateSearch();
},
/**
@@ -236,7 +297,7 @@
* @param state true to select, false to deselect
*/
_selectFileEl: function($tr, state) {
- var $checkbox = $tr.find('td.filename>input:checkbox');
+ var $checkbox = $tr.find('td.filename>.selectCheckBox');
var oldData = !!this._selectedFiles[$tr.data('id')];
var data;
$checkbox.prop('checked', state);
@@ -285,7 +346,7 @@
else {
this._lastChecked = $tr;
}
- var $checkbox = $tr.find('td.filename>input:checkbox');
+ var $checkbox = $tr.find('td.filename>.selectCheckBox');
this._selectFileEl($tr, !$checkbox.prop('checked'));
this.updateSelectionSummary();
} else {
@@ -327,7 +388,7 @@
*/
_onClickSelectAll: function(e) {
var checked = $(e.target).prop('checked');
- this.$fileList.find('td.filename>input:checkbox').prop('checked', checked)
+ this.$fileList.find('td.filename>.selectCheckBox').prop('checked', checked)
.closest('tr').toggleClass('selected', checked);
this._selectedFiles = {};
this._selectionSummary.clear();
@@ -407,6 +468,7 @@
e.preventDefault();
this.changeDirectory($targetDir);
}
+ this.updateSearch();
},
/**
@@ -487,7 +549,8 @@
mimetype: $el.attr('data-mime'),
type: $el.attr('data-type'),
size: parseInt($el.attr('data-size'), 10),
- etag: $el.attr('data-etag')
+ etag: $el.attr('data-etag'),
+ permissions: parseInt($el.attr('data-permissions'), 10)
};
},
@@ -499,6 +562,7 @@
_nextPage: function(animate) {
var index = this.$fileList.children().length,
count = this.pageSize(),
+ hidden,
tr,
fileData,
newTrs = [],
@@ -510,11 +574,16 @@
while (count > 0 && index < this.files.length) {
fileData = this.files[index];
- tr = this._renderRow(fileData, {updateSummary: false, silent: true});
+ if (this._filter) {
+ hidden = fileData.name.toLowerCase().indexOf(this._filter.toLowerCase()) === -1;
+ } else {
+ hidden = false;
+ }
+ tr = this._renderRow(fileData, {updateSummary: false, silent: true, hidden: hidden});
this.$fileList.append(tr);
if (isAllSelected || this._selectedFiles[fileData.id]) {
tr.addClass('selected');
- tr.find('input:checkbox').prop('checked', true);
+ tr.find('.selectCheckBox').prop('checked', true);
}
if (animate) {
tr.addClass('appear transparent');
@@ -588,8 +657,8 @@
},
/**
* Creates a new table row element using the given file data.
- * @param fileData map of file attributes
- * @param options map of attribute "loading" whether the entry is currently loading
+ * @param {OCA.Files.FileInfo} fileData file info attributes
+ * @param options map of attributes
* @return new tr element (not appended to the table)
*/
_createRow: function(fileData, options) {
@@ -597,12 +666,16 @@
icon = OC.Util.replaceSVGIcon(fileData.icon),
name = fileData.name,
type = fileData.type || 'file',
- mtime = parseInt(fileData.mtime, 10) || new Date().getTime(),
+ mtime = parseInt(fileData.mtime, 10),
mime = fileData.mimetype,
path = fileData.path,
linkUrl;
options = options || {};
+ if (isNaN(mtime)) {
+ mtime = new Date().getTime()
+ }
+
if (type === 'dir') {
mime = mime || 'httpd/unix-directory';
}
@@ -639,10 +712,8 @@
}
// filename td
- td = $('<td></td>').attr({
- "class": "filename",
- "style": 'background-image:url(' + icon + '); background-size: 32px;'
- });
+ td = $('<td class="filename"></td>');
+
// linkUrl
if (type === 'dir') {
@@ -651,8 +722,17 @@
else {
linkUrl = this.getDownloadUrl(name, path);
}
- td.append('<input id="select-' + this.id + '-' + fileData.id +
- '" type="checkbox" /><label for="select-' + this.id + '-' + fileData.id + '"></label>');
+ if (this._allowSelection) {
+ td.append(
+ '<input id="select-' + this.id + '-' + fileData.id +
+ '" type="checkbox" class="selectCheckBox"/><label for="select-' + this.id + '-' + fileData.id + '">' +
+ '<div class="thumbnail" style="background-image:url(' + icon + '); background-size: 32px;"></div>' +
+ '<span class="hidden-visually">' + t('files', 'Select') + '</span>' +
+ '</label>'
+ );
+ } else {
+ td.append('<div class="thumbnail" style="background-image:url(' + icon + '); background-size: 32px;"></div>');
+ }
var linkElem = $('<a></a>').attr({
"class": "name",
"href": linkUrl
@@ -713,12 +793,21 @@
if (modifiedColor >= '160') {
modifiedColor = 160;
}
+ var formatted;
+ var text;
+ if (mtime > 0) {
+ formatted = formatDate(mtime);
+ text = OC.Util.relativeModifiedDate(mtime);
+ } else {
+ formatted = t('files', 'Unable to determine date');
+ text = '?';
+ }
td = $('<td></td>').attr({ "class": "date" });
td.append($('<span></span>').attr({
"class": "modified",
- "title": formatDate(mtime),
+ "title": formatted,
"style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')'
- }).text(OC.Util.relativeModifiedDate(mtime)));
+ }).text(text));
tr.find('.filesize').text(simpleSize);
tr.append(td);
return tr;
@@ -728,12 +817,14 @@
* Adds an entry to the files array and also into the DOM
* in a sorted manner.
*
- * @param fileData map of file attributes
- * @param options map of attributes:
- * @param options.updateSummary true to update the summary after adding (default), false otherwise
- * @param options.silent true to prevent firing events like "fileActionsReady"
- * @param options.animate true to animate preview loading (defaults to true here)
- * @param options.scrollTo true to automatically scroll to the file's location
+ * @param {OCA.Files.FileInfo} fileData map of file attributes
+ * @param {Object} [options] map of attributes
+ * @param {boolean} [options.updateSummary] true to update the summary
+ * after adding (default), false otherwise. Defaults to true.
+ * @param {boolean} [options.silent] true to prevent firing events like "fileActionsReady",
+ * defaults to false.
+ * @param {boolean} [options.animate] true to animate the thumbnail image after load
+ * defaults to true.
* @return new tr element (not appended to the table)
*/
add: function(fileData, options) {
@@ -799,11 +890,13 @@
* Creates a new row element based on the given attributes
* and returns it.
*
- * @param fileData map of file attributes
- * @param options map of attributes:
- * - "index" optional index at which to insert the element
- * - "updateSummary" true to update the summary after adding (default), false otherwise
- * - "animate" true to animate the preview rendering
+ * @param {OCA.Files.FileInfo} fileData map of file attributes
+ * @param {Object} [options] map of attributes
+ * @param {int} [options.index] index at which to insert the element
+ * @param {boolean} [options.updateSummary] true to update the summary
+ * after adding (default), false otherwise. Defaults to true.
+ * @param {boolean} [options.animate] true to animate the thumbnail image after load
+ * defaults to true.
* @return new tr element (not appended to the table)
*/
_renderRow: function(fileData, options) {
@@ -844,6 +937,7 @@
this.fileActions.display(filenameTd, !options.silent, this);
if (fileData.isPreviewAvailable) {
+ var iconDiv = filenameTd.find('.thumbnail');
// lazy load / newly inserted td ?
if (options.animate) {
this.lazyLoadPreview({
@@ -851,7 +945,7 @@
mime: mime,
etag: fileData.etag,
callback: function(url) {
- filenameTd.css('background-image', 'url(' + url + ')');
+ iconDiv.css('background-image', 'url(' + url + ')');
}
});
}
@@ -863,13 +957,14 @@
};
var previewUrl = this.generatePreviewUrl(urlSpec);
previewUrl = previewUrl.replace('(', '%28').replace(')', '%29');
- filenameTd.css('background-image', 'url(' + previewUrl + ')');
+ iconDiv.css('background-image', 'url(' + previewUrl + ')');
}
}
return tr;
},
/**
* Returns the current directory
+ * @method getCurrentDirectory
* @return current directory
*/
getCurrentDirectory: function(){
@@ -1051,7 +1146,10 @@
/**
* Generates a preview URL based on the URL space.
- * @param urlSpec map with {x: width, y: height, file: file path}
+ * @param urlSpec attributes for the URL
+ * @param {int} urlSpec.x width
+ * @param {int} urlSpec.y height
+ * @param {String} urlSpec.file path to the file
* @return preview URL
*/
generatePreviewUrl: function(urlSpec) {
@@ -1158,8 +1256,9 @@
/**
* Removes a file entry from the list
* @param name name of the file to remove
- * @param options optional options as map:
- * "updateSummary": true to update the summary (default), false otherwise
+ * @param {Object} [options] map of attributes
+ * @param {boolean} [options.updateSummary] true to update the summary
+ * after removing, false otherwise. Defaults to true.
* @return deleted element
*/
remove: function(name, options){
@@ -1201,6 +1300,8 @@
* Finds the index of the row before which the given
* fileData should be inserted, considering the current
* sorting
+ *
+ * @param {OCA.Files.FileInfo} fileData file info
*/
_findInsertionIndex: function(fileData) {
var index = 0;
@@ -1224,9 +1325,9 @@
}
_.each(fileNames, function(fileName) {
var $tr = self.findFileEl(fileName);
- var $td = $tr.children('td.filename');
- var oldBackgroundImage = $td.css('background-image');
- $td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
+ var $thumbEl = $tr.find('.thumbnail');
+ var oldBackgroundImage = $thumbEl.css('background-image');
+ $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
// TODO: improve performance by sending all file names in a single call
$.post(
OC.filePath('files', 'ajax', 'move.php'),
@@ -1268,7 +1369,7 @@
} else {
OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error'));
}
- $td.css('background-image', oldBackgroundImage);
+ $thumbEl.css('background-image', oldBackgroundImage);
}
);
});
@@ -1329,13 +1430,14 @@
try {
var newName = input.val();
+ var $thumbEl = tr.find('.thumbnail');
input.tipsy('hide');
form.remove();
if (newName !== oldname) {
checkInput();
// mark as loading (temp element)
- td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
+ $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
tr.attr('data-file', newName);
var basename = newName;
if (newName.indexOf('.') > 0 && tr.data('type') !== 'dir') {
@@ -1462,7 +1564,7 @@
var fileEl = self.remove(file, {updateSummary: false});
// FIXME: not sure why we need this after the
// element isn't even in the DOM any more
- fileEl.find('input[type="checkbox"]').prop('checked', false);
+ fileEl.find('.selectCheckBox').prop('checked', false);
fileEl.removeClass('selected');
self.fileSummary.remove({type: fileEl.attr('data-type'), size: fileEl.attr('data-size')});
});
@@ -1515,7 +1617,7 @@
/**
* Shows the loading mask.
*
- * @see #hideMask
+ * @see OCA.Files.FileList#hideMask
*/
showMask: function() {
// in case one was shown before
@@ -1536,7 +1638,7 @@
},
/**
* Hide the loading mask.
- * @see #showMask
+ * @see OCA.Files.FileList#showMask
*/
hideMask: function() {
this.$el.find('.mask').remove();
@@ -1553,24 +1655,68 @@
});
});
},
+ /**
+ * @deprecated use setFilter(filter)
+ */
filter:function(query) {
+ this.setFilter('');
+ },
+ /**
+ * @deprecated use setFilter('')
+ */
+ unfilter:function() {
+ this.setFilter('');
+ },
+ /**
+ * hide files matching the given filter
+ * @param filter
+ */
+ setFilter:function(filter) {
+ this._filter = filter;
+ this.fileSummary.setFilter(filter, this.files);
+ this.hideIrrelevantUIWhenNoFilesMatch();
+ var that = this;
this.$fileList.find('tr').each(function(i,e) {
- if ($(e).data('file').toString().toLowerCase().indexOf(query.toLowerCase()) !== -1) {
- $(e).addClass("searchresult");
+ var $e = $(e);
+ if ($e.data('file').toString().toLowerCase().indexOf(filter.toLowerCase()) === -1) {
+ $e.addClass('hidden');
+ that.$container.trigger('scroll');
} else {
- $(e).removeClass("searchresult");
+ $e.removeClass('hidden');
}
});
- //do not use scrollto to prevent removing searchresult css class
- var first = this.$fileList.find('tr.searchresult').first();
- if (first.exists()) {
- $(window).scrollTop(first.position().top);
+ },
+ hideIrrelevantUIWhenNoFilesMatch:function() {
+ if (this._filter && this.fileSummary.summary.totalDirs + this.fileSummary.summary.totalFiles === 0) {
+ this.$el.find('#filestable thead th').addClass('hidden');
+ this.$el.find('#emptycontent').addClass('hidden');
+ if ( $('#searchresults').length === 0 || $('#searchresults').hasClass('hidden')) {
+ this.$el.find('.nofilterresults').removeClass('hidden').
+ find('p').text(t('files', "No entries in this folder match '{filter}'", {filter:this._filter}));
+ }
+ } else {
+ this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);
+ this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);
+ this.$el.find('.nofilterresults').addClass('hidden');
}
},
- unfilter:function() {
- this.$fileList.find('tr.searchresult').each(function(i,e) {
- $(e).removeClass("searchresult");
- });
+ /**
+ * get the current filter
+ * @param filter
+ */
+ getFilter:function(filter) {
+ return this._filter;
+ },
+ /**
+ * update the search object to use this filelist when filtering
+ */
+ updateSearch:function() {
+ if (OCA.Search.files) {
+ OCA.Search.files.setFileList(this);
+ }
+ if (OC.Search) {
+ OC.Search.clear();
+ }
},
/**
* Update UI based on the current selection
@@ -1586,7 +1732,7 @@
this.$el.find('.selectedActions').addClass('hidden');
}
else {
- canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE);
+ canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE) && this.isSelectedDeletable();
this.$el.find('.selectedActions').removeClass('hidden');
this.$el.find('#headerSize a>span:first').text(OC.Util.humanFileSize(summary.totalSize));
var selection = '';
@@ -1607,6 +1753,15 @@
},
/**
+ * Check whether all selected files are deletable
+ */
+ isSelectedDeletable: function() {
+ return _.reduce(this.getSelectedFiles(), function(deletable, file) {
+ return deletable && (file.permissions & OC.PERMISSION_DELETE);
+ }, true);
+ },
+
+ /**
* Returns whether all files are selected
* @return true if all files are selected, false otherwise
*/
@@ -1749,7 +1904,7 @@
var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads);
if (currentUploads === 1) {
var img = OC.imagePath('core', 'loading.gif');
- data.context.find('td.filename').attr('style','background-image:url('+img+')');
+ data.context.find('.thumbnail').css('background-image', 'url(' + img + ')');
uploadText.text(translatedText);
uploadText.show();
} else {
@@ -1788,7 +1943,7 @@
var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads);
if (currentUploads === 0) {
var img = OC.imagePath('core', 'filetypes/folder');
- data.context.find('td.filename').attr('style','background-image:url('+img+')');
+ data.context.find('.thumbnail').css('background-image', 'url(' + img + ')');
uploadText.text(translatedText);
uploadText.hide();
} else {
@@ -1873,7 +2028,7 @@
//cleanup uploading to a dir
var uploadText = $('tr .uploadtext');
var img = OC.imagePath('core', 'filetypes/folder');
- uploadText.parents('td.filename').attr('style','background-image:url('+img+')');
+ uploadText.parents('td.filename').find('.thumbnail').css('background-image', 'url(' + img + ')');
uploadText.fadeOut();
uploadText.attr('currentUploads', 0);
}
@@ -1887,7 +2042,7 @@
//cleanup uploading to a dir
var uploadText = $('tr .uploadtext');
var img = OC.imagePath('core', 'filetypes/folder');
- uploadText.parents('td.filename').attr('style','background-image:url('+img+')');
+ uploadText.parents('td.filename').find('.thumbnail').css('background-image', 'url(' + img + ')');
uploadText.fadeOut();
uploadText.attr('currentUploads', 0);
}
@@ -1961,15 +2116,17 @@
/**
* Sort comparators.
+ * @namespace OCA.Files.FileList.Comparators
+ * @private
*/
FileList.Comparators = {
/**
* Compares two file infos by name, making directories appear
* first.
*
- * @param fileInfo1 file info
- * @param fileInfo2 file info
- * @return -1 if the first file must appear before the second one,
+ * @param {OCA.Files.FileInfo} fileInfo1 file info
+ * @param {OCA.Files.FileInfo} fileInfo2 file info
+ * @return {int} -1 if the first file must appear before the second one,
* 0 if they are identify, 1 otherwise.
*/
name: function(fileInfo1, fileInfo2) {
@@ -1984,9 +2141,9 @@
/**
* Compares two file infos by size.
*
- * @param fileInfo1 file info
- * @param fileInfo2 file info
- * @return -1 if the first file must appear before the second one,
+ * @param {OCA.Files.FileInfo} fileInfo1 file info
+ * @param {OCA.Files.FileInfo} fileInfo2 file info
+ * @return {int} -1 if the first file must appear before the second one,
* 0 if they are identify, 1 otherwise.
*/
size: function(fileInfo1, fileInfo2) {
@@ -1995,9 +2152,9 @@
/**
* Compares two file infos by timestamp.
*
- * @param fileInfo1 file info
- * @param fileInfo2 file info
- * @return -1 if the first file must appear before the second one,
+ * @param {OCA.Files.FileInfo} fileInfo1 file info
+ * @param {OCA.Files.FileInfo} fileInfo2 file info
+ * @return {int} -1 if the first file must appear before the second one,
* 0 if they are identify, 1 otherwise.
*/
mtime: function(fileInfo1, fileInfo2) {
@@ -2005,6 +2162,27 @@
}
};
+ /**
+ * File info attributes.
+ *
+ * @todo make this a real class in the future
+ * @typedef {Object} OCA.Files.FileInfo
+ *
+ * @property {int} id file id
+ * @property {String} name file name
+ * @property {String} [path] file path, defaults to the list's current path
+ * @property {String} mimetype mime type
+ * @property {String} type "file" for files or "dir" for directories
+ * @property {int} permissions file permissions
+ * @property {int} mtime modification time in milliseconds
+ * @property {boolean} [isShareMountPoint] whether the file is a share mount
+ * point
+ * @property {boolean} [isPreviewAvailable] whether a preview is available
+ * for the given file type
+ * @property {String} [icon] path to the mime type icon
+ * @property {String} etag etag of the file
+ */
+
OCA.Files.FileList = FileList;
})();
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index df268fea6de..314b8bf39c6 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -195,7 +195,10 @@
/**
* Generates a preview URL based on the URL space.
- * @param urlSpec map with {x: width, y: height, file: file path}
+ * @param urlSpec attributes for the URL
+ * @param {int} urlSpec.x width
+ * @param {int} urlSpec.y height
+ * @param {String} urlSpec.file path to the file
* @return preview URL
* @deprecated used OCA.Files.FileList.generatePreviewUrl instead
*/
@@ -366,19 +369,22 @@ var createDragShadow = function(event) {
var dir = FileList.getCurrentDirectory();
$(selectedFiles).each(function(i,elem) {
+ // TODO: refactor this with the table row creation code
var newtr = $('<tr/>')
.attr('data-dir', dir)
.attr('data-file', elem.name)
.attr('data-origin', elem.origin);
- newtr.append($('<td/>').addClass('filename').text(elem.name));
- newtr.append($('<td/>').addClass('size').text(OC.Util.humanFileSize(elem.size)));
+ newtr.append($('<td class="filename" />').text(elem.name).css('background-size', 32));
+ newtr.append($('<td class="size" />').text(OC.Util.humanFileSize(elem.size)));
tbody.append(newtr);
if (elem.type === 'dir') {
- newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')');
+ newtr.find('td.filename')
+ .css('background-image', 'url(' + OC.imagePath('core', 'filetypes/folder.png') + ')');
} else {
var path = dir + '/' + elem.name;
OCA.Files.App.files.lazyLoadPreview(path, elem.mime, function(previewpath) {
- newtr.find('td.filename').attr('style','background-image:url('+previewpath+')');
+ newtr.find('td.filename')
+ .css('background-image', 'url(' + previewpath + ')');
}, null, null, elem.etag);
}
});
diff --git a/apps/files/js/filesummary.js b/apps/files/js/filesummary.js
index ca70259335c..65187276b2b 100644
--- a/apps/files/js/filesummary.js
+++ b/apps/files/js/filesummary.js
@@ -19,14 +19,15 @@
*
*/
-/* global OC, n, t */
-
(function() {
/**
* The FileSummary class encapsulates the file summary values and
* the logic to render it in the given container
+ *
+ * @constructs FileSummary
+ * @memberof OCA.Files
+ *
* @param $tr table row element
- * $param summary optional initial summary value
*/
var FileSummary = function($tr) {
this.$el = $tr;
@@ -38,7 +39,8 @@
summary: {
totalFiles: 0,
totalDirs: 0,
- totalSize: 0
+ totalSize: 0,
+ filter:''
},
/**
@@ -47,6 +49,9 @@
* @param update whether to update the display
*/
add: function(file, update) {
+ if (file.name && file.name.toLowerCase().indexOf(this.summary.filter) === -1) {
+ return;
+ }
if (file.type === 'dir' || file.mime === 'httpd/unix-directory') {
this.summary.totalDirs++;
}
@@ -64,6 +69,9 @@
* @param update whether to update the display
*/
remove: function(file, update) {
+ if (file.name && file.name.toLowerCase().indexOf(this.summary.filter) === -1) {
+ return;
+ }
if (file.type === 'dir' || file.mime === 'httpd/unix-directory') {
this.summary.totalDirs--;
}
@@ -75,6 +83,10 @@
this.update();
}
},
+ setFilter: function(filter, files){
+ this.summary.filter = filter.toLowerCase();
+ this.calculate(files);
+ },
/**
* Returns the total of files and directories
*/
@@ -90,11 +102,15 @@
var summary = {
totalDirs: 0,
totalFiles: 0,
- totalSize: 0
+ totalSize: 0,
+ filter: this.summary.filter
};
for (var i = 0; i < files.length; i++) {
file = files[i];
+ if (file.name && file.name.toLowerCase().indexOf(this.summary.filter) === -1) {
+ continue;
+ }
if (file.type === 'dir' || file.mime === 'httpd/unix-directory') {
summary.totalDirs++;
}
@@ -117,6 +133,9 @@
*/
setSummary: function(summary) {
this.summary = summary;
+ if (typeof this.summary.filter === 'undefined') {
+ this.summary.filter = '';
+ }
this.update();
},
@@ -136,6 +155,7 @@
var $dirInfo = this.$el.find('.dirinfo');
var $fileInfo = this.$el.find('.fileinfo');
var $connector = this.$el.find('.connector');
+ var $filterInfo = this.$el.find('.filter');
// Substitute old content with new translations
$dirInfo.html(n('files', '%n folder', '%n folders', this.summary.totalDirs));
@@ -158,6 +178,13 @@
if (this.summary.totalDirs > 0 && this.summary.totalFiles > 0) {
$connector.removeClass('hidden');
}
+ if (this.summary.filter === '') {
+ $filterInfo.html('');
+ $filterInfo.addClass('hidden');
+ } else {
+ $filterInfo.html(n('files', ' matches \'{filter}\'', ' match \'{filter}\'', this.summary.totalDirs + this.summary.totalFiles, {filter: this.summary.filter}));
+ $filterInfo.removeClass('hidden');
+ }
},
render: function() {
if (!this.$el) {
@@ -167,6 +194,11 @@
var summary = this.summary;
var directoryInfo = n('files', '%n folder', '%n folders', summary.totalDirs);
var fileInfo = n('files', '%n file', '%n files', summary.totalFiles);
+ if (this.summary.filter === '') {
+ var filterInfo = '';
+ } else {
+ var filterInfo = n('files', ' matches \'{filter}\'', ' match \'{filter}\'', summary.totalFiles + summary.totalDirs, {filter: summary.filter});
+ }
var infoVars = {
dirs: '<span class="dirinfo">'+directoryInfo+'</span><span class="connector">',
@@ -179,9 +211,9 @@
fileSize = '<td class="filesize">' + OC.Util.humanFileSize(summary.totalSize) + '</td>';
}
- var info = t('files', '{dirs} and {files}', infoVars);
+ var info = t('files', '{dirs} and {files}', infoVars, null, {'escape': false});
- var $summary = $('<td><span class="info">'+info+'</span></td>'+fileSize+'<td class="date"></td>');
+ var $summary = $('<td><span class="info">'+info+'<span class="filter">'+filterInfo+'</span></span></td>'+fileSize+'<td class="date"></td>');
if (!this.summary.totalFiles && !this.summary.totalDirs) {
this.$el.addClass('hidden');
diff --git a/apps/files/js/navigation.js b/apps/files/js/navigation.js
index b959e016e8c..be385f21f50 100644
--- a/apps/files/js/navigation.js
+++ b/apps/files/js/navigation.js
@@ -13,10 +13,19 @@
(function() {
+ /**
+ * @class OCA.Files.Navigation
+ * @classdesc Navigation control for the files app sidebar.
+ *
+ * @param $el element containing the navigation
+ */
var Navigation = function($el) {
this.initialize($el);
};
+ /**
+ * @memberof OCA.Files
+ */
Navigation.prototype = {
/**
@@ -31,6 +40,8 @@
/**
* Initializes the navigation from the given container
+ *
+ * @private
* @param $el element containing the navigation
*/
initialize: function($el) {
diff --git a/apps/files/js/search.js b/apps/files/js/search.js
new file mode 100644
index 00000000000..394bcb48603
--- /dev/null
+++ b/apps/files/js/search.js
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2014
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+(function() {
+
+ /**
+ * Construct a new FileActions instance
+ * @constructs Files
+ */
+ var Files = function() {
+ this.initialize();
+ };
+ /**
+ * @memberof OCA.Search
+ */
+ Files.prototype = {
+
+ fileList: null,
+
+ /**
+ * Initialize the file search
+ */
+ initialize: function() {
+
+ var self = this;
+
+ this.fileAppLoaded = function() {
+ return !!OCA.Files && !!OCA.Files.App;
+ };
+ function inFileList($row, result) {
+ if (! self.fileAppLoaded()) {
+ return false;
+ }
+ var dir = self.fileList.getCurrentDirectory().replace(/\/+$/,'');
+ var resultDir = OC.dirname(result.path);
+ return dir === resultDir && self.fileList.inList(result.name);
+ }
+ function updateLegacyMimetype(result) {
+ // backward compatibility:
+ if (!result.mime && result.mime_type) {
+ result.mime = result.mime_type;
+ }
+ }
+ function hideNoFilterResults() {
+ var $nofilterresults = $('.nofilterresults');
+ if ( ! $nofilterresults.hasClass('hidden') ) {
+ $nofilterresults.addClass('hidden');
+ }
+ }
+
+ this.renderFolderResult = function($row, result) {
+ if (inFileList($row, result)) {
+ return null;
+ }
+ hideNoFilterResults();
+ /*render folder icon, show path beneath filename,
+ show size and last modified date on the right */
+ this.updateLegacyMimetype(result);
+
+ var $pathDiv = $('<div class="path"></div>').text(result.path);
+ $row.find('td.info div.name').after($pathDiv).text(result.name);
+
+ $row.find('td.result a').attr('href', result.link);
+ $row.find('td.icon').css('background-image', 'url(' + OC.imagePath('core', 'filetypes/folder') + ')');
+ return $row;
+ };
+
+ this.renderFileResult = function($row, result) {
+ if (inFileList($row, result)) {
+ return null;
+ }
+ hideNoFilterResults();
+ /*render preview icon, show path beneath filename,
+ show size and last modified date on the right */
+ this.updateLegacyMimetype(result);
+
+ var $pathDiv = $('<div class="path"></div>').text(result.path);
+ $row.find('td.info div.name').after($pathDiv).text(result.name);
+
+ $row.find('td.result a').attr('href', result.link);
+
+ if (self.fileAppLoaded()) {
+ self.fileList.lazyLoadPreview({
+ path: result.path,
+ mime: result.mime,
+ callback: function (url) {
+ $row.find('td.icon').css('background-image', 'url(' + url + ')');
+ }
+ });
+ } else {
+ // FIXME how to get mime icon if not in files app
+ var mimeicon = result.mime.replace('/', '-');
+ $row.find('td.icon').css('background-image', 'url(' + OC.imagePath('core', 'filetypes/' + mimeicon) + ')');
+ var dir = OC.dirname(result.path);
+ if (dir === '') {
+ dir = '/';
+ }
+ $row.find('td.info a').attr('href',
+ OC.generateUrl('/apps/files/?dir={dir}&scrollto={scrollto}', {dir: dir, scrollto: result.name})
+ );
+ }
+ return $row;
+ };
+
+ this.renderAudioResult = function($row, result) {
+ /*render preview icon, show path beneath filename,
+ show size and last modified date on the right
+ show Artist and Album */
+ $row = this.renderFileResult($row, result);
+ if ($row) {
+ $row.find('td.icon').css('background-image', 'url(' + OC.imagePath('core', 'filetypes/audio') + ')');
+ }
+ return $row;
+ };
+
+ this.renderImageResult = function($row, result) {
+ /*render preview icon, show path beneath filename,
+ show size and last modified date on the right
+ show width and height */
+ $row = this.renderFileResult($row, result);
+ if ($row && !self.fileAppLoaded()) {
+ $row.find('td.icon').css('background-image', 'url(' + OC.imagePath('core', 'filetypes/image') + ')');
+ }
+ return $row;
+ };
+
+
+ this.handleFolderClick = function($row, result, event) {
+ // open folder
+ if (self.fileAppLoaded()) {
+ self.fileList.changeDirectory(result.path);
+ return false;
+ } else {
+ return true;
+ }
+ };
+
+ this.handleFileClick = function($row, result, event) {
+ if (self.fileAppLoaded()) {
+ self.fileList.changeDirectory(OC.dirname(result.path));
+ self.fileList.scrollTo(result.name);
+ return false;
+ } else {
+ return true;
+ }
+ };
+
+ this.updateLegacyMimetype = function (result) {
+ // backward compatibility:
+ if (!result.mime && result.mime_type) {
+ result.mime = result.mime_type;
+ }
+ };
+ this.setFileList = function (fileList) {
+ this.fileList = fileList;
+ };
+
+ OC.Plugins.register('OCA.Search', this);
+ },
+ attach: function(search) {
+ var self = this;
+ search.setFilter('files', function (query) {
+ if (self.fileAppLoaded()) {
+ self.fileList.setFilter(query);
+ if (query.length > 2) {
+ //search is not started until 500msec have passed
+ window.setTimeout(function() {
+ $('.nofilterresults').addClass('hidden');
+ }, 500);
+ }
+ }
+ });
+
+ search.setRenderer('folder', this.renderFolderResult.bind(this));
+ search.setRenderer('file', this.renderFileResult.bind(this));
+ search.setRenderer('audio', this.renderAudioResult.bind(this));
+ search.setRenderer('image', this.renderImageResult.bind(this));
+
+ search.setHandler('folder', this.handleFolderClick.bind(this));
+ search.setHandler(['file', 'audio', 'image'], this.handleFileClick.bind(this));
+ }
+ };
+ OCA.Search.Files = Files;
+ OCA.Search.files = new Files();
+})();
diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js
new file mode 100644
index 00000000000..a6757431ffa
--- /dev/null
+++ b/apps/files/js/tagsplugin.js
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+/* global Handlebars */
+
+(function(OCA) {
+
+ var TEMPLATE_FAVORITE_ACTION =
+ '<a href="#" ' +
+ 'class="action action-favorite {{#isFavorite}}permanent{{/isFavorite}}">' +
+ '<img class="svg" alt="{{altText}}" src="{{imgFile}}" />' +
+ '</a>';
+
+ /**
+ * Returns the path to the star image
+ *
+ * @param {boolean} state true if starred, false otherwise
+ * @return {string} path to star image
+ */
+ function getStarImage(state) {
+ return OC.imagePath('core', state ? 'actions/starred' : 'actions/star');
+ }
+
+ /**
+ * Render the star icon with the given state
+ *
+ * @param {boolean} state true if starred, false otherwise
+ * @return {Object} jQuery object
+ */
+ function renderStar(state) {
+ if (!this._template) {
+ this._template = Handlebars.compile(TEMPLATE_FAVORITE_ACTION);
+ }
+ return this._template({
+ isFavorite: state,
+ altText: state ? t('core', 'Favorited') : t('core', 'Favorite'),
+ imgFile: getStarImage(state)
+ });
+ }
+
+ /**
+ * Toggle star icon on action element
+ *
+ * @param {Object} action element
+ * @param {boolean} state true if starred, false otherwise
+ */
+ function toggleStar($actionEl, state) {
+ $actionEl.find('img').attr('src', getStarImage(state));
+ $actionEl.toggleClass('permanent', state);
+ }
+
+ OCA.Files = OCA.Files || {};
+
+ /**
+ * @namespace OCA.Files.TagsPlugin
+ *
+ * Extends the file actions and file list to include a favorite action icon
+ * and addition "data-tags" and "data-favorite" attributes.
+ */
+ OCA.Files.TagsPlugin = {
+ name: 'Tags',
+
+ allowedLists: [
+ 'files',
+ 'favorites'
+ ],
+
+ _extendFileActions: function(fileActions) {
+ var self = this;
+ // register "star" action
+ fileActions.registerAction({
+ name: 'favorite',
+ displayName: 'Favorite',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ render: function(actionSpec, isDefault, context) {
+ var $file = context.$file;
+ var isFavorite = $file.data('favorite') === true;
+ var $icon = $(renderStar(isFavorite));
+ $file.find('td:first>.favorite').replaceWith($icon);
+ return $icon;
+ },
+ actionHandler: function(fileName, context) {
+ var $actionEl = context.$file.find('.action-favorite');
+ var $file = context.$file;
+ var dir = context.dir || context.fileList.getCurrentDirectory();
+ var tags = $file.attr('data-tags');
+ if (_.isUndefined(tags)) {
+ tags = '';
+ }
+ tags = tags.split('|');
+ tags = _.without(tags, '');
+ var isFavorite = tags.indexOf(OC.TAG_FAVORITE) >= 0;
+ if (isFavorite) {
+ // remove tag from list
+ tags = _.without(tags, OC.TAG_FAVORITE);
+ } else {
+ tags.push(OC.TAG_FAVORITE);
+ }
+ toggleStar($actionEl, !isFavorite);
+
+ self.applyFileTags(
+ dir + '/' + fileName,
+ tags
+ ).then(function(result) {
+ // read latest state from result
+ toggleStar($actionEl, (result.tags.indexOf(OC.TAG_FAVORITE) >= 0));
+ $file.attr('data-tags', tags.join('|'));
+ $file.attr('data-favorite', !isFavorite);
+ });
+ }
+ });
+ },
+
+ _extendFileList: function(fileList) {
+ // extend row prototype
+ fileList.$el.addClass('has-favorites');
+ var oldCreateRow = fileList._createRow;
+ fileList._createRow = function(fileData) {
+ var $tr = oldCreateRow.apply(this, arguments);
+ if (fileData.tags) {
+ $tr.attr('data-tags', fileData.tags.join('|'));
+ if (fileData.tags.indexOf(OC.TAG_FAVORITE) >= 0) {
+ $tr.attr('data-favorite', true);
+ }
+ }
+ $tr.find('td:first').prepend('<div class="favorite"></div>');
+ return $tr;
+ };
+ },
+
+ attach: function(fileList) {
+ if (this.allowedLists.indexOf(fileList.id) < 0) {
+ return;
+ }
+ this._extendFileActions(fileList.fileActions);
+ this._extendFileList(fileList);
+ },
+
+ /**
+ * Replaces the given files' tags with the specified ones.
+ *
+ * @param {String} fileName path to the file or folder to tag
+ * @param {Array.<String>} tagNames array of tag names
+ */
+ applyFileTags: function(fileName, tagNames) {
+ var encodedPath = OC.encodePath(fileName);
+ while (encodedPath[0] === '/') {
+ encodedPath = encodedPath.substr(1);
+ }
+ return $.ajax({
+ url: OC.generateUrl('/apps/files/api/v1/files/') + encodedPath,
+ contentType: 'application/json',
+ data: JSON.stringify({
+ tags: tagNames || []
+ }),
+ dataType: 'json',
+ type: 'POST'
+ });
+ }
+ };
+})(OCA);
+
+OC.Plugins.register('OCA.Files.FileList', OCA.Files.TagsPlugin);
+
diff --git a/apps/files/js/upload.js b/apps/files/js/upload.js
index 617cf4b1c1d..518608615e0 100644
--- a/apps/files/js/upload.js
+++ b/apps/files/js/upload.js
@@ -8,7 +8,6 @@
*
*/
-/* global OC */
function Upload(fileSelector) {
if ($.support.xhrFileUpload) {
return new XHRUpload(fileSelector.target.files);
diff --git a/apps/files/l10n/ach.js b/apps/files/l10n/ach.js
index f085469f731..deae17398bd 100644
--- a/apps/files/l10n/ach.js
+++ b/apps/files/l10n/ach.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/ach.json b/apps/files/l10n/ach.json
index ba9792477cd..dd9cfe83135 100644
--- a/apps/files/l10n/ach.json
+++ b/apps/files/l10n/ach.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ady.js b/apps/files/l10n/ady.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/ady.js
+++ b/apps/files/l10n/ady.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ady.json b/apps/files/l10n/ady.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/ady.json
+++ b/apps/files/l10n/ady.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/af_ZA.js b/apps/files/l10n/af_ZA.js
index 1a4639183ed..8ac92002885 100644
--- a/apps/files/l10n/af_ZA.js
+++ b/apps/files/l10n/af_ZA.js
@@ -1,11 +1,13 @@
OC.L10N.register(
"files",
{
- "Share" : "Deel",
"Unshare" : "Deel terug neem",
+ "Error" : "Fout",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "Instellings",
"Folder" : "Omslag"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/af_ZA.json b/apps/files/l10n/af_ZA.json
index 0e7116887f0..a1d6d1b69ed 100644
--- a/apps/files/l10n/af_ZA.json
+++ b/apps/files/l10n/af_ZA.json
@@ -1,9 +1,11 @@
{ "translations": {
- "Share" : "Deel",
"Unshare" : "Deel terug neem",
+ "Error" : "Fout",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "Instellings",
"Folder" : "Omslag"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ak.js b/apps/files/l10n/ak.js
index 8ffacdcf2f3..46c5e83b98e 100644
--- a/apps/files/l10n/ak.js
+++ b/apps/files/l10n/ak.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=n > 1;");
diff --git a/apps/files/l10n/ak.json b/apps/files/l10n/ak.json
index 63d087f769b..d9cd8e42001 100644
--- a/apps/files/l10n/ak.json
+++ b/apps/files/l10n/ak.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=n > 1;"
} \ No newline at end of file
diff --git a/apps/files/l10n/am_ET.js b/apps/files/l10n/am_ET.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/am_ET.js
+++ b/apps/files/l10n/am_ET.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/am_ET.json b/apps/files/l10n/am_ET.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/am_ET.json
+++ b/apps/files/l10n/am_ET.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index aaa4f1aa2be..a8da49aca92 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -21,16 +21,16 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "فشلت عملية الرفع. تعذر الحصول على معلومات الملف.",
"Invalid directory." : "مسار غير صحيح.",
"Files" : "الملفات",
+ "Favorites" : "المفضلة ",
+ "Home" : "البيت",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "تعذر رفع الملف {filename} إما لأنه مجلد أو لان حجم الملف 0 بايت",
"Upload cancelled." : "تم إلغاء عملية رفع الملفات .",
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"File upload is in progress. Leaving the page now will cancel the upload." : "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.",
"{new_name} already exists" : "{new_name} موجود مسبقا",
- "Share" : "شارك",
+ "Rename" : "إعادة تسميه",
"Delete" : "إلغاء",
"Unshare" : "إلغاء المشاركة",
- "Delete permanently" : "حذف بشكل دائم",
- "Rename" : "إعادة تسميه",
"Pending" : "قيد الانتظار",
"Error moving file" : "حدث خطأ أثناء نقل الملف",
"Error" : "خطأ",
@@ -45,12 +45,15 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "المفتاح الخاص بتشفير التطبيقات غير صالح. يرجى تحديث كلمة السر الخاصة بالمفتاح الخاص من الإعدادت الشخصية حتى تتمكن من الوصول للملفات المشفرة.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","","","",""],
"{dirs} and {files}" : "{dirs} و {files}",
+ "Favorite" : "المفضلة",
"%s could not be renamed" : "%s لا يمكن إعادة تسميته. ",
"File handling" : "التعامل مع الملف",
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
"Save" : "حفظ",
+ "Settings" : "إعدادات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا العنوان لـ <a href=\"%s\" target=\"_blank\">الدخول الى ملفاتك عن طريق WebDAV</a>",
"New" : "جديد",
@@ -58,7 +61,8 @@ OC.L10N.register(
"New folder" : "مجلد جديد",
"Folder" : "مجلد",
"From link" : "من رابط",
- "Nothing in here. Upload something!" : "لا يوجد شيء هنا. إرفع بعض الملفات!",
+ "Upload" : "رفع",
+ "Cancel upload" : "إلغاء الرفع",
"Download" : "تحميل",
"Upload too large" : "حجم الترفيع أعلى من المسموح",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم.",
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 8e6b863bb0d..9b35b4fd136 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -19,16 +19,16 @@
"Upload failed. Could not get file info." : "فشلت عملية الرفع. تعذر الحصول على معلومات الملف.",
"Invalid directory." : "مسار غير صحيح.",
"Files" : "الملفات",
+ "Favorites" : "المفضلة ",
+ "Home" : "البيت",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "تعذر رفع الملف {filename} إما لأنه مجلد أو لان حجم الملف 0 بايت",
"Upload cancelled." : "تم إلغاء عملية رفع الملفات .",
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"File upload is in progress. Leaving the page now will cancel the upload." : "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.",
"{new_name} already exists" : "{new_name} موجود مسبقا",
- "Share" : "شارك",
+ "Rename" : "إعادة تسميه",
"Delete" : "إلغاء",
"Unshare" : "إلغاء المشاركة",
- "Delete permanently" : "حذف بشكل دائم",
- "Rename" : "إعادة تسميه",
"Pending" : "قيد الانتظار",
"Error moving file" : "حدث خطأ أثناء نقل الملف",
"Error" : "خطأ",
@@ -43,12 +43,15 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "المفتاح الخاص بتشفير التطبيقات غير صالح. يرجى تحديث كلمة السر الخاصة بالمفتاح الخاص من الإعدادت الشخصية حتى تتمكن من الوصول للملفات المشفرة.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","","","",""],
"{dirs} and {files}" : "{dirs} و {files}",
+ "Favorite" : "المفضلة",
"%s could not be renamed" : "%s لا يمكن إعادة تسميته. ",
"File handling" : "التعامل مع الملف",
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
"Save" : "حفظ",
+ "Settings" : "إعدادات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا العنوان لـ <a href=\"%s\" target=\"_blank\">الدخول الى ملفاتك عن طريق WebDAV</a>",
"New" : "جديد",
@@ -56,7 +59,8 @@
"New folder" : "مجلد جديد",
"Folder" : "مجلد",
"From link" : "من رابط",
- "Nothing in here. Upload something!" : "لا يوجد شيء هنا. إرفع بعض الملفات!",
+ "Upload" : "رفع",
+ "Cancel upload" : "إلغاء الرفع",
"Download" : "تحميل",
"Upload too large" : "حجم الترفيع أعلى من المسموح",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم.",
diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js
index ae0b0731572..60fb6c6f684 100644
--- a/apps/files/l10n/ast.js
+++ b/apps/files/l10n/ast.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Direutoriu non válidu.",
"Files" : "Ficheros",
"All files" : "Tolos ficheros",
+ "Favorites" : "Favoritos",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nun pudo xubise {filename}, paez que ye un directoriu o tien 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "El tamañu de ficheru total {size1} perpasa la llende de xuba {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nun hai abondu espaciu llibre, tas xubiendo {size1} pero namái falta {size2}",
@@ -46,12 +48,10 @@ OC.L10N.register(
"Could not create file" : "Nun pudo crease'l ficheru",
"Could not create folder" : "Nun pudo crease la carpeta",
"Error fetching URL" : "Fallu obteniendo URL",
- "Share" : "Compartir",
+ "Rename" : "Renomar",
"Delete" : "Desaniciar",
"Disconnect storage" : "Desconeutar almacenamientu",
"Unshare" : "Dexar de compartir",
- "Delete permanently" : "Desaniciar dafechu",
- "Rename" : "Renomar",
"Pending" : "Pendiente",
"Error moving file." : "Fallu moviendo'l ficheru.",
"Error moving file" : "Fallu moviendo'l ficheru",
@@ -71,7 +71,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Deshabilitose'l cifráu pero los tos ficheros tovía tán cifraos. Por favor, vete a los axustes personales pa descrifrar los tos ficheros.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} y {files}",
+ "Favorite" : "Favoritu",
"%s could not be renamed as it has been deleted" : "%s nun pue renomase dempués de desaniciase",
"%s could not be renamed" : "Nun se puede renomar %s ",
"Upload (max. %s)" : "Xuba (máx. %s)",
@@ -79,6 +81,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamañu máximu de xubida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Axustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usa esta direición <a href=\"%s\" target=\"_blank\">p'acceder a los ficheros a traviés de WebDAV</a>",
"New" : "Nuevu",
@@ -87,7 +90,8 @@ OC.L10N.register(
"New folder" : "Nueva carpeta",
"Folder" : "Carpeta",
"From link" : "Dende enllaz",
- "Nothing in here. Upload something!" : "Nun hai nada equí. ¡Xubi daqué!",
+ "Upload" : "Xubir",
+ "Cancel upload" : "Encaboxar xuba",
"Download" : "Descargar",
"Upload too large" : "La xuba ye abondo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los ficheros que tas intentando xubir perpasen el tamañu máximu pa les xubíes de ficheros nesti servidor.",
diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json
index 81d20a51c36..07dfc88c027 100644
--- a/apps/files/l10n/ast.json
+++ b/apps/files/l10n/ast.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Direutoriu non válidu.",
"Files" : "Ficheros",
"All files" : "Tolos ficheros",
+ "Favorites" : "Favoritos",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nun pudo xubise {filename}, paez que ye un directoriu o tien 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "El tamañu de ficheru total {size1} perpasa la llende de xuba {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nun hai abondu espaciu llibre, tas xubiendo {size1} pero namái falta {size2}",
@@ -44,12 +46,10 @@
"Could not create file" : "Nun pudo crease'l ficheru",
"Could not create folder" : "Nun pudo crease la carpeta",
"Error fetching URL" : "Fallu obteniendo URL",
- "Share" : "Compartir",
+ "Rename" : "Renomar",
"Delete" : "Desaniciar",
"Disconnect storage" : "Desconeutar almacenamientu",
"Unshare" : "Dexar de compartir",
- "Delete permanently" : "Desaniciar dafechu",
- "Rename" : "Renomar",
"Pending" : "Pendiente",
"Error moving file." : "Fallu moviendo'l ficheru.",
"Error moving file" : "Fallu moviendo'l ficheru",
@@ -69,7 +69,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Deshabilitose'l cifráu pero los tos ficheros tovía tán cifraos. Por favor, vete a los axustes personales pa descrifrar los tos ficheros.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} y {files}",
+ "Favorite" : "Favoritu",
"%s could not be renamed as it has been deleted" : "%s nun pue renomase dempués de desaniciase",
"%s could not be renamed" : "Nun se puede renomar %s ",
"Upload (max. %s)" : "Xuba (máx. %s)",
@@ -77,6 +79,7 @@
"Maximum upload size" : "Tamañu máximu de xubida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Axustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usa esta direición <a href=\"%s\" target=\"_blank\">p'acceder a los ficheros a traviés de WebDAV</a>",
"New" : "Nuevu",
@@ -85,7 +88,8 @@
"New folder" : "Nueva carpeta",
"Folder" : "Carpeta",
"From link" : "Dende enllaz",
- "Nothing in here. Upload something!" : "Nun hai nada equí. ¡Xubi daqué!",
+ "Upload" : "Xubir",
+ "Cancel upload" : "Encaboxar xuba",
"Download" : "Descargar",
"Upload too large" : "La xuba ye abondo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los ficheros que tas intentando xubir perpasen el tamañu máximu pa les xubíes de ficheros nesti servidor.",
diff --git a/apps/files/l10n/az.js b/apps/files/l10n/az.js
index 08e19809811..b4e44362ba5 100644
--- a/apps/files/l10n/az.js
+++ b/apps/files/l10n/az.js
@@ -46,19 +46,21 @@ OC.L10N.register(
"Could not create file" : "Faylı yaratmaq olmur",
"Could not create folder" : "Qovluğu yaratmaq olmur",
"Error fetching URL" : "URL-in gətirilməsində səhv baş verdi",
- "Share" : "Yayımla",
- "Delete" : "Sil",
"Rename" : "Adı dəyiş",
+ "Delete" : "Sil",
"Error" : "Səhv",
"Name" : "Ad",
"Size" : "Həcm",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "Saxlamaq",
+ "Settings" : "Quraşdırmalar",
"New folder" : "Yeni qovluq",
"Folder" : "Qovluq",
- "Nothing in here. Upload something!" : "Burda heçnə yoxdur. Nese yükləyin!",
+ "Upload" : "Serverə yüklə",
+ "Cancel upload" : "Yüklənməni dayandır",
"Download" : "Yüklə"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/az.json b/apps/files/l10n/az.json
index 591ec63e31e..d0e6808e9eb 100644
--- a/apps/files/l10n/az.json
+++ b/apps/files/l10n/az.json
@@ -44,19 +44,21 @@
"Could not create file" : "Faylı yaratmaq olmur",
"Could not create folder" : "Qovluğu yaratmaq olmur",
"Error fetching URL" : "URL-in gətirilməsində səhv baş verdi",
- "Share" : "Yayımla",
- "Delete" : "Sil",
"Rename" : "Adı dəyiş",
+ "Delete" : "Sil",
"Error" : "Səhv",
"Name" : "Ad",
"Size" : "Həcm",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "Saxlamaq",
+ "Settings" : "Quraşdırmalar",
"New folder" : "Yeni qovluq",
"Folder" : "Qovluq",
- "Nothing in here. Upload something!" : "Burda heçnə yoxdur. Nese yükləyin!",
+ "Upload" : "Serverə yüklə",
+ "Cancel upload" : "Yüklənməni dayandır",
"Download" : "Yüklə"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/be.js b/apps/files/l10n/be.js
index bf634ae5aef..40597a72ea5 100644
--- a/apps/files/l10n/be.js
+++ b/apps/files/l10n/be.js
@@ -4,6 +4,8 @@ OC.L10N.register(
"Error" : "Памылка",
"_%n folder_::_%n folders_" : ["","","",""],
"_%n file_::_%n files_" : ["","","",""],
- "_Uploading %n file_::_Uploading %n files_" : ["","","",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["","","",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""],
+ "Settings" : "Налады"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/be.json b/apps/files/l10n/be.json
index 0718404760d..fa807003af8 100644
--- a/apps/files/l10n/be.json
+++ b/apps/files/l10n/be.json
@@ -2,6 +2,8 @@
"Error" : "Памылка",
"_%n folder_::_%n folders_" : ["","","",""],
"_%n file_::_%n files_" : ["","","",""],
- "_Uploading %n file_::_Uploading %n files_" : ["","","",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["","","",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""],
+ "Settings" : "Налады"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js
index 24e148c9c63..3b6a85822a3 100644
--- a/apps/files/l10n/bg_BG.js
+++ b/apps/files/l10n/bg_BG.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Невалидна директория.",
"Files" : "Файлове",
"All files" : "Всички файлове",
+ "Favorites" : "Любими",
+ "Home" : "Домашен",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Неуспешно качване на {filename}, защото е директория или е с размер от 0 байта.",
"Total file size {size1} exceeds upload limit {size2}" : "Общия размер {size1} надминава лимита за качване {size2}.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Няма достатъчно свободно място, ти се опитваш да качиш {size1}, но са останали само {size2}.",
@@ -46,12 +48,10 @@ OC.L10N.register(
"Could not create file" : "Несупешно създаване на файла.",
"Could not create folder" : "Неуспешно създаване на папка.",
"Error fetching URL" : "Грешка при отварянето на интернет адреса.",
- "Share" : "Сподели",
+ "Rename" : "Преименуване",
"Delete" : "Изтрий",
"Disconnect storage" : "Извади дисковото устройство.",
"Unshare" : "Премахни Споделяне",
- "Delete permanently" : "Изтрий завинаги",
- "Rename" : "Преименуване",
"Pending" : "Чакащо",
"Error moving file." : "Грешка при местенето на файла.",
"Error moving file" : "Грешка при преместването на файла.",
@@ -71,7 +71,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Криптирането е изключено, но файлове ти са все още защитени. Моля, отиди на лични найстройки, за да разшфроваш файловете.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} и {files}",
+ "Favorite" : "Любими",
"%s could not be renamed as it has been deleted" : "%s не може да бъде преименуван, защото е вече изтрит",
"%s could not be renamed" : "%s не може да бъде преименуван.",
"Upload (max. %s)" : "Качи (макс. %s)",
@@ -79,6 +81,7 @@ OC.L10N.register(
"Maximum upload size" : "Максимален размер",
"max. possible: " : "максимално:",
"Save" : "Запис",
+ "Settings" : "Настройки",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Използвай този адрес, за да получиш <a href=\"%s\" target=\"_blank\">достъп до своите файлове чрез WebDAV</a>.",
"New" : "Създай",
@@ -87,11 +90,12 @@ OC.L10N.register(
"New folder" : "Нова папка",
"Folder" : "Папка",
"From link" : "От връзка",
- "Nothing in here. Upload something!" : "Тук няма нищо. Качи нещо!",
+ "Upload" : "Качване",
+ "Cancel upload" : "Отказване на качването",
"Download" : "Изтегли",
"Upload too large" : "Прекалено голям файл за качване.",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файловете, които се опитваш да качиш са по-големи от позволеното на този сървър.",
"Files are being scanned, please wait." : "Файловете се сканирват, изчакайте.",
- "Currently scanning" : "В момента се сканирва."
+ "Currently scanning" : "В момента се търси"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json
index 451cc21ae7b..eb63096dd4d 100644
--- a/apps/files/l10n/bg_BG.json
+++ b/apps/files/l10n/bg_BG.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Невалидна директория.",
"Files" : "Файлове",
"All files" : "Всички файлове",
+ "Favorites" : "Любими",
+ "Home" : "Домашен",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Неуспешно качване на {filename}, защото е директория или е с размер от 0 байта.",
"Total file size {size1} exceeds upload limit {size2}" : "Общия размер {size1} надминава лимита за качване {size2}.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Няма достатъчно свободно място, ти се опитваш да качиш {size1}, но са останали само {size2}.",
@@ -44,12 +46,10 @@
"Could not create file" : "Несупешно създаване на файла.",
"Could not create folder" : "Неуспешно създаване на папка.",
"Error fetching URL" : "Грешка при отварянето на интернет адреса.",
- "Share" : "Сподели",
+ "Rename" : "Преименуване",
"Delete" : "Изтрий",
"Disconnect storage" : "Извади дисковото устройство.",
"Unshare" : "Премахни Споделяне",
- "Delete permanently" : "Изтрий завинаги",
- "Rename" : "Преименуване",
"Pending" : "Чакащо",
"Error moving file." : "Грешка при местенето на файла.",
"Error moving file" : "Грешка при преместването на файла.",
@@ -69,7 +69,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Криптирането е изключено, но файлове ти са все още защитени. Моля, отиди на лични найстройки, за да разшфроваш файловете.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} и {files}",
+ "Favorite" : "Любими",
"%s could not be renamed as it has been deleted" : "%s не може да бъде преименуван, защото е вече изтрит",
"%s could not be renamed" : "%s не може да бъде преименуван.",
"Upload (max. %s)" : "Качи (макс. %s)",
@@ -77,6 +79,7 @@
"Maximum upload size" : "Максимален размер",
"max. possible: " : "максимално:",
"Save" : "Запис",
+ "Settings" : "Настройки",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Използвай този адрес, за да получиш <a href=\"%s\" target=\"_blank\">достъп до своите файлове чрез WebDAV</a>.",
"New" : "Създай",
@@ -85,11 +88,12 @@
"New folder" : "Нова папка",
"Folder" : "Папка",
"From link" : "От връзка",
- "Nothing in here. Upload something!" : "Тук няма нищо. Качи нещо!",
+ "Upload" : "Качване",
+ "Cancel upload" : "Отказване на качването",
"Download" : "Изтегли",
"Upload too large" : "Прекалено голям файл за качване.",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файловете, които се опитваш да качиш са по-големи от позволеното на този сървър.",
"Files are being scanned, please wait." : "Файловете се сканирват, изчакайте.",
- "Currently scanning" : "В момента се сканирва."
+ "Currently scanning" : "В момента се търси"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/bn_BD.js b/apps/files/l10n/bn_BD.js
index bf2ecc2f660..376d1dc9d50 100644
--- a/apps/files/l10n/bn_BD.js
+++ b/apps/files/l10n/bn_BD.js
@@ -29,13 +29,14 @@ OC.L10N.register(
"Invalid directory." : "ভুল ডিরেক্টরি",
"Files" : "ফাইল",
"All files" : "সব ফাইল",
+ "Favorites" : "প্রিয়জন",
+ "Home" : "নিবাস",
"Upload cancelled." : "আপলোড বাতিল করা হয়েছে।",
"File upload is in progress. Leaving the page now will cancel the upload." : "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।",
"{new_name} already exists" : "{new_name} টি বিদ্যমান",
- "Share" : "ভাগাভাগি কর",
+ "Rename" : "পূনঃনামকরণ",
"Delete" : "মুছে",
"Unshare" : "ভাগাভাগি বাতিল ",
- "Rename" : "পূনঃনামকরণ",
"Pending" : "মুলতুবি",
"Error moving file." : "ফাইল সরাতে সমস্যা হলো।",
"Error moving file" : "ফাইল সরাতে সমস্যা হলো",
@@ -49,17 +50,21 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n ফাইল আপলোড হচ্ছে","%n ফাইল আপলোড হচ্ছে"],
"\"{name}\" is an invalid file name." : "\"{name}\" টি একটি অননুমোদিত ফাইল নাম।",
"Your storage is almost full ({usedSpacePercent}%)" : "আপনার সংরক্ষণাধার প্রায় পরিপূর্ণ ({usedSpacePercent}%) ",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Favorite" : "প্রিয়জন",
"File handling" : "ফাইল হ্যার্ডলিং",
"Maximum upload size" : "আপলোডের সর্বোচ্চ আকার",
"max. possible: " : "অনুমোদিত সর্বোচ্চ আকার",
"Save" : "সংরক্ষণ",
+ "Settings" : "নিয়ামকসমূহ",
"WebDAV" : "WebDAV",
"New" : "নতুন",
"Text file" : "টেক্সট ফাইল",
"New folder" : "নব ফােলডার",
"Folder" : "ফোল্ডার",
"From link" : " লিংক থেকে",
- "Nothing in here. Upload something!" : "এখানে কিছুই নেই। কিছু আপলোড করুন !",
+ "Upload" : "আপলোড",
+ "Cancel upload" : "আপলোড বাতিল কর",
"Download" : "ডাউনলোড",
"Upload too large" : "আপলোডের আকারটি অনেক বড়",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "আপনি এই সার্ভারে আপলোড করার জন্য অনুমোদিত ফাইলের সর্বোচ্চ আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষ্টা করছেন ",
diff --git a/apps/files/l10n/bn_BD.json b/apps/files/l10n/bn_BD.json
index 35db36b61fa..bea260ae8a3 100644
--- a/apps/files/l10n/bn_BD.json
+++ b/apps/files/l10n/bn_BD.json
@@ -27,13 +27,14 @@
"Invalid directory." : "ভুল ডিরেক্টরি",
"Files" : "ফাইল",
"All files" : "সব ফাইল",
+ "Favorites" : "প্রিয়জন",
+ "Home" : "নিবাস",
"Upload cancelled." : "আপলোড বাতিল করা হয়েছে।",
"File upload is in progress. Leaving the page now will cancel the upload." : "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।",
"{new_name} already exists" : "{new_name} টি বিদ্যমান",
- "Share" : "ভাগাভাগি কর",
+ "Rename" : "পূনঃনামকরণ",
"Delete" : "মুছে",
"Unshare" : "ভাগাভাগি বাতিল ",
- "Rename" : "পূনঃনামকরণ",
"Pending" : "মুলতুবি",
"Error moving file." : "ফাইল সরাতে সমস্যা হলো।",
"Error moving file" : "ফাইল সরাতে সমস্যা হলো",
@@ -47,17 +48,21 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n ফাইল আপলোড হচ্ছে","%n ফাইল আপলোড হচ্ছে"],
"\"{name}\" is an invalid file name." : "\"{name}\" টি একটি অননুমোদিত ফাইল নাম।",
"Your storage is almost full ({usedSpacePercent}%)" : "আপনার সংরক্ষণাধার প্রায় পরিপূর্ণ ({usedSpacePercent}%) ",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Favorite" : "প্রিয়জন",
"File handling" : "ফাইল হ্যার্ডলিং",
"Maximum upload size" : "আপলোডের সর্বোচ্চ আকার",
"max. possible: " : "অনুমোদিত সর্বোচ্চ আকার",
"Save" : "সংরক্ষণ",
+ "Settings" : "নিয়ামকসমূহ",
"WebDAV" : "WebDAV",
"New" : "নতুন",
"Text file" : "টেক্সট ফাইল",
"New folder" : "নব ফােলডার",
"Folder" : "ফোল্ডার",
"From link" : " লিংক থেকে",
- "Nothing in here. Upload something!" : "এখানে কিছুই নেই। কিছু আপলোড করুন !",
+ "Upload" : "আপলোড",
+ "Cancel upload" : "আপলোড বাতিল কর",
"Download" : "ডাউনলোড",
"Upload too large" : "আপলোডের আকারটি অনেক বড়",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "আপনি এই সার্ভারে আপলোড করার জন্য অনুমোদিত ফাইলের সর্বোচ্চ আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষ্টা করছেন ",
diff --git a/apps/files/l10n/bn_IN.js b/apps/files/l10n/bn_IN.js
index 320ef37a8f9..ff8fb32f86c 100644
--- a/apps/files/l10n/bn_IN.js
+++ b/apps/files/l10n/bn_IN.js
@@ -14,10 +14,8 @@ OC.L10N.register(
"Not enough storage available" : "যথেষ্ট স্টোরেজ পাওয়া যায় না",
"Invalid directory." : "অবৈধ ডিরেক্টরি।",
"Files" : "ফাইলস",
- "Share" : "শেয়ার",
- "Delete" : "মুছে ফেলা",
- "Delete permanently" : "স্থায়ীভাবে মুছে দিন",
"Rename" : "পুনঃনামকরণ",
+ "Delete" : "মুছে ফেলা",
"Pending" : "মুলতুবি",
"Error" : "ভুল",
"Name" : "নাম",
@@ -25,7 +23,9 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "সেভ",
+ "Settings" : "সেটিংস",
"New folder" : "নতুন ফোল্ডার",
"Folder" : "ফোল্ডার",
"Download" : "ডাউনলোড করুন"
diff --git a/apps/files/l10n/bn_IN.json b/apps/files/l10n/bn_IN.json
index 7b6528c38a9..92051318585 100644
--- a/apps/files/l10n/bn_IN.json
+++ b/apps/files/l10n/bn_IN.json
@@ -12,10 +12,8 @@
"Not enough storage available" : "যথেষ্ট স্টোরেজ পাওয়া যায় না",
"Invalid directory." : "অবৈধ ডিরেক্টরি।",
"Files" : "ফাইলস",
- "Share" : "শেয়ার",
- "Delete" : "মুছে ফেলা",
- "Delete permanently" : "স্থায়ীভাবে মুছে দিন",
"Rename" : "পুনঃনামকরণ",
+ "Delete" : "মুছে ফেলা",
"Pending" : "মুলতুবি",
"Error" : "ভুল",
"Name" : "নাম",
@@ -23,7 +21,9 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "সেভ",
+ "Settings" : "সেটিংস",
"New folder" : "নতুন ফোল্ডার",
"Folder" : "ফোল্ডার",
"Download" : "ডাউনলোড করুন"
diff --git a/apps/files/l10n/bs.js b/apps/files/l10n/bs.js
index 1ce26f916a2..11bc8d73580 100644
--- a/apps/files/l10n/bs.js
+++ b/apps/files/l10n/bs.js
@@ -1,14 +1,109 @@
OC.L10N.register(
"files",
{
- "Share" : "Podijeli",
+ "Storage not available" : "Pohrana je nedostupna",
+ "Storage invalid" : "Pohrana je neispravna",
+ "Unknown error" : "Nepoznata greška",
+ "Could not move %s - File with this name already exists" : "Nemoguće premjestiti %s - Datoteka takvog naziva već postoji",
+ "Could not move %s" : "Nemoguće premjestiti %s",
+ "Permission denied" : "Nemate ovlaštenje",
+ "File name cannot be empty." : "Naziv datoteke ne može biti prazan",
+ "\"%s\" is an invalid file name." : "\"%s\" nije validan naziv datoteke.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravan naziv, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.",
+ "The target folder has been moved or deleted." : "Ciljni direktorij je premješten ili izbrisan.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s je već iskorišten u direktoriju %s. Molim odaberite drugi naziv.",
+ "Not a valid source" : "Izvor nije valjan",
+ "Server is not allowed to open URLs, please check the server configuration" : "Server nema dozvolu za otvaranje URL-ova, molim provjerite konfiguraciju servera",
+ "The file exceeds your quota by %s" : "Datoteka prelazi vašu kvotu za %s",
+ "Error while downloading %s to %s" : "Greška pri prenošenju %s u %s",
+ "Error when creating the file" : "Greška pri kreiranju datoteke",
+ "Folder name cannot be empty." : "Naziv direktorija ne može biti prazan.",
+ "Error when creating the folder" : "Greška pri kreiranju direktorija",
+ "Unable to set upload directory." : "Odredba direktorija učitavanja nije moguća.",
+ "Invalid Token" : "Neispravan Znak",
+ "No file was uploaded. Unknown error" : "Nijedna datoteka nije učitana. Nepoznata greška.",
+ "There is no error, the file uploaded with success" : "Nema greške, datoteka je uspješno učitana.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Učitana datoteka prelazi maksimalnu dopuštenu veličinu datoteke upload_max_filesize navedenu u php. ini: ",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Učitana datoteka premašuje maksimalnu dopuštenu veličinu datoteke MAX_FILE_SIZE navedenu u HTML formi",
+ "The uploaded file was only partially uploaded" : "Učitana datoteka je samo djelomično učitana",
+ "No file was uploaded" : "Nijedna datoteka nije učitana.",
+ "Missing a temporary folder" : "Nedostaje privremeni direktorij.",
+ "Failed to write to disk" : "Zapisivanje na disk nije uspjelo.",
+ "Not enough storage available" : "Prostor za pohranu je nedovoljan",
+ "Upload failed. Could not find uploaded file" : "Neuspješno učitavanje. Nije pronađena učitana dataoteka",
+ "Upload failed. Could not get file info." : "Neuspješno učitavanje. Nedostupne informacije o datoteci.",
+ "Invalid directory." : "Neispravan direktorij.",
+ "Files" : "Datoteke",
+ "All files" : "Sve datoteke",
+ "Favorites" : "Favoriti",
+ "Home" : "Kuća",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nemoguće učitati {filename} jer je ili direktorij ili ima 0 bajta",
+ "Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina datoteke {size1} prelazi ograničenje unosa {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nedovoljno slobodnog prostora, vi učitavate {size1} a samo je {size2} preostalo",
+ "Upload cancelled." : "Učitavanje je prekinuto.",
+ "Could not get result from server." : "Nemoguće dobiti rezultat od servera.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u toku. Napuštanje stranice prekinut će učitavanje.",
+ "URL cannot be empty" : "URL ne može biti prazan",
+ "{new_name} already exists" : "{new_name} već postoji",
+ "Could not create file" : "Datoteku nije moguće kreirati",
+ "Could not create folder" : "Direktorij nije moguće kreirati",
+ "Error fetching URL" : "Pogrešan dohvat URL",
+ "Rename" : "Preimenuj",
+ "Delete" : "Izbriši",
+ "Disconnect storage" : "Diskonektuj pohranu",
+ "Unshare" : "Prestani dijeliti",
+ "Select" : "Izaberi",
+ "Pending" : "Na čekanju",
+ "Unable to determine date" : "Nemoguće odrediti datum",
+ "Error moving file." : "Greška pri premještanju datoteke",
+ "Error moving file" : "Greška pri premještanju datoteke",
+ "Error" : "Greška",
+ "Could not rename file" : "Nemoguće preimenovati datoteku",
+ "Error deleting file." : "Greška pri brisanju datoteke",
"Name" : "Ime",
"Size" : "Veličina",
- "_%n folder_::_%n folders_" : ["","",""],
- "_%n file_::_%n files_" : ["","",""],
- "_Uploading %n file_::_Uploading %n files_" : ["","",""],
+ "Modified" : "Izmijenjeno",
+ "_%n folder_::_%n folders_" : ["direktorij","direktoriji","direktoriji"],
+ "_%n file_::_%n files_" : ["%n datoteka","%n datoteke","%n datoteke"],
+ "You don’t have permission to upload or create files here" : "Ovdje niste ovlašteni učitavati ili kreirati datoteke",
+ "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteke"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.",
+ "Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.",
+ "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, odite u osobne postavke da biste dešifrirali svoje datoteke.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
+ "{dirs} and {files}" : "{dirs} i {files}",
+ "Favorited" : "Favorizovano",
+ "Favorite" : "Favorit",
+ "%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan",
+ "%s could not be renamed" : "%s nije moguće preimenovati",
+ "Upload (max. %s)" : "Učitaj (max. %s)",
+ "File handling" : "Obrada datoteke",
+ "Maximum upload size" : "Maksimalna veličina učitavanja",
+ "max. possible: " : "max. moguće: ",
"Save" : "Spasi",
- "New folder" : "Nova fascikla",
- "Folder" : "Fasikla"
+ "Settings" : "Postavke",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristi slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>",
+ "New" : "Novo",
+ "New text file" : "Nova tekstualna datoteka",
+ "Text file" : "Tekstualna datoteka",
+ "New folder" : "Novi direktorij",
+ "Folder" : "Direktorij",
+ "From link" : "Od veze",
+ "Upload" : "Učitaj",
+ "Cancel upload" : "Prekini učitavanje",
+ "No files yet" : "Još nema datoteki",
+ "Upload some content or sync with your devices!" : "Učitaj neki sadržaj ili sinhronizuj sa tvojim uređajima!",
+ "Select all" : "Označi sve",
+ "Download" : "Preuzmi",
+ "Upload too large" : "Učitavanje je preveliko",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke koje pokušavate učitati prelaze maksimalnu veličinu za učitavanje datoteka na ovom serveru.",
+ "Files are being scanned, please wait." : "Datoteke se provjeravaju, molim pričekajte.",
+ "Currently scanning" : "Provjera u toku",
+ "No favorites" : "Nema favorita",
+ "Files and folders you mark as favorite will show up here" : "Datoteke i direktorij koje ste označili kao favorite će biti prikazane ovdje"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/bs.json b/apps/files/l10n/bs.json
index 7c2d782d01c..6d122e5b294 100644
--- a/apps/files/l10n/bs.json
+++ b/apps/files/l10n/bs.json
@@ -1,12 +1,107 @@
{ "translations": {
- "Share" : "Podijeli",
+ "Storage not available" : "Pohrana je nedostupna",
+ "Storage invalid" : "Pohrana je neispravna",
+ "Unknown error" : "Nepoznata greška",
+ "Could not move %s - File with this name already exists" : "Nemoguće premjestiti %s - Datoteka takvog naziva već postoji",
+ "Could not move %s" : "Nemoguće premjestiti %s",
+ "Permission denied" : "Nemate ovlaštenje",
+ "File name cannot be empty." : "Naziv datoteke ne može biti prazan",
+ "\"%s\" is an invalid file name." : "\"%s\" nije validan naziv datoteke.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravan naziv, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.",
+ "The target folder has been moved or deleted." : "Ciljni direktorij je premješten ili izbrisan.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s je već iskorišten u direktoriju %s. Molim odaberite drugi naziv.",
+ "Not a valid source" : "Izvor nije valjan",
+ "Server is not allowed to open URLs, please check the server configuration" : "Server nema dozvolu za otvaranje URL-ova, molim provjerite konfiguraciju servera",
+ "The file exceeds your quota by %s" : "Datoteka prelazi vašu kvotu za %s",
+ "Error while downloading %s to %s" : "Greška pri prenošenju %s u %s",
+ "Error when creating the file" : "Greška pri kreiranju datoteke",
+ "Folder name cannot be empty." : "Naziv direktorija ne može biti prazan.",
+ "Error when creating the folder" : "Greška pri kreiranju direktorija",
+ "Unable to set upload directory." : "Odredba direktorija učitavanja nije moguća.",
+ "Invalid Token" : "Neispravan Znak",
+ "No file was uploaded. Unknown error" : "Nijedna datoteka nije učitana. Nepoznata greška.",
+ "There is no error, the file uploaded with success" : "Nema greške, datoteka je uspješno učitana.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Učitana datoteka prelazi maksimalnu dopuštenu veličinu datoteke upload_max_filesize navedenu u php. ini: ",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Učitana datoteka premašuje maksimalnu dopuštenu veličinu datoteke MAX_FILE_SIZE navedenu u HTML formi",
+ "The uploaded file was only partially uploaded" : "Učitana datoteka je samo djelomično učitana",
+ "No file was uploaded" : "Nijedna datoteka nije učitana.",
+ "Missing a temporary folder" : "Nedostaje privremeni direktorij.",
+ "Failed to write to disk" : "Zapisivanje na disk nije uspjelo.",
+ "Not enough storage available" : "Prostor za pohranu je nedovoljan",
+ "Upload failed. Could not find uploaded file" : "Neuspješno učitavanje. Nije pronađena učitana dataoteka",
+ "Upload failed. Could not get file info." : "Neuspješno učitavanje. Nedostupne informacije o datoteci.",
+ "Invalid directory." : "Neispravan direktorij.",
+ "Files" : "Datoteke",
+ "All files" : "Sve datoteke",
+ "Favorites" : "Favoriti",
+ "Home" : "Kuća",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nemoguće učitati {filename} jer je ili direktorij ili ima 0 bajta",
+ "Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina datoteke {size1} prelazi ograničenje unosa {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nedovoljno slobodnog prostora, vi učitavate {size1} a samo je {size2} preostalo",
+ "Upload cancelled." : "Učitavanje je prekinuto.",
+ "Could not get result from server." : "Nemoguće dobiti rezultat od servera.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u toku. Napuštanje stranice prekinut će učitavanje.",
+ "URL cannot be empty" : "URL ne može biti prazan",
+ "{new_name} already exists" : "{new_name} već postoji",
+ "Could not create file" : "Datoteku nije moguće kreirati",
+ "Could not create folder" : "Direktorij nije moguće kreirati",
+ "Error fetching URL" : "Pogrešan dohvat URL",
+ "Rename" : "Preimenuj",
+ "Delete" : "Izbriši",
+ "Disconnect storage" : "Diskonektuj pohranu",
+ "Unshare" : "Prestani dijeliti",
+ "Select" : "Izaberi",
+ "Pending" : "Na čekanju",
+ "Unable to determine date" : "Nemoguće odrediti datum",
+ "Error moving file." : "Greška pri premještanju datoteke",
+ "Error moving file" : "Greška pri premještanju datoteke",
+ "Error" : "Greška",
+ "Could not rename file" : "Nemoguće preimenovati datoteku",
+ "Error deleting file." : "Greška pri brisanju datoteke",
"Name" : "Ime",
"Size" : "Veličina",
- "_%n folder_::_%n folders_" : ["","",""],
- "_%n file_::_%n files_" : ["","",""],
- "_Uploading %n file_::_Uploading %n files_" : ["","",""],
+ "Modified" : "Izmijenjeno",
+ "_%n folder_::_%n folders_" : ["direktorij","direktoriji","direktoriji"],
+ "_%n file_::_%n files_" : ["%n datoteka","%n datoteke","%n datoteke"],
+ "You don’t have permission to upload or create files here" : "Ovdje niste ovlašteni učitavati ili kreirati datoteke",
+ "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteke"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.",
+ "Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.",
+ "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, odite u osobne postavke da biste dešifrirali svoje datoteke.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
+ "{dirs} and {files}" : "{dirs} i {files}",
+ "Favorited" : "Favorizovano",
+ "Favorite" : "Favorit",
+ "%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan",
+ "%s could not be renamed" : "%s nije moguće preimenovati",
+ "Upload (max. %s)" : "Učitaj (max. %s)",
+ "File handling" : "Obrada datoteke",
+ "Maximum upload size" : "Maksimalna veličina učitavanja",
+ "max. possible: " : "max. moguće: ",
"Save" : "Spasi",
- "New folder" : "Nova fascikla",
- "Folder" : "Fasikla"
+ "Settings" : "Postavke",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristi slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>",
+ "New" : "Novo",
+ "New text file" : "Nova tekstualna datoteka",
+ "Text file" : "Tekstualna datoteka",
+ "New folder" : "Novi direktorij",
+ "Folder" : "Direktorij",
+ "From link" : "Od veze",
+ "Upload" : "Učitaj",
+ "Cancel upload" : "Prekini učitavanje",
+ "No files yet" : "Još nema datoteki",
+ "Upload some content or sync with your devices!" : "Učitaj neki sadržaj ili sinhronizuj sa tvojim uređajima!",
+ "Select all" : "Označi sve",
+ "Download" : "Preuzmi",
+ "Upload too large" : "Učitavanje je preveliko",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke koje pokušavate učitati prelaze maksimalnu veličinu za učitavanje datoteka na ovom serveru.",
+ "Files are being scanned, please wait." : "Datoteke se provjeravaju, molim pričekajte.",
+ "Currently scanning" : "Provjera u toku",
+ "No favorites" : "Nema favorita",
+ "Files and folders you mark as favorite will show up here" : "Datoteke i direktorij koje ste označili kao favorite će biti prikazane ovdje"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js
index 8a4b5c42d24..e83f0c34137 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Unknown error" : "Error desconegut",
"Could not move %s - File with this name already exists" : "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
"Could not move %s" : " No s'ha pogut moure %s",
+ "Permission denied" : "Permís denegat",
"File name cannot be empty." : "El nom del fitxer no pot ser buit.",
"\"%s\" is an invalid file name." : "\"%s\" no es un fitxer vàlid.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
@@ -34,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Directori no vàlid.",
"Files" : "Fitxers",
"All files" : "Tots els fitxers",
+ "Favorites" : "Preferits",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No es pot pujar {filename} perquè és una carpeta o té 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Mida total del fitxer {size1} excedeix el límit de pujada {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, està carregant {size1} però només pot {size2}",
@@ -45,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "No s'ha pogut crear el fitxer",
"Could not create folder" : "No s'ha pogut crear la carpeta",
"Error fetching URL" : "Error en obtenir la URL",
- "Share" : "Comparteix",
+ "Rename" : "Reanomena",
"Delete" : "Esborra",
"Disconnect storage" : "Desonnecta l'emmagatzematge",
"Unshare" : "Deixa de compartir",
- "Delete permanently" : "Esborra permanentment",
- "Rename" : "Reanomena",
+ "Select" : "Selecciona",
"Pending" : "Pendent",
"Error moving file." : "Error en moure el fitxer.",
"Error moving file" : "Error en moure el fitxer",
@@ -70,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorite" : "Preferits",
"%s could not be renamed as it has been deleted" : "No s'ha pogut renombrar %s ja que ha estat borrat",
"%s could not be renamed" : "%s no es pot canviar el nom",
"Upload (max. %s)" : "Pujada (màx. %s)",
@@ -78,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Mida màxima de pujada",
"max. possible: " : "màxim possible:",
"Save" : "Desa",
+ "Settings" : "Arranjament",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>",
"New" : "Nou",
@@ -86,7 +91,8 @@ OC.L10N.register(
"New folder" : "Carpeta nova",
"Folder" : "Carpeta",
"From link" : "Des d'enllaç",
- "Nothing in here. Upload something!" : "Res per aquí. Pugeu alguna cosa!",
+ "Upload" : "Puja",
+ "Cancel upload" : "Cancel·la la pujada",
"Download" : "Baixa",
"Upload too large" : "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index 91e96f5742d..03ca0ce7094 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -4,6 +4,7 @@
"Unknown error" : "Error desconegut",
"Could not move %s - File with this name already exists" : "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
"Could not move %s" : " No s'ha pogut moure %s",
+ "Permission denied" : "Permís denegat",
"File name cannot be empty." : "El nom del fitxer no pot ser buit.",
"\"%s\" is an invalid file name." : "\"%s\" no es un fitxer vàlid.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
@@ -32,6 +33,8 @@
"Invalid directory." : "Directori no vàlid.",
"Files" : "Fitxers",
"All files" : "Tots els fitxers",
+ "Favorites" : "Preferits",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No es pot pujar {filename} perquè és una carpeta o té 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Mida total del fitxer {size1} excedeix el límit de pujada {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, està carregant {size1} però només pot {size2}",
@@ -43,12 +46,11 @@
"Could not create file" : "No s'ha pogut crear el fitxer",
"Could not create folder" : "No s'ha pogut crear la carpeta",
"Error fetching URL" : "Error en obtenir la URL",
- "Share" : "Comparteix",
+ "Rename" : "Reanomena",
"Delete" : "Esborra",
"Disconnect storage" : "Desonnecta l'emmagatzematge",
"Unshare" : "Deixa de compartir",
- "Delete permanently" : "Esborra permanentment",
- "Rename" : "Reanomena",
+ "Select" : "Selecciona",
"Pending" : "Pendent",
"Error moving file." : "Error en moure el fitxer.",
"Error moving file" : "Error en moure el fitxer",
@@ -68,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorite" : "Preferits",
"%s could not be renamed as it has been deleted" : "No s'ha pogut renombrar %s ja que ha estat borrat",
"%s could not be renamed" : "%s no es pot canviar el nom",
"Upload (max. %s)" : "Pujada (màx. %s)",
@@ -76,6 +80,7 @@
"Maximum upload size" : "Mida màxima de pujada",
"max. possible: " : "màxim possible:",
"Save" : "Desa",
+ "Settings" : "Arranjament",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>",
"New" : "Nou",
@@ -84,7 +89,8 @@
"New folder" : "Carpeta nova",
"Folder" : "Carpeta",
"From link" : "Des d'enllaç",
- "Nothing in here. Upload something!" : "Res per aquí. Pugeu alguna cosa!",
+ "Upload" : "Puja",
+ "Cancel upload" : "Cancel·la la pujada",
"Download" : "Baixa",
"Upload too large" : "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
diff --git a/apps/files/l10n/ca@valencia.js b/apps/files/l10n/ca@valencia.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/ca@valencia.js
+++ b/apps/files/l10n/ca@valencia.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ca@valencia.json b/apps/files/l10n/ca@valencia.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/ca@valencia.json
+++ b/apps/files/l10n/ca@valencia.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"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 58467d9c68f..0e523f5110c 100644
--- a/apps/files/l10n/cs_CZ.js
+++ b/apps/files/l10n/cs_CZ.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Neplatný adresář",
"Files" : "Soubory",
"All files" : "Všechny soubory",
+ "Favorites" : "Oblíbené",
+ "Home" : "Domů",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nelze nahrát soubor {filename}, protože je to buď adresář nebo má velikost 0 bytů",
"Total file size {size1} exceeds upload limit {size2}" : "Celková velikost souboru {size1} překračuje povolenou velikost pro nahrávání {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Není dostatek místa pro uložení, velikost souboru je {size1}, zbývá pouze {size2}",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Nepodařilo se vytvořit soubor",
"Could not create folder" : "Nepodařilo se vytvořit složku",
"Error fetching URL" : "Chyba při načítání URL",
- "Share" : "Sdílet",
+ "Rename" : "Přejmenovat",
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
- "Delete permanently" : "Trvale odstranit",
- "Rename" : "Přejmenovat",
+ "Select" : "Vybrat",
"Pending" : "Nevyřízené",
+ "Unable to determine date" : "Nelze určit datum",
"Error moving file." : "Chyba při přesunu souboru.",
"Error moving file" : "Chyba při přesunu souboru",
"Error" : "Chyba",
"Could not rename file" : "Nepodařilo se přejmenovat soubor",
"Error deleting file." : "Chyba při mazání souboru.",
+ "No entries in this folder match '{filter}'" : "V tomto adresáři nic nesouhlasí s '{filter}'",
"Name" : "Název",
"Size" : "Velikost",
"Modified" : "Upraveno",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["odpovídá '{filter}'","odpovídají '{filter}'","odpovídá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
+ "Favorited" : "Přidáno k oblíbeným",
+ "Favorite" : "Oblíbené",
"%s could not be renamed as it has been deleted" : "%s nelze přejmenovat, protože byl smazán",
"%s could not be renamed" : "%s nemůže být přejmenován",
"Upload (max. %s)" : "Nahrát (max. %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximální velikost pro odesílání",
"max. possible: " : "největší možná: ",
"Save" : "Uložit",
+ "Settings" : "Nastavení",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>",
"New" : "Nový",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Nová složka",
"Folder" : "Složka",
"From link" : "Z odkazu",
- "Nothing in here. Upload something!" : "Žádný obsah. Nahrajte něco.",
+ "Upload" : "Odeslat",
+ "Cancel upload" : "Zrušit odesílání",
+ "No files yet" : "Zatím žádné soubory",
+ "Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!",
+ "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
+ "Select all" : "Vybrat vše",
"Download" : "Stáhnout",
"Upload too large" : "Odesílaný soubor je příliš velký",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.",
"Files are being scanned, please wait." : "Soubory se prohledávají, prosím čekejte.",
- "Currently scanning" : "Prohledává se"
+ "Currently scanning" : "Prohledává se",
+ "No favorites" : "Žádné oblíbené",
+ "Files and folders you mark as favorite will show up here" : "Soubory a adresáře označené jako oblíbené budou zobrazeny zde"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index 98cad1c70f5..a7ae492b370 100644
--- a/apps/files/l10n/cs_CZ.json
+++ b/apps/files/l10n/cs_CZ.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Neplatný adresář",
"Files" : "Soubory",
"All files" : "Všechny soubory",
+ "Favorites" : "Oblíbené",
+ "Home" : "Domů",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nelze nahrát soubor {filename}, protože je to buď adresář nebo má velikost 0 bytů",
"Total file size {size1} exceeds upload limit {size2}" : "Celková velikost souboru {size1} překračuje povolenou velikost pro nahrávání {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Není dostatek místa pro uložení, velikost souboru je {size1}, zbývá pouze {size2}",
@@ -44,18 +46,19 @@
"Could not create file" : "Nepodařilo se vytvořit soubor",
"Could not create folder" : "Nepodařilo se vytvořit složku",
"Error fetching URL" : "Chyba při načítání URL",
- "Share" : "Sdílet",
+ "Rename" : "Přejmenovat",
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
- "Delete permanently" : "Trvale odstranit",
- "Rename" : "Přejmenovat",
+ "Select" : "Vybrat",
"Pending" : "Nevyřízené",
+ "Unable to determine date" : "Nelze určit datum",
"Error moving file." : "Chyba při přesunu souboru.",
"Error moving file" : "Chyba při přesunu souboru",
"Error" : "Chyba",
"Could not rename file" : "Nepodařilo se přejmenovat soubor",
"Error deleting file." : "Chyba při mazání souboru.",
+ "No entries in this folder match '{filter}'" : "V tomto adresáři nic nesouhlasí s '{filter}'",
"Name" : "Název",
"Size" : "Velikost",
"Modified" : "Upraveno",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["odpovídá '{filter}'","odpovídají '{filter}'","odpovídá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
+ "Favorited" : "Přidáno k oblíbeným",
+ "Favorite" : "Oblíbené",
"%s could not be renamed as it has been deleted" : "%s nelze přejmenovat, protože byl smazán",
"%s could not be renamed" : "%s nemůže být přejmenován",
"Upload (max. %s)" : "Nahrát (max. %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Maximální velikost pro odesílání",
"max. possible: " : "největší možná: ",
"Save" : "Uložit",
+ "Settings" : "Nastavení",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>",
"New" : "Nový",
@@ -85,11 +92,18 @@
"New folder" : "Nová složka",
"Folder" : "Složka",
"From link" : "Z odkazu",
- "Nothing in here. Upload something!" : "Žádný obsah. Nahrajte něco.",
+ "Upload" : "Odeslat",
+ "Cancel upload" : "Zrušit odesílání",
+ "No files yet" : "Zatím žádné soubory",
+ "Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!",
+ "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
+ "Select all" : "Vybrat vše",
"Download" : "Stáhnout",
"Upload too large" : "Odesílaný soubor je příliš velký",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.",
"Files are being scanned, please wait." : "Soubory se prohledávají, prosím čekejte.",
- "Currently scanning" : "Prohledává se"
+ "Currently scanning" : "Prohledává se",
+ "No favorites" : "Žádné oblíbené",
+ "Files and folders you mark as favorite will show up here" : "Soubory a adresáře označené jako oblíbené budou zobrazeny zde"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/cy_GB.js b/apps/files/l10n/cy_GB.js
index a9c4ddeba28..884a879ac08 100644
--- a/apps/files/l10n/cy_GB.js
+++ b/apps/files/l10n/cy_GB.js
@@ -16,14 +16,13 @@ OC.L10N.register(
"Not enough storage available" : "Dim digon o le storio ar gael",
"Invalid directory." : "Cyfeiriadur annilys.",
"Files" : "Ffeiliau",
+ "Home" : "Cartref",
"Upload cancelled." : "Diddymwyd llwytho i fyny.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses.",
"{new_name} already exists" : "{new_name} yn bodoli'n barod",
- "Share" : "Rhannu",
+ "Rename" : "Ailenwi",
"Delete" : "Dileu",
"Unshare" : "Dad-rannu",
- "Delete permanently" : "Dileu'n barhaol",
- "Rename" : "Ailenwi",
"Pending" : "I ddod",
"Error" : "Gwall",
"Name" : "Enw",
@@ -34,15 +33,18 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["","","",""],
"Your storage is full, files can not be updated or synced anymore!" : "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!",
"Your storage is almost full ({usedSpacePercent}%)" : "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""],
"File handling" : "Trafod ffeiliau",
"Maximum upload size" : "Maint mwyaf llwytho i fyny",
"max. possible: " : "mwyaf. posib:",
"Save" : "Cadw",
+ "Settings" : "Gosodiadau",
"New" : "Newydd",
"Text file" : "Ffeil destun",
"Folder" : "Plygell",
"From link" : "Dolen o",
- "Nothing in here. Upload something!" : "Does dim byd fan hyn. Llwythwch rhywbeth i fyny!",
+ "Upload" : "Llwytho i fyny",
+ "Cancel upload" : "Diddymu llwytho i fyny",
"Download" : "Llwytho i lawr",
"Upload too large" : "Maint llwytho i fyny'n rhy fawr",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Mae'r ffeiliau rydych yn ceisio llwytho i fyny'n fwy na maint mwyaf llwytho ffeiliau i fyny ar y gweinydd hwn.",
diff --git a/apps/files/l10n/cy_GB.json b/apps/files/l10n/cy_GB.json
index dc583d0a333..5114abb7eee 100644
--- a/apps/files/l10n/cy_GB.json
+++ b/apps/files/l10n/cy_GB.json
@@ -14,14 +14,13 @@
"Not enough storage available" : "Dim digon o le storio ar gael",
"Invalid directory." : "Cyfeiriadur annilys.",
"Files" : "Ffeiliau",
+ "Home" : "Cartref",
"Upload cancelled." : "Diddymwyd llwytho i fyny.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses.",
"{new_name} already exists" : "{new_name} yn bodoli'n barod",
- "Share" : "Rhannu",
+ "Rename" : "Ailenwi",
"Delete" : "Dileu",
"Unshare" : "Dad-rannu",
- "Delete permanently" : "Dileu'n barhaol",
- "Rename" : "Ailenwi",
"Pending" : "I ddod",
"Error" : "Gwall",
"Name" : "Enw",
@@ -32,15 +31,18 @@
"_Uploading %n file_::_Uploading %n files_" : ["","","",""],
"Your storage is full, files can not be updated or synced anymore!" : "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!",
"Your storage is almost full ({usedSpacePercent}%)" : "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""],
"File handling" : "Trafod ffeiliau",
"Maximum upload size" : "Maint mwyaf llwytho i fyny",
"max. possible: " : "mwyaf. posib:",
"Save" : "Cadw",
+ "Settings" : "Gosodiadau",
"New" : "Newydd",
"Text file" : "Ffeil destun",
"Folder" : "Plygell",
"From link" : "Dolen o",
- "Nothing in here. Upload something!" : "Does dim byd fan hyn. Llwythwch rhywbeth i fyny!",
+ "Upload" : "Llwytho i fyny",
+ "Cancel upload" : "Diddymu llwytho i fyny",
"Download" : "Llwytho i lawr",
"Upload too large" : "Maint llwytho i fyny'n rhy fawr",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Mae'r ffeiliau rydych yn ceisio llwytho i fyny'n fwy na maint mwyaf llwytho ffeiliau i fyny ar y gweinydd hwn.",
diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js
index 7b636c63409..88e4388164b 100644
--- a/apps/files/l10n/da.js
+++ b/apps/files/l10n/da.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Ugyldig mappe.",
"Files" : "Filer",
"All files" : "Alle filer",
+ "Favorites" : "Foretrukne",
+ "Home" : "Hjemme",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke upload {filename} da det er enten en mappe eller indholder 0 bytes.",
"Total file size {size1} exceeds upload limit {size2}" : "Den totale filstørrelse {size1} er større end uploadgrænsen {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Der er ikke tilstrækkeligt friplads. Du uplaoder {size1} men der er kun {size2} tilbage",
@@ -46,13 +48,13 @@ OC.L10N.register(
"Could not create file" : "Kunne ikke oprette fil",
"Could not create folder" : "Kunne ikke oprette mappe",
"Error fetching URL" : "Fejl ved URL",
- "Share" : "Del",
+ "Rename" : "Omdøb",
"Delete" : "Slet",
"Disconnect storage" : "Frakobl lager",
"Unshare" : "Fjern deling",
- "Delete permanently" : "Slet permanent",
- "Rename" : "Omdøb",
+ "Select" : "Vælg",
"Pending" : "Afventer",
+ "Unable to determine date" : "Kan ikke fastslå datoen",
"Error moving file." : "Fejl ved flytning af fil",
"Error moving file" : "Fejl ved flytning af fil",
"Error" : "Fejl",
@@ -71,7 +73,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} og {files}",
+ "Favorited" : "Gjort til favorit",
+ "Favorite" : "Foretrukken",
"%s could not be renamed as it has been deleted" : "%s kunne ikke omdøbes, da den er blevet slettet",
"%s could not be renamed" : "%s kunne ikke omdøbes",
"Upload (max. %s)" : "Upload (max. %s)",
@@ -79,6 +84,7 @@ OC.L10N.register(
"Maximum upload size" : "Maksimal upload-størrelse",
"max. possible: " : "max. mulige: ",
"Save" : "Gem",
+ "Settings" : "Indstillinger",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Brug denne adresse for at <a href=\"%s\" target=\"_blank\">tilgå dine filer via WebDAV</a>",
"New" : "Ny",
@@ -87,11 +93,17 @@ OC.L10N.register(
"New folder" : "Ny Mappe",
"Folder" : "Mappe",
"From link" : "Fra link",
- "Nothing in here. Upload something!" : "Her er tomt. Upload noget!",
+ "Upload" : "Upload",
+ "Cancel upload" : "Fortryd upload",
+ "No files yet" : "Endnu ingen filer",
+ "Upload some content or sync with your devices!" : "Overfør indhold eller synkronisér med dine enheder!",
+ "Select all" : "Vælg alle",
"Download" : "Download",
"Upload too large" : "Upload er for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.",
"Files are being scanned, please wait." : "Filerne bliver indlæst, vent venligst.",
- "Currently scanning" : "Indlæser"
+ "Currently scanning" : "Indlæser",
+ "No favorites" : "Ingen favoritter",
+ "Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som favoritter, vil blive vist her"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json
index 81b658bef2e..04914c9dd8d 100644
--- a/apps/files/l10n/da.json
+++ b/apps/files/l10n/da.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Ugyldig mappe.",
"Files" : "Filer",
"All files" : "Alle filer",
+ "Favorites" : "Foretrukne",
+ "Home" : "Hjemme",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke upload {filename} da det er enten en mappe eller indholder 0 bytes.",
"Total file size {size1} exceeds upload limit {size2}" : "Den totale filstørrelse {size1} er større end uploadgrænsen {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Der er ikke tilstrækkeligt friplads. Du uplaoder {size1} men der er kun {size2} tilbage",
@@ -44,13 +46,13 @@
"Could not create file" : "Kunne ikke oprette fil",
"Could not create folder" : "Kunne ikke oprette mappe",
"Error fetching URL" : "Fejl ved URL",
- "Share" : "Del",
+ "Rename" : "Omdøb",
"Delete" : "Slet",
"Disconnect storage" : "Frakobl lager",
"Unshare" : "Fjern deling",
- "Delete permanently" : "Slet permanent",
- "Rename" : "Omdøb",
+ "Select" : "Vælg",
"Pending" : "Afventer",
+ "Unable to determine date" : "Kan ikke fastslå datoen",
"Error moving file." : "Fejl ved flytning af fil",
"Error moving file" : "Fejl ved flytning af fil",
"Error" : "Fejl",
@@ -69,7 +71,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} og {files}",
+ "Favorited" : "Gjort til favorit",
+ "Favorite" : "Foretrukken",
"%s could not be renamed as it has been deleted" : "%s kunne ikke omdøbes, da den er blevet slettet",
"%s could not be renamed" : "%s kunne ikke omdøbes",
"Upload (max. %s)" : "Upload (max. %s)",
@@ -77,6 +82,7 @@
"Maximum upload size" : "Maksimal upload-størrelse",
"max. possible: " : "max. mulige: ",
"Save" : "Gem",
+ "Settings" : "Indstillinger",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Brug denne adresse for at <a href=\"%s\" target=\"_blank\">tilgå dine filer via WebDAV</a>",
"New" : "Ny",
@@ -85,11 +91,17 @@
"New folder" : "Ny Mappe",
"Folder" : "Mappe",
"From link" : "Fra link",
- "Nothing in here. Upload something!" : "Her er tomt. Upload noget!",
+ "Upload" : "Upload",
+ "Cancel upload" : "Fortryd upload",
+ "No files yet" : "Endnu ingen filer",
+ "Upload some content or sync with your devices!" : "Overfør indhold eller synkronisér med dine enheder!",
+ "Select all" : "Vælg alle",
"Download" : "Download",
"Upload too large" : "Upload er for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.",
"Files are being scanned, please wait." : "Filerne bliver indlæst, vent venligst.",
- "Currently scanning" : "Indlæser"
+ "Currently scanning" : "Indlæser",
+ "No favorites" : "Ingen favoritter",
+ "Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som favoritter, vil blive vist her"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index b4ffa90c89b..ddfc8f9b597 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Favorites" : "Favoriten",
+ "Home" : "Home",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist",
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, du möchtest {size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Die Datei konnte nicht erstellt werden",
"Could not create folder" : "Der Ordner konnte nicht erstellt werden",
"Error fetching URL" : "Fehler beim Abrufen der URL",
- "Share" : "Teilen",
+ "Rename" : "Umbenennen",
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
- "Delete permanently" : "Endgültig löschen",
- "Rename" : "Umbenennen",
+ "Select" : "Auswählen",
"Pending" : "Ausstehend",
+ "Unable to determine date" : "Datum konnte nicht ermittelt werden",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
"Could not rename file" : "Die Datei konnte nicht umbenannt werden",
"Error deleting file." : "Fehler beim Löschen der Datei.",
+ "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Name" : "Name",
"Size" : "Größe",
"Modified" : "Geändert",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melden Dich nochmals ab und wieder an.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Deine Dateien nach wie vor verschlüsselt. Bitte gehe zu Deinen persönlichen Einstellungen, um Deine Dateien zu entschlüsseln.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
+ "Favorited" : "Favorisiert",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde",
"%s could not be renamed" : "%s konnte nicht umbenannt werden",
"Upload (max. %s)" : "Hochladen (max. %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>",
"New" : "Neu",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Neuer Ordner",
"Folder" : "Ordner",
"From link" : "Von einem Link",
- "Nothing in here. Upload something!" : "Alles leer. Lade etwas hoch!",
+ "Upload" : "Hochladen",
+ "Cancel upload" : "Upload abbrechen",
+ "No files yet" : "Noch keine Dateien",
+ "Upload some content or sync with your devices!" : "Lade Inhalte hoch oder synchronisiere mit Deinen Geräten!",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner",
+ "Select all" : "Alle auswählen",
"Download" : "Herunterladen",
"Upload too large" : "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." : "Dateien werden gescannt, bitte warten.",
- "Currently scanning" : "Durchsuchen läuft"
+ "Currently scanning" : "Durchsuchen läuft",
+ "No favorites" : "Keine Favoriten",
+ "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Du als Favoriten markierst, werden hier erscheinen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 600a60ddfd7..fb9e3983ad8 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Favorites" : "Favoriten",
+ "Home" : "Home",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist",
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, du möchtest {size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
@@ -44,18 +46,19 @@
"Could not create file" : "Die Datei konnte nicht erstellt werden",
"Could not create folder" : "Der Ordner konnte nicht erstellt werden",
"Error fetching URL" : "Fehler beim Abrufen der URL",
- "Share" : "Teilen",
+ "Rename" : "Umbenennen",
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
- "Delete permanently" : "Endgültig löschen",
- "Rename" : "Umbenennen",
+ "Select" : "Auswählen",
"Pending" : "Ausstehend",
+ "Unable to determine date" : "Datum konnte nicht ermittelt werden",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
"Could not rename file" : "Die Datei konnte nicht umbenannt werden",
"Error deleting file." : "Fehler beim Löschen der Datei.",
+ "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Name" : "Name",
"Size" : "Größe",
"Modified" : "Geändert",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melden Dich nochmals ab und wieder an.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Deine Dateien nach wie vor verschlüsselt. Bitte gehe zu Deinen persönlichen Einstellungen, um Deine Dateien zu entschlüsseln.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
+ "Favorited" : "Favorisiert",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde",
"%s could not be renamed" : "%s konnte nicht umbenannt werden",
"Upload (max. %s)" : "Hochladen (max. %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>",
"New" : "Neu",
@@ -85,11 +92,18 @@
"New folder" : "Neuer Ordner",
"Folder" : "Ordner",
"From link" : "Von einem Link",
- "Nothing in here. Upload something!" : "Alles leer. Lade etwas hoch!",
+ "Upload" : "Hochladen",
+ "Cancel upload" : "Upload abbrechen",
+ "No files yet" : "Noch keine Dateien",
+ "Upload some content or sync with your devices!" : "Lade Inhalte hoch oder synchronisiere mit Deinen Geräten!",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner",
+ "Select all" : "Alle auswählen",
"Download" : "Herunterladen",
"Upload too large" : "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." : "Dateien werden gescannt, bitte warten.",
- "Currently scanning" : "Durchsuchen läuft"
+ "Currently scanning" : "Durchsuchen läuft",
+ "No favorites" : "Keine Favoriten",
+ "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Du als Favoriten markierst, werden hier erscheinen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de_AT.js b/apps/files/l10n/de_AT.js
index 00e929683cc..0d9dc1b7042 100644
--- a/apps/files/l10n/de_AT.js
+++ b/apps/files/l10n/de_AT.js
@@ -2,14 +2,15 @@ OC.L10N.register(
"files",
{
"Files" : "Dateien",
- "Share" : "Freigeben",
"Delete" : "Löschen",
"Unshare" : "Teilung zurücknehmen",
"Error" : "Fehler",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "Speichern",
+ "Settings" : "Einstellungen",
"Download" : "Herunterladen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de_AT.json b/apps/files/l10n/de_AT.json
index 190e5c1d3b1..957de19a535 100644
--- a/apps/files/l10n/de_AT.json
+++ b/apps/files/l10n/de_AT.json
@@ -1,13 +1,14 @@
{ "translations": {
"Files" : "Dateien",
- "Share" : "Freigeben",
"Delete" : "Löschen",
"Unshare" : "Teilung zurücknehmen",
"Error" : "Fehler",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "Speichern",
+ "Settings" : "Einstellungen",
"Download" : "Herunterladen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 3e64aa3c990..65789545c39 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Favorites" : "Favoriten",
+ "Home" : "Zuhause",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist",
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, Sie möchten {size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Die Datei konnte nicht erstellt werden",
"Could not create folder" : "Der Ordner konnte nicht erstellt werden",
"Error fetching URL" : "Fehler beim Abrufen der URL",
- "Share" : "Teilen",
+ "Rename" : "Umbenennen",
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
- "Delete permanently" : "Endgültig löschen",
- "Rename" : "Umbenennen",
+ "Select" : "Auswählen",
"Pending" : "Ausstehend",
+ "Unable to determine date" : "Datum konnte nicht ermittelt werden",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
"Could not rename file" : "Die Datei konnte nicht umbenannt werden",
"Error deleting file." : "Fehler beim Löschen der Datei.",
+ "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Name" : "Name",
"Size" : "Größe",
"Modified" : "Geändert",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie sich nochmals ab und wieder an.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
+ "Favorited" : "Favorisiert",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde",
"%s could not be renamed" : "%s konnte nicht umbenannt werden",
"Upload (max. %s)" : "Hochladen (max. %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>",
"New" : "Neu",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Neuer Ordner",
"Folder" : "Ordner",
"From link" : "Von einem Link",
- "Nothing in here. Upload something!" : "Alles leer. Laden Sie etwas hoch!",
+ "Upload" : "Hochladen",
+ "Cancel upload" : "Upload abbrechen",
+ "No files yet" : "Noch keine Dateien",
+ "Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
+ "Select all" : "Alle auswählen",
"Download" : "Herunterladen",
"Upload too large" : "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." : "Dateien werden gescannt, bitte warten.",
- "Currently scanning" : "Durchsuchen läuft"
+ "Currently scanning" : "Durchsuchen läuft",
+ "No favorites" : "Keine Favoriten",
+ "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index df3433251c6..6785a72e54c 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Ungültiges Verzeichnis.",
"Files" : "Dateien",
"All files" : "Alle Dateien",
+ "Favorites" : "Favoriten",
+ "Home" : "Zuhause",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist",
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, Sie möchten {size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
@@ -44,18 +46,19 @@
"Could not create file" : "Die Datei konnte nicht erstellt werden",
"Could not create folder" : "Der Ordner konnte nicht erstellt werden",
"Error fetching URL" : "Fehler beim Abrufen der URL",
- "Share" : "Teilen",
+ "Rename" : "Umbenennen",
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
- "Delete permanently" : "Endgültig löschen",
- "Rename" : "Umbenennen",
+ "Select" : "Auswählen",
"Pending" : "Ausstehend",
+ "Unable to determine date" : "Datum konnte nicht ermittelt werden",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
"Could not rename file" : "Die Datei konnte nicht umbenannt werden",
"Error deleting file." : "Fehler beim Löschen der Datei.",
+ "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Name" : "Name",
"Size" : "Größe",
"Modified" : "Geändert",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie sich nochmals ab und wieder an.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
+ "Favorited" : "Favorisiert",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde",
"%s could not be renamed" : "%s konnte nicht umbenannt werden",
"Upload (max. %s)" : "Hochladen (max. %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>",
"New" : "Neu",
@@ -85,11 +92,18 @@
"New folder" : "Neuer Ordner",
"Folder" : "Ordner",
"From link" : "Von einem Link",
- "Nothing in here. Upload something!" : "Alles leer. Laden Sie etwas hoch!",
+ "Upload" : "Hochladen",
+ "Cancel upload" : "Upload abbrechen",
+ "No files yet" : "Noch keine Dateien",
+ "Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
+ "Select all" : "Alle auswählen",
"Download" : "Herunterladen",
"Upload too large" : "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." : "Dateien werden gescannt, bitte warten.",
- "Currently scanning" : "Durchsuchen läuft"
+ "Currently scanning" : "Durchsuchen läuft",
+ "No favorites" : "Keine Favoriten",
+ "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index eaf4eb65ebd..68e56a761fd 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Μη έγκυρος φάκελος.",
"Files" : "Αρχεία",
"All files" : "Όλα τα αρχεία",
+ "Favorites" : "Αγαπημένες",
+ "Home" : "Σπίτι",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Αδυναμία φόρτωσης {filename} καθώς είναι κατάλογος αρχείων ή έχει 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Δεν υπάρχει αρκετός ελεύθερος χώρος, μεταφορτώνετε μέγεθος {size1} αλλά υπάρχει χώρος μόνο {size2}",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Αδυναμία δημιουργίας αρχείου",
"Could not create folder" : "Αδυναμία δημιουργίας φακέλου",
"Error fetching URL" : "Σφάλμα φόρτωσης URL",
- "Share" : "Διαμοιρασμός",
+ "Rename" : "Μετονομασία",
"Delete" : "Διαγραφή",
"Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
"Unshare" : "Διακοπή διαμοιρασμού",
- "Delete permanently" : "Μόνιμη διαγραφή",
- "Rename" : "Μετονομασία",
+ "Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
"Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.",
"Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}",
+ "Favorite" : "Αγαπημένο",
"%s could not be renamed as it has been deleted" : "%s δεν μπορούσε να μετονομαστεί εφόσον είχε διαγραφεί",
"%s could not be renamed" : "Αδυναμία μετονομασίας του %s",
"Upload (max. %s)" : "Διαμοιρασμός (max. %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Μέγιστο μέγεθος αποστολής",
"max. possible: " : "μέγιστο δυνατό:",
"Save" : "Αποθήκευση",
+ "Settings" : "Ρυθμίσεις",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτήν την διεύθυνση για να αποκτήσετε <a href=\"%s\" target=\"_blank\">πρόσβαση στα αρχεία σας μέσω WebDAV</a>",
"New" : "Νέο",
@@ -87,7 +91,9 @@ OC.L10N.register(
"New folder" : "Νέος κατάλογος",
"Folder" : "Φάκελος",
"From link" : "Από σύνδεσμο",
- "Nothing in here. Upload something!" : "Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!",
+ "Upload" : "Μεταφόρτωση",
+ "Cancel upload" : "Ακύρωση μεταφόρτωσης",
+ "Select all" : "Επιλογή όλων",
"Download" : "Λήψη",
"Upload too large" : "Πολύ μεγάλο αρχείο προς αποστολή",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή.",
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index 5c9b763b5e1..d84ce3d14ff 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Μη έγκυρος φάκελος.",
"Files" : "Αρχεία",
"All files" : "Όλα τα αρχεία",
+ "Favorites" : "Αγαπημένες",
+ "Home" : "Σπίτι",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Αδυναμία φόρτωσης {filename} καθώς είναι κατάλογος αρχείων ή έχει 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Δεν υπάρχει αρκετός ελεύθερος χώρος, μεταφορτώνετε μέγεθος {size1} αλλά υπάρχει χώρος μόνο {size2}",
@@ -44,12 +46,11 @@
"Could not create file" : "Αδυναμία δημιουργίας αρχείου",
"Could not create folder" : "Αδυναμία δημιουργίας φακέλου",
"Error fetching URL" : "Σφάλμα φόρτωσης URL",
- "Share" : "Διαμοιρασμός",
+ "Rename" : "Μετονομασία",
"Delete" : "Διαγραφή",
"Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
"Unshare" : "Διακοπή διαμοιρασμού",
- "Delete permanently" : "Μόνιμη διαγραφή",
- "Rename" : "Μετονομασία",
+ "Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
"Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.",
"Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}",
+ "Favorite" : "Αγαπημένο",
"%s could not be renamed as it has been deleted" : "%s δεν μπορούσε να μετονομαστεί εφόσον είχε διαγραφεί",
"%s could not be renamed" : "Αδυναμία μετονομασίας του %s",
"Upload (max. %s)" : "Διαμοιρασμός (max. %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Μέγιστο μέγεθος αποστολής",
"max. possible: " : "μέγιστο δυνατό:",
"Save" : "Αποθήκευση",
+ "Settings" : "Ρυθμίσεις",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτήν την διεύθυνση για να αποκτήσετε <a href=\"%s\" target=\"_blank\">πρόσβαση στα αρχεία σας μέσω WebDAV</a>",
"New" : "Νέο",
@@ -85,7 +89,9 @@
"New folder" : "Νέος κατάλογος",
"Folder" : "Φάκελος",
"From link" : "Από σύνδεσμο",
- "Nothing in here. Upload something!" : "Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!",
+ "Upload" : "Μεταφόρτωση",
+ "Cancel upload" : "Ακύρωση μεταφόρτωσης",
+ "Select all" : "Επιλογή όλων",
"Download" : "Λήψη",
"Upload too large" : "Πολύ μεγάλο αρχείο προς αποστολή",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή.",
diff --git a/apps/files/l10n/en@pirate.js b/apps/files/l10n/en@pirate.js
index 92b310a0964..dcea419024a 100644
--- a/apps/files/l10n/en@pirate.js
+++ b/apps/files/l10n/en@pirate.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Download" : "Download"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/en@pirate.json b/apps/files/l10n/en@pirate.json
index 9d489a29829..e5f11e5504c 100644
--- a/apps/files/l10n/en@pirate.json
+++ b/apps/files/l10n/en@pirate.json
@@ -2,6 +2,7 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Download" : "Download"
},"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 494358d3363..526aa2f2bb5 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Invalid directory.",
"Files" : "Files",
"All files" : "All files",
+ "Favorites" : "Favourites",
+ "Home" : "Home",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Unable to upload {filename} as it is a directory or has 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Total file size {size1} exceeds upload limit {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Not enough free space, you are uploading {size1} but only {size2} is left",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Could not create file",
"Could not create folder" : "Could not create folder",
"Error fetching URL" : "Error fetching URL",
- "Share" : "Share",
+ "Rename" : "Rename",
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
- "Delete permanently" : "Delete permanently",
- "Rename" : "Rename",
+ "Select" : "Select",
"Pending" : "Pending",
+ "Unable to determine date" : "Unable to determine date",
"Error moving file." : "Error moving file.",
"Error moving file" : "Error moving file",
"Error" : "Error",
"Could not rename file" : "Could not rename file",
"Error deleting file." : "Error deleting file.",
+ "No entries in this folder match '{filter}'" : "No entries in this folder match '{filter}'",
"Name" : "Name",
"Size" : "Size",
"Modified" : "Modified",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [" matches '{filter}'"," match '{filter}'"],
"{dirs} and {files}" : "{dirs} and {files}",
+ "Favorited" : "Favourited",
+ "Favorite" : "Favourite",
"%s could not be renamed as it has been deleted" : "%s could not be renamed as it has been deleted",
"%s could not be renamed" : "%s could not be renamed",
"Upload (max. %s)" : "Upload (max. %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximum upload size",
"max. possible: " : "max. possible: ",
"Save" : "Save",
+ "Settings" : "Settings",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>",
"New" : "New",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "New folder",
"Folder" : "Folder",
"From link" : "From link",
- "Nothing in here. Upload something!" : "Nothing in here. Upload something!",
+ "Upload" : "Upload",
+ "Cancel upload" : "Cancel upload",
+ "No files yet" : "No files yet",
+ "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
+ "No entries found in this folder" : "No entries found in this folder",
+ "Select all" : "Select all",
"Download" : "Download",
"Upload too large" : "Upload too large",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "The files you are trying to upload exceed the maximum size for file uploads on this server.",
"Files are being scanned, please wait." : "Files are being scanned, please wait.",
- "Currently scanning" : "Currently scanning"
+ "Currently scanning" : "Currently scanning",
+ "No favorites" : "No favourites",
+ "Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index bdda9bf4faf..f494726e425 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Invalid directory.",
"Files" : "Files",
"All files" : "All files",
+ "Favorites" : "Favourites",
+ "Home" : "Home",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Unable to upload {filename} as it is a directory or has 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Total file size {size1} exceeds upload limit {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Not enough free space, you are uploading {size1} but only {size2} is left",
@@ -44,18 +46,19 @@
"Could not create file" : "Could not create file",
"Could not create folder" : "Could not create folder",
"Error fetching URL" : "Error fetching URL",
- "Share" : "Share",
+ "Rename" : "Rename",
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
- "Delete permanently" : "Delete permanently",
- "Rename" : "Rename",
+ "Select" : "Select",
"Pending" : "Pending",
+ "Unable to determine date" : "Unable to determine date",
"Error moving file." : "Error moving file.",
"Error moving file" : "Error moving file",
"Error" : "Error",
"Could not rename file" : "Could not rename file",
"Error deleting file." : "Error deleting file.",
+ "No entries in this folder match '{filter}'" : "No entries in this folder match '{filter}'",
"Name" : "Name",
"Size" : "Size",
"Modified" : "Modified",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [" matches '{filter}'"," match '{filter}'"],
"{dirs} and {files}" : "{dirs} and {files}",
+ "Favorited" : "Favourited",
+ "Favorite" : "Favourite",
"%s could not be renamed as it has been deleted" : "%s could not be renamed as it has been deleted",
"%s could not be renamed" : "%s could not be renamed",
"Upload (max. %s)" : "Upload (max. %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Maximum upload size",
"max. possible: " : "max. possible: ",
"Save" : "Save",
+ "Settings" : "Settings",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>",
"New" : "New",
@@ -85,11 +92,18 @@
"New folder" : "New folder",
"Folder" : "Folder",
"From link" : "From link",
- "Nothing in here. Upload something!" : "Nothing in here. Upload something!",
+ "Upload" : "Upload",
+ "Cancel upload" : "Cancel upload",
+ "No files yet" : "No files yet",
+ "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
+ "No entries found in this folder" : "No entries found in this folder",
+ "Select all" : "Select all",
"Download" : "Download",
"Upload too large" : "Upload too large",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "The files you are trying to upload exceed the maximum size for file uploads on this server.",
"Files are being scanned, please wait." : "Files are being scanned, please wait.",
- "Currently scanning" : "Currently scanning"
+ "Currently scanning" : "Currently scanning",
+ "No favorites" : "No favourites",
+ "Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/en_NZ.js b/apps/files/l10n/en_NZ.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/en_NZ.js
+++ b/apps/files/l10n/en_NZ.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/en_NZ.json b/apps/files/l10n/en_NZ.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/en_NZ.json
+++ b/apps/files/l10n/en_NZ.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js
index 43acaae6ba4..67991c769ea 100644
--- a/apps/files/l10n/eo.js
+++ b/apps/files/l10n/eo.js
@@ -26,6 +26,8 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "La alŝuto malsukcesis. Ne povis ekhaviĝi informo pri dosiero.",
"Invalid directory." : "Nevalida dosierujo.",
"Files" : "Dosieroj",
+ "Favorites" : "Favoratoj",
+ "Home" : "Hejmo",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne povis alŝutiĝi {filename} ĉar ĝi estas dosierujo aŭ ĝi havas 0 duumokojn",
"Upload cancelled." : "La alŝuto nuliĝis.",
"Could not get result from server." : "Ne povis ekhaviĝi rezulto el la servilo.",
@@ -34,11 +36,10 @@ OC.L10N.register(
"{new_name} already exists" : "{new_name} jam ekzistas",
"Could not create file" : "Ne povis kreiĝi dosiero",
"Could not create folder" : "Ne povis kreiĝi dosierujo",
- "Share" : "Kunhavigi",
+ "Rename" : "Alinomigi",
"Delete" : "Forigi",
"Unshare" : "Malkunhavigi",
- "Delete permanently" : "Forigi por ĉiam",
- "Rename" : "Alinomigi",
+ "Select" : "Elekti",
"Pending" : "Traktotaj",
"Error moving file" : "Eraris movo de dosiero",
"Error" : "Eraro",
@@ -52,20 +53,24 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Alŝutatas %n dosiero","Alŝutatas %n dosieroj"],
"Your storage is full, files can not be updated or synced anymore!" : "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!",
"Your storage is almost full ({usedSpacePercent}%)" : "Via memoro preskaŭ plenas ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} kaj {files}",
+ "Favorite" : "Favorato",
"%s could not be renamed" : "%s ne povis alinomiĝi",
"Upload (max. %s)" : "Alŝuti (maks. %s)",
"File handling" : "Dosieradministro",
"Maximum upload size" : "Maksimuma alŝutogrando",
"max. possible: " : "maks. ebla: ",
"Save" : "Konservi",
+ "Settings" : "Agordo",
"WebDAV" : "WebDAV",
"New" : "Nova",
"Text file" : "Tekstodosiero",
"New folder" : "Nova dosierujo",
"Folder" : "Dosierujo",
"From link" : "El ligilo",
- "Nothing in here. Upload something!" : "Nenio estas ĉi tie. Alŝutu ion!",
+ "Upload" : "Alŝuti",
+ "Cancel upload" : "Nuligi alŝuton",
"Download" : "Elŝuti",
"Upload too large" : "Alŝuto tro larĝa",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json
index 96338a90c11..18bd4da5d91 100644
--- a/apps/files/l10n/eo.json
+++ b/apps/files/l10n/eo.json
@@ -24,6 +24,8 @@
"Upload failed. Could not get file info." : "La alŝuto malsukcesis. Ne povis ekhaviĝi informo pri dosiero.",
"Invalid directory." : "Nevalida dosierujo.",
"Files" : "Dosieroj",
+ "Favorites" : "Favoratoj",
+ "Home" : "Hejmo",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne povis alŝutiĝi {filename} ĉar ĝi estas dosierujo aŭ ĝi havas 0 duumokojn",
"Upload cancelled." : "La alŝuto nuliĝis.",
"Could not get result from server." : "Ne povis ekhaviĝi rezulto el la servilo.",
@@ -32,11 +34,10 @@
"{new_name} already exists" : "{new_name} jam ekzistas",
"Could not create file" : "Ne povis kreiĝi dosiero",
"Could not create folder" : "Ne povis kreiĝi dosierujo",
- "Share" : "Kunhavigi",
+ "Rename" : "Alinomigi",
"Delete" : "Forigi",
"Unshare" : "Malkunhavigi",
- "Delete permanently" : "Forigi por ĉiam",
- "Rename" : "Alinomigi",
+ "Select" : "Elekti",
"Pending" : "Traktotaj",
"Error moving file" : "Eraris movo de dosiero",
"Error" : "Eraro",
@@ -50,20 +51,24 @@
"_Uploading %n file_::_Uploading %n files_" : ["Alŝutatas %n dosiero","Alŝutatas %n dosieroj"],
"Your storage is full, files can not be updated or synced anymore!" : "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!",
"Your storage is almost full ({usedSpacePercent}%)" : "Via memoro preskaŭ plenas ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} kaj {files}",
+ "Favorite" : "Favorato",
"%s could not be renamed" : "%s ne povis alinomiĝi",
"Upload (max. %s)" : "Alŝuti (maks. %s)",
"File handling" : "Dosieradministro",
"Maximum upload size" : "Maksimuma alŝutogrando",
"max. possible: " : "maks. ebla: ",
"Save" : "Konservi",
+ "Settings" : "Agordo",
"WebDAV" : "WebDAV",
"New" : "Nova",
"Text file" : "Tekstodosiero",
"New folder" : "Nova dosierujo",
"Folder" : "Dosierujo",
"From link" : "El ligilo",
- "Nothing in here. Upload something!" : "Nenio estas ĉi tie. Alŝutu ion!",
+ "Upload" : "Alŝuti",
+ "Cancel upload" : "Nuligi alŝuton",
"Download" : "Elŝuti",
"Upload too large" : "Alŝuto tro larĝa",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 0e1ac9aede9..3eacdc8261d 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Directorio inválido.",
"Files" : "Archivos",
"All files" : "Todos los archivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Particular",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "El tamaño total del archivo {size1} excede el límite {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hay suficiente espacio libre. Quiere subir {size1} pero solo quedan {size2}",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "No se pudo crear el archivo",
"Could not create folder" : "No se pudo crear la carpeta",
"Error fetching URL" : "Error al descargar URL.",
- "Share" : "Compartir",
+ "Rename" : "Renombrar",
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar almacenamiento",
"Unshare" : "Dejar de compartir",
- "Delete permanently" : "Eliminar permanentemente",
- "Rename" : "Renombrar",
+ "Select" : "Seleccionar",
"Pending" : "Pendiente",
+ "Unable to determine date" : "No se pudo determinar la fecha",
"Error moving file." : "Error al mover el archivo.",
"Error moving file" : "Error moviendo archivo",
"Error" : "Error",
"Could not rename file" : "No se pudo renombrar el archivo",
"Error deleting file." : "Error al borrar el archivo",
+ "No entries in this folder match '{filter}'" : "No hay resultados que coincidan con '{filter}'",
"Name" : "Nombre",
"Size" : "Tamaño",
"Modified" : "Modificado",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["coinciden '{filter}'","coincide '{filter}'"],
"{dirs} and {files}" : "{dirs} y {files}",
+ "Favorited" : "Agregado a favoritos",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "%s no se pudo renombrar pues ha sido eliminado",
"%s could not be renamed" : "%s no pudo ser renombrado",
"Upload (max. %s)" : "Subida (máx. %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Ajustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>",
"New" : "Nuevo",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Nueva carpeta",
"Folder" : "Carpeta",
"From link" : "Desde enlace",
- "Nothing in here. Upload something!" : "No hay nada aquí. ¡Suba algo!",
+ "Upload" : "Subir",
+ "Cancel upload" : "Cancelar subida",
+ "No files yet" : "Aún no hay archivos",
+ "Upload some content or sync with your devices!" : "Suba contenidos o sincronice sus dispositivos.",
+ "No entries found in this folder" : "No hay entradas en esta carpeta",
+ "Select all" : "Seleccionar todo",
"Download" : "Descargar",
"Upload too large" : "Subida demasido grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
"Files are being scanned, please wait." : "Los archivos están siendo escaneados, por favor espere.",
- "Currently scanning" : "Escaneando en este momento"
+ "Currently scanning" : "Escaneando en este momento",
+ "No favorites" : "No hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que usted marque como favoritos"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 5b45a869b54..bb1828236ae 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Directorio inválido.",
"Files" : "Archivos",
"All files" : "Todos los archivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Particular",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "El tamaño total del archivo {size1} excede el límite {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hay suficiente espacio libre. Quiere subir {size1} pero solo quedan {size2}",
@@ -44,18 +46,19 @@
"Could not create file" : "No se pudo crear el archivo",
"Could not create folder" : "No se pudo crear la carpeta",
"Error fetching URL" : "Error al descargar URL.",
- "Share" : "Compartir",
+ "Rename" : "Renombrar",
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar almacenamiento",
"Unshare" : "Dejar de compartir",
- "Delete permanently" : "Eliminar permanentemente",
- "Rename" : "Renombrar",
+ "Select" : "Seleccionar",
"Pending" : "Pendiente",
+ "Unable to determine date" : "No se pudo determinar la fecha",
"Error moving file." : "Error al mover el archivo.",
"Error moving file" : "Error moviendo archivo",
"Error" : "Error",
"Could not rename file" : "No se pudo renombrar el archivo",
"Error deleting file." : "Error al borrar el archivo",
+ "No entries in this folder match '{filter}'" : "No hay resultados que coincidan con '{filter}'",
"Name" : "Nombre",
"Size" : "Tamaño",
"Modified" : "Modificado",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["coinciden '{filter}'","coincide '{filter}'"],
"{dirs} and {files}" : "{dirs} y {files}",
+ "Favorited" : "Agregado a favoritos",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "%s no se pudo renombrar pues ha sido eliminado",
"%s could not be renamed" : "%s no pudo ser renombrado",
"Upload (max. %s)" : "Subida (máx. %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Ajustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>",
"New" : "Nuevo",
@@ -85,11 +92,18 @@
"New folder" : "Nueva carpeta",
"Folder" : "Carpeta",
"From link" : "Desde enlace",
- "Nothing in here. Upload something!" : "No hay nada aquí. ¡Suba algo!",
+ "Upload" : "Subir",
+ "Cancel upload" : "Cancelar subida",
+ "No files yet" : "Aún no hay archivos",
+ "Upload some content or sync with your devices!" : "Suba contenidos o sincronice sus dispositivos.",
+ "No entries found in this folder" : "No hay entradas en esta carpeta",
+ "Select all" : "Seleccionar todo",
"Download" : "Descargar",
"Upload too large" : "Subida demasido grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
"Files are being scanned, please wait." : "Los archivos están siendo escaneados, por favor espere.",
- "Currently scanning" : "Escaneando en este momento"
+ "Currently scanning" : "Escaneando en este momento",
+ "No favorites" : "No hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que usted marque como favoritos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_AR.js b/apps/files/l10n/es_AR.js
index fd9f9bd05e1..053f3bfbf01 100644
--- a/apps/files/l10n/es_AR.js
+++ b/apps/files/l10n/es_AR.js
@@ -28,6 +28,8 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "Falló la carga. No se pudo obtener la información del archivo.",
"Invalid directory." : "Directorio inválido.",
"Files" : "Archivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Particular",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Imposible cargar {filename} puesto que es un directoro o tiene 0 bytes.",
"Upload cancelled." : "La subida fue cancelada",
"Could not get result from server." : "No se pudo obtener resultados del servidor.",
@@ -37,11 +39,10 @@ OC.L10N.register(
"Could not create file" : "No se pudo crear el archivo",
"Could not create folder" : "No se pudo crear el directorio",
"Error fetching URL" : "Error al obtener la URL",
- "Share" : "Compartir",
+ "Rename" : "Cambiar nombre",
"Delete" : "Borrar",
"Unshare" : "Dejar de compartir",
- "Delete permanently" : "Borrar permanentemente",
- "Rename" : "Cambiar nombre",
+ "Select" : "Seleccionar",
"Pending" : "Pendientes",
"Error moving file" : "Error moviendo el archivo",
"Error" : "Error",
@@ -59,12 +60,15 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{carpetas} y {archivos}",
+ "Favorite" : "Favorito",
"%s could not be renamed" : "No se pudo renombrar %s",
"File handling" : "Tratamiento de archivos",
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Configuración",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usar esta dirección para <a href=\"%s\" target=\"_blank\">acceder a tus archivos vía WebDAV</a>",
"New" : "Nuevo",
@@ -73,7 +77,8 @@ OC.L10N.register(
"New folder" : "Nueva Carpeta",
"Folder" : "Carpeta",
"From link" : "Desde enlace",
- "Nothing in here. Upload something!" : "No hay nada. ¡Subí contenido!",
+ "Upload" : "Subir",
+ "Cancel upload" : "Cancelar subida",
"Download" : "Descargar",
"Upload too large" : "El tamaño del archivo que querés subir es demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que intentás subir sobrepasan el tamaño máximo ",
diff --git a/apps/files/l10n/es_AR.json b/apps/files/l10n/es_AR.json
index aa701390e68..16079c8feb6 100644
--- a/apps/files/l10n/es_AR.json
+++ b/apps/files/l10n/es_AR.json
@@ -26,6 +26,8 @@
"Upload failed. Could not get file info." : "Falló la carga. No se pudo obtener la información del archivo.",
"Invalid directory." : "Directorio inválido.",
"Files" : "Archivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Particular",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Imposible cargar {filename} puesto que es un directoro o tiene 0 bytes.",
"Upload cancelled." : "La subida fue cancelada",
"Could not get result from server." : "No se pudo obtener resultados del servidor.",
@@ -35,11 +37,10 @@
"Could not create file" : "No se pudo crear el archivo",
"Could not create folder" : "No se pudo crear el directorio",
"Error fetching URL" : "Error al obtener la URL",
- "Share" : "Compartir",
+ "Rename" : "Cambiar nombre",
"Delete" : "Borrar",
"Unshare" : "Dejar de compartir",
- "Delete permanently" : "Borrar permanentemente",
- "Rename" : "Cambiar nombre",
+ "Select" : "Seleccionar",
"Pending" : "Pendientes",
"Error moving file" : "Error moviendo el archivo",
"Error" : "Error",
@@ -57,12 +58,15 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{carpetas} y {archivos}",
+ "Favorite" : "Favorito",
"%s could not be renamed" : "No se pudo renombrar %s",
"File handling" : "Tratamiento de archivos",
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Configuración",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usar esta dirección para <a href=\"%s\" target=\"_blank\">acceder a tus archivos vía WebDAV</a>",
"New" : "Nuevo",
@@ -71,7 +75,8 @@
"New folder" : "Nueva Carpeta",
"Folder" : "Carpeta",
"From link" : "Desde enlace",
- "Nothing in here. Upload something!" : "No hay nada. ¡Subí contenido!",
+ "Upload" : "Subir",
+ "Cancel upload" : "Cancelar subida",
"Download" : "Descargar",
"Upload too large" : "El tamaño del archivo que querés subir es demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que intentás subir sobrepasan el tamaño máximo ",
diff --git a/apps/files/l10n/es_BO.js b/apps/files/l10n/es_BO.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/es_BO.js
+++ b/apps/files/l10n/es_BO.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_BO.json b/apps/files/l10n/es_BO.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/es_BO.json
+++ b/apps/files/l10n/es_BO.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_CL.js b/apps/files/l10n/es_CL.js
index 7a6f60c2961..e919f070a71 100644
--- a/apps/files/l10n/es_CL.js
+++ b/apps/files/l10n/es_CL.js
@@ -3,13 +3,16 @@ OC.L10N.register(
{
"Unknown error" : "Error desconocido",
"Files" : "Archivos",
- "Share" : "Compartir",
"Rename" : "Renombrar",
"Error" : "Error",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "Configuración",
"New folder" : "Nuevo directorio",
+ "Upload" : "Subir",
+ "Cancel upload" : "cancelar subida",
"Download" : "Descargar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_CL.json b/apps/files/l10n/es_CL.json
index bb2cd206077..1fb55eeee8c 100644
--- a/apps/files/l10n/es_CL.json
+++ b/apps/files/l10n/es_CL.json
@@ -1,13 +1,16 @@
{ "translations": {
"Unknown error" : "Error desconocido",
"Files" : "Archivos",
- "Share" : "Compartir",
"Rename" : "Renombrar",
"Error" : "Error",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "Configuración",
"New folder" : "Nuevo directorio",
+ "Upload" : "Subir",
+ "Cancel upload" : "cancelar subida",
"Download" : "Descargar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_CO.js b/apps/files/l10n/es_CO.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/es_CO.js
+++ b/apps/files/l10n/es_CO.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_CO.json b/apps/files/l10n/es_CO.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/es_CO.json
+++ b/apps/files/l10n/es_CO.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_CR.js b/apps/files/l10n/es_CR.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/es_CR.js
+++ b/apps/files/l10n/es_CR.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_CR.json b/apps/files/l10n/es_CR.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/es_CR.json
+++ b/apps/files/l10n/es_CR.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_EC.js b/apps/files/l10n/es_EC.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/es_EC.js
+++ b/apps/files/l10n/es_EC.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_EC.json b/apps/files/l10n/es_EC.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/es_EC.json
+++ b/apps/files/l10n/es_EC.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index 9d353e84a25..710ddaf9e02 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -28,6 +28,8 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "Actualización fallida. No se pudo obtener información del archivo.",
"Invalid directory." : "Directorio inválido.",
"Files" : "Archivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Particular",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes",
"Upload cancelled." : "Subida cancelada.",
"Could not get result from server." : "No se pudo obtener respuesta del servidor.",
@@ -37,11 +39,9 @@ OC.L10N.register(
"Could not create file" : "No se pudo crear el archivo",
"Could not create folder" : "No se pudo crear la carpeta",
"Error fetching URL" : "Error al descargar URL.",
- "Share" : "Compartir",
+ "Rename" : "Renombrar",
"Delete" : "Eliminar",
"Unshare" : "Dejar de compartir",
- "Delete permanently" : "Eliminar permanentemente",
- "Rename" : "Renombrar",
"Pending" : "Pendiente",
"Error moving file" : "Error moviendo archivo",
"Error" : "Error",
@@ -59,12 +59,15 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} y {files}",
+ "Favorite" : "Favorito",
"%s could not be renamed" : "%s no pudo ser renombrado",
"File handling" : "Administración de archivos",
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Ajustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilice esta dirección para <a href=\"%s\" target=\"_blank\">acceder a sus archivos vía WebDAV</a>",
"New" : "Nuevo",
@@ -73,7 +76,8 @@ OC.L10N.register(
"New folder" : "Nueva carpeta",
"Folder" : "Carpeta",
"From link" : "Desde enlace",
- "Nothing in here. Upload something!" : "No hay nada aquí. ¡Suba algo!",
+ "Upload" : "Subir archivo",
+ "Cancel upload" : "Cancelar subida",
"Download" : "Descargar",
"Upload too large" : "Subida demasido grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index f08223b70c7..a12416a339b 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -26,6 +26,8 @@
"Upload failed. Could not get file info." : "Actualización fallida. No se pudo obtener información del archivo.",
"Invalid directory." : "Directorio inválido.",
"Files" : "Archivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Particular",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes",
"Upload cancelled." : "Subida cancelada.",
"Could not get result from server." : "No se pudo obtener respuesta del servidor.",
@@ -35,11 +37,9 @@
"Could not create file" : "No se pudo crear el archivo",
"Could not create folder" : "No se pudo crear la carpeta",
"Error fetching URL" : "Error al descargar URL.",
- "Share" : "Compartir",
+ "Rename" : "Renombrar",
"Delete" : "Eliminar",
"Unshare" : "Dejar de compartir",
- "Delete permanently" : "Eliminar permanentemente",
- "Rename" : "Renombrar",
"Pending" : "Pendiente",
"Error moving file" : "Error moviendo archivo",
"Error" : "Error",
@@ -57,12 +57,15 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} y {files}",
+ "Favorite" : "Favorito",
"%s could not be renamed" : "%s no pudo ser renombrado",
"File handling" : "Administración de archivos",
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Settings" : "Ajustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilice esta dirección para <a href=\"%s\" target=\"_blank\">acceder a sus archivos vía WebDAV</a>",
"New" : "Nuevo",
@@ -71,7 +74,8 @@
"New folder" : "Nueva carpeta",
"Folder" : "Carpeta",
"From link" : "Desde enlace",
- "Nothing in here. Upload something!" : "No hay nada aquí. ¡Suba algo!",
+ "Upload" : "Subir archivo",
+ "Cancel upload" : "Cancelar subida",
"Download" : "Descargar",
"Upload too large" : "Subida demasido grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
diff --git a/apps/files/l10n/es_PE.js b/apps/files/l10n/es_PE.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/es_PE.js
+++ b/apps/files/l10n/es_PE.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_PE.json b/apps/files/l10n/es_PE.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/es_PE.json
+++ b/apps/files/l10n/es_PE.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_PY.js b/apps/files/l10n/es_PY.js
index 8a7f665016d..436cba0b2a1 100644
--- a/apps/files/l10n/es_PY.js
+++ b/apps/files/l10n/es_PY.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"Files" : "Archivos",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_PY.json b/apps/files/l10n/es_PY.json
index 85d1fa4e4c0..b5b022f5c0e 100644
--- a/apps/files/l10n/es_PY.json
+++ b/apps/files/l10n/es_PY.json
@@ -2,6 +2,7 @@
"Files" : "Archivos",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_US.js b/apps/files/l10n/es_US.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/es_US.js
+++ b/apps/files/l10n/es_US.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_US.json b/apps/files/l10n/es_US.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/es_US.json
+++ b/apps/files/l10n/es_US.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_UY.js b/apps/files/l10n/es_UY.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/es_UY.js
+++ b/apps/files/l10n/es_UY.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_UY.json b/apps/files/l10n/es_UY.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/es_UY.json
+++ b/apps/files/l10n/es_UY.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js
index 0ffbb81f63c..e0718bd443c 100644
--- a/apps/files/l10n/et_EE.js
+++ b/apps/files/l10n/et_EE.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Vigane kaust.",
"Files" : "Failid",
"All files" : "Kõik failid",
+ "Favorites" : "Lemmikud",
+ "Home" : "Kodu",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ei saa üles laadida {filename}, kuna see on kataloog või selle suurus on 0 baiti",
"Total file size {size1} exceeds upload limit {size2}" : "Faili suurus {size1} ületab faili üleslaadimise mahu piirangu {size2}.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Pole piisavalt vaba ruumi. Sa laadid üles {size1}, kuid ainult {size2} on saadaval.",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Ei suuda luua faili",
"Could not create folder" : "Ei suuda luua kataloogi",
"Error fetching URL" : "Viga URL-i haaramisel",
- "Share" : "Jaga",
+ "Rename" : "Nimeta ümber",
"Delete" : "Kustuta",
"Disconnect storage" : "Ühenda andmehoidla lahti.",
"Unshare" : "Lõpeta jagamine",
- "Delete permanently" : "Kustuta jäädavalt",
- "Rename" : "Nimeta ümber",
+ "Select" : "Vali",
"Pending" : "Ootel",
"Error moving file." : "Viga faili liigutamisel.",
"Error moving file" : "Viga faili eemaldamisel",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} ja {files}",
+ "Favorite" : "Lemmik",
"%s could not be renamed as it has been deleted" : "%s ei saa ümber nimetada, kuna see on kustutatud",
"%s could not be renamed" : "%s ümbernimetamine ebaõnnestus",
"Upload (max. %s)" : "Üleslaadimine (max. %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Maksimaalne üleslaadimise suurus",
"max. possible: " : "maks. võimalik: ",
"Save" : "Salvesta",
+ "Settings" : "Seaded",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>",
"New" : "Uus",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "Uus kaust",
"Folder" : "Kaust",
"From link" : "Allikast",
- "Nothing in here. Upload something!" : "Siin pole midagi. Lae midagi üles!",
+ "Upload" : "Lae üles",
+ "Cancel upload" : "Tühista üleslaadimine",
"Download" : "Lae alla",
"Upload too large" : "Üleslaadimine on liiga suur",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json
index fdb5bdcb4f2..e9a9647d96d 100644
--- a/apps/files/l10n/et_EE.json
+++ b/apps/files/l10n/et_EE.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Vigane kaust.",
"Files" : "Failid",
"All files" : "Kõik failid",
+ "Favorites" : "Lemmikud",
+ "Home" : "Kodu",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ei saa üles laadida {filename}, kuna see on kataloog või selle suurus on 0 baiti",
"Total file size {size1} exceeds upload limit {size2}" : "Faili suurus {size1} ületab faili üleslaadimise mahu piirangu {size2}.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Pole piisavalt vaba ruumi. Sa laadid üles {size1}, kuid ainult {size2} on saadaval.",
@@ -44,12 +46,11 @@
"Could not create file" : "Ei suuda luua faili",
"Could not create folder" : "Ei suuda luua kataloogi",
"Error fetching URL" : "Viga URL-i haaramisel",
- "Share" : "Jaga",
+ "Rename" : "Nimeta ümber",
"Delete" : "Kustuta",
"Disconnect storage" : "Ühenda andmehoidla lahti.",
"Unshare" : "Lõpeta jagamine",
- "Delete permanently" : "Kustuta jäädavalt",
- "Rename" : "Nimeta ümber",
+ "Select" : "Vali",
"Pending" : "Ootel",
"Error moving file." : "Viga faili liigutamisel.",
"Error moving file" : "Viga faili eemaldamisel",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} ja {files}",
+ "Favorite" : "Lemmik",
"%s could not be renamed as it has been deleted" : "%s ei saa ümber nimetada, kuna see on kustutatud",
"%s could not be renamed" : "%s ümbernimetamine ebaõnnestus",
"Upload (max. %s)" : "Üleslaadimine (max. %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Maksimaalne üleslaadimise suurus",
"max. possible: " : "maks. võimalik: ",
"Save" : "Salvesta",
+ "Settings" : "Seaded",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>",
"New" : "Uus",
@@ -85,7 +89,8 @@
"New folder" : "Uus kaust",
"Folder" : "Kaust",
"From link" : "Allikast",
- "Nothing in here. Upload something!" : "Siin pole midagi. Lae midagi üles!",
+ "Upload" : "Lae üles",
+ "Cancel upload" : "Tühista üleslaadimine",
"Download" : "Lae alla",
"Upload too large" : "Üleslaadimine on liiga suur",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index 5fb2ac32f7c..d8fc54f1d71 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Baliogabeko karpeta.",
"Files" : "Fitxategiak",
"All files" : "Fitxategi guztiak",
+ "Favorites" : "Gogokoak",
+ "Home" : "Etxekoa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} igo karpeta bat delako edo 0 byte dituelako",
"Total file size {size1} exceeds upload limit {size2}" : "Fitxategiaren tamainak {size1} igotzeko muga {size2} gainditzen du",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Ezin izan da fitxategia sortu",
"Could not create folder" : "Ezin izan da karpeta sortu",
"Error fetching URL" : "Errorea URLa eskuratzerakoan",
- "Share" : "Elkarbanatu",
+ "Rename" : "Berrizendatu",
"Delete" : "Ezabatu",
"Disconnect storage" : "Deskonektatu biltegia",
"Unshare" : "Ez elkarbanatu",
- "Delete permanently" : "Ezabatu betirako",
- "Rename" : "Berrizendatu",
+ "Select" : "hautatu",
"Pending" : "Zain",
"Error moving file." : "Errorea fitxategia mugitzean.",
"Error moving file" : "Errorea fitxategia mugitzean",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} eta {files}",
+ "Favorite" : "Gogokoa",
"%s could not be renamed as it has been deleted" : "%s ezin izan da berrizendatu ezabatua zegoen eta",
"%s could not be renamed" : "%s ezin da berrizendatu",
"Upload (max. %s)" : "Igo (max. %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Igo daitekeen gehienezko tamaina",
"max. possible: " : "max, posiblea:",
"Save" : "Gorde",
+ "Settings" : "Ezarpenak",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">helbidea erabili zure fitxategiak WebDAV bidez eskuratzeko</a>",
"New" : "Berria",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "Karpeta berria",
"Folder" : "Karpeta",
"From link" : "Estekatik",
- "Nothing in here. Upload something!" : "Ez dago ezer. Igo zerbait!",
+ "Upload" : "Igo",
+ "Cancel upload" : "Ezeztatu igoera",
"Download" : "Deskargatu",
"Upload too large" : "Igoera handiegia da",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.",
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index fadc0218477..bbbbb2ba447 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Baliogabeko karpeta.",
"Files" : "Fitxategiak",
"All files" : "Fitxategi guztiak",
+ "Favorites" : "Gogokoak",
+ "Home" : "Etxekoa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} igo karpeta bat delako edo 0 byte dituelako",
"Total file size {size1} exceeds upload limit {size2}" : "Fitxategiaren tamainak {size1} igotzeko muga {size2} gainditzen du",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago",
@@ -44,12 +46,11 @@
"Could not create file" : "Ezin izan da fitxategia sortu",
"Could not create folder" : "Ezin izan da karpeta sortu",
"Error fetching URL" : "Errorea URLa eskuratzerakoan",
- "Share" : "Elkarbanatu",
+ "Rename" : "Berrizendatu",
"Delete" : "Ezabatu",
"Disconnect storage" : "Deskonektatu biltegia",
"Unshare" : "Ez elkarbanatu",
- "Delete permanently" : "Ezabatu betirako",
- "Rename" : "Berrizendatu",
+ "Select" : "hautatu",
"Pending" : "Zain",
"Error moving file." : "Errorea fitxategia mugitzean.",
"Error moving file" : "Errorea fitxategia mugitzean",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} eta {files}",
+ "Favorite" : "Gogokoa",
"%s could not be renamed as it has been deleted" : "%s ezin izan da berrizendatu ezabatua zegoen eta",
"%s could not be renamed" : "%s ezin da berrizendatu",
"Upload (max. %s)" : "Igo (max. %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Igo daitekeen gehienezko tamaina",
"max. possible: " : "max, posiblea:",
"Save" : "Gorde",
+ "Settings" : "Ezarpenak",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">helbidea erabili zure fitxategiak WebDAV bidez eskuratzeko</a>",
"New" : "Berria",
@@ -85,7 +89,8 @@
"New folder" : "Karpeta berria",
"Folder" : "Karpeta",
"From link" : "Estekatik",
- "Nothing in here. Upload something!" : "Ez dago ezer. Igo zerbait!",
+ "Upload" : "Igo",
+ "Cancel upload" : "Ezeztatu igoera",
"Download" : "Deskargatu",
"Upload too large" : "Igoera handiegia da",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.",
diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js
index 1e403418ab1..617201108d9 100644
--- a/apps/files/l10n/fa.js
+++ b/apps/files/l10n/fa.js
@@ -19,14 +19,14 @@ OC.L10N.register(
"Not enough storage available" : "فضای کافی در دسترس نیست",
"Invalid directory." : "فهرست راهنما نامعتبر می باشد.",
"Files" : "پرونده‌ها",
+ "Favorites" : "موارد محبوب",
+ "Home" : "خانه",
"Upload cancelled." : "بار گذاری لغو شد",
"File upload is in progress. Leaving the page now will cancel the upload." : "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ",
"{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.",
- "Share" : "اشتراک‌گذاری",
+ "Rename" : "تغییرنام",
"Delete" : "حذف",
"Unshare" : "لغو اشتراک",
- "Delete permanently" : "حذف قطعی",
- "Rename" : "تغییرنام",
"Pending" : "در انتظار",
"Error" : "خطا",
"Name" : "نام",
@@ -37,11 +37,13 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"],
"Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!",
"Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"%s could not be renamed" : "%s نمیتواند تغییر نام دهد.",
"File handling" : "اداره پرونده ها",
"Maximum upload size" : "حداکثر اندازه بارگزاری",
"max. possible: " : "حداکثرمقدارممکن:",
"Save" : "ذخیره",
+ "Settings" : "تنظیمات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "از این آدرس استفاده کنید تا <a href=\"%s\" target=\"_blank\">بتوانید به فایل‌های خود توسط WebDAV دسترسی پیدا کنید</a>",
"New" : "جدید",
@@ -49,7 +51,8 @@ OC.L10N.register(
"New folder" : "پوشه جدید",
"Folder" : "پوشه",
"From link" : "از پیوند",
- "Nothing in here. Upload something!" : "اینجا هیچ چیز نیست.",
+ "Upload" : "بارگزاری",
+ "Cancel upload" : "متوقف کردن بار گذاری",
"Download" : "دانلود",
"Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد",
diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json
index 872cef839a7..9e5ae8ca3f2 100644
--- a/apps/files/l10n/fa.json
+++ b/apps/files/l10n/fa.json
@@ -17,14 +17,14 @@
"Not enough storage available" : "فضای کافی در دسترس نیست",
"Invalid directory." : "فهرست راهنما نامعتبر می باشد.",
"Files" : "پرونده‌ها",
+ "Favorites" : "موارد محبوب",
+ "Home" : "خانه",
"Upload cancelled." : "بار گذاری لغو شد",
"File upload is in progress. Leaving the page now will cancel the upload." : "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ",
"{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.",
- "Share" : "اشتراک‌گذاری",
+ "Rename" : "تغییرنام",
"Delete" : "حذف",
"Unshare" : "لغو اشتراک",
- "Delete permanently" : "حذف قطعی",
- "Rename" : "تغییرنام",
"Pending" : "در انتظار",
"Error" : "خطا",
"Name" : "نام",
@@ -35,11 +35,13 @@
"_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"],
"Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!",
"Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"%s could not be renamed" : "%s نمیتواند تغییر نام دهد.",
"File handling" : "اداره پرونده ها",
"Maximum upload size" : "حداکثر اندازه بارگزاری",
"max. possible: " : "حداکثرمقدارممکن:",
"Save" : "ذخیره",
+ "Settings" : "تنظیمات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "از این آدرس استفاده کنید تا <a href=\"%s\" target=\"_blank\">بتوانید به فایل‌های خود توسط WebDAV دسترسی پیدا کنید</a>",
"New" : "جدید",
@@ -47,7 +49,8 @@
"New folder" : "پوشه جدید",
"Folder" : "پوشه",
"From link" : "از پیوند",
- "Nothing in here. Upload something!" : "اینجا هیچ چیز نیست.",
+ "Upload" : "بارگزاری",
+ "Cancel upload" : "متوقف کردن بار گذاری",
"Download" : "دانلود",
"Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد",
diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js
new file mode 100644
index 00000000000..e71703fe357
--- /dev/null
+++ b/apps/files/l10n/fi.js
@@ -0,0 +1,17 @@
+OC.L10N.register(
+ "files",
+ {
+ "Rename" : "Nimeä uudelleen",
+ "Delete" : "Poista",
+ "Error" : "Virhe",
+ "_%n folder_::_%n folders_" : ["",""],
+ "_%n file_::_%n files_" : ["",""],
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "Favorite" : "Suosikit",
+ "Save" : "Tallenna",
+ "Settings" : "Asetukset",
+ "New folder" : "Luo kansio",
+ "Folder" : "Kansio",
+ "Upload" : "Lähetä"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json
new file mode 100644
index 00000000000..f46767e171b
--- /dev/null
+++ b/apps/files/l10n/fi.json
@@ -0,0 +1,15 @@
+{ "translations": {
+ "Rename" : "Nimeä uudelleen",
+ "Delete" : "Poista",
+ "Error" : "Virhe",
+ "_%n folder_::_%n folders_" : ["",""],
+ "_%n file_::_%n files_" : ["",""],
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "Favorite" : "Suosikit",
+ "Save" : "Tallenna",
+ "Settings" : "Asetukset",
+ "New folder" : "Luo kansio",
+ "Folder" : "Kansio",
+ "Upload" : "Lähetä"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js
index 3c94a518774..545216e04aa 100644
--- a/apps/files/l10n/fi_FI.js
+++ b/apps/files/l10n/fi_FI.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Virheellinen kansio.",
"Files" : "Tiedostot",
"All files" : "Kaikki tiedostot",
+ "Favorites" : "Suosikit",
+ "Home" : "Koti",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kohdetta {filename} ei voi lähettää, koska se on joko kansio tai sen koko on 0 tavua",
"Total file size {size1} exceeds upload limit {size2}" : "Yhteiskoko {size1} ylittää lähetysrajan {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ei riittävästi vapaata tilaa. Lähetyksesi koko on {size1}, mutta vain {size2} on jäljellä",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Tiedoston luominen epäonnistui",
"Could not create folder" : "Kansion luominen epäonnistui",
"Error fetching URL" : "Virhe noutaessa verkko-osoitetta",
- "Share" : "Jaa",
+ "Rename" : "Nimeä uudelleen",
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
- "Delete permanently" : "Poista pysyvästi",
- "Rename" : "Nimeä uudelleen",
+ "Select" : "Valitse",
"Pending" : "Odottaa",
+ "Unable to determine date" : "Päivämäärän määrittäminen epäonnistui",
"Error moving file." : "Virhe tiedostoa siirrettäessä.",
"Error moving file" : "Virhe tiedostoa siirrettäessä",
"Error" : "Virhe",
"Could not rename file" : "Tiedoston nimeäminen uudelleen epäonnistui",
"Error deleting file." : "Virhe tiedostoa poistaessa.",
+ "No entries in this folder match '{filter}'" : "Mikään tässä kansiossa ei vastaa suodatusta '{filter}'",
"Name" : "Nimi",
"Size" : "Koko",
"Modified" : "Muokattu",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Salaus poistettiin käytöstä, mutta tiedostosi ovat edelleen salattuina. Siirry henkilökohtaisiin asetuksiin avataksesi tiedostojesi salauksen.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [" vastaa suodatusta '{filter}'"," vastaa suodatusta '{filter}'"],
"{dirs} and {files}" : "{dirs} ja {files}",
+ "Favorited" : "Lisätty suosikkeihin",
+ "Favorite" : "Suosikki",
"%s could not be renamed as it has been deleted" : "Kohdetta %s ei voitu nimetä uudelleen, koska se on poistettu",
"%s could not be renamed" : "kohteen %s nimeäminen uudelleen epäonnistui",
"Upload (max. %s)" : "Lähetys (enintään %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko",
"max. possible: " : "suurin mahdollinen:",
"Save" : "Tallenna",
+ "Settings" : "Asetukset",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>",
"New" : "Uusi",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Uusi kansio",
"Folder" : "Kansio",
"From link" : "Linkistä",
- "Nothing in here. Upload something!" : "Täällä ei ole mitään. Lähetä tänne jotakin!",
+ "Upload" : "Lähetä",
+ "Cancel upload" : "Peru lähetys",
+ "No files yet" : "EI yhtäkään tiedostoa vielä",
+ "Upload some content or sync with your devices!" : "Lähetä tiedostoja tai synkronoi sisältö laitteidesi kanssa!",
+ "No entries found in this folder" : "Ei kohteita tässä kansiossa",
+ "Select all" : "Valitse kaikki",
"Download" : "Lataa",
"Upload too large" : "Lähetettävä tiedosto on liian suuri",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.",
"Files are being scanned, please wait." : "Tiedostoja tarkistetaan, odota hetki.",
- "Currently scanning" : "Tutkitaan parhaillaan"
+ "Currently scanning" : "Tutkitaan parhaillaan",
+ "No favorites" : "Ei suosikkeja",
+ "Files and folders you mark as favorite will show up here" : "Suosikeiksi merkitsemäsi tiedostot ja kansiot näkyvät täällä"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json
index 8628607793b..81fac88172d 100644
--- a/apps/files/l10n/fi_FI.json
+++ b/apps/files/l10n/fi_FI.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Virheellinen kansio.",
"Files" : "Tiedostot",
"All files" : "Kaikki tiedostot",
+ "Favorites" : "Suosikit",
+ "Home" : "Koti",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kohdetta {filename} ei voi lähettää, koska se on joko kansio tai sen koko on 0 tavua",
"Total file size {size1} exceeds upload limit {size2}" : "Yhteiskoko {size1} ylittää lähetysrajan {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ei riittävästi vapaata tilaa. Lähetyksesi koko on {size1}, mutta vain {size2} on jäljellä",
@@ -44,18 +46,19 @@
"Could not create file" : "Tiedoston luominen epäonnistui",
"Could not create folder" : "Kansion luominen epäonnistui",
"Error fetching URL" : "Virhe noutaessa verkko-osoitetta",
- "Share" : "Jaa",
+ "Rename" : "Nimeä uudelleen",
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
- "Delete permanently" : "Poista pysyvästi",
- "Rename" : "Nimeä uudelleen",
+ "Select" : "Valitse",
"Pending" : "Odottaa",
+ "Unable to determine date" : "Päivämäärän määrittäminen epäonnistui",
"Error moving file." : "Virhe tiedostoa siirrettäessä.",
"Error moving file" : "Virhe tiedostoa siirrettäessä",
"Error" : "Virhe",
"Could not rename file" : "Tiedoston nimeäminen uudelleen epäonnistui",
"Error deleting file." : "Virhe tiedostoa poistaessa.",
+ "No entries in this folder match '{filter}'" : "Mikään tässä kansiossa ei vastaa suodatusta '{filter}'",
"Name" : "Nimi",
"Size" : "Koko",
"Modified" : "Muokattu",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Salaus poistettiin käytöstä, mutta tiedostosi ovat edelleen salattuina. Siirry henkilökohtaisiin asetuksiin avataksesi tiedostojesi salauksen.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [" vastaa suodatusta '{filter}'"," vastaa suodatusta '{filter}'"],
"{dirs} and {files}" : "{dirs} ja {files}",
+ "Favorited" : "Lisätty suosikkeihin",
+ "Favorite" : "Suosikki",
"%s could not be renamed as it has been deleted" : "Kohdetta %s ei voitu nimetä uudelleen, koska se on poistettu",
"%s could not be renamed" : "kohteen %s nimeäminen uudelleen epäonnistui",
"Upload (max. %s)" : "Lähetys (enintään %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko",
"max. possible: " : "suurin mahdollinen:",
"Save" : "Tallenna",
+ "Settings" : "Asetukset",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>",
"New" : "Uusi",
@@ -85,11 +92,18 @@
"New folder" : "Uusi kansio",
"Folder" : "Kansio",
"From link" : "Linkistä",
- "Nothing in here. Upload something!" : "Täällä ei ole mitään. Lähetä tänne jotakin!",
+ "Upload" : "Lähetä",
+ "Cancel upload" : "Peru lähetys",
+ "No files yet" : "EI yhtäkään tiedostoa vielä",
+ "Upload some content or sync with your devices!" : "Lähetä tiedostoja tai synkronoi sisältö laitteidesi kanssa!",
+ "No entries found in this folder" : "Ei kohteita tässä kansiossa",
+ "Select all" : "Valitse kaikki",
"Download" : "Lataa",
"Upload too large" : "Lähetettävä tiedosto on liian suuri",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.",
"Files are being scanned, please wait." : "Tiedostoja tarkistetaan, odota hetki.",
- "Currently scanning" : "Tutkitaan parhaillaan"
+ "Currently scanning" : "Tutkitaan parhaillaan",
+ "No favorites" : "Ei suosikkeja",
+ "Files and folders you mark as favorite will show up here" : "Suosikeiksi merkitsemäsi tiedostot ja kansiot näkyvät täällä"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fil.js b/apps/files/l10n/fil.js
index f085469f731..deae17398bd 100644
--- a/apps/files/l10n/fil.js
+++ b/apps/files/l10n/fil.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/fil.json b/apps/files/l10n/fil.json
index ba9792477cd..dd9cfe83135 100644
--- a/apps/files/l10n/fil.json
+++ b/apps/files/l10n/fil.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 967908eaca0..734d2bc6958 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -2,42 +2,44 @@ OC.L10N.register(
"files",
{
"Storage not available" : "Support de stockage non disponible",
- "Storage invalid" : "Support de stockage invalide",
+ "Storage invalid" : "Support de stockage non valable",
"Unknown error" : "Erreur Inconnue ",
- "Could not move %s - File with this name already exists" : "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà",
+ "Could not move %s - File with this name already exists" : "Impossible de déplacer %s - Un fichier portant ce nom existe déjà",
"Could not move %s" : "Impossible de déplacer %s",
"Permission denied" : "Permission refusée",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
"\"%s\" is an invalid file name." : "\"%s\" n'est pas un nom de fichier valide.",
- "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ce nom n'est pas valable : les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",
"The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.",
"The name %s is already used in the folder %s. Please choose a different name." : "Le nom %s est déjà utilisé dans le dossier %s. Merci de choisir un nom différent.",
"Not a valid source" : "La source n'est pas valide",
"Server is not allowed to open URLs, please check the server configuration" : "Le serveur n'est pas autorisé à ouvrir des URL, veuillez vérifier la configuration du serveur",
"The file exceeds your quota by %s" : "Le fichier excède votre quota de %s",
- "Error while downloading %s to %s" : "Erreur pendant le téléchargement de %s à %s",
+ "Error while downloading %s to %s" : "Erreur pendant le téléchargement de %s vers %s",
"Error when creating the file" : "Erreur pendant la création du fichier",
- "Folder name cannot be empty." : "Le nom de dossier ne peux pas être vide.",
+ "Folder name cannot be empty." : "Le nom de dossier ne peut pas être vide.",
"Error when creating the folder" : "Erreur pendant la création du dossier",
- "Unable to set upload directory." : "Impossible de définir le dossier pour l'upload, charger.",
+ "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.",
- "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 l'instruction MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML.",
+ "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 est 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.",
+ "Missing a temporary folder" : "Absence de dossier temporaire",
"Failed to write to disk" : "Erreur d'écriture sur le disque",
- "Not enough storage available" : "Plus assez d'espace de stockage disponible",
+ "Not enough storage available" : "Trop peu d'espace de stockage disponible",
"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.",
- "Invalid directory." : "Dossier invalide.",
+ "Invalid directory." : "Dossier non valide.",
"Files" : "Fichiers",
"All files" : "Tous les fichiers",
+ "Favorites" : "Favoris",
+ "Home" : "Mes fichiers",
"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",
"Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
+ "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",
"Upload cancelled." : "Envoi annulé.",
"Could not get result from server." : "Ne peut recevoir les résultats du serveur.",
"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.",
@@ -46,13 +48,13 @@ OC.L10N.register(
"Could not create file" : "Impossible de créer le fichier",
"Could not create folder" : "Impossible de créer le dossier",
"Error fetching URL" : "Erreur d'accès à l'URL",
- "Share" : "Partager",
+ "Rename" : "Renommer",
"Delete" : "Supprimer",
"Disconnect storage" : "Déconnecter ce support de stockage",
"Unshare" : "Ne plus partager",
- "Delete permanently" : "Supprimer de façon définitive",
- "Rename" : "Renommer",
+ "Select" : "Sélectionner",
"Pending" : "En attente",
+ "Unable to determine date" : "Impossible de déterminer la date",
"Error moving file." : "Erreur lors du déplacement du fichier.",
"Error moving file" : "Erreur lors du déplacement du fichier",
"Error" : "Erreur",
@@ -63,22 +65,26 @@ OC.L10N.register(
"Modified" : "Modifié",
"_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"],
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission de téléverser ou de créer des fichiers ici",
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés 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 !",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées, veuillez vous déconnecter et ensuite vous reconnecter.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour l'application de chiffrement est invalide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Le chiffrement est activé, mais vos clés ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour le chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
+ "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} et {files}",
+ "Favorited" : "Marqué comme favori",
+ "Favorite" : "Favoris",
"%s could not be renamed as it has been deleted" : "%s ne peut être renommé car il a été supprimé ",
"%s could not be renamed" : "%s ne peut être renommé",
"Upload (max. %s)" : "Envoi (max. %s)",
- "File handling" : "Gestion des fichiers",
+ "File handling" : "Gestion de fichiers",
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
"Save" : "Sauvegarder",
+ "Settings" : "Paramètres",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>",
"New" : "Nouveau",
@@ -87,11 +93,17 @@ OC.L10N.register(
"New folder" : "Nouveau dossier",
"Folder" : "Dossier",
"From link" : "Depuis un lien",
- "Nothing in here. Upload something!" : "Il n'y a rien ici ! Envoyez donc quelque chose :)",
+ "Upload" : "Chargement",
+ "Cancel upload" : "Annuler l'envoi",
+ "No files yet" : "Aucun fichier pour l'instant",
+ "Upload some content or sync with your devices!" : "Envoyez des fichiers ou synchronisez en depuis vos appareils",
+ "Select all" : "Tout sélectionner",
"Download" : "Télécharger",
"Upload too large" : "Téléversement trop volumineux",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale d'envoi permise par ce serveur.",
"Files are being scanned, please wait." : "Les fichiers sont en cours d'analyse, veuillez patienter.",
- "Currently scanning" : "Analyse en cours"
+ "Currently scanning" : "Analyse en cours",
+ "No favorites" : "Pas de favori",
+ "Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 19c9154dc79..3964860a6cc 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -1,41 +1,43 @@
{ "translations": {
"Storage not available" : "Support de stockage non disponible",
- "Storage invalid" : "Support de stockage invalide",
+ "Storage invalid" : "Support de stockage non valable",
"Unknown error" : "Erreur Inconnue ",
- "Could not move %s - File with this name already exists" : "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà",
+ "Could not move %s - File with this name already exists" : "Impossible de déplacer %s - Un fichier portant ce nom existe déjà",
"Could not move %s" : "Impossible de déplacer %s",
"Permission denied" : "Permission refusée",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
"\"%s\" is an invalid file name." : "\"%s\" n'est pas un nom de fichier valide.",
- "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ce nom n'est pas valable : les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",
"The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.",
"The name %s is already used in the folder %s. Please choose a different name." : "Le nom %s est déjà utilisé dans le dossier %s. Merci de choisir un nom différent.",
"Not a valid source" : "La source n'est pas valide",
"Server is not allowed to open URLs, please check the server configuration" : "Le serveur n'est pas autorisé à ouvrir des URL, veuillez vérifier la configuration du serveur",
"The file exceeds your quota by %s" : "Le fichier excède votre quota de %s",
- "Error while downloading %s to %s" : "Erreur pendant le téléchargement de %s à %s",
+ "Error while downloading %s to %s" : "Erreur pendant le téléchargement de %s vers %s",
"Error when creating the file" : "Erreur pendant la création du fichier",
- "Folder name cannot be empty." : "Le nom de dossier ne peux pas être vide.",
+ "Folder name cannot be empty." : "Le nom de dossier ne peut pas être vide.",
"Error when creating the folder" : "Erreur pendant la création du dossier",
- "Unable to set upload directory." : "Impossible de définir le dossier pour l'upload, charger.",
+ "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.",
- "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 l'instruction MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML.",
+ "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 est 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.",
+ "Missing a temporary folder" : "Absence de dossier temporaire",
"Failed to write to disk" : "Erreur d'écriture sur le disque",
- "Not enough storage available" : "Plus assez d'espace de stockage disponible",
+ "Not enough storage available" : "Trop peu d'espace de stockage disponible",
"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.",
- "Invalid directory." : "Dossier invalide.",
+ "Invalid directory." : "Dossier non valide.",
"Files" : "Fichiers",
"All files" : "Tous les fichiers",
+ "Favorites" : "Favoris",
+ "Home" : "Mes fichiers",
"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",
"Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
+ "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",
"Upload cancelled." : "Envoi annulé.",
"Could not get result from server." : "Ne peut recevoir les résultats du serveur.",
"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.",
@@ -44,13 +46,13 @@
"Could not create file" : "Impossible de créer le fichier",
"Could not create folder" : "Impossible de créer le dossier",
"Error fetching URL" : "Erreur d'accès à l'URL",
- "Share" : "Partager",
+ "Rename" : "Renommer",
"Delete" : "Supprimer",
"Disconnect storage" : "Déconnecter ce support de stockage",
"Unshare" : "Ne plus partager",
- "Delete permanently" : "Supprimer de façon définitive",
- "Rename" : "Renommer",
+ "Select" : "Sélectionner",
"Pending" : "En attente",
+ "Unable to determine date" : "Impossible de déterminer la date",
"Error moving file." : "Erreur lors du déplacement du fichier.",
"Error moving file" : "Erreur lors du déplacement du fichier",
"Error" : "Erreur",
@@ -61,22 +63,26 @@
"Modified" : "Modifié",
"_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"],
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission de téléverser ou de créer des fichiers ici",
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés 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 !",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées, veuillez vous déconnecter et ensuite vous reconnecter.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour l'application de chiffrement est invalide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Le chiffrement est activé, mais vos clés ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour le chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
+ "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} et {files}",
+ "Favorited" : "Marqué comme favori",
+ "Favorite" : "Favoris",
"%s could not be renamed as it has been deleted" : "%s ne peut être renommé car il a été supprimé ",
"%s could not be renamed" : "%s ne peut être renommé",
"Upload (max. %s)" : "Envoi (max. %s)",
- "File handling" : "Gestion des fichiers",
+ "File handling" : "Gestion de fichiers",
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
"Save" : "Sauvegarder",
+ "Settings" : "Paramètres",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>",
"New" : "Nouveau",
@@ -85,11 +91,17 @@
"New folder" : "Nouveau dossier",
"Folder" : "Dossier",
"From link" : "Depuis un lien",
- "Nothing in here. Upload something!" : "Il n'y a rien ici ! Envoyez donc quelque chose :)",
+ "Upload" : "Chargement",
+ "Cancel upload" : "Annuler l'envoi",
+ "No files yet" : "Aucun fichier pour l'instant",
+ "Upload some content or sync with your devices!" : "Envoyez des fichiers ou synchronisez en depuis vos appareils",
+ "Select all" : "Tout sélectionner",
"Download" : "Télécharger",
"Upload too large" : "Téléversement trop volumineux",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale d'envoi permise par ce serveur.",
"Files are being scanned, please wait." : "Les fichiers sont en cours d'analyse, veuillez patienter.",
- "Currently scanning" : "Analyse en cours"
+ "Currently scanning" : "Analyse en cours",
+ "No favorites" : "Pas de favori",
+ "Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fr_CA.js b/apps/files/l10n/fr_CA.js
index f085469f731..deae17398bd 100644
--- a/apps/files/l10n/fr_CA.js
+++ b/apps/files/l10n/fr_CA.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/fr_CA.json b/apps/files/l10n/fr_CA.json
index ba9792477cd..dd9cfe83135 100644
--- a/apps/files/l10n/fr_CA.json
+++ b/apps/files/l10n/fr_CA.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fy_NL.js b/apps/files/l10n/fy_NL.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/fy_NL.js
+++ b/apps/files/l10n/fy_NL.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/fy_NL.json b/apps/files/l10n/fy_NL.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/fy_NL.json
+++ b/apps/files/l10n/fy_NL.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js
index a169f5c21cf..e968d58f9e0 100644
--- a/apps/files/l10n/gl.js
+++ b/apps/files/l10n/gl.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Unknown error" : "Produciuse un erro descoñecido",
"Could not move %s - File with this name already exists" : "Non foi posíbel mover %s; Xa existe un ficheiro con ese nome.",
"Could not move %s" : "Non foi posíbel mover %s",
+ "Permission denied" : "Permiso denegado",
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
"\"%s\" is an invalid file name." : "«%s» é un nome incorrecto de ficheiro.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».",
@@ -34,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "O directorio é incorrecto.",
"Files" : "Ficheiros",
"All files" : "Todos os ficheiros",
+ "Favorites" : "Favoritos",
+ "Home" : "Inicio",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Non é posíbel enviar {filename}, xa que ou é un directorio ou ten 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "O tamaño total do ficheiro {size1} excede do límite de envío {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Non hai espazo libre abondo, o seu envío é de {size1} mais só dispón de {size2}",
@@ -45,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Non foi posíbel crear o ficheiro",
"Could not create folder" : "Non foi posíbel crear o cartafol",
"Error fetching URL" : "Produciuse un erro ao obter o URL",
- "Share" : "Compartir",
+ "Rename" : "Renomear",
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar o almacenamento",
"Unshare" : "Deixar de compartir",
- "Delete permanently" : "Eliminar permanentemente",
- "Rename" : "Renomear",
+ "Select" : "Seleccionar",
"Pending" : "Pendentes",
+ "Unable to determine date" : "Non é posíbel determinar a data",
"Error moving file." : "Produciuse un erro ao mover o ficheiro.",
"Error moving file" : "Produciuse un erro ao mover o ficheiro",
"Error" : "Erro",
"Could not rename file" : "Non foi posíbel renomear o ficheiro",
"Error deleting file." : "Produciuse un erro ao eliminar o ficheiro.",
+ "No entries in this folder match '{filter}'" : "Non hai entradas neste cartafol coincidentes con «{filter}»",
"Name" : "Nome",
"Size" : "Tamaño",
"Modified" : "Modificado",
@@ -70,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "Non é posíbel renomear %s xa que foi eliminado",
"%s could not be renamed" : "%s non pode cambiar de nome",
"Upload (max. %s)" : "Envío (máx. %s)",
@@ -78,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamaño máximo do envío",
"max. possible: " : "máx. posíbel: ",
"Save" : "Gardar",
+ "Settings" : "Axustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>",
"New" : "Novo",
@@ -86,11 +94,18 @@ OC.L10N.register(
"New folder" : "Novo cartafol",
"Folder" : "Cartafol",
"From link" : "Desde a ligazón",
- "Nothing in here. Upload something!" : "Aquí non hai nada. Envíe algo.",
+ "Upload" : "Enviar",
+ "Cancel upload" : "Cancelar o envío",
+ "No files yet" : "Aínda non hai ficheiros",
+ "Upload some content or sync with your devices!" : "Envíe algún contido ou sincronice cos seus dispositivos!",
+ "No entries found in this folder" : "Non se atoparon entradas neste cartafol",
+ "Select all" : "Seleccionar todo",
"Download" : "Descargar",
"Upload too large" : "Envío grande de máis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor",
"Files are being scanned, please wait." : "Estanse analizando os ficheiros. Agarde.",
- "Currently scanning" : "Análise actual"
+ "Currently scanning" : "Análise actual",
+ "No favorites" : "Non hai favoritos",
+ "Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json
index cf1f30dcfc4..e459feef8d0 100644
--- a/apps/files/l10n/gl.json
+++ b/apps/files/l10n/gl.json
@@ -4,6 +4,7 @@
"Unknown error" : "Produciuse un erro descoñecido",
"Could not move %s - File with this name already exists" : "Non foi posíbel mover %s; Xa existe un ficheiro con ese nome.",
"Could not move %s" : "Non foi posíbel mover %s",
+ "Permission denied" : "Permiso denegado",
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
"\"%s\" is an invalid file name." : "«%s» é un nome incorrecto de ficheiro.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».",
@@ -32,6 +33,8 @@
"Invalid directory." : "O directorio é incorrecto.",
"Files" : "Ficheiros",
"All files" : "Todos os ficheiros",
+ "Favorites" : "Favoritos",
+ "Home" : "Inicio",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Non é posíbel enviar {filename}, xa que ou é un directorio ou ten 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "O tamaño total do ficheiro {size1} excede do límite de envío {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Non hai espazo libre abondo, o seu envío é de {size1} mais só dispón de {size2}",
@@ -43,18 +46,19 @@
"Could not create file" : "Non foi posíbel crear o ficheiro",
"Could not create folder" : "Non foi posíbel crear o cartafol",
"Error fetching URL" : "Produciuse un erro ao obter o URL",
- "Share" : "Compartir",
+ "Rename" : "Renomear",
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar o almacenamento",
"Unshare" : "Deixar de compartir",
- "Delete permanently" : "Eliminar permanentemente",
- "Rename" : "Renomear",
+ "Select" : "Seleccionar",
"Pending" : "Pendentes",
+ "Unable to determine date" : "Non é posíbel determinar a data",
"Error moving file." : "Produciuse un erro ao mover o ficheiro.",
"Error moving file" : "Produciuse un erro ao mover o ficheiro",
"Error" : "Erro",
"Could not rename file" : "Non foi posíbel renomear o ficheiro",
"Error deleting file." : "Produciuse un erro ao eliminar o ficheiro.",
+ "No entries in this folder match '{filter}'" : "Non hai entradas neste cartafol coincidentes con «{filter}»",
"Name" : "Nome",
"Size" : "Tamaño",
"Modified" : "Modificado",
@@ -68,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "Non é posíbel renomear %s xa que foi eliminado",
"%s could not be renamed" : "%s non pode cambiar de nome",
"Upload (max. %s)" : "Envío (máx. %s)",
@@ -76,6 +83,7 @@
"Maximum upload size" : "Tamaño máximo do envío",
"max. possible: " : "máx. posíbel: ",
"Save" : "Gardar",
+ "Settings" : "Axustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>",
"New" : "Novo",
@@ -84,11 +92,18 @@
"New folder" : "Novo cartafol",
"Folder" : "Cartafol",
"From link" : "Desde a ligazón",
- "Nothing in here. Upload something!" : "Aquí non hai nada. Envíe algo.",
+ "Upload" : "Enviar",
+ "Cancel upload" : "Cancelar o envío",
+ "No files yet" : "Aínda non hai ficheiros",
+ "Upload some content or sync with your devices!" : "Envíe algún contido ou sincronice cos seus dispositivos!",
+ "No entries found in this folder" : "Non se atoparon entradas neste cartafol",
+ "Select all" : "Seleccionar todo",
"Download" : "Descargar",
"Upload too large" : "Envío grande de máis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor",
"Files are being scanned, please wait." : "Estanse analizando os ficheiros. Agarde.",
- "Currently scanning" : "Análise actual"
+ "Currently scanning" : "Análise actual",
+ "No favorites" : "Non hai favoritos",
+ "Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/gu.js b/apps/files/l10n/gu.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/gu.js
+++ b/apps/files/l10n/gu.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/gu.json b/apps/files/l10n/gu.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/gu.json
+++ b/apps/files/l10n/gu.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/he.js b/apps/files/l10n/he.js
index 4db22fef4ed..6dce479219f 100644
--- a/apps/files/l10n/he.js
+++ b/apps/files/l10n/he.js
@@ -18,15 +18,16 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "העלאה נכשלה. לא ניתן להשיג את פרטי הקובץ.",
"Invalid directory." : "תיקייה שגויה.",
"Files" : "קבצים",
+ "Favorites" : "מועדפים",
+ "Home" : "בית",
"Upload cancelled." : "ההעלאה בוטלה.",
"Could not get result from server." : "לא ניתן לגשת לתוצאות מהשרת.",
"File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.",
"{new_name} already exists" : "{new_name} כבר קיים",
- "Share" : "שתף",
+ "Rename" : "שינוי שם",
"Delete" : "מחיקה",
"Unshare" : "הסר שיתוף",
- "Delete permanently" : "מחק לצמיתות",
- "Rename" : "שינוי שם",
+ "Select" : "בחר",
"Pending" : "ממתין",
"Error" : "שגיאה",
"Name" : "שם",
@@ -36,18 +37,22 @@ OC.L10N.register(
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
"Your storage is almost full ({usedSpacePercent}%)" : "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Favorite" : "מועדף",
"Upload (max. %s)" : "העלאה (מקסימום %s)",
"File handling" : "טיפול בקבצים",
"Maximum upload size" : "גודל העלאה מקסימלי",
"max. possible: " : "המרבי האפשרי: ",
"Save" : "שמירה",
+ "Settings" : "הגדרות",
"WebDAV" : "WebDAV",
"New" : "חדש",
"Text file" : "קובץ טקסט",
"New folder" : "תיקייה חדשה",
"Folder" : "תיקייה",
"From link" : "מקישור",
- "Nothing in here. Upload something!" : "אין כאן שום דבר. אולי ברצונך להעלות משהו?",
+ "Upload" : "העלאה",
+ "Cancel upload" : "ביטול ההעלאה",
"Download" : "הורדה",
"Upload too large" : "העלאה גדולה מידי",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.",
diff --git a/apps/files/l10n/he.json b/apps/files/l10n/he.json
index b876983cbbb..6c1ff592317 100644
--- a/apps/files/l10n/he.json
+++ b/apps/files/l10n/he.json
@@ -16,15 +16,16 @@
"Upload failed. Could not get file info." : "העלאה נכשלה. לא ניתן להשיג את פרטי הקובץ.",
"Invalid directory." : "תיקייה שגויה.",
"Files" : "קבצים",
+ "Favorites" : "מועדפים",
+ "Home" : "בית",
"Upload cancelled." : "ההעלאה בוטלה.",
"Could not get result from server." : "לא ניתן לגשת לתוצאות מהשרת.",
"File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.",
"{new_name} already exists" : "{new_name} כבר קיים",
- "Share" : "שתף",
+ "Rename" : "שינוי שם",
"Delete" : "מחיקה",
"Unshare" : "הסר שיתוף",
- "Delete permanently" : "מחק לצמיתות",
- "Rename" : "שינוי שם",
+ "Select" : "בחר",
"Pending" : "ממתין",
"Error" : "שגיאה",
"Name" : "שם",
@@ -34,18 +35,22 @@
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
"Your storage is almost full ({usedSpacePercent}%)" : "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Favorite" : "מועדף",
"Upload (max. %s)" : "העלאה (מקסימום %s)",
"File handling" : "טיפול בקבצים",
"Maximum upload size" : "גודל העלאה מקסימלי",
"max. possible: " : "המרבי האפשרי: ",
"Save" : "שמירה",
+ "Settings" : "הגדרות",
"WebDAV" : "WebDAV",
"New" : "חדש",
"Text file" : "קובץ טקסט",
"New folder" : "תיקייה חדשה",
"Folder" : "תיקייה",
"From link" : "מקישור",
- "Nothing in here. Upload something!" : "אין כאן שום דבר. אולי ברצונך להעלות משהו?",
+ "Upload" : "העלאה",
+ "Cancel upload" : "ביטול ההעלאה",
"Download" : "הורדה",
"Upload too large" : "העלאה גדולה מידי",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.",
diff --git a/apps/files/l10n/hi.js b/apps/files/l10n/hi.js
index 21b409ce9ef..2064fa2c7e3 100644
--- a/apps/files/l10n/hi.js
+++ b/apps/files/l10n/hi.js
@@ -2,12 +2,14 @@ OC.L10N.register(
"files",
{
"Files" : "फाइलें ",
- "Share" : "साझा करें",
"Error" : "त्रुटि",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "सहेजें",
- "New folder" : "नया फ़ोल्डर"
+ "Settings" : "सेटिंग्स",
+ "New folder" : "नया फ़ोल्डर",
+ "Upload" : "अपलोड "
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/hi.json b/apps/files/l10n/hi.json
index 093b80ce700..ae2e3550df3 100644
--- a/apps/files/l10n/hi.json
+++ b/apps/files/l10n/hi.json
@@ -1,11 +1,13 @@
{ "translations": {
"Files" : "फाइलें ",
- "Share" : "साझा करें",
"Error" : "त्रुटि",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "सहेजें",
- "New folder" : "नया फ़ोल्डर"
+ "Settings" : "सेटिंग्स",
+ "New folder" : "नया फ़ोल्डर",
+ "Upload" : "अपलोड "
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js
index ad4eead41cc..b4bf0606629 100644
--- a/apps/files/l10n/hr.js
+++ b/apps/files/l10n/hr.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Neispravan direktorij",
"Files" : "Datoteke",
"All files" : "Sve datoteke",
+ "Favorites" : "Favoriti",
+ "Home" : "Kuća",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nije moguće učitati {filename} jer je ili direktorij ili ima 0 bajta",
"Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina datoteke {size1} premašuje ograničenje unosa {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nedovoljno slobodnog prostora, vi učitavate {size1} a samo je {size2} preostalo",
@@ -46,12 +48,10 @@ OC.L10N.register(
"Could not create file" : "Datoteku nije moguće kreirati",
"Could not create folder" : "Mapu nije moguće kreirati",
"Error fetching URL" : "Pogrešan dohvat URL",
- "Share" : "Podijelite resurs",
+ "Rename" : "Preimenujte",
"Delete" : "Izbrišite",
"Disconnect storage" : "Isključite pohranu",
"Unshare" : "Prestanite dijeliti",
- "Delete permanently" : "Trajno izbrišite",
- "Rename" : "Preimenujte",
"Pending" : "Na čekanju",
"Error moving file." : "Pogrešno premještanje datoteke",
"Error moving file" : "Pogrešno premještanje datoteke",
@@ -71,7 +71,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je onemogućena, ali vaši ključevi nisu inicijalizirani, molimo odjavite se i ponovno prijavite",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, otiđite u svojeosobne postavke da biste dešifrirali svoje datoteke.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan",
"%s could not be renamed" : "%s nije moguće preimenovati",
"Upload (max. %s)" : "Prijenos (max. %s)",
@@ -79,6 +81,7 @@ OC.L10N.register(
"Maximum upload size" : "Maksimalna veličina učitanog sadržaja",
"max. possible: " : "max. moguće: ",
"Save" : "Spremite",
+ "Settings" : "Postavke",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristitet slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>",
"New" : "Novo",
@@ -87,7 +90,8 @@ OC.L10N.register(
"New folder" : "Nova mapa",
"Folder" : "Mapa",
"From link" : "Od veze",
- "Nothing in here. Upload something!" : "Ovdje nema ničega. Učitajte nešto!",
+ "Upload" : "Učitavanje",
+ "Cancel upload" : "Prekini upload",
"Download" : "Preuzimanje",
"Upload too large" : "Unos je prevelik",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke koje pokušavate učitati premašuju maksimalnu veličinu za unos datoteka na ovom poslužitelju.",
diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json
index 482796da4a1..704c5080d47 100644
--- a/apps/files/l10n/hr.json
+++ b/apps/files/l10n/hr.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Neispravan direktorij",
"Files" : "Datoteke",
"All files" : "Sve datoteke",
+ "Favorites" : "Favoriti",
+ "Home" : "Kuća",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nije moguće učitati {filename} jer je ili direktorij ili ima 0 bajta",
"Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina datoteke {size1} premašuje ograničenje unosa {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nedovoljno slobodnog prostora, vi učitavate {size1} a samo je {size2} preostalo",
@@ -44,12 +46,10 @@
"Could not create file" : "Datoteku nije moguće kreirati",
"Could not create folder" : "Mapu nije moguće kreirati",
"Error fetching URL" : "Pogrešan dohvat URL",
- "Share" : "Podijelite resurs",
+ "Rename" : "Preimenujte",
"Delete" : "Izbrišite",
"Disconnect storage" : "Isključite pohranu",
"Unshare" : "Prestanite dijeliti",
- "Delete permanently" : "Trajno izbrišite",
- "Rename" : "Preimenujte",
"Pending" : "Na čekanju",
"Error moving file." : "Pogrešno premještanje datoteke",
"Error moving file" : "Pogrešno premještanje datoteke",
@@ -69,7 +69,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je onemogućena, ali vaši ključevi nisu inicijalizirani, molimo odjavite se i ponovno prijavite",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, otiđite u svojeosobne postavke da biste dešifrirali svoje datoteke.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan",
"%s could not be renamed" : "%s nije moguće preimenovati",
"Upload (max. %s)" : "Prijenos (max. %s)",
@@ -77,6 +79,7 @@
"Maximum upload size" : "Maksimalna veličina učitanog sadržaja",
"max. possible: " : "max. moguće: ",
"Save" : "Spremite",
+ "Settings" : "Postavke",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristitet slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>",
"New" : "Novo",
@@ -85,7 +88,8 @@
"New folder" : "Nova mapa",
"Folder" : "Mapa",
"From link" : "Od veze",
- "Nothing in here. Upload something!" : "Ovdje nema ničega. Učitajte nešto!",
+ "Upload" : "Učitavanje",
+ "Cancel upload" : "Prekini upload",
"Download" : "Preuzimanje",
"Upload too large" : "Unos je prevelik",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke koje pokušavate učitati premašuju maksimalnu veličinu za unos datoteka na ovom poslužitelju.",
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index 34a9c73aa08..fe4a138040d 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Érvénytelen mappa.",
"Files" : "Fájlkezelő",
"All files" : "Az összes állomány",
+ "Favorites" : "Kedvencek",
+ "Home" : "Otthoni",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "A(z) {filename} állomány nem tölthető fel, mert ez vagy egy mappa, vagy pedig 0 bájtból áll.",
"Total file size {size1} exceeds upload limit {size2}" : "A teljes fájlméret: {size1} meghaladja a feltöltési limitet: {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nincs elég szabad hely. A feltöltés mérete {size1}, de csak ennyi hely van: {size2}.",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Az állomány nem hozható létre",
"Could not create folder" : "A mappa nem hozható létre",
"Error fetching URL" : "A megadott URL-ről nem sikerül adatokat kapni",
- "Share" : "Megosztás",
+ "Rename" : "Átnevezés",
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
- "Delete permanently" : "Végleges törlés",
- "Rename" : "Átnevezés",
+ "Select" : "Kiválaszt",
"Pending" : "Folyamatban",
"Error moving file." : "Hiba történt a fájl áthelyezése közben.",
"Error moving file" : "Az állomány áthelyezése nem sikerült.",
@@ -71,7 +72,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} és {files}",
+ "Favorited" : "Kedvenc",
+ "Favorite" : "Kedvenc",
"%s could not be renamed as it has been deleted" : "%s nem lehet átnevezni, mivel törölve lett",
"%s could not be renamed" : "%s átnevezése nem sikerült",
"Upload (max. %s)" : "Feltöltés (max. %s)",
@@ -79,6 +83,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximális feltölthető fájlméret",
"max. possible: " : "max. lehetséges: ",
"Save" : "Mentés",
+ "Settings" : "Beállítások",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ezt a címet használja, ha <a href=\"%s\" target=\"_blank\">WebDAV-on keresztül szeretné elérni a fájljait</a>",
"New" : "Új",
@@ -87,11 +92,16 @@ OC.L10N.register(
"New folder" : "Új mappa",
"Folder" : "Mappa",
"From link" : "Feltöltés linkről",
- "Nothing in here. Upload something!" : "Itt nincs semmi. Töltsön fel valamit!",
+ "Upload" : "Feltöltés",
+ "Cancel upload" : "A feltöltés megszakítása",
+ "No files yet" : "Még nincsenek fájlok",
+ "Select all" : "Összes kijelölése",
"Download" : "Letöltés",
"Upload too large" : "A feltöltés túl nagy",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet.",
"Files are being scanned, please wait." : "A fájllista ellenőrzése zajlik, kis türelmet!",
- "Currently scanning" : "Mappaellenőrzés: "
+ "Currently scanning" : "Mappaellenőrzés: ",
+ "No favorites" : "Nincsenek kedvencek",
+ "Files and folders you mark as favorite will show up here" : "A kedvencnek jelölt fájlokat és mappákat itt találod meg"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 10ff167fd46..81c9469161d 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Érvénytelen mappa.",
"Files" : "Fájlkezelő",
"All files" : "Az összes állomány",
+ "Favorites" : "Kedvencek",
+ "Home" : "Otthoni",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "A(z) {filename} állomány nem tölthető fel, mert ez vagy egy mappa, vagy pedig 0 bájtból áll.",
"Total file size {size1} exceeds upload limit {size2}" : "A teljes fájlméret: {size1} meghaladja a feltöltési limitet: {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nincs elég szabad hely. A feltöltés mérete {size1}, de csak ennyi hely van: {size2}.",
@@ -44,12 +46,11 @@
"Could not create file" : "Az állomány nem hozható létre",
"Could not create folder" : "A mappa nem hozható létre",
"Error fetching URL" : "A megadott URL-ről nem sikerül adatokat kapni",
- "Share" : "Megosztás",
+ "Rename" : "Átnevezés",
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
- "Delete permanently" : "Végleges törlés",
- "Rename" : "Átnevezés",
+ "Select" : "Kiválaszt",
"Pending" : "Folyamatban",
"Error moving file." : "Hiba történt a fájl áthelyezése közben.",
"Error moving file" : "Az állomány áthelyezése nem sikerült.",
@@ -69,7 +70,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} és {files}",
+ "Favorited" : "Kedvenc",
+ "Favorite" : "Kedvenc",
"%s could not be renamed as it has been deleted" : "%s nem lehet átnevezni, mivel törölve lett",
"%s could not be renamed" : "%s átnevezése nem sikerült",
"Upload (max. %s)" : "Feltöltés (max. %s)",
@@ -77,6 +81,7 @@
"Maximum upload size" : "Maximális feltölthető fájlméret",
"max. possible: " : "max. lehetséges: ",
"Save" : "Mentés",
+ "Settings" : "Beállítások",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ezt a címet használja, ha <a href=\"%s\" target=\"_blank\">WebDAV-on keresztül szeretné elérni a fájljait</a>",
"New" : "Új",
@@ -85,11 +90,16 @@
"New folder" : "Új mappa",
"Folder" : "Mappa",
"From link" : "Feltöltés linkről",
- "Nothing in here. Upload something!" : "Itt nincs semmi. Töltsön fel valamit!",
+ "Upload" : "Feltöltés",
+ "Cancel upload" : "A feltöltés megszakítása",
+ "No files yet" : "Még nincsenek fájlok",
+ "Select all" : "Összes kijelölése",
"Download" : "Letöltés",
"Upload too large" : "A feltöltés túl nagy",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet.",
"Files are being scanned, please wait." : "A fájllista ellenőrzése zajlik, kis türelmet!",
- "Currently scanning" : "Mappaellenőrzés: "
+ "Currently scanning" : "Mappaellenőrzés: ",
+ "No favorites" : "Nincsenek kedvencek",
+ "Files and folders you mark as favorite will show up here" : "A kedvencnek jelölt fájlokat és mappákat itt találod meg"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/hy.js b/apps/files/l10n/hy.js
index 5772fd20c72..bb4a362d12d 100644
--- a/apps/files/l10n/hy.js
+++ b/apps/files/l10n/hy.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "Պահպանել",
"Download" : "Բեռնել"
},
diff --git a/apps/files/l10n/hy.json b/apps/files/l10n/hy.json
index 3cbee75121a..d433cc5b5c9 100644
--- a/apps/files/l10n/hy.json
+++ b/apps/files/l10n/hy.json
@@ -3,6 +3,7 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "Պահպանել",
"Download" : "Բեռնել"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js
index 8c93abf1bef..901a12cd538 100644
--- a/apps/files/l10n/ia.js
+++ b/apps/files/l10n/ia.js
@@ -7,7 +7,7 @@ OC.L10N.register(
"No file was uploaded" : "Nulle file esseva incargate.",
"Missing a temporary folder" : "Manca un dossier temporari",
"Files" : "Files",
- "Share" : "Compartir",
+ "Home" : "Domo",
"Delete" : "Deler",
"Unshare" : "Leva compartir",
"Error" : "Error",
@@ -17,14 +17,16 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Upload (max. %s)" : "Incargar (max. %s)",
"Maximum upload size" : "Dimension maxime de incargamento",
"Save" : "Salveguardar",
+ "Settings" : "Configurationes",
"New" : "Nove",
"Text file" : "File de texto",
"New folder" : "Nove dossier",
"Folder" : "Dossier",
- "Nothing in here. Upload something!" : "Nihil hic. Incarga alcun cosa!",
+ "Upload" : "Incargar",
"Download" : "Discargar",
"Upload too large" : "Incargamento troppo longe"
},
diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json
index 962419f288b..2384c23a6fc 100644
--- a/apps/files/l10n/ia.json
+++ b/apps/files/l10n/ia.json
@@ -5,7 +5,7 @@
"No file was uploaded" : "Nulle file esseva incargate.",
"Missing a temporary folder" : "Manca un dossier temporari",
"Files" : "Files",
- "Share" : "Compartir",
+ "Home" : "Domo",
"Delete" : "Deler",
"Unshare" : "Leva compartir",
"Error" : "Error",
@@ -15,14 +15,16 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Upload (max. %s)" : "Incargar (max. %s)",
"Maximum upload size" : "Dimension maxime de incargamento",
"Save" : "Salveguardar",
+ "Settings" : "Configurationes",
"New" : "Nove",
"Text file" : "File de texto",
"New folder" : "Nove dossier",
"Folder" : "Dossier",
- "Nothing in here. Upload something!" : "Nihil hic. Incarga alcun cosa!",
+ "Upload" : "Incargar",
"Download" : "Discargar",
"Upload too large" : "Incargamento troppo longe"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js
index 8ae4c822ea8..884d600625a 100644
--- a/apps/files/l10n/id.js
+++ b/apps/files/l10n/id.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Direktori tidak valid.",
"Files" : "Berkas",
"All files" : "Semua berkas",
+ "Favorites" : "Favorit",
+ "Home" : "Rumah",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Tidak dapat mengunggah {filename} karena ini sebuah direktori atau memiliki ukuran 0 byte",
"Total file size {size1} exceeds upload limit {size2}" : "Jumlah ukuran berkas {size1} melampaui batas unggah {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ruang bebas tidak mencukupi, Anda mengunggah {size1} tetapi hanya {size2} yang tersisa",
@@ -46,12 +48,10 @@ OC.L10N.register(
"Could not create file" : "Tidak dapat membuat berkas",
"Could not create folder" : "Tidak dapat membuat folder",
"Error fetching URL" : "Kesalahan saat mengambil URL",
- "Share" : "Bagikan",
+ "Rename" : "Ubah nama",
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
- "Delete permanently" : "Hapus secara permanen",
- "Rename" : "Ubah nama",
"Pending" : "Menunggu",
"Error moving file." : "Kesalahan saat memindahkan berkas.",
"Error moving file" : "Kesalahan saat memindahkan berkas",
@@ -71,7 +71,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} dan {files}",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s tidak dapat diubah namanya kerena telah dihapus",
"%s could not be renamed" : "%s tidak dapat diubah nama",
"Upload (max. %s)" : "Unggah (maks. %s)",
@@ -79,6 +81,7 @@ OC.L10N.register(
"Maximum upload size" : "Ukuran pengunggahan maksimum",
"max. possible: " : "Kemungkinan maks.:",
"Save" : "Simpan",
+ "Settings" : "Pengaturan",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>",
"New" : "Baru",
@@ -87,7 +90,8 @@ OC.L10N.register(
"New folder" : "Map baru",
"Folder" : "Folder",
"From link" : "Dari tautan",
- "Nothing in here. Upload something!" : "Tidak ada apa-apa di sini. Unggah sesuatu!",
+ "Upload" : "Unggah",
+ "Cancel upload" : "Batal unggah",
"Download" : "Unduh",
"Upload too large" : "Yang diunggah terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini.",
diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json
index d644aa22ec4..bd17646a1a9 100644
--- a/apps/files/l10n/id.json
+++ b/apps/files/l10n/id.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Direktori tidak valid.",
"Files" : "Berkas",
"All files" : "Semua berkas",
+ "Favorites" : "Favorit",
+ "Home" : "Rumah",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Tidak dapat mengunggah {filename} karena ini sebuah direktori atau memiliki ukuran 0 byte",
"Total file size {size1} exceeds upload limit {size2}" : "Jumlah ukuran berkas {size1} melampaui batas unggah {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ruang bebas tidak mencukupi, Anda mengunggah {size1} tetapi hanya {size2} yang tersisa",
@@ -44,12 +46,10 @@
"Could not create file" : "Tidak dapat membuat berkas",
"Could not create folder" : "Tidak dapat membuat folder",
"Error fetching URL" : "Kesalahan saat mengambil URL",
- "Share" : "Bagikan",
+ "Rename" : "Ubah nama",
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
- "Delete permanently" : "Hapus secara permanen",
- "Rename" : "Ubah nama",
"Pending" : "Menunggu",
"Error moving file." : "Kesalahan saat memindahkan berkas.",
"Error moving file" : "Kesalahan saat memindahkan berkas",
@@ -69,7 +69,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} dan {files}",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s tidak dapat diubah namanya kerena telah dihapus",
"%s could not be renamed" : "%s tidak dapat diubah nama",
"Upload (max. %s)" : "Unggah (maks. %s)",
@@ -77,6 +79,7 @@
"Maximum upload size" : "Ukuran pengunggahan maksimum",
"max. possible: " : "Kemungkinan maks.:",
"Save" : "Simpan",
+ "Settings" : "Pengaturan",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>",
"New" : "Baru",
@@ -85,7 +88,8 @@
"New folder" : "Map baru",
"Folder" : "Folder",
"From link" : "Dari tautan",
- "Nothing in here. Upload something!" : "Tidak ada apa-apa di sini. Unggah sesuatu!",
+ "Upload" : "Unggah",
+ "Cancel upload" : "Batal unggah",
"Download" : "Unduh",
"Upload too large" : "Yang diunggah terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini.",
diff --git a/apps/files/l10n/io.js b/apps/files/l10n/io.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/io.js
+++ b/apps/files/l10n/io.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/io.json b/apps/files/l10n/io.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/io.json
+++ b/apps/files/l10n/io.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index 5f3e2e78f26..129d381c117 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -18,10 +18,10 @@ OC.L10N.register(
"Upload cancelled." : "Hætt við innsendingu.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.",
"{new_name} already exists" : "{new_name} er þegar til",
- "Share" : "Deila",
+ "Rename" : "Endurskýra",
"Delete" : "Eyða",
"Unshare" : "Hætta deilingu",
- "Rename" : "Endurskýra",
+ "Select" : "Velja",
"Pending" : "Bíður",
"Error" : "Villa",
"Name" : "Nafn",
@@ -30,16 +30,19 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "Meðhöndlun skrár",
"Maximum upload size" : "Hámarks stærð innsendingar",
"max. possible: " : "hámark mögulegt: ",
"Save" : "Vista",
+ "Settings" : "Stillingar",
"WebDAV" : "WebDAV",
"New" : "Nýtt",
"Text file" : "Texta skrá",
"Folder" : "Mappa",
"From link" : "Af tengli",
- "Nothing in here. Upload something!" : "Ekkert hér. Settu eitthvað inn!",
+ "Upload" : "Senda inn",
+ "Cancel upload" : "Hætta við innsendingu",
"Download" : "Niðurhal",
"Upload too large" : "Innsend skrá er of stór",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index 0a6afcb0b64..48e0aa4c501 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -16,10 +16,10 @@
"Upload cancelled." : "Hætt við innsendingu.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.",
"{new_name} already exists" : "{new_name} er þegar til",
- "Share" : "Deila",
+ "Rename" : "Endurskýra",
"Delete" : "Eyða",
"Unshare" : "Hætta deilingu",
- "Rename" : "Endurskýra",
+ "Select" : "Velja",
"Pending" : "Bíður",
"Error" : "Villa",
"Name" : "Nafn",
@@ -28,16 +28,19 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "Meðhöndlun skrár",
"Maximum upload size" : "Hámarks stærð innsendingar",
"max. possible: " : "hámark mögulegt: ",
"Save" : "Vista",
+ "Settings" : "Stillingar",
"WebDAV" : "WebDAV",
"New" : "Nýtt",
"Text file" : "Texta skrá",
"Folder" : "Mappa",
"From link" : "Af tengli",
- "Nothing in here. Upload something!" : "Ekkert hér. Settu eitthvað inn!",
+ "Upload" : "Senda inn",
+ "Cancel upload" : "Hætta við innsendingu",
"Download" : "Niðurhal",
"Upload too large" : "Innsend skrá er of stór",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 939f5e55dac..7ad4bcf787f 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -21,10 +21,10 @@ OC.L10N.register(
"Error when creating the folder" : "Errore durante la creazione della cartella",
"Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.",
"Invalid Token" : "Token non valido",
- "No file was uploaded. Unknown error" : "Nessun file è stato inviato. Errore sconosciuto",
+ "No file was uploaded. Unknown error" : "Nessun file è stato caricato. Errore sconosciuto",
"There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Il file caricato supera la direttiva upload_max_filesize in php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file inviato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
"The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente",
"No file was uploaded" : "Nessun file è stato caricato",
"Missing a temporary folder" : "Manca una cartella temporanea",
@@ -35,10 +35,12 @@ OC.L10N.register(
"Invalid directory." : "Cartella non valida.",
"Files" : "File",
"All files" : "Tutti i file",
+ "Favorites" : "Preferiti",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte.",
"Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spazio insufficiente, stai caricando {size1}, ma è rimasto solo {size2}",
- "Upload cancelled." : "Invio annullato",
+ "Upload cancelled." : "Caricamento annullato.",
"Could not get result from server." : "Impossibile ottenere il risultato dal server.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
"URL cannot be empty" : "L'URL non può essere vuoto.",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Impossibile creare il file",
"Could not create folder" : "Impossibile creare la cartella",
"Error fetching URL" : "Errore durante il recupero dello URL",
- "Share" : "Condividi",
+ "Rename" : "Rinomina",
"Delete" : "Elimina",
"Disconnect storage" : "Disconnetti archiviazione",
"Unshare" : "Rimuovi condivisione",
- "Delete permanently" : "Elimina definitivamente",
- "Rename" : "Rinomina",
+ "Select" : "Seleziona",
"Pending" : "In corso",
+ "Unable to determine date" : "Impossibile determinare la data",
"Error moving file." : "Errore durante lo spostamento del file.",
"Error moving file" : "Errore durante lo spostamento del file",
"Error" : "Errore",
"Could not rename file" : "Impossibile rinominare il file",
"Error deleting file." : "Errore durante l'eliminazione del file.",
+ "No entries in this folder match '{filter}'" : "Nessuna voce in questa cartella corrisponde a '{filter}'",
"Name" : "Nome",
"Size" : "Dimensione",
"Modified" : "Modificato",
@@ -71,14 +74,18 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["corrisponde a '{filter}'","corrispondono a '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Preferiti",
+ "Favorite" : "Preferito",
"%s could not be renamed as it has been deleted" : "%s non può essere rinominato poiché è stato eliminato",
"%s could not be renamed" : "%s non può essere rinominato",
"Upload (max. %s)" : "Carica (massimo %s)",
"File handling" : "Gestione file",
- "Maximum upload size" : "Dimensione massima upload",
+ "Maximum upload size" : "Dimensione massima caricamento",
"max. possible: " : "numero mass.: ",
"Save" : "Salva",
+ "Settings" : "Impostazioni",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>",
"New" : "Nuovo",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Nuova cartella",
"Folder" : "Cartella",
"From link" : "Da collegamento",
- "Nothing in here. Upload something!" : "Non c'è niente qui. Carica qualcosa!",
+ "Upload" : "Carica",
+ "Cancel upload" : "Annulla caricamento",
+ "No files yet" : "Nessun file ancora",
+ "Upload some content or sync with your devices!" : "Carica alcuni contenuti o sincronizza con i tuoi dispositivi!",
+ "No entries found in this folder" : "Nessuna voce trovata in questa cartella",
+ "Select all" : "Seleziona tutto",
"Download" : "Scarica",
"Upload too large" : "Caricamento troppo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "I file che stai provando a caricare superano la dimensione massima consentita su questo server.",
"Files are being scanned, please wait." : "Scansione dei file in corso, attendi",
- "Currently scanning" : "Scansione in corso"
+ "Currently scanning" : "Scansione in corso",
+ "No favorites" : "Nessun preferito",
+ "Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 8686051f461..3e799998d77 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -19,10 +19,10 @@
"Error when creating the folder" : "Errore durante la creazione della cartella",
"Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.",
"Invalid Token" : "Token non valido",
- "No file was uploaded. Unknown error" : "Nessun file è stato inviato. Errore sconosciuto",
+ "No file was uploaded. Unknown error" : "Nessun file è stato caricato. Errore sconosciuto",
"There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Il file caricato supera la direttiva upload_max_filesize in php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file inviato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
"The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente",
"No file was uploaded" : "Nessun file è stato caricato",
"Missing a temporary folder" : "Manca una cartella temporanea",
@@ -33,10 +33,12 @@
"Invalid directory." : "Cartella non valida.",
"Files" : "File",
"All files" : "Tutti i file",
+ "Favorites" : "Preferiti",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte.",
"Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spazio insufficiente, stai caricando {size1}, ma è rimasto solo {size2}",
- "Upload cancelled." : "Invio annullato",
+ "Upload cancelled." : "Caricamento annullato.",
"Could not get result from server." : "Impossibile ottenere il risultato dal server.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
"URL cannot be empty" : "L'URL non può essere vuoto.",
@@ -44,18 +46,19 @@
"Could not create file" : "Impossibile creare il file",
"Could not create folder" : "Impossibile creare la cartella",
"Error fetching URL" : "Errore durante il recupero dello URL",
- "Share" : "Condividi",
+ "Rename" : "Rinomina",
"Delete" : "Elimina",
"Disconnect storage" : "Disconnetti archiviazione",
"Unshare" : "Rimuovi condivisione",
- "Delete permanently" : "Elimina definitivamente",
- "Rename" : "Rinomina",
+ "Select" : "Seleziona",
"Pending" : "In corso",
+ "Unable to determine date" : "Impossibile determinare la data",
"Error moving file." : "Errore durante lo spostamento del file.",
"Error moving file" : "Errore durante lo spostamento del file",
"Error" : "Errore",
"Could not rename file" : "Impossibile rinominare il file",
"Error deleting file." : "Errore durante l'eliminazione del file.",
+ "No entries in this folder match '{filter}'" : "Nessuna voce in questa cartella corrisponde a '{filter}'",
"Name" : "Nome",
"Size" : "Dimensione",
"Modified" : "Modificato",
@@ -69,14 +72,18 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["corrisponde a '{filter}'","corrispondono a '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Preferiti",
+ "Favorite" : "Preferito",
"%s could not be renamed as it has been deleted" : "%s non può essere rinominato poiché è stato eliminato",
"%s could not be renamed" : "%s non può essere rinominato",
"Upload (max. %s)" : "Carica (massimo %s)",
"File handling" : "Gestione file",
- "Maximum upload size" : "Dimensione massima upload",
+ "Maximum upload size" : "Dimensione massima caricamento",
"max. possible: " : "numero mass.: ",
"Save" : "Salva",
+ "Settings" : "Impostazioni",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>",
"New" : "Nuovo",
@@ -85,11 +92,18 @@
"New folder" : "Nuova cartella",
"Folder" : "Cartella",
"From link" : "Da collegamento",
- "Nothing in here. Upload something!" : "Non c'è niente qui. Carica qualcosa!",
+ "Upload" : "Carica",
+ "Cancel upload" : "Annulla caricamento",
+ "No files yet" : "Nessun file ancora",
+ "Upload some content or sync with your devices!" : "Carica alcuni contenuti o sincronizza con i tuoi dispositivi!",
+ "No entries found in this folder" : "Nessuna voce trovata in questa cartella",
+ "Select all" : "Seleziona tutto",
"Download" : "Scarica",
"Upload too large" : "Caricamento troppo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "I file che stai provando a caricare superano la dimensione massima consentita su questo server.",
"Files are being scanned, please wait." : "Scansione dei file in corso, attendi",
- "Currently scanning" : "Scansione in corso"
+ "Currently scanning" : "Scansione in corso",
+ "No favorites" : "Nessun preferito",
+ "Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 201da49664b..828ff65287b 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "無効なディレクトリです。",
"Files" : "ファイル",
"All files" : "すべてのファイル",
+ "Favorites" : "お気に入り",
+ "Home" : "住居",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "ディレクトリもしくは0バイトのため {filename} をアップロードできません",
"Total file size {size1} exceeds upload limit {size2}" : "合計ファイルサイズ {size1} はアップロード制限 {size2} を超過しています。",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "空き容量が十分でなく、 {size1} をアップロードしていますが、 {size2} しか残っていません。",
@@ -46,13 +48,13 @@ OC.L10N.register(
"Could not create file" : "ファイルを作成できませんでした",
"Could not create folder" : "フォルダーを作成できませんでした",
"Error fetching URL" : "URL取得エラー",
- "Share" : "共有",
+ "Rename" : "名前の変更",
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
- "Delete permanently" : "完全に削除する",
- "Rename" : "名前の変更",
+ "Select" : "選択",
"Pending" : "中断",
+ "Unable to determine date" : "更新日不明",
"Error moving file." : "ファイル移動でエラー",
"Error moving file" : "ファイルの移動エラー",
"Error" : "エラー",
@@ -71,7 +73,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} と {files}",
+ "Favorited" : "お気に入り済",
+ "Favorite" : "お気に入り",
"%s could not be renamed as it has been deleted" : "%s は削除された為、ファイル名を変更できません",
"%s could not be renamed" : "%sの名前を変更できませんでした",
"Upload (max. %s)" : "アップロード ( 最大 %s )",
@@ -79,6 +84,7 @@ OC.L10N.register(
"Maximum upload size" : "最大アップロードサイズ",
"max. possible: " : "最大容量: ",
"Save" : "保存",
+ "Settings" : "設定",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV経由でのファイルアクセス</a>にはこのアドレスを利用してください",
"New" : "新規作成",
@@ -87,11 +93,17 @@ OC.L10N.register(
"New folder" : "新しいフォルダー",
"Folder" : "フォルダー",
"From link" : "リンク",
- "Nothing in here. Upload something!" : "ここには何もありません。何かアップロードしてください。",
+ "Upload" : "アップロード",
+ "Cancel upload" : "アップロードをキャンセル",
+ "No files yet" : "ファイルなし",
+ "Upload some content or sync with your devices!" : "何かコンテンツをアップロードするか、デバイスからファイルを同期してください。",
+ "Select all" : "すべて選択",
"Download" : "ダウンロード",
"Upload too large" : "アップロードには大きすぎます。",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "アップロードしようとしているファイルは、サーバーで規定された最大サイズを超えています。",
"Files are being scanned, please wait." : "ファイルをスキャンしています、しばらくお待ちください。",
- "Currently scanning" : "現在スキャン中"
+ "Currently scanning" : "現在スキャン中",
+ "No favorites" : "お気に入りなし",
+ "Files and folders you mark as favorite will show up here" : "お気に入りに登録されたファイルやフォルダは、ここに表示されます。"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 314bc723322..7f83bb57797 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -33,6 +33,8 @@
"Invalid directory." : "無効なディレクトリです。",
"Files" : "ファイル",
"All files" : "すべてのファイル",
+ "Favorites" : "お気に入り",
+ "Home" : "住居",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "ディレクトリもしくは0バイトのため {filename} をアップロードできません",
"Total file size {size1} exceeds upload limit {size2}" : "合計ファイルサイズ {size1} はアップロード制限 {size2} を超過しています。",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "空き容量が十分でなく、 {size1} をアップロードしていますが、 {size2} しか残っていません。",
@@ -44,13 +46,13 @@
"Could not create file" : "ファイルを作成できませんでした",
"Could not create folder" : "フォルダーを作成できませんでした",
"Error fetching URL" : "URL取得エラー",
- "Share" : "共有",
+ "Rename" : "名前の変更",
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
- "Delete permanently" : "完全に削除する",
- "Rename" : "名前の変更",
+ "Select" : "選択",
"Pending" : "中断",
+ "Unable to determine date" : "更新日不明",
"Error moving file." : "ファイル移動でエラー",
"Error moving file" : "ファイルの移動エラー",
"Error" : "エラー",
@@ -69,7 +71,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} と {files}",
+ "Favorited" : "お気に入り済",
+ "Favorite" : "お気に入り",
"%s could not be renamed as it has been deleted" : "%s は削除された為、ファイル名を変更できません",
"%s could not be renamed" : "%sの名前を変更できませんでした",
"Upload (max. %s)" : "アップロード ( 最大 %s )",
@@ -77,6 +82,7 @@
"Maximum upload size" : "最大アップロードサイズ",
"max. possible: " : "最大容量: ",
"Save" : "保存",
+ "Settings" : "設定",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV経由でのファイルアクセス</a>にはこのアドレスを利用してください",
"New" : "新規作成",
@@ -85,11 +91,17 @@
"New folder" : "新しいフォルダー",
"Folder" : "フォルダー",
"From link" : "リンク",
- "Nothing in here. Upload something!" : "ここには何もありません。何かアップロードしてください。",
+ "Upload" : "アップロード",
+ "Cancel upload" : "アップロードをキャンセル",
+ "No files yet" : "ファイルなし",
+ "Upload some content or sync with your devices!" : "何かコンテンツをアップロードするか、デバイスからファイルを同期してください。",
+ "Select all" : "すべて選択",
"Download" : "ダウンロード",
"Upload too large" : "アップロードには大きすぎます。",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "アップロードしようとしているファイルは、サーバーで規定された最大サイズを超えています。",
"Files are being scanned, please wait." : "ファイルをスキャンしています、しばらくお待ちください。",
- "Currently scanning" : "現在スキャン中"
+ "Currently scanning" : "現在スキャン中",
+ "No favorites" : "お気に入りなし",
+ "Files and folders you mark as favorite will show up here" : "お気に入りに登録されたファイルやフォルダは、ここに表示されます。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/jv.js b/apps/files/l10n/jv.js
index b9de258aa2c..73f597c17c2 100644
--- a/apps/files/l10n/jv.js
+++ b/apps/files/l10n/jv.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Download" : "Njipuk"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/jv.json b/apps/files/l10n/jv.json
index c5064a9ff57..42528a5aeab 100644
--- a/apps/files/l10n/jv.json
+++ b/apps/files/l10n/jv.json
@@ -2,6 +2,7 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Download" : "Njipuk"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ka_GE.js b/apps/files/l10n/ka_GE.js
index 9845b12b129..2b5339fa774 100644
--- a/apps/files/l10n/ka_GE.js
+++ b/apps/files/l10n/ka_GE.js
@@ -17,14 +17,14 @@ OC.L10N.register(
"Not enough storage available" : "საცავში საკმარისი ადგილი არ არის",
"Invalid directory." : "დაუშვებელი დირექტორია.",
"Files" : "ფაილები",
+ "Favorites" : "ფავორიტები",
+ "Home" : "სახლი",
"Upload cancelled." : "ატვირთვა შეჩერებულ იქნა.",
"File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
"{new_name} already exists" : "{new_name} უკვე არსებობს",
- "Share" : "გაზიარება",
+ "Rename" : "გადარქმევა",
"Delete" : "წაშლა",
"Unshare" : "გაუზიარებადი",
- "Delete permanently" : "სრულად წაშლა",
- "Rename" : "გადარქმევა",
"Pending" : "მოცდის რეჟიმში",
"Error" : "შეცდომა",
"Name" : "სახელი",
@@ -35,17 +35,21 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : [""],
"Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!",
"Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorite" : "ფავორიტი",
"File handling" : "ფაილის დამუშავება",
"Maximum upload size" : "მაქსიმუმ ატვირთის ზომა",
"max. possible: " : "მაქს. შესაძლებელი:",
"Save" : "შენახვა",
+ "Settings" : "პარამეტრები",
"WebDAV" : "WebDAV",
"New" : "ახალი",
"Text file" : "ტექსტური ფაილი",
"New folder" : "ახალი ფოლდერი",
"Folder" : "საქაღალდე",
"From link" : "მისამართიდან",
- "Nothing in here. Upload something!" : "აქ არაფერი არ არის. ატვირთე რამე!",
+ "Upload" : "ატვირთვა",
+ "Cancel upload" : "ატვირთვის გაუქმება",
"Download" : "ჩამოტვირთვა",
"Upload too large" : "ასატვირთი ფაილი ძალიან დიდია",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.",
diff --git a/apps/files/l10n/ka_GE.json b/apps/files/l10n/ka_GE.json
index 65dde81cfc4..664c8e3c0e0 100644
--- a/apps/files/l10n/ka_GE.json
+++ b/apps/files/l10n/ka_GE.json
@@ -15,14 +15,14 @@
"Not enough storage available" : "საცავში საკმარისი ადგილი არ არის",
"Invalid directory." : "დაუშვებელი დირექტორია.",
"Files" : "ფაილები",
+ "Favorites" : "ფავორიტები",
+ "Home" : "სახლი",
"Upload cancelled." : "ატვირთვა შეჩერებულ იქნა.",
"File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
"{new_name} already exists" : "{new_name} უკვე არსებობს",
- "Share" : "გაზიარება",
+ "Rename" : "გადარქმევა",
"Delete" : "წაშლა",
"Unshare" : "გაუზიარებადი",
- "Delete permanently" : "სრულად წაშლა",
- "Rename" : "გადარქმევა",
"Pending" : "მოცდის რეჟიმში",
"Error" : "შეცდომა",
"Name" : "სახელი",
@@ -33,17 +33,21 @@
"_Uploading %n file_::_Uploading %n files_" : [""],
"Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!",
"Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorite" : "ფავორიტი",
"File handling" : "ფაილის დამუშავება",
"Maximum upload size" : "მაქსიმუმ ატვირთის ზომა",
"max. possible: " : "მაქს. შესაძლებელი:",
"Save" : "შენახვა",
+ "Settings" : "პარამეტრები",
"WebDAV" : "WebDAV",
"New" : "ახალი",
"Text file" : "ტექსტური ფაილი",
"New folder" : "ახალი ფოლდერი",
"Folder" : "საქაღალდე",
"From link" : "მისამართიდან",
- "Nothing in here. Upload something!" : "აქ არაფერი არ არის. ატვირთე რამე!",
+ "Upload" : "ატვირთვა",
+ "Cancel upload" : "ატვირთვის გაუქმება",
"Download" : "ჩამოტვირთვა",
"Upload too large" : "ასატვირთი ფაილი ძალიან დიდია",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.",
diff --git a/apps/files/l10n/km.js b/apps/files/l10n/km.js
index 5a44796d1e7..1efaad9e034 100644
--- a/apps/files/l10n/km.js
+++ b/apps/files/l10n/km.js
@@ -11,11 +11,9 @@ OC.L10N.register(
"Files" : "ឯកសារ",
"Upload cancelled." : "បាន​បោះបង់​ការ​ផ្ទុក​ឡើង។",
"{new_name} already exists" : "មាន​ឈ្មោះ {new_name} រួច​ហើយ",
- "Share" : "ចែក​រំលែក",
+ "Rename" : "ប្ដូរ​ឈ្មោះ",
"Delete" : "លុប",
"Unshare" : "លែង​ចែក​រំលែក",
- "Delete permanently" : "លុប​ជា​អចិន្ត្រៃយ៍",
- "Rename" : "ប្ដូរ​ឈ្មោះ",
"Pending" : "កំពុង​រង់ចាំ",
"Error" : "កំហុស",
"Name" : "ឈ្មោះ",
@@ -24,15 +22,18 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"Maximum upload size" : "ទំហំ​ផ្ទុកឡើង​ជា​អតិបរមា",
"Save" : "រក្សាទុក",
+ "Settings" : "ការកំណត់",
"WebDAV" : "WebDAV",
"New" : "ថ្មី",
"Text file" : "ឯកសារ​អក្សរ",
"New folder" : "ថត​ថ្មី",
"Folder" : "ថត",
"From link" : "ពី​តំណ",
- "Nothing in here. Upload something!" : "គ្មាន​អ្វី​នៅ​ទីនេះ​ទេ។ ផ្ទុក​ឡើង​អ្វី​មួយ!",
+ "Upload" : "ផ្ទុក​ឡើង",
+ "Cancel upload" : "បោះបង់​ការ​ផ្ទុកឡើង",
"Download" : "ទាញយក",
"Upload too large" : "ផ្ទុក​ឡើង​ធំ​ពេក"
},
diff --git a/apps/files/l10n/km.json b/apps/files/l10n/km.json
index 6ed24afe47a..1a94fd13d3d 100644
--- a/apps/files/l10n/km.json
+++ b/apps/files/l10n/km.json
@@ -9,11 +9,9 @@
"Files" : "ឯកសារ",
"Upload cancelled." : "បាន​បោះបង់​ការ​ផ្ទុក​ឡើង។",
"{new_name} already exists" : "មាន​ឈ្មោះ {new_name} រួច​ហើយ",
- "Share" : "ចែក​រំលែក",
+ "Rename" : "ប្ដូរ​ឈ្មោះ",
"Delete" : "លុប",
"Unshare" : "លែង​ចែក​រំលែក",
- "Delete permanently" : "លុប​ជា​អចិន្ត្រៃយ៍",
- "Rename" : "ប្ដូរ​ឈ្មោះ",
"Pending" : "កំពុង​រង់ចាំ",
"Error" : "កំហុស",
"Name" : "ឈ្មោះ",
@@ -22,15 +20,18 @@
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"Maximum upload size" : "ទំហំ​ផ្ទុកឡើង​ជា​អតិបរមា",
"Save" : "រក្សាទុក",
+ "Settings" : "ការកំណត់",
"WebDAV" : "WebDAV",
"New" : "ថ្មី",
"Text file" : "ឯកសារ​អក្សរ",
"New folder" : "ថត​ថ្មី",
"Folder" : "ថត",
"From link" : "ពី​តំណ",
- "Nothing in here. Upload something!" : "គ្មាន​អ្វី​នៅ​ទីនេះ​ទេ។ ផ្ទុក​ឡើង​អ្វី​មួយ!",
+ "Upload" : "ផ្ទុក​ឡើង",
+ "Cancel upload" : "បោះបង់​ការ​ផ្ទុកឡើង",
"Download" : "ទាញយក",
"Upload too large" : "ផ្ទុក​ឡើង​ធំ​ពេក"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/files/l10n/kn.js b/apps/files/l10n/kn.js
index d1bbfca2dd4..783eb4dc14c 100644
--- a/apps/files/l10n/kn.js
+++ b/apps/files/l10n/kn.js
@@ -1,8 +1,89 @@
OC.L10N.register(
"files",
{
- "_%n folder_::_%n folders_" : [""],
- "_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "Storage not available" : "ಲಭ್ಯವಿಲ್ಲ ಸಂಗ್ರಹ",
+ "Storage invalid" : "ಸಂಗ್ರಹ ಅಮಾನ್ಯವಾಗಿದೆ",
+ "Unknown error" : "ಗೊತ್ತಿಲ್ಲದ ದೋಷ",
+ "Could not move %s - File with this name already exists" : "%s ಹೆಸರು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ - ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ",
+ "Could not move %s" : "%s ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ",
+ "Permission denied" : "ಅನುಮತಿ ನಿರಾಕರಿಸಲಾಗಿದೆ",
+ "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.",
+ "\"%s\" is an invalid file name." : "\"%s\" ಅಮಾನ್ಯ ಕಡತ ಹೆಸರು.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ಅಮಾನ್ಯವಾದ ಹೆಸರು, '\\', '/', '<', '>', ':', '\"', '|', '?' ಮತ್ತು '*' ಅನುಮತಿ ಇಲ್ಲ.",
+ "The target folder has been moved or deleted." : "ಕೋಶದ ಉದ್ದೇಶಿತ ಸ್ಥಳ ಬದಲಾವಣೆ ಮಾಡಲಾಗಿದೆ ಅಥವಾ ಅಳಿಸಲಾಗಿದೆ.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "%s ಹೆಸರಿನ ಕೋಶವನ್ನು %s ಈಗಾಗಲೇ ಬಳಸಲಾಗುತ್ತದೆ. ಬೇರೆ ಹೆಸರನ್ನು ಆಯ್ಕೆಮಾಡಿ.",
+ "Not a valid source" : "ತೋರಿಸಲಾದ ಸ್ಥಾನ ಅಮಾನ್ಯ",
+ "Server is not allowed to open URLs, please check the server configuration" : "ಸರ್ವರ್ URL ಗಳನ್ನು ತೆರೆಯಲು ಅನುಮತಿ ಇಲ್ಲ, ಸರ್ವರ್ ಕಾನ್ಫಿಗರೇಶನ್ ಪರಿಶೀಲಿಸಿ",
+ "The file exceeds your quota by %s" : "ಕಡತ ಪ್ರಮಾಣ ನಿಮಗಿರುವ ಮಿತಿಗಿಂತ %s ಹೆಚ್ಚಾಗಿದೆ",
+ "Error while downloading %s to %s" : "%s ರಿಂದ %s ವರ್ಗಾವಾಣೆ ಮಾಡುವಾಗ ಲೋಪವಾದೆ",
+ "Error when creating the file" : "ಕಡತವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Folder name cannot be empty." : "ಕೊಶದ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.",
+ "Error when creating the folder" : "ಕೊಶವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Unable to set upload directory." : "ಪೇರಿಸವ ಕೋಶವನ್ನು ಹೊಂದಿಸಲಾಗಲಿಲ್ಲ.",
+ "Invalid Token" : "ಅಮಾನ್ಯ ಸಾಂಕೇತಿಕ",
+ "No file was uploaded. Unknown error" : "ಕಡತ ವರ್ಗಾವಣೆ ಅಜ್ಞಾತ ದೋಷದಿಂದ ವಿಪುಲವಾಗಿದೆ",
+ "There is no error, the file uploaded with success" : "ವರ್ಗಾವಣೆ ಯಾವುದೇ ದೋಷ ಕಂಡುಬರದೆ ಯಶಸ್ವಿಯಾಗಿದೆ",
+ "The uploaded file was only partially uploaded" : "ವರ್ಗಾವಣೆ ಮಾಡಲಾಗುತ್ತಿದ್ದ ಕಡತವನ್ನು ಭಾಗಶಃ ಮಾತ್ರ ಪೇರಿಸಲು ಸಾದ್ಯವಾಗಿದೆ",
+ "No file was uploaded" : "ವರ್ಗಾವಣೆಗೆ ಯಾವುದೇ ಕಡತಗಳು ಕಂಡುಬಂದಿಲ್ಲ",
+ "Missing a temporary folder" : "ತಾತ್ಕಾಲಿಕ ಕಡತಕೋಶ ದೊರೆಕುತ್ತಿಲ್ಲ",
+ "Failed to write to disk" : "ಸ್ಮರಣೆ ಸಾಧನಕ್ಕೇಬರೆಯಲು ವಿಫಲವಾಗಿದೆ",
+ "Not enough storage available" : "ಲಭ್ಯವಿರುವ ಸಂಗ್ರಹ ಸಾಕಾಗುವುದಿಲ್ಲ",
+ "Invalid directory." : "ಅಮಾನ್ಯ ಕಡತಕೋಶ.",
+ "Files" : "ಕಡತಗಳು",
+ "All files" : "ಎಲ್ಲಾ ಕಡತಗಳು",
+ "Favorites" : "ಅಚ್ಚುಮೆಚ್ಚಿನ",
+ "Home" : "ಮುಖಪುಟ",
+ "Upload cancelled." : "ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದು ಮಾಡಲಾಯಿತು.",
+ "Could not get result from server." : "ಪರಿಚಾರಕ ಕಣಕದಿಂದ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.",
+ "URL cannot be empty" : "ಜಾಲದ ಕೊಂಡಿಯ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ",
+ "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ",
+ "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ",
+ "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ",
+ "Rename" : "ಮರುಹೆಸರಿಸು",
+ "Delete" : "ಅಳಿಸಿ",
+ "Disconnect storage" : "ಸಂಗ್ರಹ ಸಾಧನವನ್ನು ತೆಗೆದುಹಾಕಿ",
+ "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ",
+ "Select" : "ಆಯ್ಕೆ ಮಾಡಿ",
+ "Pending" : "ಬಾಕಿ ಇದೆ",
+ "Unable to determine date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Error moving file." : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ.",
+ "Error moving file" : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
+ "Could not rename file" : "ಕಡತ ಮರುಹೆಸರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ",
+ "Error deleting file." : "ಕಡತವನ್ನು ಅಳಿಸುವಲ್ಲಿ ಲೋಪವಾದೆ",
+ "Name" : "ಹೆಸರು",
+ "Size" : " ಪ್ರಮಾಣ",
+ "Modified" : "ಬದಲಾಯಿಸಿದ",
+ "_%n folder_::_%n folders_" : ["%n ಕೋಶ(ಗಳು)"],
+ "_%n file_::_%n files_" : ["%n ಕಡತ"],
+ "You don’t have permission to upload or create files here" : "ನಿಮಗೆ ಇಲ್ಲಿ ಅಪ್ಲೋಡ್ ಅಥವಾ ಕಡತಗಳನ್ನು ರಚಿಸವ ಅನುಮತಿ ಇಲ್ಲ",
+ "_Uploading %n file_::_Uploading %n files_" : ["%n 'ನೆ ಕಡತವನ್ನು ವರ್ಗಾಯಿಸಲಾಗುತ್ತಿದೆ"],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು",
+ "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ",
+ "Upload (max. %s)" : "ವರ್ಗಾವಣೆ (ಗರಿಷ್ಠ %s)",
+ "File handling" : "ಕಡತ ನಿರ್ವಹಣೆ",
+ "Maximum upload size" : "ಗರಿಷ್ಠ ವರ್ಗಾವಣೆ ಗಾತ್ರ",
+ "max. possible: " : "ಗರಿಷ್ಠ. ಸಾಧ್ಯ:",
+ "Save" : "ಉಳಿಸಿ",
+ "Settings" : "ಆಯ್ಕೆ",
+ "WebDAV" : "WebDAV",
+ "New" : "ಹೊಸ",
+ "New text file" : "ಹೊಸ ಸರಳಾಕ್ಷರದ ಕಡತ ",
+ "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ",
+ "New folder" : "ಹೊಸ ಕಡತಕೋಶ",
+ "Folder" : "ಕಡತಕೋಶ",
+ "From link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ",
+ "Upload" : "ವರ್ಗಾಯಿಸಿ",
+ "Cancel upload" : "ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ",
+ "No files yet" : "ಇನ್ನೂ ಯಾವುದೇ ಕಡತಗಳು ಇಲ್ಲಿಲ",
+ "Select all" : "ಎಲ್ಲಾ ಆಯ್ಕೆ ಮಾಡಿ",
+ "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ",
+ "Upload too large" : "ದೊಡ್ಡ ಪ್ರಮಾಣದ ಪ್ರತಿಗಳನ್ನು ವರ್ಗಾವಣೆ ಮಾಡಲು ಸಾದ್ಯವಿಲ್ಲ",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "ನೀವು ವರ್ಗಾಯಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವ ಕಡತಗಳ ಗಾತ್ರ, ಈ ಗಣಕ ಕೋಶದ ಗರಿಷ್ಠ ಕಡತ ಮೀತಿಯಾನ್ನು ಮೀರುವಂತಿಲ್ಲ.",
+ "Files are being scanned, please wait." : "ಕಡತಗಳನ್ನು ಪರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ, ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ.",
+ "Currently scanning" : "ಪ್ರಸ್ತುತ ಪರೀಕ್ಷೆ",
+ "No favorites" : "ಯಾವ ಅಚ್ಚುಮೆಚ್ಚಿನವುಗಳು ಇಲ್ಲ",
+ "Files and folders you mark as favorite will show up here" : "ನೀವು ಗುರುತು ಮಾಡಿರುವ ನೆಚ್ಚಿನ ಕಡತ ಮತ್ತು ಕಡತಕೋಶಗಳನ್ನು ಇಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತಿದೆ"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/kn.json b/apps/files/l10n/kn.json
index e493054d78a..4d25a6b9cb5 100644
--- a/apps/files/l10n/kn.json
+++ b/apps/files/l10n/kn.json
@@ -1,6 +1,87 @@
{ "translations": {
- "_%n folder_::_%n folders_" : [""],
- "_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "Storage not available" : "ಲಭ್ಯವಿಲ್ಲ ಸಂಗ್ರಹ",
+ "Storage invalid" : "ಸಂಗ್ರಹ ಅಮಾನ್ಯವಾಗಿದೆ",
+ "Unknown error" : "ಗೊತ್ತಿಲ್ಲದ ದೋಷ",
+ "Could not move %s - File with this name already exists" : "%s ಹೆಸರು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ - ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ",
+ "Could not move %s" : "%s ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ",
+ "Permission denied" : "ಅನುಮತಿ ನಿರಾಕರಿಸಲಾಗಿದೆ",
+ "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.",
+ "\"%s\" is an invalid file name." : "\"%s\" ಅಮಾನ್ಯ ಕಡತ ಹೆಸರು.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ಅಮಾನ್ಯವಾದ ಹೆಸರು, '\\', '/', '<', '>', ':', '\"', '|', '?' ಮತ್ತು '*' ಅನುಮತಿ ಇಲ್ಲ.",
+ "The target folder has been moved or deleted." : "ಕೋಶದ ಉದ್ದೇಶಿತ ಸ್ಥಳ ಬದಲಾವಣೆ ಮಾಡಲಾಗಿದೆ ಅಥವಾ ಅಳಿಸಲಾಗಿದೆ.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "%s ಹೆಸರಿನ ಕೋಶವನ್ನು %s ಈಗಾಗಲೇ ಬಳಸಲಾಗುತ್ತದೆ. ಬೇರೆ ಹೆಸರನ್ನು ಆಯ್ಕೆಮಾಡಿ.",
+ "Not a valid source" : "ತೋರಿಸಲಾದ ಸ್ಥಾನ ಅಮಾನ್ಯ",
+ "Server is not allowed to open URLs, please check the server configuration" : "ಸರ್ವರ್ URL ಗಳನ್ನು ತೆರೆಯಲು ಅನುಮತಿ ಇಲ್ಲ, ಸರ್ವರ್ ಕಾನ್ಫಿಗರೇಶನ್ ಪರಿಶೀಲಿಸಿ",
+ "The file exceeds your quota by %s" : "ಕಡತ ಪ್ರಮಾಣ ನಿಮಗಿರುವ ಮಿತಿಗಿಂತ %s ಹೆಚ್ಚಾಗಿದೆ",
+ "Error while downloading %s to %s" : "%s ರಿಂದ %s ವರ್ಗಾವಾಣೆ ಮಾಡುವಾಗ ಲೋಪವಾದೆ",
+ "Error when creating the file" : "ಕಡತವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Folder name cannot be empty." : "ಕೊಶದ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.",
+ "Error when creating the folder" : "ಕೊಶವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Unable to set upload directory." : "ಪೇರಿಸವ ಕೋಶವನ್ನು ಹೊಂದಿಸಲಾಗಲಿಲ್ಲ.",
+ "Invalid Token" : "ಅಮಾನ್ಯ ಸಾಂಕೇತಿಕ",
+ "No file was uploaded. Unknown error" : "ಕಡತ ವರ್ಗಾವಣೆ ಅಜ್ಞಾತ ದೋಷದಿಂದ ವಿಪುಲವಾಗಿದೆ",
+ "There is no error, the file uploaded with success" : "ವರ್ಗಾವಣೆ ಯಾವುದೇ ದೋಷ ಕಂಡುಬರದೆ ಯಶಸ್ವಿಯಾಗಿದೆ",
+ "The uploaded file was only partially uploaded" : "ವರ್ಗಾವಣೆ ಮಾಡಲಾಗುತ್ತಿದ್ದ ಕಡತವನ್ನು ಭಾಗಶಃ ಮಾತ್ರ ಪೇರಿಸಲು ಸಾದ್ಯವಾಗಿದೆ",
+ "No file was uploaded" : "ವರ್ಗಾವಣೆಗೆ ಯಾವುದೇ ಕಡತಗಳು ಕಂಡುಬಂದಿಲ್ಲ",
+ "Missing a temporary folder" : "ತಾತ್ಕಾಲಿಕ ಕಡತಕೋಶ ದೊರೆಕುತ್ತಿಲ್ಲ",
+ "Failed to write to disk" : "ಸ್ಮರಣೆ ಸಾಧನಕ್ಕೇಬರೆಯಲು ವಿಫಲವಾಗಿದೆ",
+ "Not enough storage available" : "ಲಭ್ಯವಿರುವ ಸಂಗ್ರಹ ಸಾಕಾಗುವುದಿಲ್ಲ",
+ "Invalid directory." : "ಅಮಾನ್ಯ ಕಡತಕೋಶ.",
+ "Files" : "ಕಡತಗಳು",
+ "All files" : "ಎಲ್ಲಾ ಕಡತಗಳು",
+ "Favorites" : "ಅಚ್ಚುಮೆಚ್ಚಿನ",
+ "Home" : "ಮುಖಪುಟ",
+ "Upload cancelled." : "ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದು ಮಾಡಲಾಯಿತು.",
+ "Could not get result from server." : "ಪರಿಚಾರಕ ಕಣಕದಿಂದ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.",
+ "URL cannot be empty" : "ಜಾಲದ ಕೊಂಡಿಯ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ",
+ "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ",
+ "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ",
+ "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ",
+ "Rename" : "ಮರುಹೆಸರಿಸು",
+ "Delete" : "ಅಳಿಸಿ",
+ "Disconnect storage" : "ಸಂಗ್ರಹ ಸಾಧನವನ್ನು ತೆಗೆದುಹಾಕಿ",
+ "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ",
+ "Select" : "ಆಯ್ಕೆ ಮಾಡಿ",
+ "Pending" : "ಬಾಕಿ ಇದೆ",
+ "Unable to determine date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Error moving file." : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ.",
+ "Error moving file" : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
+ "Could not rename file" : "ಕಡತ ಮರುಹೆಸರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ",
+ "Error deleting file." : "ಕಡತವನ್ನು ಅಳಿಸುವಲ್ಲಿ ಲೋಪವಾದೆ",
+ "Name" : "ಹೆಸರು",
+ "Size" : " ಪ್ರಮಾಣ",
+ "Modified" : "ಬದಲಾಯಿಸಿದ",
+ "_%n folder_::_%n folders_" : ["%n ಕೋಶ(ಗಳು)"],
+ "_%n file_::_%n files_" : ["%n ಕಡತ"],
+ "You don’t have permission to upload or create files here" : "ನಿಮಗೆ ಇಲ್ಲಿ ಅಪ್ಲೋಡ್ ಅಥವಾ ಕಡತಗಳನ್ನು ರಚಿಸವ ಅನುಮತಿ ಇಲ್ಲ",
+ "_Uploading %n file_::_Uploading %n files_" : ["%n 'ನೆ ಕಡತವನ್ನು ವರ್ಗಾಯಿಸಲಾಗುತ್ತಿದೆ"],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು",
+ "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ",
+ "Upload (max. %s)" : "ವರ್ಗಾವಣೆ (ಗರಿಷ್ಠ %s)",
+ "File handling" : "ಕಡತ ನಿರ್ವಹಣೆ",
+ "Maximum upload size" : "ಗರಿಷ್ಠ ವರ್ಗಾವಣೆ ಗಾತ್ರ",
+ "max. possible: " : "ಗರಿಷ್ಠ. ಸಾಧ್ಯ:",
+ "Save" : "ಉಳಿಸಿ",
+ "Settings" : "ಆಯ್ಕೆ",
+ "WebDAV" : "WebDAV",
+ "New" : "ಹೊಸ",
+ "New text file" : "ಹೊಸ ಸರಳಾಕ್ಷರದ ಕಡತ ",
+ "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ",
+ "New folder" : "ಹೊಸ ಕಡತಕೋಶ",
+ "Folder" : "ಕಡತಕೋಶ",
+ "From link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ",
+ "Upload" : "ವರ್ಗಾಯಿಸಿ",
+ "Cancel upload" : "ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ",
+ "No files yet" : "ಇನ್ನೂ ಯಾವುದೇ ಕಡತಗಳು ಇಲ್ಲಿಲ",
+ "Select all" : "ಎಲ್ಲಾ ಆಯ್ಕೆ ಮಾಡಿ",
+ "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ",
+ "Upload too large" : "ದೊಡ್ಡ ಪ್ರಮಾಣದ ಪ್ರತಿಗಳನ್ನು ವರ್ಗಾವಣೆ ಮಾಡಲು ಸಾದ್ಯವಿಲ್ಲ",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "ನೀವು ವರ್ಗಾಯಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವ ಕಡತಗಳ ಗಾತ್ರ, ಈ ಗಣಕ ಕೋಶದ ಗರಿಷ್ಠ ಕಡತ ಮೀತಿಯಾನ್ನು ಮೀರುವಂತಿಲ್ಲ.",
+ "Files are being scanned, please wait." : "ಕಡತಗಳನ್ನು ಪರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ, ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ.",
+ "Currently scanning" : "ಪ್ರಸ್ತುತ ಪರೀಕ್ಷೆ",
+ "No favorites" : "ಯಾವ ಅಚ್ಚುಮೆಚ್ಚಿನವುಗಳು ಇಲ್ಲ",
+ "Files and folders you mark as favorite will show up here" : "ನೀವು ಗುರುತು ಮಾಡಿರುವ ನೆಚ್ಚಿನ ಕಡತ ಮತ್ತು ಕಡತಕೋಶಗಳನ್ನು ಇಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತಿದೆ"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index 519652e4796..2146addc20b 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -28,6 +28,8 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "업로드에 실패했습니다. 파일 정보를 가져올 수 없습니다.",
"Invalid directory." : "올바르지 않은 디렉터리입니다.",
"Files" : "파일",
+ "Favorites" : "즐겨찾기",
+ "Home" : "가정",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename}을(를) 업로드할 수 없습니다. 폴더이거나 0 바이트 파일입니다.",
"Upload cancelled." : "업로드가 취소되었습니다.",
"Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.",
@@ -37,11 +39,10 @@ OC.L10N.register(
"Could not create file" : "파일을 만들 수 없음",
"Could not create folder" : "폴더를 만들 수 없음",
"Error fetching URL" : "URL을 가져올 수 없음",
- "Share" : "공유",
+ "Rename" : "이름 바꾸기",
"Delete" : "삭제",
"Unshare" : "공유 해제",
- "Delete permanently" : "영구히 삭제",
- "Rename" : "이름 바꾸기",
+ "Select" : "선택",
"Pending" : "대기 중",
"Error moving file" : "파일 이동 오류",
"Error" : "오류",
@@ -59,12 +60,15 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 그리고 {files}",
+ "Favorite" : "즐겨찾기",
"%s could not be renamed" : "%s의 이름을 변경할 수 없습니다",
"File handling" : "파일 처리",
"Maximum upload size" : "최대 업로드 크기",
"max. possible: " : "최대 가능:",
"Save" : "저장",
+ "Settings" : "설정",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>",
"New" : "새로 만들기",
@@ -73,7 +77,8 @@ OC.L10N.register(
"New folder" : "새 폴더",
"Folder" : "폴더",
"From link" : "링크에서",
- "Nothing in here. Upload something!" : "내용이 없습니다. 업로드할 수 있습니다!",
+ "Upload" : "업로드",
+ "Cancel upload" : "업로드 취소",
"Download" : "다운로드",
"Upload too large" : "업로드한 파일이 너무 큼",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index afcda78ecd0..2086a83f2f5 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -26,6 +26,8 @@
"Upload failed. Could not get file info." : "업로드에 실패했습니다. 파일 정보를 가져올 수 없습니다.",
"Invalid directory." : "올바르지 않은 디렉터리입니다.",
"Files" : "파일",
+ "Favorites" : "즐겨찾기",
+ "Home" : "가정",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename}을(를) 업로드할 수 없습니다. 폴더이거나 0 바이트 파일입니다.",
"Upload cancelled." : "업로드가 취소되었습니다.",
"Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.",
@@ -35,11 +37,10 @@
"Could not create file" : "파일을 만들 수 없음",
"Could not create folder" : "폴더를 만들 수 없음",
"Error fetching URL" : "URL을 가져올 수 없음",
- "Share" : "공유",
+ "Rename" : "이름 바꾸기",
"Delete" : "삭제",
"Unshare" : "공유 해제",
- "Delete permanently" : "영구히 삭제",
- "Rename" : "이름 바꾸기",
+ "Select" : "선택",
"Pending" : "대기 중",
"Error moving file" : "파일 이동 오류",
"Error" : "오류",
@@ -57,12 +58,15 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 그리고 {files}",
+ "Favorite" : "즐겨찾기",
"%s could not be renamed" : "%s의 이름을 변경할 수 없습니다",
"File handling" : "파일 처리",
"Maximum upload size" : "최대 업로드 크기",
"max. possible: " : "최대 가능:",
"Save" : "저장",
+ "Settings" : "설정",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>",
"New" : "새로 만들기",
@@ -71,7 +75,8 @@
"New folder" : "새 폴더",
"Folder" : "폴더",
"From link" : "링크에서",
- "Nothing in here. Upload something!" : "내용이 없습니다. 업로드할 수 있습니다!",
+ "Upload" : "업로드",
+ "Cancel upload" : "업로드 취소",
"Download" : "다운로드",
"Upload too large" : "업로드한 파일이 너무 큼",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
diff --git a/apps/files/l10n/ku_IQ.js b/apps/files/l10n/ku_IQ.js
index 5236669f239..f8d68030265 100644
--- a/apps/files/l10n/ku_IQ.js
+++ b/apps/files/l10n/ku_IQ.js
@@ -2,14 +2,17 @@ OC.L10N.register(
"files",
{
"Files" : "په‌ڕگەکان",
- "Share" : "هاوبەشی کردن",
+ "Select" : "دیاریکردنی",
"Error" : "هه‌ڵه",
"Name" : "ناو",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "پاشکه‌وتکردن",
+ "Settings" : "ڕێکخستنه‌کان",
"Folder" : "بوخچه",
+ "Upload" : "بارکردن",
"Download" : "داگرتن"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ku_IQ.json b/apps/files/l10n/ku_IQ.json
index c11984e29d7..057f5df0a85 100644
--- a/apps/files/l10n/ku_IQ.json
+++ b/apps/files/l10n/ku_IQ.json
@@ -1,13 +1,16 @@
{ "translations": {
"Files" : "په‌ڕگەکان",
- "Share" : "هاوبەشی کردن",
+ "Select" : "دیاریکردنی",
"Error" : "هه‌ڵه",
"Name" : "ناو",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "پاشکه‌وتکردن",
+ "Settings" : "ڕێکخستنه‌کان",
"Folder" : "بوخچه",
+ "Upload" : "بارکردن",
"Download" : "داگرتن"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/lb.js b/apps/files/l10n/lb.js
index 05c3ff1e7e4..00bcd569b51 100644
--- a/apps/files/l10n/lb.js
+++ b/apps/files/l10n/lb.js
@@ -9,12 +9,14 @@ OC.L10N.register(
"Missing a temporary folder" : "Et feelt en temporären Dossier",
"Failed to write to disk" : "Konnt net op den Disk schreiwen",
"Files" : "Dateien",
+ "Favorites" : "Favoriten",
+ "Home" : "Doheem",
"Upload cancelled." : "Upload ofgebrach.",
"File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
- "Share" : "Deelen",
+ "Rename" : "Ëm-benennen",
"Delete" : "Läschen",
"Unshare" : "Net méi deelen",
- "Rename" : "Ëm-benennen",
+ "Select" : "Auswielen",
"Error" : "Fehler",
"Name" : "Numm",
"Size" : "Gréisst",
@@ -22,14 +24,17 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "Fichier handling",
"Maximum upload size" : "Maximum Upload Gréisst ",
"max. possible: " : "max. méiglech:",
"Save" : "Späicheren",
+ "Settings" : "Astellungen",
"New" : "Nei",
"Text file" : "Text Fichier",
"Folder" : "Dossier",
- "Nothing in here. Upload something!" : "Hei ass näischt. Lued eppes rop!",
+ "Upload" : "Eroplueden",
+ "Cancel upload" : "Upload ofbriechen",
"Download" : "Download",
"Upload too large" : "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
diff --git a/apps/files/l10n/lb.json b/apps/files/l10n/lb.json
index 868141071f3..d63026bedb6 100644
--- a/apps/files/l10n/lb.json
+++ b/apps/files/l10n/lb.json
@@ -7,12 +7,14 @@
"Missing a temporary folder" : "Et feelt en temporären Dossier",
"Failed to write to disk" : "Konnt net op den Disk schreiwen",
"Files" : "Dateien",
+ "Favorites" : "Favoriten",
+ "Home" : "Doheem",
"Upload cancelled." : "Upload ofgebrach.",
"File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
- "Share" : "Deelen",
+ "Rename" : "Ëm-benennen",
"Delete" : "Läschen",
"Unshare" : "Net méi deelen",
- "Rename" : "Ëm-benennen",
+ "Select" : "Auswielen",
"Error" : "Fehler",
"Name" : "Numm",
"Size" : "Gréisst",
@@ -20,14 +22,17 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "Fichier handling",
"Maximum upload size" : "Maximum Upload Gréisst ",
"max. possible: " : "max. méiglech:",
"Save" : "Späicheren",
+ "Settings" : "Astellungen",
"New" : "Nei",
"Text file" : "Text Fichier",
"Folder" : "Dossier",
- "Nothing in here. Upload something!" : "Hei ass näischt. Lued eppes rop!",
+ "Upload" : "Eroplueden",
+ "Cancel upload" : "Upload ofbriechen",
"Download" : "Download",
"Upload too large" : "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
diff --git a/apps/files/l10n/lo.js b/apps/files/l10n/lo.js
new file mode 100644
index 00000000000..8c5bb3bc949
--- /dev/null
+++ b/apps/files/l10n/lo.js
@@ -0,0 +1,9 @@
+OC.L10N.register(
+ "files",
+ {
+ "_%n folder_::_%n folders_" : [""],
+ "_%n file_::_%n files_" : [""],
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
+},
+"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/lo.json b/apps/files/l10n/lo.json
new file mode 100644
index 00000000000..e03a2942ff2
--- /dev/null
+++ b/apps/files/l10n/lo.json
@@ -0,0 +1,7 @@
+{ "translations": {
+ "_%n folder_::_%n folders_" : [""],
+ "_%n file_::_%n files_" : [""],
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index c4b391bee67..5e81bf8b82a 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -1,14 +1,20 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "Saugykla nepasiekiama",
+ "Storage invalid" : "Saugykla neteisinga",
"Unknown error" : "Neatpažinta klaida",
"Could not move %s - File with this name already exists" : "Nepavyko perkelti %s - failas su tokiu pavadinimu jau egzistuoja",
"Could not move %s" : "Nepavyko perkelti %s",
+ "Permission denied" : "Neturite teisių",
"File name cannot be empty." : "Failo pavadinimas negali būti tuščias.",
+ "\"%s\" is an invalid file name." : "„%s“ yra netinkamas failo pavadinimas.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.",
+ "The target folder has been moved or deleted." : "Tikslo aplankas buvo perkeltas ar ištrintas.",
"The name %s is already used in the folder %s. Please choose a different name." : "Pavadinimas %s jau naudojamas aplanke %s. Prašome pasirinkti kitokį pavadinimą.",
"Not a valid source" : "Netinkamas šaltinis",
"Server is not allowed to open URLs, please check the server configuration" : "Serveriui neleidžiama atverti URL, prašome patikrinti serverio konfigūraciją",
+ "The file exceeds your quota by %s" : "Failai viršyja jūsų kvotą per %s",
"Error while downloading %s to %s" : "Klaida siunčiant %s į %s",
"Error when creating the file" : "Klaida kuriant failą",
"Folder name cannot be empty." : "Aplanko pavadinimas negali būti tuščias.",
@@ -28,7 +34,12 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "Įkėlimas nepavyko. Nepavyko gauti failo informacijos.",
"Invalid directory." : "Neteisingas aplankas",
"Files" : "Failai",
+ "All files" : "Visi failai",
+ "Favorites" : "Mėgstamiausi",
+ "Home" : "Namų",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai katalogas arba yra 0 baitų dydžio",
+ "Total file size {size1} exceeds upload limit {size2}" : "Visas failo dydis {size1} viršyja įkėlimo limitą {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Keliate {size1}, bet tik {size2} yra likę",
"Upload cancelled." : "Įkėlimas atšauktas.",
"Could not get result from server." : "Nepavyko gauti rezultato iš serverio.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
@@ -37,12 +48,14 @@ OC.L10N.register(
"Could not create file" : "Neįmanoma sukurti failo",
"Could not create folder" : "Neįmanoma sukurti aplanko",
"Error fetching URL" : "Klauda gaunant URL",
- "Share" : "Dalintis",
+ "Rename" : "Pervadinti",
"Delete" : "Ištrinti",
+ "Disconnect storage" : "Atjungti saugyklą",
"Unshare" : "Nebesidalinti",
- "Delete permanently" : "Ištrinti negrįžtamai",
- "Rename" : "Pervadinti",
+ "Select" : "Pasirinkiti",
"Pending" : "Laukiantis",
+ "Unable to determine date" : "Nepavyksta nustatyti datos",
+ "Error moving file." : "Klaida perkeliant failą.",
"Error moving file" : "Klaida perkeliant failą",
"Error" : "Klaida",
"Could not rename file" : "Neįmanoma pervadinti failo",
@@ -54,17 +67,24 @@ OC.L10N.register(
"_%n file_::_%n files_" : ["%n failas","%n failai","%n failų"],
"You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus",
"_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"],
+ "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} ir {files}",
+ "Favorited" : "Pažymėta mėgstamu",
+ "Favorite" : "Mėgiamas",
+ "%s could not be renamed as it has been deleted" : "%s negalėjo būti pervadintas, nes buvo ištrintas",
"%s could not be renamed" : "%s negali būti pervadintas",
+ "Upload (max. %s)" : "Įkelti (maks. %s)",
"File handling" : "Failų tvarkymas",
"Maximum upload size" : "Maksimalus įkeliamo failo dydis",
"max. possible: " : "maks. galima:",
"Save" : "Išsaugoti",
+ "Settings" : "Nustatymai",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>",
"New" : "Naujas",
@@ -73,10 +93,17 @@ OC.L10N.register(
"New folder" : "Naujas aplankas",
"Folder" : "Katalogas",
"From link" : "Iš nuorodos",
- "Nothing in here. Upload something!" : "Čia tuščia. Įkelkite ką nors!",
+ "Upload" : "Įkelti",
+ "Cancel upload" : "Atšaukti siuntimą",
+ "No files yet" : "Dar nėra failų",
+ "Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!",
+ "Select all" : "Pažymėti viską",
"Download" : "Atsisiųsti",
"Upload too large" : "Įkėlimui failas per didelis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje",
- "Files are being scanned, please wait." : "Skenuojami failai, prašome palaukti."
+ "Files are being scanned, please wait." : "Skenuojami failai, prašome palaukti.",
+ "Currently scanning" : "Šiuo metu skenuojama",
+ "No favorites" : "Nėra mėgstamiausių",
+ "Files and folders you mark as favorite will show up here" : "Failai ir aplankai, kuriuos pažymite mėgstamais, atsiras čia"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index 6baaa79c92c..e5f787063cb 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -1,12 +1,18 @@
{ "translations": {
+ "Storage not available" : "Saugykla nepasiekiama",
+ "Storage invalid" : "Saugykla neteisinga",
"Unknown error" : "Neatpažinta klaida",
"Could not move %s - File with this name already exists" : "Nepavyko perkelti %s - failas su tokiu pavadinimu jau egzistuoja",
"Could not move %s" : "Nepavyko perkelti %s",
+ "Permission denied" : "Neturite teisių",
"File name cannot be empty." : "Failo pavadinimas negali būti tuščias.",
+ "\"%s\" is an invalid file name." : "„%s“ yra netinkamas failo pavadinimas.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.",
+ "The target folder has been moved or deleted." : "Tikslo aplankas buvo perkeltas ar ištrintas.",
"The name %s is already used in the folder %s. Please choose a different name." : "Pavadinimas %s jau naudojamas aplanke %s. Prašome pasirinkti kitokį pavadinimą.",
"Not a valid source" : "Netinkamas šaltinis",
"Server is not allowed to open URLs, please check the server configuration" : "Serveriui neleidžiama atverti URL, prašome patikrinti serverio konfigūraciją",
+ "The file exceeds your quota by %s" : "Failai viršyja jūsų kvotą per %s",
"Error while downloading %s to %s" : "Klaida siunčiant %s į %s",
"Error when creating the file" : "Klaida kuriant failą",
"Folder name cannot be empty." : "Aplanko pavadinimas negali būti tuščias.",
@@ -26,7 +32,12 @@
"Upload failed. Could not get file info." : "Įkėlimas nepavyko. Nepavyko gauti failo informacijos.",
"Invalid directory." : "Neteisingas aplankas",
"Files" : "Failai",
+ "All files" : "Visi failai",
+ "Favorites" : "Mėgstamiausi",
+ "Home" : "Namų",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai katalogas arba yra 0 baitų dydžio",
+ "Total file size {size1} exceeds upload limit {size2}" : "Visas failo dydis {size1} viršyja įkėlimo limitą {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Keliate {size1}, bet tik {size2} yra likę",
"Upload cancelled." : "Įkėlimas atšauktas.",
"Could not get result from server." : "Nepavyko gauti rezultato iš serverio.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
@@ -35,12 +46,14 @@
"Could not create file" : "Neįmanoma sukurti failo",
"Could not create folder" : "Neįmanoma sukurti aplanko",
"Error fetching URL" : "Klauda gaunant URL",
- "Share" : "Dalintis",
+ "Rename" : "Pervadinti",
"Delete" : "Ištrinti",
+ "Disconnect storage" : "Atjungti saugyklą",
"Unshare" : "Nebesidalinti",
- "Delete permanently" : "Ištrinti negrįžtamai",
- "Rename" : "Pervadinti",
+ "Select" : "Pasirinkiti",
"Pending" : "Laukiantis",
+ "Unable to determine date" : "Nepavyksta nustatyti datos",
+ "Error moving file." : "Klaida perkeliant failą.",
"Error moving file" : "Klaida perkeliant failą",
"Error" : "Klaida",
"Could not rename file" : "Neįmanoma pervadinti failo",
@@ -52,17 +65,24 @@
"_%n file_::_%n files_" : ["%n failas","%n failai","%n failų"],
"You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus",
"_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"],
+ "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} ir {files}",
+ "Favorited" : "Pažymėta mėgstamu",
+ "Favorite" : "Mėgiamas",
+ "%s could not be renamed as it has been deleted" : "%s negalėjo būti pervadintas, nes buvo ištrintas",
"%s could not be renamed" : "%s negali būti pervadintas",
+ "Upload (max. %s)" : "Įkelti (maks. %s)",
"File handling" : "Failų tvarkymas",
"Maximum upload size" : "Maksimalus įkeliamo failo dydis",
"max. possible: " : "maks. galima:",
"Save" : "Išsaugoti",
+ "Settings" : "Nustatymai",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>",
"New" : "Naujas",
@@ -71,10 +91,17 @@
"New folder" : "Naujas aplankas",
"Folder" : "Katalogas",
"From link" : "Iš nuorodos",
- "Nothing in here. Upload something!" : "Čia tuščia. Įkelkite ką nors!",
+ "Upload" : "Įkelti",
+ "Cancel upload" : "Atšaukti siuntimą",
+ "No files yet" : "Dar nėra failų",
+ "Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!",
+ "Select all" : "Pažymėti viską",
"Download" : "Atsisiųsti",
"Upload too large" : "Įkėlimui failas per didelis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje",
- "Files are being scanned, please wait." : "Skenuojami failai, prašome palaukti."
+ "Files are being scanned, please wait." : "Skenuojami failai, prašome palaukti.",
+ "Currently scanning" : "Šiuo metu skenuojama",
+ "No favorites" : "Nėra mėgstamiausių",
+ "Files and folders you mark as favorite will show up here" : "Failai ir aplankai, kuriuos pažymite mėgstamais, atsiras čia"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js
index d01f2894d94..fc0e3646c78 100644
--- a/apps/files/l10n/lv.js
+++ b/apps/files/l10n/lv.js
@@ -1,11 +1,24 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "Glabātuve nav pieejama",
+ "Storage invalid" : "Nepareiza krātuve",
"Unknown error" : "Nezināma kļūda",
"Could not move %s - File with this name already exists" : "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu",
"Could not move %s" : "Nevarēja pārvietot %s",
+ "Permission denied" : "Pieeja liegta",
"File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.",
+ "\"%s\" is an invalid file name." : "\"%s\" ir nepareizs datnes nosaukums.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.",
+ "The target folder has been moved or deleted." : "Mērķa mape ir pārvietota vai dzēsta",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Nosaukums '%s' jau tiek izmantots mapē '%s'. Lūdzu izvēlieties citu nosaukumu.",
+ "Not a valid source" : "Avots nav derīgs",
+ "Server is not allowed to open URLs, please check the server configuration" : "Serverim netiek atļauts atvērt saites, plūdzu pārbaudiet servera uzstādījumus",
+ "The file exceeds your quota by %s" : "Faila izmērs ir par %s lielāks par atļauto kvotu",
+ "Error while downloading %s to %s" : "Kļūda, lejupielādējot %s uz %s",
+ "Error when creating the file" : "Kļūda veidojot datni",
+ "Folder name cannot be empty." : "Mape nevar būt tukša",
+ "Error when creating the folder" : "Kļūda, veidojot mapi",
"Unable to set upload directory." : "Nevar uzstādīt augšupielādes mapi.",
"Invalid Token" : "Nepareiza pilnvara",
"No file was uploaded. Unknown error" : "Netika augšupielādēta neviena datne. Nezināma kļūda",
@@ -17,42 +30,80 @@ OC.L10N.register(
"Missing a temporary folder" : "Trūkst pagaidu mapes",
"Failed to write to disk" : "Neizdevās saglabāt diskā",
"Not enough storage available" : "Nav pietiekami daudz vietas",
+ "Upload failed. Could not find uploaded file" : "Augšupielāde nesekmīga. Neizdevās atrast augšupielādēto failu.",
+ "Upload failed. Could not get file info." : "Augšupielāde nesekmīga. Neizdevās iegūt informāciju par failu.",
"Invalid directory." : "Nederīga direktorija.",
"Files" : "Datnes",
+ "All files" : "Visas datnes",
+ "Favorites" : "Iecienītie",
+ "Home" : "Mājas",
+ "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šs fails.",
+ "Total file size {size1} exceeds upload limit {size2}" : "Kopējais faila izmērs {size1} pārsniedz augšupielādes ierobežojumu {size2}",
+ "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}",
"Upload cancelled." : "Augšupielāde ir atcelta.",
+ "Could not get result from server." : "Nevar saņemt rezultātus no servera",
"File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.",
+ "URL cannot be empty" : "URL nevar būt tukšs",
"{new_name} already exists" : "{new_name} jau eksistē",
- "Share" : "Dalīties",
+ "Could not create file" : "Neizdevās izveidot datni",
+ "Could not create folder" : "Neizdevās izveidot mapi",
+ "Error fetching URL" : "Kļūda apstrādājot URL",
+ "Rename" : "Pārsaukt",
"Delete" : "Dzēst",
+ "Disconnect storage" : "Atvienot krātuvi",
"Unshare" : "Pārtraukt dalīšanos",
- "Delete permanently" : "Dzēst pavisam",
- "Rename" : "Pārsaukt",
+ "Select" : "Norādīt",
"Pending" : "Gaida savu kārtu",
+ "Unable to determine date" : "Neizdevās noteikt datumu",
+ "Error moving file." : "Kļūda, pārvietojot datni.",
+ "Error moving file" : "Kļūda, pārvietojot datni",
"Error" : "Kļūda",
+ "Could not rename file" : "Neizdevās pārsaukt datni",
+ "Error deleting file." : "Kļūda, dzēšot datni.",
"Name" : "Nosaukums",
"Size" : "Izmērs",
"Modified" : "Mainīts",
"_%n folder_::_%n folders_" : ["%n mapes","%n mape","%n mapes"],
"_%n file_::_%n files_" : ["%n faili","%n fails","%n faili"],
+ "You don’t have permission to upload or create files here" : "Jums nav tiesību, augšupielādēt vai veidot, šeit datnes",
"_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielāde %n failus"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" ir nepareizs datnes nosaukums.",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Šifrēšanas lietotnei nepareiza privātā atslēga. Lūdzu atjaunojiet savu privāto atslēgu personīgo uzstādījumu sadaļā, lai atjaunot pieeju šifrētajiem failiem.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
+ "{dirs} and {files}" : "{dirs} un {files}",
+ "Favorited" : "Favorīti",
+ "Favorite" : "Iecienītais",
+ "%s could not be renamed as it has been deleted" : "Nevarēja pārsaukt %s, jo tas ir dzēsts",
"%s could not be renamed" : "%s nevar tikt pārsaukts",
+ "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",
"max. possible: " : "maksimālais iespējamais:",
"Save" : "Saglabāt",
+ "Settings" : "Iestatījumi",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Izmantojot šo adresi, <a href=\"%s\" target=\"_blank\">piekļūstiet saviem failiem, izmantojot WebDAV</a>",
"New" : "Jauna",
+ "New text file" : "Jauna teksta datne",
"Text file" : "Teksta datne",
"New folder" : "Jauna mape",
"Folder" : "Mape",
"From link" : "No saites",
- "Nothing in here. Upload something!" : "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!",
+ "Upload" : "Augšupielādēt",
+ "Cancel upload" : "Atcelt augšupielādi",
+ "No files yet" : "Vēl nav neviena datne",
+ "Upload some content or sync with your devices!" : "Augšupielādē kaut ko vai sinhronizē saturu ar savām ierīcēm!",
+ "Select all" : "Atzīmēt visu",
"Download" : "Lejupielādēt",
"Upload too large" : "Datne ir par lielu, lai to augšupielādētu",
"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",
- "Files are being scanned, please wait." : "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet."
+ "Files are being scanned, please wait." : "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet.",
+ "Currently scanning" : "Pašlaik skenē",
+ "No favorites" : "Nav favorītu",
+ "Files and folders you mark as favorite will show up here" : "Faili un mapes, ko atzīmēsit kā favorītus, tiks rādīti šeit"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json
index 39a0caea5b2..ef93ad39455 100644
--- a/apps/files/l10n/lv.json
+++ b/apps/files/l10n/lv.json
@@ -1,9 +1,22 @@
{ "translations": {
+ "Storage not available" : "Glabātuve nav pieejama",
+ "Storage invalid" : "Nepareiza krātuve",
"Unknown error" : "Nezināma kļūda",
"Could not move %s - File with this name already exists" : "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu",
"Could not move %s" : "Nevarēja pārvietot %s",
+ "Permission denied" : "Pieeja liegta",
"File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.",
+ "\"%s\" is an invalid file name." : "\"%s\" ir nepareizs datnes nosaukums.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.",
+ "The target folder has been moved or deleted." : "Mērķa mape ir pārvietota vai dzēsta",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Nosaukums '%s' jau tiek izmantots mapē '%s'. Lūdzu izvēlieties citu nosaukumu.",
+ "Not a valid source" : "Avots nav derīgs",
+ "Server is not allowed to open URLs, please check the server configuration" : "Serverim netiek atļauts atvērt saites, plūdzu pārbaudiet servera uzstādījumus",
+ "The file exceeds your quota by %s" : "Faila izmērs ir par %s lielāks par atļauto kvotu",
+ "Error while downloading %s to %s" : "Kļūda, lejupielādējot %s uz %s",
+ "Error when creating the file" : "Kļūda veidojot datni",
+ "Folder name cannot be empty." : "Mape nevar būt tukša",
+ "Error when creating the folder" : "Kļūda, veidojot mapi",
"Unable to set upload directory." : "Nevar uzstādīt augšupielādes mapi.",
"Invalid Token" : "Nepareiza pilnvara",
"No file was uploaded. Unknown error" : "Netika augšupielādēta neviena datne. Nezināma kļūda",
@@ -15,42 +28,80 @@
"Missing a temporary folder" : "Trūkst pagaidu mapes",
"Failed to write to disk" : "Neizdevās saglabāt diskā",
"Not enough storage available" : "Nav pietiekami daudz vietas",
+ "Upload failed. Could not find uploaded file" : "Augšupielāde nesekmīga. Neizdevās atrast augšupielādēto failu.",
+ "Upload failed. Could not get file info." : "Augšupielāde nesekmīga. Neizdevās iegūt informāciju par failu.",
"Invalid directory." : "Nederīga direktorija.",
"Files" : "Datnes",
+ "All files" : "Visas datnes",
+ "Favorites" : "Iecienītie",
+ "Home" : "Mājas",
+ "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šs fails.",
+ "Total file size {size1} exceeds upload limit {size2}" : "Kopējais faila izmērs {size1} pārsniedz augšupielādes ierobežojumu {size2}",
+ "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}",
"Upload cancelled." : "Augšupielāde ir atcelta.",
+ "Could not get result from server." : "Nevar saņemt rezultātus no servera",
"File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.",
+ "URL cannot be empty" : "URL nevar būt tukšs",
"{new_name} already exists" : "{new_name} jau eksistē",
- "Share" : "Dalīties",
+ "Could not create file" : "Neizdevās izveidot datni",
+ "Could not create folder" : "Neizdevās izveidot mapi",
+ "Error fetching URL" : "Kļūda apstrādājot URL",
+ "Rename" : "Pārsaukt",
"Delete" : "Dzēst",
+ "Disconnect storage" : "Atvienot krātuvi",
"Unshare" : "Pārtraukt dalīšanos",
- "Delete permanently" : "Dzēst pavisam",
- "Rename" : "Pārsaukt",
+ "Select" : "Norādīt",
"Pending" : "Gaida savu kārtu",
+ "Unable to determine date" : "Neizdevās noteikt datumu",
+ "Error moving file." : "Kļūda, pārvietojot datni.",
+ "Error moving file" : "Kļūda, pārvietojot datni",
"Error" : "Kļūda",
+ "Could not rename file" : "Neizdevās pārsaukt datni",
+ "Error deleting file." : "Kļūda, dzēšot datni.",
"Name" : "Nosaukums",
"Size" : "Izmērs",
"Modified" : "Mainīts",
"_%n folder_::_%n folders_" : ["%n mapes","%n mape","%n mapes"],
"_%n file_::_%n files_" : ["%n faili","%n fails","%n faili"],
+ "You don’t have permission to upload or create files here" : "Jums nav tiesību, augšupielādēt vai veidot, šeit datnes",
"_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielāde %n failus"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" ir nepareizs datnes nosaukums.",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Šifrēšanas lietotnei nepareiza privātā atslēga. Lūdzu atjaunojiet savu privāto atslēgu personīgo uzstādījumu sadaļā, lai atjaunot pieeju šifrētajiem failiem.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
+ "{dirs} and {files}" : "{dirs} un {files}",
+ "Favorited" : "Favorīti",
+ "Favorite" : "Iecienītais",
+ "%s could not be renamed as it has been deleted" : "Nevarēja pārsaukt %s, jo tas ir dzēsts",
"%s could not be renamed" : "%s nevar tikt pārsaukts",
+ "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",
"max. possible: " : "maksimālais iespējamais:",
"Save" : "Saglabāt",
+ "Settings" : "Iestatījumi",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Izmantojot šo adresi, <a href=\"%s\" target=\"_blank\">piekļūstiet saviem failiem, izmantojot WebDAV</a>",
"New" : "Jauna",
+ "New text file" : "Jauna teksta datne",
"Text file" : "Teksta datne",
"New folder" : "Jauna mape",
"Folder" : "Mape",
"From link" : "No saites",
- "Nothing in here. Upload something!" : "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!",
+ "Upload" : "Augšupielādēt",
+ "Cancel upload" : "Atcelt augšupielādi",
+ "No files yet" : "Vēl nav neviena datne",
+ "Upload some content or sync with your devices!" : "Augšupielādē kaut ko vai sinhronizē saturu ar savām ierīcēm!",
+ "Select all" : "Atzīmēt visu",
"Download" : "Lejupielādēt",
"Upload too large" : "Datne ir par lielu, lai to augšupielādētu",
"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",
- "Files are being scanned, please wait." : "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet."
+ "Files are being scanned, please wait." : "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet.",
+ "Currently scanning" : "Pašlaik skenē",
+ "No favorites" : "Nav favorītu",
+ "Files and folders you mark as favorite will show up here" : "Faili un mapes, ko atzīmēsit kā favorītus, tiks rādīti šeit"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/mg.js b/apps/files/l10n/mg.js
index f085469f731..deae17398bd 100644
--- a/apps/files/l10n/mg.js
+++ b/apps/files/l10n/mg.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/mg.json b/apps/files/l10n/mg.json
index ba9792477cd..dd9cfe83135 100644
--- a/apps/files/l10n/mg.json
+++ b/apps/files/l10n/mg.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js
index 57a717ceaf6..a74b38113ad 100644
--- a/apps/files/l10n/mk.js
+++ b/apps/files/l10n/mk.js
@@ -25,6 +25,8 @@ OC.L10N.register(
"Upload failed. Could not find uploaded file" : "Префрлањето е неуспешно. Не можам да го најдам префрлената датотека.",
"Invalid directory." : "Погрешна папка.",
"Files" : "Датотеки",
+ "Favorites" : "Омилени",
+ "Home" : "Дома",
"Upload cancelled." : "Преземањето е прекинато.",
"Could not get result from server." : "Не можам да добијам резултат од серверот.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.",
@@ -32,11 +34,10 @@ OC.L10N.register(
"{new_name} already exists" : "{new_name} веќе постои",
"Could not create file" : "Не множам да креирам датотека",
"Could not create folder" : "Не можам да креирам папка",
- "Share" : "Сподели",
+ "Rename" : "Преименувај",
"Delete" : "Избриши",
"Unshare" : "Не споделувај",
- "Delete permanently" : "Трајно избришани",
- "Rename" : "Преименувај",
+ "Select" : "Избери",
"Pending" : "Чека",
"Error moving file" : "Грешка при префрлање на датотека",
"Error" : "Грешка",
@@ -49,19 +50,22 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["",""],
"Your storage is full, files can not be updated or synced anymore!" : "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!",
"Your storage is almost full ({usedSpacePercent}%)" : "Вашиот сториџ е скоро полн ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} и {files}",
"%s could not be renamed" : "%s не може да биде преименуван",
"File handling" : "Ракување со датотеки",
"Maximum upload size" : "Максимална големина за подигање",
"max. possible: " : "макс. можно:",
"Save" : "Сними",
+ "Settings" : "Подесувања",
"WebDAV" : "WebDAV",
"New" : "Ново",
"Text file" : "Текстуална датотека",
"New folder" : "Нова папка",
"Folder" : "Папка",
"From link" : "Од врска",
- "Nothing in here. Upload something!" : "Тука нема ништо. Снимете нешто!",
+ "Upload" : "Подигни",
+ "Cancel upload" : "Откажи прикачување",
"Download" : "Преземи",
"Upload too large" : "Фајлот кој се вчитува е преголем",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.",
diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json
index 2d3df73a75f..74b1717b65c 100644
--- a/apps/files/l10n/mk.json
+++ b/apps/files/l10n/mk.json
@@ -23,6 +23,8 @@
"Upload failed. Could not find uploaded file" : "Префрлањето е неуспешно. Не можам да го најдам префрлената датотека.",
"Invalid directory." : "Погрешна папка.",
"Files" : "Датотеки",
+ "Favorites" : "Омилени",
+ "Home" : "Дома",
"Upload cancelled." : "Преземањето е прекинато.",
"Could not get result from server." : "Не можам да добијам резултат од серверот.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.",
@@ -30,11 +32,10 @@
"{new_name} already exists" : "{new_name} веќе постои",
"Could not create file" : "Не множам да креирам датотека",
"Could not create folder" : "Не можам да креирам папка",
- "Share" : "Сподели",
+ "Rename" : "Преименувај",
"Delete" : "Избриши",
"Unshare" : "Не споделувај",
- "Delete permanently" : "Трајно избришани",
- "Rename" : "Преименувај",
+ "Select" : "Избери",
"Pending" : "Чека",
"Error moving file" : "Грешка при префрлање на датотека",
"Error" : "Грешка",
@@ -47,19 +48,22 @@
"_Uploading %n file_::_Uploading %n files_" : ["",""],
"Your storage is full, files can not be updated or synced anymore!" : "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!",
"Your storage is almost full ({usedSpacePercent}%)" : "Вашиот сториџ е скоро полн ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} и {files}",
"%s could not be renamed" : "%s не може да биде преименуван",
"File handling" : "Ракување со датотеки",
"Maximum upload size" : "Максимална големина за подигање",
"max. possible: " : "макс. можно:",
"Save" : "Сними",
+ "Settings" : "Подесувања",
"WebDAV" : "WebDAV",
"New" : "Ново",
"Text file" : "Текстуална датотека",
"New folder" : "Нова папка",
"Folder" : "Папка",
"From link" : "Од врска",
- "Nothing in here. Upload something!" : "Тука нема ништо. Снимете нешто!",
+ "Upload" : "Подигни",
+ "Cancel upload" : "Откажи прикачување",
"Download" : "Преземи",
"Upload too large" : "Фајлот кој се вчитува е преголем",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.",
diff --git a/apps/files/l10n/ml.js b/apps/files/l10n/ml.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/ml.js
+++ b/apps/files/l10n/ml.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ml.json b/apps/files/l10n/ml.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/ml.json
+++ b/apps/files/l10n/ml.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ml_IN.js b/apps/files/l10n/ml_IN.js
index a7af6e02c73..d37e940eee1 100644
--- a/apps/files/l10n/ml_IN.js
+++ b/apps/files/l10n/ml_IN.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"Files" : "ഫയലുകൾ",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ml_IN.json b/apps/files/l10n/ml_IN.json
index e140756a6bd..1def6b0b49c 100644
--- a/apps/files/l10n/ml_IN.json
+++ b/apps/files/l10n/ml_IN.json
@@ -2,6 +2,7 @@
"Files" : "ഫയലുകൾ",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/mn.js b/apps/files/l10n/mn.js
index 329844854f1..1499e7762d3 100644
--- a/apps/files/l10n/mn.js
+++ b/apps/files/l10n/mn.js
@@ -1,8 +1,13 @@
OC.L10N.register(
"files",
{
+ "Files" : "Файлууд",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Save" : "Хадгалах",
+ "Settings" : "Тохиргоо",
+ "Upload" : "Байршуулах"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/mn.json b/apps/files/l10n/mn.json
index 37156658a86..a0faca10bbd 100644
--- a/apps/files/l10n/mn.json
+++ b/apps/files/l10n/mn.json
@@ -1,6 +1,11 @@
{ "translations": {
+ "Files" : "Файлууд",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Save" : "Хадгалах",
+ "Settings" : "Тохиргоо",
+ "Upload" : "Байршуулах"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ms_MY.js b/apps/files/l10n/ms_MY.js
index 50e95b4bca2..65e26847c18 100644
--- a/apps/files/l10n/ms_MY.js
+++ b/apps/files/l10n/ms_MY.js
@@ -9,10 +9,10 @@ OC.L10N.register(
"Missing a temporary folder" : "Direktori sementara hilang",
"Failed to write to disk" : "Gagal untuk disimpan",
"Files" : "Fail-fail",
+ "Home" : "Rumah",
"Upload cancelled." : "Muatnaik dibatalkan.",
- "Share" : "Kongsi",
- "Delete" : "Padam",
"Rename" : "Namakan",
+ "Delete" : "Padam",
"Pending" : "Dalam proses",
"Error" : "Ralat",
"Name" : "Nama",
@@ -21,14 +21,17 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"File handling" : "Pengendalian fail",
"Maximum upload size" : "Saiz maksimum muat naik",
"max. possible: " : "maksimum:",
"Save" : "Simpan",
+ "Settings" : "Tetapan",
"New" : "Baru",
"Text file" : "Fail teks",
"Folder" : "Folder",
- "Nothing in here. Upload something!" : "Tiada apa-apa di sini. Muat naik sesuatu!",
+ "Upload" : "Muat naik",
+ "Cancel upload" : "Batal muat naik",
"Download" : "Muat turun",
"Upload too large" : "Muatnaik terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server",
diff --git a/apps/files/l10n/ms_MY.json b/apps/files/l10n/ms_MY.json
index 6f085a76a68..4a36155fea1 100644
--- a/apps/files/l10n/ms_MY.json
+++ b/apps/files/l10n/ms_MY.json
@@ -7,10 +7,10 @@
"Missing a temporary folder" : "Direktori sementara hilang",
"Failed to write to disk" : "Gagal untuk disimpan",
"Files" : "Fail-fail",
+ "Home" : "Rumah",
"Upload cancelled." : "Muatnaik dibatalkan.",
- "Share" : "Kongsi",
- "Delete" : "Padam",
"Rename" : "Namakan",
+ "Delete" : "Padam",
"Pending" : "Dalam proses",
"Error" : "Ralat",
"Name" : "Nama",
@@ -19,14 +19,17 @@
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"File handling" : "Pengendalian fail",
"Maximum upload size" : "Saiz maksimum muat naik",
"max. possible: " : "maksimum:",
"Save" : "Simpan",
+ "Settings" : "Tetapan",
"New" : "Baru",
"Text file" : "Fail teks",
"Folder" : "Folder",
- "Nothing in here. Upload something!" : "Tiada apa-apa di sini. Muat naik sesuatu!",
+ "Upload" : "Muat naik",
+ "Cancel upload" : "Batal muat naik",
"Download" : "Muat turun",
"Upload too large" : "Muatnaik terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server",
diff --git a/apps/files/l10n/mt_MT.js b/apps/files/l10n/mt_MT.js
index 82ce643895a..143288144c0 100644
--- a/apps/files/l10n/mt_MT.js
+++ b/apps/files/l10n/mt_MT.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["","","",""],
"_%n file_::_%n files_" : ["","","",""],
- "_Uploading %n file_::_Uploading %n files_" : ["","","",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["","","",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""]
},
"nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);");
diff --git a/apps/files/l10n/mt_MT.json b/apps/files/l10n/mt_MT.json
index 8bcf5b69eab..d595e2e00af 100644
--- a/apps/files/l10n/mt_MT.json
+++ b/apps/files/l10n/mt_MT.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["","","",""],
"_%n file_::_%n files_" : ["","","",""],
- "_Uploading %n file_::_Uploading %n files_" : ["","","",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["","","",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""]
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/my_MM.js b/apps/files/l10n/my_MM.js
index 0a7ff3bb31c..059be79f4ac 100644
--- a/apps/files/l10n/my_MM.js
+++ b/apps/files/l10n/my_MM.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"Download" : "ဒေါင်းလုတ်"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/my_MM.json b/apps/files/l10n/my_MM.json
index d4b9b3d0fa8..30eb8a20782 100644
--- a/apps/files/l10n/my_MM.json
+++ b/apps/files/l10n/my_MM.json
@@ -3,6 +3,7 @@
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"Download" : "ဒေါင်းလုတ်"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js
index d9c59b1bdd7..e14a84a35dc 100644
--- a/apps/files/l10n/nb_NO.js
+++ b/apps/files/l10n/nb_NO.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Ugyldig katalog.",
"Files" : "Filer",
"All files" : "Alle filer",
+ "Favorites" : "Favoritter",
+ "Home" : "Hjem",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke laste opp {filename} fordi det er en mappe eller har 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Total filstørrelse {size1} overstiger grense for opplasting {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
@@ -46,13 +48,13 @@ OC.L10N.register(
"Could not create file" : "Klarte ikke å opprette fil",
"Could not create folder" : "Klarte ikke å opprette mappe",
"Error fetching URL" : "Feil ved henting av URL",
- "Share" : "Del",
+ "Rename" : "Gi nytt navn",
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
- "Delete permanently" : "Slett permanent",
- "Rename" : "Gi nytt navn",
+ "Select" : "Velg",
"Pending" : "Ventende",
+ "Unable to determine date" : "Kan ikke fastslå datoen",
"Error moving file." : "Feil ved flytting av fil.",
"Error moving file" : "Feil ved flytting av fil",
"Error" : "Feil",
@@ -71,7 +73,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} og {files}",
+ "Favorited" : "Er favoritt",
+ "Favorite" : "Gjør til favoritt",
"%s could not be renamed as it has been deleted" : "%s kunne ikke gis nytt navn da den er blitt slettet",
"%s could not be renamed" : "Kunne ikke gi nytt navn til %s",
"Upload (max. %s)" : "Opplasting (maks. %s)",
@@ -79,6 +84,7 @@ OC.L10N.register(
"Maximum upload size" : "Maksimum opplastingsstørrelse",
"max. possible: " : "max. mulige:",
"Save" : "Lagre",
+ "Settings" : "Innstillinger",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>",
"New" : "Ny",
@@ -87,11 +93,17 @@ OC.L10N.register(
"New folder" : "Ny mappe",
"Folder" : "Mappe",
"From link" : "Fra lenke",
- "Nothing in here. Upload something!" : "Ingenting her. Last opp noe!",
+ "Upload" : "Last opp",
+ "Cancel upload" : "Avbryt opplasting",
+ "No files yet" : "Ingen filer ennå",
+ "Upload some content or sync with your devices!" : "Last opp noe innhold eller synkroniser med enhetene dine!",
+ "Select all" : "Velg alle",
"Download" : "Last ned",
"Upload too large" : "Filen er for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
"Files are being scanned, please wait." : "Skanner filer, vennligst vent.",
- "Currently scanning" : "Skanner nå"
+ "Currently scanning" : "Skanner nå",
+ "No favorites" : "Ingen favoritter",
+ "Files and folders you mark as favorite will show up here" : "Filer og mapper som du gjør til favoritter vises her"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index ab3dfc782e6..d61e2c63de7 100644
--- a/apps/files/l10n/nb_NO.json
+++ b/apps/files/l10n/nb_NO.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Ugyldig katalog.",
"Files" : "Filer",
"All files" : "Alle filer",
+ "Favorites" : "Favoritter",
+ "Home" : "Hjem",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke laste opp {filename} fordi det er en mappe eller har 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "Total filstørrelse {size1} overstiger grense for opplasting {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
@@ -44,13 +46,13 @@
"Could not create file" : "Klarte ikke å opprette fil",
"Could not create folder" : "Klarte ikke å opprette mappe",
"Error fetching URL" : "Feil ved henting av URL",
- "Share" : "Del",
+ "Rename" : "Gi nytt navn",
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
- "Delete permanently" : "Slett permanent",
- "Rename" : "Gi nytt navn",
+ "Select" : "Velg",
"Pending" : "Ventende",
+ "Unable to determine date" : "Kan ikke fastslå datoen",
"Error moving file." : "Feil ved flytting av fil.",
"Error moving file" : "Feil ved flytting av fil",
"Error" : "Feil",
@@ -69,7 +71,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} og {files}",
+ "Favorited" : "Er favoritt",
+ "Favorite" : "Gjør til favoritt",
"%s could not be renamed as it has been deleted" : "%s kunne ikke gis nytt navn da den er blitt slettet",
"%s could not be renamed" : "Kunne ikke gi nytt navn til %s",
"Upload (max. %s)" : "Opplasting (maks. %s)",
@@ -77,6 +82,7 @@
"Maximum upload size" : "Maksimum opplastingsstørrelse",
"max. possible: " : "max. mulige:",
"Save" : "Lagre",
+ "Settings" : "Innstillinger",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>",
"New" : "Ny",
@@ -85,11 +91,17 @@
"New folder" : "Ny mappe",
"Folder" : "Mappe",
"From link" : "Fra lenke",
- "Nothing in here. Upload something!" : "Ingenting her. Last opp noe!",
+ "Upload" : "Last opp",
+ "Cancel upload" : "Avbryt opplasting",
+ "No files yet" : "Ingen filer ennå",
+ "Upload some content or sync with your devices!" : "Last opp noe innhold eller synkroniser med enhetene dine!",
+ "Select all" : "Velg alle",
"Download" : "Last ned",
"Upload too large" : "Filen er for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
"Files are being scanned, please wait." : "Skanner filer, vennligst vent.",
- "Currently scanning" : "Skanner nå"
+ "Currently scanning" : "Skanner nå",
+ "No favorites" : "Ingen favoritter",
+ "Files and folders you mark as favorite will show up here" : "Filer og mapper som du gjør til favoritter vises her"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/nds.js b/apps/files/l10n/nds.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/nds.js
+++ b/apps/files/l10n/nds.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nds.json b/apps/files/l10n/nds.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/nds.json
+++ b/apps/files/l10n/nds.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ne.js b/apps/files/l10n/ne.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/ne.js
+++ b/apps/files/l10n/ne.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ne.json b/apps/files/l10n/ne.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/ne.json
+++ b/apps/files/l10n/ne.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 75f1e26ec0b..f762a33d8bc 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Ongeldige directory.",
"Files" : "Bestanden",
"All files" : "Alle bestanden",
+ "Favorites" : "Favorieten",
+ "Home" : "Thuis",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan {filename} niet uploaden omdat het een map is of 0 bytes groot is",
"Total file size {size1} exceeds upload limit {size2}" : "Totale bestandsgrootte {size1} groter dan uploadlimiet {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Niet genoeg vrije ruimte. U upload {size1}, maar is is slechts {size2} beschikbaar",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Kon bestand niet creëren",
"Could not create folder" : "Kon niet creëren map",
"Error fetching URL" : "Fout bij ophalen URL",
- "Share" : "Delen",
+ "Rename" : "Naam wijzigen",
"Delete" : "Verwijderen",
"Disconnect storage" : "Verbinding met opslag verbreken",
"Unshare" : "Stop met delen",
- "Delete permanently" : "Definitief verwijderen",
- "Rename" : "Naam wijzigen",
+ "Select" : "Selecteer",
"Pending" : "In behandeling",
+ "Unable to determine date" : "Kon datum niet vaststellen",
"Error moving file." : "Fout bij verplaatsen bestand.",
"Error moving file" : "Fout bij verplaatsen bestand",
"Error" : "Fout",
"Could not rename file" : "Kon de naam van het bestand niet wijzigen",
"Error deleting file." : "Fout bij verwijderen bestand.",
+ "No entries in this folder match '{filter}'" : "Niets in deze map komt overeen met '{filter}'",
"Name" : "Naam",
"Size" : "Grootte",
"Modified" : "Aangepast",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["komt overeen met '{filter}'","komt overeen met '{filter}'"],
"{dirs} and {files}" : "{dirs} en {files}",
+ "Favorited" : "Favoriet",
+ "Favorite" : "Favoriet",
"%s could not be renamed as it has been deleted" : "%s kon niet worden hernoemd, omdat het verwijderd is",
"%s could not be renamed" : "%s kon niet worden hernoemd",
"Upload (max. %s)" : "Upload (max. %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximale bestandsgrootte voor uploads",
"max. possible: " : "max. mogelijk: ",
"Save" : "Bewaren",
+ "Settings" : "Instellingen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>",
"New" : "Nieuw",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Nieuwe map",
"Folder" : "Map",
"From link" : "Vanaf link",
- "Nothing in here. Upload something!" : "Niets te zien hier. Upload iets!",
+ "Upload" : "Uploaden",
+ "Cancel upload" : "Upload afbreken",
+ "No files yet" : "Nog geen bestanden.",
+ "Upload some content or sync with your devices!" : "Upload bestanden of synchroniseer met uw apparaten!",
+ "No entries found in this folder" : "Niets",
+ "Select all" : "Alles selecteren",
"Download" : "Downloaden",
"Upload too large" : "Upload is te groot",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.",
"Files are being scanned, please wait." : "Bestanden worden gescand, even wachten.",
- "Currently scanning" : "Nu aan het scannen"
+ "Currently scanning" : "Nu aan het scannen",
+ "No favorites" : "Geen favorieten",
+ "Files and folders you mark as favorite will show up here" : "Bestanden en mappen die u favoriet vindt worden hier getoont"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 58416264c9a..4eeec0c31ee 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Ongeldige directory.",
"Files" : "Bestanden",
"All files" : "Alle bestanden",
+ "Favorites" : "Favorieten",
+ "Home" : "Thuis",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan {filename} niet uploaden omdat het een map is of 0 bytes groot is",
"Total file size {size1} exceeds upload limit {size2}" : "Totale bestandsgrootte {size1} groter dan uploadlimiet {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Niet genoeg vrije ruimte. U upload {size1}, maar is is slechts {size2} beschikbaar",
@@ -44,18 +46,19 @@
"Could not create file" : "Kon bestand niet creëren",
"Could not create folder" : "Kon niet creëren map",
"Error fetching URL" : "Fout bij ophalen URL",
- "Share" : "Delen",
+ "Rename" : "Naam wijzigen",
"Delete" : "Verwijderen",
"Disconnect storage" : "Verbinding met opslag verbreken",
"Unshare" : "Stop met delen",
- "Delete permanently" : "Definitief verwijderen",
- "Rename" : "Naam wijzigen",
+ "Select" : "Selecteer",
"Pending" : "In behandeling",
+ "Unable to determine date" : "Kon datum niet vaststellen",
"Error moving file." : "Fout bij verplaatsen bestand.",
"Error moving file" : "Fout bij verplaatsen bestand",
"Error" : "Fout",
"Could not rename file" : "Kon de naam van het bestand niet wijzigen",
"Error deleting file." : "Fout bij verwijderen bestand.",
+ "No entries in this folder match '{filter}'" : "Niets in deze map komt overeen met '{filter}'",
"Name" : "Naam",
"Size" : "Grootte",
"Modified" : "Aangepast",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["komt overeen met '{filter}'","komt overeen met '{filter}'"],
"{dirs} and {files}" : "{dirs} en {files}",
+ "Favorited" : "Favoriet",
+ "Favorite" : "Favoriet",
"%s could not be renamed as it has been deleted" : "%s kon niet worden hernoemd, omdat het verwijderd is",
"%s could not be renamed" : "%s kon niet worden hernoemd",
"Upload (max. %s)" : "Upload (max. %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Maximale bestandsgrootte voor uploads",
"max. possible: " : "max. mogelijk: ",
"Save" : "Bewaren",
+ "Settings" : "Instellingen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>",
"New" : "Nieuw",
@@ -85,11 +92,18 @@
"New folder" : "Nieuwe map",
"Folder" : "Map",
"From link" : "Vanaf link",
- "Nothing in here. Upload something!" : "Niets te zien hier. Upload iets!",
+ "Upload" : "Uploaden",
+ "Cancel upload" : "Upload afbreken",
+ "No files yet" : "Nog geen bestanden.",
+ "Upload some content or sync with your devices!" : "Upload bestanden of synchroniseer met uw apparaten!",
+ "No entries found in this folder" : "Niets",
+ "Select all" : "Alles selecteren",
"Download" : "Downloaden",
"Upload too large" : "Upload is te groot",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.",
"Files are being scanned, please wait." : "Bestanden worden gescand, even wachten.",
- "Currently scanning" : "Nu aan het scannen"
+ "Currently scanning" : "Nu aan het scannen",
+ "No favorites" : "Geen favorieten",
+ "Files and folders you mark as favorite will show up here" : "Bestanden en mappen die u favoriet vindt worden hier getoont"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/nn_NO.js b/apps/files/l10n/nn_NO.js
index 6d17a9458c5..bde31ce1118 100644
--- a/apps/files/l10n/nn_NO.js
+++ b/apps/files/l10n/nn_NO.js
@@ -21,16 +21,16 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "Feil ved opplasting. Klarte ikkje å henta filinfo.",
"Invalid directory." : "Ugyldig mappe.",
"Files" : "Filer",
+ "Favorites" : "Favorittar",
+ "Home" : "Heime",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Klarte ikkje å lasta opp {filename} sidan det er ei mappe eller er 0 byte.",
"Upload cancelled." : "Opplasting avbroten.",
"Could not get result from server." : "Klarte ikkje å henta resultat frå tenaren.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten.",
"{new_name} already exists" : "{new_name} finst allereie",
- "Share" : "Del",
+ "Rename" : "Endra namn",
"Delete" : "Slett",
"Unshare" : "Udel",
- "Delete permanently" : "Slett for godt",
- "Rename" : "Endra namn",
"Pending" : "Under vegs",
"Error moving file" : "Feil ved flytting av fil",
"Error" : "Feil",
@@ -43,19 +43,23 @@ OC.L10N.register(
"Your storage is full, files can not be updated or synced anymore!" : "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringa di er nesten full ({usedSpacePercent} %)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} og {files}",
+ "Favorite" : "Favoritt",
"%s could not be renamed" : "Klarte ikkje å omdøypa på %s",
"File handling" : "Filhandtering",
"Maximum upload size" : "Maksimal opplastingsstorleik",
"max. possible: " : "maks. moglege:",
"Save" : "Lagre",
+ "Settings" : "Innstillingar",
"WebDAV" : "WebDAV",
"New" : "Ny",
"Text file" : "Tekst fil",
"New folder" : "Ny mappe",
"Folder" : "Mappe",
"From link" : "Frå lenkje",
- "Nothing in here. Upload something!" : "Ingenting her. Last noko opp!",
+ "Upload" : "Last opp",
+ "Cancel upload" : "Avbryt opplasting",
"Download" : "Last ned",
"Upload too large" : "For stor opplasting",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å lasta opp er større enn maksgrensa til denne tenaren.",
diff --git a/apps/files/l10n/nn_NO.json b/apps/files/l10n/nn_NO.json
index 4008ab0778c..79a358b550d 100644
--- a/apps/files/l10n/nn_NO.json
+++ b/apps/files/l10n/nn_NO.json
@@ -19,16 +19,16 @@
"Upload failed. Could not get file info." : "Feil ved opplasting. Klarte ikkje å henta filinfo.",
"Invalid directory." : "Ugyldig mappe.",
"Files" : "Filer",
+ "Favorites" : "Favorittar",
+ "Home" : "Heime",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Klarte ikkje å lasta opp {filename} sidan det er ei mappe eller er 0 byte.",
"Upload cancelled." : "Opplasting avbroten.",
"Could not get result from server." : "Klarte ikkje å henta resultat frå tenaren.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten.",
"{new_name} already exists" : "{new_name} finst allereie",
- "Share" : "Del",
+ "Rename" : "Endra namn",
"Delete" : "Slett",
"Unshare" : "Udel",
- "Delete permanently" : "Slett for godt",
- "Rename" : "Endra namn",
"Pending" : "Under vegs",
"Error moving file" : "Feil ved flytting av fil",
"Error" : "Feil",
@@ -41,19 +41,23 @@
"Your storage is full, files can not be updated or synced anymore!" : "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringa di er nesten full ({usedSpacePercent} %)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} og {files}",
+ "Favorite" : "Favoritt",
"%s could not be renamed" : "Klarte ikkje å omdøypa på %s",
"File handling" : "Filhandtering",
"Maximum upload size" : "Maksimal opplastingsstorleik",
"max. possible: " : "maks. moglege:",
"Save" : "Lagre",
+ "Settings" : "Innstillingar",
"WebDAV" : "WebDAV",
"New" : "Ny",
"Text file" : "Tekst fil",
"New folder" : "Ny mappe",
"Folder" : "Mappe",
"From link" : "Frå lenkje",
- "Nothing in here. Upload something!" : "Ingenting her. Last noko opp!",
+ "Upload" : "Last opp",
+ "Cancel upload" : "Avbryt opplasting",
"Download" : "Last ned",
"Upload too large" : "For stor opplasting",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å lasta opp er større enn maksgrensa til denne tenaren.",
diff --git a/apps/files/l10n/nqo.js b/apps/files/l10n/nqo.js
index d1bbfca2dd4..8c5bb3bc949 100644
--- a/apps/files/l10n/nqo.js
+++ b/apps/files/l10n/nqo.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/nqo.json b/apps/files/l10n/nqo.json
index e493054d78a..e03a2942ff2 100644
--- a/apps/files/l10n/nqo.json
+++ b/apps/files/l10n/nqo.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/oc.js b/apps/files/l10n/oc.js
index deb447f57d9..99c3e8e0742 100644
--- a/apps/files/l10n/oc.js
+++ b/apps/files/l10n/oc.js
@@ -10,10 +10,9 @@ OC.L10N.register(
"Files" : "Fichièrs",
"Upload cancelled." : "Amontcargar anullat.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
- "Share" : "Parteja",
+ "Rename" : "Torna nomenar",
"Delete" : "Escafa",
"Unshare" : "Pas partejador",
- "Rename" : "Torna nomenar",
"Pending" : "Al esperar",
"Error" : "Error",
"Name" : "Nom",
@@ -22,14 +21,17 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "Manejament de fichièr",
"Maximum upload size" : "Talha maximum d'amontcargament",
"max. possible: " : "max. possible: ",
"Save" : "Enregistra",
+ "Settings" : "Paramètres",
"New" : "Nòu",
"Text file" : "Fichièr de tèxte",
"Folder" : "Dorsièr",
- "Nothing in here. Upload something!" : "Pas res dedins. Amontcarga qualquaren",
+ "Upload" : "Amontcarga",
+ "Cancel upload" : " Anulla l'amontcargar",
"Download" : "Avalcarga",
"Upload too large" : "Amontcargament tròp gròs",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
diff --git a/apps/files/l10n/oc.json b/apps/files/l10n/oc.json
index 994cb0055ea..7a1185c4002 100644
--- a/apps/files/l10n/oc.json
+++ b/apps/files/l10n/oc.json
@@ -8,10 +8,9 @@
"Files" : "Fichièrs",
"Upload cancelled." : "Amontcargar anullat.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
- "Share" : "Parteja",
+ "Rename" : "Torna nomenar",
"Delete" : "Escafa",
"Unshare" : "Pas partejador",
- "Rename" : "Torna nomenar",
"Pending" : "Al esperar",
"Error" : "Error",
"Name" : "Nom",
@@ -20,14 +19,17 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "Manejament de fichièr",
"Maximum upload size" : "Talha maximum d'amontcargament",
"max. possible: " : "max. possible: ",
"Save" : "Enregistra",
+ "Settings" : "Paramètres",
"New" : "Nòu",
"Text file" : "Fichièr de tèxte",
"Folder" : "Dorsièr",
- "Nothing in here. Upload something!" : "Pas res dedins. Amontcarga qualquaren",
+ "Upload" : "Amontcarga",
+ "Cancel upload" : " Anulla l'amontcargar",
"Download" : "Avalcarga",
"Upload too large" : "Amontcargament tròp gròs",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
diff --git a/apps/files/l10n/or_IN.js b/apps/files/l10n/or_IN.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/or_IN.js
+++ b/apps/files/l10n/or_IN.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/or_IN.json b/apps/files/l10n/or_IN.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/or_IN.json
+++ b/apps/files/l10n/or_IN.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pa.js b/apps/files/l10n/pa.js
index 84216361960..951695545ee 100644
--- a/apps/files/l10n/pa.js
+++ b/apps/files/l10n/pa.js
@@ -3,13 +3,16 @@ OC.L10N.register(
{
"Unknown error" : "ਅਣਜਾਣ ਗਲਤੀ",
"Files" : "ਫਾਇਲਾਂ",
- "Share" : "ਸਾਂਝਾ ਕਰੋ",
- "Delete" : "ਹਟਾਓ",
"Rename" : "ਨਾਂ ਬਦਲੋ",
+ "Delete" : "ਹਟਾਓ",
"Error" : "ਗਲਤੀ",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "ਸੈਟਿੰਗ",
+ "Upload" : "ਅੱਪਲੋਡ",
+ "Cancel upload" : "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ",
"Download" : "ਡਾਊਨਲੋਡ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/pa.json b/apps/files/l10n/pa.json
index b429b4ab19b..601c6edbb27 100644
--- a/apps/files/l10n/pa.json
+++ b/apps/files/l10n/pa.json
@@ -1,13 +1,16 @@
{ "translations": {
"Unknown error" : "ਅਣਜਾਣ ਗਲਤੀ",
"Files" : "ਫਾਇਲਾਂ",
- "Share" : "ਸਾਂਝਾ ਕਰੋ",
- "Delete" : "ਹਟਾਓ",
"Rename" : "ਨਾਂ ਬਦਲੋ",
+ "Delete" : "ਹਟਾਓ",
"Error" : "ਗਲਤੀ",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "ਸੈਟਿੰਗ",
+ "Upload" : "ਅੱਪਲੋਡ",
+ "Cancel upload" : "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ",
"Download" : "ਡਾਊਨਲੋਡ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index 1a0fb57ec30..b548af4b58d 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Zła ścieżka.",
"Files" : "Pliki",
"All files" : "Wszystkie pliki",
+ "Favorites" : "Ulubione",
+ "Home" : "Dom",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nie można przesłać {filename} być może jest katalogiem lub posiada 0 bajtów",
"Total file size {size1} exceeds upload limit {size2}" : "Całkowity rozmiar {size1} przekracza limit uploadu {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Brak wolnej przestrzeni, przesyłasz {size1} a pozostało tylko {size2}",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Nie można utworzyć pliku",
"Could not create folder" : "Nie można utworzyć folderu",
"Error fetching URL" : "Błąd przy pobieraniu adresu URL",
- "Share" : "Udostępnij",
+ "Rename" : "Zmień nazwę",
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
"Unshare" : "Zatrzymaj współdzielenie",
- "Delete permanently" : "Trwale usuń",
- "Rename" : "Zmień nazwę",
+ "Select" : "Wybierz",
"Pending" : "Oczekujące",
"Error moving file." : "Błąd podczas przenoszenia pliku.",
"Error moving file" : "Błąd prz przenoszeniu pliku",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorite" : "Ulubione",
"%s could not be renamed as it has been deleted" : "%s nie może mieć zmienionej nazwy, ponieważ został usunięty",
"%s could not be renamed" : "%s nie można zmienić nazwy",
"Upload (max. %s)" : "Wysyłka (max. %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Maksymalny rozmiar wysyłanego pliku",
"max. possible: " : "maks. możliwy:",
"Save" : "Zapisz",
+ "Settings" : "Ustawienia",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Użyj tego adresu do <a href=\"%s\" target=\"_blank\">dostępu do twoich plików przez WebDAV</a>",
"New" : "Nowy",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "Nowy folder",
"Folder" : "Folder",
"From link" : "Z odnośnika",
- "Nothing in here. Upload something!" : "Pusto. Wyślij coś!",
+ "Upload" : "Wyślij",
+ "Cancel upload" : "Anuluj wysyłanie",
"Download" : "Pobierz",
"Upload too large" : "Ładowany plik jest za duży",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.",
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index b073141e3d1..9d651ffe648 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Zła ścieżka.",
"Files" : "Pliki",
"All files" : "Wszystkie pliki",
+ "Favorites" : "Ulubione",
+ "Home" : "Dom",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nie można przesłać {filename} być może jest katalogiem lub posiada 0 bajtów",
"Total file size {size1} exceeds upload limit {size2}" : "Całkowity rozmiar {size1} przekracza limit uploadu {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Brak wolnej przestrzeni, przesyłasz {size1} a pozostało tylko {size2}",
@@ -44,12 +46,11 @@
"Could not create file" : "Nie można utworzyć pliku",
"Could not create folder" : "Nie można utworzyć folderu",
"Error fetching URL" : "Błąd przy pobieraniu adresu URL",
- "Share" : "Udostępnij",
+ "Rename" : "Zmień nazwę",
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
"Unshare" : "Zatrzymaj współdzielenie",
- "Delete permanently" : "Trwale usuń",
- "Rename" : "Zmień nazwę",
+ "Select" : "Wybierz",
"Pending" : "Oczekujące",
"Error moving file." : "Błąd podczas przenoszenia pliku.",
"Error moving file" : "Błąd prz przenoszeniu pliku",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorite" : "Ulubione",
"%s could not be renamed as it has been deleted" : "%s nie może mieć zmienionej nazwy, ponieważ został usunięty",
"%s could not be renamed" : "%s nie można zmienić nazwy",
"Upload (max. %s)" : "Wysyłka (max. %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Maksymalny rozmiar wysyłanego pliku",
"max. possible: " : "maks. możliwy:",
"Save" : "Zapisz",
+ "Settings" : "Ustawienia",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Użyj tego adresu do <a href=\"%s\" target=\"_blank\">dostępu do twoich plików przez WebDAV</a>",
"New" : "Nowy",
@@ -85,7 +89,8 @@
"New folder" : "Nowy folder",
"Folder" : "Folder",
"From link" : "Z odnośnika",
- "Nothing in here. Upload something!" : "Pusto. Wyślij coś!",
+ "Upload" : "Wyślij",
+ "Cancel upload" : "Anuluj wysyłanie",
"Download" : "Pobierz",
"Upload too large" : "Ładowany plik jest za duży",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index b4c97887362..4dd65c0202c 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Diretório inválido.",
"Files" : "Arquivos",
"All files" : "Todos os arquivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Home",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Incapaz de fazer o envio de {filename}, pois é um diretório ou tem 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "O tamanho total do arquivo {size1} excede o limite de envio {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Não há espaço suficiente, você está enviando {size1} mas resta apenas {size2}",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Não foi possível criar o arquivo",
"Could not create folder" : "Não foi possível criar a pasta",
"Error fetching URL" : "Erro ao buscar URL",
- "Share" : "Compartilhar",
+ "Rename" : "Renomear",
"Delete" : "Excluir",
"Disconnect storage" : "Desconectar armazenagem",
"Unshare" : "Descompartilhar",
- "Delete permanently" : "Excluir permanentemente",
- "Rename" : "Renomear",
+ "Select" : "Selecionar",
"Pending" : "Pendente",
+ "Unable to determine date" : "Impossível determinar a data",
"Error moving file." : "Erro movendo o arquivo.",
"Error moving file" : "Erro movendo o arquivo",
"Error" : "Erro",
"Could not rename file" : "Não foi possível renomear o arquivo",
"Error deleting file." : "Erro eliminando o arquivo.",
+ "No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'",
"Name" : "Nome",
"Size" : "Tamanho",
"Modified" : "Modificado",
@@ -71,7 +74,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Favorito",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "%s não pode ser renomeado pois foi apagado",
"%s could not be renamed" : "%s não pode ser renomeado",
"Upload (max. %s)" : "Envio (max. %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamanho máximo para envio",
"max. possible: " : "max. possível:",
"Save" : "Salvar",
+ "Settings" : "Configurações",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>",
"New" : "Novo",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Nova pasta",
"Folder" : "Pasta",
"From link" : "Do link",
- "Nothing in here. Upload something!" : "Nada aqui. Carregue alguma coisa!",
+ "Upload" : "Enviar",
+ "Cancel upload" : "Cancelar envio",
+ "No files yet" : "Nenhum arquivo até agora",
+ "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com seus dispositivos!",
+ "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
+ "Select all" : "Selecionar tudo",
"Download" : "Baixar",
"Upload too large" : "Arquivo muito grande para envio",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excedeu o tamanho máximo para arquivos no servidor.",
"Files are being scanned, please wait." : "Arquivos sendo escaneados, por favor aguarde.",
- "Currently scanning" : "Atualmente escaneando"
+ "Currently scanning" : "Atualmente escaneando",
+ "No favorites" : "Sem favoritos",
+ "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favorito são mostrados aqui"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 8c303c234ae..1dc5c598321 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Diretório inválido.",
"Files" : "Arquivos",
"All files" : "Todos os arquivos",
+ "Favorites" : "Favoritos",
+ "Home" : "Home",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Incapaz de fazer o envio de {filename}, pois é um diretório ou tem 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "O tamanho total do arquivo {size1} excede o limite de envio {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Não há espaço suficiente, você está enviando {size1} mas resta apenas {size2}",
@@ -44,18 +46,19 @@
"Could not create file" : "Não foi possível criar o arquivo",
"Could not create folder" : "Não foi possível criar a pasta",
"Error fetching URL" : "Erro ao buscar URL",
- "Share" : "Compartilhar",
+ "Rename" : "Renomear",
"Delete" : "Excluir",
"Disconnect storage" : "Desconectar armazenagem",
"Unshare" : "Descompartilhar",
- "Delete permanently" : "Excluir permanentemente",
- "Rename" : "Renomear",
+ "Select" : "Selecionar",
"Pending" : "Pendente",
+ "Unable to determine date" : "Impossível determinar a data",
"Error moving file." : "Erro movendo o arquivo.",
"Error moving file" : "Erro movendo o arquivo",
"Error" : "Erro",
"Could not rename file" : "Não foi possível renomear o arquivo",
"Error deleting file." : "Erro eliminando o arquivo.",
+ "No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'",
"Name" : "Nome",
"Size" : "Tamanho",
"Modified" : "Modificado",
@@ -69,7 +72,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Favorito",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "%s não pode ser renomeado pois foi apagado",
"%s could not be renamed" : "%s não pode ser renomeado",
"Upload (max. %s)" : "Envio (max. %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Tamanho máximo para envio",
"max. possible: " : "max. possível:",
"Save" : "Salvar",
+ "Settings" : "Configurações",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>",
"New" : "Novo",
@@ -85,11 +92,18 @@
"New folder" : "Nova pasta",
"Folder" : "Pasta",
"From link" : "Do link",
- "Nothing in here. Upload something!" : "Nada aqui. Carregue alguma coisa!",
+ "Upload" : "Enviar",
+ "Cancel upload" : "Cancelar envio",
+ "No files yet" : "Nenhum arquivo até agora",
+ "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com seus dispositivos!",
+ "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
+ "Select all" : "Selecionar tudo",
"Download" : "Baixar",
"Upload too large" : "Arquivo muito grande para envio",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excedeu o tamanho máximo para arquivos no servidor.",
"Files are being scanned, please wait." : "Arquivos sendo escaneados, por favor aguarde.",
- "Currently scanning" : "Atualmente escaneando"
+ "Currently scanning" : "Atualmente escaneando",
+ "No favorites" : "Sem favoritos",
+ "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favorito são mostrados aqui"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js
index 2ce2038d661..509c85ad58c 100644
--- a/apps/files/l10n/pt_PT.js
+++ b/apps/files/l10n/pt_PT.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Diretoria inválida.",
"Files" : "Ficheiros",
"All files" : "Todos os ficheiros",
+ "Favorites" : "Favoritos",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Incapaz de enviar {filename}, dado que é uma pasta, ou tem 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "O tamanho total do ficheiro {size1} excede o limite de carregamento {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Não existe espaço suficiente. Está a enviar {size1} mas apenas existe {size2} disponível",
@@ -46,13 +48,13 @@ OC.L10N.register(
"Could not create file" : "Não pôde criar ficheiro",
"Could not create folder" : "Não pôde criar pasta",
"Error fetching URL" : "Erro ao obter URL",
- "Share" : "Compartilhar",
+ "Rename" : "Renomear",
"Delete" : "Apagar",
"Disconnect storage" : "Desconete o armazenamento",
"Unshare" : "Deixar de partilhar",
- "Delete permanently" : "Apagar Para Sempre",
- "Rename" : "Renomear",
+ "Select" : "Selecionar",
"Pending" : "Pendente",
+ "Unable to determine date" : "Impossível determinar a data",
"Error moving file." : "Erro a mover o ficheiro.",
"Error moving file" : "Erro ao mover o ficheiro",
"Error" : "Erro",
@@ -71,7 +73,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "Não foi possível renomear %s devido a ter sido eliminado",
"%s could not be renamed" : "%s não pode ser renomeada",
"Upload (max. %s)" : "Enviar (max. %s)",
@@ -79,6 +83,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamanho máximo de envio",
"max. possible: " : "Máx. possível: ",
"Save" : "Guardar",
+ "Settings" : "Definições",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>",
"New" : "Novo",
@@ -87,11 +92,14 @@ OC.L10N.register(
"New folder" : "Nova Pasta",
"Folder" : "Pasta",
"From link" : "Da hiperligação",
- "Nothing in here. Upload something!" : "Vazio. Envie alguma coisa!",
+ "Upload" : "Enviar",
+ "Cancel upload" : "Cancelar o envio",
+ "Select all" : "Seleccionar todos",
"Download" : "Transferir",
"Upload too large" : "Upload muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiro que está a tentar enviar excedem o tamanho máximo de envio neste servidor.",
"Files are being scanned, please wait." : "Os ficheiros estão a ser analisados, por favor aguarde.",
- "Currently scanning" : "A analisar"
+ "Currently scanning" : "A analisar",
+ "No favorites" : "Sem favoritos"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json
index 4be9e4306dc..fb333fa23b0 100644
--- a/apps/files/l10n/pt_PT.json
+++ b/apps/files/l10n/pt_PT.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Diretoria inválida.",
"Files" : "Ficheiros",
"All files" : "Todos os ficheiros",
+ "Favorites" : "Favoritos",
+ "Home" : "Casa",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Incapaz de enviar {filename}, dado que é uma pasta, ou tem 0 bytes",
"Total file size {size1} exceeds upload limit {size2}" : "O tamanho total do ficheiro {size1} excede o limite de carregamento {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Não existe espaço suficiente. Está a enviar {size1} mas apenas existe {size2} disponível",
@@ -44,13 +46,13 @@
"Could not create file" : "Não pôde criar ficheiro",
"Could not create folder" : "Não pôde criar pasta",
"Error fetching URL" : "Erro ao obter URL",
- "Share" : "Compartilhar",
+ "Rename" : "Renomear",
"Delete" : "Apagar",
"Disconnect storage" : "Desconete o armazenamento",
"Unshare" : "Deixar de partilhar",
- "Delete permanently" : "Apagar Para Sempre",
- "Rename" : "Renomear",
+ "Select" : "Selecionar",
"Pending" : "Pendente",
+ "Unable to determine date" : "Impossível determinar a data",
"Error moving file." : "Erro a mover o ficheiro.",
"Error moving file" : "Erro ao mover o ficheiro",
"Error" : "Erro",
@@ -69,7 +71,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} e {files}",
+ "Favorite" : "Favorito",
"%s could not be renamed as it has been deleted" : "Não foi possível renomear %s devido a ter sido eliminado",
"%s could not be renamed" : "%s não pode ser renomeada",
"Upload (max. %s)" : "Enviar (max. %s)",
@@ -77,6 +81,7 @@
"Maximum upload size" : "Tamanho máximo de envio",
"max. possible: " : "Máx. possível: ",
"Save" : "Guardar",
+ "Settings" : "Definições",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>",
"New" : "Novo",
@@ -85,11 +90,14 @@
"New folder" : "Nova Pasta",
"Folder" : "Pasta",
"From link" : "Da hiperligação",
- "Nothing in here. Upload something!" : "Vazio. Envie alguma coisa!",
+ "Upload" : "Enviar",
+ "Cancel upload" : "Cancelar o envio",
+ "Select all" : "Seleccionar todos",
"Download" : "Transferir",
"Upload too large" : "Upload muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiro que está a tentar enviar excedem o tamanho máximo de envio neste servidor.",
"Files are being scanned, please wait." : "Os ficheiros estão a ser analisados, por favor aguarde.",
- "Currently scanning" : "A analisar"
+ "Currently scanning" : "A analisar",
+ "No favorites" : "Sem favoritos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js
index 2b3e662aafd..32475b5eb0f 100644
--- a/apps/files/l10n/ro.js
+++ b/apps/files/l10n/ro.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Dosar nevalid.",
"Files" : "Fișiere",
"All files" : "Toate fișierele.",
+ "Favorites" : "Favorite",
+ "Home" : "Acasă",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți",
"Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de incarcare de {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spațiu liber insuficient, încărcați {size1} însă doar {size2} disponibil rămas",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Nu s-a putut crea fisierul",
"Could not create folder" : "Nu s-a putut crea folderul",
"Error fetching URL" : "Eroare încarcare URL",
- "Share" : "Partajează",
+ "Rename" : "Redenumește",
"Delete" : "Șterge",
"Disconnect storage" : "Stocare deconectata",
"Unshare" : "Anulare",
- "Delete permanently" : "Șterge permanent",
- "Rename" : "Redenumește",
+ "Select" : "Selectează",
"Pending" : "În așteptare",
"Error moving file." : "Eroare la mutarea fișierului.",
"Error moving file" : "Eroare la mutarea fișierului",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} și {files}",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s nu a putut fi redenumit deoarece a fost sters",
"%s could not be renamed" : "%s nu a putut fi redenumit",
"Upload (max. %s)" : "Încarcă (max. %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Dimensiune maximă admisă la încărcare",
"max. possible: " : "max. posibil:",
"Save" : "Salvează",
+ "Settings" : "Setări",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Folosește această adresă <a href=\"%s\" target=\"_blank\">pentru acces la fișierele tale folosind WebDAV</a>",
"New" : "Nou",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "Un nou dosar",
"Folder" : "Dosar",
"From link" : "De la adresa",
- "Nothing in here. Upload something!" : "Nimic aici. Încarcă ceva!",
+ "Upload" : "Încărcă",
+ "Cancel upload" : "Anulează încărcarea",
"Download" : "Descarcă",
"Upload too large" : "Fișierul încărcat este prea mare",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.",
diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json
index c0e85b4b916..a05cd39881e 100644
--- a/apps/files/l10n/ro.json
+++ b/apps/files/l10n/ro.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Dosar nevalid.",
"Files" : "Fișiere",
"All files" : "Toate fișierele.",
+ "Favorites" : "Favorite",
+ "Home" : "Acasă",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți",
"Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de incarcare de {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spațiu liber insuficient, încărcați {size1} însă doar {size2} disponibil rămas",
@@ -44,12 +46,11 @@
"Could not create file" : "Nu s-a putut crea fisierul",
"Could not create folder" : "Nu s-a putut crea folderul",
"Error fetching URL" : "Eroare încarcare URL",
- "Share" : "Partajează",
+ "Rename" : "Redenumește",
"Delete" : "Șterge",
"Disconnect storage" : "Stocare deconectata",
"Unshare" : "Anulare",
- "Delete permanently" : "Șterge permanent",
- "Rename" : "Redenumește",
+ "Select" : "Selectează",
"Pending" : "În așteptare",
"Error moving file." : "Eroare la mutarea fișierului.",
"Error moving file" : "Eroare la mutarea fișierului",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} și {files}",
+ "Favorite" : "Favorit",
"%s could not be renamed as it has been deleted" : "%s nu a putut fi redenumit deoarece a fost sters",
"%s could not be renamed" : "%s nu a putut fi redenumit",
"Upload (max. %s)" : "Încarcă (max. %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Dimensiune maximă admisă la încărcare",
"max. possible: " : "max. posibil:",
"Save" : "Salvează",
+ "Settings" : "Setări",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Folosește această adresă <a href=\"%s\" target=\"_blank\">pentru acces la fișierele tale folosind WebDAV</a>",
"New" : "Nou",
@@ -85,7 +89,8 @@
"New folder" : "Un nou dosar",
"Folder" : "Dosar",
"From link" : "De la adresa",
- "Nothing in here. Upload something!" : "Nimic aici. Încarcă ceva!",
+ "Upload" : "Încărcă",
+ "Cancel upload" : "Anulează încărcarea",
"Download" : "Descarcă",
"Upload too large" : "Fișierul încărcat este prea mare",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.",
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index cd982266155..8494f913794 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -8,18 +8,18 @@ OC.L10N.register(
"Could not move %s" : "Невозможно переместить %s",
"Permission denied" : "В доступе отказано",
"File name cannot be empty." : "Имя файла не может быть пустым.",
- "\"%s\" is an invalid file name." : "\"%s\" это не правильное имя файла.",
- "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправильное имя: символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
+ "\"%s\" is an invalid file name." : "\"%s\" недопустимое имя файла.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправильное имя, символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
"The target folder has been moved or deleted." : "Целевой каталог был перемещен или удален.",
- "The name %s is already used in the folder %s. Please choose a different name." : "Имя %s уже используется для каталога %s. Пожалуйста, выберите другое имя.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Имя %s уже используется для каталога %s. Укажите другое имя.",
"Not a valid source" : "Неправильный источник",
- "Server is not allowed to open URLs, please check the server configuration" : "Сервер не позволяет открывать URL-адреса, пожалуйста, проверьте настройки сервера",
- "The file exceeds your quota by %s" : "Файл превышает вашу квоту на %s",
+ "Server is not allowed to open URLs, please check the server configuration" : "Сервер не позволяет открывать URL-адреса, проверьте настройки сервера",
+ "The file exceeds your quota by %s" : "Размер файла превышает квоту на %s",
"Error while downloading %s to %s" : "Ошибка при скачивании %s в %s",
"Error when creating the file" : "Ошибка при создании файла",
- "Folder name cannot be empty." : "Имя папки не может быть пустым.",
+ "Folder name cannot be empty." : "Имя каталога не может быть пустым.",
"Error when creating the folder" : "Ошибка создания каталога",
- "Unable to set upload directory." : "Не удалось установить каталог загрузки.",
+ "Unable to set upload directory." : "Невозможно установить каталог загрузки.",
"Invalid Token" : "Недопустимый маркер",
"No file was uploaded. Unknown error" : "Файл не был загружен. Неизвестная ошибка",
"There is no error, the file uploaded with success" : "Файл загружен успешно.",
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Неверный каталог.",
"Files" : "Файлы",
"All files" : "Все файлы",
+ "Favorites" : "Избранное",
+ "Home" : "Домашний",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно загрузить {filename}, так как это либо каталог, либо файл нулевого размера",
"Total file size {size1} exceeds upload limit {size2}" : "Полный размер файла {size1} превышает лимит по загрузке {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Не достаточно свободного места, Вы загружаете {size1} но осталось только {size2}",
@@ -46,18 +48,19 @@ OC.L10N.register(
"Could not create file" : "Не удалось создать файл",
"Could not create folder" : "Не удалось создать каталог",
"Error fetching URL" : "Ошибка получения URL",
- "Share" : "Открыть доступ",
+ "Rename" : "Переименовать",
"Delete" : "Удалить",
"Disconnect storage" : "Отсоединиться от хранилища",
"Unshare" : "Закрыть доступ",
- "Delete permanently" : "Удалить окончательно",
- "Rename" : "Переименовать",
+ "Select" : "Выбрать",
"Pending" : "Ожидание",
+ "Unable to determine date" : "Невозможно определить дату",
"Error moving file." : "Ошибка перемещения файла.",
"Error moving file" : "Ошибка при перемещении файла",
"Error" : "Ошибка",
"Could not rename file" : "Не удалось переименовать файл",
"Error deleting file." : "Ошибка при удалении файла.",
+ "No entries in this folder match '{filter}'" : "В данном каталоге нет ничего соответствующего '{filter}'",
"Name" : "Имя",
"Size" : "Размер",
"Modified" : "Изменён",
@@ -68,10 +71,13 @@ OC.L10N.register(
"\"{name}\" is an invalid file name." : "\"{name}\" это не правильное имя файла.",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, пожалуйста, перелогиньтесь",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите вновь",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствует '{filter}'"],
"{dirs} and {files}" : "{dirs} и {files}",
+ "Favorited" : "Избранное",
+ "Favorite" : "Избранное",
"%s could not be renamed as it has been deleted" : "Невозможно переименовать %s, поскольку объект удалён.",
"%s could not be renamed" : "%s не может быть переименован",
"Upload (max. %s)" : "Загрузка (Максимум: %s)",
@@ -79,6 +85,7 @@ OC.L10N.register(
"Maximum upload size" : "Максимальный размер загружаемого файла",
"max. possible: " : "макс. возможно: ",
"Save" : "Сохранить",
+ "Settings" : "Настройки",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">доступа файлам через WebDAV</a>",
"New" : "Новый",
@@ -87,11 +94,18 @@ OC.L10N.register(
"New folder" : "Новый каталог",
"Folder" : "Каталог",
"From link" : "Объект по ссылке",
- "Nothing in here. Upload something!" : "Здесь ничего нет. Загрузите что-нибудь!",
+ "Upload" : "Загрузить",
+ "Cancel upload" : "Отменить загрузку",
+ "No files yet" : "Пока ещё нет файлов",
+ "Upload some content or sync with your devices!" : "Загрузите что-нибудь или синхронизируйте со своими устройствами!",
+ "No entries found in this folder" : "Каталог пуст",
+ "Select all" : "Выбрать все",
"Download" : "Скачать",
"Upload too large" : "Файл слишком велик",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файлы, которые вы пытаетесь загрузить, превышают лимит максимального размера на этом сервере.",
- "Files are being scanned, please wait." : "Подождите, файлы сканируются.",
- "Currently scanning" : "В настоящее время сканируется"
+ "Files are being scanned, please wait." : "Идет сканирование файлов. Пожалуйста подождите.",
+ "Currently scanning" : "В настоящее время сканируется",
+ "No favorites" : "Нет избранного",
+ "Files and folders you mark as favorite will show up here" : "Здесь появятся файлы и каталоги, отмеченные как избранные"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index 7ac4fb7c3c3..c16452f7e11 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -6,18 +6,18 @@
"Could not move %s" : "Невозможно переместить %s",
"Permission denied" : "В доступе отказано",
"File name cannot be empty." : "Имя файла не может быть пустым.",
- "\"%s\" is an invalid file name." : "\"%s\" это не правильное имя файла.",
- "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправильное имя: символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
+ "\"%s\" is an invalid file name." : "\"%s\" недопустимое имя файла.",
+ "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправильное имя, символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
"The target folder has been moved or deleted." : "Целевой каталог был перемещен или удален.",
- "The name %s is already used in the folder %s. Please choose a different name." : "Имя %s уже используется для каталога %s. Пожалуйста, выберите другое имя.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Имя %s уже используется для каталога %s. Укажите другое имя.",
"Not a valid source" : "Неправильный источник",
- "Server is not allowed to open URLs, please check the server configuration" : "Сервер не позволяет открывать URL-адреса, пожалуйста, проверьте настройки сервера",
- "The file exceeds your quota by %s" : "Файл превышает вашу квоту на %s",
+ "Server is not allowed to open URLs, please check the server configuration" : "Сервер не позволяет открывать URL-адреса, проверьте настройки сервера",
+ "The file exceeds your quota by %s" : "Размер файла превышает квоту на %s",
"Error while downloading %s to %s" : "Ошибка при скачивании %s в %s",
"Error when creating the file" : "Ошибка при создании файла",
- "Folder name cannot be empty." : "Имя папки не может быть пустым.",
+ "Folder name cannot be empty." : "Имя каталога не может быть пустым.",
"Error when creating the folder" : "Ошибка создания каталога",
- "Unable to set upload directory." : "Не удалось установить каталог загрузки.",
+ "Unable to set upload directory." : "Невозможно установить каталог загрузки.",
"Invalid Token" : "Недопустимый маркер",
"No file was uploaded. Unknown error" : "Файл не был загружен. Неизвестная ошибка",
"There is no error, the file uploaded with success" : "Файл загружен успешно.",
@@ -33,6 +33,8 @@
"Invalid directory." : "Неверный каталог.",
"Files" : "Файлы",
"All files" : "Все файлы",
+ "Favorites" : "Избранное",
+ "Home" : "Домашний",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно загрузить {filename}, так как это либо каталог, либо файл нулевого размера",
"Total file size {size1} exceeds upload limit {size2}" : "Полный размер файла {size1} превышает лимит по загрузке {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Не достаточно свободного места, Вы загружаете {size1} но осталось только {size2}",
@@ -44,18 +46,19 @@
"Could not create file" : "Не удалось создать файл",
"Could not create folder" : "Не удалось создать каталог",
"Error fetching URL" : "Ошибка получения URL",
- "Share" : "Открыть доступ",
+ "Rename" : "Переименовать",
"Delete" : "Удалить",
"Disconnect storage" : "Отсоединиться от хранилища",
"Unshare" : "Закрыть доступ",
- "Delete permanently" : "Удалить окончательно",
- "Rename" : "Переименовать",
+ "Select" : "Выбрать",
"Pending" : "Ожидание",
+ "Unable to determine date" : "Невозможно определить дату",
"Error moving file." : "Ошибка перемещения файла.",
"Error moving file" : "Ошибка при перемещении файла",
"Error" : "Ошибка",
"Could not rename file" : "Не удалось переименовать файл",
"Error deleting file." : "Ошибка при удалении файла.",
+ "No entries in this folder match '{filter}'" : "В данном каталоге нет ничего соответствующего '{filter}'",
"Name" : "Имя",
"Size" : "Размер",
"Modified" : "Изменён",
@@ -66,10 +69,13 @@
"\"{name}\" is an invalid file name." : "\"{name}\" это не правильное имя файла.",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, пожалуйста, перелогиньтесь",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите вновь",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствует '{filter}'"],
"{dirs} and {files}" : "{dirs} и {files}",
+ "Favorited" : "Избранное",
+ "Favorite" : "Избранное",
"%s could not be renamed as it has been deleted" : "Невозможно переименовать %s, поскольку объект удалён.",
"%s could not be renamed" : "%s не может быть переименован",
"Upload (max. %s)" : "Загрузка (Максимум: %s)",
@@ -77,6 +83,7 @@
"Maximum upload size" : "Максимальный размер загружаемого файла",
"max. possible: " : "макс. возможно: ",
"Save" : "Сохранить",
+ "Settings" : "Настройки",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">доступа файлам через WebDAV</a>",
"New" : "Новый",
@@ -85,11 +92,18 @@
"New folder" : "Новый каталог",
"Folder" : "Каталог",
"From link" : "Объект по ссылке",
- "Nothing in here. Upload something!" : "Здесь ничего нет. Загрузите что-нибудь!",
+ "Upload" : "Загрузить",
+ "Cancel upload" : "Отменить загрузку",
+ "No files yet" : "Пока ещё нет файлов",
+ "Upload some content or sync with your devices!" : "Загрузите что-нибудь или синхронизируйте со своими устройствами!",
+ "No entries found in this folder" : "Каталог пуст",
+ "Select all" : "Выбрать все",
"Download" : "Скачать",
"Upload too large" : "Файл слишком велик",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файлы, которые вы пытаетесь загрузить, превышают лимит максимального размера на этом сервере.",
- "Files are being scanned, please wait." : "Подождите, файлы сканируются.",
- "Currently scanning" : "В настоящее время сканируется"
+ "Files are being scanned, please wait." : "Идет сканирование файлов. Пожалуйста подождите.",
+ "Currently scanning" : "В настоящее время сканируется",
+ "No favorites" : "Нет избранного",
+ "Files and folders you mark as favorite will show up here" : "Здесь появятся файлы и каталоги, отмеченные как избранные"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/si_LK.js b/apps/files/l10n/si_LK.js
index 80df02a9ada..2b0bd0d3d2b 100644
--- a/apps/files/l10n/si_LK.js
+++ b/apps/files/l10n/si_LK.js
@@ -9,12 +9,13 @@ OC.L10N.register(
"Missing a temporary folder" : "තාවකාලික ෆොල්ඩරයක් අතුරුදහන්",
"Failed to write to disk" : "තැටිගත කිරීම අසාර්ථකයි",
"Files" : "ගොනු",
+ "Home" : "නිවස",
"Upload cancelled." : "උඩුගත කිරීම අත් හරින්න ලදී",
"File upload is in progress. Leaving the page now will cancel the upload." : "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත",
- "Share" : "බෙදා හදා ගන්න",
+ "Rename" : "නැවත නම් කරන්න",
"Delete" : "මකා දමන්න",
"Unshare" : "නොබෙදු",
- "Rename" : "නැවත නම් කරන්න",
+ "Select" : "තෝරන්න",
"Error" : "දෝෂයක්",
"Name" : "නම",
"Size" : "ප්‍රමාණය",
@@ -22,15 +23,18 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "ගොනු පරිහරණය",
"Maximum upload size" : "උඩුගත කිරීමක උපරිම ප්‍රමාණය",
"max. possible: " : "හැකි උපරිමය:",
"Save" : "සුරකින්න",
+ "Settings" : "සිටුවම්",
"New" : "නව",
"Text file" : "පෙළ ගොනුව",
"Folder" : "ෆෝල්ඩරය",
"From link" : "යොමුවෙන්",
- "Nothing in here. Upload something!" : "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න",
+ "Upload" : "උඩුගත කරන්න",
+ "Cancel upload" : "උඩුගත කිරීම අත් හරින්න",
"Download" : "බාන්න",
"Upload too large" : "උඩුගත කිරීම විශාල වැඩිය",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ඔබ උඩුගත කිරීමට තැත් කරන ගොනු මෙම සේවාදායකයා උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විශාලත්වයට වඩා වැඩිය",
diff --git a/apps/files/l10n/si_LK.json b/apps/files/l10n/si_LK.json
index e66d5c2a1f1..67538b76f59 100644
--- a/apps/files/l10n/si_LK.json
+++ b/apps/files/l10n/si_LK.json
@@ -7,12 +7,13 @@
"Missing a temporary folder" : "තාවකාලික ෆොල්ඩරයක් අතුරුදහන්",
"Failed to write to disk" : "තැටිගත කිරීම අසාර්ථකයි",
"Files" : "ගොනු",
+ "Home" : "නිවස",
"Upload cancelled." : "උඩුගත කිරීම අත් හරින්න ලදී",
"File upload is in progress. Leaving the page now will cancel the upload." : "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත",
- "Share" : "බෙදා හදා ගන්න",
+ "Rename" : "නැවත නම් කරන්න",
"Delete" : "මකා දමන්න",
"Unshare" : "නොබෙදු",
- "Rename" : "නැවත නම් කරන්න",
+ "Select" : "තෝරන්න",
"Error" : "දෝෂයක්",
"Name" : "නම",
"Size" : "ප්‍රමාණය",
@@ -20,15 +21,18 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"File handling" : "ගොනු පරිහරණය",
"Maximum upload size" : "උඩුගත කිරීමක උපරිම ප්‍රමාණය",
"max. possible: " : "හැකි උපරිමය:",
"Save" : "සුරකින්න",
+ "Settings" : "සිටුවම්",
"New" : "නව",
"Text file" : "පෙළ ගොනුව",
"Folder" : "ෆෝල්ඩරය",
"From link" : "යොමුවෙන්",
- "Nothing in here. Upload something!" : "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න",
+ "Upload" : "උඩුගත කරන්න",
+ "Cancel upload" : "උඩුගත කිරීම අත් හරින්න",
"Download" : "බාන්න",
"Upload too large" : "උඩුගත කිරීම විශාල වැඩිය",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ඔබ උඩුගත කිරීමට තැත් කරන ගොනු මෙම සේවාදායකයා උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විශාලත්වයට වඩා වැඩිය",
diff --git a/apps/files/l10n/sk_SK.js b/apps/files/l10n/sk_SK.js
index b29bc7e2c0f..cdff3280b4d 100644
--- a/apps/files/l10n/sk_SK.js
+++ b/apps/files/l10n/sk_SK.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Neplatný priečinok.",
"Files" : "Súbory",
"All files" : "Všetky súbory",
+ "Favorites" : "Obľúbené",
+ "Home" : "Domov",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nemožno nahrať súbor {filename}, pretože je to priečinok, alebo má 0 bitov",
"Total file size {size1} exceeds upload limit {size2}" : "Celková veľkosť súboru {size1} prekračuje upload limit {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Nemožno vytvoriť súbor",
"Could not create folder" : "Nemožno vytvoriť priečinok",
"Error fetching URL" : "Chyba pri načítavaní URL",
- "Share" : "Zdieľať",
+ "Rename" : "Premenovať",
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
"Unshare" : "Zrušiť zdieľanie",
- "Delete permanently" : "Zmazať trvalo",
- "Rename" : "Premenovať",
+ "Select" : "Vybrať",
"Pending" : "Čaká",
"Error moving file." : "Chyba pri presune súboru.",
"Error moving file" : "Chyba pri presúvaní súboru",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} a {files}",
+ "Favorite" : "Obľúbené",
"%s could not be renamed as it has been deleted" : "%s nebolo možné premenovať, pretože bol zmazaný",
"%s could not be renamed" : "%s nemohol byť premenovaný",
"Upload (max. %s)" : "Nahrať (max. %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximálna veľkosť odosielaného súboru",
"max. possible: " : "najväčšie možné:",
"Save" : "Uložiť",
+ "Settings" : "Nastavenia",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použite túto linku <a href=\"%s\" target=\"_blank\">pre prístup k vašim súborom cez WebDAV</a>",
"New" : "Nový",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "Nový priečinok",
"Folder" : "Priečinok",
"From link" : "Z odkazu",
- "Nothing in here. Upload something!" : "Žiadny súbor. Nahrajte niečo!",
+ "Upload" : "Nahrať",
+ "Cancel upload" : "Zrušiť nahrávanie",
"Download" : "Sťahovanie",
"Upload too large" : "Nahrávanie je príliš veľké",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json
index a61a5ac06ad..8484602b886 100644
--- a/apps/files/l10n/sk_SK.json
+++ b/apps/files/l10n/sk_SK.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Neplatný priečinok.",
"Files" : "Súbory",
"All files" : "Všetky súbory",
+ "Favorites" : "Obľúbené",
+ "Home" : "Domov",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nemožno nahrať súbor {filename}, pretože je to priečinok, alebo má 0 bitov",
"Total file size {size1} exceeds upload limit {size2}" : "Celková veľkosť súboru {size1} prekračuje upload limit {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
@@ -44,12 +46,11 @@
"Could not create file" : "Nemožno vytvoriť súbor",
"Could not create folder" : "Nemožno vytvoriť priečinok",
"Error fetching URL" : "Chyba pri načítavaní URL",
- "Share" : "Zdieľať",
+ "Rename" : "Premenovať",
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
"Unshare" : "Zrušiť zdieľanie",
- "Delete permanently" : "Zmazať trvalo",
- "Rename" : "Premenovať",
+ "Select" : "Vybrať",
"Pending" : "Čaká",
"Error moving file." : "Chyba pri presune súboru.",
"Error moving file" : "Chyba pri presúvaní súboru",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} a {files}",
+ "Favorite" : "Obľúbené",
"%s could not be renamed as it has been deleted" : "%s nebolo možné premenovať, pretože bol zmazaný",
"%s could not be renamed" : "%s nemohol byť premenovaný",
"Upload (max. %s)" : "Nahrať (max. %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Maximálna veľkosť odosielaného súboru",
"max. possible: " : "najväčšie možné:",
"Save" : "Uložiť",
+ "Settings" : "Nastavenia",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použite túto linku <a href=\"%s\" target=\"_blank\">pre prístup k vašim súborom cez WebDAV</a>",
"New" : "Nový",
@@ -85,7 +89,8 @@
"New folder" : "Nový priečinok",
"Folder" : "Priečinok",
"From link" : "Z odkazu",
- "Nothing in here. Upload something!" : "Žiadny súbor. Nahrajte niečo!",
+ "Upload" : "Nahrať",
+ "Cancel upload" : "Zrušiť nahrávanie",
"Download" : "Sťahovanie",
"Upload too large" : "Nahrávanie je príliš veľké",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index 6a8bcbe68a6..d942f2fdc06 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Neveljavna mapa.",
"Files" : "Datoteke",
"All files" : "Vse datoteke",
+ "Favorites" : "Priljubljene",
+ "Home" : "Domači naslov",
"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.",
"Total file size {size1} exceeds upload limit {size2}" : "Skupna velikost {size1} presega omejitev velikosti {size2}",
"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}.",
@@ -46,13 +48,13 @@ OC.L10N.register(
"Could not create file" : "Ni mogoče ustvariti datoteke",
"Could not create folder" : "Ni mogoče ustvariti mape",
"Error fetching URL" : "Napaka pridobivanja naslova URL",
- "Share" : "Souporaba",
+ "Rename" : "Preimenuj",
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
- "Delete permanently" : "Izbriši dokončno",
- "Rename" : "Preimenuj",
+ "Select" : "Izberi",
"Pending" : "V čakanju ...",
+ "Unable to determine date" : "Ni mogoče določiti datuma",
"Error moving file." : "Napaka premikanja datoteke.",
"Error moving file" : "Napaka premikanja datoteke",
"Error" : "Napaka",
@@ -71,7 +73,10 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogočeno, datoteke pa so še vedno šifrirane. Odšifrirajte jih med nastavitvami.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""],
"{dirs} and {files}" : "{dirs} in {files}",
+ "Favorited" : "Označeno kot priljubljeno",
+ "Favorite" : "Priljubljene",
"%s could not be renamed as it has been deleted" : "Datoteke %s ni mogoče preimenovati, ker je bila že prej izbrisana.",
"%s could not be renamed" : "%s ni mogoče preimenovati",
"Upload (max. %s)" : "Pošiljanje (omejitev %s)",
@@ -79,6 +84,7 @@ OC.L10N.register(
"Maximum upload size" : "Največja velikost za pošiljanja",
"max. possible: " : "največ mogoče:",
"Save" : "Shrani",
+ "Settings" : "Nastavitve",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek peko sistema WebDAV</a>.",
"New" : "Novo",
@@ -87,11 +93,17 @@ OC.L10N.register(
"New folder" : "Nova mapa",
"Folder" : "Mapa",
"From link" : "Iz povezave",
- "Nothing in here. Upload something!" : "Tukaj še ni ničesar. Najprej je treba kakšno datoteko poslati v oblak!",
+ "Upload" : "Pošlji",
+ "Cancel upload" : "Prekliči pošiljanje",
+ "No files yet" : "Ni datotek",
+ "Upload some content or sync with your devices!" : "Uvozite vsebino ali pa omogočite usklajevanje z napravami!",
+ "Select all" : "izberi vse",
"Download" : "Prejmi",
"Upload too large" : "Prekoračenje omejitve velikosti",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku.",
"Files are being scanned, please wait." : "Poteka preučevanje datotek, počakajte ...",
- "Currently scanning" : "Poteka preverjanje"
+ "Currently scanning" : "Poteka preverjanje",
+ "No favorites" : "Ni priljubljenih",
+ "Files and folders you mark as favorite will show up here" : "Datoteke ali mape, ki so označene kot priljubljene, bodo izpisane tukaj."
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index c759bd2abfe..7ef8b666fe8 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Neveljavna mapa.",
"Files" : "Datoteke",
"All files" : "Vse datoteke",
+ "Favorites" : "Priljubljene",
+ "Home" : "Domači naslov",
"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.",
"Total file size {size1} exceeds upload limit {size2}" : "Skupna velikost {size1} presega omejitev velikosti {size2}",
"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}.",
@@ -44,13 +46,13 @@
"Could not create file" : "Ni mogoče ustvariti datoteke",
"Could not create folder" : "Ni mogoče ustvariti mape",
"Error fetching URL" : "Napaka pridobivanja naslova URL",
- "Share" : "Souporaba",
+ "Rename" : "Preimenuj",
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
- "Delete permanently" : "Izbriši dokončno",
- "Rename" : "Preimenuj",
+ "Select" : "Izberi",
"Pending" : "V čakanju ...",
+ "Unable to determine date" : "Ni mogoče določiti datuma",
"Error moving file." : "Napaka premikanja datoteke.",
"Error moving file" : "Napaka premikanja datoteke",
"Error" : "Napaka",
@@ -69,7 +71,10 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogočeno, datoteke pa so še vedno šifrirane. Odšifrirajte jih med nastavitvami.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","","",""],
"{dirs} and {files}" : "{dirs} in {files}",
+ "Favorited" : "Označeno kot priljubljeno",
+ "Favorite" : "Priljubljene",
"%s could not be renamed as it has been deleted" : "Datoteke %s ni mogoče preimenovati, ker je bila že prej izbrisana.",
"%s could not be renamed" : "%s ni mogoče preimenovati",
"Upload (max. %s)" : "Pošiljanje (omejitev %s)",
@@ -77,6 +82,7 @@
"Maximum upload size" : "Največja velikost za pošiljanja",
"max. possible: " : "največ mogoče:",
"Save" : "Shrani",
+ "Settings" : "Nastavitve",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek peko sistema WebDAV</a>.",
"New" : "Novo",
@@ -85,11 +91,17 @@
"New folder" : "Nova mapa",
"Folder" : "Mapa",
"From link" : "Iz povezave",
- "Nothing in here. Upload something!" : "Tukaj še ni ničesar. Najprej je treba kakšno datoteko poslati v oblak!",
+ "Upload" : "Pošlji",
+ "Cancel upload" : "Prekliči pošiljanje",
+ "No files yet" : "Ni datotek",
+ "Upload some content or sync with your devices!" : "Uvozite vsebino ali pa omogočite usklajevanje z napravami!",
+ "Select all" : "izberi vse",
"Download" : "Prejmi",
"Upload too large" : "Prekoračenje omejitve velikosti",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku.",
"Files are being scanned, please wait." : "Poteka preučevanje datotek, počakajte ...",
- "Currently scanning" : "Poteka preverjanje"
+ "Currently scanning" : "Poteka preverjanje",
+ "No favorites" : "Ni priljubljenih",
+ "Files and folders you mark as favorite will show up here" : "Datoteke ali mape, ki so označene kot priljubljene, bodo izpisane tukaj."
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js
index 14caaa15140..b69335ed845 100644
--- a/apps/files/l10n/sq.js
+++ b/apps/files/l10n/sq.js
@@ -1,11 +1,24 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "Hapësira e memorizimit nuk është e disponueshme",
+ "Storage invalid" : "Hapësirë memorizimi e pavlefshme",
"Unknown error" : "Gabim panjohur",
"Could not move %s - File with this name already exists" : "E pa mundur zhvendosja e %s - ekziston nje skedar me te njetin emer",
"Could not move %s" : "Nuk mund të zhvendoset %s",
+ "Permission denied" : "Nuk ka të drejtë",
"File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.",
+ "\"%s\" is an invalid file name." : "\"%s\" është i pavlefshëm si emër skedari.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Emër jo i vlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.",
+ "The target folder has been moved or deleted." : "Dosja e destinacionit është zhvendosur ose fshirë.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Emri %s është i përdorur në dosjen %s. Ju lutem zgjidhni një emër tjetër.",
+ "Not a valid source" : "Burim i pavlefshëm",
+ "Server is not allowed to open URLs, please check the server configuration" : "Serverit nuk i lejohet të hapë URL, ju lutem kontrolloni konfigurimin e serverit",
+ "The file exceeds your quota by %s" : "Ky skedar tejkalon kuotën tuaj me %s",
+ "Error while downloading %s to %s" : "Gabim gjatë shkarkimit të %s në %s",
+ "Error when creating the file" : "Gabim gjatë krijimit të skedarit",
+ "Folder name cannot be empty." : "Emri i dosjes nuk mund të jetë bosh.",
+ "Error when creating the folder" : "Gabim gjatë krijimit të dosjes",
"Unable to set upload directory." : "E pa mundur të vendoset dosja e ngarkimit",
"Invalid Token" : "Shenjë e gabuar",
"No file was uploaded. Unknown error" : "Asnjë skedar nuk u dërgua. Gabim i pa njohur",
@@ -17,46 +30,70 @@ OC.L10N.register(
"Missing a temporary folder" : "Mungon dosja e përkohshme",
"Failed to write to disk" : "Dështoi shkrimi në disk",
"Not enough storage available" : "Hapsira e arkivimit e pamjaftueshme",
+ "Upload failed. Could not find uploaded file" : "Ngarkimi dështoi. Nuk mund të gjendet skedari i ngarkuar",
+ "Upload failed. Could not get file info." : "Ngarkimi dështoi. Nuk mund të gjej informacion mbi skedarin.",
"Invalid directory." : "Dosje e pavlefshme",
"Files" : "Skedarë",
+ "All files" : "Të gjithë",
+ "Home" : "Shtëpi",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nuk mund të ngarkohet {filename} sepse është dosje ose ka 0 byte",
+ "Total file size {size1} exceeds upload limit {size2}" : "Përmasa totale {size1} e skedarit tejkalon limitin e ngarkimit {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nuk ka hapësirë të mjaftueshme, ju po ngarkoni {size1} por vetëm {size2} është e lirë",
"Upload cancelled." : "Ngarkimi u anullua",
+ "Could not get result from server." : "Nuk mund të merret ndonjë rezultat nga serveri.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Skedari duke u ngarkuar. Largimi nga faqja do të anullojë ngarkimin",
"URL cannot be empty" : "URL-i nuk mund të jetë bosh",
"{new_name} already exists" : "{new_name} është ekzistues ",
+ "Could not create file" : "Skedari nuk mund të krijohet",
"Could not create folder" : "I pamundur krijimi i kartelës",
- "Share" : "Ndaj",
+ "Error fetching URL" : "Gabim në ngarkimin e URL",
+ "Rename" : "Riemëro",
"Delete" : "Fshi",
+ "Disconnect storage" : "Shkëput hapësirën e memorizimit",
"Unshare" : "Hiq ndarjen",
- "Delete permanently" : "Fshi përfundimisht",
- "Rename" : "Riemëro",
"Pending" : "Në vijim",
+ "Error moving file." : "Gabim në lëvizjen e skedarëve.",
"Error moving file" : "Gabim lëvizjen dokumentave",
"Error" : "Gabim",
+ "Could not rename file" : "Riemërtimi i skedarit nuk është i mundur",
+ "Error deleting file." : "Gabim gjatë fshirjes së skedarit.",
"Name" : "Emri",
"Size" : "Madhësia",
"Modified" : "Ndryshuar",
"_%n folder_::_%n folders_" : ["%n dosje","%n dosje"],
"_%n file_::_%n files_" : ["%n skedar","%n skedarë"],
+ "You don’t have permission to upload or create files here" : "Ju nuk keni të drejta për të ngarkuar apo krijuar skedarë këtu",
"_Uploading %n file_::_Uploading %n files_" : ["Po ngarkoj %n skedar","Po ngarkoj %n skedarë"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm.",
"Your storage is full, files can not be updated or synced anymore!" : "Hapsira juaj e arkivimit është plot, skedarët nuk mund të përditësohen ose sinkronizohen!",
"Your storage is almost full ({usedSpacePercent}%)" : "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i Shifrimit është i aktivizuar por çelësat tuaj nuk janë aktivizuar, ju lutem dilni dhe ri-hyni përseri në sistem",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} dhe {files}",
+ "%s could not be renamed as it has been deleted" : "%s nuk mund të riemërtohet sepse është fshirë",
"%s could not be renamed" : "Nuk është i mundur riemërtimi i %s",
+ "Upload (max. %s)" : "Ngarko (maks. %s)",
"File handling" : "Trajtimi i Skedarëve",
"Maximum upload size" : "Madhësia maksimale e nagarkimit",
"max. possible: " : "maks i mundshëm",
"Save" : "Ruaj",
+ "Settings" : "Konfigurime",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Përdorni këtë adresë për <a href=\"%s\" target=\"_blank\">qasje në skedarët tuaj me anë të WebDAV</a>",
"New" : "E re",
+ "New text file" : "Skedar i ri tekst",
"Text file" : "Skedar tekst",
"New folder" : "Dosje e're",
"Folder" : "Dosje",
"From link" : "Nga lidhja",
- "Nothing in here. Upload something!" : "Këtu nuk ka asgje. Ngarko dicka",
+ "Upload" : "Ngarko",
+ "Cancel upload" : "Anullo ngarkimin",
"Download" : "Shkarko",
"Upload too large" : "Ngarkimi shumë i madh",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skedarët që po mundoheni të ngarkoni e tejkalojnë madhësinë maksimale të lejuar nga serveri.",
- "Files are being scanned, please wait." : "Skanerizimi i skedarit në proces. Ju lutem prisni."
+ "Files are being scanned, please wait." : "Skanerizimi i skedarit në proces. Ju lutem prisni.",
+ "Currently scanning" : "Duke skanuar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json
index ec666c96ee4..3281d5bcd81 100644
--- a/apps/files/l10n/sq.json
+++ b/apps/files/l10n/sq.json
@@ -1,9 +1,22 @@
{ "translations": {
+ "Storage not available" : "Hapësira e memorizimit nuk është e disponueshme",
+ "Storage invalid" : "Hapësirë memorizimi e pavlefshme",
"Unknown error" : "Gabim panjohur",
"Could not move %s - File with this name already exists" : "E pa mundur zhvendosja e %s - ekziston nje skedar me te njetin emer",
"Could not move %s" : "Nuk mund të zhvendoset %s",
+ "Permission denied" : "Nuk ka të drejtë",
"File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.",
+ "\"%s\" is an invalid file name." : "\"%s\" është i pavlefshëm si emër skedari.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Emër jo i vlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.",
+ "The target folder has been moved or deleted." : "Dosja e destinacionit është zhvendosur ose fshirë.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Emri %s është i përdorur në dosjen %s. Ju lutem zgjidhni një emër tjetër.",
+ "Not a valid source" : "Burim i pavlefshëm",
+ "Server is not allowed to open URLs, please check the server configuration" : "Serverit nuk i lejohet të hapë URL, ju lutem kontrolloni konfigurimin e serverit",
+ "The file exceeds your quota by %s" : "Ky skedar tejkalon kuotën tuaj me %s",
+ "Error while downloading %s to %s" : "Gabim gjatë shkarkimit të %s në %s",
+ "Error when creating the file" : "Gabim gjatë krijimit të skedarit",
+ "Folder name cannot be empty." : "Emri i dosjes nuk mund të jetë bosh.",
+ "Error when creating the folder" : "Gabim gjatë krijimit të dosjes",
"Unable to set upload directory." : "E pa mundur të vendoset dosja e ngarkimit",
"Invalid Token" : "Shenjë e gabuar",
"No file was uploaded. Unknown error" : "Asnjë skedar nuk u dërgua. Gabim i pa njohur",
@@ -15,46 +28,70 @@
"Missing a temporary folder" : "Mungon dosja e përkohshme",
"Failed to write to disk" : "Dështoi shkrimi në disk",
"Not enough storage available" : "Hapsira e arkivimit e pamjaftueshme",
+ "Upload failed. Could not find uploaded file" : "Ngarkimi dështoi. Nuk mund të gjendet skedari i ngarkuar",
+ "Upload failed. Could not get file info." : "Ngarkimi dështoi. Nuk mund të gjej informacion mbi skedarin.",
"Invalid directory." : "Dosje e pavlefshme",
"Files" : "Skedarë",
+ "All files" : "Të gjithë",
+ "Home" : "Shtëpi",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nuk mund të ngarkohet {filename} sepse është dosje ose ka 0 byte",
+ "Total file size {size1} exceeds upload limit {size2}" : "Përmasa totale {size1} e skedarit tejkalon limitin e ngarkimit {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nuk ka hapësirë të mjaftueshme, ju po ngarkoni {size1} por vetëm {size2} është e lirë",
"Upload cancelled." : "Ngarkimi u anullua",
+ "Could not get result from server." : "Nuk mund të merret ndonjë rezultat nga serveri.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Skedari duke u ngarkuar. Largimi nga faqja do të anullojë ngarkimin",
"URL cannot be empty" : "URL-i nuk mund të jetë bosh",
"{new_name} already exists" : "{new_name} është ekzistues ",
+ "Could not create file" : "Skedari nuk mund të krijohet",
"Could not create folder" : "I pamundur krijimi i kartelës",
- "Share" : "Ndaj",
+ "Error fetching URL" : "Gabim në ngarkimin e URL",
+ "Rename" : "Riemëro",
"Delete" : "Fshi",
+ "Disconnect storage" : "Shkëput hapësirën e memorizimit",
"Unshare" : "Hiq ndarjen",
- "Delete permanently" : "Fshi përfundimisht",
- "Rename" : "Riemëro",
"Pending" : "Në vijim",
+ "Error moving file." : "Gabim në lëvizjen e skedarëve.",
"Error moving file" : "Gabim lëvizjen dokumentave",
"Error" : "Gabim",
+ "Could not rename file" : "Riemërtimi i skedarit nuk është i mundur",
+ "Error deleting file." : "Gabim gjatë fshirjes së skedarit.",
"Name" : "Emri",
"Size" : "Madhësia",
"Modified" : "Ndryshuar",
"_%n folder_::_%n folders_" : ["%n dosje","%n dosje"],
"_%n file_::_%n files_" : ["%n skedar","%n skedarë"],
+ "You don’t have permission to upload or create files here" : "Ju nuk keni të drejta për të ngarkuar apo krijuar skedarë këtu",
"_Uploading %n file_::_Uploading %n files_" : ["Po ngarkoj %n skedar","Po ngarkoj %n skedarë"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm.",
"Your storage is full, files can not be updated or synced anymore!" : "Hapsira juaj e arkivimit është plot, skedarët nuk mund të përditësohen ose sinkronizohen!",
"Your storage is almost full ({usedSpacePercent}%)" : "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i Shifrimit është i aktivizuar por çelësat tuaj nuk janë aktivizuar, ju lutem dilni dhe ri-hyni përseri në sistem",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} dhe {files}",
+ "%s could not be renamed as it has been deleted" : "%s nuk mund të riemërtohet sepse është fshirë",
"%s could not be renamed" : "Nuk është i mundur riemërtimi i %s",
+ "Upload (max. %s)" : "Ngarko (maks. %s)",
"File handling" : "Trajtimi i Skedarëve",
"Maximum upload size" : "Madhësia maksimale e nagarkimit",
"max. possible: " : "maks i mundshëm",
"Save" : "Ruaj",
+ "Settings" : "Konfigurime",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Përdorni këtë adresë për <a href=\"%s\" target=\"_blank\">qasje në skedarët tuaj me anë të WebDAV</a>",
"New" : "E re",
+ "New text file" : "Skedar i ri tekst",
"Text file" : "Skedar tekst",
"New folder" : "Dosje e're",
"Folder" : "Dosje",
"From link" : "Nga lidhja",
- "Nothing in here. Upload something!" : "Këtu nuk ka asgje. Ngarko dicka",
+ "Upload" : "Ngarko",
+ "Cancel upload" : "Anullo ngarkimin",
"Download" : "Shkarko",
"Upload too large" : "Ngarkimi shumë i madh",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skedarët që po mundoheni të ngarkoni e tejkalojnë madhësinë maksimale të lejuar nga serveri.",
- "Files are being scanned, please wait." : "Skanerizimi i skedarit në proces. Ju lutem prisni."
+ "Files are being scanned, please wait." : "Skanerizimi i skedarit në proces. Ju lutem prisni.",
+ "Currently scanning" : "Duke skanuar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index a758c833ff5..7c226734943 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -16,14 +16,13 @@ OC.L10N.register(
"Not enough storage available" : "Нема довољно простора",
"Invalid directory." : "неисправна фасцикла.",
"Files" : "Датотеке",
+ "Home" : "Кућа",
"Upload cancelled." : "Отпремање је прекинуто.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање.",
"{new_name} already exists" : "{new_name} већ постоји",
- "Share" : "Дели",
+ "Rename" : "Преименуј",
"Delete" : "Обриши",
"Unshare" : "Укини дељење",
- "Delete permanently" : "Обриши за стално",
- "Rename" : "Преименуј",
"Pending" : "На чекању",
"Error" : "Грешка",
"Name" : "Име",
@@ -34,16 +33,19 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["","",""],
"Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше складиште је скоро па пуно ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"File handling" : "Управљање датотекама",
"Maximum upload size" : "Највећа величина датотеке",
"max. possible: " : "највећа величина:",
"Save" : "Сачувај",
+ "Settings" : "Поставке",
"WebDAV" : "WebDAV",
"New" : "Нова",
"Text file" : "текстуална датотека",
"Folder" : "фасцикла",
"From link" : "Са везе",
- "Nothing in here. Upload something!" : "Овде нема ничег. Отпремите нешто!",
+ "Upload" : "Отпреми",
+ "Cancel upload" : "Прекини отпремање",
"Download" : "Преузми",
"Upload too large" : "Датотека је превелика",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеке које желите да отпремите прелазе ограничење у величини.",
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index a68c3f8ad8d..2452ac613dd 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -14,14 +14,13 @@
"Not enough storage available" : "Нема довољно простора",
"Invalid directory." : "неисправна фасцикла.",
"Files" : "Датотеке",
+ "Home" : "Кућа",
"Upload cancelled." : "Отпремање је прекинуто.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање.",
"{new_name} already exists" : "{new_name} већ постоји",
- "Share" : "Дели",
+ "Rename" : "Преименуј",
"Delete" : "Обриши",
"Unshare" : "Укини дељење",
- "Delete permanently" : "Обриши за стално",
- "Rename" : "Преименуј",
"Pending" : "На чекању",
"Error" : "Грешка",
"Name" : "Име",
@@ -32,16 +31,19 @@
"_Uploading %n file_::_Uploading %n files_" : ["","",""],
"Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше складиште је скоро па пуно ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"File handling" : "Управљање датотекама",
"Maximum upload size" : "Највећа величина датотеке",
"max. possible: " : "највећа величина:",
"Save" : "Сачувај",
+ "Settings" : "Поставке",
"WebDAV" : "WebDAV",
"New" : "Нова",
"Text file" : "текстуална датотека",
"Folder" : "фасцикла",
"From link" : "Са везе",
- "Nothing in here. Upload something!" : "Овде нема ничег. Отпремите нешто!",
+ "Upload" : "Отпреми",
+ "Cancel upload" : "Прекини отпремање",
"Download" : "Преузми",
"Upload too large" : "Датотека је превелика",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеке које желите да отпремите прелазе ограничење у величини.",
diff --git a/apps/files/l10n/sr@latin.js b/apps/files/l10n/sr@latin.js
index 2209b673abd..9552854edab 100644
--- a/apps/files/l10n/sr@latin.js
+++ b/apps/files/l10n/sr@latin.js
@@ -7,10 +7,10 @@ OC.L10N.register(
"No file was uploaded" : "Nijedan fajl nije poslat",
"Missing a temporary folder" : "Nedostaje privremena fascikla",
"Files" : "Fajlovi",
- "Share" : "Podeli",
+ "Home" : "Kuća",
+ "Rename" : "Preimenij",
"Delete" : "Obriši",
"Unshare" : "Ukljoni deljenje",
- "Rename" : "Preimenij",
"Error" : "Greška",
"Name" : "Ime",
"Size" : "Veličina",
@@ -18,10 +18,12 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["","",""],
"_%n file_::_%n files_" : ["","",""],
"_Uploading %n file_::_Uploading %n files_" : ["","",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"Maximum upload size" : "Maksimalna veličina pošiljke",
"Save" : "Snimi",
+ "Settings" : "Podešavanja",
"Folder" : "Direktorijum",
- "Nothing in here. Upload something!" : "Ovde nema ničeg. Pošaljite nešto!",
+ "Upload" : "Pošalji",
"Download" : "Preuzmi",
"Upload too large" : "Pošiljka je prevelika",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru."
diff --git a/apps/files/l10n/sr@latin.json b/apps/files/l10n/sr@latin.json
index f130138bc55..5f0914cbb12 100644
--- a/apps/files/l10n/sr@latin.json
+++ b/apps/files/l10n/sr@latin.json
@@ -5,10 +5,10 @@
"No file was uploaded" : "Nijedan fajl nije poslat",
"Missing a temporary folder" : "Nedostaje privremena fascikla",
"Files" : "Fajlovi",
- "Share" : "Podeli",
+ "Home" : "Kuća",
+ "Rename" : "Preimenij",
"Delete" : "Obriši",
"Unshare" : "Ukljoni deljenje",
- "Rename" : "Preimenij",
"Error" : "Greška",
"Name" : "Ime",
"Size" : "Veličina",
@@ -16,10 +16,12 @@
"_%n folder_::_%n folders_" : ["","",""],
"_%n file_::_%n files_" : ["","",""],
"_Uploading %n file_::_Uploading %n files_" : ["","",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"Maximum upload size" : "Maksimalna veličina pošiljke",
"Save" : "Snimi",
+ "Settings" : "Podešavanja",
"Folder" : "Direktorijum",
- "Nothing in here. Upload something!" : "Ovde nema ničeg. Pošaljite nešto!",
+ "Upload" : "Pošalji",
"Download" : "Preuzmi",
"Upload too large" : "Pošiljka je prevelika",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru."
diff --git a/apps/files/l10n/su.js b/apps/files/l10n/su.js
index d1bbfca2dd4..8c5bb3bc949 100644
--- a/apps/files/l10n/su.js
+++ b/apps/files/l10n/su.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/su.json b/apps/files/l10n/su.json
index e493054d78a..e03a2942ff2 100644
--- a/apps/files/l10n/su.json
+++ b/apps/files/l10n/su.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index 234731fec2b..f0981c9981b 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -1,9 +1,12 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "Lagring inte tillgänglig",
+ "Storage invalid" : "Lagring ogiltig",
"Unknown error" : "Okänt fel",
"Could not move %s - File with this name already exists" : "Kunde inte flytta %s - Det finns redan en fil med detta namn",
"Could not move %s" : "Kan inte flytta %s",
+ "Permission denied" : "Behörighet nekad.",
"File name cannot be empty." : "Filnamn kan inte vara tomt.",
"\"%s\" is an invalid file name." : "\"%s\" är ett ogiltigt filnamn.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
@@ -11,6 +14,7 @@ OC.L10N.register(
"The name %s is already used in the folder %s. Please choose a different name." : "Namnet %s används redan i katalogen %s. Välj ett annat namn.",
"Not a valid source" : "Inte en giltig källa",
"Server is not allowed to open URLs, please check the server configuration" : "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen",
+ "The file exceeds your quota by %s" : "Filen överstiger din tilldelade kvot med %s",
"Error while downloading %s to %s" : "Fel under nerladdning från %s till %s",
"Error when creating the file" : "Fel under skapande utav filen",
"Folder name cannot be empty." : "Katalognamn kan ej vara tomt.",
@@ -31,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Felaktig mapp.",
"Files" : "Filer",
"All files" : "Alla filer",
+ "Favorites" : "Favoriter",
+ "Home" : "Hem",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan inte ladda upp {filename} eftersom den antingen är en mapp eller har 0 bytes.",
"Total file size {size1} exceeds upload limit {size2}" : "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar.",
@@ -42,12 +48,13 @@ OC.L10N.register(
"Could not create file" : "Kunde ej skapa fil",
"Could not create folder" : "Kunde ej skapa katalog",
"Error fetching URL" : "Fel vid hämtning av URL",
- "Share" : "Dela",
+ "Rename" : "Byt namn",
"Delete" : "Radera",
+ "Disconnect storage" : "Koppla bort lagring",
"Unshare" : "Sluta dela",
- "Delete permanently" : "Radera permanent",
- "Rename" : "Byt namn",
+ "Select" : "Välj",
"Pending" : "Väntar",
+ "Unable to determine date" : "Misslyckades avgöra datum",
"Error moving file." : "Fel vid flytt av fil.",
"Error moving file" : "Fel uppstod vid flyttning av fil",
"Error" : "Fel",
@@ -66,13 +73,18 @@ OC.L10N.register(
"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",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} och {files}",
+ "Favorited" : "Favoritiserad",
+ "Favorite" : "Favorit",
+ "%s could not be renamed as it has been deleted" : "%s kan inte döpas om eftersom den har raderats",
"%s could not be renamed" : "%s kunde inte namnändras",
"Upload (max. %s)" : "Ladda upp (max. %s)",
"File handling" : "Filhantering",
"Maximum upload size" : "Maximal storlek att ladda upp",
"max. possible: " : "max. möjligt:",
"Save" : "Spara",
+ "Settings" : "Inställningar",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Använd denna adress till <a href=\"%s\" target=\"_blank\">nå dina Filer via WebDAV</a>",
"New" : "Ny",
@@ -81,11 +93,17 @@ OC.L10N.register(
"New folder" : "Ny mapp",
"Folder" : "Mapp",
"From link" : "Från länk",
- "Nothing in here. Upload something!" : "Ingenting här. Ladda upp något!",
+ "Upload" : "Ladda upp",
+ "Cancel upload" : "Avbryt uppladdning",
+ "No files yet" : "Inga filer ännu",
+ "Upload some content or sync with your devices!" : "Ladda upp innehåll eller synkronisera med dina enheter!",
+ "Select all" : "Välj allt",
"Download" : "Ladda ner",
"Upload too large" : "För stor uppladdning",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
"Files are being scanned, please wait." : "Filer skannas, var god vänta",
- "Currently scanning" : "sökning pågår"
+ "Currently scanning" : "sökning pågår",
+ "No favorites" : "Inga favoriter",
+ "Files and folders you mark as favorite will show up here" : "Filer och mappar du markerat som favoriter kommer visas här"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index 36aa5d5984f..72cf045a8d2 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -1,7 +1,10 @@
{ "translations": {
+ "Storage not available" : "Lagring inte tillgänglig",
+ "Storage invalid" : "Lagring ogiltig",
"Unknown error" : "Okänt fel",
"Could not move %s - File with this name already exists" : "Kunde inte flytta %s - Det finns redan en fil med detta namn",
"Could not move %s" : "Kan inte flytta %s",
+ "Permission denied" : "Behörighet nekad.",
"File name cannot be empty." : "Filnamn kan inte vara tomt.",
"\"%s\" is an invalid file name." : "\"%s\" är ett ogiltigt filnamn.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
@@ -9,6 +12,7 @@
"The name %s is already used in the folder %s. Please choose a different name." : "Namnet %s används redan i katalogen %s. Välj ett annat namn.",
"Not a valid source" : "Inte en giltig källa",
"Server is not allowed to open URLs, please check the server configuration" : "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen",
+ "The file exceeds your quota by %s" : "Filen överstiger din tilldelade kvot med %s",
"Error while downloading %s to %s" : "Fel under nerladdning från %s till %s",
"Error when creating the file" : "Fel under skapande utav filen",
"Folder name cannot be empty." : "Katalognamn kan ej vara tomt.",
@@ -29,6 +33,8 @@
"Invalid directory." : "Felaktig mapp.",
"Files" : "Filer",
"All files" : "Alla filer",
+ "Favorites" : "Favoriter",
+ "Home" : "Hem",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan inte ladda upp {filename} eftersom den antingen är en mapp eller har 0 bytes.",
"Total file size {size1} exceeds upload limit {size2}" : "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar.",
@@ -40,12 +46,13 @@
"Could not create file" : "Kunde ej skapa fil",
"Could not create folder" : "Kunde ej skapa katalog",
"Error fetching URL" : "Fel vid hämtning av URL",
- "Share" : "Dela",
+ "Rename" : "Byt namn",
"Delete" : "Radera",
+ "Disconnect storage" : "Koppla bort lagring",
"Unshare" : "Sluta dela",
- "Delete permanently" : "Radera permanent",
- "Rename" : "Byt namn",
+ "Select" : "Välj",
"Pending" : "Väntar",
+ "Unable to determine date" : "Misslyckades avgöra datum",
"Error moving file." : "Fel vid flytt av fil.",
"Error moving file" : "Fel uppstod vid flyttning av fil",
"Error" : "Fel",
@@ -64,13 +71,18 @@
"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",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} och {files}",
+ "Favorited" : "Favoritiserad",
+ "Favorite" : "Favorit",
+ "%s could not be renamed as it has been deleted" : "%s kan inte döpas om eftersom den har raderats",
"%s could not be renamed" : "%s kunde inte namnändras",
"Upload (max. %s)" : "Ladda upp (max. %s)",
"File handling" : "Filhantering",
"Maximum upload size" : "Maximal storlek att ladda upp",
"max. possible: " : "max. möjligt:",
"Save" : "Spara",
+ "Settings" : "Inställningar",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Använd denna adress till <a href=\"%s\" target=\"_blank\">nå dina Filer via WebDAV</a>",
"New" : "Ny",
@@ -79,11 +91,17 @@
"New folder" : "Ny mapp",
"Folder" : "Mapp",
"From link" : "Från länk",
- "Nothing in here. Upload something!" : "Ingenting här. Ladda upp något!",
+ "Upload" : "Ladda upp",
+ "Cancel upload" : "Avbryt uppladdning",
+ "No files yet" : "Inga filer ännu",
+ "Upload some content or sync with your devices!" : "Ladda upp innehåll eller synkronisera med dina enheter!",
+ "Select all" : "Välj allt",
"Download" : "Ladda ner",
"Upload too large" : "För stor uppladdning",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
"Files are being scanned, please wait." : "Filer skannas, var god vänta",
- "Currently scanning" : "sökning pågår"
+ "Currently scanning" : "sökning pågår",
+ "No favorites" : "Inga favoriter",
+ "Files and folders you mark as favorite will show up here" : "Filer och mappar du markerat som favoriter kommer visas här"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sw_KE.js b/apps/files/l10n/sw_KE.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/sw_KE.js
+++ b/apps/files/l10n/sw_KE.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sw_KE.json b/apps/files/l10n/sw_KE.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/sw_KE.json
+++ b/apps/files/l10n/sw_KE.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ta_IN.js b/apps/files/l10n/ta_IN.js
index b7aaa25ee52..143c52d6e32 100644
--- a/apps/files/l10n/ta_IN.js
+++ b/apps/files/l10n/ta_IN.js
@@ -5,6 +5,9 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
- "New folder" : "புதிய கோப்புறை"
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "அமைப்புகள்",
+ "New folder" : "புதிய கோப்புறை",
+ "Upload" : "பதிவேற்று"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ta_IN.json b/apps/files/l10n/ta_IN.json
index 955320c6c94..ec2ffb63ab3 100644
--- a/apps/files/l10n/ta_IN.json
+++ b/apps/files/l10n/ta_IN.json
@@ -3,6 +3,9 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
- "New folder" : "புதிய கோப்புறை"
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Settings" : "அமைப்புகள்",
+ "New folder" : "புதிய கோப்புறை",
+ "Upload" : "பதிவேற்று"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ta_LK.js b/apps/files/l10n/ta_LK.js
index 2014dd6ceb9..a73716e10ee 100644
--- a/apps/files/l10n/ta_LK.js
+++ b/apps/files/l10n/ta_LK.js
@@ -10,13 +10,15 @@ OC.L10N.register(
"Missing a temporary folder" : "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை",
"Failed to write to disk" : "வட்டில் எழுத முடியவில்லை",
"Files" : "கோப்புகள்",
+ "Favorites" : "விருப்பங்கள்",
+ "Home" : "அகம்",
"Upload cancelled." : "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது",
"File upload is in progress. Leaving the page now will cancel the upload." : "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.",
"{new_name} already exists" : "{new_name} ஏற்கனவே உள்ளது",
- "Share" : "பகிர்வு",
+ "Rename" : "பெயர்மாற்றம்",
"Delete" : "நீக்குக",
"Unshare" : "பகிரப்படாதது",
- "Rename" : "பெயர்மாற்றம்",
+ "Select" : "தெரிக",
"Pending" : "நிலுவையிலுள்ள",
"Error" : "வழு",
"Name" : "பெயர்",
@@ -25,15 +27,19 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Favorite" : "விருப்பமான",
"File handling" : "கோப்பு கையாளுதல்",
"Maximum upload size" : "பதிவேற்றக்கூடிய ஆகக்கூடிய அளவு ",
"max. possible: " : "ஆகக் கூடியது:",
"Save" : "சேமிக்க ",
+ "Settings" : "அமைப்புகள்",
"New" : "புதிய",
"Text file" : "கோப்பு உரை",
"Folder" : "கோப்புறை",
"From link" : "இணைப்பிலிருந்து",
- "Nothing in here. Upload something!" : "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!",
+ "Upload" : "பதிவேற்றுக",
+ "Cancel upload" : "பதிவேற்றலை இரத்து செய்க",
"Download" : "பதிவிறக்குக",
"Upload too large" : "பதிவேற்றல் மிகப்பெரியது",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்புகளானது இந்த சேவையகத்தில் கோப்பு பதிவேற்றக்கூடிய ஆகக்கூடிய அளவிலும் கூடியது.",
diff --git a/apps/files/l10n/ta_LK.json b/apps/files/l10n/ta_LK.json
index c8426f9eb32..6b916f959f9 100644
--- a/apps/files/l10n/ta_LK.json
+++ b/apps/files/l10n/ta_LK.json
@@ -8,13 +8,15 @@
"Missing a temporary folder" : "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை",
"Failed to write to disk" : "வட்டில் எழுத முடியவில்லை",
"Files" : "கோப்புகள்",
+ "Favorites" : "விருப்பங்கள்",
+ "Home" : "அகம்",
"Upload cancelled." : "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது",
"File upload is in progress. Leaving the page now will cancel the upload." : "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.",
"{new_name} already exists" : "{new_name} ஏற்கனவே உள்ளது",
- "Share" : "பகிர்வு",
+ "Rename" : "பெயர்மாற்றம்",
"Delete" : "நீக்குக",
"Unshare" : "பகிரப்படாதது",
- "Rename" : "பெயர்மாற்றம்",
+ "Select" : "தெரிக",
"Pending" : "நிலுவையிலுள்ள",
"Error" : "வழு",
"Name" : "பெயர்",
@@ -23,15 +25,19 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
+ "Favorite" : "விருப்பமான",
"File handling" : "கோப்பு கையாளுதல்",
"Maximum upload size" : "பதிவேற்றக்கூடிய ஆகக்கூடிய அளவு ",
"max. possible: " : "ஆகக் கூடியது:",
"Save" : "சேமிக்க ",
+ "Settings" : "அமைப்புகள்",
"New" : "புதிய",
"Text file" : "கோப்பு உரை",
"Folder" : "கோப்புறை",
"From link" : "இணைப்பிலிருந்து",
- "Nothing in here. Upload something!" : "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!",
+ "Upload" : "பதிவேற்றுக",
+ "Cancel upload" : "பதிவேற்றலை இரத்து செய்க",
"Download" : "பதிவிறக்குக",
"Upload too large" : "பதிவேற்றல் மிகப்பெரியது",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்புகளானது இந்த சேவையகத்தில் கோப்பு பதிவேற்றக்கூடிய ஆகக்கூடிய அளவிலும் கூடியது.",
diff --git a/apps/files/l10n/te.js b/apps/files/l10n/te.js
index 2d0a3ed3d9a..9dfaccd9380 100644
--- a/apps/files/l10n/te.js
+++ b/apps/files/l10n/te.js
@@ -2,14 +2,15 @@ OC.L10N.register(
"files",
{
"Delete" : "తొలగించు",
- "Delete permanently" : "శాశ్వతంగా తొలగించు",
"Error" : "పొరపాటు",
"Name" : "పేరు",
"Size" : "పరిమాణం",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "భద్రపరచు",
+ "Settings" : "అమరికలు",
"New folder" : "కొత్త సంచయం",
"Folder" : "సంచయం"
},
diff --git a/apps/files/l10n/te.json b/apps/files/l10n/te.json
index efa952f212a..63b79d97a11 100644
--- a/apps/files/l10n/te.json
+++ b/apps/files/l10n/te.json
@@ -1,13 +1,14 @@
{ "translations": {
"Delete" : "తొలగించు",
- "Delete permanently" : "శాశ్వతంగా తొలగించు",
"Error" : "పొరపాటు",
"Name" : "పేరు",
"Size" : "పరిమాణం",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "భద్రపరచు",
+ "Settings" : "అమరికలు",
"New folder" : "కొత్త సంచయం",
"Folder" : "సంచయం"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files/l10n/tg_TJ.js b/apps/files/l10n/tg_TJ.js
index 329844854f1..560042b3efd 100644
--- a/apps/files/l10n/tg_TJ.js
+++ b/apps/files/l10n/tg_TJ.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/tg_TJ.json b/apps/files/l10n/tg_TJ.json
index 37156658a86..4cfa6a31b6e 100644
--- a/apps/files/l10n/tg_TJ.json
+++ b/apps/files/l10n/tg_TJ.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/th_TH.js b/apps/files/l10n/th_TH.js
index 039d4562a7a..81915a809bf 100644
--- a/apps/files/l10n/th_TH.js
+++ b/apps/files/l10n/th_TH.js
@@ -17,13 +17,15 @@ OC.L10N.register(
"Not enough storage available" : "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
"Invalid directory." : "ไดเร็กทอรี่ไม่ถูกต้อง",
"Files" : "ไฟล์",
+ "Favorites" : "รายการโปรด",
+ "Home" : "บ้าน",
"Upload cancelled." : "การอัพโหลดถูกยกเลิก",
"File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
"{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ",
- "Share" : "แชร์",
+ "Rename" : "เปลี่ยนชื่อ",
"Delete" : "ลบ",
"Unshare" : "ยกเลิกการแชร์",
- "Rename" : "เปลี่ยนชื่อ",
+ "Select" : "เลือก",
"Pending" : "อยู่ระหว่างดำเนินการ",
"Error" : "ข้อผิดพลาด",
"Name" : "ชื่อ",
@@ -34,17 +36,21 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : [""],
"Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป",
"Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorite" : "รายการโปรด",
"File handling" : "การจัดกาไฟล์",
"Maximum upload size" : "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
"max. possible: " : "จำนวนสูงสุดที่สามารถทำได้: ",
"Save" : "บันทึก",
+ "Settings" : "ตั้งค่า",
"WebDAV" : "WebDAV",
"New" : "อัพโหลดไฟล์ใหม่",
"Text file" : "ไฟล์ข้อความ",
"New folder" : "โฟลเดอร์ใหม่",
"Folder" : "แฟ้มเอกสาร",
"From link" : "จากลิงก์",
- "Nothing in here. Upload something!" : "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!",
+ "Upload" : "อัพโหลด",
+ "Cancel upload" : "ยกเลิกการอัพโหลด",
"Download" : "ดาวน์โหลด",
"Upload too large" : "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
diff --git a/apps/files/l10n/th_TH.json b/apps/files/l10n/th_TH.json
index bd4afed4aec..41c14cbd68a 100644
--- a/apps/files/l10n/th_TH.json
+++ b/apps/files/l10n/th_TH.json
@@ -15,13 +15,15 @@
"Not enough storage available" : "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
"Invalid directory." : "ไดเร็กทอรี่ไม่ถูกต้อง",
"Files" : "ไฟล์",
+ "Favorites" : "รายการโปรด",
+ "Home" : "บ้าน",
"Upload cancelled." : "การอัพโหลดถูกยกเลิก",
"File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
"{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ",
- "Share" : "แชร์",
+ "Rename" : "เปลี่ยนชื่อ",
"Delete" : "ลบ",
"Unshare" : "ยกเลิกการแชร์",
- "Rename" : "เปลี่ยนชื่อ",
+ "Select" : "เลือก",
"Pending" : "อยู่ระหว่างดำเนินการ",
"Error" : "ข้อผิดพลาด",
"Name" : "ชื่อ",
@@ -32,17 +34,21 @@
"_Uploading %n file_::_Uploading %n files_" : [""],
"Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป",
"Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorite" : "รายการโปรด",
"File handling" : "การจัดกาไฟล์",
"Maximum upload size" : "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
"max. possible: " : "จำนวนสูงสุดที่สามารถทำได้: ",
"Save" : "บันทึก",
+ "Settings" : "ตั้งค่า",
"WebDAV" : "WebDAV",
"New" : "อัพโหลดไฟล์ใหม่",
"Text file" : "ไฟล์ข้อความ",
"New folder" : "โฟลเดอร์ใหม่",
"Folder" : "แฟ้มเอกสาร",
"From link" : "จากลิงก์",
- "Nothing in here. Upload something!" : "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!",
+ "Upload" : "อัพโหลด",
+ "Cancel upload" : "ยกเลิกการอัพโหลด",
"Download" : "ดาวน์โหลด",
"Upload too large" : "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
diff --git a/apps/files/l10n/tl_PH.js b/apps/files/l10n/tl_PH.js
index f085469f731..deae17398bd 100644
--- a/apps/files/l10n/tl_PH.js
+++ b/apps/files/l10n/tl_PH.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/tl_PH.json b/apps/files/l10n/tl_PH.json
index ba9792477cd..dd9cfe83135 100644
--- a/apps/files/l10n/tl_PH.json
+++ b/apps/files/l10n/tl_PH.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index 81eaf632112..ff2ae40361d 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Geçersiz dizin.",
"Files" : "Dosyalar",
"All files" : "Tüm dosyalar",
+ "Favorites" : "Sık Kullanılanlar",
+ "Home" : "Ev",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename} bir dizin veya 0 bayt olduğundan yüklenemedi",
"Total file size {size1} exceeds upload limit {size2}" : "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Yeterince boş alan yok. Gönderdiğiniz boyut {size1} ancak {size2} alan mevcut",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Dosya oluşturulamadı",
"Could not create folder" : "Klasör oluşturulamadı",
"Error fetching URL" : "Adres getirilirken hata",
- "Share" : "Paylaş",
+ "Rename" : "Yeniden adlandır",
"Delete" : "Sil",
"Disconnect storage" : "Depolama bağlantısını kes",
"Unshare" : "Paylaşmayı Kaldır",
- "Delete permanently" : "Kalıcı olarak sil",
- "Rename" : "Yeniden adlandır",
+ "Select" : "Seç",
"Pending" : "Bekliyor",
"Error moving file." : "Dosya taşıma hatası.",
"Error moving file" : "Dosya taşıma hatası",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifreleme işlemi durduruldu ancak dosyalarınız hala şifreli. Dosyalarınızın şifrelemesini kaldırmak için lütfen kişisel ayarlar kısmına geçin.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} ve {files}",
+ "Favorite" : "Sık Kullanılan",
"%s could not be renamed as it has been deleted" : "%s, silindiği için adlandırılamadı",
"%s could not be renamed" : "%s yeniden adlandırılamadı",
"Upload (max. %s)" : "Yükle (azami: %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Azami yükleme boyutu",
"max. possible: " : "mümkün olan en fazla: ",
"Save" : "Kaydet",
+ "Settings" : "Ayarlar",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın",
"New" : "Yeni",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "Yeni klasör",
"Folder" : "Klasör",
"From link" : "Bağlantıdan",
- "Nothing in here. Upload something!" : "Burada hiçbir şey yok. Bir şeyler yükleyin!",
+ "Upload" : "Yükle",
+ "Cancel upload" : "Yüklemeyi iptal et",
"Download" : "İndir",
"Upload too large" : "Yükleme çok büyük",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yüklemeye çalıştığınız dosyalar bu sunucudaki azami yükleme boyutunu aşıyor.",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index 41ba10c4e7f..f70df4df7d1 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Geçersiz dizin.",
"Files" : "Dosyalar",
"All files" : "Tüm dosyalar",
+ "Favorites" : "Sık Kullanılanlar",
+ "Home" : "Ev",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename} bir dizin veya 0 bayt olduğundan yüklenemedi",
"Total file size {size1} exceeds upload limit {size2}" : "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Yeterince boş alan yok. Gönderdiğiniz boyut {size1} ancak {size2} alan mevcut",
@@ -44,12 +46,11 @@
"Could not create file" : "Dosya oluşturulamadı",
"Could not create folder" : "Klasör oluşturulamadı",
"Error fetching URL" : "Adres getirilirken hata",
- "Share" : "Paylaş",
+ "Rename" : "Yeniden adlandır",
"Delete" : "Sil",
"Disconnect storage" : "Depolama bağlantısını kes",
"Unshare" : "Paylaşmayı Kaldır",
- "Delete permanently" : "Kalıcı olarak sil",
- "Rename" : "Yeniden adlandır",
+ "Select" : "Seç",
"Pending" : "Bekliyor",
"Error moving file." : "Dosya taşıma hatası.",
"Error moving file" : "Dosya taşıma hatası",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifreleme işlemi durduruldu ancak dosyalarınız hala şifreli. Dosyalarınızın şifrelemesini kaldırmak için lütfen kişisel ayarlar kısmına geçin.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"{dirs} and {files}" : "{dirs} ve {files}",
+ "Favorite" : "Sık Kullanılan",
"%s could not be renamed as it has been deleted" : "%s, silindiği için adlandırılamadı",
"%s could not be renamed" : "%s yeniden adlandırılamadı",
"Upload (max. %s)" : "Yükle (azami: %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Azami yükleme boyutu",
"max. possible: " : "mümkün olan en fazla: ",
"Save" : "Kaydet",
+ "Settings" : "Ayarlar",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın",
"New" : "Yeni",
@@ -85,7 +89,8 @@
"New folder" : "Yeni klasör",
"Folder" : "Klasör",
"From link" : "Bağlantıdan",
- "Nothing in here. Upload something!" : "Burada hiçbir şey yok. Bir şeyler yükleyin!",
+ "Upload" : "Yükle",
+ "Cancel upload" : "Yüklemeyi iptal et",
"Download" : "İndir",
"Upload too large" : "Yükleme çok büyük",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yüklemeye çalıştığınız dosyalar bu sunucudaki azami yükleme boyutunu aşıyor.",
diff --git a/apps/files/l10n/tzm.js b/apps/files/l10n/tzm.js
index 2a7c7f44429..0d2e146cc3e 100644
--- a/apps/files/l10n/tzm.js
+++ b/apps/files/l10n/tzm.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},
"nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;");
diff --git a/apps/files/l10n/tzm.json b/apps/files/l10n/tzm.json
index 63a463dce66..8ba33b04668 100644
--- a/apps/files/l10n/tzm.json
+++ b/apps/files/l10n/tzm.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""]
+ "_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;"
} \ No newline at end of file
diff --git a/apps/files/l10n/ug.js b/apps/files/l10n/ug.js
index cfa6db88c4a..ac8e16e289e 100644
--- a/apps/files/l10n/ug.js
+++ b/apps/files/l10n/ug.js
@@ -9,14 +9,14 @@ OC.L10N.register(
"Failed to write to disk" : "دىسكىغا يازالمىدى",
"Not enough storage available" : "يېتەرلىك ساقلاش بوشلۇقى يوق",
"Files" : "ھۆججەتلەر",
+ "Favorites" : "يىغقۇچ",
+ "Home" : "ئۆي",
"Upload cancelled." : "يۈكلەشتىن ۋاز كەچتى.",
"File upload is in progress. Leaving the page now will cancel the upload." : "ھۆججەت يۈكلەش مەشغۇلاتى ئېلىپ بېرىلىۋاتىدۇ. Leaving the page now will cancel the upload.",
"{new_name} already exists" : "{new_name} مەۋجۇت",
- "Share" : "ھەمبەھىر",
+ "Rename" : "ئات ئۆزگەرت",
"Delete" : "ئۆچۈر",
"Unshare" : "ھەمبەھىرلىمە",
- "Delete permanently" : "مەڭگۈلۈك ئۆچۈر",
- "Rename" : "ئات ئۆزگەرت",
"Pending" : "كۈتۈۋاتىدۇ",
"Error" : "خاتالىق",
"Name" : "ئاتى",
@@ -25,13 +25,17 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorite" : "يىغقۇچ",
"Save" : "ساقلا",
+ "Settings" : "تەڭشەكلەر",
"WebDAV" : "WebDAV",
"New" : "يېڭى",
"Text file" : "تېكىست ھۆججەت",
"New folder" : "يېڭى قىسقۇچ",
"Folder" : "قىسقۇچ",
- "Nothing in here. Upload something!" : "بۇ جايدا ھېچنېمە يوق. Upload something!",
+ "Upload" : "يۈكلە",
+ "Cancel upload" : "يۈكلەشتىن ۋاز كەچ",
"Download" : "چۈشۈر",
"Upload too large" : "يۈكلەندىغىنى بەك چوڭ"
},
diff --git a/apps/files/l10n/ug.json b/apps/files/l10n/ug.json
index 19c010492e7..b9291642443 100644
--- a/apps/files/l10n/ug.json
+++ b/apps/files/l10n/ug.json
@@ -7,14 +7,14 @@
"Failed to write to disk" : "دىسكىغا يازالمىدى",
"Not enough storage available" : "يېتەرلىك ساقلاش بوشلۇقى يوق",
"Files" : "ھۆججەتلەر",
+ "Favorites" : "يىغقۇچ",
+ "Home" : "ئۆي",
"Upload cancelled." : "يۈكلەشتىن ۋاز كەچتى.",
"File upload is in progress. Leaving the page now will cancel the upload." : "ھۆججەت يۈكلەش مەشغۇلاتى ئېلىپ بېرىلىۋاتىدۇ. Leaving the page now will cancel the upload.",
"{new_name} already exists" : "{new_name} مەۋجۇت",
- "Share" : "ھەمبەھىر",
+ "Rename" : "ئات ئۆزگەرت",
"Delete" : "ئۆچۈر",
"Unshare" : "ھەمبەھىرلىمە",
- "Delete permanently" : "مەڭگۈلۈك ئۆچۈر",
- "Rename" : "ئات ئۆزگەرت",
"Pending" : "كۈتۈۋاتىدۇ",
"Error" : "خاتالىق",
"Name" : "ئاتى",
@@ -23,13 +23,17 @@
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
+ "Favorite" : "يىغقۇچ",
"Save" : "ساقلا",
+ "Settings" : "تەڭشەكلەر",
"WebDAV" : "WebDAV",
"New" : "يېڭى",
"Text file" : "تېكىست ھۆججەت",
"New folder" : "يېڭى قىسقۇچ",
"Folder" : "قىسقۇچ",
- "Nothing in here. Upload something!" : "بۇ جايدا ھېچنېمە يوق. Upload something!",
+ "Upload" : "يۈكلە",
+ "Cancel upload" : "يۈكلەشتىن ۋاز كەچ",
"Download" : "چۈشۈر",
"Upload too large" : "يۈكلەندىغىنى بەك چوڭ"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js
index b2bbbcbfc4c..84999c087e6 100644
--- a/apps/files/l10n/uk.js
+++ b/apps/files/l10n/uk.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "Невірний каталог.",
"Files" : "Файли",
"All files" : "Усі файли",
+ "Favorites" : "Улюблені",
+ "Home" : "Домашня адреса",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо завантажити {filename}, оскільки це каталог або має нульовий розмір.",
"Total file size {size1} exceeds upload limit {size2}" : "Розмір файлу {size1} перевищує обмеження {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви завантажуєте {size1}, а залишилося лише {size2}",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "Не вдалося створити файл",
"Could not create folder" : "Не вдалося створити теку",
"Error fetching URL" : "Помилка отримання URL",
- "Share" : "Поділитися",
+ "Rename" : "Перейменувати",
"Delete" : "Видалити",
"Disconnect storage" : "Від’єднати сховище",
"Unshare" : "Закрити доступ",
- "Delete permanently" : "Видалити назавжди",
- "Rename" : "Перейменувати",
+ "Select" : "Оберіть",
"Pending" : "Очікування",
"Error moving file." : "Помилка переміщення файлу.",
"Error moving file" : "Помилка переміщення файлу",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрування було вимкнено, але ваші файли все ще зашифровано. Для розшифрування перейдіть до персональних налаштувань.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} і {files}",
+ "Favorite" : "Улюблений",
"%s could not be renamed as it has been deleted" : "%s не може бути перейменований, оскільки він видалений",
"%s could not be renamed" : "%s не може бути перейменований",
"Upload (max. %s)" : "Завантаження (макс. %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "Максимальний розмір відвантажень",
"max. possible: " : "макс. можливе:",
"Save" : "Зберегти",
+ "Settings" : "Налаштування",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Для доступу до файлів через WebDAV використовуйте <a href=\"%s\" target=\"_blank\">це посилання</a>",
"New" : "Створити",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "Нова тека",
"Folder" : "Тека",
"From link" : "З посилання",
- "Nothing in here. Upload something!" : "Тут нічого немає. Відвантажте що-небудь!",
+ "Upload" : "Вивантажити",
+ "Cancel upload" : "Перервати завантаження",
"Download" : "Завантажити",
"Upload too large" : "Файл занадто великий",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json
index 6c8a5be4f5c..1c5aaae5f1e 100644
--- a/apps/files/l10n/uk.json
+++ b/apps/files/l10n/uk.json
@@ -33,6 +33,8 @@
"Invalid directory." : "Невірний каталог.",
"Files" : "Файли",
"All files" : "Усі файли",
+ "Favorites" : "Улюблені",
+ "Home" : "Домашня адреса",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо завантажити {filename}, оскільки це каталог або має нульовий розмір.",
"Total file size {size1} exceeds upload limit {size2}" : "Розмір файлу {size1} перевищує обмеження {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви завантажуєте {size1}, а залишилося лише {size2}",
@@ -44,12 +46,11 @@
"Could not create file" : "Не вдалося створити файл",
"Could not create folder" : "Не вдалося створити теку",
"Error fetching URL" : "Помилка отримання URL",
- "Share" : "Поділитися",
+ "Rename" : "Перейменувати",
"Delete" : "Видалити",
"Disconnect storage" : "Від’єднати сховище",
"Unshare" : "Закрити доступ",
- "Delete permanently" : "Видалити назавжди",
- "Rename" : "Перейменувати",
+ "Select" : "Оберіть",
"Pending" : "Очікування",
"Error moving file." : "Помилка переміщення файлу.",
"Error moving file" : "Помилка переміщення файлу",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрування було вимкнено, але ваші файли все ще зашифровано. Для розшифрування перейдіть до персональних налаштувань.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} і {files}",
+ "Favorite" : "Улюблений",
"%s could not be renamed as it has been deleted" : "%s не може бути перейменований, оскільки він видалений",
"%s could not be renamed" : "%s не може бути перейменований",
"Upload (max. %s)" : "Завантаження (макс. %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "Максимальний розмір відвантажень",
"max. possible: " : "макс. можливе:",
"Save" : "Зберегти",
+ "Settings" : "Налаштування",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Для доступу до файлів через WebDAV використовуйте <a href=\"%s\" target=\"_blank\">це посилання</a>",
"New" : "Створити",
@@ -85,7 +89,8 @@
"New folder" : "Нова тека",
"Folder" : "Тека",
"From link" : "З посилання",
- "Nothing in here. Upload something!" : "Тут нічого немає. Відвантажте що-небудь!",
+ "Upload" : "Вивантажити",
+ "Cancel upload" : "Перервати завантаження",
"Download" : "Завантажити",
"Upload too large" : "Файл занадто великий",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
diff --git a/apps/files/l10n/ur_PK.js b/apps/files/l10n/ur_PK.js
index c0be28aa0d4..84208c63ca0 100644
--- a/apps/files/l10n/ur_PK.js
+++ b/apps/files/l10n/ur_PK.js
@@ -2,7 +2,6 @@ OC.L10N.register(
"files",
{
"Unknown error" : "غیر معروف خرابی",
- "Share" : "تقسیم",
"Delete" : "حذف کریں",
"Unshare" : "شئیرنگ ختم کریں",
"Error" : "ایرر",
@@ -10,7 +9,9 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "حفظ",
+ "Settings" : "ترتیبات",
"Download" : "ڈاؤن لوڈ،"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ur_PK.json b/apps/files/l10n/ur_PK.json
index 1ceef01a442..c48800e9d1a 100644
--- a/apps/files/l10n/ur_PK.json
+++ b/apps/files/l10n/ur_PK.json
@@ -1,6 +1,5 @@
{ "translations": {
"Unknown error" : "غیر معروف خرابی",
- "Share" : "تقسیم",
"Delete" : "حذف کریں",
"Unshare" : "شئیرنگ ختم کریں",
"Error" : "ایرر",
@@ -8,7 +7,9 @@
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : ["",""],
"Save" : "حفظ",
+ "Settings" : "ترتیبات",
"Download" : "ڈاؤن لوڈ،"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/uz.js b/apps/files/l10n/uz.js
index d1bbfca2dd4..8c5bb3bc949 100644
--- a/apps/files/l10n/uz.js
+++ b/apps/files/l10n/uz.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/uz.json b/apps/files/l10n/uz.json
index e493054d78a..e03a2942ff2 100644
--- a/apps/files/l10n/uz.json
+++ b/apps/files/l10n/uz.json
@@ -1,6 +1,7 @@
{ "translations": {
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
- "_Uploading %n file_::_Uploading %n files_" : [""]
+ "_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""]
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index 744f37082fe..6eea7a5b6a8 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -28,6 +28,8 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "Tải lên thất bại. Không thể có được thông tin tập tin.",
"Invalid directory." : "Thư mục không hợp lệ",
"Files" : "Tập tin",
+ "Favorites" : "Ưa thích",
+ "Home" : "Nhà",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "không thể tải {filename} lên do nó là một thư mục hoặc có kích thước bằng 0 byte",
"Upload cancelled." : "Hủy tải lên",
"Could not get result from server." : "Không thể nhận được kết quả từ máy chủ.",
@@ -36,11 +38,10 @@ OC.L10N.register(
"{new_name} already exists" : "{new_name} đã tồn tại",
"Could not create file" : "Không thể tạo file",
"Could not create folder" : "Không thể tạo thư mục",
- "Share" : "Chia sẻ",
+ "Rename" : "Sửa tên",
"Delete" : "Xóa",
"Unshare" : "Bỏ chia sẻ",
- "Delete permanently" : "Xóa vĩnh vễn",
- "Rename" : "Sửa tên",
+ "Select" : "Chọn",
"Pending" : "Đang chờ",
"Error moving file" : "Lỗi di chuyển tập tin",
"Error" : "Lỗi",
@@ -57,12 +58,15 @@ OC.L10N.register(
"Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} và {files}",
+ "Favorite" : "Ưu thích",
"%s could not be renamed" : "%s không thể đổi tên",
"File handling" : "Xử lý tập tin",
"Maximum upload size" : "Kích thước tối đa ",
"max. possible: " : "tối đa cho phép:",
"Save" : "Lưu",
+ "Settings" : "Cài đặt",
"WebDAV" : "WebDAV",
"New" : "Tạo mới",
"New text file" : "File text mới",
@@ -70,7 +74,8 @@ OC.L10N.register(
"New folder" : "Tạo thư mục",
"Folder" : "Thư mục",
"From link" : "Từ liên kết",
- "Nothing in here. Upload something!" : "Không có gì ở đây .Hãy tải lên một cái gì đó !",
+ "Upload" : "Tải lên",
+ "Cancel upload" : "Hủy upload",
"Download" : "Tải về",
"Upload too large" : "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index 32e953b68e1..437b6570bda 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -26,6 +26,8 @@
"Upload failed. Could not get file info." : "Tải lên thất bại. Không thể có được thông tin tập tin.",
"Invalid directory." : "Thư mục không hợp lệ",
"Files" : "Tập tin",
+ "Favorites" : "Ưa thích",
+ "Home" : "Nhà",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "không thể tải {filename} lên do nó là một thư mục hoặc có kích thước bằng 0 byte",
"Upload cancelled." : "Hủy tải lên",
"Could not get result from server." : "Không thể nhận được kết quả từ máy chủ.",
@@ -34,11 +36,10 @@
"{new_name} already exists" : "{new_name} đã tồn tại",
"Could not create file" : "Không thể tạo file",
"Could not create folder" : "Không thể tạo thư mục",
- "Share" : "Chia sẻ",
+ "Rename" : "Sửa tên",
"Delete" : "Xóa",
"Unshare" : "Bỏ chia sẻ",
- "Delete permanently" : "Xóa vĩnh vễn",
- "Rename" : "Sửa tên",
+ "Select" : "Chọn",
"Pending" : "Đang chờ",
"Error moving file" : "Lỗi di chuyển tập tin",
"Error" : "Lỗi",
@@ -55,12 +56,15 @@
"Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} và {files}",
+ "Favorite" : "Ưu thích",
"%s could not be renamed" : "%s không thể đổi tên",
"File handling" : "Xử lý tập tin",
"Maximum upload size" : "Kích thước tối đa ",
"max. possible: " : "tối đa cho phép:",
"Save" : "Lưu",
+ "Settings" : "Cài đặt",
"WebDAV" : "WebDAV",
"New" : "Tạo mới",
"New text file" : "File text mới",
@@ -68,7 +72,8 @@
"New folder" : "Tạo thư mục",
"Folder" : "Thư mục",
"From link" : "Từ liên kết",
- "Nothing in here. Upload something!" : "Không có gì ở đây .Hãy tải lên một cái gì đó !",
+ "Upload" : "Tải lên",
+ "Cancel upload" : "Hủy upload",
"Download" : "Tải về",
"Upload too large" : "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 502c673764e..5cdc7a3966d 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Unknown error" : "未知错误",
"Could not move %s - File with this name already exists" : "无法移动 %s - 同名文件已存在",
"Could not move %s" : "无法移动 %s",
+ "Permission denied" : "拒绝访问",
"File name cannot be empty." : "文件名不能为空。",
"\"%s\" is an invalid file name." : "“%s” 是一个无效的文件名。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。",
@@ -13,8 +14,9 @@ OC.L10N.register(
"The name %s is already used in the folder %s. Please choose a different name." : "文件名 %s 是已经在 %s 中存在的名称。请使用其他名称。",
"Not a valid source" : "不是一个可用的源",
"Server is not allowed to open URLs, please check the server configuration" : "服务器没有允许打开URL网址,请检查服务器配置",
+ "The file exceeds your quota by %s" : "文件超过配额 %s",
"Error while downloading %s to %s" : "当下载 %s 到 %s 时出错",
- "Error when creating the file" : "当创建文件是出错",
+ "Error when creating the file" : "创建文件时出错",
"Folder name cannot be empty." : "文件夹名称不能为空",
"Error when creating the folder" : "创建文件夹出错",
"Unable to set upload directory." : "无法设置上传文件夹。",
@@ -28,11 +30,13 @@ OC.L10N.register(
"Missing a temporary folder" : "缺少临时目录",
"Failed to write to disk" : "写入磁盘失败",
"Not enough storage available" : "没有足够的存储空间",
- "Upload failed. Could not find uploaded file" : "上传失败。不能发现上传的文件",
- "Upload failed. Could not get file info." : "上传失败。不能获取文件信息。",
+ "Upload failed. Could not find uploaded file" : "上传失败。未发现上传的文件",
+ "Upload failed. Could not get file info." : "上传失败。无法获取文件信息。",
"Invalid directory." : "无效文件夹。",
"Files" : "文件",
"All files" : "全部文件",
+ "Favorites" : "收藏",
+ "Home" : "家庭",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "不能上传文件 {filename} ,由于它是一个目录或者为0字节",
"Total file size {size1} exceeds upload limit {size2}" : "总文件大小 {size1} 超过上传限制 {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "没有足够的可用空间,您正在上传 {size1} 的文件但是只有 {size2} 可用。",
@@ -44,13 +48,13 @@ OC.L10N.register(
"Could not create file" : "不能创建文件",
"Could not create folder" : "不能创建文件夹",
"Error fetching URL" : "获取URL出错",
- "Share" : "分享",
+ "Rename" : "重命名",
"Delete" : "删除",
"Disconnect storage" : "断开储存连接",
"Unshare" : "取消共享",
- "Delete permanently" : "永久删除",
- "Rename" : "重命名",
+ "Select" : "选择",
"Pending" : "等待",
+ "Unable to determine date" : "无法确定日期",
"Error moving file." : "移动文件出错。",
"Error moving file" : "移动文件错误",
"Error" : "错误",
@@ -69,13 +73,18 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 和 {files}",
+ "Favorited" : "已收藏",
+ "Favorite" : "收藏",
+ "%s could not be renamed as it has been deleted" : "%s 已经被删除,无法重命名 ",
"%s could not be renamed" : "%s 不能被重命名",
"Upload (max. %s)" : "上传 (最大 %s)",
"File handling" : "文件处理",
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
+ "Settings" : "设置",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>",
"New" : "新建",
@@ -84,11 +93,17 @@ OC.L10N.register(
"New folder" : "增加文件夹",
"Folder" : "文件夹",
"From link" : "来自链接",
- "Nothing in here. Upload something!" : "这里还什么都没有。上传些东西吧!",
+ "Upload" : "上传",
+ "Cancel upload" : "取消上传",
+ "No files yet" : "尚无文件",
+ "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
+ "Select all" : "全部选择",
"Download" : "下载",
"Upload too large" : "上传文件过大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
"Files are being scanned, please wait." : "文件正在被扫描,请稍候。",
- "Currently scanning" : "正在扫描"
+ "Currently scanning" : "正在扫描",
+ "No favorites" : "无收藏",
+ "Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index a0244f1965a..a605e67700c 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -4,6 +4,7 @@
"Unknown error" : "未知错误",
"Could not move %s - File with this name already exists" : "无法移动 %s - 同名文件已存在",
"Could not move %s" : "无法移动 %s",
+ "Permission denied" : "拒绝访问",
"File name cannot be empty." : "文件名不能为空。",
"\"%s\" is an invalid file name." : "“%s” 是一个无效的文件名。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。",
@@ -11,8 +12,9 @@
"The name %s is already used in the folder %s. Please choose a different name." : "文件名 %s 是已经在 %s 中存在的名称。请使用其他名称。",
"Not a valid source" : "不是一个可用的源",
"Server is not allowed to open URLs, please check the server configuration" : "服务器没有允许打开URL网址,请检查服务器配置",
+ "The file exceeds your quota by %s" : "文件超过配额 %s",
"Error while downloading %s to %s" : "当下载 %s 到 %s 时出错",
- "Error when creating the file" : "当创建文件是出错",
+ "Error when creating the file" : "创建文件时出错",
"Folder name cannot be empty." : "文件夹名称不能为空",
"Error when creating the folder" : "创建文件夹出错",
"Unable to set upload directory." : "无法设置上传文件夹。",
@@ -26,11 +28,13 @@
"Missing a temporary folder" : "缺少临时目录",
"Failed to write to disk" : "写入磁盘失败",
"Not enough storage available" : "没有足够的存储空间",
- "Upload failed. Could not find uploaded file" : "上传失败。不能发现上传的文件",
- "Upload failed. Could not get file info." : "上传失败。不能获取文件信息。",
+ "Upload failed. Could not find uploaded file" : "上传失败。未发现上传的文件",
+ "Upload failed. Could not get file info." : "上传失败。无法获取文件信息。",
"Invalid directory." : "无效文件夹。",
"Files" : "文件",
"All files" : "全部文件",
+ "Favorites" : "收藏",
+ "Home" : "家庭",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "不能上传文件 {filename} ,由于它是一个目录或者为0字节",
"Total file size {size1} exceeds upload limit {size2}" : "总文件大小 {size1} 超过上传限制 {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "没有足够的可用空间,您正在上传 {size1} 的文件但是只有 {size2} 可用。",
@@ -42,13 +46,13 @@
"Could not create file" : "不能创建文件",
"Could not create folder" : "不能创建文件夹",
"Error fetching URL" : "获取URL出错",
- "Share" : "分享",
+ "Rename" : "重命名",
"Delete" : "删除",
"Disconnect storage" : "断开储存连接",
"Unshare" : "取消共享",
- "Delete permanently" : "永久删除",
- "Rename" : "重命名",
+ "Select" : "选择",
"Pending" : "等待",
+ "Unable to determine date" : "无法确定日期",
"Error moving file." : "移动文件出错。",
"Error moving file" : "移动文件错误",
"Error" : "错误",
@@ -67,13 +71,18 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 和 {files}",
+ "Favorited" : "已收藏",
+ "Favorite" : "收藏",
+ "%s could not be renamed as it has been deleted" : "%s 已经被删除,无法重命名 ",
"%s could not be renamed" : "%s 不能被重命名",
"Upload (max. %s)" : "上传 (最大 %s)",
"File handling" : "文件处理",
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
+ "Settings" : "设置",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>",
"New" : "新建",
@@ -82,11 +91,17 @@
"New folder" : "增加文件夹",
"Folder" : "文件夹",
"From link" : "来自链接",
- "Nothing in here. Upload something!" : "这里还什么都没有。上传些东西吧!",
+ "Upload" : "上传",
+ "Cancel upload" : "取消上传",
+ "No files yet" : "尚无文件",
+ "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
+ "Select all" : "全部选择",
"Download" : "下载",
"Upload too large" : "上传文件过大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
"Files are being scanned, please wait." : "文件正在被扫描,请稍候。",
- "Currently scanning" : "正在扫描"
+ "Currently scanning" : "正在扫描",
+ "No favorites" : "无收藏",
+ "Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js
index e3e2aec65a0..924fb403cfd 100644
--- a/apps/files/l10n/zh_HK.js
+++ b/apps/files/l10n/zh_HK.js
@@ -4,22 +4,26 @@ OC.L10N.register(
"Unknown error" : "不明錯誤",
"Files" : "文件",
"All files" : "所有文件",
- "Share" : "分享",
+ "Home" : "主頁",
+ "Rename" : "重新命名",
"Delete" : "刪除",
"Unshare" : "取消分享",
- "Rename" : "重新命名",
"Error" : "錯誤",
"Name" : "名稱",
"Size" : "大小",
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 和 {files}",
"Save" : "儲存",
+ "Settings" : "設定",
"WebDAV" : "WebDAV",
"New" : "新增",
"New folder" : "新資料夾",
"Folder" : "資料夾",
+ "Upload" : "上戴",
+ "Cancel upload" : "取消上戴",
"Download" : "下載"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json
index da0632f0882..34e28e5193e 100644
--- a/apps/files/l10n/zh_HK.json
+++ b/apps/files/l10n/zh_HK.json
@@ -2,22 +2,26 @@
"Unknown error" : "不明錯誤",
"Files" : "文件",
"All files" : "所有文件",
- "Share" : "分享",
+ "Home" : "主頁",
+ "Rename" : "重新命名",
"Delete" : "刪除",
"Unshare" : "取消分享",
- "Rename" : "重新命名",
"Error" : "錯誤",
"Name" : "名稱",
"Size" : "大小",
"_%n folder_::_%n folders_" : [""],
"_%n file_::_%n files_" : [""],
"_Uploading %n file_::_Uploading %n files_" : [""],
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 和 {files}",
"Save" : "儲存",
+ "Settings" : "設定",
"WebDAV" : "WebDAV",
"New" : "新增",
"New folder" : "新資料夾",
"Folder" : "資料夾",
+ "Upload" : "上戴",
+ "Cancel upload" : "取消上戴",
"Download" : "下載"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 73e17fa47fc..f6f1e8e2523 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -35,6 +35,8 @@ OC.L10N.register(
"Invalid directory." : "無效的資料夾",
"Files" : "檔案",
"All files" : "所有檔案",
+ "Favorites" : "最愛",
+ "Home" : "住宅",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "因為 {filename} 是個目錄或是大小為零,所以無法上傳",
"Total file size {size1} exceeds upload limit {size2}" : "檔案大小總和 {size1} 超過上傳限制 {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空間不足,你正要上傳 {size1} 可是只剩下 {size2}",
@@ -46,12 +48,11 @@ OC.L10N.register(
"Could not create file" : "無法建立檔案",
"Could not create folder" : "無法建立資料夾",
"Error fetching URL" : "抓取 URL 發生錯誤",
- "Share" : "分享",
+ "Rename" : "重新命名",
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
"Unshare" : "取消分享",
- "Delete permanently" : "永久刪除",
- "Rename" : "重新命名",
+ "Select" : "選擇",
"Pending" : "等候中",
"Error moving file." : "移動檔案發生錯誤",
"Error moving file" : "移動檔案失敗",
@@ -71,7 +72,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 和 {files}",
+ "Favorite" : "我的最愛",
"%s could not be renamed as it has been deleted" : "%s 已經被刪除了所以無法重新命名",
"%s could not be renamed" : "無法重新命名 %s",
"Upload (max. %s)" : "上傳(至多 %s)",
@@ -79,6 +82,7 @@ OC.L10N.register(
"Maximum upload size" : "上傳限制",
"max. possible: " : "最大允許:",
"Save" : "儲存",
+ "Settings" : "設定",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個地址<a href=\"%s\" target=\"_blank\">來透過 WebDAV 存取檔案</a>",
"New" : "新增",
@@ -87,7 +91,8 @@ OC.L10N.register(
"New folder" : "新資料夾",
"Folder" : "資料夾",
"From link" : "從連結",
- "Nothing in here. Upload something!" : "這裡還沒有東西,上傳一些吧!",
+ "Upload" : "上傳",
+ "Cancel upload" : "取消上傳",
"Download" : "下載",
"Upload too large" : "上傳過大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制。",
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index f55b936a40f..0d4eecee767 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -33,6 +33,8 @@
"Invalid directory." : "無效的資料夾",
"Files" : "檔案",
"All files" : "所有檔案",
+ "Favorites" : "最愛",
+ "Home" : "住宅",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "因為 {filename} 是個目錄或是大小為零,所以無法上傳",
"Total file size {size1} exceeds upload limit {size2}" : "檔案大小總和 {size1} 超過上傳限制 {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空間不足,你正要上傳 {size1} 可是只剩下 {size2}",
@@ -44,12 +46,11 @@
"Could not create file" : "無法建立檔案",
"Could not create folder" : "無法建立資料夾",
"Error fetching URL" : "抓取 URL 發生錯誤",
- "Share" : "分享",
+ "Rename" : "重新命名",
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
"Unshare" : "取消分享",
- "Delete permanently" : "永久刪除",
- "Rename" : "重新命名",
+ "Select" : "選擇",
"Pending" : "等候中",
"Error moving file." : "移動檔案發生錯誤",
"Error moving file" : "移動檔案失敗",
@@ -69,7 +70,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
+ "_ matches '{filter}'_::_ match '{filter}'_" : [""],
"{dirs} and {files}" : "{dirs} 和 {files}",
+ "Favorite" : "我的最愛",
"%s could not be renamed as it has been deleted" : "%s 已經被刪除了所以無法重新命名",
"%s could not be renamed" : "無法重新命名 %s",
"Upload (max. %s)" : "上傳(至多 %s)",
@@ -77,6 +80,7 @@
"Maximum upload size" : "上傳限制",
"max. possible: " : "最大允許:",
"Save" : "儲存",
+ "Settings" : "設定",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個地址<a href=\"%s\" target=\"_blank\">來透過 WebDAV 存取檔案</a>",
"New" : "新增",
@@ -85,7 +89,8 @@
"New folder" : "新資料夾",
"Folder" : "資料夾",
"From link" : "從連結",
- "Nothing in here. Upload something!" : "這裡還沒有東西,上傳一些吧!",
+ "Upload" : "上傳",
+ "Cancel upload" : "取消上傳",
"Download" : "下載",
"Upload too large" : "上傳過大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制。",
diff --git a/apps/files/lib/capabilities.php b/apps/files/lib/capabilities.php
index d4820e931ba..690cc314ccd 100644
--- a/apps/files/lib/capabilities.php
+++ b/apps/files/lib/capabilities.php
@@ -15,7 +15,6 @@ class Capabilities {
'capabilities' => array(
'files' => array(
'bigfilechunking' => true,
- 'undelete' => true,
),
),
));
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index aa5a2f8c68a..4a8af59475b 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -82,7 +82,7 @@ class Helper
public static function compareTimestamp(FileInfo $a, FileInfo $b) {
$aTime = $a->getMTime();
$bTime = $b->getMTime();
- return $aTime - $bTime;
+ return ($aTime < $bTime) ? -1 : 1;
}
/**
@@ -122,6 +122,9 @@ class Helper
$entry['size'] = $i['size'];
$entry['type'] = $i['type'];
$entry['etag'] = $i['etag'];
+ if (isset($i['tags'])) {
+ $entry['tags'] = $i['tags'];
+ }
if (isset($i['displayname_owner'])) {
$entry['shareOwner'] = $i['displayname_owner'];
}
@@ -176,6 +179,27 @@ class Helper
}
/**
+ * Populate the result set with file tags
+ *
+ * @param array file list
+ * @return file list populated with tags
+ */
+ public static function populateTags($fileList) {
+ $filesById = array();
+ foreach ($fileList as $fileData) {
+ $filesById[$fileData['fileid']] = $fileData;
+ }
+ $tagger = \OC::$server->getTagManager()->load('files');
+ $tags = $tagger->getTagsForObjects(array_keys($filesById));
+ if ($tags) {
+ foreach ($tags as $fileId => $fileTags) {
+ $filesById[$fileId]['tags'] = $fileTags;
+ }
+ }
+ return $fileList;
+ }
+
+ /**
* Sort the given file info array
*
* @param \OCP\Files\FileInfo[] $files files to sort
diff --git a/apps/files/service/tagservice.php b/apps/files/service/tagservice.php
new file mode 100644
index 00000000000..86885e38ddd
--- /dev/null
+++ b/apps/files/service/tagservice.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files\Service;
+
+/**
+ * Service class to manage tags on files.
+ */
+class TagService {
+
+ /**
+ * @var \OCP\IUserSession
+ */
+ private $userSession;
+
+ /**
+ * @var \OCP\ITags
+ */
+ private $tagger;
+
+ /**
+ * @var \OCP\Files\Folder
+ */
+ private $homeFolder;
+
+ public function __construct(
+ \OCP\IUserSession $userSession,
+ \OCP\ITags $tagger,
+ \OCP\Files\Folder $homeFolder
+ ) {
+ $this->userSession = $userSession;
+ $this->tagger = $tagger;
+ $this->homeFolder = $homeFolder;
+ }
+
+ /**
+ * Updates the tags of the specified file path.
+ * The passed tags are absolute, which means they will
+ * replace the actual tag selection.
+ *
+ * @param string $path path
+ * @param array $tags array of tags
+ * @return array list of tags
+ * @throws \OCP\NotFoundException if the file does not exist
+ */
+ public function updateFileTags($path, $tags) {
+ $fileId = $this->homeFolder->get($path)->getId();
+
+ $currentTags = $this->tagger->getTagsForObjects(array($fileId));
+
+ if (!empty($currentTags)) {
+ $currentTags = current($currentTags);
+ }
+
+ $newTags = array_diff($tags, $currentTags);
+ foreach ($newTags as $tag) {
+ $this->tagger->tagAs($fileId, $tag);
+ }
+ $deletedTags = array_diff($currentTags, $tags);
+ foreach ($deletedTags as $tag) {
+ $this->tagger->unTag($fileId, $tag);
+ }
+
+ // TODO: re-read from tagger to make sure the
+ // list is up to date, in case of concurrent changes ?
+ return $tags;
+ }
+
+ /**
+ * Updates the tags of the specified file path.
+ * The passed tags are absolute, which means they will
+ * replace the actual tag selection.
+ *
+ * @param array $tagName tag name to filter by
+ * @return FileInfo[] list of matching files
+ * @throws \Exception if the tag does not exist
+ */
+ public function getFilesByTag($tagName) {
+ $nodes = $this->homeFolder->searchByTag(
+ $tagName, $this->userSession->getUser()->getUId()
+ );
+ foreach ($nodes as &$node) {
+ $node = $node->getFileInfo();
+ }
+
+ return $nodes;
+ }
+}
+
diff --git a/apps/files/simplelist.php b/apps/files/simplelist.php
new file mode 100644
index 00000000000..53e56b4ed32
--- /dev/null
+++ b/apps/files/simplelist.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * ownCloud - Simple files list
+ *
+ * @author Vincent Petry
+ * @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// TODO: move to handlebars
+
+// renders the controls and table headers template
+$tmpl = new OCP\Template('files', 'simplelist', '');
+$tmpl->printPage();
+
diff --git a/apps/files/templates/appnavigation.php b/apps/files/templates/appnavigation.php
index 30f0a5afdf1..8fd2b76f9c0 100644
--- a/apps/files/templates/appnavigation.php
+++ b/apps/files/templates/appnavigation.php
@@ -6,11 +6,15 @@
</ul>
<div id="app-settings">
<div id="app-settings-header">
- <button class="settings-button" data-apps-slide-toggle="#app-settings-content"></button>
+ <button class="settings-button" data-apps-slide-toggle="#app-settings-content">
+ <span class="hidden-visually"><?php p($l->t('Settings'));?></span>
+ </button>
</div>
<div id="app-settings-content">
- <h2><?php p($l->t('WebDAV'));?></h2>
- <div><input id="webdavurl" type="text" readonly="readonly" value="<?php p(OC_Helper::linkToRemote('webdav')); ?>" /></div>
+ <h2>
+ <label for="webdavurl"><?php p($l->t('WebDAV'));?></label>
+ </h2>
+ <input id="webdavurl" type="text" readonly="readonly" value="<?php p(OC_Helper::linkToRemote('webdav')); ?>" />
<em><?php print_unescaped($l->t('Use this address to <a href="%s" target="_blank">access your Files via WebDAV</a>', array(link_to_docs('user-webdav'))));?></em>
</div>
</div>
diff --git a/apps/files/templates/fileexists.html b/apps/files/templates/fileexists.html
index 79beccef3e5..5360a7c8e8f 100644
--- a/apps/files/templates/fileexists.html
+++ b/apps/files/templates/fileexists.html
@@ -20,6 +20,7 @@
<span class="svg icon"></span>
<div class="mtime"></div>
<div class="size"></div>
+ <div class="message"></div>
</div>
</div>
</div>
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index b52effb1e78..222a996aae3 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -15,5 +15,6 @@
<input type="hidden" name="encryptedFiles" id="encryptedFiles" value="<?php $_['encryptedFiles'] ? p('1') : p('0'); ?>" />
<input type="hidden" name="encryptedInitStatus" id="encryptionInitStatus" value="<?php p($_['encryptionInitStatus']) ?>" />
<input type="hidden" name="mailNotificationEnabled" id="mailNotificationEnabled" value="<?php p($_['mailNotificationEnabled']) ?>" />
+<input type="hidden" name="mailPublicNotificationEnabled" id="mailPublicNotificationEnabled" value="<?php p($_['mailPublicNotificationEnabled']) ?>" />
<input type="hidden" name="allowShareWithLink" id="allowShareWithLink" value="<?php p($_['allowShareWithLink']) ?>" />
<?php endif;
diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php
index a0138967cd2..aa879002baa 100644
--- a/apps/files/templates/list.php
+++ b/apps/files/templates/list.php
@@ -34,12 +34,17 @@
value="(max <?php isset($_['uploadMaxHumanFilesize']) ? p($_['uploadMaxHumanFilesize']) : ''; ?>)">
<input type="file" id="file_upload_start" name='files[]'
data-url="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>" />
- <a href="#" class="svg icon-upload"></a>
+ <label for="file_upload_start" class="svg icon-upload">
+ <span class="hidden-visually"><?php p($l->t('Upload'))?></span>
+ </label>
</div>
<div id="uploadprogresswrapper">
<div id="uploadprogressbar"></div>
- <input type="button" class="stop icon-close"
- style="display:none" value="" />
+ <button class="stop icon-close" style="display:none">
+ <span class="hidden-visually">
+ <?php p($l->t('Cancel upload'))?>
+ </span>
+ </button>
</div>
</div>
<div id="file_action_panel"></div>
@@ -49,7 +54,17 @@
<input type="hidden" name="permissions" value="" id="permissions">
</div>
-<div id="emptycontent" class="hidden"><?php p($l->t('Nothing in here. Upload something!'))?></div>
+<div id="emptycontent" class="hidden">
+ <div class="icon-folder"></div>
+ <h2><?php p($l->t('No files yet')); ?></h2>
+ <p><?php p($l->t('Upload some content or sync with your devices!')); ?></p>
+</div>
+
+<div class="nofilterresults hidden">
+ <div class="icon-search"></div>
+ <h2><?php p($l->t('No entries found in this folder')); ?></h2>
+ <p></p>
+</div>
<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>" data-preview-x="36" data-preview-y="36">
<thead>
@@ -57,11 +72,13 @@
<th id='headerName' class="hidden column-name">
<div id="headerName-container">
<input type="checkbox" id="select_all_files" class="select-all"/>
- <label for="select_all_files"></label>
+ <label for="select_all_files">
+ <span class="hidden-visually"><?php p($l->t('Select all'))?></span>
+ </label>
<a class="name sort columntitle" data-sort="name"><span><?php p($l->t( 'Name' )); ?></span><span class="sort-indicator"></span></a>
<span id="selectedActionsList" class="selectedActions">
<a href="" class="download">
- <img class="svg" alt="Download"
+ <img class="svg" alt=""
src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>" />
<?php p($l->t('Download'))?>
</a>
@@ -75,7 +92,7 @@
<a id="modified" class="columntitle" data-sort="mtime"><span><?php p($l->t( 'Modified' )); ?></span><span class="sort-indicator"></span></a>
<span class="selectedActions"><a href="" class="delete-selected">
<?php p($l->t('Delete'))?>
- <img class="svg" alt="<?php p($l->t('Delete'))?>"
+ <img class="svg" alt=""
src="<?php print_unescaped(OCP\image_path("core", "actions/delete.svg")); ?>" />
</a></span>
</th>
diff --git a/apps/files/templates/simplelist.php b/apps/files/templates/simplelist.php
new file mode 100644
index 00000000000..6b6c018024f
--- /dev/null
+++ b/apps/files/templates/simplelist.php
@@ -0,0 +1,46 @@
+<div id="controls">
+ <div id="file_action_panel"></div>
+</div>
+<div id='notification'></div>
+
+<div id="emptycontent" class="hidden">
+ <div class="icon-starred"></div>
+ <h2><?php p($l->t('No favorites')); ?></h2>
+ <p><?php p($l->t('Files and folders you mark as favorite will show up here')); ?></p>
+</div>
+
+<input type="hidden" name="dir" value="" id="dir">
+
+<div class="nofilterresults hidden">
+ <div class="icon-search"></div>
+ <h2><?php p($l->t('No entries found in this folder')); ?></h2>
+ <p></p>
+</div>
+
+<table id="filestable">
+ <thead>
+ <tr>
+ <th id='headerName' class="hidden column-name">
+ <div id="headerName-container">
+ <a class="name sort columntitle" data-sort="name"><span><?php p($l->t( 'Name' )); ?></span><span class="sort-indicator"></span></a>
+ </div>
+ </th>
+ <th id="headerSize" class="hidden column-size">
+ <a class="size sort columntitle" data-sort="size"><span><?php p($l->t('Size')); ?></span><span class="sort-indicator"></span></a>
+ </th>
+ <th id="headerDate" class="hidden column-mtime">
+ <a id="modified" class="columntitle" data-sort="mtime"><span><?php p($l->t( 'Modified' )); ?></span><span class="sort-indicator"></span></a>
+ <span class="selectedActions"><a href="" class="delete-selected">
+ <?php p($l->t('Delete'))?>
+ <img class="svg" alt="<?php p($l->t('Delete'))?>"
+ src="<?php print_unescaped(OCP\image_path("core", "actions/delete.svg")); ?>" />
+ </a></span>
+ </th>
+ </tr>
+ </thead>
+ <tbody id="fileList">
+ </tbody>
+ <tfoot>
+ </tfoot>
+</table>
+
diff --git a/apps/files/tests/ajax_rename.php b/apps/files/tests/ajax_rename.php
index 5ed8b1931f4..1cfecf9e58c 100644
--- a/apps/files/tests/ajax_rename.php
+++ b/apps/files/tests/ajax_rename.php
@@ -21,7 +21,7 @@
*
*/
-class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
+class Test_OC_Files_App_Rename extends \Test\TestCase {
private static $user;
/**
@@ -34,7 +34,13 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
*/
private $files;
- function setUp() {
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+
// mock OC_L10n
if (!self::$user) {
self::$user = uniqid();
@@ -59,10 +65,13 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
$this->files = new \OCA\Files\App($viewMock, $l10nMock);
}
- function tearDown() {
+ protected function tearDown() {
$result = \OC_User::deleteUser(self::$user);
$this->assertTrue($result);
\OC\Files\Filesystem::tearDown();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
/**
@@ -98,7 +107,7 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
'etag' => 'abcdef',
'directory' => '/',
'name' => 'new_name',
- ))));
+ ), null)));
$result = $this->files->rename($dir, $oldname, $newname);
diff --git a/apps/files/tests/helper.php b/apps/files/tests/helper.php
index 17be1770c33..ea96e41d1d1 100644
--- a/apps/files/tests/helper.php
+++ b/apps/files/tests/helper.php
@@ -11,7 +11,7 @@ use OCA\Files;
/**
* Class Test_Files_Helper
*/
-class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
+class Test_Files_Helper extends \Test\TestCase {
private function makeFileInfo($name, $size, $mtime, $isDir = false) {
return new \OC\Files\FileInfo(
@@ -24,7 +24,8 @@ class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
'mtime' => $mtime,
'type' => $isDir ? 'dir' : 'file',
'mimetype' => $isDir ? 'httpd/unix-directory' : 'application/octet-stream'
- )
+ ),
+ null
);
}
@@ -33,10 +34,10 @@ class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
*/
private function getTestFileList() {
return array(
- self::makeFileInfo('a.txt', 4, 1000),
+ self::makeFileInfo('a.txt', 4, 2.3 * pow(10, 9)),
self::makeFileInfo('q.txt', 5, 150),
self::makeFileInfo('subdir2', 87, 128, true),
- self::makeFileInfo('b.txt', 166, 800),
+ self::makeFileInfo('b.txt', 2.2 * pow(10, 9), 800),
self::makeFileInfo('o.txt', 12, 100),
self::makeFileInfo('subdir', 88, 125, true),
);
@@ -90,7 +91,7 @@ class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
$this->assertEquals(
$expectedOrder,
$fileNames
- );
+ );
}
}
diff --git a/apps/files/tests/js/favoritesfilelistspec.js b/apps/files/tests/js/favoritesfilelistspec.js
new file mode 100644
index 00000000000..608ddaca18b
--- /dev/null
+++ b/apps/files/tests/js/favoritesfilelistspec.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+describe('OCA.Files.FavoritesFileList tests', function() {
+ var fileList;
+
+ beforeEach(function() {
+ // init parameters and test table elements
+ $('#testArea').append(
+ '<div id="app-content-container">' +
+ // init horrible parameters
+ '<input type="hidden" id="dir" value="/"></input>' +
+ '<input type="hidden" id="permissions" value="31"></input>' +
+ // dummy controls
+ '<div id="controls">' +
+ ' <div class="actions creatable"></div>' +
+ ' <div class="notCreatable"></div>' +
+ '</div>' +
+ // dummy table
+ // TODO: at some point this will be rendered by the fileList class itself!
+ '<table id="filestable">' +
+ '<thead><tr>' +
+ '<th id="headerName" class="hidden column-name">' +
+ '<a class="name columntitle" data-sort="name"><span>Name</span><span class="sort-indicator"></span></a>' +
+ '</th>' +
+ '<th class="hidden column-mtime">' +
+ '<a class="columntitle" data-sort="mtime"><span class="sort-indicator"></span></a>' +
+ '</th>' +
+ '</tr></thead>' +
+ '<tbody id="fileList"></tbody>' +
+ '<tfoot></tfoot>' +
+ '</table>' +
+ '<div id="emptycontent">Empty content message</div>' +
+ '</div>'
+ );
+ });
+ afterEach(function() {
+ fileList.destroy();
+ fileList = undefined;
+ });
+
+ describe('loading file list', function() {
+ var response;
+
+ beforeEach(function() {
+ fileList = new OCA.Files.FavoritesFileList(
+ $('#app-content-container')
+ );
+ OCA.Files.FavoritesPlugin.attach(fileList);
+
+ fileList.reload();
+
+ /* jshint camelcase: false */
+ response = {
+ files: [{
+ id: 7,
+ name: 'test.txt',
+ path: '/somedir',
+ size: 123,
+ mtime: 11111000,
+ tags: [OC.TAG_FAVORITE],
+ permissions: OC.PERMISSION_ALL,
+ mimetype: 'text/plain'
+ }]
+ };
+ });
+ it('render files', function() {
+ var request;
+
+ expect(fakeServer.requests.length).toEqual(1);
+ request = fakeServer.requests[0];
+ expect(request.url).toEqual(
+ OC.generateUrl('apps/files/api/v1/tags/{tagName}/files', {tagName: OC.TAG_FAVORITE})
+ );
+
+ fakeServer.requests[0].respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify(response)
+ );
+
+ var $rows = fileList.$el.find('tbody tr');
+ var $tr = $rows.eq(0);
+ expect($rows.length).toEqual(1);
+ expect($tr.attr('data-id')).toEqual('7');
+ expect($tr.attr('data-type')).toEqual('file');
+ expect($tr.attr('data-file')).toEqual('test.txt');
+ expect($tr.attr('data-path')).toEqual('/somedir');
+ expect($tr.attr('data-size')).toEqual('123');
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL);
+ expect($tr.attr('data-mime')).toEqual('text/plain');
+ expect($tr.attr('data-mtime')).toEqual('11111000');
+ expect($tr.find('a.name').attr('href')).toEqual(
+ OC.webroot +
+ '/index.php/apps/files/ajax/download.php' +
+ '?dir=%2Fsomedir&files=test.txt'
+ );
+ expect($tr.find('.nametext').text().trim()).toEqual('test.txt');
+ });
+ });
+});
diff --git a/apps/files/tests/js/favoritespluginspec.js b/apps/files/tests/js/favoritespluginspec.js
new file mode 100644
index 00000000000..90b40ede74b
--- /dev/null
+++ b/apps/files/tests/js/favoritespluginspec.js
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+describe('OCA.Files.FavoritesPlugin tests', function() {
+ var Plugin = OCA.Files.FavoritesPlugin;
+ var fileList;
+
+ beforeEach(function() {
+ $('#testArea').append(
+ '<div id="app-navigation">' +
+ '<ul><li data-id="files"><a>Files</a></li>' +
+ '<li data-id="sharingin"><a></a></li>' +
+ '<li data-id="sharingout"><a></a></li>' +
+ '</ul></div>' +
+ '<div id="app-content">' +
+ '<div id="app-content-files" class="hidden">' +
+ '</div>' +
+ '<div id="app-content-favorites" class="hidden">' +
+ '</div>' +
+ '</div>' +
+ '</div>'
+ );
+ OC.Plugins.attach('OCA.Files.App', Plugin);
+ fileList = Plugin.showFileList($('#app-content-favorites'));
+ });
+ afterEach(function() {
+ OC.Plugins.detach('OCA.Files.App', Plugin);
+ });
+
+ describe('initialization', function() {
+ it('inits favorites list on show', function() {
+ expect(fileList).toBeDefined();
+ });
+ });
+ describe('file actions', function() {
+ var oldLegacyFileActions;
+
+ beforeEach(function() {
+ oldLegacyFileActions = window.FileActions;
+ window.FileActions = new OCA.Files.FileActions();
+ });
+
+ afterEach(function() {
+ window.FileActions = oldLegacyFileActions;
+ });
+ it('provides default file actions', function() {
+ var fileActions = fileList.fileActions;
+
+ expect(fileActions.actions.all).toBeDefined();
+ expect(fileActions.actions.all.Delete).toBeDefined();
+ expect(fileActions.actions.all.Rename).toBeDefined();
+ expect(fileActions.actions.all.Download).toBeDefined();
+
+ expect(fileActions.defaults.dir).toEqual('Open');
+ });
+ it('provides custom file actions', function() {
+ var actionStub = sinon.stub();
+ // regular file action
+ OCA.Files.fileActions.register(
+ 'all',
+ 'RegularTest',
+ OC.PERMISSION_READ,
+ OC.imagePath('core', 'actions/shared'),
+ actionStub
+ );
+
+ Plugin.favoritesFileList = null;
+ fileList = Plugin.showFileList($('#app-content-favorites'));
+
+ expect(fileList.fileActions.actions.all.RegularTest).toBeDefined();
+ });
+ it('does not provide legacy file actions', function() {
+ var actionStub = sinon.stub();
+ // legacy file action
+ window.FileActions.register(
+ 'all',
+ 'LegacyTest',
+ OC.PERMISSION_READ,
+ OC.imagePath('core', 'actions/shared'),
+ actionStub
+ );
+
+ Plugin.favoritesFileList = null;
+ fileList = Plugin.showFileList($('#app-content-favorites'));
+
+ expect(fileList.fileActions.actions.all.LegacyTest).not.toBeDefined();
+ });
+ it('redirects to files app when opening a directory', function() {
+ var oldList = OCA.Files.App.fileList;
+ // dummy new list to make sure it exists
+ OCA.Files.App.fileList = new OCA.Files.FileList($('<table><thead></thead><tbody></tbody></table>'));
+
+ var setActiveViewStub = sinon.stub(OCA.Files.App, 'setActiveView');
+ // create dummy table so we can click the dom
+ var $table = '<table><thead></thead><tbody id="fileList"></tbody></table>';
+ $('#app-content-favorites').append($table);
+
+ Plugin.favoritesFileList = null;
+ fileList = Plugin.showFileList($('#app-content-favorites'));
+
+ fileList.setFiles([{
+ name: 'testdir',
+ type: 'dir',
+ path: '/somewhere/inside/subdir',
+ counterParts: ['user2'],
+ shareOwner: 'user2'
+ }]);
+
+ fileList.findFileEl('testdir').find('td a.name').click();
+
+ expect(OCA.Files.App.fileList.getCurrentDirectory()).toEqual('/somewhere/inside/subdir/testdir');
+
+ expect(setActiveViewStub.calledOnce).toEqual(true);
+ expect(setActiveViewStub.calledWith('files')).toEqual(true);
+
+ setActiveViewStub.restore();
+
+ // restore old list
+ OCA.Files.App.fileList = oldList;
+ });
+ });
+});
+
diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js
index f5f18a45a75..828aec9b6b9 100644
--- a/apps/files/tests/js/fileactionsSpec.js
+++ b/apps/files/tests/js/fileactionsSpec.js
@@ -193,6 +193,54 @@ describe('OCA.Files.FileActions tests', function() {
context = actionStub.getCall(0).args[1];
expect(context.dir).toEqual('/somepath');
});
+ describe('custom rendering', function() {
+ var $tr;
+ beforeEach(function() {
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ mimetype: 'text/plain',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ $tr = fileList.add(fileData);
+ });
+ it('regular function', function() {
+ var actionStub = sinon.stub();
+ FileActions.registerAction({
+ name: 'Test',
+ displayName: '',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ render: function(actionSpec, isDefault, context) {
+ expect(actionSpec.name).toEqual('Test');
+ expect(actionSpec.displayName).toEqual('');
+ expect(actionSpec.permissions).toEqual(OC.PERMISSION_READ);
+ expect(actionSpec.mime).toEqual('all');
+ expect(isDefault).toEqual(false);
+
+ expect(context.fileList).toEqual(fileList);
+ expect(context.$file[0]).toEqual($tr[0]);
+
+ var $customEl = $('<a href="#"><span>blabli</span><span>blabla</span></a>');
+ $tr.find('td:first').append($customEl);
+ return $customEl;
+ },
+ actionHandler: actionStub
+ });
+ FileActions.display($tr.find('td.filename'), true, fileList);
+
+ var $actionEl = $tr.find('td:first .action-test');
+ expect($actionEl.length).toEqual(1);
+ expect($actionEl.hasClass('action')).toEqual(true);
+
+ $actionEl.click();
+ expect(actionStub.calledOnce).toEqual(true);
+ expect(actionStub.getCall(0).args[0]).toEqual('testName.txt');
+ });
+ });
describe('merging', function() {
var $tr;
beforeEach(function() {
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index a7fa14eb14a..6dafa262715 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -97,7 +97,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'One.txt',
mimetype: 'text/plain',
size: 12,
- etag: 'abc'
+ etag: 'abc',
+ permissions: OC.PERMISSION_ALL
}, {
id: 2,
type: 'file',
@@ -105,6 +106,7 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'image/jpeg',
size: 12049,
etag: 'def',
+ permissions: OC.PERMISSION_ALL
}, {
id: 3,
type: 'file',
@@ -112,13 +114,15 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'application/pdf',
size: 58009,
etag: '123',
+ permissions: OC.PERMISSION_ALL
}, {
id: 4,
type: 'dir',
name: 'somedir',
mimetype: 'httpd/unix-directory',
size: 250,
- etag: '456'
+ etag: '456',
+ permissions: OC.PERMISSION_ALL
}];
pageSizeStub = sinon.stub(OCA.Files.FileList.prototype, 'pageSize').returns(20);
fileList = new OCA.Files.FileList($('#app-content-files'));
@@ -179,6 +183,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.find('.nametext').text().trim()).toEqual('testName.txt');
expect($tr.find('.filesize').text()).toEqual('1 kB');
+ expect($tr.find('.date').text()).not.toEqual('?');
expect(fileList.findFileEl('testName.txt')[0]).toEqual($tr[0]);
});
it('generates dir element with correct attributes when calling add() with dir data', function() {
@@ -205,6 +210,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-mtime')).toEqual('123456');
expect($tr.find('.filesize').text()).toEqual('1 kB');
+ expect($tr.find('.date').text()).not.toEqual('?');
expect(fileList.findFileEl('testFolder')[0]).toEqual($tr[0]);
});
@@ -229,6 +235,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-mtime')).toEqual('123456');
expect($tr.find('.filesize').text()).toEqual('Pending');
+ expect($tr.find('.date').text()).not.toEqual('?');
});
it('generates dir element with default attributes when calling add() with minimal data', function() {
var fileData = {
@@ -250,6 +257,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-mtime')).toEqual('123456');
expect($tr.find('.filesize').text()).toEqual('Pending');
+ expect($tr.find('.date').text()).not.toEqual('?');
});
it('generates file element with zero size when size is explicitly zero', function() {
var fileData = {
@@ -260,6 +268,15 @@ describe('OCA.Files.FileList tests', function() {
var $tr = fileList.add(fileData);
expect($tr.find('.filesize').text()).toEqual('0 kB');
});
+ it('generates file element with unknown date when mtime invalid', function() {
+ var fileData = {
+ type: 'dir',
+ name: 'testFolder',
+ mtime: -1
+ };
+ var $tr = fileList.add(fileData);
+ expect($tr.find('.date .modified').text()).toEqual('?');
+ });
it('adds new file to the end of the list', function() {
var $tr;
var fileData = {
@@ -644,6 +661,23 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.$fileList.find('input.filename').length).toEqual(0);
expect(fileList.$fileList.find('form').length).toEqual(0);
});
+ it('Restores thumbnail when rename was cancelled', function() {
+ doRename();
+
+ expect(OC.TestUtil.getImageUrl(fileList.findFileEl('Tu_after_three.txt').find('.thumbnail')))
+ .toEqual(OC.imagePath('core', 'loading.gif'));
+
+ fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
+ status: 'error',
+ data: {
+ message: 'Something went wrong'
+ }
+ }));
+
+ expect(fileList.findFileEl('One.txt').length).toEqual(1);
+ expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
+ .toEqual(OC.imagePath('core', 'filetypes/file.svg'));
+ });
});
describe('Moving files', function() {
beforeEach(function() {
@@ -738,6 +772,31 @@ describe('OCA.Files.FileList tests', function() {
expect(notificationStub.calledOnce).toEqual(true);
expect(notificationStub.getCall(0).args[0]).toEqual('Error while moving file');
});
+ it('Restores thumbnail if a file could not be moved', function() {
+ var request;
+ fileList.move('One.txt', '/somedir');
+
+ expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
+ .toEqual(OC.imagePath('core', 'loading.gif'));
+
+ expect(fakeServer.requests.length).toEqual(1);
+ request = fakeServer.requests[0];
+
+ fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
+ status: 'error',
+ data: {
+ message: 'Error while moving file',
+ }
+ }));
+
+ expect(fileList.findFileEl('One.txt').length).toEqual(1);
+
+ expect(notificationStub.calledOnce).toEqual(true);
+ expect(notificationStub.getCall(0).args[0]).toEqual('Error while moving file');
+
+ expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
+ .toEqual(OC.imagePath('core', 'filetypes/file.svg'));
+ });
});
describe('List rendering', function() {
it('renders a list of files using add()', function() {
@@ -951,8 +1010,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'testFile.txt'
};
var $tr = fileList.add(fileData);
- var $td = $tr.find('td.filename');
- expect(OC.TestUtil.getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
+ var $imgDiv = $tr.find('td.filename .thumbnail');
+ expect(OC.TestUtil.getImageUrl($imgDiv)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
expect(previewLoadStub.notCalled).toEqual(true);
});
it('renders default icon for dir when none provided and no preview is available', function() {
@@ -961,8 +1020,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'test dir'
};
var $tr = fileList.add(fileData);
- var $td = $tr.find('td.filename');
- expect(OC.TestUtil.getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/folder.svg');
+ var $imgDiv = $tr.find('td.filename .thumbnail');
+ expect(OC.TestUtil.getImageUrl($imgDiv)).toEqual(OC.webroot + '/core/img/filetypes/folder.svg');
expect(previewLoadStub.notCalled).toEqual(true);
});
it('renders provided icon for file when provided', function() {
@@ -972,8 +1031,8 @@ describe('OCA.Files.FileList tests', function() {
icon: OC.webroot + '/core/img/filetypes/application-pdf.svg'
};
var $tr = fileList.add(fileData);
- var $td = $tr.find('td.filename');
- expect(OC.TestUtil.getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/application-pdf.svg');
+ var $imgDiv = $tr.find('td.filename .thumbnail');
+ expect(OC.TestUtil.getImageUrl($imgDiv)).toEqual(OC.webroot + '/core/img/filetypes/application-pdf.svg');
expect(previewLoadStub.notCalled).toEqual(true);
});
it('renders preview when no icon was provided and preview is available', function() {
@@ -984,11 +1043,11 @@ describe('OCA.Files.FileList tests', function() {
};
var $tr = fileList.add(fileData);
var $td = $tr.find('td.filename');
- expect(OC.TestUtil.getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
+ expect(OC.TestUtil.getImageUrl($td.find('.thumbnail'))).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
expect(previewLoadStub.calledOnce).toEqual(true);
// third argument is callback
previewLoadStub.getCall(0).args[0].callback(OC.webroot + '/somepath.png');
- expect(OC.TestUtil.getImageUrl($td)).toEqual(OC.webroot + '/somepath.png');
+ expect(OC.TestUtil.getImageUrl($td.find('.thumbnail'))).toEqual(OC.webroot + '/somepath.png');
});
it('renders default file type icon when no icon was provided and no preview is available', function() {
var fileData = {
@@ -997,8 +1056,8 @@ describe('OCA.Files.FileList tests', function() {
isPreviewAvailable: false
};
var $tr = fileList.add(fileData);
- var $td = $tr.find('td.filename');
- expect(OC.TestUtil.getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
+ var $imgDiv = $tr.find('td.filename .thumbnail');
+ expect(OC.TestUtil.getImageUrl($imgDiv)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
expect(previewLoadStub.notCalled).toEqual(true);
});
});
@@ -1479,6 +1538,17 @@ describe('OCA.Files.FileList tests', function() {
$('.select-all').click();
expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(true);
});
+ it('show doesnt show the delete action if one or more files are not deletable', function () {
+ fileList.setFiles(testFiles);
+ $('#permissions').val(OC.PERMISSION_READ | OC.PERMISSION_DELETE);
+ $('.select-all').click();
+ expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(false);
+ testFiles[0].permissions = OC.PERMISSION_READ;
+ $('.select-all').click();
+ fileList.setFiles(testFiles);
+ $('.select-all').click();
+ expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(true);
+ });
});
describe('Actions', function() {
beforeEach(function() {
@@ -1495,7 +1565,8 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'text/plain',
type: 'file',
size: 12,
- etag: 'abc'
+ etag: 'abc',
+ permissions: OC.PERMISSION_ALL
});
expect(files[1]).toEqual({
id: 3,
@@ -1503,7 +1574,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'Three.pdf',
mimetype: 'application/pdf',
size: 58009,
- etag: '123'
+ etag: '123',
+ permissions: OC.PERMISSION_ALL
});
expect(files[2]).toEqual({
id: 4,
@@ -1511,7 +1583,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'somedir',
mimetype: 'httpd/unix-directory',
size: 250,
- etag: '456'
+ etag: '456',
+ permissions: OC.PERMISSION_ALL
});
});
it('Removing a file removes it from the selection', function() {
@@ -1524,7 +1597,8 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'text/plain',
type: 'file',
size: 12,
- etag: 'abc'
+ etag: 'abc',
+ permissions: OC.PERMISSION_ALL
});
expect(files[1]).toEqual({
id: 4,
@@ -1532,7 +1606,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'somedir',
mimetype: 'httpd/unix-directory',
size: 250,
- etag: '456'
+ etag: '456',
+ permissions: OC.PERMISSION_ALL
});
});
describe('Download', function() {
diff --git a/apps/files/tests/js/filesummarySpec.js b/apps/files/tests/js/filesummarySpec.js
index 5e39dd1d232..4c53b7d8b3a 100644
--- a/apps/files/tests/js/filesummarySpec.js
+++ b/apps/files/tests/js/filesummarySpec.js
@@ -85,4 +85,67 @@ describe('OCA.Files.FileSummary tests', function() {
expect(s.summary.totalFiles).toEqual(1);
expect(s.summary.totalSize).toEqual(127900);
});
+
+ it('renders filtered summary as text', function() {
+ var s = new FileSummary($container);
+ s.setSummary({
+ totalDirs: 5,
+ totalFiles: 2,
+ totalSize: 256000,
+ filter: 'foo'
+ });
+ expect($container.hasClass('hidden')).toEqual(false);
+ expect($container.find('.info').text()).toEqual('5 folders and 2 files match \'foo\'');
+ expect($container.find('.filesize').text()).toEqual('250 kB');
+ });
+ it('hides filtered summary when no files or folders', function() {
+ var s = new FileSummary($container);
+ s.setSummary({
+ totalDirs: 0,
+ totalFiles: 0,
+ totalSize: 0,
+ filter: 'foo'
+ });
+ expect($container.hasClass('hidden')).toEqual(true);
+ });
+ it('increases filtered summary when adding files', function() {
+ var s = new FileSummary($container);
+ s.setSummary({
+ totalDirs: 5,
+ totalFiles: 2,
+ totalSize: 256000,
+ filter: 'foo'
+ });
+ s.add({name: 'bar.txt', type: 'file', size: 256000});
+ s.add({name: 'foo.txt', type: 'file', size: 256001});
+ s.add({name: 'bar', type: 'dir', size: 100});
+ s.add({name: 'foo', type: 'dir', size: 102});
+ s.update();
+ expect($container.hasClass('hidden')).toEqual(false);
+ expect($container.find('.info').text()).toEqual('6 folders and 3 files match \'foo\'');
+ expect($container.find('.filesize').text()).toEqual('500 kB');
+ expect(s.summary.totalDirs).toEqual(6);
+ expect(s.summary.totalFiles).toEqual(3);
+ expect(s.summary.totalSize).toEqual(512103);
+ });
+ it('decreases filtered summary when removing files', function() {
+ var s = new FileSummary($container);
+ s.setSummary({
+ totalDirs: 5,
+ totalFiles: 2,
+ totalSize: 256000,
+ filter: 'foo'
+ });
+ s.remove({name: 'bar.txt', type: 'file', size: 128000});
+ s.remove({name: 'foo.txt', type: 'file', size: 127999});
+ s.remove({name: 'bar', type: 'dir', size: 100});
+ s.remove({name: 'foo', type: 'dir', size: 98});
+ s.update();
+ expect($container.hasClass('hidden')).toEqual(false);
+ expect($container.find('.info').text()).toEqual('4 folders and 1 file match \'foo\'');
+ expect($container.find('.filesize').text()).toEqual('125 kB');
+ expect(s.summary.totalDirs).toEqual(4);
+ expect(s.summary.totalFiles).toEqual(1);
+ expect(s.summary.totalSize).toEqual(127903);
+ });
});
diff --git a/apps/files/tests/js/tagspluginspec.js b/apps/files/tests/js/tagspluginspec.js
new file mode 100644
index 00000000000..66240575a5c
--- /dev/null
+++ b/apps/files/tests/js/tagspluginspec.js
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+describe('OCA.Files.TagsPlugin tests', function() {
+ var fileList;
+ var testFiles;
+
+ beforeEach(function() {
+ var $content = $('<div id="content"></div>');
+ $('#testArea').append($content);
+ // dummy file list
+ var $div = $(
+ '<div>' +
+ '<table id="filestable">' +
+ '<thead></thead>' +
+ '<tbody id="fileList"></tbody>' +
+ '</table>' +
+ '</div>');
+ $('#content').append($div);
+
+ fileList = new OCA.Files.FileList($div);
+ OCA.Files.TagsPlugin.attach(fileList);
+
+ testFiles = [{
+ id: 1,
+ type: 'file',
+ name: 'One.txt',
+ path: '/subdir',
+ mimetype: 'text/plain',
+ size: 12,
+ permissions: OC.PERMISSION_ALL,
+ etag: 'abc',
+ shareOwner: 'User One',
+ isShareMountPoint: false,
+ tags: ['tag1', 'tag2']
+ }];
+ });
+ afterEach(function() {
+ fileList.destroy();
+ fileList = null;
+ });
+
+ describe('Favorites icon', function() {
+ it('renders favorite icon and extra data', function() {
+ var $action, $tr;
+ fileList.setFiles(testFiles);
+ $tr = fileList.$el.find('tbody tr:first');
+ $action = $tr.find('.action-favorite');
+ expect($action.length).toEqual(1);
+ expect($action.hasClass('permanent')).toEqual(false);
+
+ expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2']);
+ expect($tr.attr('data-favorite')).not.toBeDefined();
+ });
+ it('renders permanent favorite icon and extra data', function() {
+ var $action, $tr;
+ testFiles[0].tags.push(OC.TAG_FAVORITE);
+ fileList.setFiles(testFiles);
+ $tr = fileList.$el.find('tbody tr:first');
+ $action = $tr.find('.action-favorite');
+ expect($action.length).toEqual(1);
+ expect($action.hasClass('permanent')).toEqual(true);
+
+ expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', OC.TAG_FAVORITE]);
+ expect($tr.attr('data-favorite')).toEqual('true');
+ });
+ it('adds has-favorites class on table', function() {
+ expect(fileList.$el.hasClass('has-favorites')).toEqual(true);
+ });
+ });
+ describe('Applying tags', function() {
+ it('sends request to server and updates icon', function() {
+ // TODO
+ fileList.setFiles(testFiles);
+ });
+ it('sends all tags to server when applyFileTags() is called ', function() {
+ // TODO
+ });
+ });
+});
diff --git a/apps/files/tests/service/tagservice.php b/apps/files/tests/service/tagservice.php
new file mode 100644
index 00000000000..158dd77e858
--- /dev/null
+++ b/apps/files/tests/service/tagservice.php
@@ -0,0 +1,121 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Files;
+
+use \OCA\Files\Service\TagService;
+
+class TagServiceTest extends \Test\TestCase {
+
+ /**
+ * @var string
+ */
+ private $user;
+
+ /**
+ * @var \OCP\Files\Folder
+ */
+ private $root;
+
+ /**
+ * @var \OCA\Files\Service\TagService
+ */
+ private $tagService;
+
+ /**
+ * @var \OCP\ITags
+ */
+ private $tagger;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->user = $this->getUniqueId('user');
+ \OC_User::createUser($this->user, 'test');
+ \OC_User::setUserId($this->user);
+ \OC_Util::setupFS($this->user);
+ /**
+ * @var \OCP\IUser
+ */
+ $user = new \OC\User\User($this->user, null);
+ /**
+ * @var \OCP\IUserSession
+ */
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $userSession->expects($this->any())
+ ->method('getUser')
+ ->withAnyParameters()
+ ->will($this->returnValue($user));
+
+ $this->root = \OC::$server->getUserFolder();
+
+ $this->tagger = \OC::$server->getTagManager()->load('files');
+ $this->tagService = new TagService(
+ $userSession,
+ $this->tagger,
+ $this->root
+ );
+ }
+
+ protected function tearDown() {
+ \OC_User::setUserId('');
+ \OC_User::deleteUser($this->user);
+ }
+
+ public function testUpdateFileTags() {
+ $tag1 = 'tag1';
+ $tag2 = 'tag2';
+
+ $subdir = $this->root->newFolder('subdir');
+ $testFile = $subdir->newFile('test.txt');
+ $testFile->putContent('test contents');
+
+ $fileId = $testFile->getId();
+
+ // set tags
+ $this->tagService->updateFileTags('subdir/test.txt', array($tag1, $tag2));
+
+ $this->assertEquals(array($fileId), $this->tagger->getIdsForTag($tag1));
+ $this->assertEquals(array($fileId), $this->tagger->getIdsForTag($tag2));
+
+ // remove tag
+ $result = $this->tagService->updateFileTags('subdir/test.txt', array($tag2));
+ $this->assertEquals(array(), $this->tagger->getIdsForTag($tag1));
+ $this->assertEquals(array($fileId), $this->tagger->getIdsForTag($tag2));
+
+ // clear tags
+ $result = $this->tagService->updateFileTags('subdir/test.txt', array());
+ $this->assertEquals(array(), $this->tagger->getIdsForTag($tag1));
+ $this->assertEquals(array(), $this->tagger->getIdsForTag($tag2));
+
+ // non-existing file
+ $caught = false;
+ try {
+ $this->tagService->updateFileTags('subdir/unexist.txt', array($tag1));
+ } catch (\OCP\Files\NotFoundException $e) {
+ $caught = true;
+ }
+ $this->assertTrue($caught);
+
+ $subdir->delete();
+ }
+}
+
diff --git a/apps/files/triggerupdate.php b/apps/files/triggerupdate.php
deleted file mode 100644
index 3f85da9913b..00000000000
--- a/apps/files/triggerupdate.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-require_once __DIR__ . '/../../lib/base.php';
-
-if (OC::$CLI) {
- if (count($argv) === 2) {
- $file = $argv[1];
- list(, $user) = explode('/', $file);
- OCP\JSON::checkUserExists($user);
- OC_Util::setupFS($user);
- $view = new \OC\Files\View('');
- /**
- * @var \OC\Files\Storage\Storage $storage
- */
- list($storage, $internalPath) = $view->resolvePath($file);
- $watcher = $storage->getWatcher($internalPath);
- $watcher->checkUpdate($internalPath);
- } else {
- echo "Usage: php triggerupdate.php /path/to/file\n";
- }
-} else {
- echo "This script can be run from the command line only\n";
-}
diff --git a/apps/files_encryption/ajax/adminrecovery.php b/apps/files_encryption/ajax/adminrecovery.php
index 684fd51ae13..503c15b53a9 100644
--- a/apps/files_encryption/ajax/adminrecovery.php
+++ b/apps/files_encryption/ajax/adminrecovery.php
@@ -7,7 +7,8 @@
*
* Script to handle admin settings for encrypted key recovery
*/
-use OCA\Encryption;
+
+use OCA\Files_Encryption\Helper;
\OCP\JSON::checkAdminUser();
\OCP\JSON::checkAppEnabled('files_encryption');
@@ -42,7 +43,7 @@ $recoveryKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'rec
if (isset($_POST['adminEnableRecovery']) && $_POST['adminEnableRecovery'] === '1') {
- $return = \OCA\Encryption\Helper::adminEnableRecovery($recoveryKeyId, $_POST['recoveryPassword']);
+ $return = Helper::adminEnableRecovery($recoveryKeyId, $_POST['recoveryPassword']);
// Return success or failure
if ($return) {
@@ -56,7 +57,7 @@ if (isset($_POST['adminEnableRecovery']) && $_POST['adminEnableRecovery'] === '1
isset($_POST['adminEnableRecovery'])
&& '0' === $_POST['adminEnableRecovery']
) {
- $return = \OCA\Encryption\Helper::adminDisableRecovery($_POST['recoveryPassword']);
+ $return = Helper::adminDisableRecovery($_POST['recoveryPassword']);
if ($return) {
$successMessage = $l->t('Recovery key successfully disabled');
diff --git a/apps/files_encryption/ajax/changeRecoveryPassword.php b/apps/files_encryption/ajax/changeRecoveryPassword.php
index bf647f2c8fa..3d31b12af7c 100644
--- a/apps/files_encryption/ajax/changeRecoveryPassword.php
+++ b/apps/files_encryption/ajax/changeRecoveryPassword.php
@@ -9,8 +9,6 @@
*
*/
-use OCA\Encryption;
-
\OCP\JSON::checkAdminUser();
\OCP\JSON::checkAppEnabled('files_encryption');
\OCP\JSON::callCheck();
@@ -49,22 +47,21 @@ if ($_POST['newPassword'] !== $_POST['confirmPassword']) {
}
$view = new \OC\Files\View('/');
-$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \OCP\User::getUser());
+$util = new \OCA\Files_Encryption\Util(new \OC\Files\View('/'), \OCP\User::getUser());
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
$keyId = $util->getRecoveryKeyId();
-$keyPath = '/owncloud_private_key/' . $keyId . '.private.key';
-$encryptedRecoveryKey = $view->file_get_contents($keyPath);
-$decryptedRecoveryKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedRecoveryKey, $oldPassword);
+$encryptedRecoveryKey = \OCA\Files_Encryption\Keymanager::getPrivateSystemKey($keyId);
+$decryptedRecoveryKey = $encryptedRecoveryKey ? \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedRecoveryKey, $oldPassword) : false;
if ($decryptedRecoveryKey) {
- $cipher = \OCA\Encryption\Helper::getCipher();
- $encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword, $cipher);
+ $cipher = \OCA\Files_Encryption\Helper::getCipher();
+ $encryptedKey = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword, $cipher);
if ($encryptedKey) {
- \OCA\Encryption\Keymanager::setPrivateSystemKey($encryptedKey, $keyId . '.private.key');
+ \OCA\Files_Encryption\Keymanager::setPrivateSystemKey($encryptedKey, $keyId);
$return = true;
}
}
diff --git a/apps/files_encryption/ajax/getMigrationStatus.php b/apps/files_encryption/ajax/getMigrationStatus.php
index adceb949044..bb260199b19 100644
--- a/apps/files_encryption/ajax/getMigrationStatus.php
+++ b/apps/files_encryption/ajax/getMigrationStatus.php
@@ -6,7 +6,8 @@
*
* check migration status
*/
-use OCA\Encryption\Util;
+
+use OCA\Files_Encryption\Util;
\OCP\JSON::checkAppEnabled('files_encryption');
diff --git a/apps/files_encryption/ajax/updatePrivateKeyPassword.php b/apps/files_encryption/ajax/updatePrivateKeyPassword.php
index 0f182e93831..7161b0cff92 100644
--- a/apps/files_encryption/ajax/updatePrivateKeyPassword.php
+++ b/apps/files_encryption/ajax/updatePrivateKeyPassword.php
@@ -9,8 +9,6 @@
*
*/
-use OCA\Encryption;
-
\OCP\JSON::checkLoggedIn();
\OCP\JSON::checkAppEnabled('files_encryption');
\OCP\JSON::callCheck();
@@ -24,27 +22,26 @@ $oldPassword = $_POST['oldPassword'];
$newPassword = $_POST['newPassword'];
$view = new \OC\Files\View('/');
-$session = new \OCA\Encryption\Session($view);
+$session = new \OCA\Files_Encryption\Session($view);
$user = \OCP\User::getUser();
+$loginName = \OC::$server->getUserSession()->getLoginName();
// check new password
-$passwordCorrect = \OCP\User::checkPassword($user, $newPassword);
+$passwordCorrect = \OCP\User::checkPassword($loginName, $newPassword);
if ($passwordCorrect !== false) {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
-$keyPath = '/' . $user . '/files_encryption/' . $user . '.private.key';
-
-$encryptedKey = $view->file_get_contents($keyPath);
-$decryptedKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, $oldPassword);
+$encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, $user);
+$decryptedKey = $encryptedKey ? \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, $oldPassword) : false;
if ($decryptedKey) {
- $cipher = \OCA\Encryption\Helper::getCipher();
- $encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedKey, $newPassword, $cipher);
+ $cipher = \OCA\Files_Encryption\Helper::getCipher();
+ $encryptedKey = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($decryptedKey, $newPassword, $cipher);
if ($encryptedKey) {
- \OCA\Encryption\Keymanager::setPrivateKey($encryptedKey, $user);
+ \OCA\Files_Encryption\Keymanager::setPrivateKey($encryptedKey, $user);
$session->setPrivateKey($decryptedKey);
$return = true;
}
@@ -62,7 +59,7 @@ if ($decryptedKey) {
// success or failure
if ($return) {
- $session->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL);
+ $session->setInitialized(\OCA\Files_Encryption\Session::INIT_SUCCESSFUL);
\OCP\JSON::success(array('data' => array('message' => $l->t('Private key password successfully updated.'))));
} else {
\OCP\JSON::error(array('data' => array('message' => $errorMessage)));
diff --git a/apps/files_encryption/ajax/userrecovery.php b/apps/files_encryption/ajax/userrecovery.php
index a5b89fa7233..e49fee83a36 100644
--- a/apps/files_encryption/ajax/userrecovery.php
+++ b/apps/files_encryption/ajax/userrecovery.php
@@ -7,8 +7,6 @@
* Script to handle admin settings for encrypted key recovery
*/
-use OCA\Encryption;
-
\OCP\JSON::checkLoggedIn();
\OCP\JSON::checkAppEnabled('files_encryption');
\OCP\JSON::callCheck();
@@ -22,7 +20,7 @@ if (
$userId = \OCP\USER::getUser();
$view = new \OC\Files\View('/');
- $util = new \OCA\Encryption\Util($view, $userId);
+ $util = new \OCA\Files_Encryption\Util($view, $userId);
// Save recovery preference to DB
$return = $util->setRecoveryForUser($_POST['userEnableRecovery']);
diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php
index aa709fbac65..f2dc63c340d 100644
--- a/apps/files_encryption/appinfo/app.php
+++ b/apps/files_encryption/appinfo/app.php
@@ -1,40 +1,26 @@
<?php
-OC::$CLASSPATH['OCA\Encryption\Crypt'] = 'files_encryption/lib/crypt.php';
-OC::$CLASSPATH['OCA\Encryption\Hooks'] = 'files_encryption/hooks/hooks.php';
-OC::$CLASSPATH['OCA\Encryption\Util'] = 'files_encryption/lib/util.php';
-OC::$CLASSPATH['OCA\Encryption\Keymanager'] = 'files_encryption/lib/keymanager.php';
-OC::$CLASSPATH['OCA\Encryption\Stream'] = 'files_encryption/lib/stream.php';
-OC::$CLASSPATH['OCA\Encryption\Proxy'] = 'files_encryption/lib/proxy.php';
-OC::$CLASSPATH['OCA\Encryption\Session'] = 'files_encryption/lib/session.php';
-OC::$CLASSPATH['OCA\Encryption\Capabilities'] = 'files_encryption/lib/capabilities.php';
-OC::$CLASSPATH['OCA\Encryption\Helper'] = 'files_encryption/lib/helper.php';
-
-// Exceptions
-OC::$CLASSPATH['OCA\Encryption\Exceptions\MultiKeyEncryptException'] = 'files_encryption/lib/exceptions.php';
-OC::$CLASSPATH['OCA\Encryption\Exceptions\MultiKeyDecryptException'] = 'files_encryption/lib/exceptions.php';
-
\OCP\Util::addTranslations('files_encryption');
\OCP\Util::addscript('files_encryption', 'encryption');
\OCP\Util::addscript('files_encryption', 'detect-migration');
if (!OC_Config::getValue('maintenance', false)) {
- OC_FileProxy::register(new OCA\Encryption\Proxy());
+ OC_FileProxy::register(new OCA\Files_Encryption\Proxy());
// User related hooks
- OCA\Encryption\Helper::registerUserHooks();
+ OCA\Files_Encryption\Helper::registerUserHooks();
// Sharing related hooks
- OCA\Encryption\Helper::registerShareHooks();
+ OCA\Files_Encryption\Helper::registerShareHooks();
// Filesystem related hooks
- OCA\Encryption\Helper::registerFilesystemHooks();
+ OCA\Files_Encryption\Helper::registerFilesystemHooks();
// App manager related hooks
- OCA\Encryption\Helper::registerAppHooks();
+ OCA\Files_Encryption\Helper::registerAppHooks();
if(!in_array('crypt', stream_get_wrappers())) {
- stream_wrapper_register('crypt', 'OCA\Encryption\Stream');
+ stream_wrapper_register('crypt', 'OCA\Files_Encryption\Stream');
}
} else {
// logout user if we are in maintenance to force re-login
diff --git a/apps/files_encryption/appinfo/routes.php b/apps/files_encryption/appinfo/routes.php
index 97635ae1236..9733c17fe95 100644
--- a/apps/files_encryption/appinfo/routes.php
+++ b/apps/files_encryption/appinfo/routes.php
@@ -19,4 +19,4 @@ $this->create('files_encryption_ajax_userrecovery', 'ajax/userrecovery.php')
->actionInclude('files_encryption/ajax/userrecovery.php');
// Register with the capabilities API
-OC_API::register('get', '/cloud/capabilities', array('OCA\Encryption\Capabilities', 'getCapabilities'), 'files_encryption', OC_API::USER_AUTH);
+OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Encryption\Capabilities', 'getCapabilities'), 'files_encryption', OC_API::USER_AUTH);
diff --git a/apps/files_encryption/appinfo/update.php b/apps/files_encryption/appinfo/update.php
index a29667ec6b6..957cf746974 100644
--- a/apps/files_encryption/appinfo/update.php
+++ b/apps/files_encryption/appinfo/update.php
@@ -4,7 +4,8 @@ use OCA\Files_Encryption\Migration;
$installedVersion=OCP\Config::getAppValue('files_encryption', 'installed_version');
-if (version_compare($installedVersion, '0.6', '<')) {
+// Migration OC7 -> OC8
+if (version_compare($installedVersion, '0.7', '<')) {
$m = new Migration();
- $m->dropTableEncryption();
+ $m->reorganizeFolderStructure();
}
diff --git a/apps/files_encryption/appinfo/version b/apps/files_encryption/appinfo/version
index ee6cdce3c29..faef31a4357 100644
--- a/apps/files_encryption/appinfo/version
+++ b/apps/files_encryption/appinfo/version
@@ -1 +1 @@
-0.6.1
+0.7.0
diff --git a/apps/files_encryption/exception/encryptionexception.php b/apps/files_encryption/exception/encryptionexception.php
new file mode 100644
index 00000000000..2fb679e91d2
--- /dev/null
+++ b/apps/files_encryption/exception/encryptionexception.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Encryption\Exception;
+
+/**
+ * Base class for all encryption exception
+ *
+ * Possible Error Codes:
+ * 10 - generic error
+ * 20 - unexpected end of encryption header
+ * 30 - unexpected blog size
+ * 40 - encryption header to large
+ * 50 - unknown cipher
+ * 60 - encryption failed
+ * 70 - decryption failed
+ * 80 - empty data
+ * 90 - private key missing
+ */
+class EncryptionException extends \Exception {
+ const GENERIC = 10;
+ const UNEXPECTED_END_OF_ENCRYPTION_HEADER = 20;
+ const UNEXPECTED_BLOG_SIZE = 30;
+ const ENCRYPTION_HEADER_TO_LARGE = 40;
+ const UNKNOWN_CIPHER = 50;
+ const ENCRYPTION_FAILED = 60;
+ const DECRYPTION_FAILED = 70;
+ const EMPTY_DATA = 80;
+ const PRIVATE_KEY_MISSING = 90;
+}
diff --git a/apps/files_encryption/lib/exceptions.php b/apps/files_encryption/exception/multikeydecryptexception.php
index 3ea27faf406..9ab10fd3e63 100644
--- a/apps/files_encryption/lib/exceptions.php
+++ b/apps/files_encryption/exception/multikeydecryptexception.php
@@ -2,8 +2,9 @@
/**
* ownCloud
*
- * @author Bjoern Schiessle
- * @copyright 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -20,36 +21,14 @@
*
*/
-namespace OCA\Encryption\Exceptions;
-
-/**
- * General encryption exception
- * Possible Error Codes:
- * 10 - unexpected end of encryption header
- * 20 - unexpected blog size
- * 30 - encryption header to large
- * 40 - unknown cipher
- * 50 - encryption failed
- */
-class EncryptionException extends \Exception {
-}
-
-/**
- * Throw this exception if multi key encrytion fails
- *
- * Possible error codes:
- * 10 - empty plain content was given
- * 20 - openssl_seal failed
- */
-class MultiKeyEncryptException extends EncryptionException {
-}
+namespace OCA\Files_Encryption\Exception;
/**
* Throw this encryption if multi key decryption failed
*
* Possible error codes:
- * 10 - empty encrypted content was given
- * 20 - openssl_open failed
+ * 110 - openssl_open failed
*/
class MultiKeyDecryptException extends EncryptionException {
+ const OPENSSL_OPEN_FAILED = 110;
}
diff --git a/apps/files_encryption/exception/multikeyencryptexception.php b/apps/files_encryption/exception/multikeyencryptexception.php
new file mode 100644
index 00000000000..2dc8216abaa
--- /dev/null
+++ b/apps/files_encryption/exception/multikeyencryptexception.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Encryption\Exception;
+
+/**
+ * Throw this exception if multi key encrytion fails
+ *
+ * Possible error codes:
+ * 110 - openssl_seal failed
+ */
+class MultiKeyEncryptException extends EncryptionException {
+ const OPENSSL_SEAL_FAILED = 110;
+}
diff --git a/apps/files_encryption/files/error.php b/apps/files_encryption/files/error.php
index b801c17bd40..4a1ed021f7c 100644
--- a/apps/files_encryption/files/error.php
+++ b/apps/files_encryption/files/error.php
@@ -12,14 +12,14 @@ if (!isset($_)) { //also provide standalone error page
if (isset($_GET['errorCode'])) {
$errorCode = $_GET['errorCode'];
switch ($errorCode) {
- case \OCA\Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR:
+ case \OCA\Files_Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR:
$errorMsg = $l->t('Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app.');
break;
- case \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR:
+ case \OCA\Files_Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR:
$theme = new OC_Defaults();
$errorMsg = $l->t('Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files.', array($theme->getName()));
break;
- case \OCA\Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND:
+ case \OCA\Files_Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND:
$errorMsg = $l->t('Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you.');
break;
default:
@@ -27,7 +27,7 @@ if (!isset($_)) { //also provide standalone error page
break;
}
} else {
- $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR;
+ $errorCode = \OCA\Files_Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR;
$errorMsg = $l->t("Unknown error. Please check your system settings or contact your administrator");
}
diff --git a/apps/files_encryption/js/encryption.js b/apps/files_encryption/js/encryption.js
index 65ffabe55e6..d2d1c3a1fc5 100644
--- a/apps/files_encryption/js/encryption.js
+++ b/apps/files_encryption/js/encryption.js
@@ -5,6 +5,10 @@
* See the COPYING-README file.
*/
+/**
+ * @namespace
+ * @memberOf OC
+ */
OC.Encryption={
MIGRATION_OPEN:0,
MIGRATION_COMPLETED:1,
diff --git a/apps/files_encryption/l10n/ar.js b/apps/files_encryption/l10n/ar.js
index b1af4358241..ce9c2e91fb8 100644
--- a/apps/files_encryption/l10n/ar.js
+++ b/apps/files_encryption/l10n/ar.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "تم تغيير كلمة المرور بنجاح.",
"Could not change the password. Maybe the old password was not correct." : "تعذر تغيير كلمة المرور. من الممكن ان كلمة المرور القديمة غير صحيحة.",
"Private key password successfully updated." : "تم تحديث كلمة المرور للمفتاح الخاص بنجاح.",
- "Could not update the private key password. Maybe the old password was not correct." : "لا يمكن تحديث كلمة مرور المفتاح الخاص. من الممكن ان كلمة المرور القديمة غير صحيحة.",
"File recovery settings updated" : "اعدادات ملف الاستعادة تم تحديثه",
"Could not update file recovery" : "تعذر تحديث ملف الاستعادة",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "برنامج التشفير لم يتم تهيئتة ! من الممكن ان برنامج التشفير تم اعادة تفعيلة خلال الجلسة. يرجى تسجيل الخروج ومن ثم تسجيل الدخول مجددا لتهيئة برنامج التشفير.",
@@ -16,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "لا يمكن فك التشفير من هذا الملف, من الممكن ان يكون هذا الملف مُشارك. يرجى سؤال صاحب الملف لإعادة مشاركتة معك.",
"Unknown error. Please check your system settings or contact your administrator" : "خطأ غير معروف, الرجاء التحقق من إعدادات نظامك أو راسل المدير",
"Missing requirements." : "متطلبات ناقصة.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "يرجى التاكد من ان اصدار PHP 5.3.3 او احدث , مثبت و التاكد من ان OpenSSL مفعل و مهيئ بشكل صحيح. حتى الان برنامج التتشفير تم تعطيلة.",
"Following users are not set up for encryption:" : "المستخدمين التاليين لم يتم تعيين لهم التشفيير:",
"Initial encryption started... This can take some time. Please wait." : "بدأ التشفير... من الممكن ان ياخذ بعض الوقت. يرجى الانتظار.",
"Initial encryption running... Please try again later." : "جاري تفعيل التشفير المبدئي ، الرجاء المحاولة لاحقا",
diff --git a/apps/files_encryption/l10n/ar.json b/apps/files_encryption/l10n/ar.json
index f65d0c7b327..d43201b8cd5 100644
--- a/apps/files_encryption/l10n/ar.json
+++ b/apps/files_encryption/l10n/ar.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "تم تغيير كلمة المرور بنجاح.",
"Could not change the password. Maybe the old password was not correct." : "تعذر تغيير كلمة المرور. من الممكن ان كلمة المرور القديمة غير صحيحة.",
"Private key password successfully updated." : "تم تحديث كلمة المرور للمفتاح الخاص بنجاح.",
- "Could not update the private key password. Maybe the old password was not correct." : "لا يمكن تحديث كلمة مرور المفتاح الخاص. من الممكن ان كلمة المرور القديمة غير صحيحة.",
"File recovery settings updated" : "اعدادات ملف الاستعادة تم تحديثه",
"Could not update file recovery" : "تعذر تحديث ملف الاستعادة",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "برنامج التشفير لم يتم تهيئتة ! من الممكن ان برنامج التشفير تم اعادة تفعيلة خلال الجلسة. يرجى تسجيل الخروج ومن ثم تسجيل الدخول مجددا لتهيئة برنامج التشفير.",
@@ -14,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "لا يمكن فك التشفير من هذا الملف, من الممكن ان يكون هذا الملف مُشارك. يرجى سؤال صاحب الملف لإعادة مشاركتة معك.",
"Unknown error. Please check your system settings or contact your administrator" : "خطأ غير معروف, الرجاء التحقق من إعدادات نظامك أو راسل المدير",
"Missing requirements." : "متطلبات ناقصة.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "يرجى التاكد من ان اصدار PHP 5.3.3 او احدث , مثبت و التاكد من ان OpenSSL مفعل و مهيئ بشكل صحيح. حتى الان برنامج التتشفير تم تعطيلة.",
"Following users are not set up for encryption:" : "المستخدمين التاليين لم يتم تعيين لهم التشفيير:",
"Initial encryption started... This can take some time. Please wait." : "بدأ التشفير... من الممكن ان ياخذ بعض الوقت. يرجى الانتظار.",
"Initial encryption running... Please try again later." : "جاري تفعيل التشفير المبدئي ، الرجاء المحاولة لاحقا",
diff --git a/apps/files_encryption/l10n/ast.js b/apps/files_encryption/l10n/ast.js
index 2252f302aaa..c350f3605c2 100644
--- a/apps/files_encryption/l10n/ast.js
+++ b/apps/files_encryption/l10n/ast.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "Camudóse la contraseña",
"Could not change the password. Maybe the old password was not correct." : "Nun pudo camudase la contraseña. Comprueba que la contraseña actual seya correuta.",
"Private key password successfully updated." : "Contraseña de clave privada anovada correchamente.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nun pudo camudase la contraseña. Pue que la contraseña antigua nun seya correuta.",
"File recovery settings updated" : "Opciones de recuperación de ficheros anovada",
"Could not update file recovery" : "Nun pudo anovase la recuperación de ficheros",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡L'aplicación de cifráu nun s'anició! Seique se restableciera mentanto la sesión. Por favor intenta zarrar la sesión y volver a aniciala p'aniciar l'aplicación de cifráu.",
@@ -16,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Fallu desconocíu. Por favor, comprueba los axustes del sistema o contauta col alministrador",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrate de que PHP 5.3.3 o postreru ta instaláu y que la estensión OpenSSL de PHP ta habilitada y configurada correutamente. Pel momentu, l'aplicación de cifráu deshabilitóse.",
"Following users are not set up for encryption:" : "Los siguientes usuarios nun se configuraron pal cifráu:",
"Initial encryption started... This can take some time. Please wait." : "Cifráu aniciáu..... Esto pue llevar un tiempu. Por favor espera.",
"Initial encryption running... Please try again later." : "Cifráu inicial en cursu... Inténtalo dempués.",
diff --git a/apps/files_encryption/l10n/ast.json b/apps/files_encryption/l10n/ast.json
index 4c1edefea97..6418e044717 100644
--- a/apps/files_encryption/l10n/ast.json
+++ b/apps/files_encryption/l10n/ast.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "Camudóse la contraseña",
"Could not change the password. Maybe the old password was not correct." : "Nun pudo camudase la contraseña. Comprueba que la contraseña actual seya correuta.",
"Private key password successfully updated." : "Contraseña de clave privada anovada correchamente.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nun pudo camudase la contraseña. Pue que la contraseña antigua nun seya correuta.",
"File recovery settings updated" : "Opciones de recuperación de ficheros anovada",
"Could not update file recovery" : "Nun pudo anovase la recuperación de ficheros",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡L'aplicación de cifráu nun s'anició! Seique se restableciera mentanto la sesión. Por favor intenta zarrar la sesión y volver a aniciala p'aniciar l'aplicación de cifráu.",
@@ -14,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Fallu desconocíu. Por favor, comprueba los axustes del sistema o contauta col alministrador",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrate de que PHP 5.3.3 o postreru ta instaláu y que la estensión OpenSSL de PHP ta habilitada y configurada correutamente. Pel momentu, l'aplicación de cifráu deshabilitóse.",
"Following users are not set up for encryption:" : "Los siguientes usuarios nun se configuraron pal cifráu:",
"Initial encryption started... This can take some time. Please wait." : "Cifráu aniciáu..... Esto pue llevar un tiempu. Por favor espera.",
"Initial encryption running... Please try again later." : "Cifráu inicial en cursu... Inténtalo dempués.",
diff --git a/apps/files_encryption/l10n/bg_BG.js b/apps/files_encryption/l10n/bg_BG.js
index a117818ba84..258c9d2723e 100644
--- a/apps/files_encryption/l10n/bg_BG.js
+++ b/apps/files_encryption/l10n/bg_BG.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Моля, въведи повторна новата парола за възстановяване",
"Password successfully changed." : "Паролата е успешно променена.",
"Could not change the password. Maybe the old password was not correct." : "Грешка при промяна на паролата. Може би старата ти парола е сгрешена.",
+ "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." : "Успешно променена тайната парола за ключа.",
- "Could not update the private key password. Maybe the old password was not correct." : "Неуспешна промяна на тайната парола за ключа. Може би старата парола е грешно въведена.",
"File recovery settings updated" : "Настройките за възстановяване на файлове са променени.",
"Could not update file recovery" : "Неуспешна промяна на настройките за възстановяване на файлове.",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Неуспешна инициализация на криптиращото приложение! Може би криптиращото приложение бе включено по време на твоята сесия. Отпиши се и се впиши обратно за да инциализираш криптиращото приложение.",
@@ -22,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.",
"Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Моля, провери системните настройки или се свържи с администратора.",
"Missing requirements." : "Липсва задължителна информация.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Моля, увери се, че PHP 5.3.3 или по-нова версия е инсталирана, и че OpenSSL заедно съответната PHP добавка са включени и правилно настроени. За сега, криптиращото приложение ще бъде изключено.",
"Following users are not set up for encryption:" : "Следните потребители не са настроени за криптиране:",
"Initial encryption started... This can take some time. Please wait." : "Първоначалното криптиране започна... Това може да отнеме време. Моля изчакай.",
"Initial encryption running... Please try again later." : "Тече първоначално криптиране... Моля опитай по-късно.",
diff --git a/apps/files_encryption/l10n/bg_BG.json b/apps/files_encryption/l10n/bg_BG.json
index 74ac2593091..8a2abbfc5c4 100644
--- a/apps/files_encryption/l10n/bg_BG.json
+++ b/apps/files_encryption/l10n/bg_BG.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Моля, въведи повторна новата парола за възстановяване",
"Password successfully changed." : "Паролата е успешно променена.",
"Could not change the password. Maybe the old password was not correct." : "Грешка при промяна на паролата. Може би старата ти парола е сгрешена.",
+ "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." : "Успешно променена тайната парола за ключа.",
- "Could not update the private key password. Maybe the old password was not correct." : "Неуспешна промяна на тайната парола за ключа. Може би старата парола е грешно въведена.",
"File recovery settings updated" : "Настройките за възстановяване на файлове са променени.",
"Could not update file recovery" : "Неуспешна промяна на настройките за възстановяване на файлове.",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Неуспешна инициализация на криптиращото приложение! Може би криптиращото приложение бе включено по време на твоята сесия. Отпиши се и се впиши обратно за да инциализираш криптиращото приложение.",
@@ -20,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.",
"Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Моля, провери системните настройки или се свържи с администратора.",
"Missing requirements." : "Липсва задължителна информация.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Моля, увери се, че PHP 5.3.3 или по-нова версия е инсталирана, и че OpenSSL заедно съответната PHP добавка са включени и правилно настроени. За сега, криптиращото приложение ще бъде изключено.",
"Following users are not set up for encryption:" : "Следните потребители не са настроени за криптиране:",
"Initial encryption started... This can take some time. Please wait." : "Първоначалното криптиране започна... Това може да отнеме време. Моля изчакай.",
"Initial encryption running... Please try again later." : "Тече първоначално криптиране... Моля опитай по-късно.",
diff --git a/apps/files_encryption/l10n/bs.js b/apps/files_encryption/l10n/bs.js
new file mode 100644
index 00000000000..1dc094cc436
--- /dev/null
+++ b/apps/files_encryption/l10n/bs.js
@@ -0,0 +1,10 @@
+OC.L10N.register(
+ "files_encryption",
+ {
+ "Unknown error" : "Nepoznata greška",
+ "Encryption" : "Šifriranje",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
+ "Enabled" : "Aktivirano",
+ "Disabled" : "Onemogućeno"
+},
+"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_encryption/l10n/bs.json b/apps/files_encryption/l10n/bs.json
new file mode 100644
index 00000000000..e2085f953cc
--- /dev/null
+++ b/apps/files_encryption/l10n/bs.json
@@ -0,0 +1,8 @@
+{ "translations": {
+ "Unknown error" : "Nepoznata greška",
+ "Encryption" : "Šifriranje",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
+ "Enabled" : "Aktivirano",
+ "Disabled" : "Onemogućeno"
+},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
+} \ No newline at end of file
diff --git a/apps/files_encryption/l10n/ca.js b/apps/files_encryption/l10n/ca.js
index e443d384ac2..033792d4233 100644
--- a/apps/files_encryption/l10n/ca.js
+++ b/apps/files_encryption/l10n/ca.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "La contrasenya s'ha canviat.",
"Could not change the password. Maybe the old password was not correct." : "No s'ha pogut canviar la contrasenya. Potser la contrasenya anterior no era correcta.",
"Private key password successfully updated." : "La contrasenya de la clau privada s'ha actualitzat.",
- "Could not update the private key password. Maybe the old password was not correct." : "No s'ha pogut actualitzar la contrasenya de la clau privada. Potser la contrasenya anterior no era correcta.",
"File recovery settings updated" : "S'han actualitzat els arranjaments de recuperació de fitxers",
"Could not update file recovery" : "No s'ha pogut actualitzar la recuperació de fitxers",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'aplicació d'encriptació no està inicialitzada! Potser l'aplicació d'encriptació ha estat reiniciada durant la sessió. Intenteu sortir i acreditar-vos de nou per reinicialitzar l'aplicació d'encriptació.",
@@ -16,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconegut. Comproveu l'arranjament del sistema o aviseu a l'administrador",
"Missing requirements." : "Manca de requisits.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assegureu-vos que teniu instal·lat PHP 5.3.3 o una versió superior i que està activat Open SSL i habilitada i configurada correctament l'extensió de PHP. De moment, l'aplicació d'encriptació s'ha desactivat.",
"Following users are not set up for encryption:" : "Els usuaris següents no estan configurats per a l'encriptació:",
"Initial encryption started... This can take some time. Please wait." : "La encriptació inicial ha començat... Pot trigar una estona, espereu.",
"Initial encryption running... Please try again later." : "encriptació inicial en procés... Proveu-ho més tard.",
diff --git a/apps/files_encryption/l10n/ca.json b/apps/files_encryption/l10n/ca.json
index a65fbf9c88e..85130ff900e 100644
--- a/apps/files_encryption/l10n/ca.json
+++ b/apps/files_encryption/l10n/ca.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "La contrasenya s'ha canviat.",
"Could not change the password. Maybe the old password was not correct." : "No s'ha pogut canviar la contrasenya. Potser la contrasenya anterior no era correcta.",
"Private key password successfully updated." : "La contrasenya de la clau privada s'ha actualitzat.",
- "Could not update the private key password. Maybe the old password was not correct." : "No s'ha pogut actualitzar la contrasenya de la clau privada. Potser la contrasenya anterior no era correcta.",
"File recovery settings updated" : "S'han actualitzat els arranjaments de recuperació de fitxers",
"Could not update file recovery" : "No s'ha pogut actualitzar la recuperació de fitxers",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'aplicació d'encriptació no està inicialitzada! Potser l'aplicació d'encriptació ha estat reiniciada durant la sessió. Intenteu sortir i acreditar-vos de nou per reinicialitzar l'aplicació d'encriptació.",
@@ -14,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconegut. Comproveu l'arranjament del sistema o aviseu a l'administrador",
"Missing requirements." : "Manca de requisits.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assegureu-vos que teniu instal·lat PHP 5.3.3 o una versió superior i que està activat Open SSL i habilitada i configurada correctament l'extensió de PHP. De moment, l'aplicació d'encriptació s'ha desactivat.",
"Following users are not set up for encryption:" : "Els usuaris següents no estan configurats per a l'encriptació:",
"Initial encryption started... This can take some time. Please wait." : "La encriptació inicial ha començat... Pot trigar una estona, espereu.",
"Initial encryption running... Please try again later." : "encriptació inicial en procés... Proveu-ho més tard.",
diff --git a/apps/files_encryption/l10n/cs_CZ.js b/apps/files_encryption/l10n/cs_CZ.js
index 3c3b54e67f3..d25536cfd7b 100644
--- a/apps/files_encryption/l10n/cs_CZ.js
+++ b/apps/files_encryption/l10n/cs_CZ.js
@@ -8,24 +8,26 @@ OC.L10N.register(
"Recovery key successfully enabled" : "Záchranný klíč byl úspěšně povolen",
"Could not disable recovery key. Please check your recovery key password!" : "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo vašeho záchranného klíče!",
"Recovery key successfully disabled" : "Záchranný klíč byl úspěšně zakázán",
- "Please provide the old recovery password" : "Zapište prosím staré heslo pro obnovu",
- "Please provide a new recovery password" : "Zapište prosím nové heslo pro obnovu",
+ "Please provide the old recovery password" : "Zadejte prosím staré heslo pro obnovu",
+ "Please provide a new recovery password" : "Zadejte prosím nové heslo pro obnovu",
"Please repeat the new recovery password" : "Zopakujte prosím nové heslo pro obnovu",
"Password successfully changed." : "Heslo bylo úspěšně změněno.",
"Could not change the password. Maybe the old password was not correct." : "Změna hesla se nezdařila. Pravděpodobně nebylo stávající heslo zadáno správně.",
+ "Could not update the private key password." : "Nelze aktualizovat heslo soukromého klíče.",
+ "The old password was not correct, please try again." : "Staré heslo nebylo zadáno správně, zkuste to prosím znovu.",
+ "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.",
"Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nelze aktualizovat heslo soukromého klíče. Možná nebylo staré heslo správně.",
"File recovery settings updated" : "Možnosti záchrany souborů aktualizovány",
"Could not update file recovery" : "Nelze nastavit záchranu souborů",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplikace pro šifrování není inicializována! Je možné, že aplikace byla znovu aktivována během vašeho přihlášení. Zkuste se prosím odhlásit a znovu přihlásit pro provedení inicializace šifrovací aplikace.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Váš soukromý klíč není platný! Pravděpodobně bylo vaše heslo změněno vně systému %s (např. ve vašem firemním adresáři). Heslo vašeho soukromého klíče můžete změnit ve svém osobním nastavení pro obnovení přístupu k vašim zašifrovaným souborům.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznámá chyba. Zkontrolujte nastavení systému nebo kontaktujte vašeho správce.",
- "Missing requirements." : "Nesplněné závislosti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Ujistěte se prosím, že máte nainstalované PHP 5.3.3 nebo novější a že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Prozatím byla aplikace pro šifrování vypnuta.",
- "Following users are not set up for encryption:" : "Následující uživatelé nemají nastavené šifrování:",
"Initial encryption started... This can take some time. Please wait." : "Počáteční šifrování zahájeno... Toto může chvíli trvat. Počkejte prosím.",
"Initial encryption running... Please try again later." : "Probíhá počáteční šifrování... Zkuste to prosím znovu později.",
+ "Missing requirements." : "Nesplněné závislosti.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Ujistěte se prosím, že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Aplikace pro šifrování byla prozatím vypnuta.",
+ "Following users are not set up for encryption:" : "Následující uživatelé nemají nastavené šifrování:",
"Go directly to your %spersonal settings%s." : "Přejít přímo do svého %sosobního nastavení%s.",
"Encryption" : "Šifrování",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
diff --git a/apps/files_encryption/l10n/cs_CZ.json b/apps/files_encryption/l10n/cs_CZ.json
index 5bd5bb54f01..2dad822877d 100644
--- a/apps/files_encryption/l10n/cs_CZ.json
+++ b/apps/files_encryption/l10n/cs_CZ.json
@@ -6,24 +6,26 @@
"Recovery key successfully enabled" : "Záchranný klíč byl úspěšně povolen",
"Could not disable recovery key. Please check your recovery key password!" : "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo vašeho záchranného klíče!",
"Recovery key successfully disabled" : "Záchranný klíč byl úspěšně zakázán",
- "Please provide the old recovery password" : "Zapište prosím staré heslo pro obnovu",
- "Please provide a new recovery password" : "Zapište prosím nové heslo pro obnovu",
+ "Please provide the old recovery password" : "Zadejte prosím staré heslo pro obnovu",
+ "Please provide a new recovery password" : "Zadejte prosím nové heslo pro obnovu",
"Please repeat the new recovery password" : "Zopakujte prosím nové heslo pro obnovu",
"Password successfully changed." : "Heslo bylo úspěšně změněno.",
"Could not change the password. Maybe the old password was not correct." : "Změna hesla se nezdařila. Pravděpodobně nebylo stávající heslo zadáno správně.",
+ "Could not update the private key password." : "Nelze aktualizovat heslo soukromého klíče.",
+ "The old password was not correct, please try again." : "Staré heslo nebylo zadáno správně, zkuste to prosím znovu.",
+ "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.",
"Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nelze aktualizovat heslo soukromého klíče. Možná nebylo staré heslo správně.",
"File recovery settings updated" : "Možnosti záchrany souborů aktualizovány",
"Could not update file recovery" : "Nelze nastavit záchranu souborů",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplikace pro šifrování není inicializována! Je možné, že aplikace byla znovu aktivována během vašeho přihlášení. Zkuste se prosím odhlásit a znovu přihlásit pro provedení inicializace šifrovací aplikace.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Váš soukromý klíč není platný! Pravděpodobně bylo vaše heslo změněno vně systému %s (např. ve vašem firemním adresáři). Heslo vašeho soukromého klíče můžete změnit ve svém osobním nastavení pro obnovení přístupu k vašim zašifrovaným souborům.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznámá chyba. Zkontrolujte nastavení systému nebo kontaktujte vašeho správce.",
- "Missing requirements." : "Nesplněné závislosti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Ujistěte se prosím, že máte nainstalované PHP 5.3.3 nebo novější a že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Prozatím byla aplikace pro šifrování vypnuta.",
- "Following users are not set up for encryption:" : "Následující uživatelé nemají nastavené šifrování:",
"Initial encryption started... This can take some time. Please wait." : "Počáteční šifrování zahájeno... Toto může chvíli trvat. Počkejte prosím.",
"Initial encryption running... Please try again later." : "Probíhá počáteční šifrování... Zkuste to prosím znovu později.",
+ "Missing requirements." : "Nesplněné závislosti.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Ujistěte se prosím, že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Aplikace pro šifrování byla prozatím vypnuta.",
+ "Following users are not set up for encryption:" : "Následující uživatelé nemají nastavené šifrování:",
"Go directly to your %spersonal settings%s." : "Přejít přímo do svého %sosobního nastavení%s.",
"Encryption" : "Šifrování",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
diff --git a/apps/files_encryption/l10n/da.js b/apps/files_encryption/l10n/da.js
index 9c12271be0b..93c718357c9 100644
--- a/apps/files_encryption/l10n/da.js
+++ b/apps/files_encryption/l10n/da.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Gentag venligst det nye kodeord til gendannelse",
"Password successfully changed." : "Kodeordet blev ændret succesfuldt",
"Could not change the password. Maybe the old password was not correct." : "Kunne ikke ændre kodeordet. Måske var det gamle kodeord ikke korrekt.",
+ "Could not update the private key password." : "Kunne ikke opdatere kodeordet til den private nøgle.",
+ "The old password was not correct, please try again." : "Det gamle kodeord var ikke korrekt, prøv venligst igen.",
+ "The current log-in password was not correct, please try again." : "Det nuværende kodeord til log-in var ikke korrekt, prøv venligst igen.",
"Private key password successfully updated." : "Privat nøgle kodeord succesfuldt opdateret.",
- "Could not update the private key password. Maybe the old password was not correct." : "Kunne ikke opdatere det private nøgle kodeord-. Måske var det gamle kodeord forkert.",
"File recovery settings updated" : "Filgendannelsesindstillinger opdateret",
"Could not update file recovery" : "Kunne ikke opdatere filgendannelse",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krypteringsprogrammet er ikke igangsat. Det kan skyldes at krypteringsprogrammet er blevet genaktiveret under din session. Prøv at logge ud og ind igen for at aktivere krypteringsprogrammet. ",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi felen er delt. Bed venligst filens ejer om at dele den med dig på ny.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukendt fejl. Venligst tjek dine systemindstillinger eller kontakt din systemadministrator",
"Missing requirements." : "Manglende betingelser.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Sørg for at PHP 5.3.3 eller nyere er installeret og at OpenSSL sammen med PHP-udvidelsen er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Sørg for at OpenSSL, sammen med PHP-udvidelsen, er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
"Following users are not set up for encryption:" : "Følgende brugere er ikke sat op til kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangskrypteringen er påbegyndt... Dette kan tage nogen tid. Vent venligst.",
"Initial encryption running... Please try again later." : "Kryptering foretages... Prøv venligst igen senere.",
diff --git a/apps/files_encryption/l10n/da.json b/apps/files_encryption/l10n/da.json
index 65a64a95d33..cd77a31993e 100644
--- a/apps/files_encryption/l10n/da.json
+++ b/apps/files_encryption/l10n/da.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Gentag venligst det nye kodeord til gendannelse",
"Password successfully changed." : "Kodeordet blev ændret succesfuldt",
"Could not change the password. Maybe the old password was not correct." : "Kunne ikke ændre kodeordet. Måske var det gamle kodeord ikke korrekt.",
+ "Could not update the private key password." : "Kunne ikke opdatere kodeordet til den private nøgle.",
+ "The old password was not correct, please try again." : "Det gamle kodeord var ikke korrekt, prøv venligst igen.",
+ "The current log-in password was not correct, please try again." : "Det nuværende kodeord til log-in var ikke korrekt, prøv venligst igen.",
"Private key password successfully updated." : "Privat nøgle kodeord succesfuldt opdateret.",
- "Could not update the private key password. Maybe the old password was not correct." : "Kunne ikke opdatere det private nøgle kodeord-. Måske var det gamle kodeord forkert.",
"File recovery settings updated" : "Filgendannelsesindstillinger opdateret",
"Could not update file recovery" : "Kunne ikke opdatere filgendannelse",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krypteringsprogrammet er ikke igangsat. Det kan skyldes at krypteringsprogrammet er blevet genaktiveret under din session. Prøv at logge ud og ind igen for at aktivere krypteringsprogrammet. ",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi felen er delt. Bed venligst filens ejer om at dele den med dig på ny.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukendt fejl. Venligst tjek dine systemindstillinger eller kontakt din systemadministrator",
"Missing requirements." : "Manglende betingelser.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Sørg for at PHP 5.3.3 eller nyere er installeret og at OpenSSL sammen med PHP-udvidelsen er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Sørg for at OpenSSL, sammen med PHP-udvidelsen, er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
"Following users are not set up for encryption:" : "Følgende brugere er ikke sat op til kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangskrypteringen er påbegyndt... Dette kan tage nogen tid. Vent venligst.",
"Initial encryption running... Please try again later." : "Kryptering foretages... Prøv venligst igen senere.",
diff --git a/apps/files_encryption/l10n/de.js b/apps/files_encryption/l10n/de.js
index 2c680836cb5..9687e081c76 100644
--- a/apps/files_encryption/l10n/de.js
+++ b/apps/files_encryption/l10n/de.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
"Password successfully changed." : "Dein Passwort wurde geändert.",
"Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.",
+ "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.",
+ "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuche es noch einmal.",
+ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.",
"Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert",
- "Could not update the private key password. Maybe the old password was not correct." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Eventuell war das alte Passwort falsch.",
"File recovery settings updated" : "Einstellungen zur Wiederherstellung von Dateien wurden aktualisiert",
"Could not update file recovery" : "Dateiwiederherstellung konnte nicht aktualisiert werden",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Verschlüsselung-App ist nicht initialisiert! Vielleicht wurde die Verschlüsselung-App in der aktuellen Sitzung reaktiviert. Bitte versuche Dich ab- und wieder anzumelden, um die Verschlüsselung-App zu initialisieren.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte frage den Dateibesitzer, ob er die Datei nochmals mit Dir teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfe Deine Systemeinstellungen oder kontaktiere Deinen Administrator",
"Missing requirements." : "Fehlende Vorraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Die Verschlüsselungsanwendung ist vorerst deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuche es später wieder.",
diff --git a/apps/files_encryption/l10n/de.json b/apps/files_encryption/l10n/de.json
index ce5b6e81af1..5fc3fb822fd 100644
--- a/apps/files_encryption/l10n/de.json
+++ b/apps/files_encryption/l10n/de.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
"Password successfully changed." : "Dein Passwort wurde geändert.",
"Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.",
+ "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.",
+ "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuche es noch einmal.",
+ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.",
"Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert",
- "Could not update the private key password. Maybe the old password was not correct." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Eventuell war das alte Passwort falsch.",
"File recovery settings updated" : "Einstellungen zur Wiederherstellung von Dateien wurden aktualisiert",
"Could not update file recovery" : "Dateiwiederherstellung konnte nicht aktualisiert werden",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Verschlüsselung-App ist nicht initialisiert! Vielleicht wurde die Verschlüsselung-App in der aktuellen Sitzung reaktiviert. Bitte versuche Dich ab- und wieder anzumelden, um die Verschlüsselung-App zu initialisieren.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte frage den Dateibesitzer, ob er die Datei nochmals mit Dir teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfe Deine Systemeinstellungen oder kontaktiere Deinen Administrator",
"Missing requirements." : "Fehlende Vorraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Die Verschlüsselungsanwendung ist vorerst deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuche es später wieder.",
diff --git a/apps/files_encryption/l10n/de_DE.js b/apps/files_encryption/l10n/de_DE.js
index f24b4a74358..01420b52e8d 100644
--- a/apps/files_encryption/l10n/de_DE.js
+++ b/apps/files_encryption/l10n/de_DE.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
"Password successfully changed." : "Das Passwort wurde erfolgreich geändert.",
"Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.",
+ "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.",
+ "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuchen Sie es noch einmal.",
+ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.",
"Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.",
- "Could not update the private key password. Maybe the old password was not correct." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Vielleicht war das alte Passwort nicht richtig.",
"File recovery settings updated" : "Die Einstellungen für die Dateiwiederherstellung wurden aktualisiert.",
"Could not update file recovery" : "Die Dateiwiederherstellung konnte nicht aktualisiert werden.",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Verschlüsselung-App ist nicht initialisiert! Vielleicht wurde die Verschlüsselung-App in der aktuellen Sitzung reaktiviert. Bitte versuchen Sie sich ab- und wieder anzumelden, um die Verschlüsselung-App zu initialisieren.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte fragen Sie den Dateibesitzer, dass er die Datei nochmals mit Ihnen teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Administrator",
"Missing requirements." : "Fehlende Voraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stellen Sie sicher, dass OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Die Verschlüsselungsanwendung ist vorerst deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Anfangsverschlüsselung gestartet … Dieses kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuchen Sie es später wieder.",
diff --git a/apps/files_encryption/l10n/de_DE.json b/apps/files_encryption/l10n/de_DE.json
index 0bbba2a50df..9105dc1e4c3 100644
--- a/apps/files_encryption/l10n/de_DE.json
+++ b/apps/files_encryption/l10n/de_DE.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
"Password successfully changed." : "Das Passwort wurde erfolgreich geändert.",
"Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.",
+ "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.",
+ "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuchen Sie es noch einmal.",
+ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.",
"Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.",
- "Could not update the private key password. Maybe the old password was not correct." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden. Vielleicht war das alte Passwort nicht richtig.",
"File recovery settings updated" : "Die Einstellungen für die Dateiwiederherstellung wurden aktualisiert.",
"Could not update file recovery" : "Die Dateiwiederherstellung konnte nicht aktualisiert werden.",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Verschlüsselung-App ist nicht initialisiert! Vielleicht wurde die Verschlüsselung-App in der aktuellen Sitzung reaktiviert. Bitte versuchen Sie sich ab- und wieder anzumelden, um die Verschlüsselung-App zu initialisieren.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte fragen Sie den Dateibesitzer, dass er die Datei nochmals mit Ihnen teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Administrator",
"Missing requirements." : "Fehlende Voraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stellen Sie sicher, dass OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Die Verschlüsselungsanwendung ist vorerst deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Anfangsverschlüsselung gestartet … Dieses kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuchen Sie es später wieder.",
diff --git a/apps/files_encryption/l10n/el.js b/apps/files_encryption/l10n/el.js
index a39a0c867f3..bb12d05f049 100644
--- a/apps/files_encryption/l10n/el.js
+++ b/apps/files_encryption/l10n/el.js
@@ -13,19 +13,19 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Παρακαλώ επαναλάβετε το νέο κωδικό επαναφοράς",
"Password successfully changed." : "Ο κωδικός αλλάχτηκε επιτυχώς.",
"Could not change the password. Maybe the old password was not correct." : "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.",
+ "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." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
- "Could not update the private key password. Maybe the old password was not correct." : "Αποτυχία ενημέρωσης του κωδικού για το προσωπικό κλειδί. Ενδεχομένως ο παλιός κωδικός δεν ήταν σωστός.",
"File recovery settings updated" : "Οι ρυθμίσεις επαναφοράς αρχείων ανανεώθηκαν",
"Could not update file recovery" : "Αποτυχία ενημέρωσης ανάκτησης αρχείων",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Η εφαρμογή κρυπτογράφησης δεν έχει εκκινήσει! Ίσως η εφαρμογή κρυπτογράφησης επανενεργοποιήθηκε κατά τη διάρκεια της τρέχουσας σύνδεσής σας. Παρακαλώ προσπαθήστε να αποσυνδεθείτε και να ξανασυνδεθείτε για να εκκινήσετε την εφαρμογή κρυπτογράφησης.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Το προσωπικό σας κλειδί δεν είναι έγκυρο! Πιθανόν ο κωδικός σας να άλλαξε έξω από το %s (π.χ. τη λίστα διευθύνσεων της εταιρείας σας). Μπορείτε να ενημερώσετε το προσωπικό σας κλειδί επαναφοράς κωδικού στις προσωπικές σας ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Unknown error. Please check your system settings or contact your administrator" : "Άγνωστο σφάλμα. Παρακαλώ ελέγξτε τις ρυθμίσεις του συστήματό σας ή επικοινωνήστε με τον διαχειριστή συστημάτων σας",
- "Missing requirements." : "Προαπαιτούμενα που απουσιάζουν.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.",
- "Following users are not set up for encryption:" : "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
"Initial encryption started... This can take some time. Please wait." : "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.",
"Initial encryption running... Please try again later." : "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα.",
+ "Missing requirements." : "Προαπαιτούμενα που απουσιάζουν.",
+ "Following users are not set up for encryption:" : "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
"Go directly to your %spersonal settings%s." : "Πηγαίνετε κατ'ευθείαν στις %sπροσωπικές ρυθμίσεις%s σας.",
"Encryption" : "Κρυπτογράφηση",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
diff --git a/apps/files_encryption/l10n/el.json b/apps/files_encryption/l10n/el.json
index 0ebf52e3f88..18cf819643b 100644
--- a/apps/files_encryption/l10n/el.json
+++ b/apps/files_encryption/l10n/el.json
@@ -11,19 +11,19 @@
"Please repeat the new recovery password" : "Παρακαλώ επαναλάβετε το νέο κωδικό επαναφοράς",
"Password successfully changed." : "Ο κωδικός αλλάχτηκε επιτυχώς.",
"Could not change the password. Maybe the old password was not correct." : "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.",
+ "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." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
- "Could not update the private key password. Maybe the old password was not correct." : "Αποτυχία ενημέρωσης του κωδικού για το προσωπικό κλειδί. Ενδεχομένως ο παλιός κωδικός δεν ήταν σωστός.",
"File recovery settings updated" : "Οι ρυθμίσεις επαναφοράς αρχείων ανανεώθηκαν",
"Could not update file recovery" : "Αποτυχία ενημέρωσης ανάκτησης αρχείων",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Η εφαρμογή κρυπτογράφησης δεν έχει εκκινήσει! Ίσως η εφαρμογή κρυπτογράφησης επανενεργοποιήθηκε κατά τη διάρκεια της τρέχουσας σύνδεσής σας. Παρακαλώ προσπαθήστε να αποσυνδεθείτε και να ξανασυνδεθείτε για να εκκινήσετε την εφαρμογή κρυπτογράφησης.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Το προσωπικό σας κλειδί δεν είναι έγκυρο! Πιθανόν ο κωδικός σας να άλλαξε έξω από το %s (π.χ. τη λίστα διευθύνσεων της εταιρείας σας). Μπορείτε να ενημερώσετε το προσωπικό σας κλειδί επαναφοράς κωδικού στις προσωπικές σας ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Unknown error. Please check your system settings or contact your administrator" : "Άγνωστο σφάλμα. Παρακαλώ ελέγξτε τις ρυθμίσεις του συστήματό σας ή επικοινωνήστε με τον διαχειριστή συστημάτων σας",
- "Missing requirements." : "Προαπαιτούμενα που απουσιάζουν.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.",
- "Following users are not set up for encryption:" : "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
"Initial encryption started... This can take some time. Please wait." : "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.",
"Initial encryption running... Please try again later." : "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα.",
+ "Missing requirements." : "Προαπαιτούμενα που απουσιάζουν.",
+ "Following users are not set up for encryption:" : "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
"Go directly to your %spersonal settings%s." : "Πηγαίνετε κατ'ευθείαν στις %sπροσωπικές ρυθμίσεις%s σας.",
"Encryption" : "Κρυπτογράφηση",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
diff --git a/apps/files_encryption/l10n/en_GB.js b/apps/files_encryption/l10n/en_GB.js
index 126d901b24f..1e5e07d450d 100644
--- a/apps/files_encryption/l10n/en_GB.js
+++ b/apps/files_encryption/l10n/en_GB.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Please repeat the new recovery password",
"Password successfully changed." : "Password changed successfully.",
"Could not change the password. Maybe the old password was not correct." : "Could not change the password. Maybe the old password was incorrect.",
+ "Could not update the private key password." : "Could not update the private key password.",
+ "The old password was not correct, please try again." : "The old password was not correct, please try again.",
+ "The current log-in password was not correct, please try again." : "The current log-in password was not correct, please try again.",
"Private key password successfully updated." : "Private key password updated successfully.",
- "Could not update the private key password. Maybe the old password was not correct." : "Could not update the private key password. Maybe the old password was not correct.",
"File recovery settings updated" : "File recovery settings updated",
"Could not update file recovery" : "Could not update file recovery",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Encryption app not initialised! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialise the encryption app.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.",
"Unknown error. Please check your system settings or contact your administrator" : "Unknown error. Please check your system settings or contact your administrator",
"Missing requirements." : "Missing requirements.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Please make sure that OpenSSL together with the PHP extension is enabled and properly configured. For now, the encryption app has been disabled.",
"Following users are not set up for encryption:" : "Following users are not set up for encryption:",
"Initial encryption started... This can take some time. Please wait." : "Initial encryption started... This can take some time. Please wait.",
"Initial encryption running... Please try again later." : "Initial encryption running... Please try again later.",
diff --git a/apps/files_encryption/l10n/en_GB.json b/apps/files_encryption/l10n/en_GB.json
index e81b4088055..68478b60d68 100644
--- a/apps/files_encryption/l10n/en_GB.json
+++ b/apps/files_encryption/l10n/en_GB.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Please repeat the new recovery password",
"Password successfully changed." : "Password changed successfully.",
"Could not change the password. Maybe the old password was not correct." : "Could not change the password. Maybe the old password was incorrect.",
+ "Could not update the private key password." : "Could not update the private key password.",
+ "The old password was not correct, please try again." : "The old password was not correct, please try again.",
+ "The current log-in password was not correct, please try again." : "The current log-in password was not correct, please try again.",
"Private key password successfully updated." : "Private key password updated successfully.",
- "Could not update the private key password. Maybe the old password was not correct." : "Could not update the private key password. Maybe the old password was not correct.",
"File recovery settings updated" : "File recovery settings updated",
"Could not update file recovery" : "Could not update file recovery",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Encryption app not initialised! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialise the encryption app.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.",
"Unknown error. Please check your system settings or contact your administrator" : "Unknown error. Please check your system settings or contact your administrator",
"Missing requirements." : "Missing requirements.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Please make sure that OpenSSL together with the PHP extension is enabled and properly configured. For now, the encryption app has been disabled.",
"Following users are not set up for encryption:" : "Following users are not set up for encryption:",
"Initial encryption started... This can take some time. Please wait." : "Initial encryption started... This can take some time. Please wait.",
"Initial encryption running... Please try again later." : "Initial encryption running... Please try again later.",
diff --git a/apps/files_encryption/l10n/es.js b/apps/files_encryption/l10n/es.js
index 8101c9f4663..38433330ce0 100644
--- a/apps/files_encryption/l10n/es.js
+++ b/apps/files_encryption/l10n/es.js
@@ -2,33 +2,35 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Error desconocido",
- "Missing recovery key password" : "Falta contraseña de recuperacion.",
- "Please repeat the recovery key password" : "Por favor repita la contraseña de recuperacion",
- "Repeated recovery key password does not match the provided recovery key password" : "la contraseña de recuperacion repetida no es igual a la contraseña de recuperacion",
+ "Missing recovery key password" : "Falta contraseña de recuperación.",
+ "Please repeat the recovery key password" : "Por favor, repita la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada.",
"Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos",
"Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
"Recovery key successfully disabled" : "Clave de recuperación deshabilitada",
- "Please provide the old recovery password" : "Por favor ingrese su antigua contraseña de recuperacion",
- "Please provide a new recovery password" : "Por favor ingrese una nueva contraseña de recuperacion",
+ "Please provide the old recovery password" : "Por favor, ingrese su antigua contraseña de recuperación",
+ "Please provide a new recovery password" : "Por favor, ingrese una nueva contraseña de recuperación",
"Please repeat the new recovery password" : "Por favor repita su nueva contraseña de recuperacion",
"Password successfully changed." : "Su contraseña ha sido cambiada",
"Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
+ "Could not update the private key password." : "No se pudo actualizar la contraseña de clave privada.",
+ "The old password was not correct, please try again." : "La antigua contraseña no es correcta, por favor intente de nuevo.",
+ "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcto, por favor intente de nuevo.",
"Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "Could not update the private key password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.",
"File recovery settings updated" : "Opciones de recuperación de archivos actualizada",
"Could not update file recovery" : "No se pudo actualizar la recuperación de archivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte a su administrador",
- "Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
- "Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Cifrado inicial en curso... Inténtelo más tarde.",
+ "Missing requirements." : "Requisitos incompletos.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que OpenSSL y la extensión de PHP estén habilitados y configurados correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
+ "Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Go directly to your %spersonal settings%s." : "Ir directamente a %sOpciones%s.",
"Encryption" : "Cifrado",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero sus claves no han sido inicializadas, por favor, cierre la sesión y vuelva a iniciarla de nuevo.",
"Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);",
"Recovery key password" : "Contraseña de clave de recuperación",
"Repeat Recovery key password" : "Repite la contraseña de clave de recuperación",
@@ -39,7 +41,7 @@ OC.L10N.register(
"New Recovery key password" : "Nueva clave de recuperación",
"Repeat New Recovery key password" : "Repetir la nueva clave de recuperación",
"Change Password" : "Cambiar contraseña",
- "Your private key password no longer matches your log-in password." : "Tu contraseña de clave privada ya no concuerda con tu contraseña de inicio.",
+ "Your private key password no longer matches your log-in password." : "Su contraseña de clave privada ya no coincide con su contraseña de acceso.",
"Set your old private key password to your current log-in password:" : "Establezca la contraseña de clave privada antigua para su contraseña de inicio de sesión actual:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.",
"Old log-in password" : "Contraseña de acceso antigua",
diff --git a/apps/files_encryption/l10n/es.json b/apps/files_encryption/l10n/es.json
index 16cdc6b40a0..001b981978f 100644
--- a/apps/files_encryption/l10n/es.json
+++ b/apps/files_encryption/l10n/es.json
@@ -1,32 +1,34 @@
{ "translations": {
"Unknown error" : "Error desconocido",
- "Missing recovery key password" : "Falta contraseña de recuperacion.",
- "Please repeat the recovery key password" : "Por favor repita la contraseña de recuperacion",
- "Repeated recovery key password does not match the provided recovery key password" : "la contraseña de recuperacion repetida no es igual a la contraseña de recuperacion",
+ "Missing recovery key password" : "Falta contraseña de recuperación.",
+ "Please repeat the recovery key password" : "Por favor, repita la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada.",
"Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos",
"Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
"Recovery key successfully disabled" : "Clave de recuperación deshabilitada",
- "Please provide the old recovery password" : "Por favor ingrese su antigua contraseña de recuperacion",
- "Please provide a new recovery password" : "Por favor ingrese una nueva contraseña de recuperacion",
+ "Please provide the old recovery password" : "Por favor, ingrese su antigua contraseña de recuperación",
+ "Please provide a new recovery password" : "Por favor, ingrese una nueva contraseña de recuperación",
"Please repeat the new recovery password" : "Por favor repita su nueva contraseña de recuperacion",
"Password successfully changed." : "Su contraseña ha sido cambiada",
"Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
+ "Could not update the private key password." : "No se pudo actualizar la contraseña de clave privada.",
+ "The old password was not correct, please try again." : "La antigua contraseña no es correcta, por favor intente de nuevo.",
+ "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcto, por favor intente de nuevo.",
"Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "Could not update the private key password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.",
"File recovery settings updated" : "Opciones de recuperación de archivos actualizada",
"Could not update file recovery" : "No se pudo actualizar la recuperación de archivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte a su administrador",
- "Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
- "Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Cifrado inicial en curso... Inténtelo más tarde.",
+ "Missing requirements." : "Requisitos incompletos.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que OpenSSL y la extensión de PHP estén habilitados y configurados correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
+ "Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Go directly to your %spersonal settings%s." : "Ir directamente a %sOpciones%s.",
"Encryption" : "Cifrado",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero sus claves no han sido inicializadas, por favor, cierre la sesión y vuelva a iniciarla de nuevo.",
"Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);",
"Recovery key password" : "Contraseña de clave de recuperación",
"Repeat Recovery key password" : "Repite la contraseña de clave de recuperación",
@@ -37,7 +39,7 @@
"New Recovery key password" : "Nueva clave de recuperación",
"Repeat New Recovery key password" : "Repetir la nueva clave de recuperación",
"Change Password" : "Cambiar contraseña",
- "Your private key password no longer matches your log-in password." : "Tu contraseña de clave privada ya no concuerda con tu contraseña de inicio.",
+ "Your private key password no longer matches your log-in password." : "Su contraseña de clave privada ya no coincide con su contraseña de acceso.",
"Set your old private key password to your current log-in password:" : "Establezca la contraseña de clave privada antigua para su contraseña de inicio de sesión actual:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.",
"Old log-in password" : "Contraseña de acceso antigua",
diff --git a/apps/files_encryption/l10n/es_AR.js b/apps/files_encryption/l10n/es_AR.js
index 86ac5977f7f..e0da73dae9b 100644
--- a/apps/files_encryption/l10n/es_AR.js
+++ b/apps/files_encryption/l10n/es_AR.js
@@ -8,14 +8,12 @@ OC.L10N.register(
"Password successfully changed." : "Tu contraseña fue cambiada",
"Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Comprobá que la contraseña actual sea correcta.",
"Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "Could not update the private key password. Maybe the old password was not correct." : "No fue posible actualizar la contraseña de clave privada. Tal vez la contraseña anterior no es correcta.",
"File recovery settings updated" : "Las opciones de recuperación de archivos fueron actualizadas",
"Could not update file recovery" : "No fue posible actualizar la recuperación de archivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de encriptación no está inicializada! Es probable que la aplicación fue re-habilitada durante tu sesión. Intenta salir y iniciar sesión para volverla a iniciar.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Tu llave privada no es válida! Aparenta que tu clave fue cambiada fuera de %s (de tus directorios). Puedes actualizar la contraseña de tu clave privadaen las configuraciones personales para recobrar el acceso a tus archivos encriptados.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o una versión más reciente esté instalado y que OpenSSL junto con la extensión PHP esté habilitado y configurado apropiadamente. Por ahora, la aplicación de encriptación ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no fueron configurados para encriptar:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación inicial comenzada... Esto puede durar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Encriptación inicial corriendo... Por favor intente mas tarde. ",
diff --git a/apps/files_encryption/l10n/es_AR.json b/apps/files_encryption/l10n/es_AR.json
index 07dab2694bd..ac76c994787 100644
--- a/apps/files_encryption/l10n/es_AR.json
+++ b/apps/files_encryption/l10n/es_AR.json
@@ -6,14 +6,12 @@
"Password successfully changed." : "Tu contraseña fue cambiada",
"Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Comprobá que la contraseña actual sea correcta.",
"Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "Could not update the private key password. Maybe the old password was not correct." : "No fue posible actualizar la contraseña de clave privada. Tal vez la contraseña anterior no es correcta.",
"File recovery settings updated" : "Las opciones de recuperación de archivos fueron actualizadas",
"Could not update file recovery" : "No fue posible actualizar la recuperación de archivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de encriptación no está inicializada! Es probable que la aplicación fue re-habilitada durante tu sesión. Intenta salir y iniciar sesión para volverla a iniciar.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Tu llave privada no es válida! Aparenta que tu clave fue cambiada fuera de %s (de tus directorios). Puedes actualizar la contraseña de tu clave privadaen las configuraciones personales para recobrar el acceso a tus archivos encriptados.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o una versión más reciente esté instalado y que OpenSSL junto con la extensión PHP esté habilitado y configurado apropiadamente. Por ahora, la aplicación de encriptación ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no fueron configurados para encriptar:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación inicial comenzada... Esto puede durar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Encriptación inicial corriendo... Por favor intente mas tarde. ",
diff --git a/apps/files_encryption/l10n/es_MX.js b/apps/files_encryption/l10n/es_MX.js
index 02af0608ab1..e445cd03b05 100644
--- a/apps/files_encryption/l10n/es_MX.js
+++ b/apps/files_encryption/l10n/es_MX.js
@@ -8,14 +8,12 @@ OC.L10N.register(
"Password successfully changed." : "Su contraseña ha sido cambiada",
"Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
"Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "Could not update the private key password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.",
"File recovery settings updated" : "Opciones de recuperación de archivos actualizada",
"Could not update file recovery" : "No se pudo actualizar la recuperación de archivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada... Esto puede tomar un tiempo. Por favor espere.",
"Encryption" : "Cifrado",
diff --git a/apps/files_encryption/l10n/es_MX.json b/apps/files_encryption/l10n/es_MX.json
index 1ff89da3d8f..3ca4e51a139 100644
--- a/apps/files_encryption/l10n/es_MX.json
+++ b/apps/files_encryption/l10n/es_MX.json
@@ -6,14 +6,12 @@
"Password successfully changed." : "Su contraseña ha sido cambiada",
"Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
"Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "Could not update the private key password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.",
"File recovery settings updated" : "Opciones de recuperación de archivos actualizada",
"Could not update file recovery" : "No se pudo actualizar la recuperación de archivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada... Esto puede tomar un tiempo. Por favor espere.",
"Encryption" : "Cifrado",
diff --git a/apps/files_encryption/l10n/et_EE.js b/apps/files_encryption/l10n/et_EE.js
index a4edf9950a6..57297e8b9a3 100644
--- a/apps/files_encryption/l10n/et_EE.js
+++ b/apps/files_encryption/l10n/et_EE.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli",
"Password successfully changed." : "Parool edukalt vahetatud.",
"Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.",
+ "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.",
+ "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.",
+ "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.",
"Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.",
- "Could not update the private key password. Maybe the old password was not correct." : "Ei suutnud uuendada privaatse võtme parooli. Võib-olla polnud vana parool õige.",
"File recovery settings updated" : "Faili taaste seaded uuendatud",
"Could not update file recovery" : "Ei suuda uuendada taastefaili",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krüpteerimise rakend pole käivitatud. Võib-olla krüpteerimise rakend taaskäivitati sinu sessiooni kestel. Palun proovi logida välja ning uuesti sisse käivitamaks krüpteerimise rakendit.",
@@ -22,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.",
"Unknown error. Please check your system settings or contact your administrator" : "Tundmatu viga. Palun võta ühendust oma administraatoriga.",
"Missing requirements." : "Nõutavad on puudu.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Palun veendu, et on paigaldatud PHP 5.3.3 või uuem ning PHP OpenSSL laiendus on lubatud ning seadistatud korrektselt. Hetkel krüpteerimise rakendus on peatatud.",
"Following users are not set up for encryption:" : "Järgmised kasutajad pole seadistatud krüpteeringuks:",
"Initial encryption started... This can take some time. Please wait." : "Algne krüpteerimine käivitati... See võib võtta natuke aega. Palun oota.",
"Initial encryption running... Please try again later." : "Toimub esmane krüpteerimine... Palun proovi hiljem uuesti.",
diff --git a/apps/files_encryption/l10n/et_EE.json b/apps/files_encryption/l10n/et_EE.json
index df58c8f11fb..364eb02ef4f 100644
--- a/apps/files_encryption/l10n/et_EE.json
+++ b/apps/files_encryption/l10n/et_EE.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli",
"Password successfully changed." : "Parool edukalt vahetatud.",
"Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.",
+ "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.",
+ "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.",
+ "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.",
"Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.",
- "Could not update the private key password. Maybe the old password was not correct." : "Ei suutnud uuendada privaatse võtme parooli. Võib-olla polnud vana parool õige.",
"File recovery settings updated" : "Faili taaste seaded uuendatud",
"Could not update file recovery" : "Ei suuda uuendada taastefaili",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krüpteerimise rakend pole käivitatud. Võib-olla krüpteerimise rakend taaskäivitati sinu sessiooni kestel. Palun proovi logida välja ning uuesti sisse käivitamaks krüpteerimise rakendit.",
@@ -20,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.",
"Unknown error. Please check your system settings or contact your administrator" : "Tundmatu viga. Palun võta ühendust oma administraatoriga.",
"Missing requirements." : "Nõutavad on puudu.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Palun veendu, et on paigaldatud PHP 5.3.3 või uuem ning PHP OpenSSL laiendus on lubatud ning seadistatud korrektselt. Hetkel krüpteerimise rakendus on peatatud.",
"Following users are not set up for encryption:" : "Järgmised kasutajad pole seadistatud krüpteeringuks:",
"Initial encryption started... This can take some time. Please wait." : "Algne krüpteerimine käivitati... See võib võtta natuke aega. Palun oota.",
"Initial encryption running... Please try again later." : "Toimub esmane krüpteerimine... Palun proovi hiljem uuesti.",
diff --git a/apps/files_encryption/l10n/eu.js b/apps/files_encryption/l10n/eu.js
index 84d446313a1..65242e2da90 100644
--- a/apps/files_encryption/l10n/eu.js
+++ b/apps/files_encryption/l10n/eu.js
@@ -14,7 +14,6 @@ OC.L10N.register(
"Password successfully changed." : "Pasahitza behar bezala aldatu da.",
"Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.",
"Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.",
- "Could not update the private key password. Maybe the old password was not correct." : "Ezin izan da gako pribatu pasahitza eguneratu. Agian pasahitz zaharra okerrekoa da.",
"File recovery settings updated" : "Fitxategi berreskuratze ezarpenak eguneratuak",
"Could not update file recovery" : "Ezin da fitxategi berreskuratzea eguneratu",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Enkriptazio aplikazioa ez dago hasieratuta! Agian aplikazioa birgaitu egin da zure saioa bitartean. Mesdez atear eta sartu berriz enkriptazio aplikazioa hasierarazteko.",
@@ -22,7 +21,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore ezezaguna. Mesedez, egiaztatu zure sistemaren ezarpenak edo jarri zure administrariarekin kontaktuan.",
"Missing requirements." : "Eskakizun batzuk ez dira betetzen.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Mesedez ziurtatu PHP 5.3.3 edo berriago bat instalatuta dagoela eta OpenSSL PHP hedapenarekin gaitua eta ongi konfiguratuta dagoela. Oraingoz, enkriptazio aplikazioa desgaituta dago.",
"Following users are not set up for encryption:" : "Hurrengo erabiltzaileak ez daude enktriptatzeko konfiguratutak:",
"Initial encryption started... This can take some time. Please wait." : "Hasierako enkriptazioa hasi da... Honek denbora har dezake. Mesedez itxaron.",
"Initial encryption running... Please try again later." : "Hasierako enkriptaketa abian... mesedez, saiatu beranduago.",
diff --git a/apps/files_encryption/l10n/eu.json b/apps/files_encryption/l10n/eu.json
index c18cebad99d..961ffe3270a 100644
--- a/apps/files_encryption/l10n/eu.json
+++ b/apps/files_encryption/l10n/eu.json
@@ -12,7 +12,6 @@
"Password successfully changed." : "Pasahitza behar bezala aldatu da.",
"Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.",
"Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.",
- "Could not update the private key password. Maybe the old password was not correct." : "Ezin izan da gako pribatu pasahitza eguneratu. Agian pasahitz zaharra okerrekoa da.",
"File recovery settings updated" : "Fitxategi berreskuratze ezarpenak eguneratuak",
"Could not update file recovery" : "Ezin da fitxategi berreskuratzea eguneratu",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Enkriptazio aplikazioa ez dago hasieratuta! Agian aplikazioa birgaitu egin da zure saioa bitartean. Mesdez atear eta sartu berriz enkriptazio aplikazioa hasierarazteko.",
@@ -20,7 +19,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore ezezaguna. Mesedez, egiaztatu zure sistemaren ezarpenak edo jarri zure administrariarekin kontaktuan.",
"Missing requirements." : "Eskakizun batzuk ez dira betetzen.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Mesedez ziurtatu PHP 5.3.3 edo berriago bat instalatuta dagoela eta OpenSSL PHP hedapenarekin gaitua eta ongi konfiguratuta dagoela. Oraingoz, enkriptazio aplikazioa desgaituta dago.",
"Following users are not set up for encryption:" : "Hurrengo erabiltzaileak ez daude enktriptatzeko konfiguratutak:",
"Initial encryption started... This can take some time. Please wait." : "Hasierako enkriptazioa hasi da... Honek denbora har dezake. Mesedez itxaron.",
"Initial encryption running... Please try again later." : "Hasierako enkriptaketa abian... mesedez, saiatu beranduago.",
diff --git a/apps/files_encryption/l10n/fa.js b/apps/files_encryption/l10n/fa.js
index 541b19c695c..037dc26e681 100644
--- a/apps/files_encryption/l10n/fa.js
+++ b/apps/files_encryption/l10n/fa.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.",
"Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
- "Could not update the private key password. Maybe the old password was not correct." : "رمزعبور کلید خصوصی را نمی تواند به روز کند. شاید رمزعبور قدیمی صحیح نمی باشد.",
"File recovery settings updated" : "تنظیمات بازیابی فایل به روز شده است.",
"Could not update file recovery" : "به روز رسانی بازیابی فایل را نمی تواند انجام دهد.",
"Missing requirements." : "نیازمندی های گمشده",
diff --git a/apps/files_encryption/l10n/fa.json b/apps/files_encryption/l10n/fa.json
index 30b0faa5ec8..0c89886d412 100644
--- a/apps/files_encryption/l10n/fa.json
+++ b/apps/files_encryption/l10n/fa.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.",
"Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
- "Could not update the private key password. Maybe the old password was not correct." : "رمزعبور کلید خصوصی را نمی تواند به روز کند. شاید رمزعبور قدیمی صحیح نمی باشد.",
"File recovery settings updated" : "تنظیمات بازیابی فایل به روز شده است.",
"Could not update file recovery" : "به روز رسانی بازیابی فایل را نمی تواند انجام دهد.",
"Missing requirements." : "نیازمندی های گمشده",
diff --git a/apps/files_encryption/l10n/fi_FI.js b/apps/files_encryption/l10n/fi_FI.js
index bf1afbb1129..aff16f1fcdd 100644
--- a/apps/files_encryption/l10n/fi_FI.js
+++ b/apps/files_encryption/l10n/fi_FI.js
@@ -5,9 +5,11 @@ OC.L10N.register(
"Recovery key successfully enabled" : "Palautusavain kytketty päälle onnistuneesti",
"Password successfully changed." : "Salasana vaihdettiin onnistuneesti.",
"Could not change the password. Maybe the old password was not correct." : "Salasanan vaihto epäonnistui. Kenties vanha salasana oli väärin.",
+ "The old password was not correct, please try again." : "Vanha salasana oli väärin, yritä uudelleen.",
"Private key password successfully updated." : "Yksityisen avaimen salasana päivitetty onnistuneesti.",
"File recovery settings updated" : "Tiedostopalautuksen asetukset päivitetty",
"Unknown error. Please check your system settings or contact your administrator" : "Tuntematon virhe. Tarkista järjestelmän asetukset tai ole yhteydessä ylläpitäjään.",
+ "Missing requirements." : "Puuttuvat vaatimukset.",
"Following users are not set up for encryption:" : "Seuraavat käyttäjät eivät ole määrittäneet salausta:",
"Initial encryption started... This can take some time. Please wait." : "Ensimmäinen salauskerta käynnistetty... Tämä saattaa kestää hetken.",
"Initial encryption running... Please try again later." : "Ensimmäinen salauskerta on meneillään... Yritä myöhemmin uudelleen.",
@@ -25,8 +27,8 @@ OC.L10N.register(
"Repeat New Recovery key password" : "Toista uusi palautusavaimen salasana",
"Change Password" : "Vaihda salasana",
" If you don't remember your old password you can ask your administrator to recover your files." : "Jos et muista vanhaa salasanaasi, voit pyytää ylläpitäjää palauttamaan tiedostosi.",
- "Old log-in password" : "Vanha kirjautumis-salasana",
- "Current log-in password" : "Nykyinen kirjautumis-salasana",
+ "Old log-in password" : "Vanha kirjautumissalasana",
+ "Current log-in password" : "Nykyinen kirjautumissalasana",
"Update Private Key Password" : "Päivitä yksityisen avaimen salasana",
"Enable password recovery:" : "Ota salasanan palautus käyttöön:"
},
diff --git a/apps/files_encryption/l10n/fi_FI.json b/apps/files_encryption/l10n/fi_FI.json
index 2b91a4388d0..348f8aeb1fe 100644
--- a/apps/files_encryption/l10n/fi_FI.json
+++ b/apps/files_encryption/l10n/fi_FI.json
@@ -3,9 +3,11 @@
"Recovery key successfully enabled" : "Palautusavain kytketty päälle onnistuneesti",
"Password successfully changed." : "Salasana vaihdettiin onnistuneesti.",
"Could not change the password. Maybe the old password was not correct." : "Salasanan vaihto epäonnistui. Kenties vanha salasana oli väärin.",
+ "The old password was not correct, please try again." : "Vanha salasana oli väärin, yritä uudelleen.",
"Private key password successfully updated." : "Yksityisen avaimen salasana päivitetty onnistuneesti.",
"File recovery settings updated" : "Tiedostopalautuksen asetukset päivitetty",
"Unknown error. Please check your system settings or contact your administrator" : "Tuntematon virhe. Tarkista järjestelmän asetukset tai ole yhteydessä ylläpitäjään.",
+ "Missing requirements." : "Puuttuvat vaatimukset.",
"Following users are not set up for encryption:" : "Seuraavat käyttäjät eivät ole määrittäneet salausta:",
"Initial encryption started... This can take some time. Please wait." : "Ensimmäinen salauskerta käynnistetty... Tämä saattaa kestää hetken.",
"Initial encryption running... Please try again later." : "Ensimmäinen salauskerta on meneillään... Yritä myöhemmin uudelleen.",
@@ -23,8 +25,8 @@
"Repeat New Recovery key password" : "Toista uusi palautusavaimen salasana",
"Change Password" : "Vaihda salasana",
" If you don't remember your old password you can ask your administrator to recover your files." : "Jos et muista vanhaa salasanaasi, voit pyytää ylläpitäjää palauttamaan tiedostosi.",
- "Old log-in password" : "Vanha kirjautumis-salasana",
- "Current log-in password" : "Nykyinen kirjautumis-salasana",
+ "Old log-in password" : "Vanha kirjautumissalasana",
+ "Current log-in password" : "Nykyinen kirjautumissalasana",
"Update Private Key Password" : "Päivitä yksityisen avaimen salasana",
"Enable password recovery:" : "Ota salasanan palautus käyttöön:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_encryption/l10n/fr.js b/apps/files_encryption/l10n/fr.js
index 68d07143f73..b0f4d1d5edf 100644
--- a/apps/files_encryption/l10n/fr.js
+++ b/apps/files_encryption/l10n/fr.js
@@ -11,29 +11,31 @@ 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 ",
- "Could not change the password. Maybe the old password was not correct." : "Ne peut pas changer le mot de passe. L'ancien mot de passe est peut-être incorrect.",
+ "Password successfully changed." : "Mot de passe changé 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.",
+ "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clé privée.",
+ "The old password was not correct, please try again." : "L'ancien mot de passe est incorrect. Veuillez réessayer.",
+ "The current log-in password was not correct, please try again." : "Le mot de passe actuel n'est pas correct, veuillez réessayer.",
"Private key password successfully updated." : "Mot de passe de la clé privé mis à jour avec succès.",
- "Could not update the private key password. Maybe the old password was not correct." : "Impossible de mettre à jour le mot de passe de la clé privé. Peut-être que l'ancien mot de passe n'était pas correcte.",
"File recovery settings updated" : "Paramètres de récupération de fichiers mis à jour",
- "Could not update file recovery" : "Ne peut pas remettre à jour les fichiers de récupération",
+ "Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée est invalide ! Votre mot de passe a probablement été modifié hors de %s (ex. votre annuaire d'entreprise). Vous pouvez mettre à jour le mot de passe de votre clef privée dans les paramètres personnels pour pouvoir récupérer l'accès à vos fichiers chiffrés.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.",
"Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.",
- "Missing requirements." : "Système minimum requis non respecté.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Veuillez vous assurer qu'une version de PHP 5.3.3 ou supérieure est installée et qu'OpenSSL et son extension PHP sont activés et configurés correctement. En attendant, l'application de chiffrement été désactivée.",
- "Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.",
"Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez re-essayer ultérieurement.",
+ "Missing requirements." : "Système minimum requis non respecté.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Merci de vous assurer que OpenSSL et son extension PHP sont activés et configurés correctement. Pour l'instant, l'application de chiffrement a été désactivée.",
+ "Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Go directly to your %spersonal settings%s." : "Allerz directement à vos %spersonal settings%s.",
"Encryption" : "Chiffrement",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées, veuillez vous déconnecter et ensuite vous reconnecter.",
"Enable recovery key (allow to recover users files in case of password loss):" : "Activer la clef de récupération (permet de récupérer les fichiers des utilisateurs en cas de perte de mot de passe).",
"Recovery key password" : "Mot de passe de la clef de récupération",
"Repeat Recovery key password" : "Répétez le mot de passe de la clé de récupération",
- "Enabled" : "Activer",
- "Disabled" : "Désactiver",
+ "Enabled" : "Activé",
+ "Disabled" : "Désactivé",
"Change recovery key password:" : "Modifier le mot de passe de la clef de récupération :",
"Old Recovery key password" : "Ancien mot de passe de la clef de récupération",
"New Recovery key password" : "Nouveau mot de passe de la clef de récupération",
diff --git a/apps/files_encryption/l10n/fr.json b/apps/files_encryption/l10n/fr.json
index 707583f7c80..fffe581ac5e 100644
--- a/apps/files_encryption/l10n/fr.json
+++ b/apps/files_encryption/l10n/fr.json
@@ -9,29 +9,31 @@
"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 ",
- "Could not change the password. Maybe the old password was not correct." : "Ne peut pas changer le mot de passe. L'ancien mot de passe est peut-être incorrect.",
+ "Password successfully changed." : "Mot de passe changé 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.",
+ "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clé privée.",
+ "The old password was not correct, please try again." : "L'ancien mot de passe est incorrect. Veuillez réessayer.",
+ "The current log-in password was not correct, please try again." : "Le mot de passe actuel n'est pas correct, veuillez réessayer.",
"Private key password successfully updated." : "Mot de passe de la clé privé mis à jour avec succès.",
- "Could not update the private key password. Maybe the old password was not correct." : "Impossible de mettre à jour le mot de passe de la clé privé. Peut-être que l'ancien mot de passe n'était pas correcte.",
"File recovery settings updated" : "Paramètres de récupération de fichiers mis à jour",
- "Could not update file recovery" : "Ne peut pas remettre à jour les fichiers de récupération",
+ "Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée est invalide ! Votre mot de passe a probablement été modifié hors de %s (ex. votre annuaire d'entreprise). Vous pouvez mettre à jour le mot de passe de votre clef privée dans les paramètres personnels pour pouvoir récupérer l'accès à vos fichiers chiffrés.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.",
"Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.",
- "Missing requirements." : "Système minimum requis non respecté.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Veuillez vous assurer qu'une version de PHP 5.3.3 ou supérieure est installée et qu'OpenSSL et son extension PHP sont activés et configurés correctement. En attendant, l'application de chiffrement été désactivée.",
- "Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.",
"Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez re-essayer ultérieurement.",
+ "Missing requirements." : "Système minimum requis non respecté.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Merci de vous assurer que OpenSSL et son extension PHP sont activés et configurés correctement. Pour l'instant, l'application de chiffrement a été désactivée.",
+ "Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Go directly to your %spersonal settings%s." : "Allerz directement à vos %spersonal settings%s.",
"Encryption" : "Chiffrement",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées, veuillez vous déconnecter et ensuite vous reconnecter.",
"Enable recovery key (allow to recover users files in case of password loss):" : "Activer la clef de récupération (permet de récupérer les fichiers des utilisateurs en cas de perte de mot de passe).",
"Recovery key password" : "Mot de passe de la clef de récupération",
"Repeat Recovery key password" : "Répétez le mot de passe de la clé de récupération",
- "Enabled" : "Activer",
- "Disabled" : "Désactiver",
+ "Enabled" : "Activé",
+ "Disabled" : "Désactivé",
"Change recovery key password:" : "Modifier le mot de passe de la clef de récupération :",
"Old Recovery key password" : "Ancien mot de passe de la clef de récupération",
"New Recovery key password" : "Nouveau mot de passe de la clef de récupération",
diff --git a/apps/files_encryption/l10n/gl.js b/apps/files_encryption/l10n/gl.js
index c04a1c1a5ea..9b14a4455b5 100644
--- a/apps/files_encryption/l10n/gl.js
+++ b/apps/files_encryption/l10n/gl.js
@@ -3,29 +3,31 @@ OC.L10N.register(
{
"Unknown error" : "Produciuse un erro descoñecido",
"Missing recovery key password" : "Falta a chave de recuperación",
- "Please repeat the recovery key password" : "Por favor repita a chave de recuperación",
- "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación establecida",
+ "Please repeat the recovery key password" : "Repita a chave de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación estabelecida",
"Recovery key successfully enabled" : "Activada satisfactoriamente a chave de recuperación",
"Could not disable recovery key. Please check your recovery key password!" : "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!",
"Recovery key successfully disabled" : "Desactivada satisfactoriamente a chave de recuperación",
- "Please provide the old recovery password" : "Por favor introduza a chave de recuperación anterior",
- "Please provide a new recovery password" : "Por favor introduza a nova chave de recuperación",
+ "Please provide the old recovery password" : "Introduza a chave de recuperación antiga",
+ "Please provide a new recovery password" : "Introduza a nova chave de recuperación",
"Please repeat the new recovery password" : "Por favor repita a nova chave de recuperación",
"Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente",
"Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.",
+ "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.",
+ "The old password was not correct, please try again." : "O contrasinal antigo non é correcto, ténteo de novo.",
+ "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.",
"Private key password successfully updated." : "A chave privada foi actualizada correctamente.",
- "Could not update the private key password. Maybe the old password was not correct." : "Non foi posíbel actualizar o contrasinal da chave privada. É probábel que o contrasinal antigo non sexa correcto.",
"File recovery settings updated" : "Actualizouse o ficheiro de axustes de recuperación",
"Could not update file recovery" : "Non foi posíbel actualizar o ficheiro de recuperación",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Non se iniciou a aplicación de cifrado! Quizais volva a activarse durante a sesión. Tente pechar a sesión e volver iniciala para que tamén se inicie a aplicación de cifrado.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior do %s (p.ex. o seu directorio corporativo). Vostede pode actualizar o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
"Unknown error. Please check your system settings or contact your administrator" : "Produciuse un erro descoñecido. Comprobe os axustes do sistema ou contacte co administrador",
- "Missing requirements." : "Non se cumpren os requisitos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o PHP 5.3.3 ou posterior e de que o OpenSSL xunto coa extensión PHP estean activados e configurados correctamente. Polo de agora foi desactivada a aplicación de cifrado.",
- "Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Comezou o cifrado inicial... Isto pode levar bastante tempo. Agarde.",
"Initial encryption running... Please try again later." : "O cifrado inicial está en execución... Tenteo máis tarde.",
+ "Missing requirements." : "Non se cumpren os requisitos.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o OpenSSL xunto coa extensión PHP e que estean activados e configurados correctamente. Polo de agora foi desactivado a aplicación de cifrado.",
+ "Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Go directly to your %spersonal settings%s." : "Vaia directamente aos seus %saxustes persoais%s.",
"Encryption" : "Cifrado",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
diff --git a/apps/files_encryption/l10n/gl.json b/apps/files_encryption/l10n/gl.json
index 4583f25da1a..3704f7d2c79 100644
--- a/apps/files_encryption/l10n/gl.json
+++ b/apps/files_encryption/l10n/gl.json
@@ -1,29 +1,31 @@
{ "translations": {
"Unknown error" : "Produciuse un erro descoñecido",
"Missing recovery key password" : "Falta a chave de recuperación",
- "Please repeat the recovery key password" : "Por favor repita a chave de recuperación",
- "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación establecida",
+ "Please repeat the recovery key password" : "Repita a chave de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación estabelecida",
"Recovery key successfully enabled" : "Activada satisfactoriamente a chave de recuperación",
"Could not disable recovery key. Please check your recovery key password!" : "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!",
"Recovery key successfully disabled" : "Desactivada satisfactoriamente a chave de recuperación",
- "Please provide the old recovery password" : "Por favor introduza a chave de recuperación anterior",
- "Please provide a new recovery password" : "Por favor introduza a nova chave de recuperación",
+ "Please provide the old recovery password" : "Introduza a chave de recuperación antiga",
+ "Please provide a new recovery password" : "Introduza a nova chave de recuperación",
"Please repeat the new recovery password" : "Por favor repita a nova chave de recuperación",
"Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente",
"Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.",
+ "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.",
+ "The old password was not correct, please try again." : "O contrasinal antigo non é correcto, ténteo de novo.",
+ "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.",
"Private key password successfully updated." : "A chave privada foi actualizada correctamente.",
- "Could not update the private key password. Maybe the old password was not correct." : "Non foi posíbel actualizar o contrasinal da chave privada. É probábel que o contrasinal antigo non sexa correcto.",
"File recovery settings updated" : "Actualizouse o ficheiro de axustes de recuperación",
"Could not update file recovery" : "Non foi posíbel actualizar o ficheiro de recuperación",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Non se iniciou a aplicación de cifrado! Quizais volva a activarse durante a sesión. Tente pechar a sesión e volver iniciala para que tamén se inicie a aplicación de cifrado.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior do %s (p.ex. o seu directorio corporativo). Vostede pode actualizar o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
"Unknown error. Please check your system settings or contact your administrator" : "Produciuse un erro descoñecido. Comprobe os axustes do sistema ou contacte co administrador",
- "Missing requirements." : "Non se cumpren os requisitos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o PHP 5.3.3 ou posterior e de que o OpenSSL xunto coa extensión PHP estean activados e configurados correctamente. Polo de agora foi desactivada a aplicación de cifrado.",
- "Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Comezou o cifrado inicial... Isto pode levar bastante tempo. Agarde.",
"Initial encryption running... Please try again later." : "O cifrado inicial está en execución... Tenteo máis tarde.",
+ "Missing requirements." : "Non se cumpren os requisitos.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o OpenSSL xunto coa extensión PHP e que estean activados e configurados correctamente. Polo de agora foi desactivado a aplicación de cifrado.",
+ "Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Go directly to your %spersonal settings%s." : "Vaia directamente aos seus %saxustes persoais%s.",
"Encryption" : "Cifrado",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
diff --git a/apps/files_encryption/l10n/hr.js b/apps/files_encryption/l10n/hr.js
index 7160e72ac23..0474a024642 100644
--- a/apps/files_encryption/l10n/hr.js
+++ b/apps/files_encryption/l10n/hr.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "Lozinka uspješno promijenjena.",
"Could not change the password. Maybe the old password was not correct." : "Lozinku nije moguće promijeniti. Možda je stara lozinka bila neispravna.",
"Private key password successfully updated." : "Lozinka privatnog ključa uspješno ažurirana.",
- "Could not update the private key password. Maybe the old password was not correct." : "Lozinku privatnog ključa nije moguće promijeniti. Možda stara je stara lozinka bila neispravna.",
"File recovery settings updated" : "Ažurirane postavke za oporavak datoteke",
"Could not update file recovery" : "Oporavak datoteke nije moguće ažurirati",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplikacija šifriranja nije inicijalizirana! Možda je aplikacija šifriranja bila reaktivirana tijekom vaše sesije.Da biste inicijalizirali aplikaciju šifriranja, molimo, pokušajte se odjaviti i ponovno prijaviti.",
@@ -16,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.",
"Unknown error. Please check your system settings or contact your administrator" : "Pogreška nepoznata. Molimo provjerite svoje sistemske postavke ili kontaktirajte svog administratora.",
"Missing requirements." : "Nedostaju preduvjeti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Molimo osigurajte da je instaliran PHP 5.3.3 ili noviji i da je OpenSSL zajedno s PHP ekstenzijom propisno aktivirani konfiguriran. Za sada, aplikacija šifriranja je deaktivirana.",
"Following users are not set up for encryption:" : "Sljedeći korisnici nisu određeni za šifriranje:",
"Initial encryption started... This can take some time. Please wait." : "Počelo inicijalno šifriranje... To može potrajati neko vrijeme. Molimo, pričekajte.",
"Initial encryption running... Please try again later." : "Inicijalno šifriranje u tijeku... Molimo, pokušajte ponovno kasnije.",
diff --git a/apps/files_encryption/l10n/hr.json b/apps/files_encryption/l10n/hr.json
index e375f3f6314..7c2af923fbd 100644
--- a/apps/files_encryption/l10n/hr.json
+++ b/apps/files_encryption/l10n/hr.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "Lozinka uspješno promijenjena.",
"Could not change the password. Maybe the old password was not correct." : "Lozinku nije moguće promijeniti. Možda je stara lozinka bila neispravna.",
"Private key password successfully updated." : "Lozinka privatnog ključa uspješno ažurirana.",
- "Could not update the private key password. Maybe the old password was not correct." : "Lozinku privatnog ključa nije moguće promijeniti. Možda stara je stara lozinka bila neispravna.",
"File recovery settings updated" : "Ažurirane postavke za oporavak datoteke",
"Could not update file recovery" : "Oporavak datoteke nije moguće ažurirati",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplikacija šifriranja nije inicijalizirana! Možda je aplikacija šifriranja bila reaktivirana tijekom vaše sesije.Da biste inicijalizirali aplikaciju šifriranja, molimo, pokušajte se odjaviti i ponovno prijaviti.",
@@ -14,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.",
"Unknown error. Please check your system settings or contact your administrator" : "Pogreška nepoznata. Molimo provjerite svoje sistemske postavke ili kontaktirajte svog administratora.",
"Missing requirements." : "Nedostaju preduvjeti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Molimo osigurajte da je instaliran PHP 5.3.3 ili noviji i da je OpenSSL zajedno s PHP ekstenzijom propisno aktivirani konfiguriran. Za sada, aplikacija šifriranja je deaktivirana.",
"Following users are not set up for encryption:" : "Sljedeći korisnici nisu određeni za šifriranje:",
"Initial encryption started... This can take some time. Please wait." : "Počelo inicijalno šifriranje... To može potrajati neko vrijeme. Molimo, pričekajte.",
"Initial encryption running... Please try again later." : "Inicijalno šifriranje u tijeku... Molimo, pokušajte ponovno kasnije.",
diff --git a/apps/files_encryption/l10n/hu_HU.js b/apps/files_encryption/l10n/hu_HU.js
index 349d7cf6e3e..92538d1ce56 100644
--- a/apps/files_encryption/l10n/hu_HU.js
+++ b/apps/files_encryption/l10n/hu_HU.js
@@ -8,14 +8,12 @@ OC.L10N.register(
"Password successfully changed." : "A jelszót sikeresen megváltoztattuk.",
"Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
- "Could not update the private key password. Maybe the old password was not correct." : "A személyes kulcsa jelszavát nem lehetett frissíteni. Lehet, hogy hibás volt a régi jelszó.",
"File recovery settings updated" : "A fájlhelyreállítási beállítások frissültek",
"Could not update file recovery" : "A fájlhelyreállítás nem frissíthető",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "A titkosítási modul nincs elindítva! Talán a munkafolyamat közben került engedélyezésre. Kérjük jelentkezzen ki majd ismét jelentkezzen be, hogy a titkosítási modul megfelelően elinduljon!",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Valószínűleg a %s rendszeren kívül változtatta meg a jelszavát (pl. a munkahelyi címtárban). A személyes beállításoknál frissítheti a titkos kulcsát, hogy ismét elérhesse a titkosított állományait.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
"Missing requirements." : "Hiányzó követelmények.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.",
"Following users are not set up for encryption:" : "A következő felhasználók nem állították be a titkosítást:",
"Initial encryption started... This can take some time. Please wait." : "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.",
"Initial encryption running... Please try again later." : "Kezedeti titkosítás fut... Próbálja később.",
diff --git a/apps/files_encryption/l10n/hu_HU.json b/apps/files_encryption/l10n/hu_HU.json
index e94c192180a..023cb51fc5a 100644
--- a/apps/files_encryption/l10n/hu_HU.json
+++ b/apps/files_encryption/l10n/hu_HU.json
@@ -6,14 +6,12 @@
"Password successfully changed." : "A jelszót sikeresen megváltoztattuk.",
"Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
- "Could not update the private key password. Maybe the old password was not correct." : "A személyes kulcsa jelszavát nem lehetett frissíteni. Lehet, hogy hibás volt a régi jelszó.",
"File recovery settings updated" : "A fájlhelyreállítási beállítások frissültek",
"Could not update file recovery" : "A fájlhelyreállítás nem frissíthető",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "A titkosítási modul nincs elindítva! Talán a munkafolyamat közben került engedélyezésre. Kérjük jelentkezzen ki majd ismét jelentkezzen be, hogy a titkosítási modul megfelelően elinduljon!",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Valószínűleg a %s rendszeren kívül változtatta meg a jelszavát (pl. a munkahelyi címtárban). A személyes beállításoknál frissítheti a titkos kulcsát, hogy ismét elérhesse a titkosított állományait.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
"Missing requirements." : "Hiányzó követelmények.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.",
"Following users are not set up for encryption:" : "A következő felhasználók nem állították be a titkosítást:",
"Initial encryption started... This can take some time. Please wait." : "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.",
"Initial encryption running... Please try again later." : "Kezedeti titkosítás fut... Próbálja később.",
diff --git a/apps/files_encryption/l10n/id.js b/apps/files_encryption/l10n/id.js
index 7137d13cb9f..6c621bddd04 100644
--- a/apps/files_encryption/l10n/id.js
+++ b/apps/files_encryption/l10n/id.js
@@ -14,7 +14,6 @@ OC.L10N.register(
"Password successfully changed." : "Sandi berhasil diubah",
"Could not change the password. Maybe the old password was not correct." : "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.",
"Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.",
- "Could not update the private key password. Maybe the old password was not correct." : "Tidak dapat memperbarui sandi kunci privat. Kemungkinan sandi lama yang Anda masukkan salah.",
"File recovery settings updated" : "Pengaturan pemulihan berkas diperbarui",
"Could not update file recovery" : "Tidak dapat memperbarui pemulihan berkas",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplikasi enkripsi tidak dimulai! Kemungkinan aplikasi enkripsi telah diaktifkan ulang saat sesi Anda. Silakan coba untuk keluar dan kembali lagi untuk memulai aplikasi enkripsi.",
@@ -22,7 +21,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
"Unknown error. Please check your system settings or contact your administrator" : "Kesalahan tidak diketahui. Silakan periksa pengaturan sistem Anda atau hubungi administrator",
"Missing requirements." : "Persyaratan tidak terpenuhi.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Pastikan bahwa PHP 5.3.3 atau yang lebih baru telah diinstal dan OpenSSL bersama ekstensi PHP telah diaktifkan dan dikonfigurasi dengan benar. Untuk saat ini, aplikasi enkripsi akan dinonaktifkan.",
"Following users are not set up for encryption:" : "Pengguna berikut belum diatur untuk enkripsi:",
"Initial encryption started... This can take some time. Please wait." : "Enskripsi awal dijalankan... Ini dapat memakan waktu. Silakan tunggu.",
"Initial encryption running... Please try again later." : "Enkripsi awal sedang berjalan... Sialakn coba lagi nanti.",
diff --git a/apps/files_encryption/l10n/id.json b/apps/files_encryption/l10n/id.json
index eb5361d4b66..090e56c76b2 100644
--- a/apps/files_encryption/l10n/id.json
+++ b/apps/files_encryption/l10n/id.json
@@ -12,7 +12,6 @@
"Password successfully changed." : "Sandi berhasil diubah",
"Could not change the password. Maybe the old password was not correct." : "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.",
"Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.",
- "Could not update the private key password. Maybe the old password was not correct." : "Tidak dapat memperbarui sandi kunci privat. Kemungkinan sandi lama yang Anda masukkan salah.",
"File recovery settings updated" : "Pengaturan pemulihan berkas diperbarui",
"Could not update file recovery" : "Tidak dapat memperbarui pemulihan berkas",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplikasi enkripsi tidak dimulai! Kemungkinan aplikasi enkripsi telah diaktifkan ulang saat sesi Anda. Silakan coba untuk keluar dan kembali lagi untuk memulai aplikasi enkripsi.",
@@ -20,7 +19,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
"Unknown error. Please check your system settings or contact your administrator" : "Kesalahan tidak diketahui. Silakan periksa pengaturan sistem Anda atau hubungi administrator",
"Missing requirements." : "Persyaratan tidak terpenuhi.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Pastikan bahwa PHP 5.3.3 atau yang lebih baru telah diinstal dan OpenSSL bersama ekstensi PHP telah diaktifkan dan dikonfigurasi dengan benar. Untuk saat ini, aplikasi enkripsi akan dinonaktifkan.",
"Following users are not set up for encryption:" : "Pengguna berikut belum diatur untuk enkripsi:",
"Initial encryption started... This can take some time. Please wait." : "Enskripsi awal dijalankan... Ini dapat memakan waktu. Silakan tunggu.",
"Initial encryption running... Please try again later." : "Enkripsi awal sedang berjalan... Sialakn coba lagi nanti.",
diff --git a/apps/files_encryption/l10n/it.js b/apps/files_encryption/l10n/it.js
index e71abc94675..08167b8ea7c 100644
--- a/apps/files_encryption/l10n/it.js
+++ b/apps/files_encryption/l10n/it.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Ripeti la nuova password di recupero",
"Password successfully changed." : "Password modificata correttamente.",
"Could not change the password. Maybe the old password was not correct." : "Impossibile cambiare la password. Forse la vecchia password non era corretta.",
+ "Could not update the private key password." : "Impossibile aggiornare la password della chiave privata.",
+ "The old password was not correct, please try again." : "La vecchia password non era corretta, prova di nuovo.",
+ "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.",
"Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.",
- "Could not update the private key password. Maybe the old password was not correct." : "Impossibile aggiornare la password della chiave privata. Forse la vecchia password non era corretta.",
"File recovery settings updated" : "Impostazioni di ripristino dei file aggiornate",
"Could not update file recovery" : "Impossibile aggiornare il ripristino dei file",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Applicazione di cifratura non inizializzata. Forse l'applicazione è stata riabilitata durante la tua sessione. Prova a disconnetterti e ad effettuare nuovamente l'accesso per inizializzarla.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore sconosciuto. Controlla le impostazioni di sistema o contatta il tuo amministratore",
"Missing requirements." : "Requisiti mancanti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assicurati che sia installato PHP 5.3.3 o versioni successive e che l'estensione OpenSSL di PHP sia abilitata e configurata correttamente. Per ora, l'applicazione di cifratura è disabilitata.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assicurati che OpenSSL e l'estensione PHP sia abilitatati e configurati correttamente. Per ora, l'applicazione di cifratura è disabilitata.",
"Following users are not set up for encryption:" : "I seguenti utenti non sono configurati per la cifratura:",
"Initial encryption started... This can take some time. Please wait." : "Cifratura iniziale avviata... Potrebbe richiedere del tempo. Attendi.",
"Initial encryption running... Please try again later." : "Cifratura iniziale in esecuzione... Riprova più tardi.",
diff --git a/apps/files_encryption/l10n/it.json b/apps/files_encryption/l10n/it.json
index d051a2cfc98..15d2b1b0343 100644
--- a/apps/files_encryption/l10n/it.json
+++ b/apps/files_encryption/l10n/it.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Ripeti la nuova password di recupero",
"Password successfully changed." : "Password modificata correttamente.",
"Could not change the password. Maybe the old password was not correct." : "Impossibile cambiare la password. Forse la vecchia password non era corretta.",
+ "Could not update the private key password." : "Impossibile aggiornare la password della chiave privata.",
+ "The old password was not correct, please try again." : "La vecchia password non era corretta, prova di nuovo.",
+ "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.",
"Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.",
- "Could not update the private key password. Maybe the old password was not correct." : "Impossibile aggiornare la password della chiave privata. Forse la vecchia password non era corretta.",
"File recovery settings updated" : "Impostazioni di ripristino dei file aggiornate",
"Could not update file recovery" : "Impossibile aggiornare il ripristino dei file",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Applicazione di cifratura non inizializzata. Forse l'applicazione è stata riabilitata durante la tua sessione. Prova a disconnetterti e ad effettuare nuovamente l'accesso per inizializzarla.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore sconosciuto. Controlla le impostazioni di sistema o contatta il tuo amministratore",
"Missing requirements." : "Requisiti mancanti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assicurati che sia installato PHP 5.3.3 o versioni successive e che l'estensione OpenSSL di PHP sia abilitata e configurata correttamente. Per ora, l'applicazione di cifratura è disabilitata.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assicurati che OpenSSL e l'estensione PHP sia abilitatati e configurati correttamente. Per ora, l'applicazione di cifratura è disabilitata.",
"Following users are not set up for encryption:" : "I seguenti utenti non sono configurati per la cifratura:",
"Initial encryption started... This can take some time. Please wait." : "Cifratura iniziale avviata... Potrebbe richiedere del tempo. Attendi.",
"Initial encryption running... Please try again later." : "Cifratura iniziale in esecuzione... Riprova più tardi.",
diff --git a/apps/files_encryption/l10n/ja.js b/apps/files_encryption/l10n/ja.js
index e4ca38f822b..6d0930b5e25 100644
--- a/apps/files_encryption/l10n/ja.js
+++ b/apps/files_encryption/l10n/ja.js
@@ -13,19 +13,21 @@ OC.L10N.register(
"Please repeat the new recovery password" : "新しい復旧キーのパスワードをもう一度入力",
"Password successfully changed." : "パスワードを変更できました。",
"Could not change the password. Maybe the old password was not correct." : "パスワードを変更できませんでした。古いパスワードが間違っているかもしれません。",
+ "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." : "秘密鍵のパスワードが正常に更新されました。",
- "Could not update the private key password. Maybe the old password was not correct." : "秘密鍵のパスワードを更新できませんでした。古いパスワードが正確でない場合があります。",
"File recovery settings updated" : "ファイルリカバリ設定を更新しました",
"Could not update file recovery" : "ファイルリカバリを更新できませんでした",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "セッション中に暗号化アプリを再度有効にされたため、暗号化アプリが初期化されていません。暗号化アプリを初期化するため、ログアウトしてログインしなおしてください。",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "プライベートキーが有効ではありません!パスワードが%sの外部で変更された(例: 共同ディレクトリ)と思われます。個人設定でプライベートキーのパスワードを更新して、暗号化ファイルへのアクセスを回復することができます。",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
"Unknown error. Please check your system settings or contact your administrator" : "不明なエラーです。システム設定を確認するか、管理者に問い合わせてください。",
- "Missing requirements." : "必要要件が満たされていません。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "必ず、PHP 5.3.3もしくはそれ以上をインストールし、同時にOpenSSLのPHP拡張を有効にした上でOpenSSLも同様にインストール、適切に設定してください。現時点では暗号化アプリは無効になっています。",
- "Following users are not set up for encryption:" : "以下のユーザーは、暗号化設定がされていません:",
"Initial encryption started... This can take some time. Please wait." : "暗号化の初期化作業を開始しました... この処理にはしばらく時間がかかります。お待ちください。",
"Initial encryption running... Please try again later." : "初期暗号化実行中... 後でもう一度お試しください。",
+ "Missing requirements." : "必要要件が満たされていません。",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "必ず、OpenSSL及びOpenSSLのPHPの拡張を有効にした上で、適切に設定してください。現時点では暗号化アプリは無効になっています。",
+ "Following users are not set up for encryption:" : "以下のユーザーは、暗号化設定がされていません:",
"Go directly to your %spersonal settings%s." : "直接 %s個人設定%s に進む。",
"Encryption" : "暗号化",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
diff --git a/apps/files_encryption/l10n/ja.json b/apps/files_encryption/l10n/ja.json
index 471bf314442..abf2a3555ee 100644
--- a/apps/files_encryption/l10n/ja.json
+++ b/apps/files_encryption/l10n/ja.json
@@ -11,19 +11,21 @@
"Please repeat the new recovery password" : "新しい復旧キーのパスワードをもう一度入力",
"Password successfully changed." : "パスワードを変更できました。",
"Could not change the password. Maybe the old password was not correct." : "パスワードを変更できませんでした。古いパスワードが間違っているかもしれません。",
+ "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." : "秘密鍵のパスワードが正常に更新されました。",
- "Could not update the private key password. Maybe the old password was not correct." : "秘密鍵のパスワードを更新できませんでした。古いパスワードが正確でない場合があります。",
"File recovery settings updated" : "ファイルリカバリ設定を更新しました",
"Could not update file recovery" : "ファイルリカバリを更新できませんでした",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "セッション中に暗号化アプリを再度有効にされたため、暗号化アプリが初期化されていません。暗号化アプリを初期化するため、ログアウトしてログインしなおしてください。",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "プライベートキーが有効ではありません!パスワードが%sの外部で変更された(例: 共同ディレクトリ)と思われます。個人設定でプライベートキーのパスワードを更新して、暗号化ファイルへのアクセスを回復することができます。",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
"Unknown error. Please check your system settings or contact your administrator" : "不明なエラーです。システム設定を確認するか、管理者に問い合わせてください。",
- "Missing requirements." : "必要要件が満たされていません。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "必ず、PHP 5.3.3もしくはそれ以上をインストールし、同時にOpenSSLのPHP拡張を有効にした上でOpenSSLも同様にインストール、適切に設定してください。現時点では暗号化アプリは無効になっています。",
- "Following users are not set up for encryption:" : "以下のユーザーは、暗号化設定がされていません:",
"Initial encryption started... This can take some time. Please wait." : "暗号化の初期化作業を開始しました... この処理にはしばらく時間がかかります。お待ちください。",
"Initial encryption running... Please try again later." : "初期暗号化実行中... 後でもう一度お試しください。",
+ "Missing requirements." : "必要要件が満たされていません。",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "必ず、OpenSSL及びOpenSSLのPHPの拡張を有効にした上で、適切に設定してください。現時点では暗号化アプリは無効になっています。",
+ "Following users are not set up for encryption:" : "以下のユーザーは、暗号化設定がされていません:",
"Go directly to your %spersonal settings%s." : "直接 %s個人設定%s に進む。",
"Encryption" : "暗号化",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
diff --git a/apps/files_encryption/l10n/kn.js b/apps/files_encryption/l10n/kn.js
new file mode 100644
index 00000000000..b3fcb4aba3d
--- /dev/null
+++ b/apps/files_encryption/l10n/kn.js
@@ -0,0 +1,9 @@
+OC.L10N.register(
+ "files_encryption",
+ {
+ "Unknown error" : "ಗೊತ್ತಿಲ್ಲದ ದೋಷ",
+ "Encryption" : "ರಹಸ್ಯ ಸಂಕೇತೀಕರಿಸು",
+ "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ",
+ "Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/files_encryption/l10n/kn.json b/apps/files_encryption/l10n/kn.json
new file mode 100644
index 00000000000..a6c76f69b22
--- /dev/null
+++ b/apps/files_encryption/l10n/kn.json
@@ -0,0 +1,7 @@
+{ "translations": {
+ "Unknown error" : "ಗೊತ್ತಿಲ್ಲದ ದೋಷ",
+ "Encryption" : "ರಹಸ್ಯ ಸಂಕೇತೀಕರಿಸು",
+ "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ",
+ "Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/files_encryption/l10n/ko.js b/apps/files_encryption/l10n/ko.js
index a994dc7d339..82c29ecb11a 100644
--- a/apps/files_encryption/l10n/ko.js
+++ b/apps/files_encryption/l10n/ko.js
@@ -8,14 +8,12 @@ OC.L10N.register(
"Password successfully changed." : "암호가 성공적으로 변경되었습니다",
"Could not change the password. Maybe the old password was not correct." : "암호를 변경할 수 없습니다. 예전 암호가 정확하지 않은 것 같습니다.",
"Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 됨.",
- "Could not update the private key password. Maybe the old password was not correct." : "개인 키 암호를 업데이트할 수 없습니다. 이전 암호가 올바르지 않은 것 같습니다.",
"File recovery settings updated" : "파일 복구 설정 업데이트됨",
"Could not update file recovery" : "파일 복구를 업데이트할 수 없습니다",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "암호화 앱이 초기화되지 않았습니다! 암호화 앱이 다시 활성화된 것 같습니다. 암호화 앱을 초기화하려면 로그아웃했다 다시 로그인하십시오.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "개인 키가 올바르지 않습니다! 암호가 %s(예: 회사 디렉터리) 외부에서 변경된 것 같습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 수정하십시오.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.",
"Missing requirements." : "요구 사항이 부족합니다.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 이상 설치 여부, PHP의 OpenSSL 확장 기능 활성화 및 설정 여부를 확인하십시오. 암호화 앱이 비활성화 되었습니다.",
"Following users are not set up for encryption:" : "다음 사용자는 암호화를 사용할 수 없습니다:",
"Initial encryption started... This can take some time. Please wait." : "초기 암호화가 시작되었습니다... 시간이 걸릴 수도 있으니 기다려 주십시오.",
"Encryption" : "암호화",
diff --git a/apps/files_encryption/l10n/ko.json b/apps/files_encryption/l10n/ko.json
index 3cc8ec06b06..e1b53e0983e 100644
--- a/apps/files_encryption/l10n/ko.json
+++ b/apps/files_encryption/l10n/ko.json
@@ -6,14 +6,12 @@
"Password successfully changed." : "암호가 성공적으로 변경되었습니다",
"Could not change the password. Maybe the old password was not correct." : "암호를 변경할 수 없습니다. 예전 암호가 정확하지 않은 것 같습니다.",
"Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 됨.",
- "Could not update the private key password. Maybe the old password was not correct." : "개인 키 암호를 업데이트할 수 없습니다. 이전 암호가 올바르지 않은 것 같습니다.",
"File recovery settings updated" : "파일 복구 설정 업데이트됨",
"Could not update file recovery" : "파일 복구를 업데이트할 수 없습니다",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "암호화 앱이 초기화되지 않았습니다! 암호화 앱이 다시 활성화된 것 같습니다. 암호화 앱을 초기화하려면 로그아웃했다 다시 로그인하십시오.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "개인 키가 올바르지 않습니다! 암호가 %s(예: 회사 디렉터리) 외부에서 변경된 것 같습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 수정하십시오.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.",
"Missing requirements." : "요구 사항이 부족합니다.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 이상 설치 여부, PHP의 OpenSSL 확장 기능 활성화 및 설정 여부를 확인하십시오. 암호화 앱이 비활성화 되었습니다.",
"Following users are not set up for encryption:" : "다음 사용자는 암호화를 사용할 수 없습니다:",
"Initial encryption started... This can take some time. Please wait." : "초기 암호화가 시작되었습니다... 시간이 걸릴 수도 있으니 기다려 주십시오.",
"Encryption" : "암호화",
diff --git a/apps/files_encryption/l10n/lt_LT.js b/apps/files_encryption/l10n/lt_LT.js
index eebfcedaf0b..98541b865fe 100644
--- a/apps/files_encryption/l10n/lt_LT.js
+++ b/apps/files_encryption/l10n/lt_LT.js
@@ -8,14 +8,12 @@ OC.L10N.register(
"Password successfully changed." : "Slaptažodis sėkmingai pakeistas",
"Could not change the password. Maybe the old password was not correct." : "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.",
"Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nepavyko atnaujinti privataus rakto slaptažodžio. Gali būti, kad buvo neteisingai suvestas senasis.",
"File recovery settings updated" : "Failų atkūrimo nustatymai pakeisti",
"Could not update file recovery" : "Neišėjo atnaujinti failų atkūrimo",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Šifravimo programa nepaleista! Galbūt šifravimo programa buvo įjungta dar kartą Jūsų sesijos metu. Prašome atsijungti ir vėl prisijungti, kad paleisti šifravimo programą.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Jūsų privatus raktas yra netinkamas! Panašu, kad Jūsų slaptažodis buvo pakeistas už %s (pvz. Jūsų organizacijos kataloge). Galite atnaujinti savo privataus rakto slaptažodį savo asmeniniuose nustatymuose, kad atkurti prieigą prie savo šifruotų failų.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
"Missing requirements." : "Trūkstami laukai.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prašome įsitikinti, kad PHP 5.3.3 ar naujesnė yra įdiegta ir kad OpenSSL kartu su PHP plėtiniu yra šjungti ir teisingai sukonfigūruoti. Kol kas šifravimo programa bus išjungta.",
"Following users are not set up for encryption:" : "Sekantys naudotojai nenustatyti šifravimui:",
"Initial encryption started... This can take some time. Please wait." : "Pradėtas pirminis šifravimas... Tai gali užtrukti. Prašome palaukti.",
"Encryption" : "Šifravimas",
diff --git a/apps/files_encryption/l10n/lt_LT.json b/apps/files_encryption/l10n/lt_LT.json
index c642bfd7528..e0e486d020b 100644
--- a/apps/files_encryption/l10n/lt_LT.json
+++ b/apps/files_encryption/l10n/lt_LT.json
@@ -6,14 +6,12 @@
"Password successfully changed." : "Slaptažodis sėkmingai pakeistas",
"Could not change the password. Maybe the old password was not correct." : "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.",
"Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nepavyko atnaujinti privataus rakto slaptažodžio. Gali būti, kad buvo neteisingai suvestas senasis.",
"File recovery settings updated" : "Failų atkūrimo nustatymai pakeisti",
"Could not update file recovery" : "Neišėjo atnaujinti failų atkūrimo",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Šifravimo programa nepaleista! Galbūt šifravimo programa buvo įjungta dar kartą Jūsų sesijos metu. Prašome atsijungti ir vėl prisijungti, kad paleisti šifravimo programą.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Jūsų privatus raktas yra netinkamas! Panašu, kad Jūsų slaptažodis buvo pakeistas už %s (pvz. Jūsų organizacijos kataloge). Galite atnaujinti savo privataus rakto slaptažodį savo asmeniniuose nustatymuose, kad atkurti prieigą prie savo šifruotų failų.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
"Missing requirements." : "Trūkstami laukai.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prašome įsitikinti, kad PHP 5.3.3 ar naujesnė yra įdiegta ir kad OpenSSL kartu su PHP plėtiniu yra šjungti ir teisingai sukonfigūruoti. Kol kas šifravimo programa bus išjungta.",
"Following users are not set up for encryption:" : "Sekantys naudotojai nenustatyti šifravimui:",
"Initial encryption started... This can take some time. Please wait." : "Pradėtas pirminis šifravimas... Tai gali užtrukti. Prašome palaukti.",
"Encryption" : "Šifravimas",
diff --git a/apps/files_encryption/l10n/lv.js b/apps/files_encryption/l10n/lv.js
index 841a7fc754d..26a761dc5a8 100644
--- a/apps/files_encryption/l10n/lv.js
+++ b/apps/files_encryption/l10n/lv.js
@@ -2,6 +2,8 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Nezināma kļūda",
- "Encryption" : "Šifrēšana"
+ "Encryption" : "Šifrēšana",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.",
+ "Enabled" : "Pievienots"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/files_encryption/l10n/lv.json b/apps/files_encryption/l10n/lv.json
index b5c22c13a86..ff29809e4d1 100644
--- a/apps/files_encryption/l10n/lv.json
+++ b/apps/files_encryption/l10n/lv.json
@@ -1,5 +1,7 @@
{ "translations": {
"Unknown error" : "Nezināma kļūda",
- "Encryption" : "Šifrēšana"
+ "Encryption" : "Šifrēšana",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.",
+ "Enabled" : "Pievienots"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_encryption/l10n/nb_NO.js b/apps/files_encryption/l10n/nb_NO.js
index 3e018cd76f2..3def2334352 100644
--- a/apps/files_encryption/l10n/nb_NO.js
+++ b/apps/files_encryption/l10n/nb_NO.js
@@ -2,24 +2,32 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Ukjent feil",
+ "Missing recovery key password" : "Passord for gjenopprettingsnøkkel mangler",
+ "Please repeat the recovery key password" : "Gjenta passord for gjenopprettingsnøkkel",
+ "Repeated recovery key password does not match the provided recovery key password" : "Gjentatt passord for gjenopprettingsnøkkel stemmer ikke med oppgitt passord for gjenopprettingsnøkkel",
"Recovery key successfully enabled" : "Gjenopprettingsnøkkel aktivert",
"Could not disable recovery key. Please check your recovery key password!" : "Klarte ikke å deaktivere gjenopprettingsnøkkel. Sjekk passordet for gjenopprettingsnøkkelen.",
"Recovery key successfully disabled" : "Gjenopprettingsnøkkel ble deaktivert",
+ "Please provide the old recovery password" : "Oppgi det gamle gjenopprettingspassordet",
+ "Please provide a new recovery password" : "Oppgi et nytt gjenopprettingspassord",
+ "Please repeat the new recovery password" : "Gjenta det nye gjenopprettingspassordet",
"Password successfully changed." : "Passordet ble endret.",
"Could not change the password. Maybe the old password was not correct." : "Klarte ikke å endre passordet. Kanskje gammelt passord ikke var korrekt.",
+ "Could not update the private key password." : "Klarte ikke å oppdatere privatnøkkelpassordet.",
+ "The old password was not correct, please try again." : "Det gamle passordet var feil. Prøv igjen.",
+ "The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.",
"Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.",
- "Could not update the private key password. Maybe the old password was not correct." : "Klarte ikke å oppdatere passord for privat nøkkel. Kanskje gammelt passord ikke var korrekt.",
"File recovery settings updated" : "Innstillinger for gjenoppretting av filer ble oppdatert",
"Could not update file recovery" : "Klarte ikke å oppdatere gjenoppretting av filer",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krypterings-app ikke initialisert! Kanskje krypterings-appen ble aktivert på nytt i løpet av økten din. Prøv å logge ut og logge inn igjen for å initialisere krypterings-appen.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Din private nøkkel er ikke gyldig! Sannsynligvis ble passordet ditt endret utenfor %s. (f.eks. din bedriftskatalog). Du kan oppdatere passordet for din private nøkkel i dine personlige innstillinger for å gjenvinne tilgang til de krypterte filene dine.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukjent feil. Sjekk systeminnstillingene eller kontakt administratoren.",
- "Missing requirements." : "Manglende krav.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at PHP 5.3.3 eller nyere er installert og at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Enn så lenge er krypterings-appen deaktivert.",
- "Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangs kryptering startet... Dette kan ta litt tid. Vennligst vent.",
"Initial encryption running... Please try again later." : "Førstegangs kryptering kjører... Prøv igjen senere.",
+ "Missing requirements." : "Manglende krav.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Krypterings-appen er foreløpig deaktivert.",
+ "Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:",
"Go directly to your %spersonal settings%s." : "Gå direkte til dine %spersonlige innstillinger%s.",
"Encryption" : "Kryptering",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
diff --git a/apps/files_encryption/l10n/nb_NO.json b/apps/files_encryption/l10n/nb_NO.json
index ba3e2210a96..bada449a86c 100644
--- a/apps/files_encryption/l10n/nb_NO.json
+++ b/apps/files_encryption/l10n/nb_NO.json
@@ -1,23 +1,31 @@
{ "translations": {
"Unknown error" : "Ukjent feil",
+ "Missing recovery key password" : "Passord for gjenopprettingsnøkkel mangler",
+ "Please repeat the recovery key password" : "Gjenta passord for gjenopprettingsnøkkel",
+ "Repeated recovery key password does not match the provided recovery key password" : "Gjentatt passord for gjenopprettingsnøkkel stemmer ikke med oppgitt passord for gjenopprettingsnøkkel",
"Recovery key successfully enabled" : "Gjenopprettingsnøkkel aktivert",
"Could not disable recovery key. Please check your recovery key password!" : "Klarte ikke å deaktivere gjenopprettingsnøkkel. Sjekk passordet for gjenopprettingsnøkkelen.",
"Recovery key successfully disabled" : "Gjenopprettingsnøkkel ble deaktivert",
+ "Please provide the old recovery password" : "Oppgi det gamle gjenopprettingspassordet",
+ "Please provide a new recovery password" : "Oppgi et nytt gjenopprettingspassord",
+ "Please repeat the new recovery password" : "Gjenta det nye gjenopprettingspassordet",
"Password successfully changed." : "Passordet ble endret.",
"Could not change the password. Maybe the old password was not correct." : "Klarte ikke å endre passordet. Kanskje gammelt passord ikke var korrekt.",
+ "Could not update the private key password." : "Klarte ikke å oppdatere privatnøkkelpassordet.",
+ "The old password was not correct, please try again." : "Det gamle passordet var feil. Prøv igjen.",
+ "The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.",
"Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.",
- "Could not update the private key password. Maybe the old password was not correct." : "Klarte ikke å oppdatere passord for privat nøkkel. Kanskje gammelt passord ikke var korrekt.",
"File recovery settings updated" : "Innstillinger for gjenoppretting av filer ble oppdatert",
"Could not update file recovery" : "Klarte ikke å oppdatere gjenoppretting av filer",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krypterings-app ikke initialisert! Kanskje krypterings-appen ble aktivert på nytt i løpet av økten din. Prøv å logge ut og logge inn igjen for å initialisere krypterings-appen.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Din private nøkkel er ikke gyldig! Sannsynligvis ble passordet ditt endret utenfor %s. (f.eks. din bedriftskatalog). Du kan oppdatere passordet for din private nøkkel i dine personlige innstillinger for å gjenvinne tilgang til de krypterte filene dine.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukjent feil. Sjekk systeminnstillingene eller kontakt administratoren.",
- "Missing requirements." : "Manglende krav.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at PHP 5.3.3 eller nyere er installert og at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Enn så lenge er krypterings-appen deaktivert.",
- "Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangs kryptering startet... Dette kan ta litt tid. Vennligst vent.",
"Initial encryption running... Please try again later." : "Førstegangs kryptering kjører... Prøv igjen senere.",
+ "Missing requirements." : "Manglende krav.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Krypterings-appen er foreløpig deaktivert.",
+ "Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:",
"Go directly to your %spersonal settings%s." : "Gå direkte til dine %spersonlige innstillinger%s.",
"Encryption" : "Kryptering",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
diff --git a/apps/files_encryption/l10n/nl.js b/apps/files_encryption/l10n/nl.js
index 04b2c9e8175..0400accd2bd 100644
--- a/apps/files_encryption/l10n/nl.js
+++ b/apps/files_encryption/l10n/nl.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Herhaal het nieuwe herstelwachtwoord",
"Password successfully changed." : "Wachtwoord succesvol gewijzigd.",
"Could not change the password. Maybe the old password was not correct." : "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.",
+ "Could not update the private key password." : "Kon het wachtwoord van de privésleutel niet bijwerken.",
+ "The old password was not correct, please try again." : "Het oude wachtwoord was onjuist, probeer het opnieuw.",
+ "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.",
"Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.",
- "Could not update the private key password. Maybe the old password was not correct." : "Kon het wachtwoord van de privésleutel niet wijzigen. Misschien was het oude wachtwoord onjuist.",
"File recovery settings updated" : "Bestandsherstel instellingen bijgewerkt",
"Could not update file recovery" : "Kon bestandsherstel niet bijwerken",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Crypto app niet geïnitialiseerd. Misschien werd de crypto app geheractiveerd tijdens de sessie. Log uit en log daarna opnieuw in om de crypto app te initialiseren.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.",
"Unknown error. Please check your system settings or contact your administrator" : "Onbekende fout. Controleer uw systeeminstellingen of neem contact op met de beheerder",
"Missing requirements." : "Missende benodigdheden.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Wees er zeker van dat PHP5.3.3 of nieuwer is geïstalleerd en dat de OpenSSL PHP extensie is ingeschakeld en correct geconfigureerd. De versleutel-app is voorlopig uitgeschakeld.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Weed er zeker van dat OpenSSL met de PHP extensie is ingeschakeld en goed geconfigureerd. Op dit moment is de encryptie app uitgeschakeld.",
"Following users are not set up for encryption:" : "De volgende gebruikers hebben geen configuratie voor encryptie:",
"Initial encryption started... This can take some time. Please wait." : "initiële versleuteling gestart... Dit kan even duren, geduld a.u.b.",
"Initial encryption running... Please try again later." : "Initiële versleuteling bezig... Probeer het later opnieuw.",
diff --git a/apps/files_encryption/l10n/nl.json b/apps/files_encryption/l10n/nl.json
index 67f0d2e4c89..eb2ea89428b 100644
--- a/apps/files_encryption/l10n/nl.json
+++ b/apps/files_encryption/l10n/nl.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Herhaal het nieuwe herstelwachtwoord",
"Password successfully changed." : "Wachtwoord succesvol gewijzigd.",
"Could not change the password. Maybe the old password was not correct." : "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.",
+ "Could not update the private key password." : "Kon het wachtwoord van de privésleutel niet bijwerken.",
+ "The old password was not correct, please try again." : "Het oude wachtwoord was onjuist, probeer het opnieuw.",
+ "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.",
"Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.",
- "Could not update the private key password. Maybe the old password was not correct." : "Kon het wachtwoord van de privésleutel niet wijzigen. Misschien was het oude wachtwoord onjuist.",
"File recovery settings updated" : "Bestandsherstel instellingen bijgewerkt",
"Could not update file recovery" : "Kon bestandsherstel niet bijwerken",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Crypto app niet geïnitialiseerd. Misschien werd de crypto app geheractiveerd tijdens de sessie. Log uit en log daarna opnieuw in om de crypto app te initialiseren.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.",
"Unknown error. Please check your system settings or contact your administrator" : "Onbekende fout. Controleer uw systeeminstellingen of neem contact op met de beheerder",
"Missing requirements." : "Missende benodigdheden.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Wees er zeker van dat PHP5.3.3 of nieuwer is geïstalleerd en dat de OpenSSL PHP extensie is ingeschakeld en correct geconfigureerd. De versleutel-app is voorlopig uitgeschakeld.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Weed er zeker van dat OpenSSL met de PHP extensie is ingeschakeld en goed geconfigureerd. Op dit moment is de encryptie app uitgeschakeld.",
"Following users are not set up for encryption:" : "De volgende gebruikers hebben geen configuratie voor encryptie:",
"Initial encryption started... This can take some time. Please wait." : "initiële versleuteling gestart... Dit kan even duren, geduld a.u.b.",
"Initial encryption running... Please try again later." : "Initiële versleuteling bezig... Probeer het later opnieuw.",
diff --git a/apps/files_encryption/l10n/pl.js b/apps/files_encryption/l10n/pl.js
index a0bccc8c9f2..26f3cff7397 100644
--- a/apps/files_encryption/l10n/pl.js
+++ b/apps/files_encryption/l10n/pl.js
@@ -2,14 +2,21 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Nieznany błąd",
+ "Missing recovery key password" : "Brakujące hasło klucza odzyskiwania",
"Please repeat the recovery key password" : "Proszę powtórz nowe hasło klucza odzyskiwania",
+ "Repeated recovery key password does not match the provided recovery key password" : "Hasła klucza odzyskiwania nie zgadzają się",
"Recovery key successfully enabled" : "Klucz odzyskiwania włączony",
"Could not disable recovery key. Please check your recovery key password!" : "Nie można wyłączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
"Recovery key successfully disabled" : "Klucz odzyskiwania wyłączony",
+ "Please provide the old recovery password" : "Podaj stare hasło odzyskiwania",
+ "Please provide a new recovery password" : "Podaj nowe hasło odzyskiwania",
+ "Please repeat the new recovery password" : "Proszę powtórz nowe hasło odzyskiwania",
"Password successfully changed." : "Zmiana hasła udana.",
"Could not change the password. Maybe the old password was not correct." : "Nie można zmienić hasła. Może stare hasło nie było poprawne.",
+ "Could not update the private key password." : "Nie można zmienić hasła klucza prywatnego.",
+ "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.",
+ "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.",
"Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nie można zmienić prywatnego hasła. Może stare hasło nie było poprawne.",
"File recovery settings updated" : "Ustawienia odzyskiwania plików zmienione",
"Could not update file recovery" : "Nie można zmienić pliku odzyskiwania",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Szyfrowanie aplikacja nie została zainicjowane! Może szyfrowanie aplikacji zostało ponownie włączone podczas tej sesji. Spróbuj się wylogować i zalogować ponownie aby zainicjować szyfrowanie aplikacji.",
@@ -17,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.",
"Unknown error. Please check your system settings or contact your administrator" : "Nieznany błąd. Proszę sprawdzić ustawienia systemowe lub skontaktować się z administratorem",
"Missing requirements." : "Brak wymagań.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Proszę upewnić się, że PHP 5.3.3 lub nowszy jest zainstalowany i że OpenSSL oraz rozszerzenie PHP jest włączone i poprawnie skonfigurowane. Obecnie szyfrowanie aplikacji zostało wyłączone.",
"Following users are not set up for encryption:" : "Następujący użytkownicy nie mają skonfigurowanego szyfrowania:",
"Initial encryption started... This can take some time. Please wait." : "Rozpoczęto szyfrowanie... To może chwilę potrwać. Proszę czekać.",
"Initial encryption running... Please try again later." : "Trwa szyfrowanie początkowe...Spróbuj ponownie.",
diff --git a/apps/files_encryption/l10n/pl.json b/apps/files_encryption/l10n/pl.json
index dd817a40542..ae2b3f06218 100644
--- a/apps/files_encryption/l10n/pl.json
+++ b/apps/files_encryption/l10n/pl.json
@@ -1,13 +1,20 @@
{ "translations": {
"Unknown error" : "Nieznany błąd",
+ "Missing recovery key password" : "Brakujące hasło klucza odzyskiwania",
"Please repeat the recovery key password" : "Proszę powtórz nowe hasło klucza odzyskiwania",
+ "Repeated recovery key password does not match the provided recovery key password" : "Hasła klucza odzyskiwania nie zgadzają się",
"Recovery key successfully enabled" : "Klucz odzyskiwania włączony",
"Could not disable recovery key. Please check your recovery key password!" : "Nie można wyłączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
"Recovery key successfully disabled" : "Klucz odzyskiwania wyłączony",
+ "Please provide the old recovery password" : "Podaj stare hasło odzyskiwania",
+ "Please provide a new recovery password" : "Podaj nowe hasło odzyskiwania",
+ "Please repeat the new recovery password" : "Proszę powtórz nowe hasło odzyskiwania",
"Password successfully changed." : "Zmiana hasła udana.",
"Could not change the password. Maybe the old password was not correct." : "Nie można zmienić hasła. Może stare hasło nie było poprawne.",
+ "Could not update the private key password." : "Nie można zmienić hasła klucza prywatnego.",
+ "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.",
+ "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.",
"Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nie można zmienić prywatnego hasła. Może stare hasło nie było poprawne.",
"File recovery settings updated" : "Ustawienia odzyskiwania plików zmienione",
"Could not update file recovery" : "Nie można zmienić pliku odzyskiwania",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Szyfrowanie aplikacja nie została zainicjowane! Może szyfrowanie aplikacji zostało ponownie włączone podczas tej sesji. Spróbuj się wylogować i zalogować ponownie aby zainicjować szyfrowanie aplikacji.",
@@ -15,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.",
"Unknown error. Please check your system settings or contact your administrator" : "Nieznany błąd. Proszę sprawdzić ustawienia systemowe lub skontaktować się z administratorem",
"Missing requirements." : "Brak wymagań.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Proszę upewnić się, że PHP 5.3.3 lub nowszy jest zainstalowany i że OpenSSL oraz rozszerzenie PHP jest włączone i poprawnie skonfigurowane. Obecnie szyfrowanie aplikacji zostało wyłączone.",
"Following users are not set up for encryption:" : "Następujący użytkownicy nie mają skonfigurowanego szyfrowania:",
"Initial encryption started... This can take some time. Please wait." : "Rozpoczęto szyfrowanie... To może chwilę potrwać. Proszę czekać.",
"Initial encryption running... Please try again later." : "Trwa szyfrowanie początkowe...Spróbuj ponownie.",
diff --git a/apps/files_encryption/l10n/pt_BR.js b/apps/files_encryption/l10n/pt_BR.js
index 3849876d602..2bcf3bc345b 100644
--- a/apps/files_encryption/l10n/pt_BR.js
+++ b/apps/files_encryption/l10n/pt_BR.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Por favor, repita a nova senha de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.",
+ "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
+ "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente novamente.",
+ "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.",
"Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.",
- "Could not update the private key password. Maybe the old password was not correct." : "Não foi possível atualizar a senha de chave privada. Talvez a senha antiga esteja incorreta.",
"File recovery settings updated" : "Configurações de recuperação de arquivo atualizado",
"Could not update file recovery" : "Não foi possível atualizar a recuperação de arquivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplicativo de criptografia não foi inicializado! Talvez o aplicativo de criptografia tenha sido reativado durante essa sessão. Por favor, tente fazer logoff e login novamente para inicializar o aplicativo de criptografia.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Poe favoe peça ao dono do arquivo para compartilha-lo com você.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contato com o administrador",
"Missing requirements." : "Requisitos não encontrados.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou mais recente está instalado e que a extensão PHP OpenSSL está habilitado e configurado corretamente. Por enquanto, o aplicativo de criptografia foi desativado.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se de que o OpenSSL em conjunto com a extensão PHP está habilitado e configurado corretamente. Por enquanto, o aplicativo de criptografia foi desativado.",
"Following users are not set up for encryption:" : "Seguintes usuários não estão configurados para criptografia:",
"Initial encryption started... This can take some time. Please wait." : "Criptografia inicial inicializada... Isto pode tomar algum tempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Criptografia inicial em execução ... Por favor, tente novamente mais tarde.",
diff --git a/apps/files_encryption/l10n/pt_BR.json b/apps/files_encryption/l10n/pt_BR.json
index 6627951f8f0..d078c218ad3 100644
--- a/apps/files_encryption/l10n/pt_BR.json
+++ b/apps/files_encryption/l10n/pt_BR.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Por favor, repita a nova senha de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.",
+ "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
+ "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente novamente.",
+ "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.",
"Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.",
- "Could not update the private key password. Maybe the old password was not correct." : "Não foi possível atualizar a senha de chave privada. Talvez a senha antiga esteja incorreta.",
"File recovery settings updated" : "Configurações de recuperação de arquivo atualizado",
"Could not update file recovery" : "Não foi possível atualizar a recuperação de arquivos",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Aplicativo de criptografia não foi inicializado! Talvez o aplicativo de criptografia tenha sido reativado durante essa sessão. Por favor, tente fazer logoff e login novamente para inicializar o aplicativo de criptografia.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Poe favoe peça ao dono do arquivo para compartilha-lo com você.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contato com o administrador",
"Missing requirements." : "Requisitos não encontrados.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou mais recente está instalado e que a extensão PHP OpenSSL está habilitado e configurado corretamente. Por enquanto, o aplicativo de criptografia foi desativado.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se de que o OpenSSL em conjunto com a extensão PHP está habilitado e configurado corretamente. Por enquanto, o aplicativo de criptografia foi desativado.",
"Following users are not set up for encryption:" : "Seguintes usuários não estão configurados para criptografia:",
"Initial encryption started... This can take some time. Please wait." : "Criptografia inicial inicializada... Isto pode tomar algum tempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Criptografia inicial em execução ... Por favor, tente novamente mais tarde.",
diff --git a/apps/files_encryption/l10n/pt_PT.js b/apps/files_encryption/l10n/pt_PT.js
index 3f785d9d29e..b08e0c4b05c 100644
--- a/apps/files_encryption/l10n/pt_PT.js
+++ b/apps/files_encryption/l10n/pt_PT.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files_encryption",
{
- "Unknown error" : "Erro Desconhecido",
- "Missing recovery key password" : "Palavra-passe de recuperação em falta",
- "Please repeat the recovery key password" : "Repita a palavra-passe de recuperação",
+ "Unknown error" : "Erro desconhecido",
+ "Missing recovery key password" : "Senha da chave de recuperação em falta",
+ "Please repeat the recovery key password" : "Por favor, insira a contrassenha da chave de recuperação",
"Repeated recovery key password does not match the provided recovery key password" : "A palavra-passe de recuperação repetida não corresponde à palavra-passe fornecida",
"Recovery key successfully enabled" : "A chave de recuperação foi ativada com sucesso",
"Could not disable recovery key. Please check your recovery key password!" : "Não foi possível desativar a chave de recuperação. Por favor, verifique a senha da chave de recuperação.",
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Escreva de novo a nova palavra-passe de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.",
+ "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
+ "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.",
+ "The current log-in password was not correct, please try again." : "A senha de iniciar a sessão atual não estava correta, por favor, tente de novo.",
"Private key password successfully updated." : "A senha da chave privada foi atualizada com sucesso. ",
- "Could not update the private key password. Maybe the old password was not correct." : "Não foi possível atualizar a senha da chave privada. A senha antiga poderia não estar correta.",
"File recovery settings updated" : "As definições da recuperação de ficheiro foram atualizadas",
"Could not update file recovery" : "Não foi possível atualizar a recuperação de ficheiro",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "A app de encriptação não foi inicializada! A app de encriptação poderá ter sido reativada durante a sua sessão. Por favor, tente terminar a sessão e iniciá-la de seguida para inicializar a app de encriptação.",
@@ -22,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contacto com o seu administrador ",
"Missing requirements." : "Requisitos em falta.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou superior está instalado e que o OpenSSL juntamente com a extensão PHP estão ativados e devidamente configurados. Por agora, a app de encriptação foi desativada.",
"Following users are not set up for encryption:" : "Os utilizadores seguintes não estão configurados para encriptação:",
"Initial encryption started... This can take some time. Please wait." : "A encriptação inicial foi iniciada ... Esta pode demorar algum tempo. Aguarde, por favor.",
"Initial encryption running... Please try again later." : "A encriptação inicial está em execução ... Por favor, tente de novo mais tarde.",
diff --git a/apps/files_encryption/l10n/pt_PT.json b/apps/files_encryption/l10n/pt_PT.json
index 40af81afcb4..b51554eaae3 100644
--- a/apps/files_encryption/l10n/pt_PT.json
+++ b/apps/files_encryption/l10n/pt_PT.json
@@ -1,7 +1,7 @@
{ "translations": {
- "Unknown error" : "Erro Desconhecido",
- "Missing recovery key password" : "Palavra-passe de recuperação em falta",
- "Please repeat the recovery key password" : "Repita a palavra-passe de recuperação",
+ "Unknown error" : "Erro desconhecido",
+ "Missing recovery key password" : "Senha da chave de recuperação em falta",
+ "Please repeat the recovery key password" : "Por favor, insira a contrassenha da chave de recuperação",
"Repeated recovery key password does not match the provided recovery key password" : "A palavra-passe de recuperação repetida não corresponde à palavra-passe fornecida",
"Recovery key successfully enabled" : "A chave de recuperação foi ativada com sucesso",
"Could not disable recovery key. Please check your recovery key password!" : "Não foi possível desativar a chave de recuperação. Por favor, verifique a senha da chave de recuperação.",
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Escreva de novo a nova palavra-passe de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.",
+ "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
+ "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.",
+ "The current log-in password was not correct, please try again." : "A senha de iniciar a sessão atual não estava correta, por favor, tente de novo.",
"Private key password successfully updated." : "A senha da chave privada foi atualizada com sucesso. ",
- "Could not update the private key password. Maybe the old password was not correct." : "Não foi possível atualizar a senha da chave privada. A senha antiga poderia não estar correta.",
"File recovery settings updated" : "As definições da recuperação de ficheiro foram atualizadas",
"Could not update file recovery" : "Não foi possível atualizar a recuperação de ficheiro",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "A app de encriptação não foi inicializada! A app de encriptação poderá ter sido reativada durante a sua sessão. Por favor, tente terminar a sessão e iniciá-la de seguida para inicializar a app de encriptação.",
@@ -20,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contacto com o seu administrador ",
"Missing requirements." : "Requisitos em falta.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou superior está instalado e que o OpenSSL juntamente com a extensão PHP estão ativados e devidamente configurados. Por agora, a app de encriptação foi desativada.",
"Following users are not set up for encryption:" : "Os utilizadores seguintes não estão configurados para encriptação:",
"Initial encryption started... This can take some time. Please wait." : "A encriptação inicial foi iniciada ... Esta pode demorar algum tempo. Aguarde, por favor.",
"Initial encryption running... Please try again later." : "A encriptação inicial está em execução ... Por favor, tente de novo mais tarde.",
diff --git a/apps/files_encryption/l10n/ro.js b/apps/files_encryption/l10n/ro.js
index 822cc4be58d..91f657d18f0 100644
--- a/apps/files_encryption/l10n/ro.js
+++ b/apps/files_encryption/l10n/ro.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "Parola a fost modificată cu succes.",
"Could not change the password. Maybe the old password was not correct." : "Parola nu a putut fi schimbata. Poate ca parola veche este incorecta.",
"Private key password successfully updated." : "Cheia privata a fost actualizata cu succes",
- "Could not update the private key password. Maybe the old password was not correct." : "Nu am putut actualiza parola pentru cheia privata. Poate ca parola veche este incorecta.",
"File recovery settings updated" : "Setarile pentru recuperarea fisierelor au fost actualizate",
"Could not update file recovery" : "Nu am putut actualiza recuperarea de fisiere",
"Encryption" : "Încriptare",
diff --git a/apps/files_encryption/l10n/ro.json b/apps/files_encryption/l10n/ro.json
index 3ac528a60ce..3c32f040aec 100644
--- a/apps/files_encryption/l10n/ro.json
+++ b/apps/files_encryption/l10n/ro.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "Parola a fost modificată cu succes.",
"Could not change the password. Maybe the old password was not correct." : "Parola nu a putut fi schimbata. Poate ca parola veche este incorecta.",
"Private key password successfully updated." : "Cheia privata a fost actualizata cu succes",
- "Could not update the private key password. Maybe the old password was not correct." : "Nu am putut actualiza parola pentru cheia privata. Poate ca parola veche este incorecta.",
"File recovery settings updated" : "Setarile pentru recuperarea fisierelor au fost actualizate",
"Could not update file recovery" : "Nu am putut actualiza recuperarea de fisiere",
"Encryption" : "Încriptare",
diff --git a/apps/files_encryption/l10n/ru.js b/apps/files_encryption/l10n/ru.js
index 2d035d75f5e..055fea5cddd 100644
--- a/apps/files_encryption/l10n/ru.js
+++ b/apps/files_encryption/l10n/ru.js
@@ -3,48 +3,50 @@ OC.L10N.register(
{
"Unknown error" : "Неизвестная ошибка",
"Missing recovery key password" : "Отсутствует пароль восстановления ключа",
- "Please repeat the recovery key password" : "Пожалуйста, повторите пароль восстановления ключа",
- "Repeated recovery key password does not match the provided 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 disable recovery key. Please check your recovery key password!" : "Невозможно выключить ключ восстановления. Проверьте правильность пароля от ключа!",
"Recovery key successfully disabled" : "Ключ восстановления успешно отключен",
- "Please provide the old recovery password" : "Пожалуйста, введите старый пароль для восстановления",
- "Please provide a new recovery password" : "Пожалуйста, введите новый пароль для восстановления",
- "Please repeat the new recovery password" : "Пожалуйста, повторите новый пароль для восстановления",
- "Password successfully changed." : "Пароль изменен удачно.",
- "Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно старый пароль не был верен.",
- "Private key password successfully updated." : "Пароль секретного ключа успешно обновлён.",
- "Could not update the private key password. Maybe the old password was not correct." : "Невозможно обновить пароль от секретного ключа. Возможно, старый пароль указан неверно.",
- "File recovery settings updated" : "Настройки файла восстановления обновлены",
- "Could not update file recovery" : "Невозможно обновить файл восстановления",
- "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Приложение шифрации не инициализированно! Возможно приложение шифрации было реактивировано во время вашей сессии. Пожалуйста, попробуйте выйти и войти снова чтобы проинициализировать приложение шифрации.",
- "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Ваш секретный ключ не действителен! Вероятно, ваш пароль был изменен вне %s (например, корпоративный каталог). Вы можете обновить секретный ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу расшифровать файл, возможно это опубликованный файл. Пожалуйста, попросите владельца файла поделиться им с вами еще раз.",
- "Unknown error. Please check your system settings or contact your administrator" : "Неизвестная ошибка. Пожалуйста, проверьте системные настройки или свяжитесь с администратором",
- "Missing requirements." : "Требования отсутствуют.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Пожалуйста, убедитесь, что версия PHP 5.3.3 или новее, а также, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования отключено.",
- "Following users are not set up for encryption:" : "Для следующих пользователей шифрование не настроено:",
- "Initial encryption started... This can take some time. Please wait." : "Начато начальное шифрование... Это может занять какое-то время. Пожалуйста, подождите.",
+ "Please provide the old recovery password" : "Введите старый пароль восстановления",
+ "Please provide a new recovery password" : "Введите новый пароль восстановления",
+ "Please repeat the new recovery password" : "Повторите новый пароль восстановления",
+ "Password successfully changed." : "Пароль успешно изменен.",
+ "Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно, указанный старый пароль не верен.",
+ "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." : "Пароль закрытого ключа успешно обновлён.",
+ "File recovery settings updated" : "Настройки восстановления файлов обновлены",
+ "Could not update file recovery" : "Невозможно обновить настройки восстановления файлов",
+ "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Приложение шифрования не инициализированно! Возможно приложение шифрования было реактивировано во время вашей сессии. Попробуйте выйти и войти снова чтобы проинициализировать приложение шифрования.",
+ "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ недействителен! Вероятно, пароль был изменен вне %s (например, корпоративный каталог). Вы можете обновить закрытый ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.",
+ "Unknown error. Please check your system settings or contact your administrator" : "Неизвестная ошибка. Проверьте системные настройки или свяжитесь с вашим администратором",
+ "Initial encryption started... This can take some time. Please wait." : "Запущено первоначальное шифрование... Это может занять некоторое время. Пожалуйста, подождите.",
"Initial encryption running... Please try again later." : "Работает первоначальное шифрование... Пожалуйста, повторите попытку позже.",
- "Go directly to your %spersonal settings%s." : "Перейти напряму к вашим %spersonal settings%s.",
+ "Missing requirements." : "Отсутствуют зависимости.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Убедитесь, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования выключено.",
+ "Following users are not set up for encryption:" : "Для следующих пользователей шифрование не настроено:",
+ "Go directly to your %spersonal settings%s." : "Перейти к вашим %spersonal settings%s.",
"Encryption" : "Шифрование",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, пожалуйста, перелогиньтесь",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите вновь",
"Enable recovery key (allow to recover users files in case of password loss):" : "Включить ключ восстановления (позволяет пользователям восстановить файлы при потере пароля):",
- "Recovery key password" : "Пароль для ключа восстановления",
- "Repeat Recovery key password" : "Повторите пароль восстановления ключа",
+ "Recovery key password" : "Пароль ключа восстановления",
+ "Repeat Recovery key password" : "Повторите пароль ключа восстановления",
"Enabled" : "Включено",
"Disabled" : "Отключено",
- "Change recovery key password:" : "Сменить пароль для ключа восстановления:",
- "Old Recovery key password" : "Старый пароль для ключа восстановления",
- "New Recovery key password" : "Новый пароль для ключа восстановления",
- "Repeat New Recovery key password" : "Повторите новый пароль восстановления ключа",
+ "Change recovery key password:" : "Сменить пароль ключа восстановления:",
+ "Old Recovery key password" : "Старый пароль ключа восстановления",
+ "New Recovery key password" : "Новый пароль ключа восстановления",
+ "Repeat New Recovery key password" : "Повторите новый пароль ключа восстановления",
"Change Password" : "Изменить пароль",
- "Your private key password no longer matches your log-in password." : "Пароль от Вашего закрытого ключа больше не соответствует паролю от вашей учетной записи.",
- "Set your old private key password to your current log-in password:" : "Замените старый пароль от закрытого ключа на новый пароль входа.",
+ "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" : "Текущйи пароль для входа",
- "Update Private Key Password" : "Обновить пароль от секретного ключа",
+ "Old log-in password" : "Старый пароль учётной записи",
+ "Current log-in password" : "Текущий пароль учётной записи",
+ "Update Private Key Password" : "Обновить пароль закрытого ключа",
"Enable password recovery:" : "Включить восстановление пароля:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Включение этой опции позволит вам получить доступ к своим зашифрованным файлам в случае утери пароля"
},
diff --git a/apps/files_encryption/l10n/ru.json b/apps/files_encryption/l10n/ru.json
index ce66622d6be..fd9fc6d49fd 100644
--- a/apps/files_encryption/l10n/ru.json
+++ b/apps/files_encryption/l10n/ru.json
@@ -1,48 +1,50 @@
{ "translations": {
"Unknown error" : "Неизвестная ошибка",
"Missing recovery key password" : "Отсутствует пароль восстановления ключа",
- "Please repeat the recovery key password" : "Пожалуйста, повторите пароль восстановления ключа",
- "Repeated recovery key password does not match the provided 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 disable recovery key. Please check your recovery key password!" : "Невозможно выключить ключ восстановления. Проверьте правильность пароля от ключа!",
"Recovery key successfully disabled" : "Ключ восстановления успешно отключен",
- "Please provide the old recovery password" : "Пожалуйста, введите старый пароль для восстановления",
- "Please provide a new recovery password" : "Пожалуйста, введите новый пароль для восстановления",
- "Please repeat the new recovery password" : "Пожалуйста, повторите новый пароль для восстановления",
- "Password successfully changed." : "Пароль изменен удачно.",
- "Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно старый пароль не был верен.",
- "Private key password successfully updated." : "Пароль секретного ключа успешно обновлён.",
- "Could not update the private key password. Maybe the old password was not correct." : "Невозможно обновить пароль от секретного ключа. Возможно, старый пароль указан неверно.",
- "File recovery settings updated" : "Настройки файла восстановления обновлены",
- "Could not update file recovery" : "Невозможно обновить файл восстановления",
- "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Приложение шифрации не инициализированно! Возможно приложение шифрации было реактивировано во время вашей сессии. Пожалуйста, попробуйте выйти и войти снова чтобы проинициализировать приложение шифрации.",
- "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Ваш секретный ключ не действителен! Вероятно, ваш пароль был изменен вне %s (например, корпоративный каталог). Вы можете обновить секретный ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу расшифровать файл, возможно это опубликованный файл. Пожалуйста, попросите владельца файла поделиться им с вами еще раз.",
- "Unknown error. Please check your system settings or contact your administrator" : "Неизвестная ошибка. Пожалуйста, проверьте системные настройки или свяжитесь с администратором",
- "Missing requirements." : "Требования отсутствуют.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Пожалуйста, убедитесь, что версия PHP 5.3.3 или новее, а также, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования отключено.",
- "Following users are not set up for encryption:" : "Для следующих пользователей шифрование не настроено:",
- "Initial encryption started... This can take some time. Please wait." : "Начато начальное шифрование... Это может занять какое-то время. Пожалуйста, подождите.",
+ "Please provide the old recovery password" : "Введите старый пароль восстановления",
+ "Please provide a new recovery password" : "Введите новый пароль восстановления",
+ "Please repeat the new recovery password" : "Повторите новый пароль восстановления",
+ "Password successfully changed." : "Пароль успешно изменен.",
+ "Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно, указанный старый пароль не верен.",
+ "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." : "Пароль закрытого ключа успешно обновлён.",
+ "File recovery settings updated" : "Настройки восстановления файлов обновлены",
+ "Could not update file recovery" : "Невозможно обновить настройки восстановления файлов",
+ "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Приложение шифрования не инициализированно! Возможно приложение шифрования было реактивировано во время вашей сессии. Попробуйте выйти и войти снова чтобы проинициализировать приложение шифрования.",
+ "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ недействителен! Вероятно, пароль был изменен вне %s (например, корпоративный каталог). Вы можете обновить закрытый ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.",
+ "Unknown error. Please check your system settings or contact your administrator" : "Неизвестная ошибка. Проверьте системные настройки или свяжитесь с вашим администратором",
+ "Initial encryption started... This can take some time. Please wait." : "Запущено первоначальное шифрование... Это может занять некоторое время. Пожалуйста, подождите.",
"Initial encryption running... Please try again later." : "Работает первоначальное шифрование... Пожалуйста, повторите попытку позже.",
- "Go directly to your %spersonal settings%s." : "Перейти напряму к вашим %spersonal settings%s.",
+ "Missing requirements." : "Отсутствуют зависимости.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Убедитесь, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования выключено.",
+ "Following users are not set up for encryption:" : "Для следующих пользователей шифрование не настроено:",
+ "Go directly to your %spersonal settings%s." : "Перейти к вашим %spersonal settings%s.",
"Encryption" : "Шифрование",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, пожалуйста, перелогиньтесь",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите вновь",
"Enable recovery key (allow to recover users files in case of password loss):" : "Включить ключ восстановления (позволяет пользователям восстановить файлы при потере пароля):",
- "Recovery key password" : "Пароль для ключа восстановления",
- "Repeat Recovery key password" : "Повторите пароль восстановления ключа",
+ "Recovery key password" : "Пароль ключа восстановления",
+ "Repeat Recovery key password" : "Повторите пароль ключа восстановления",
"Enabled" : "Включено",
"Disabled" : "Отключено",
- "Change recovery key password:" : "Сменить пароль для ключа восстановления:",
- "Old Recovery key password" : "Старый пароль для ключа восстановления",
- "New Recovery key password" : "Новый пароль для ключа восстановления",
- "Repeat New Recovery key password" : "Повторите новый пароль восстановления ключа",
+ "Change recovery key password:" : "Сменить пароль ключа восстановления:",
+ "Old Recovery key password" : "Старый пароль ключа восстановления",
+ "New Recovery key password" : "Новый пароль ключа восстановления",
+ "Repeat New Recovery key password" : "Повторите новый пароль ключа восстановления",
"Change Password" : "Изменить пароль",
- "Your private key password no longer matches your log-in password." : "Пароль от Вашего закрытого ключа больше не соответствует паролю от вашей учетной записи.",
- "Set your old private key password to your current log-in password:" : "Замените старый пароль от закрытого ключа на новый пароль входа.",
+ "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" : "Текущйи пароль для входа",
- "Update Private Key Password" : "Обновить пароль от секретного ключа",
+ "Old log-in password" : "Старый пароль учётной записи",
+ "Current log-in password" : "Текущий пароль учётной записи",
+ "Update Private Key Password" : "Обновить пароль закрытого ключа",
"Enable password recovery:" : "Включить восстановление пароля:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Включение этой опции позволит вам получить доступ к своим зашифрованным файлам в случае утери пароля"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/apps/files_encryption/l10n/sk_SK.js b/apps/files_encryption/l10n/sk_SK.js
index ac61753f09d..ae089f31370 100644
--- a/apps/files_encryption/l10n/sk_SK.js
+++ b/apps/files_encryption/l10n/sk_SK.js
@@ -7,19 +7,18 @@ OC.L10N.register(
"Recovery key successfully disabled" : "Záchranný kľúč bol úspešne zakázaný",
"Password successfully changed." : "Heslo úspešne zmenené.",
"Could not change the password. Maybe the old password was not correct." : "Nemožno zmeniť heslo. Pravdepodobne nebolo staré heslo zadané správne.",
+ "The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.",
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nemožno aktualizovať heslo súkromného kľúča. Možno nebolo staré heslo správne.",
"File recovery settings updated" : "Nastavenie obnovy súborov aktualizované",
"Could not update file recovery" : "Nemožno aktualizovať obnovenie súborov",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Šifrovacia aplikácia nie je inicializovaná. Je možné, že aplikácia bola znova aktivovaná počas vášho prihlasovania. Pokúste sa odhlásiť a znova prihlásiť pre inicializáciu šifrovania.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Váš súkromný kľúč nie je platný! Možno bolo vaše heslo zmenené mimo %s (napr. firemný priečinok). Môžete si aktualizovať heslo svojho ​​súkromného kľúča vo vašom osobnom nastavení, ak si chcete obnoviť prístup k šifrovaným súborom.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznáma chyba. Skontrolujte si vaše systémové nastavenia alebo kontaktujte administrátora",
- "Missing requirements." : "Chýbajúce požiadavky.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prosím uistite sa, že PHP verzie 5.3.3 alebo novšej je nainštalované a tiež, že OpenSSL knižnica spolu z PHP rozšírením je povolená a konfigurovaná správne. Nateraz bola aplikácia šifrovania zablokovaná.",
- "Following users are not set up for encryption:" : "Nasledujúci používatelia nie sú nastavení pre šifrovanie:",
"Initial encryption started... This can take some time. Please wait." : "Počiatočné šifrovanie započalo ... To môže nejakú dobu trvať. Čakajte prosím.",
"Initial encryption running... Please try again later." : "Počiatočné šifrovanie beží... Skúste to neskôr znovu.",
+ "Missing requirements." : "Chýbajúce požiadavky.",
+ "Following users are not set up for encryption:" : "Nasledujúci používatelia nie sú nastavení pre šifrovanie:",
"Go directly to your %spersonal settings%s." : "Prejsť priamo do svojho %sosobného nastavenia%s.",
"Encryption" : "Šifrovanie",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
diff --git a/apps/files_encryption/l10n/sk_SK.json b/apps/files_encryption/l10n/sk_SK.json
index e1887527634..b54f4da7ee3 100644
--- a/apps/files_encryption/l10n/sk_SK.json
+++ b/apps/files_encryption/l10n/sk_SK.json
@@ -5,19 +5,18 @@
"Recovery key successfully disabled" : "Záchranný kľúč bol úspešne zakázaný",
"Password successfully changed." : "Heslo úspešne zmenené.",
"Could not change the password. Maybe the old password was not correct." : "Nemožno zmeniť heslo. Pravdepodobne nebolo staré heslo zadané správne.",
+ "The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.",
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
- "Could not update the private key password. Maybe the old password was not correct." : "Nemožno aktualizovať heslo súkromného kľúča. Možno nebolo staré heslo správne.",
"File recovery settings updated" : "Nastavenie obnovy súborov aktualizované",
"Could not update file recovery" : "Nemožno aktualizovať obnovenie súborov",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Šifrovacia aplikácia nie je inicializovaná. Je možné, že aplikácia bola znova aktivovaná počas vášho prihlasovania. Pokúste sa odhlásiť a znova prihlásiť pre inicializáciu šifrovania.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Váš súkromný kľúč nie je platný! Možno bolo vaše heslo zmenené mimo %s (napr. firemný priečinok). Môžete si aktualizovať heslo svojho ​​súkromného kľúča vo vašom osobnom nastavení, ak si chcete obnoviť prístup k šifrovaným súborom.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznáma chyba. Skontrolujte si vaše systémové nastavenia alebo kontaktujte administrátora",
- "Missing requirements." : "Chýbajúce požiadavky.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prosím uistite sa, že PHP verzie 5.3.3 alebo novšej je nainštalované a tiež, že OpenSSL knižnica spolu z PHP rozšírením je povolená a konfigurovaná správne. Nateraz bola aplikácia šifrovania zablokovaná.",
- "Following users are not set up for encryption:" : "Nasledujúci používatelia nie sú nastavení pre šifrovanie:",
"Initial encryption started... This can take some time. Please wait." : "Počiatočné šifrovanie započalo ... To môže nejakú dobu trvať. Čakajte prosím.",
"Initial encryption running... Please try again later." : "Počiatočné šifrovanie beží... Skúste to neskôr znovu.",
+ "Missing requirements." : "Chýbajúce požiadavky.",
+ "Following users are not set up for encryption:" : "Nasledujúci používatelia nie sú nastavení pre šifrovanie:",
"Go directly to your %spersonal settings%s." : "Prejsť priamo do svojho %sosobného nastavenia%s.",
"Encryption" : "Šifrovanie",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
diff --git a/apps/files_encryption/l10n/sl.js b/apps/files_encryption/l10n/sl.js
index f0623de697f..678709ab891 100644
--- a/apps/files_encryption/l10n/sl.js
+++ b/apps/files_encryption/l10n/sl.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Ponovno vpišite nov ključ za obnovitev",
"Password successfully changed." : "Geslo je uspešno spremenjeno.",
"Could not change the password. Maybe the old password was not correct." : "Gesla ni mogoče spremeniti. Morda vnos starega gesla ni pravilen.",
+ "Could not update the private key password." : "Ni mogoče posodobiti gesla zasebnega ključa.",
+ "The old password was not correct, please try again." : "Staro geslo ni vpisana pravilno. Poskusite znova.",
+ "The current log-in password was not correct, please try again." : "Trenutno geslo za prijavo ni vpisano pravilno. Poskusite znova.",
"Private key password successfully updated." : "Zasebni ključ za geslo je uspešno posodobljen.",
- "Could not update the private key password. Maybe the old password was not correct." : "Zasebnega ključa za geslo ni mogoče posodobiti. Morda vnos starega gesla ni bil pravilen.",
"File recovery settings updated" : "Nastavitve obnavljanja dokumentov so posodobljene",
"Could not update file recovery" : "Nastavitev za obnavljanje dokumentov ni mogoče posodobiti",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Program za šifriranje ni začet. Morda je bil program ponovno omogočen šele med zagonom trenutne seje. Odjavite se in se nato prijavite nazaj. S tem morda razrešite napako.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznana napaka. Preverite nastavitve sistema ali pa stopite v stik s skrbnikom sistema.",
"Missing requirements." : "Manjkajoče zahteve",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je na strežniku nameščen paket PHP 5.3.3 ali novejši, da je omogočen in pravilno nastavljen PHP OpenSSL. Z obstoječimi možnostmi šifriranje ni mogoče.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je OpenSSL z ustrezno razširitvijo PHP omogočen in ustrezno nastavljen. Trenutno je šifriranje onemogočeno.",
"Following users are not set up for encryption:" : "Navedeni uporabniki še nimajo nastavljenega šifriranja:",
"Initial encryption started... This can take some time. Please wait." : "Začetno šifriranje je začeto ... Opravilo je lahko dolgotrajno.",
"Initial encryption running... Please try again later." : "Začetno šifriranje je v teku ... Poskusite kasneje.",
diff --git a/apps/files_encryption/l10n/sl.json b/apps/files_encryption/l10n/sl.json
index 4a692bfebae..943fe8a96c1 100644
--- a/apps/files_encryption/l10n/sl.json
+++ b/apps/files_encryption/l10n/sl.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Ponovno vpišite nov ključ za obnovitev",
"Password successfully changed." : "Geslo je uspešno spremenjeno.",
"Could not change the password. Maybe the old password was not correct." : "Gesla ni mogoče spremeniti. Morda vnos starega gesla ni pravilen.",
+ "Could not update the private key password." : "Ni mogoče posodobiti gesla zasebnega ključa.",
+ "The old password was not correct, please try again." : "Staro geslo ni vpisana pravilno. Poskusite znova.",
+ "The current log-in password was not correct, please try again." : "Trenutno geslo za prijavo ni vpisano pravilno. Poskusite znova.",
"Private key password successfully updated." : "Zasebni ključ za geslo je uspešno posodobljen.",
- "Could not update the private key password. Maybe the old password was not correct." : "Zasebnega ključa za geslo ni mogoče posodobiti. Morda vnos starega gesla ni bil pravilen.",
"File recovery settings updated" : "Nastavitve obnavljanja dokumentov so posodobljene",
"Could not update file recovery" : "Nastavitev za obnavljanje dokumentov ni mogoče posodobiti",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Program za šifriranje ni začet. Morda je bil program ponovno omogočen šele med zagonom trenutne seje. Odjavite se in se nato prijavite nazaj. S tem morda razrešite napako.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznana napaka. Preverite nastavitve sistema ali pa stopite v stik s skrbnikom sistema.",
"Missing requirements." : "Manjkajoče zahteve",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je na strežniku nameščen paket PHP 5.3.3 ali novejši, da je omogočen in pravilno nastavljen PHP OpenSSL. Z obstoječimi možnostmi šifriranje ni mogoče.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je OpenSSL z ustrezno razširitvijo PHP omogočen in ustrezno nastavljen. Trenutno je šifriranje onemogočeno.",
"Following users are not set up for encryption:" : "Navedeni uporabniki še nimajo nastavljenega šifriranja:",
"Initial encryption started... This can take some time. Please wait." : "Začetno šifriranje je začeto ... Opravilo je lahko dolgotrajno.",
"Initial encryption running... Please try again later." : "Začetno šifriranje je v teku ... Poskusite kasneje.",
diff --git a/apps/files_encryption/l10n/sq.js b/apps/files_encryption/l10n/sq.js
index f3c5d10cf0a..ffab720cfda 100644
--- a/apps/files_encryption/l10n/sq.js
+++ b/apps/files_encryption/l10n/sq.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Gabim panjohur",
- "Encryption" : "Kodifikimi"
+ "Encryption" : "Kodifikimi",
+ "Enabled" : "Aktivizuar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_encryption/l10n/sq.json b/apps/files_encryption/l10n/sq.json
index b4fe571e7e0..dee4c42e547 100644
--- a/apps/files_encryption/l10n/sq.json
+++ b/apps/files_encryption/l10n/sq.json
@@ -1,5 +1,6 @@
{ "translations": {
"Unknown error" : "Gabim panjohur",
- "Encryption" : "Kodifikimi"
+ "Encryption" : "Kodifikimi",
+ "Enabled" : "Aktivizuar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_encryption/l10n/sv.js b/apps/files_encryption/l10n/sv.js
index f8ef7040926..eeaebb59e53 100644
--- a/apps/files_encryption/l10n/sv.js
+++ b/apps/files_encryption/l10n/sv.js
@@ -2,24 +2,32 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Okänt fel",
+ "Missing recovery key password" : "Saknar lösenord för återställningsnyckel",
+ "Please repeat the recovery key password" : "Vänligen upprepa lösenordet för återställningsnyckel",
+ "Repeated recovery key password does not match the provided recovery key password" : "Det upprepade lösenordet för återställningsnyckeln matchar inte tillhandahållna lösenordet för återställningsnyckeln",
"Recovery key successfully enabled" : "Återställningsnyckeln har framgångsrikt aktiverats",
"Could not disable recovery key. Please check your recovery key password!" : "Kunde inte inaktivera återställningsnyckeln. Vänligen kontrollera ditt lösenord för återställningsnyckeln!",
"Recovery key successfully disabled" : "Återställningsnyckeln har framgångsrikt inaktiverats",
+ "Please provide the old recovery password" : "Vänligen tillhandahåll det gamla återställningslösenordet ",
+ "Please provide a new recovery password" : "Vänligen tillhandahåll ett nytt återställningslösenord",
+ "Please repeat the new recovery password" : "Vänligen upprepa det nya återställningslösenordet",
"Password successfully changed." : "Ändringen av lösenordet lyckades.",
"Could not change the password. Maybe the old password was not correct." : "Kunde inte ändra lösenordet. Kanske det gamla lösenordet inte var rätt.",
+ "Could not update the private key password." : "Kunde inte uppdatera lösenord för den privata nyckeln",
+ "The old password was not correct, please try again." : "Det gamla lösenordet var inte korrekt. Vänligen försök igen.",
+ "The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.",
"Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades utan problem.",
- "Could not update the private key password. Maybe the old password was not correct." : "Kunde inte uppdatera lösenordet för den privata nyckeln. Kanske var det gamla lösenordet fel.",
"File recovery settings updated" : "Inställningarna för filåterställning har uppdaterats",
"Could not update file recovery" : "Kunde inte uppdatera filåterställning",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krypteringsprogrammet kunde inte initieras! Möjligen blev krypteringsprogrammet återaktiverad under din session. Försök med att logga ut och in igen för att initiera krypteringsprogrammet.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Din privata lösenordsnyckel är inte giltig! Troligen har ditt lösenord ändrats utanför %s (t.ex. i företagets katalogtjänst). Du kan uppdatera den privata lösenordsnyckeln under dina personliga inställningar för att återfå tillgång till dina filer.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
"Unknown error. Please check your system settings or contact your administrator" : "Okänt fel. Kontrollera dina systeminställningar eller kontakta din administratör",
- "Missing requirements." : "Krav som saknas",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.",
- "Following users are not set up for encryption:" : "Följande användare har inte aktiverat kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta.",
"Initial encryption running... Please try again later." : "Initiala krypteringen körs... Var god försök igen senare.",
+ "Missing requirements." : "Krav som saknas",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Se till att OpenSSL tillsammans med PHP-tillägget är aktiverat och korrekt konfigurerat. För nu har krypteringsappen inaktiverats.",
+ "Following users are not set up for encryption:" : "Följande användare har inte aktiverat kryptering:",
"Go directly to your %spersonal settings%s." : "Gå direkt till dina %segna inställningar%s.",
"Encryption" : "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",
@@ -33,6 +41,8 @@ OC.L10N.register(
"New Recovery key password" : "Nytt lösenord för återställningsnyckel",
"Repeat New Recovery key password" : "Upprepa lösenord för ny återställningsnyckel",
"Change Password" : "Byt lösenord",
+ "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:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.",
"Old log-in password" : "Gammalt inloggningslösenord",
"Current log-in password" : "Nuvarande inloggningslösenord",
diff --git a/apps/files_encryption/l10n/sv.json b/apps/files_encryption/l10n/sv.json
index f94da503843..9b5ac1dc8ac 100644
--- a/apps/files_encryption/l10n/sv.json
+++ b/apps/files_encryption/l10n/sv.json
@@ -1,23 +1,31 @@
{ "translations": {
"Unknown error" : "Okänt fel",
+ "Missing recovery key password" : "Saknar lösenord för återställningsnyckel",
+ "Please repeat the recovery key password" : "Vänligen upprepa lösenordet för återställningsnyckel",
+ "Repeated recovery key password does not match the provided recovery key password" : "Det upprepade lösenordet för återställningsnyckeln matchar inte tillhandahållna lösenordet för återställningsnyckeln",
"Recovery key successfully enabled" : "Återställningsnyckeln har framgångsrikt aktiverats",
"Could not disable recovery key. Please check your recovery key password!" : "Kunde inte inaktivera återställningsnyckeln. Vänligen kontrollera ditt lösenord för återställningsnyckeln!",
"Recovery key successfully disabled" : "Återställningsnyckeln har framgångsrikt inaktiverats",
+ "Please provide the old recovery password" : "Vänligen tillhandahåll det gamla återställningslösenordet ",
+ "Please provide a new recovery password" : "Vänligen tillhandahåll ett nytt återställningslösenord",
+ "Please repeat the new recovery password" : "Vänligen upprepa det nya återställningslösenordet",
"Password successfully changed." : "Ändringen av lösenordet lyckades.",
"Could not change the password. Maybe the old password was not correct." : "Kunde inte ändra lösenordet. Kanske det gamla lösenordet inte var rätt.",
+ "Could not update the private key password." : "Kunde inte uppdatera lösenord för den privata nyckeln",
+ "The old password was not correct, please try again." : "Det gamla lösenordet var inte korrekt. Vänligen försök igen.",
+ "The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.",
"Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades utan problem.",
- "Could not update the private key password. Maybe the old password was not correct." : "Kunde inte uppdatera lösenordet för den privata nyckeln. Kanske var det gamla lösenordet fel.",
"File recovery settings updated" : "Inställningarna för filåterställning har uppdaterats",
"Could not update file recovery" : "Kunde inte uppdatera filåterställning",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Krypteringsprogrammet kunde inte initieras! Möjligen blev krypteringsprogrammet återaktiverad under din session. Försök med att logga ut och in igen för att initiera krypteringsprogrammet.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Din privata lösenordsnyckel är inte giltig! Troligen har ditt lösenord ändrats utanför %s (t.ex. i företagets katalogtjänst). Du kan uppdatera den privata lösenordsnyckeln under dina personliga inställningar för att återfå tillgång till dina filer.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
"Unknown error. Please check your system settings or contact your administrator" : "Okänt fel. Kontrollera dina systeminställningar eller kontakta din administratör",
- "Missing requirements." : "Krav som saknas",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.",
- "Following users are not set up for encryption:" : "Följande användare har inte aktiverat kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta.",
"Initial encryption running... Please try again later." : "Initiala krypteringen körs... Var god försök igen senare.",
+ "Missing requirements." : "Krav som saknas",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Se till att OpenSSL tillsammans med PHP-tillägget är aktiverat och korrekt konfigurerat. För nu har krypteringsappen inaktiverats.",
+ "Following users are not set up for encryption:" : "Följande användare har inte aktiverat kryptering:",
"Go directly to your %spersonal settings%s." : "Gå direkt till dina %segna inställningar%s.",
"Encryption" : "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",
@@ -31,6 +39,8 @@
"New Recovery key password" : "Nytt lösenord för återställningsnyckel",
"Repeat New Recovery key password" : "Upprepa lösenord för ny återställningsnyckel",
"Change Password" : "Byt lösenord",
+ "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:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.",
"Old log-in password" : "Gammalt inloggningslösenord",
"Current log-in password" : "Nuvarande inloggningslösenord",
diff --git a/apps/files_encryption/l10n/tr.js b/apps/files_encryption/l10n/tr.js
index 3a50eeb2081..43a05a696a6 100644
--- a/apps/files_encryption/l10n/tr.js
+++ b/apps/files_encryption/l10n/tr.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Lütfen yeni kurtarma parolasını yenileyin",
"Password successfully changed." : "Parola başarıyla değiştirildi.",
"Could not change the password. Maybe the old password was not correct." : "Parola değiştirilemedi. Eski parolanız doğru olmayabilir.",
+ "Could not update the private key password." : "Özel anahtar parolası güncellenemedi",
+ "The old password was not correct, please try again." : "Eski parola doğru değil, lütfen yeniden deneyin.",
+ "The current log-in password was not correct, please try again." : "Geçerli oturum parolası doğru değil, lütfen yeniden deneyin.",
"Private key password successfully updated." : "Özel anahtar parolası başarıyla güncellendi.",
- "Could not update the private key password. Maybe the old password was not correct." : "Özel anahtar parolası güncellenemedi. Eski parola hatalı olabilir.",
"File recovery settings updated" : "Dosya kurtarma ayarları güncellendi",
"Could not update file recovery" : "Dosya kurtarma güncellenemedi",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Şifreleme uygulaması başlatılamadı! Oturumunuz sırasında şifreleme uygulaması tekrar etkinleştirilmiş olabilir. Lütfen şifreleme uygulamasını başlatmak için oturumu kapatıp yeniden oturum açmayı deneyin.",
@@ -22,7 +24,7 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
"Unknown error. Please check your system settings or contact your administrator" : "Bilinmeyen hata. Lütfen sistem ayarlarınızı denetleyin veya yöneticiniz ile iletişime geçin",
"Missing requirements." : "Gereklilikler eksik.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 veya daha sürümü ile birlikte OpenSSL ve OpenSSL PHP uzantısının birlikte etkin olduğundan ve doğru bir şekilde yapılandırıldığından emin olun. Şimdilik şifreleme uygulaması devre dışı bırakıldı.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "OpenSSL'nin PHP uzantısıyla birlikte etkin ve düzgün yapılandırılmış olduğundan emin olun. Şimdilik şifreleme uygulaması devre dışı bırakıldı.",
"Following users are not set up for encryption:" : "Aşağıdaki kullanıcılar şifreleme için ayarlanmamış:",
"Initial encryption started... This can take some time. Please wait." : "İlk şifreleme başladı... Bu biraz zaman alabilir. Lütfen bekleyin.",
"Initial encryption running... Please try again later." : "İlk şifreleme çalışıyor... Lütfen daha sonra tekrar deneyin.",
diff --git a/apps/files_encryption/l10n/tr.json b/apps/files_encryption/l10n/tr.json
index 4998865f3bd..e78f8fb5203 100644
--- a/apps/files_encryption/l10n/tr.json
+++ b/apps/files_encryption/l10n/tr.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Lütfen yeni kurtarma parolasını yenileyin",
"Password successfully changed." : "Parola başarıyla değiştirildi.",
"Could not change the password. Maybe the old password was not correct." : "Parola değiştirilemedi. Eski parolanız doğru olmayabilir.",
+ "Could not update the private key password." : "Özel anahtar parolası güncellenemedi",
+ "The old password was not correct, please try again." : "Eski parola doğru değil, lütfen yeniden deneyin.",
+ "The current log-in password was not correct, please try again." : "Geçerli oturum parolası doğru değil, lütfen yeniden deneyin.",
"Private key password successfully updated." : "Özel anahtar parolası başarıyla güncellendi.",
- "Could not update the private key password. Maybe the old password was not correct." : "Özel anahtar parolası güncellenemedi. Eski parola hatalı olabilir.",
"File recovery settings updated" : "Dosya kurtarma ayarları güncellendi",
"Could not update file recovery" : "Dosya kurtarma güncellenemedi",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Şifreleme uygulaması başlatılamadı! Oturumunuz sırasında şifreleme uygulaması tekrar etkinleştirilmiş olabilir. Lütfen şifreleme uygulamasını başlatmak için oturumu kapatıp yeniden oturum açmayı deneyin.",
@@ -20,7 +22,7 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
"Unknown error. Please check your system settings or contact your administrator" : "Bilinmeyen hata. Lütfen sistem ayarlarınızı denetleyin veya yöneticiniz ile iletişime geçin",
"Missing requirements." : "Gereklilikler eksik.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 veya daha sürümü ile birlikte OpenSSL ve OpenSSL PHP uzantısının birlikte etkin olduğundan ve doğru bir şekilde yapılandırıldığından emin olun. Şimdilik şifreleme uygulaması devre dışı bırakıldı.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "OpenSSL'nin PHP uzantısıyla birlikte etkin ve düzgün yapılandırılmış olduğundan emin olun. Şimdilik şifreleme uygulaması devre dışı bırakıldı.",
"Following users are not set up for encryption:" : "Aşağıdaki kullanıcılar şifreleme için ayarlanmamış:",
"Initial encryption started... This can take some time. Please wait." : "İlk şifreleme başladı... Bu biraz zaman alabilir. Lütfen bekleyin.",
"Initial encryption running... Please try again later." : "İlk şifreleme çalışıyor... Lütfen daha sonra tekrar deneyin.",
diff --git a/apps/files_encryption/l10n/uk.js b/apps/files_encryption/l10n/uk.js
index 169f6c3f92e..15783a5172e 100644
--- a/apps/files_encryption/l10n/uk.js
+++ b/apps/files_encryption/l10n/uk.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Будь ласка, введіть новий пароль відновлення ще раз",
"Password successfully changed." : "Пароль змінено.",
"Could not change the password. Maybe the old password was not correct." : "Не вдалося змінити пароль. Можливо ви неправильно ввели старий пароль.",
+ "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." : "Пароль секретного ключа оновлено.",
- "Could not update the private key password. Maybe the old password was not correct." : "Не вдалося оновити пароль секретного ключа. Можливо ви не правильно ввели старий пароль.",
"File recovery settings updated" : "Налаштування файла відновлення оновлено",
"Could not update file recovery" : "Не вдалося оновити файл відновлення ",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Додаток шифрувння не ініціалізовано! Можливо цей додаток редагувався під час вашої сесії. Будь ласка, спробуйте вийти і зайти знову щоб проініціалізувати додаток шифрування.",
@@ -22,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.",
"Unknown error. Please check your system settings or contact your administrator" : "Невідома помилка. Будь ласка, перевірте налаштування системи або зверніться до адміністратора.",
"Missing requirements." : "Відсутні вимоги.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Будь ласка, впевніться, що встановлена версія PHP 5.3.3 або новіша, а також, що OpenSSL та інші розширення PHP підключені та вірно налаштовані. На даний момент додаток шифрування відключений.",
"Following users are not set up for encryption:" : "Для наступних користувачів шифрування не налаштоване:",
"Initial encryption started... This can take some time. Please wait." : "Початкове шифрування почалося... Це може зайняти деякий час. Будь ласка, почекайте.",
"Initial encryption running... Please try again later." : "Початкове шифрування працює... Це може зайняти деякий час. Будь ласка, почекайте.",
diff --git a/apps/files_encryption/l10n/uk.json b/apps/files_encryption/l10n/uk.json
index 454de34d9c0..69444961860 100644
--- a/apps/files_encryption/l10n/uk.json
+++ b/apps/files_encryption/l10n/uk.json
@@ -11,8 +11,10 @@
"Please repeat the new recovery password" : "Будь ласка, введіть новий пароль відновлення ще раз",
"Password successfully changed." : "Пароль змінено.",
"Could not change the password. Maybe the old password was not correct." : "Не вдалося змінити пароль. Можливо ви неправильно ввели старий пароль.",
+ "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." : "Пароль секретного ключа оновлено.",
- "Could not update the private key password. Maybe the old password was not correct." : "Не вдалося оновити пароль секретного ключа. Можливо ви не правильно ввели старий пароль.",
"File recovery settings updated" : "Налаштування файла відновлення оновлено",
"Could not update file recovery" : "Не вдалося оновити файл відновлення ",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Додаток шифрувння не ініціалізовано! Можливо цей додаток редагувався під час вашої сесії. Будь ласка, спробуйте вийти і зайти знову щоб проініціалізувати додаток шифрування.",
@@ -20,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.",
"Unknown error. Please check your system settings or contact your administrator" : "Невідома помилка. Будь ласка, перевірте налаштування системи або зверніться до адміністратора.",
"Missing requirements." : "Відсутні вимоги.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Будь ласка, впевніться, що встановлена версія PHP 5.3.3 або новіша, а також, що OpenSSL та інші розширення PHP підключені та вірно налаштовані. На даний момент додаток шифрування відключений.",
"Following users are not set up for encryption:" : "Для наступних користувачів шифрування не налаштоване:",
"Initial encryption started... This can take some time. Please wait." : "Початкове шифрування почалося... Це може зайняти деякий час. Будь ласка, почекайте.",
"Initial encryption running... Please try again later." : "Початкове шифрування працює... Це може зайняти деякий час. Будь ласка, почекайте.",
diff --git a/apps/files_encryption/l10n/vi.js b/apps/files_encryption/l10n/vi.js
index 8fc542510da..b853fb76162 100644
--- a/apps/files_encryption/l10n/vi.js
+++ b/apps/files_encryption/l10n/vi.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "Đã đổi mật khẩu.",
"Could not change the password. Maybe the old password was not correct." : "Không thể đổi mật khẩu. Có lẽ do mật khẩu cũ không đúng.",
"Private key password successfully updated." : "Cập nhật thành công mật khẩu khóa cá nhân",
- "Could not update the private key password. Maybe the old password was not correct." : "Không thể cập nhật mật khẩu khóa cá nhân. Có thể mật khẩu cũ không đúng",
"File recovery settings updated" : "Đã cập nhật thiết lập khôi phục tập tin ",
"Could not update file recovery" : "Không thể cập nhật khôi phục tập tin",
"Encryption" : "Mã hóa",
diff --git a/apps/files_encryption/l10n/vi.json b/apps/files_encryption/l10n/vi.json
index f1a1ff4c6da..4800a4bc21f 100644
--- a/apps/files_encryption/l10n/vi.json
+++ b/apps/files_encryption/l10n/vi.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "Đã đổi mật khẩu.",
"Could not change the password. Maybe the old password was not correct." : "Không thể đổi mật khẩu. Có lẽ do mật khẩu cũ không đúng.",
"Private key password successfully updated." : "Cập nhật thành công mật khẩu khóa cá nhân",
- "Could not update the private key password. Maybe the old password was not correct." : "Không thể cập nhật mật khẩu khóa cá nhân. Có thể mật khẩu cũ không đúng",
"File recovery settings updated" : "Đã cập nhật thiết lập khôi phục tập tin ",
"Could not update file recovery" : "Không thể cập nhật khôi phục tập tin",
"Encryption" : "Mã hóa",
diff --git a/apps/files_encryption/l10n/zh_CN.js b/apps/files_encryption/l10n/zh_CN.js
index 82051423baf..a7da9155ef6 100644
--- a/apps/files_encryption/l10n/zh_CN.js
+++ b/apps/files_encryption/l10n/zh_CN.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "密码修改成功。",
"Could not change the password. Maybe the old password was not correct." : "不能修改密码。旧密码可能不正确。",
"Private key password successfully updated." : "私钥密码成功更新。",
- "Could not update the private key password. Maybe the old password was not correct." : "无法更新私钥密码。可能旧密码不正确。",
"File recovery settings updated" : "文件恢复设置已更新",
"Could not update file recovery" : "不能更新文件恢复",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "加密应用还没有初始化!可能加密应用在你会话期间已被重新启用。请注销并重新登录,以初始化加密应用。",
@@ -16,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
"Unknown error. Please check your system settings or contact your administrator" : "未知错误。请检查系统设置或联系您的管理员",
"Missing requirements." : "必填项未填写。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "请确认安装了 PHP 5.3.3 或更新版本,且 OpenSSL 及其 PHP 扩展已经启用并正确配置。加密应用现在已被禁用。",
"Following users are not set up for encryption:" : "以下用户还没有设置加密:",
"Initial encryption started... This can take some time. Please wait." : "初始加密启动中....这可能会花一些时间,请稍后再试。",
"Initial encryption running... Please try again later." : "初始加密运行中....请稍后再试。",
diff --git a/apps/files_encryption/l10n/zh_CN.json b/apps/files_encryption/l10n/zh_CN.json
index 9c9a6adc7cb..34576ee72d0 100644
--- a/apps/files_encryption/l10n/zh_CN.json
+++ b/apps/files_encryption/l10n/zh_CN.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "密码修改成功。",
"Could not change the password. Maybe the old password was not correct." : "不能修改密码。旧密码可能不正确。",
"Private key password successfully updated." : "私钥密码成功更新。",
- "Could not update the private key password. Maybe the old password was not correct." : "无法更新私钥密码。可能旧密码不正确。",
"File recovery settings updated" : "文件恢复设置已更新",
"Could not update file recovery" : "不能更新文件恢复",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "加密应用还没有初始化!可能加密应用在你会话期间已被重新启用。请注销并重新登录,以初始化加密应用。",
@@ -14,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
"Unknown error. Please check your system settings or contact your administrator" : "未知错误。请检查系统设置或联系您的管理员",
"Missing requirements." : "必填项未填写。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "请确认安装了 PHP 5.3.3 或更新版本,且 OpenSSL 及其 PHP 扩展已经启用并正确配置。加密应用现在已被禁用。",
"Following users are not set up for encryption:" : "以下用户还没有设置加密:",
"Initial encryption started... This can take some time. Please wait." : "初始加密启动中....这可能会花一些时间,请稍后再试。",
"Initial encryption running... Please try again later." : "初始加密运行中....请稍后再试。",
diff --git a/apps/files_encryption/l10n/zh_TW.js b/apps/files_encryption/l10n/zh_TW.js
index c68028a7aad..3bd3143c5b9 100644
--- a/apps/files_encryption/l10n/zh_TW.js
+++ b/apps/files_encryption/l10n/zh_TW.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Password successfully changed." : "成功變更密碼。",
"Could not change the password. Maybe the old password was not correct." : "無法變更密碼,或許是輸入的舊密碼不正確。",
"Private key password successfully updated." : "私人金鑰密碼已成功更新。",
- "Could not update the private key password. Maybe the old password was not correct." : "無法更新私人金鑰密碼。可能舊的密碼不正確。",
"File recovery settings updated" : "檔案還原設定已更新",
"Could not update file recovery" : "無法更新檔案還原設定",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "加密功能未初始化!可能加密功能需要重新啟用在現在的連線上。請試著登出再登入來初始化加密功能。",
@@ -16,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。",
"Unknown error. Please check your system settings or contact your administrator" : "未知錯誤請檢查您的系統設定或是聯絡您的管理員",
"Missing requirements." : "遺失必要條件。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "請確認已安裝 PHP 5.3.3 或是更新的版本以及 OpenSSL 也一併安裝在 PHP extension 裡面並啟用及設置完成。現在,加密功能是停用的。",
"Following users are not set up for encryption:" : "以下的使用者無法設定加密:",
"Initial encryption started... This can take some time. Please wait." : "加密初始已啟用...這個需要一些時間。請稍等。",
"Initial encryption running... Please try again later." : "加密初始執行中...請晚點再試。",
diff --git a/apps/files_encryption/l10n/zh_TW.json b/apps/files_encryption/l10n/zh_TW.json
index c6560dc3738..cf85da08c9f 100644
--- a/apps/files_encryption/l10n/zh_TW.json
+++ b/apps/files_encryption/l10n/zh_TW.json
@@ -6,7 +6,6 @@
"Password successfully changed." : "成功變更密碼。",
"Could not change the password. Maybe the old password was not correct." : "無法變更密碼,或許是輸入的舊密碼不正確。",
"Private key password successfully updated." : "私人金鑰密碼已成功更新。",
- "Could not update the private key password. Maybe the old password was not correct." : "無法更新私人金鑰密碼。可能舊的密碼不正確。",
"File recovery settings updated" : "檔案還原設定已更新",
"Could not update file recovery" : "無法更新檔案還原設定",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "加密功能未初始化!可能加密功能需要重新啟用在現在的連線上。請試著登出再登入來初始化加密功能。",
@@ -14,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。",
"Unknown error. Please check your system settings or contact your administrator" : "未知錯誤請檢查您的系統設定或是聯絡您的管理員",
"Missing requirements." : "遺失必要條件。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "請確認已安裝 PHP 5.3.3 或是更新的版本以及 OpenSSL 也一併安裝在 PHP extension 裡面並啟用及設置完成。現在,加密功能是停用的。",
"Following users are not set up for encryption:" : "以下的使用者無法設定加密:",
"Initial encryption started... This can take some time. Please wait." : "加密初始已啟用...這個需要一些時間。請稍等。",
"Initial encryption running... Please try again later." : "加密初始執行中...請晚點再試。",
diff --git a/apps/files_encryption/lib/capabilities.php b/apps/files_encryption/lib/capabilities.php
index ef94c9e086d..e6e4ee7d419 100644
--- a/apps/files_encryption/lib/capabilities.php
+++ b/apps/files_encryption/lib/capabilities.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-namespace OCA\Encryption;
+namespace OCA\Files_Encryption;
class Capabilities {
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index 59b191097af..38993ba65b0 100644
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -3,10 +3,12 @@
/**
* ownCloud
*
- * @author Sam Tuke, Frank Karlitschek, Robin Appelman
- * @copyright 2012 Sam Tuke samtuke@owncloud.com,
- * Robin Appelman icewind@owncloud.com, Frank Karlitschek
- * frank@owncloud.org
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ * @author Sam Tuke <samtuke@owncloud.com>
+ * @author Frank Karlitschek <frank@owncloud.com>
+ * @author Robin Appelman <icewind@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -23,8 +25,7 @@
*
*/
-namespace OCA\Encryption;
-use OCA\Encryption\Exceptions\EncryptionException;
+namespace OCA\Files_Encryption;
/**
* Class for common cryptography functionality
@@ -132,7 +133,7 @@ class Crypt {
* Check if a file's contents contains an IV and is symmetrically encrypted
* @param string $content
* @return boolean
- * @note see also OCA\Encryption\Util->isEncryptedPath()
+ * @note see also \OCA\Files_Encryption\Util->isEncryptedPath()
*/
public static function isCatfileContent($content) {
@@ -189,7 +190,7 @@ class Crypt {
* @param string $passphrase
* @param string $cypher used for encryption, currently we support AES-128-CFB and AES-256-CFB
* @return string encrypted file content
- * @throws \OCA\Encryption\Exceptions\EncryptionException
+ * @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
private static function encrypt($plainContent, $iv, $passphrase = '', $cipher = Crypt::DEFAULT_CIPHER) {
@@ -198,7 +199,7 @@ class Crypt {
if (!$encryptedContent) {
$error = "Encryption (symmetric) of content failed: " . openssl_error_string();
\OCP\Util::writeLog('Encryption library', $error, \OCP\Util::ERROR);
- throw new Exceptions\EncryptionException($error, 50);
+ throw new Exception\EncryptionException($error, Exception\EncryptionException::ENCRYPTION_FAILED);
}
return $encryptedContent;
@@ -290,7 +291,7 @@ class Crypt {
$padded = self::addPadding($catfile);
return $padded;
- } catch (EncryptionException $e) {
+ } catch (Exception\EncryptionException $e) {
$message = 'Could not encrypt file content (code: ' . $e->getCode() . '): ';
\OCP\Util::writeLog('files_encryption', $message . $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -378,7 +379,7 @@ class Crypt {
* @param string $plainContent content to be encrypted
* @param array $publicKeys array keys must be the userId of corresponding user
* @return array keys: keys (array, key = userId), data
- * @throws \OCA\Encryption\Exceptions\\MultiKeyEncryptException if encryption failed
+ * @throws \OCA\Files_Encryption\Exception\MultiKeyEncryptException if encryption failed
* @note symmetricDecryptFileContent() can decrypt files created using this method
*/
public static function multiKeyEncrypt($plainContent, array $publicKeys) {
@@ -386,7 +387,7 @@ class Crypt {
// openssl_seal returns false without errors if $plainContent
// is empty, so trigger our own error
if (empty($plainContent)) {
- throw new Exceptions\MultiKeyEncryptException('Cannot multiKeyEncrypt empty plain content', 10);
+ throw new Exception\MultiKeyEncryptException('Cannot multiKeyEncrypt empty plain content', Exception\MultiKeyEncryptException::EMPTY_DATA);
}
// Set empty vars to be set by openssl by reference
@@ -413,7 +414,8 @@ class Crypt {
);
} else {
- throw new Exceptions\MultiKeyEncryptException('multi key encryption failed: ' . openssl_error_string(), 20);
+ throw new Exception\MultiKeyEncryptException('multi key encryption failed: ' . openssl_error_string(),
+ Exception\MultiKeyEncryptException::OPENSSL_SEAL_FAILED);
}
}
@@ -423,7 +425,7 @@ class Crypt {
* @param string $encryptedContent
* @param string $shareKey
* @param mixed $privateKey
- * @throws \OCA\Encryption\Exceptions\\MultiKeyDecryptException if decryption failed
+ * @throws \OCA\Files_Encryption\Exception\MultiKeyDecryptException if decryption failed
* @internal param string $plainContent contains decrypted content
* @return string $plainContent decrypted string
* @note symmetricDecryptFileContent() can be used to decrypt files created using this method
@@ -433,7 +435,8 @@ class Crypt {
public static function multiKeyDecrypt($encryptedContent, $shareKey, $privateKey) {
if (!$encryptedContent) {
- throw new Exceptions\MultiKeyDecryptException('Cannot mutliKeyDecrypt empty plain content', 10);
+ throw new Exception\MultiKeyDecryptException('Cannot mutliKeyDecrypt empty plain content',
+ Exception\MultiKeyDecryptException::EMPTY_DATA);
}
if (openssl_open($encryptedContent, $plainContent, $shareKey, $privateKey)) {
@@ -441,7 +444,8 @@ class Crypt {
return $plainContent;
} else {
- throw new Exceptions\MultiKeyDecryptException('multiKeyDecrypt with share-key' . $shareKey . 'failed: ' . openssl_error_string(), 20);
+ throw new Exception\MultiKeyDecryptException('multiKeyDecrypt with share-key' . $shareKey . 'failed: ' . openssl_error_string(),
+ Exception\MultiKeyDecryptException::OPENSSL_OPEN_FAILED);
}
}
@@ -550,14 +554,15 @@ class Crypt {
* get chiper from header
*
* @param array $header
- * @throws \OCA\Encryption\Exceptions\EncryptionException
+ * @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
public static function getCipher($header) {
$cipher = isset($header['cipher']) ? $header['cipher'] : 'AES-128-CFB';
if ($cipher !== 'AES-256-CFB' && $cipher !== 'AES-128-CFB') {
- throw new \OCA\Encryption\Exceptions\EncryptionException('file header broken, no supported cipher defined', 40);
+ throw new Exception\EncryptionException('file header broken, no supported cipher defined',
+ Exception\EncryptionException::UNKNOWN_CIPHER);
}
return $cipher;
diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index 53c380ab2b3..b9d45f67363 100644
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -3,8 +3,10 @@
/**
* ownCloud
*
- * @author Florin Peter
- * @copyright 2013 Florin Peter <owncloud@florin-peter.de>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Florin Peter <owncloud@florin-peter.de>
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -21,11 +23,11 @@
*
*/
-namespace OCA\Encryption;
+namespace OCA\Files_Encryption;
/**
* Class to manage registration of hooks an various helper methods
- * @package OCA\Encryption
+ * @package OCA\Files_Encryption
*/
class Helper {
@@ -37,9 +39,9 @@ class Helper {
*/
public static function registerShareHooks() {
- \OCP\Util::connectHook('OCP\Share', 'pre_shared', 'OCA\Encryption\Hooks', 'preShared');
- \OCP\Util::connectHook('OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared');
- \OCP\Util::connectHook('OCP\Share', 'post_unshare', 'OCA\Encryption\Hooks', 'postUnshare');
+ \OCP\Util::connectHook('OCP\Share', 'pre_shared', 'OCA\Files_Encryption\Hooks', 'preShared');
+ \OCP\Util::connectHook('OCP\Share', 'post_shared', 'OCA\Files_Encryption\Hooks', 'postShared');
+ \OCP\Util::connectHook('OCP\Share', 'post_unshare', 'OCA\Files_Encryption\Hooks', 'postUnshare');
}
/**
@@ -48,12 +50,12 @@ class Helper {
*/
public static function registerUserHooks() {
- \OCP\Util::connectHook('OC_User', 'post_login', 'OCA\Encryption\Hooks', 'login');
- \OCP\Util::connectHook('OC_User', 'logout', 'OCA\Encryption\Hooks', 'logout');
- \OCP\Util::connectHook('OC_User', 'post_setPassword', 'OCA\Encryption\Hooks', 'setPassphrase');
- \OCP\Util::connectHook('OC_User', 'pre_setPassword', 'OCA\Encryption\Hooks', 'preSetPassphrase');
- \OCP\Util::connectHook('OC_User', 'post_createUser', 'OCA\Encryption\Hooks', 'postCreateUser');
- \OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OCA\Encryption\Hooks', 'postDeleteUser');
+ \OCP\Util::connectHook('OC_User', 'post_login', 'OCA\Files_Encryption\Hooks', 'login');
+ \OCP\Util::connectHook('OC_User', 'logout', 'OCA\Files_Encryption\Hooks', 'logout');
+ \OCP\Util::connectHook('OC_User', 'post_setPassword', 'OCA\Files_Encryption\Hooks', 'setPassphrase');
+ \OCP\Util::connectHook('OC_User', 'pre_setPassword', 'OCA\Files_Encryption\Hooks', 'preSetPassphrase');
+ \OCP\Util::connectHook('OC_User', 'post_createUser', 'OCA\Files_Encryption\Hooks', 'postCreateUser');
+ \OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OCA\Files_Encryption\Hooks', 'postDeleteUser');
}
/**
@@ -62,14 +64,15 @@ class Helper {
*/
public static function registerFilesystemHooks() {
- \OCP\Util::connectHook('OC_Filesystem', 'rename', 'OCA\Encryption\Hooks', 'preRename');
- \OCP\Util::connectHook('OC_Filesystem', 'post_rename', 'OCA\Encryption\Hooks', 'postRenameOrCopy');
- \OCP\Util::connectHook('OC_Filesystem', 'copy', 'OCA\Encryption\Hooks', 'preCopy');
- \OCP\Util::connectHook('OC_Filesystem', 'post_copy', 'OCA\Encryption\Hooks', 'postRenameOrCopy');
- \OCP\Util::connectHook('OC_Filesystem', 'post_delete', 'OCA\Encryption\Hooks', 'postDelete');
- \OCP\Util::connectHook('OC_Filesystem', 'delete', 'OCA\Encryption\Hooks', 'preDelete');
- \OCP\Util::connectHook('OC_Filesystem', 'post_umount', 'OCA\Encryption\Hooks', 'postUmount');
- \OCP\Util::connectHook('OC_Filesystem', 'umount', 'OCA\Encryption\Hooks', 'preUmount');
+ \OCP\Util::connectHook('OC_Filesystem', 'rename', 'OCA\Files_Encryption\Hooks', 'preRename');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_rename', 'OCA\Files_Encryption\Hooks', 'postRenameOrCopy');
+ \OCP\Util::connectHook('OC_Filesystem', 'copy', 'OCA\Files_Encryption\Hooks', 'preCopy');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_copy', 'OCA\Files_Encryption\Hooks', 'postRenameOrCopy');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_delete', 'OCA\Files_Encryption\Hooks', 'postDelete');
+ \OCP\Util::connectHook('OC_Filesystem', 'delete', 'OCA\Files_Encryption\Hooks', 'preDelete');
+ \OCP\Util::connectHook('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', 'OCA\Files_Encryption\Hooks', 'postPasswordReset');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_umount', 'OCA\Files_Encryption\Hooks', 'postUnmount');
+ \OCP\Util::connectHook('OC_Filesystem', 'umount', 'OCA\Files_Encryption\Hooks', 'preUnmount');
}
/**
@@ -78,8 +81,8 @@ class Helper {
*/
public static function registerAppHooks() {
- \OCP\Util::connectHook('OC_App', 'pre_disable', 'OCA\Encryption\Hooks', 'preDisable');
- \OCP\Util::connectHook('OC_App', 'post_disable', 'OCA\Encryption\Hooks', 'postEnable');
+ \OCP\Util::connectHook('OC_App', 'pre_disable', 'OCA\Files_Encryption\Hooks', 'preDisable');
+ \OCP\Util::connectHook('OC_App', 'post_disable', 'OCA\Files_Encryption\Hooks', 'postEnable');
}
/**
@@ -105,12 +108,29 @@ class Helper {
}
/**
+ * get recovery key id
+ *
+ * @return string|bool recovery key ID or false
+ */
+ public static function getRecoveryKeyId() {
+ $appConfig = \OC::$server->getAppConfig();
+ $key = $appConfig->getValue('files_encryption', 'recoveryKeyId');
+
+ return ($key === null) ? false : $key;
+ }
+
+ public static function getPublicShareKeyId() {
+ $appConfig = \OC::$server->getAppConfig();
+ $key = $appConfig->getValue('files_encryption', 'publicShareKeyId');
+
+ return ($key === null) ? false : $key;
+ }
+
+ /**
* enable recovery
*
* @param string $recoveryKeyId
* @param string $recoveryPassword
- * @internal param \OCA\Encryption\Util $util
- * @internal param string $password
* @return bool
*/
public static function adminEnableRecovery($recoveryKeyId, $recoveryPassword) {
@@ -123,40 +143,24 @@ class Helper {
$appConfig->setValue('files_encryption', 'recoveryKeyId', $recoveryKeyId);
}
- if (!$view->is_dir('/owncloud_private_key')) {
- $view->mkdir('/owncloud_private_key');
- }
-
- if (
- (!$view->file_exists("/public-keys/" . $recoveryKeyId . ".public.key")
- || !$view->file_exists("/owncloud_private_key/" . $recoveryKeyId . ".private.key"))
- ) {
-
- $keypair = \OCA\Encryption\Crypt::createKeypair();
+ if (!Keymanager::recoveryKeyExists($view)) {
- \OC_FileProxy::$enabled = false;
+ $keypair = Crypt::createKeypair();
// Save public key
+ Keymanager::setPublicKey($keypair['publicKey'], $recoveryKeyId);
- if (!$view->is_dir('/public-keys')) {
- $view->mkdir('/public-keys');
- }
-
- $view->file_put_contents('/public-keys/' . $recoveryKeyId . '.public.key', $keypair['publicKey']);
-
- $cipher = \OCA\Encryption\Helper::getCipher();
- $encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], $recoveryPassword, $cipher);
+ $cipher = Helper::getCipher();
+ $encryptedKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $recoveryPassword, $cipher);
if ($encryptedKey) {
- Keymanager::setPrivateSystemKey($encryptedKey, $recoveryKeyId . '.private.key');
+ Keymanager::setPrivateSystemKey($encryptedKey, $recoveryKeyId);
// Set recoveryAdmin as enabled
$appConfig->setValue('files_encryption', 'recoveryAdminEnabled', 1);
$return = true;
}
- \OC_FileProxy::$enabled = true;
-
} else { // get recovery key and check the password
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \OCP\User::getUser());
+ $util = new Util(new \OC\Files\View('/'), \OCP\User::getUser());
$return = $util->checkRecoveryPassword($recoveryPassword);
if ($return) {
$appConfig->setValue('files_encryption', 'recoveryAdminEnabled', 1);
@@ -356,14 +360,14 @@ class Helper {
if ($errorCode === null) {
$init = $session->getInitialized();
switch ($init) {
- case \OCA\Encryption\Session::INIT_EXECUTED:
- $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR;
+ case Session::INIT_EXECUTED:
+ $errorCode = Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR;
break;
- case \OCA\Encryption\Session::NOT_INITIALIZED:
- $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR;
+ case Session::NOT_INITIALIZED:
+ $errorCode = Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR;
break;
default:
- $errorCode = \OCA\Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR;
+ $errorCode = Crypt::ENCRYPTION_UNKNOWN_ERROR;
}
}
@@ -386,14 +390,10 @@ class Helper {
* @return bool true if requirements are met
*/
public static function checkRequirements() {
- $result = true;
//openssl extension needs to be loaded
- $result &= extension_loaded("openssl");
- // we need php >= 5.3.3
- $result &= version_compare(phpversion(), '5.3.3', '>=');
+ return extension_loaded("openssl");
- return (bool) $result;
}
/**
@@ -427,52 +427,11 @@ class Helper {
*/
public static function getOpenSSLConfig() {
$config = array('private_key_bits' => 4096);
- $config = array_merge(\OCP\Config::getSystemValue('openssl', array()), $config);
+ $config = array_merge(\OC::$server->getConfig()->getSystemValue('openssl', array()), $config);
return $config;
}
/**
- * find all share keys for a given file
- *
- * @param string $filePath path to the file name relative to the user's files dir
- * for example "subdir/filename.txt"
- * @param string $shareKeyPath share key prefix path relative to the user's data dir
- * for example "user1/files_encryption/share-keys/subdir/filename.txt"
- * @param \OC\Files\View $rootView root view, relative to data/
- * @return array list of share key files, path relative to data/$user
- */
- public static function findShareKeys($filePath, $shareKeyPath, \OC\Files\View $rootView) {
- $result = array();
-
- $user = \OCP\User::getUser();
- $util = new Util($rootView, $user);
- // get current sharing state
- $sharingEnabled = \OCP\Share::isEnabled();
-
- // get users sharing this file
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $filePath);
-
- $pathinfo = pathinfo($shareKeyPath);
-
- $baseDir = $pathinfo['dirname'] . '/';
- $fileName = $pathinfo['basename'];
- foreach ($usersSharing as $user) {
- $keyName = $fileName . '.' . $user . '.shareKey';
- if ($rootView->file_exists($baseDir . $keyName)) {
- $result[] = $baseDir . $keyName;
- } else {
- \OC_Log::write(
- 'Encryption library',
- 'No share key found for user "' . $user . '" for file "' . $fileName . '"',
- \OC_Log::WARN
- );
- }
- }
-
- return $result;
- }
-
- /**
* remember from which file the tmp file (getLocalFile() call) was created
* @param string $tmpFile path of tmp file
* @param string $originalFile path of the original file relative to data/
@@ -501,7 +460,7 @@ class Helper {
*/
public static function getCipher() {
- $cipher = \OCP\Config::getSystemValue('cipher', Crypt::DEFAULT_CIPHER);
+ $cipher = \OC::$server->getConfig()->getSystemValue('cipher', Crypt::DEFAULT_CIPHER);
if ($cipher !== 'AES-256-CFB' && $cipher !== 'AES-128-CFB') {
\OCP\Util::writeLog('files_encryption',
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/lib/hooks.php
index 3a0a37c0a59..7ddde0a3112 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/lib/hooks.php
@@ -3,8 +3,10 @@
/**
* ownCloud
*
- * @author Sam Tuke
- * @copyright 2012 Sam Tuke samtuke@owncloud.org
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Sam Tuke <samtuke@owncloud.org>
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -21,9 +23,7 @@
*
*/
-namespace OCA\Encryption;
-
-use OC\Files\Filesystem;
+namespace OCA\Files_Encryption;
/**
* Class for hook specific logic
@@ -35,7 +35,7 @@ class Hooks {
// file for which we want to delete the keys after the delete operation was successful
private static $deleteFiles = array();
// file for which we want to delete the keys after the delete operation was successful
- private static $umountedFiles = array();
+ private static $unmountedFiles = array();
/**
* Startup encryption backend upon user login
@@ -57,14 +57,14 @@ class Hooks {
\OC_Util::setupFS($params['uid']);
}
- $privateKey = \OCA\Encryption\Keymanager::getPrivateKey($view, $params['uid']);
+ $privateKey = Keymanager::getPrivateKey($view, $params['uid']);
// if no private key exists, check server configuration
if (!$privateKey) {
//check if all requirements are met
if (!Helper::checkRequirements() || !Helper::checkConfiguration()) {
$error_msg = $l->t("Missing requirements.");
- $hint = $l->t('Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
+ $hint = $l->t('Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
\OC_App::disable('files_encryption');
\OCP\Util::writeLog('Encryption library', $error_msg . ' ' . $hint, \OCP\Util::ERROR);
\OCP\Template::printErrorPage($error_msg, $hint);
@@ -126,7 +126,7 @@ class Hooks {
* remove keys from session during logout
*/
public static function logout() {
- $session = new \OCA\Encryption\Session(new \OC\Files\View());
+ $session = new Session(new \OC\Files\View());
$session->removeKeys();
}
@@ -150,18 +150,7 @@ class Hooks {
public static function postDeleteUser($params) {
if (\OCP\App::isEnabled('files_encryption')) {
- $view = new \OC\Files\View('/');
-
- // cleanup public key
- $publicKey = '/public-keys/' . $params['uid'] . '.public.key';
-
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $view->unlink($publicKey);
-
- \OC_FileProxy::$enabled = $proxyStatus;
+ Keymanager::deletePublicKey(new \OC\Files\View(), $params['uid']);
}
}
@@ -191,7 +180,7 @@ class Hooks {
if (Crypt::mode() === 'server') {
$view = new \OC\Files\View('/');
- $session = new \OCA\Encryption\Session($view);
+ $session = new Session($view);
// Get existing decrypted private key
$privateKey = $session->getPrivateKey();
@@ -242,10 +231,10 @@ class Hooks {
\OC_FileProxy::$enabled = false;
// Save public key
- $view->file_put_contents('/public-keys/' . $user . '.public.key', $keypair['publicKey']);
+ Keymanager::setPublicKey($keypair['publicKey'], $user);
// Encrypt private key with new password
- $encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], $newUserPassword, Helper::getCipher());
+ $encryptedKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $newUserPassword, Helper::getCipher());
if ($encryptedKey) {
Keymanager::setPrivateKey($encryptedKey, $user);
@@ -263,6 +252,19 @@ class Hooks {
}
}
+ /**
+ * after password reset we create a new key pair for the user
+ *
+ * @param array $params
+ */
+ public static function postPasswordReset($params) {
+ $uid = $params['uid'];
+ $password = $params['password'];
+
+ $util = new Util(new \OC\Files\View(), $uid);
+ $util->replaceUserKeys($password);
+ }
+
/*
* check if files can be encrypted to every user.
*/
@@ -277,7 +279,7 @@ class Hooks {
$l = new \OC_L10N('files_encryption');
$users = array();
- $view = new \OC\Files\View('/public-keys/');
+ $view = new \OC\Files\View('/');
switch ($params['shareType']) {
case \OCP\Share::SHARE_TYPE_USER:
@@ -290,7 +292,7 @@ class Hooks {
$notConfigured = array();
foreach ($users as $user) {
- if (!$view->file_exists($user . '.public.key')) {
+ if (!Keymanager::publicKeyExists($view, $user)) {
$notConfigured[] = $user;
}
}
@@ -315,7 +317,7 @@ class Hooks {
$path = \OC\Files\Filesystem::getPath($params['fileSource']);
- self::updateKeyfiles($path, $params['itemType']);
+ self::updateKeyfiles($path);
}
}
@@ -323,12 +325,11 @@ class Hooks {
* update keyfiles and share keys recursively
*
* @param string $path to the file/folder
- * @param string $type 'file' or 'folder'
*/
- private static function updateKeyfiles($path, $type) {
+ private static function updateKeyfiles($path) {
$view = new \OC\Files\View('/');
$userId = \OCP\User::getUser();
- $session = new \OCA\Encryption\Session($view);
+ $session = new Session($view);
$util = new Util($view, $userId);
$sharingEnabled = \OCP\Share::isEnabled();
@@ -337,7 +338,7 @@ class Hooks {
$mountPoint = $mount->getMountPoint();
// if a folder was shared, get a list of all (sub-)folders
- if ($type === 'folder') {
+ if ($view->is_dir('/' . $userId . '/files' . $path)) {
$allFiles = $util->getAllFiles($path, $mountPoint);
} else {
$allFiles = array($path);
@@ -361,15 +362,16 @@ class Hooks {
if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {
$view = new \OC\Files\View('/');
- $userId = \OCP\User::getUser();
+ $userId = $params['uidOwner'];
+ $userView = new \OC\Files\View('/' . $userId . '/files');
$util = new Util($view, $userId);
- $path = \OC\Files\Filesystem::getPath($params['fileSource']);
+ $path = $userView->getPath($params['fileSource']);
// for group shares get a list of the group members
if ($params['shareType'] === \OCP\Share::SHARE_TYPE_GROUP) {
$userIds = \OC_Group::usersInGroup($params['shareWith']);
} else {
- if ($params['shareType'] === \OCP\Share::SHARE_TYPE_LINK) {
+ if ($params['shareType'] === \OCP\Share::SHARE_TYPE_LINK || $params['shareType'] === \OCP\Share::SHARE_TYPE_REMOTE) {
$userIds = array($util->getPublicShareKeyId());
} else {
$userIds = array($params['shareWith']);
@@ -394,11 +396,10 @@ class Hooks {
// Unshare every user who no longer has access to the file
$delUsers = array_diff($userIds, $sharingUsers);
-
- list($owner, $ownerPath) = $util->getUidAndFilename($path);
+ $keyPath = Keymanager::getKeyPath($view, $util, $path);
// delete share key
- Keymanager::delShareKey($view, $delUsers, $ownerPath, $owner);
+ Keymanager::delShareKey($view, $delUsers, $keyPath, $userId, $path);
}
}
@@ -424,37 +425,24 @@ class Hooks {
$user = \OCP\User::getUser();
$view = new \OC\Files\View('/');
$util = new Util($view, $user);
- list($ownerOld, $pathOld) = $util->getUidAndFilename($params['oldpath']);
// we only need to rename the keys if the rename happens on the same mountpoint
// otherwise we perform a stream copy, so we get a new set of keys
$mp1 = $view->getMountPoint('/' . $user . '/files/' . $params['oldpath']);
$mp2 = $view->getMountPoint('/' . $user . '/files/' . $params['newpath']);
- $type = $view->is_dir('/' . $user . '/files/' . $params['oldpath']) ? 'folder' : 'file';
+ $oldKeysPath = Keymanager::getKeyPath($view, $util, $params['oldpath']);
if ($mp1 === $mp2) {
- if ($util->isSystemWideMountPoint($pathOld)) {
- $oldShareKeyPath = 'files_encryption/share-keys/' . $pathOld;
- } else {
- $oldShareKeyPath = $ownerOld . '/' . 'files_encryption/share-keys/' . $pathOld;
- }
- // gather share keys here because in postRename() the file will be moved already
- $oldShareKeys = Helper::findShareKeys($pathOld, $oldShareKeyPath, $view);
- if (count($oldShareKeys) === 0) {
- \OC_Log::write(
- 'Encryption library', 'No share keys found for "' . $pathOld . '"',
- \OC_Log::WARN
- );
- }
self::$renamedFiles[$params['oldpath']] = array(
- 'uid' => $ownerOld,
- 'path' => $pathOld,
- 'type' => $type,
'operation' => $operation,
- 'sharekeys' => $oldShareKeys
+ 'oldKeysPath' => $oldKeysPath,
+ );
+ } else {
+ self::$renamedFiles[$params['oldpath']] = array(
+ 'operation' => 'cleanup',
+ 'oldKeysPath' => $oldKeysPath,
);
-
}
}
@@ -469,81 +457,40 @@ class Hooks {
return true;
}
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
$view = new \OC\Files\View('/');
$userId = \OCP\User::getUser();
$util = new Util($view, $userId);
- $oldShareKeys = null;
- if (isset(self::$renamedFiles[$params['oldpath']]['uid']) &&
- isset(self::$renamedFiles[$params['oldpath']]['path'])) {
- $ownerOld = self::$renamedFiles[$params['oldpath']]['uid'];
- $pathOld = self::$renamedFiles[$params['oldpath']]['path'];
- $type = self::$renamedFiles[$params['oldpath']]['type'];
+ if (isset(self::$renamedFiles[$params['oldpath']]['operation']) &&
+ isset(self::$renamedFiles[$params['oldpath']]['oldKeysPath'])) {
$operation = self::$renamedFiles[$params['oldpath']]['operation'];
- $oldShareKeys = self::$renamedFiles[$params['oldpath']]['sharekeys'];
+ $oldKeysPath = self::$renamedFiles[$params['oldpath']]['oldKeysPath'];
unset(self::$renamedFiles[$params['oldpath']]);
+ if ($operation === 'cleanup') {
+ return $view->unlink($oldKeysPath);
+ }
} else {
\OCP\Util::writeLog('Encryption library', "can't get path and owner from the file before it was renamed", \OCP\Util::DEBUG);
- \OC_FileProxy::$enabled = $proxyStatus;
return false;
}
list($ownerNew, $pathNew) = $util->getUidAndFilename($params['newpath']);
- // Format paths to be relative to user files dir
- if ($util->isSystemWideMountPoint($pathOld)) {
- $oldKeyfilePath = 'files_encryption/keyfiles/' . $pathOld;
- $oldShareKeyPath = 'files_encryption/share-keys/' . $pathOld;
- } else {
- $oldKeyfilePath = $ownerOld . '/' . 'files_encryption/keyfiles/' . $pathOld;
- $oldShareKeyPath = $ownerOld . '/' . 'files_encryption/share-keys/' . $pathOld;
- }
-
if ($util->isSystemWideMountPoint($pathNew)) {
- $newKeyfilePath = 'files_encryption/keyfiles/' . $pathNew;
- $newShareKeyPath = 'files_encryption/share-keys/' . $pathNew;
+ $newKeysPath = 'files_encryption/keys/' . $pathNew;
} else {
- $newKeyfilePath = $ownerNew . '/files_encryption/keyfiles/' . $pathNew;
- $newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew;
+ $newKeysPath = $ownerNew . '/files_encryption/keys/' . $pathNew;
}
- // create new key folders if it doesn't exists
- if (!$view->file_exists(dirname($newShareKeyPath))) {
- $view->mkdir(dirname($newShareKeyPath));
- }
- if (!$view->file_exists(dirname($newKeyfilePath))) {
- $view->mkdir(dirname($newKeyfilePath));
- }
-
- // handle share keys
- if ($type === 'file') {
- $oldKeyfilePath .= '.key';
- $newKeyfilePath .= '.key';
-
- foreach ($oldShareKeys as $src) {
- $dst = \OC\Files\Filesystem::normalizePath(str_replace($pathOld, $pathNew, $src));
- $view->$operation($src, $dst);
- }
-
- } else {
- // handle share-keys folders
- $view->$operation($oldShareKeyPath, $newShareKeyPath);
- }
-
- // Rename keyfile so it isn't orphaned
- if ($view->file_exists($oldKeyfilePath)) {
- $view->$operation($oldKeyfilePath, $newKeyfilePath);
+ // create key folders if it doesn't exists
+ if (!$view->file_exists(dirname($newKeysPath))) {
+ $view->mkdir(dirname($newKeysPath));
}
+ $view->$operation($oldKeysPath, $newKeysPath);
// update sharing-keys
- self::updateKeyfiles($params['newpath'], $type);
-
- \OC_FileProxy::$enabled = $proxyStatus;
+ self::updateKeyfiles($params['newpath']);
}
/**
@@ -554,10 +501,10 @@ class Hooks {
public static function preDisable($params) {
if ($params['app'] === 'files_encryption') {
- \OC_Preferences::deleteAppFromAllUsers('files_encryption');
+ \OC::$server->getConfig()->deleteAppFromAllUsers('files_encryption');
- $session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
- $session->setInitialized(\OCA\Encryption\Session::NOT_INITIALIZED);
+ $session = new Session(new \OC\Files\View('/'));
+ $session->setInitialized(Session::NOT_INITIALIZED);
}
}
@@ -567,8 +514,8 @@ class Hooks {
*/
public static function postEnable($params) {
if ($params['app'] === 'files_encryption') {
- $session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
- $session->setInitialized(\OCA\Encryption\Session::NOT_INITIALIZED);
+ $session = new Session(new \OC\Files\View('/'));
+ $session->setInitialized(Session::NOT_INITIALIZED);
}
}
@@ -579,37 +526,28 @@ class Hooks {
*/
public static function postDelete($params) {
- if (!isset(self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]])) {
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+
+ if (!isset(self::$deleteFiles[$path])) {
return true;
}
- $deletedFile = self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]];
- $path = $deletedFile['path'];
- $user = $deletedFile['uid'];
+ $deletedFile = self::$deleteFiles[$path];
+ $keyPath = $deletedFile['keyPath'];
// we don't need to remember the file any longer
- unset(self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]]);
+ unset(self::$deleteFiles[$path]);
$view = new \OC\Files\View('/');
// return if the file still exists and wasn't deleted correctly
- if ($view->file_exists('/' . $user . '/files/' . $path)) {
+ if ($view->file_exists('/' . \OCP\User::getUser() . '/files/' . $path)) {
return true;
}
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
// Delete keyfile & shareKey so it isn't orphaned
- if (!Keymanager::deleteFileKey($view, $path, $user)) {
- \OCP\Util::writeLog('Encryption library',
- 'Keyfile or shareKey could not be deleted for file "' . $user.'/files/'.$path . '"', \OCP\Util::ERROR);
- }
+ $view->unlink($keyPath);
- Keymanager::delAllShareKeys($view, $user, $path);
-
- \OC_FileProxy::$enabled = $proxyStatus;
}
/**
@@ -618,6 +556,7 @@ class Hooks {
* @return boolean|null
*/
public static function preDelete($params) {
+ $view = new \OC\Files\View('/');
$path = $params[\OC\Files\Filesystem::signal_param_path];
// skip this method if the trash bin is enabled or if we delete a file
@@ -626,68 +565,61 @@ class Hooks {
return true;
}
- $util = new Util(new \OC\Files\View('/'), \OCP\USER::getUser());
- list($owner, $ownerPath) = $util->getUidAndFilename($path);
+ $util = new Util($view, \OCP\USER::getUser());
+
+ $keysPath = Keymanager::getKeyPath($view, $util, $path);
- self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]] = array(
- 'uid' => $owner,
- 'path' => $ownerPath);
+ self::$deleteFiles[$path] = array(
+ 'keyPath' => $keysPath);
}
/**
* unmount file from yourself
* remember files/folders which get unmounted
*/
- public static function preUmount($params) {
+ public static function preUnmount($params) {
+ $view = new \OC\Files\View('/');
+ $user = \OCP\User::getUser();
$path = $params[\OC\Files\Filesystem::signal_param_path];
- $user = \OCP\USER::getUser();
-
- $view = new \OC\Files\View();
- $itemType = $view->is_dir('/' . $user . '/files' . $path) ? 'folder' : 'file';
$util = new Util($view, $user);
list($owner, $ownerPath) = $util->getUidAndFilename($path);
- self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]] = array(
- 'uid' => $owner,
- 'path' => $ownerPath,
- 'itemType' => $itemType);
+ $keysPath = Keymanager::getKeyPath($view, $util, $path);
+
+ self::$unmountedFiles[$path] = array(
+ 'keyPath' => $keysPath,
+ 'owner' => $owner,
+ 'ownerPath' => $ownerPath
+ );
}
/**
* unmount file from yourself
*/
- public static function postUmount($params) {
+ public static function postUnmount($params) {
+
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+ $user = \OCP\User::getUser();
- if (!isset(self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]])) {
+ if (!isset(self::$unmountedFiles[$path])) {
return true;
}
- $umountedFile = self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]];
- $path = $umountedFile['path'];
- $user = $umountedFile['uid'];
- $itemType = $umountedFile['itemType'];
+ $umountedFile = self::$unmountedFiles[$path];
+ $keyPath = $umountedFile['keyPath'];
+ $owner = $umountedFile['owner'];
+ $ownerPath = $umountedFile['ownerPath'];
$view = new \OC\Files\View();
- $util = new Util($view, $user);
// we don't need to remember the file any longer
- unset(self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]]);
-
- // if we unshare a folder we need a list of all (sub-)files
- if ($itemType === 'folder') {
- $allFiles = $util->getAllFiles($path);
- } else {
- $allFiles = array($path);
- }
-
- foreach ($allFiles as $path) {
+ unset(self::$unmountedFiles[$path]);
- // check if the user still has access to the file, otherwise delete share key
- $sharingUsers = \OCP\Share::getUsersSharingFile($path, $user);
- if (!in_array(\OCP\User::getUser(), $sharingUsers['users'])) {
- Keymanager::delShareKey($view, array(\OCP\User::getUser()), $path, $user);
- }
+ // check if the user still has access to the file, otherwise delete share key
+ $sharingUsers = \OCP\Share::getUsersSharingFile($path, $user);
+ if (!in_array($user, $sharingUsers['users'])) {
+ Keymanager::delShareKey($view, array($user), $keyPath, $owner, $ownerPath);
}
}
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index 9560126ef33..925bba578f4 100644
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -3,8 +3,9 @@
/**
* ownCloud
*
- * @author Bjoern Schiessle
- * @copyright 2012 Bjoern Schiessle <schiessle@owncloud.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -21,7 +22,7 @@
*
*/
-namespace OCA\Encryption;
+namespace OCA\Files_Encryption;
/**
* Class to manage storage and retrieval of encryption keys
@@ -29,48 +30,96 @@ namespace OCA\Encryption;
*/
class Keymanager {
+ // base dir where all the file related keys are stored
+ private static $keys_base_dir = '/files_encryption/keys/';
+ private static $encryption_base_dir = '/files_encryption';
+ private static $public_key_dir = '/files_encryption/public_keys';
+
+ private static $key_cache = array(); // cache keys
+
/**
- * retrieve the ENCRYPTED private key from a user
+ * read key from hard disk
*
- * @param \OC\Files\View $view
- * @param string $user
- * @return string private key or false (hopefully)
- * @note the key returned by this method must be decrypted before use
+ * @param string $path to key
+ * @return string|bool either the key or false
*/
- public static function getPrivateKey(\OC\Files\View $view, $user) {
+ private static function getKey($path, $view) {
- $path = '/' . $user . '/' . 'files_encryption' . '/' . $user . '.private.key';
$key = false;
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
+ if (isset(self::$key_cache[$path])) {
+ $key = self::$key_cache[$path];
+ } else {
- if ($view->file_exists($path)) {
- $key = $view->file_get_contents($path);
- }
+ $proxyStatus = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
- \OC_FileProxy::$enabled = $proxyStatus;
+ if ($view->file_exists($path)) {
+ $key = $view->file_get_contents($path);
+ self::$key_cache[$path] = $key;
+ }
+
+ \OC_FileProxy::$enabled = $proxyStatus;
+
+ }
return $key;
}
/**
- * retrieve public key for a specified user
+ * write key to disk
+ *
+ *
+ * @param string $path path to key directory
+ * @param string $name key name
+ * @param string $key key
* @param \OC\Files\View $view
- * @param string $userId
- * @return string public key or false
+ * @return bool
*/
- public static function getPublicKey(\OC\Files\View $view, $userId) {
-
+ private static function setKey($path, $name, $key, $view) {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- $result = $view->file_get_contents('/public-keys/' . $userId . '.public.key');
+ self::keySetPreparation($view, $path);
+ $pathToKey = \OC\Files\Filesystem::normalizePath($path . '/' . $name);
+ $result = $view->file_put_contents($pathToKey, $key);
\OC_FileProxy::$enabled = $proxyStatus;
- return $result;
+ if (is_int($result) && $result > 0) {
+ self::$key_cache[$pathToKey] = $key;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * retrieve the ENCRYPTED private key from a user
+ *
+ * @param \OC\Files\View $view
+ * @param string $user
+ * @return string private key or false (hopefully)
+ * @note the key returned by this method must be decrypted before use
+ */
+ public static function getPrivateKey(\OC\Files\View $view, $user) {
+ $path = '/' . $user . '/' . 'files_encryption' . '/' . $user . '.privateKey';
+ return self::getKey($path, $view);
+ }
+
+ /**
+ * retrieve public key for a specified user
+ * @param \OC\Files\View $view
+ * @param string $userId
+ * @return string public key or false
+ */
+ public static function getPublicKey(\OC\Files\View $view, $userId) {
+ $path = self::$public_key_dir . '/' . $userId . '.publicKey';
+ return self::getKey($path, $view);
+ }
+
+ public static function getPublicKeyPath() {
+ return self::$public_key_dir;
}
/**
@@ -97,11 +146,8 @@ class Keymanager {
public static function getPublicKeys(\OC\Files\View $view, array $userIds) {
$keys = array();
-
foreach ($userIds as $userId) {
-
$keys[$userId] = self::getPublicKey($view, $userId);
-
}
return $keys;
@@ -112,7 +158,7 @@ class Keymanager {
* store file encryption key
*
* @param \OC\Files\View $view
- * @param \OCA\Encryption\Util $util
+ * @param \OCA\Files_Encryption\Util $util
* @param string $path relative path of the file, including filename
* @param string $catfile keyfile content
* @return bool true/false
@@ -120,259 +166,238 @@ class Keymanager {
* asymmetrically encrypt the keyfile before passing it to this method
*/
public static function setFileKey(\OC\Files\View $view, $util, $path, $catfile) {
+ $path = self::getKeyPath($view, $util, $path);
+ return self::setKey($path, 'fileKey', $catfile, $view);
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
+ }
+
+ /**
+ * get path to key folder for a given file
+ *
+ * @param \OC\Files\View $view relative to data directory
+ * @param \OCA\Files_Encryption\Util $util
+ * @param string $path path to the file, relative to the users file directory
+ * @return string
+ */
+ public static function getKeyPath($view, $util, $path) {
+
+ if ($view->is_dir('/' . \OCP\User::getUser() . '/' . $path)) {
+ throw new Exception\EncryptionException('file was expected but directoy was given', Exception\EncryptionException::GENERIC);
+ }
list($owner, $filename) = $util->getUidAndFilename($path);
+ $filename = Helper::stripPartialFileExtension($filename);
+ $filePath_f = ltrim($filename, '/');
// in case of system wide mount points the keys are stored directly in the data directory
if ($util->isSystemWideMountPoint($filename)) {
- $basePath = '/files_encryption/keyfiles';
+ $keyPath = self::$keys_base_dir . $filePath_f . '/';
} else {
- $basePath = '/' . $owner . '/files_encryption/keyfiles';
+ $keyPath = '/' . $owner . self::$keys_base_dir . $filePath_f . '/';
}
- $targetPath = self::keySetPreparation($view, $filename, $basePath);
-
- // try reusing key file if part file
- if (Helper::isPartialFilePath($targetPath)) {
+ return $keyPath;
+ }
- $result = $view->file_put_contents(
- $basePath . '/' . Helper::stripPartialFileExtension($targetPath) . '.key', $catfile);
+ /**
+ * get path to file key for a given file
+ *
+ * @param \OC\Files\View $view relative to data directory
+ * @param \OCA\Files_Encryption\Util $util
+ * @param string $path path to the file, relative to the users file directory
+ * @return string
+ */
+ public static function getFileKeyPath($view, $util, $path) {
+ $keyDir = self::getKeyPath($view, $util, $path);
+ return $keyDir . 'fileKey';
+ }
- } else {
+ /**
+ * get path to share key for a given user
+ *
+ * @param \OC\Files\View $view relateive to data directory
+ * @param \OCA\Files_Encryption\Util $util
+ * @param string $path path to file relative to the users files directoy
+ * @param string $uid user for whom we want the share-key path
+ * @retrun string
+ */
+ public static function getShareKeyPath($view, $util, $path, $uid) {
+ $keyDir = self::getKeyPath($view, $util, $path);
+ return $keyDir . $uid . '.shareKey';
+ }
- $result = $view->file_put_contents($basePath . '/' . $targetPath . '.key', $catfile);
+ /**
+ * delete key
+ *
+ * @param \OC\Files\View $view
+ * @param string $path
+ * @return boolean
+ */
+ private static function deleteKey($view, $path) {
+ $normalizedPath = \OC\Files\Filesystem::normalizePath($path);
+ $result = $view->unlink($normalizedPath);
+ if ($result) {
+ unset(self::$key_cache[$normalizedPath]);
+ return true;
}
- \OC_FileProxy::$enabled = $proxyStatus;
+ return false;
+ }
+
+ /**
+ * delete public key from a given user
+ *
+ * @param \OC\Files\View $view
+ * @param string $uid user
+ * @return bool
+ */
+ public static function deletePublicKey($view, $uid) {
+
+ $result = false;
+
+ if (!\OCP\User::userExists($uid)) {
+ $publicKey = self::$public_key_dir . '/' . $uid . '.publicKey';
+ self::deleteKey($view, $publicKey);
+ }
return $result;
+ }
+ /**
+ * check if public key for user exists
+ *
+ * @param \OC\Files\View $view
+ * @param string $uid
+ */
+ public static function publicKeyExists($view, $uid) {
+ return $view->file_exists(self::$public_key_dir . '/'. $uid . '.publicKey');
}
+
+
/**
* retrieve keyfile for an encrypted file
* @param \OC\Files\View $view
- * @param \OCA\Encryption\Util $util
+ * @param \OCA\Files_Encryption\Util $util
* @param string|false $filePath
- * @internal param \OCA\Encryption\file $string name
* @return string file key or false
* @note The keyfile returned is asymmetrically encrypted. Decryption
* of the keyfile must be performed by client code
*/
public static function getFileKey($view, $util, $filePath) {
+ $path = self::getFileKeyPath($view, $util, $filePath);
+ return self::getKey($path, $view);
+ }
+ /**
+ * store private key from the user
+ * @param string $key
+ * @return bool
+ * @note Encryption of the private key must be performed by client code
+ * as no encryption takes place here
+ */
+ public static function setPrivateKey($key, $user = '') {
- list($owner, $filename) = $util->getUidAndFilename($filePath);
- $filename = Helper::stripPartialFileExtension($filename);
- $filePath_f = ltrim($filename, '/');
-
- // in case of system wide mount points the keys are stored directly in the data directory
- if ($util->isSystemWideMountPoint($filename)) {
- $keyfilePath = '/files_encryption/keyfiles/' . $filePath_f . '.key';
- } else {
- $keyfilePath = '/' . $owner . '/files_encryption/keyfiles/' . $filePath_f . '.key';
- }
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if ($view->file_exists($keyfilePath)) {
-
- $result = $view->file_get_contents($keyfilePath);
-
- } else {
-
- $result = false;
-
- }
-
- \OC_FileProxy::$enabled = $proxyStatus;
+ $user = $user === '' ? \OCP\User::getUser() : $user;
+ $path = '/' . $user . '/files_encryption';
+ $header = Crypt::generateHeader();
- return $result;
+ return self::setKey($path, $user . '.privateKey', $header . $key, new \OC\Files\View());
}
/**
- * Delete a keyfile
+ * check if recovery key exists
*
* @param \OC\Files\View $view
- * @param string $path path of the file the key belongs to
- * @param string $userId the user to whom the file belongs
- * @return bool Outcome of unlink operation
- * @note $path must be relative to data/user/files. e.g. mydoc.txt NOT
- * /data/admin/files/mydoc.txt
+ * @return bool
*/
- public static function deleteFileKey($view, $path, $userId=null) {
+ public static function recoveryKeyExists($view) {
- $trimmed = ltrim($path, '/');
-
- if ($trimmed === '') {
- \OCP\Util::writeLog('Encryption library',
- 'Can\'t delete file-key empty path given!', \OCP\Util::ERROR);
- return false;
- }
+ $result = false;
- if ($userId === null) {
- $userId = Helper::getUser($path);
+ $recoveryKeyId = Helper::getRecoveryKeyId();
+ if ($recoveryKeyId) {
+ $result = ($view->file_exists(self::$public_key_dir . '/' . $recoveryKeyId . ".publicKey")
+ && $view->file_exists(self::$encryption_base_dir . '/' . $recoveryKeyId . ".privateKey"));
}
- $util = new Util($view, $userId);
- if($util->isSystemWideMountPoint($path)) {
- $keyPath = '/files_encryption/keyfiles/' . $trimmed;
- } else {
- $keyPath = '/' . $userId . '/files_encryption/keyfiles/' . $trimmed;
- }
+ return $result;
+ }
+ public static function publicShareKeyExists($view) {
$result = false;
- $fileExists = $view->file_exists('/' . $userId . '/files/' . $trimmed);
- if ($view->is_dir($keyPath) && !$fileExists) {
- \OCP\Util::writeLog('files_encryption', 'deleteFileKey: delete file key: ' . $keyPath, \OCP\Util::DEBUG);
- $result = $view->unlink($keyPath);
- } elseif ($view->file_exists($keyPath . '.key') && !$fileExists) {
- \OCP\Util::writeLog('files_encryption', 'deleteFileKey: delete file key: ' . $keyPath, \OCP\Util::DEBUG);
- $result = $view->unlink($keyPath . '.key');
-
- }
+ $publicShareKeyId = Helper::getPublicShareKeyId();
+ if ($publicShareKeyId) {
+ $result = ($view->file_exists(self::$public_key_dir . '/' . $publicShareKeyId . ".publicKey")
+ && $view->file_exists(self::$encryption_base_dir . '/' . $publicShareKeyId . ".privateKey"));
- if ($fileExists) {
- \OCP\Util::writeLog('Encryption library',
- 'Did not delete the file key, file still exists: ' . '/' . $userId . '/files/' . $trimmed, \OCP\Util::ERROR);
- } elseif (!$result) {
- \OCP\Util::writeLog('Encryption library',
- 'Could not delete keyfile; does not exist: "' . $keyPath, \OCP\Util::ERROR);
}
return $result;
-
}
/**
- * store private key from the user
+ * store public key from the user
* @param string $key
+ * @param string $user
+ *
* @return bool
- * @note Encryption of the private key must be performed by client code
- * as no encryption takes place here
*/
- public static function setPrivateKey($key, $user = '') {
+ public static function setPublicKey($key, $user = '') {
- if ($user === '') {
- $user = \OCP\User::getUser();
- }
-
- $header = Crypt::generateHeader();
-
- $view = new \OC\Files\View('/' . $user . '/files_encryption');
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if (!$view->file_exists('')) {
- $view->mkdir('');
- }
-
- $result = $view->file_put_contents($user . '.private.key', $header . $key);
-
- \OC_FileProxy::$enabled = $proxyStatus;
-
- return $result;
+ $user = $user === '' ? \OCP\User::getUser() : $user;
+ return self::setKey(self::$public_key_dir, $user . '.publicKey', $key, new \OC\Files\View('/'));
}
/**
* write private system key (recovery and public share key) to disk
*
* @param string $key encrypted key
- * @param string $keyName name of the key file
+ * @param string $keyName name of the key
* @return boolean
*/
public static function setPrivateSystemKey($key, $keyName) {
+ $keyName = $keyName . '.privateKey';
$header = Crypt::generateHeader();
- $view = new \OC\Files\View('/owncloud_private_key');
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if (!$view->file_exists('')) {
- $view->mkdir('');
- }
-
- $result = $view->file_put_contents($keyName, $header . $key);
-
- \OC_FileProxy::$enabled = $proxyStatus;
-
- return $result;
+ return self::setKey(self::$encryption_base_dir, $keyName,$header . $key, new \OC\Files\View());
}
/**
- * store share key
+ * read private system key (recovery and public share key) from disk
*
- * @param \OC\Files\View $view
- * @param string $path where the share key is stored
- * @param string $shareKey
- * @return bool true/false
- * @note The keyfile is not encrypted here. Client code must
- * asymmetrically encrypt the keyfile before passing it to this method
+ * @param string $keyName name of the key
+ * @return string|boolean private system key or false
*/
- private static function setShareKey(\OC\Files\View $view, $path, $shareKey) {
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $result = $view->file_put_contents($path, $shareKey);
-
- \OC_FileProxy::$enabled = $proxyStatus;
-
- if (is_int($result) && $result > 0) {
- return true;
- } else {
- return false;
- }
+ public static function getPrivateSystemKey($keyName) {
+ $path = $keyName . '.privateKey';
+ return self::getKey($path, new \OC\Files\View(self::$encryption_base_dir));
}
/**
* store multiple share keys for a single file
* @param \OC\Files\View $view
- * @param \OCA\Encryption\Util $util
+ * @param \OCA\Files_Encryption\Util $util
* @param string $path
* @param array $shareKeys
* @return bool
*/
- public static function setShareKeys(\OC\Files\View $view, $util, $path, array $shareKeys) {
-
- // $shareKeys must be an array with the following format:
- // [userId] => [encrypted key]
-
- list($owner, $filename) = $util->getUidAndFilename($path);
+ public static function setShareKeys($view, $util, $path, array $shareKeys) {
// in case of system wide mount points the keys are stored directly in the data directory
- if ($util->isSystemWideMountPoint($filename)) {
- $basePath = '/files_encryption/share-keys';
- } else {
- $basePath = '/' . $owner . '/files_encryption/share-keys';
- }
+ $basePath = Keymanager::getKeyPath($view, $util, $path);
- $shareKeyPath = self::keySetPreparation($view, $filename, $basePath);
+ self::keySetPreparation($view, $basePath);
$result = true;
foreach ($shareKeys as $userId => $shareKey) {
-
- // try reusing key file if part file
- if (Helper::isPartialFilePath($shareKeyPath)) {
- $writePath = $basePath . '/' . Helper::stripPartialFileExtension($shareKeyPath) . '.' . $userId . '.shareKey';
- } else {
- $writePath = $basePath . '/' . $shareKeyPath . '.' . $userId . '.shareKey';
- }
-
- if (!self::setShareKey($view, $writePath, $shareKey)) {
-
+ if (!self::setKey($basePath, $userId . '.shareKey', $shareKey, $view)) {
// If any of the keys are not set, flag false
$result = false;
}
@@ -386,95 +411,15 @@ class Keymanager {
* retrieve shareKey for an encrypted file
* @param \OC\Files\View $view
* @param string $userId
- * @param \OCA\Encryption\Util $util
+ * @param \OCA\Files_Encryption\Util $util
* @param string $filePath
* @return string file key or false
* @note The sharekey returned is encrypted. Decryption
* of the keyfile must be performed by client code
*/
- public static function getShareKey(\OC\Files\View $view, $userId, $util, $filePath) {
-
- // try reusing key file if part file
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- list($owner, $filename) = $util->getUidAndFilename($filePath);
- $filename = Helper::stripPartialFileExtension($filename);
- // in case of system wide mount points the keys are stored directly in the data directory
- if ($util->isSystemWideMountPoint($filename)) {
- $shareKeyPath = '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey';
- } else {
- $shareKeyPath = '/' . $owner . '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey';
- }
-
- if ($view->file_exists($shareKeyPath)) {
-
- $result = $view->file_get_contents($shareKeyPath);
-
- } else {
-
- $result = false;
-
- }
-
- \OC_FileProxy::$enabled = $proxyStatus;
-
- return $result;
-
- }
-
- /**
- * delete all share keys of a given file
- * @param \OC\Files\View $view
- * @param string $userId owner of the file
- * @param string $filePath path to the file, relative to the owners file dir
- */
- public static function delAllShareKeys($view, $userId, $filePath) {
-
- $filePath = ltrim($filePath, '/');
-
- if ($view->file_exists('/' . $userId . '/files/' . $filePath)) {
- \OCP\Util::writeLog('Encryption library',
- 'File still exists, stop deleting share keys!', \OCP\Util::ERROR);
- return false;
- }
-
- if ($filePath === '') {
- \OCP\Util::writeLog('Encryption library',
- 'Can\'t delete share-keys empty path given!', \OCP\Util::ERROR);
- return false;
- }
-
- $util = new util($view, $userId);
-
- if ($util->isSystemWideMountPoint($filePath)) {
- $baseDir = '/files_encryption/share-keys/';
- } else {
- $baseDir = $userId . '/files_encryption/share-keys/';
- }
-
- $result = true;
-
- if ($view->is_dir($baseDir . $filePath)) {
- \OCP\Util::writeLog('files_encryption', 'delAllShareKeys: delete share keys: ' . $baseDir . $filePath, \OCP\Util::DEBUG);
- $result = $view->unlink($baseDir . $filePath);
- } else {
- $sharingEnabled = \OCP\Share::isEnabled();
- $users = $util->getSharingUsersArray($sharingEnabled, $filePath);
- foreach($users as $user) {
- $keyName = $baseDir . $filePath . '.' . $user . '.shareKey';
- if ($view->file_exists($keyName)) {
- \OCP\Util::writeLog(
- 'files_encryption',
- 'dellAllShareKeys: delete share keys: "' . $keyName . '"',
- \OCP\Util::DEBUG
- );
- $result &= $view->unlink($keyName);
- }
- }
- }
-
- return (bool)$result;
+ public static function getShareKey($view, $userId, $util, $filePath) {
+ $path = self::getShareKeyPath($view, $util, $filePath, $userId);
+ return self::getKey($path, $view);
}
/**
@@ -482,45 +427,19 @@ class Keymanager {
*
* @param \OC\Files\View $view relative to data/
* @param array $userIds list of users we want to remove
- * @param string $filename the owners name of the file for which we want to remove the users relative to data/user/files
- * @param string $owner owner of the file
+ * @param string $keyPath
+ * @param string $owner the owner of the file
+ * @param string $ownerPath the owners name of the file for which we want to remove the users relative to data/user/files
*/
- public static function delShareKey($view, $userIds, $filename, $owner) {
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $util = new Util($view, $owner);
+ public static function delShareKey($view, $userIds, $keysPath, $owner, $ownerPath) {
- if ($util->isSystemWideMountPoint($filename)) {
- $shareKeyPath = \OC\Files\Filesystem::normalizePath('/files_encryption/share-keys/' . $filename);
- } else {
- $shareKeyPath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files_encryption/share-keys/' . $filename);
+ $key = array_search($owner, $userIds, true);
+ if ($key !== false && $view->file_exists('/' . $owner . '/files/' . $ownerPath)) {
+ unset($userIds[$key]);
}
- if ($view->is_dir($shareKeyPath)) {
+ self::recursiveDelShareKeys($keysPath, $userIds, $view);
- self::recursiveDelShareKeys($shareKeyPath, $userIds, $owner, $view);
-
- } else {
-
- foreach ($userIds as $userId) {
-
- if ($userId === $owner && $view->file_exists('/' . $owner . '/files/' . $filename)) {
- \OCP\Util::writeLog('files_encryption', 'Tried to delete owner key, but the file still exists!', \OCP\Util::FATAL);
- continue;
- }
- $result = $view->unlink($shareKeyPath . '.' . $userId . '.shareKey');
- \OCP\Util::writeLog('files_encryption', 'delShareKey: delete share key: ' . $shareKeyPath . '.' . $userId . '.shareKey' , \OCP\Util::DEBUG);
- if (!$result) {
- \OCP\Util::writeLog('Encryption library',
- 'Could not delete shareKey; does not exist: "' . $shareKeyPath . '.' . $userId
- . '.shareKey"', \OCP\Util::ERROR);
- }
- }
- }
-
- \OC_FileProxy::$enabled = $proxyStatus;
}
/**
@@ -528,35 +447,23 @@ class Keymanager {
*
* @param string $dir directory
* @param array $userIds user ids for which the share keys should be deleted
- * @param string $owner owner of the file
* @param \OC\Files\View $view view relative to data/
*/
- private static function recursiveDelShareKeys($dir, $userIds, $owner, $view) {
+ private static function recursiveDelShareKeys($dir, $userIds, $view) {
$dirContent = $view->opendir($dir);
- $dirSlices = explode('/', ltrim($dir, '/'));
- $realFileDir = '/' . $owner . '/files/' . implode('/', array_slice($dirSlices, 3)) . '/';
if (is_resource($dirContent)) {
while (($file = readdir($dirContent)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if ($view->is_dir($dir . '/' . $file)) {
- self::recursiveDelShareKeys($dir . '/' . $file, $userIds, $owner, $view);
+ self::recursiveDelShareKeys($dir . '/' . $file, $userIds, $view);
} else {
foreach ($userIds as $userId) {
- $fileNameFromShareKey = self::getFilenameFromShareKey($file, $userId);
- if (!$fileNameFromShareKey) {
- continue;
+ if ($userId . '.shareKey' === $file) {
+ \OCP\Util::writeLog('files_encryption', 'recursiveDelShareKey: delete share key: ' . $file, \OCP\Util::DEBUG);
+ self::deleteKey($view, $dir . '/' . $file);
}
- $realFile = $realFileDir . $fileNameFromShareKey;
-
- if ($userId === $owner &&
- $view->file_exists($realFile)) {
- \OCP\Util::writeLog('files_encryption', 'original file still exists, keep owners share key!', \OCP\Util::ERROR);
- continue;
- }
- \OCP\Util::writeLog('files_encryption', 'recursiveDelShareKey: delete share key: ' . $file, \OCP\Util::DEBUG);
- $view->unlink($dir . '/' . $file);
}
}
}
@@ -567,21 +474,15 @@ class Keymanager {
/**
* Make preparations to vars and filesystem for saving a keyfile
- * @param string|boolean $path
+ *
+ * @param \OC\Files\View $view
+ * @param string $path relatvie to the views root
* @param string $basePath
*/
- protected static function keySetPreparation(\OC\Files\View $view, $path, $basePath) {
-
- $targetPath = ltrim($path, '/');
-
- $path_parts = pathinfo($targetPath);
-
+ protected static function keySetPreparation($view, $path) {
// If the file resides within a subdirectory, create it
- if (
- isset($path_parts['dirname'])
- && !$view->file_exists($basePath . '/' . $path_parts['dirname'])
- ) {
- $sub_dirs = explode('/', $basePath . '/' . $path_parts['dirname']);
+ if (!$view->file_exists($path)) {
+ $sub_dirs = explode('/', $path);
$dir = '';
foreach ($sub_dirs as $sub_dir) {
$dir .= '/' . $sub_dir;
@@ -590,27 +491,6 @@ class Keymanager {
}
}
}
-
- return $targetPath;
-
}
- /**
- * extract filename from share key name
- * @param string $shareKey (filename.userid.sharekey)
- * @param string $userId
- * @return string|false filename or false
- */
- protected static function getFilenameFromShareKey($shareKey, $userId) {
- $expectedSuffix = '.' . $userId . '.' . 'shareKey';
- $suffixLen = strlen($expectedSuffix);
-
- $suffix = substr($shareKey, -$suffixLen);
-
- if ($suffix !== $expectedSuffix) {
- return false;
- }
-
- return substr($shareKey, 0, -$suffixLen);
- }
}
diff --git a/apps/files_encryption/lib/migration.php b/apps/files_encryption/lib/migration.php
index 59389911b5b..1bab1dfe4a5 100644
--- a/apps/files_encryption/lib/migration.php
+++ b/apps/files_encryption/lib/migration.php
@@ -2,8 +2,9 @@
/**
* ownCloud
*
- * @author Thomas Müller
- * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -25,26 +26,257 @@ namespace OCA\Files_Encryption;
class Migration {
- public function __construct($tableName = 'encryption') {
- $this->tableName = $tableName;
+ /**
+ * @var \OC\Files\View
+ */
+ private $view;
+ private $public_share_key_id;
+ private $recovery_key_id;
+
+ public function __construct() {
+ $this->view = new \OC\Files\View();
+ $this->public_share_key_id = Helper::getPublicShareKeyId();
+ $this->recovery_key_id = Helper::getRecoveryKeyId();
+ }
+
+ public function reorganizeFolderStructure() {
+
+ $this->createPathForKeys('/files_encryption');
+
+ // backup system wide folders
+ $this->backupSystemWideKeys();
+
+ // rename public keys
+ $this->renamePublicKeys();
+
+ // rename system wide mount point
+ $this->renameFileKeys('', '/files_encryption/keyfiles');
+
+ // rename system private keys
+ $this->renameSystemPrivateKeys();
+
+ // delete old system wide folders
+ $this->view->deleteAll('/public-keys');
+ $this->view->deleteAll('/owncloud_private_key');
+ $this->view->deleteAll('/files_encryption/share-keys');
+ $this->view->deleteAll('/files_encryption/keyfiles');
+
+ $users = \OCP\User::getUsers();
+ foreach ($users as $user) {
+ // backup all keys
+ if ($this->backupUserKeys($user)) {
+ // create new 'key' folder
+ $this->view->mkdir($user . '/files_encryption/keys');
+ // rename users private key
+ $this->renameUsersPrivateKey($user);
+ // rename file keys
+ $path = $user . '/files_encryption/keyfiles';
+ $this->renameFileKeys($user, $path);
+ $trashPath = $user . '/files_trashbin/keyfiles';
+ if (\OC_App::isEnabled('files_trashbin') && $this->view->is_dir($trashPath)) {
+ $this->renameFileKeys($user, $trashPath, true);
+ $this->view->deleteAll($trashPath);
+ $this->view->deleteAll($user . '/files_trashbin/share-keys');
+ }
+ // delete old folders
+ $this->deleteOldKeys($user);
+ }
+ }
+ }
+
+ private function backupSystemWideKeys() {
+ $backupDir = 'encryption_migration_backup_' . date("Y-m-d_H-i-s");
+ $this->view->mkdir($backupDir);
+ $this->view->copy('owncloud_private_key', $backupDir . '/owncloud_private_key');
+ $this->view->copy('public-keys', $backupDir . '/public-keys');
+ $this->view->copy('files_encryption', $backupDir . '/files_encryption');
+ }
+
+ private function backupUserKeys($user) {
+ $encryptionDir = $user . '/files_encryption';
+ if ($this->view->is_dir($encryptionDir)) {
+ $backupDir = $user . '/encryption_migration_backup_' . date("Y-m-d_H-i-s");
+ $this->view->mkdir($backupDir);
+ $this->view->copy($encryptionDir, $backupDir);
+ return true;
+ }
+ return false;
+ }
+
+ private function renamePublicKeys() {
+ $dh = $this->view->opendir('public-keys');
+
+ $this->createPathForKeys('files_encryption/public_keys');
+
+ if (is_resource($dh)) {
+ while (($oldPublicKey = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($oldPublicKey)) {
+ $newPublicKey = substr($oldPublicKey, 0, strlen($oldPublicKey) - strlen('.public.key')) . '.publicKey';
+ $this->view->rename('public-keys/' . $oldPublicKey , 'files_encryption/public_keys/' . $newPublicKey);
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ private function renameSystemPrivateKeys() {
+ $dh = $this->view->opendir('owncloud_private_key');
+
+ if (is_resource($dh)) {
+ while (($oldPrivateKey = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($oldPrivateKey)) {
+ $newPrivateKey = substr($oldPrivateKey, 0, strlen($oldPrivateKey) - strlen('.private.key')) . '.privateKey';
+ $this->view->rename('owncloud_private_key/' . $oldPrivateKey , 'files_encryption/' . $newPrivateKey);
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ private function renameUsersPrivateKey($user) {
+ $oldPrivateKey = $user . '/files_encryption/' . $user . '.private.key';
+ $newPrivateKey = substr($oldPrivateKey, 0, strlen($oldPrivateKey) - strlen('.private.key')) . '.privateKey';
+
+ $this->view->rename($oldPrivateKey, $newPrivateKey);
+ }
+
+ private function getFileName($file, $trash) {
+
+ $extLength = strlen('.key');
+
+ if ($trash) {
+ $parts = explode('.', $file);
+ if ($parts[count($parts) - 1] !== 'key') {
+ $extLength = $extLength + strlen('.' . $parts[count($parts) - 1]);
+ }
+ }
+
+ $filename = substr($file, 0, strlen($file) - $extLength);
+
+ return $filename;
+ }
+
+ private function getExtension($file, $trash) {
+
+ $extension = '';
+
+ if ($trash) {
+ $parts = explode('.', $file);
+ if ($parts[count($parts) - 1] !== 'key') {
+ $extension = '.' . $parts[count($parts) - 1];
+ }
+ }
+
+ return $extension;
+ }
+
+ private function getFilePath($path, $user, $trash) {
+ $offset = $trash ? strlen($user . '/files_trashbin/keyfiles') : strlen($user . '/files_encryption/keyfiles');
+ return substr($path, $offset);
+ }
+
+ private function getTargetDir($user, $filePath, $filename, $extension, $trash) {
+ if ($trash) {
+ $targetDir = $user . '/files_trashbin/keys/' . $filePath . '/' . $filename . $extension;
+ } else {
+ $targetDir = $user . '/files_encryption/keys/' . $filePath . '/' . $filename . $extension;
+ }
+
+ return $targetDir;
+ }
+
+ private function renameFileKeys($user, $path, $trash = false) {
+
+ $dh = $this->view->opendir($path);
+
+ if (is_resource($dh)) {
+ while (($file = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+ if ($this->view->is_dir($path . '/' . $file)) {
+ $this->renameFileKeys($user, $path . '/' . $file, $trash);
+ } else {
+ $filename = $this->getFileName($file, $trash);
+ $filePath = $this->getFilePath($path, $user, $trash);
+ $extension = $this->getExtension($file, $trash);
+ $targetDir = $this->getTargetDir($user, $filePath, $filename, $extension, $trash);
+ $this->createPathForKeys($targetDir);
+ $this->view->copy($path . '/' . $file, $targetDir . '/fileKey');
+ $this->renameShareKeys($user, $filePath, $filename, $targetDir, $trash);
+ }
+ }
+ }
+ closedir($dh);
+ }
}
- // migrate settings from oc_encryption to oc_preferences
- public function dropTableEncryption() {
- $tableName = $this->tableName;
- if (!\OC_DB::tableExists($tableName)) {
- return;
+ private function getOldShareKeyPath($user, $filePath, $trash) {
+ if ($trash) {
+ $oldShareKeyPath = $user . '/files_trashbin/share-keys/' . $filePath;
+ } else {
+ $oldShareKeyPath = $user . '/files_encryption/share-keys/' . $filePath;
}
- $sql = "select `uid`, max(`recovery_enabled`) as `recovery_enabled`, min(`migration_status`) as `migration_status` from `*PREFIX*$tableName` group by `uid`";
- $query = \OCP\DB::prepare($sql);
- $result = $query->execute(array())->fetchAll();
- foreach ($result as $row) {
- \OC_Preferences::setValue($row['uid'], 'files_encryption', 'recovery_enabled', $row['recovery_enabled']);
- \OC_Preferences::setValue($row['uid'], 'files_encryption', 'migration_status', $row['migration_status']);
+ return $oldShareKeyPath;
+ }
+
+ private function getUidFromShareKey($file, $filename, $trash) {
+ $extLength = strlen('.shareKey');
+ if ($trash) {
+ $parts = explode('.', $file);
+ if ($parts[count($parts) - 1] !== 'shareKey') {
+ $extLength = $extLength + strlen('.' . $parts[count($parts) - 1]);
+ }
}
- \OC_DB::dropTable($tableName);
+ $uid = substr($file, strlen($filename) + 1, $extLength * -1);
+
+ return $uid;
}
+ private function renameShareKeys($user, $filePath, $filename, $target, $trash) {
+ $oldShareKeyPath = $this->getOldShareKeyPath($user, $filePath, $trash);
+ $dh = $this->view->opendir($oldShareKeyPath);
+
+ if (is_resource($dh)) {
+ while (($file = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+ if ($this->view->is_dir($oldShareKeyPath . '/' . $file)) {
+ continue;
+ } else {
+ if (substr($file, 0, strlen($filename) +1) === $filename . '.') {
+
+ $uid = $this->getUidFromShareKey($file, $filename, $trash);
+ if ($uid === $this->public_share_key_id ||
+ $uid === $this->recovery_key_id ||
+ \OCP\User::userExists($uid)) {
+ $this->view->copy($oldShareKeyPath . '/' . $file, $target . '/' . $uid . '.shareKey');
+ }
+ }
+ }
+
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ private function deleteOldKeys($user) {
+ $this->view->deleteAll($user . '/files_encryption/keyfiles');
+ $this->view->deleteAll($user . '/files_encryption/share-keys');
+ }
+
+ private function createPathForKeys($path) {
+ if (!$this->view->file_exists($path)) {
+ $sub_dirs = explode('/', $path);
+ $dir = '';
+ foreach ($sub_dirs as $sub_dir) {
+ $dir .= '/' . $sub_dir;
+ if (!$this->view->is_dir($dir)) {
+ $this->view->mkdir($dir);
+ }
+ }
+ }
+ }
+
+
}
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index 3b9dcbe7767..ba78c81aa35 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -3,10 +3,11 @@
/**
* ownCloud
*
- * @author Bjoern Schiessle, Sam Tuke, Robin Appelman
- * @copyright 2012 Sam Tuke <samtuke@owncloud.com>
- * 2012 Robin Appelman <icewind1991@gmail.com>
- * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ * @author Sam Tuke <samtuke@owncloud.com>
+ * @author Robin Appelman <icewind1991@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -29,11 +30,11 @@
* webui.
*/
-namespace OCA\Encryption;
+namespace OCA\Files_Encryption;
/**
* Class Proxy
- * @package OCA\Encryption
+ * @package OCA\Files_Encryption
*/
class Proxy extends \OC_FileProxy {
@@ -91,12 +92,10 @@ class Proxy extends \OC_FileProxy {
private function shouldEncrypt($path, $mode = 'w') {
$userId = Helper::getUser($path);
- $session = new Session(new \OC\Files\View());
// don't call the crypt stream wrapper, if...
if (
- $session->getInitialized() !== Session::INIT_SUCCESSFUL // encryption successful initialized
- || Crypt::mode() !== 'server' // we are not in server-side-encryption mode
+ Crypt::mode() !== 'server' // we are not in server-side-encryption mode
|| $this->isExcludedPath($path, $userId) // if path is excluded from encryption
|| substr($path, 0, 8) === 'crypt://' // we are already in crypt mode
) {
@@ -131,7 +130,7 @@ class Proxy extends \OC_FileProxy {
$view = new \OC\Files\View('/');
// get relative path
- $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
+ $relativePath = Helper::stripUserFilesPath($path);
if (!isset($relativePath)) {
return true;
@@ -206,11 +205,11 @@ class Proxy extends \OC_FileProxy {
public function postFile_get_contents($path, $data) {
$plainData = null;
- $view = new \OC\Files\View('/');
// If data is a catfile
if (
Crypt::mode() === 'server'
+ && $this->shouldEncrypt($path)
&& Crypt::isCatfileContent($data)
) {
@@ -339,15 +338,15 @@ class Proxy extends \OC_FileProxy {
}
// get relative path
- $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
+ $relativePath = Helper::stripUserFilesPath($path);
// if path is empty we cannot resolve anything
if (empty($relativePath)) {
return $size;
}
- // get file info from database/cache if not .part file
- if (empty($fileInfo) && !Helper::isPartialFilePath($path)) {
+ // get file info from database/cache
+ if (empty($fileInfo)) {
$proxyState = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
$fileInfo = $view->getFileInfo($path);
diff --git a/apps/files_encryption/lib/session.php b/apps/files_encryption/lib/session.php
index 7bd4fd02421..4c70bc7e8fc 100644
--- a/apps/files_encryption/lib/session.php
+++ b/apps/files_encryption/lib/session.php
@@ -2,8 +2,10 @@
/**
* ownCloud
*
- * @author Sam Tuke
- * @copyright 2012 Sam Tuke samtuke@owncloud.com
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Sam Tuke <samtuke@owncloud.com>
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -20,7 +22,7 @@
*
*/
-namespace OCA\Encryption;
+namespace OCA\Files_Encryption;
/**
* Class for handling encryption related session data
@@ -29,6 +31,7 @@ namespace OCA\Encryption;
class Session {
private $view;
+ private static $publicShareKey = false;
const NOT_INITIALIZED = '0';
const INIT_EXECUTED = '1';
@@ -45,64 +48,48 @@ class Session {
$this->view = $view;
- if (!$this->view->is_dir('owncloud_private_key')) {
+ if (!$this->view->is_dir('files_encryption')) {
- $this->view->mkdir('owncloud_private_key');
+ $this->view->mkdir('files_encryption');
}
$appConfig = \OC::$server->getAppConfig();
- $publicShareKeyId = $appConfig->getValue('files_encryption', 'publicShareKeyId');
+ $publicShareKeyId = Helper::getPublicShareKeyId();
- if ($publicShareKeyId === null) {
+ if ($publicShareKeyId === false) {
$publicShareKeyId = 'pubShare_' . substr(md5(time()), 0, 8);
$appConfig->setValue('files_encryption', 'publicShareKeyId', $publicShareKeyId);
}
- if (
- !$this->view->file_exists("/public-keys/" . $publicShareKeyId . ".public.key")
- || !$this->view->file_exists("/owncloud_private_key/" . $publicShareKeyId . ".private.key")
- ) {
+ if (!Keymanager::publicShareKeyExists($view)) {
$keypair = Crypt::createKeypair();
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
// Save public key
-
- if (!$view->is_dir('/public-keys')) {
- $view->mkdir('/public-keys');
- }
-
- $this->view->file_put_contents('/public-keys/' . $publicShareKeyId . '.public.key', $keypair['publicKey']);
+ Keymanager::setPublicKey($keypair['publicKey'], $publicShareKeyId);
// Encrypt private key empty passphrase
- $cipher = \OCA\Encryption\Helper::getCipher();
- $encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], '', $cipher);
+ $cipher = Helper::getCipher();
+ $encryptedKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], '', $cipher);
if ($encryptedKey) {
- Keymanager::setPrivateSystemKey($encryptedKey, $publicShareKeyId . '.private.key');
+ Keymanager::setPrivateSystemKey($encryptedKey, $publicShareKeyId);
} else {
\OCP\Util::writeLog('files_encryption', 'Could not create public share keys', \OCP\Util::ERROR);
}
- \OC_FileProxy::$enabled = $proxyStatus;
-
}
- if (\OCA\Encryption\Helper::isPublicAccess()) {
+ if (Helper::isPublicAccess() && !self::getPublicSharePrivateKey()) {
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- $encryptedKey = $this->view->file_get_contents(
- '/owncloud_private_key/' . $publicShareKeyId . '.private.key');
+ $encryptedKey = Keymanager::getPrivateSystemKey($publicShareKeyId);
$privateKey = Crypt::decryptPrivateKey($encryptedKey, '');
- $this->setPublicSharePrivateKey($privateKey);
-
- $this->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL);
+ self::setPublicSharePrivateKey($privateKey);
\OC_FileProxy::$enabled = $proxyStatus;
}
@@ -127,8 +114,8 @@ class Session {
* remove keys from session
*/
public function removeKeys() {
- \OC::$session->remove('publicSharePrivateKey');
- \OC::$session->remove('privateKey');
+ \OC::$server->getSession()->remove('publicSharePrivateKey');
+ \OC::$server->getSession()->remove('privateKey');
}
/**
@@ -164,6 +151,8 @@ class Session {
public function getInitialized() {
if (!is_null(\OC::$server->getSession()->get('encryptionInitialized'))) {
return \OC::$server->getSession()->get('encryptionInitialized');
+ } else if (Helper::isPublicAccess() && self::getPublicSharePrivateKey()) {
+ return self::INIT_SUCCESSFUL;
} else {
return self::NOT_INITIALIZED;
}
@@ -176,8 +165,8 @@ class Session {
*/
public function getPrivateKey() {
// return the public share private key if this is a public access
- if (\OCA\Encryption\Helper::isPublicAccess()) {
- return $this->getPublicSharePrivateKey();
+ if (Helper::isPublicAccess()) {
+ return self::getPublicSharePrivateKey();
} else {
if (!is_null(\OC::$server->getSession()->get('privateKey'))) {
return \OC::$server->getSession()->get('privateKey');
@@ -192,12 +181,9 @@ class Session {
* @param string $privateKey
* @return bool
*/
- public function setPublicSharePrivateKey($privateKey) {
-
- \OC::$server->getSession()->set('publicSharePrivateKey', $privateKey);
-
+ private static function setPublicSharePrivateKey($privateKey) {
+ self::$publicShareKey = $privateKey;
return true;
-
}
/**
@@ -205,13 +191,8 @@ class Session {
* @return string $privateKey
*
*/
- public function getPublicSharePrivateKey() {
-
- if (!is_null(\OC::$server->getSession()->get('publicSharePrivateKey'))) {
- return \OC::$server->getSession()->get('publicSharePrivateKey');
- } else {
- return false;
- }
+ private static function getPublicSharePrivateKey() {
+ return self::$publicShareKey;
}
}
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index f74812a7253..17da4eb1cdc 100644
--- a/apps/files_encryption/lib/stream.php
+++ b/apps/files_encryption/lib/stream.php
@@ -2,10 +2,11 @@
/**
* ownCloud
*
- * @author Bjoern Schiessle, Robin Appelman
- * @copyright 2014 Bjoern Schiessle <schiessle@owncloud.com>
- * 2012 Sam Tuke <samtuke@owncloud.com>,
- * 2011 Robin Appelman <icewind1991@gmail.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ * @author Robin Appelman <icewind@owncloud.com>
+ * @author Sam Tuke <samtuke@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -29,7 +30,9 @@
* and then fopen('crypt://streams/foo');
*/
-namespace OCA\Encryption;
+namespace OCA\Files_Encryption;
+
+use OCA\Files_Encryption\Exception\EncryptionException;
/**
* Provides 'crypt://' stream wrapper protocol.
@@ -79,7 +82,7 @@ class Stream {
private $rootView; // a fsview object set to '/'
/**
- * @var \OCA\Encryption\Session
+ * @var \OCA\Files_Encryption\Session
*/
private $session;
private $privateKey;
@@ -90,6 +93,7 @@ class Stream {
* @param int $options
* @param string $opened_path
* @return bool
+ * @throw \OCA\Files_Encryption\Exception\EncryptionException
*/
public function stream_open($path, $mode, $options, &$opened_path) {
@@ -103,9 +107,13 @@ class Stream {
$this->rootView = new \OC\Files\View('/');
}
- $this->session = new \OCA\Encryption\Session($this->rootView);
+ $this->session = new Session($this->rootView);
$this->privateKey = $this->session->getPrivateKey();
+ if ($this->privateKey === false) {
+ throw new EncryptionException('Session does not contain a private key, maybe your login password changed?',
+ EncryptionException::PRIVATE_KEY_MISSING);
+ }
$normalizedPath = \OC\Files\Filesystem::normalizePath(str_replace('crypt://', '', $path));
if ($originalFile = Helper::getPathFromTmpFile($normalizedPath)) {
@@ -155,7 +163,7 @@ class Stream {
if($this->privateKey === false) {
// if private key is not valid redirect user to a error page
- \OCA\Encryption\Helper::redirectToErrorPage($this->session);
+ Helper::redirectToErrorPage($this->session);
}
$this->size = $this->rootView->filesize($this->rawPath);
@@ -244,7 +252,7 @@ class Stream {
/**
* @param int $count
* @return bool|string
- * @throws \OCA\Encryption\Exceptions\EncryptionException
+ * @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
public function stream_read($count) {
@@ -252,7 +260,7 @@ class Stream {
if ($count !== Crypt::BLOCKSIZE) {
\OCP\Util::writeLog('Encryption library', 'PHP "bug" 21641 no longer holds, decryption system requires refactoring', \OCP\Util::FATAL);
- throw new \OCA\Encryption\Exceptions\EncryptionException('expected a blog size of 8192 byte', 20);
+ throw new EncryptionException('expected a blog size of 8192 byte', EncryptionException::UNEXPECTED_BLOG_SIZE);
}
// Get the data from the file handle
@@ -322,7 +330,7 @@ class Stream {
// Fetch and decrypt keyfile
// Fetch existing keyfile
- $util = new \OCA\Encryption\Util($this->rootView, $this->userId);
+ $util = new Util($this->rootView, $this->userId);
$this->encKeyfile = Keymanager::getFileKey($this->rootView, $util, $this->relPath);
// If a keyfile already exists
@@ -333,13 +341,13 @@ class Stream {
// if there is no valid private key return false
if ($this->privateKey === false) {
// if private key is not valid redirect user to a error page
- \OCA\Encryption\Helper::redirectToErrorPage($this->session);
+ Helper::redirectToErrorPage($this->session);
return false;
}
if ($shareKey === false) {
// if no share key is available redirect user to a error page
- \OCA\Encryption\Helper::redirectToErrorPage($this->session, \OCA\Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND);
+ Helper::redirectToErrorPage($this->session, Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND);
return false;
}
@@ -360,14 +368,14 @@ class Stream {
/**
* write header at beginning of encrypted file
*
- * @throws Exceptions\EncryptionException
+ * @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
private function writeHeader() {
$header = Crypt::generateHeader();
if (strlen($header) > Crypt::BLOCKSIZE) {
- throw new Exceptions\EncryptionException('max header size exceeded', 30);
+ throw new EncryptionException('max header size exceeded', EncryptionException::ENCRYPTION_HEADER_TO_LARGE);
}
$paddedHeader = str_pad($header, Crypt::BLOCKSIZE, self::PADDING_CHAR, STR_PAD_RIGHT);
@@ -573,6 +581,7 @@ class Stream {
\OC_FileProxy::$enabled = false;
if ($this->rootView->file_exists($this->rawPath) && $this->size === 0) {
+ fclose($this->handle);
$this->rootView->unlink($this->rawPath);
}
@@ -581,7 +590,7 @@ class Stream {
}
// if private key is not valid redirect user to a error page
- \OCA\Encryption\Helper::redirectToErrorPage($this->session);
+ Helper::redirectToErrorPage($this->session);
}
if (
@@ -632,13 +641,17 @@ class Stream {
$path = Helper::stripPartialFileExtension($this->rawPath);
$fileInfo = array(
+ 'mimetype' => $this->rootView->getMimeType($this->rawPath),
'encrypted' => true,
- 'size' => $this->size,
'unencrypted_size' => $this->unencryptedSize,
);
- // set fileinfo
- $this->rootView->putFileInfo($path, $fileInfo);
+ // if we write a part file we also store the unencrypted size for
+ // the part file so that it can be re-used later
+ $this->rootView->putFileInfo($this->rawPath, $fileInfo);
+ if ($path !== $this->rawPath) {
+ $this->rootView->putFileInfo($path, $fileInfo);
+ }
}
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index ce5e8c8b54c..4aaf7aa2571 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -2,10 +2,11 @@
/**
* ownCloud
*
- * @author Sam Tuke, Frank Karlitschek, Bjoern Schiessle
- * @copyright 2012 Sam Tuke <samtuke@owncloud.com>,
- * Frank Karlitschek <frank@owncloud.org>,
- * Bjoern Schiessle <schiessle@owncloud.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Sam Tuke <samtuke@owncloud.com>,
+ * @author Frank Karlitschek <frank@owncloud.org>,
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -22,7 +23,7 @@
*
*/
-namespace OCA\Encryption;
+namespace OCA\Files_Encryption;
/**
* Class for utilities relating to encrypted file storage system
@@ -44,10 +45,10 @@ class Util {
private $client; // Client side encryption mode flag
private $publicKeyDir; // Dir containing all public user keys
private $encryptionDir; // Dir containing user's files_encryption
- private $keyfilesPath; // Dir containing user's keyfiles
- private $shareKeysPath; // Dir containing env keys for shared files
+ private $keysPath; // Dir containing all file related encryption keys
private $publicKeyPath; // Path to user's public key
private $privateKeyPath; // Path to user's private key
+ private $userFilesDir;
private $publicShareKeyId;
private $recoveryKeyId;
private $isPublic;
@@ -72,18 +73,17 @@ class Util {
$this->fileFolderName = 'files';
$this->userFilesDir =
'/' . $userId . '/' . $this->fileFolderName; // TODO: Does this need to be user configurable?
- $this->publicKeyDir = '/' . 'public-keys';
+ $this->publicKeyDir = Keymanager::getPublicKeyPath();
$this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption';
- $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles';
- $this->shareKeysPath = $this->encryptionDir . '/' . 'share-keys';
+ $this->keysPath = $this->encryptionDir . '/' . 'keys';
$this->publicKeyPath =
- $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
+ $this->publicKeyDir . '/' . $this->userId . '.publicKey'; // e.g. data/public-keys/admin.publicKey
$this->privateKeyPath =
- $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
+ $this->encryptionDir . '/' . $this->userId . '.privateKey'; // e.g. data/admin/admin.privateKey
// make sure that the owners home is mounted
\OC\Files\Filesystem::initMountPoints($userId);
- if (\OCA\Encryption\Helper::isPublicAccess()) {
+ if (Helper::isPublicAccess()) {
$this->keyId = $this->publicShareKeyId;
$this->isPublic = true;
} else {
@@ -99,8 +99,7 @@ class Util {
if (
!$this->view->file_exists($this->encryptionDir)
- or !$this->view->file_exists($this->keyfilesPath)
- or !$this->view->file_exists($this->shareKeysPath)
+ or !$this->view->file_exists($this->keysPath)
or !$this->view->file_exists($this->publicKeyPath)
or !$this->view->file_exists($this->privateKeyPath)
) {
@@ -125,6 +124,18 @@ class Util {
}
/**
+ * create a new public/private key pair for the user
+ *
+ * @param string $password password for the private key
+ */
+ public function replaceUserKeys($password) {
+ $this->backupAllKeys('password_reset');
+ $this->view->unlink($this->publicKeyPath);
+ $this->view->unlink($this->privateKeyPath);
+ $this->setupServerSide($password);
+ }
+
+ /**
* Sets up user folders and keys for serverside encryption
*
* @param string $passphrase to encrypt server-stored private key with
@@ -137,8 +148,7 @@ class Util {
$this->userDir,
$this->publicKeyDir,
$this->encryptionDir,
- $this->keyfilesPath,
- $this->shareKeysPath
+ $this->keysPath
);
// Check / create all necessary dirs
@@ -215,7 +225,7 @@ class Util {
*/
public function recoveryEnabledForUser() {
- $recoveryMode = \OC_Preferences::getValue($this->userId, 'files_encryption', 'recovery_enabled', '0');
+ $recoveryMode = \OC::$server->getConfig()->getUserValue($this->userId, 'files_encryption', 'recovery_enabled', '0');
return ($recoveryMode === '1') ? true : false;
@@ -229,7 +239,12 @@ class Util {
public function setRecoveryForUser($enabled) {
$value = $enabled ? '1' : '0';
- return \OC_Preferences::setValue($this->userId, 'files_encryption', 'recovery_enabled', $value);
+ try {
+ \OC::$server->getConfig()->setUserValue($this->userId, 'files_encryption', 'recovery_enabled', $value);
+ return true;
+ } catch(\OCP\PreConditionNotMetException $e) {
+ return false;
+ }
}
@@ -262,7 +277,7 @@ class Util {
if ($file !== "." && $file !== "..") {
$filePath = $directory . '/' . $this->view->getRelativePath('/' . $file);
- $relPath = \OCA\Encryption\Helper::stripUserFilesPath($filePath);
+ $relPath = Helper::stripUserFilesPath($filePath);
// If the path is a directory, search
// its contents
@@ -436,13 +451,13 @@ class Util {
}
}
fclose($stream);
- $relPath = \OCA\Encryption\Helper::stripUserFilesPath($path);
+ $relPath = Helper::stripUserFilesPath($path);
$shareKey = Keymanager::getShareKey($this->view, $this->keyId, $this, $relPath);
if($shareKey===false) {
\OC_FileProxy::$enabled = $proxyStatus;
return $result;
}
- $session = new \OCA\Encryption\Session($this->view);
+ $session = new Session($this->view);
$privateKey = $session->getPrivateKey();
$plainKeyfile = $this->decryptKeyfile($relPath, $privateKey);
$plainKey = Crypt::multiKeyDecrypt($plainKeyfile, $shareKey, $privateKey);
@@ -715,8 +730,8 @@ class Util {
}
if ($successful) {
- $this->view->rename($this->keyfilesPath, $this->keyfilesPath . '.backup');
- $this->view->rename($this->shareKeysPath, $this->shareKeysPath . '.backup');
+ $this->backupAllKeys('decryptAll');
+ $this->view->deleteAll($this->keysPath);
}
\OC_FileProxy::$enabled = true;
@@ -833,9 +848,9 @@ class Util {
break;
- case 'keyfilesPath':
+ case 'keysPath':
- return $this->keyfilesPath;
+ return $this->keysPath;
break;
@@ -857,6 +872,25 @@ class Util {
}
/**
+ * Returns whether the given user is ready for encryption.
+ * Also returns true if the given user is the public user
+ * or the recovery key user.
+ *
+ * @param string $user user to check
+ *
+ * @return boolean true if the user is ready, false otherwise
+ */
+ private function isUserReady($user) {
+ if ($user === $this->publicShareKeyId
+ || $user === $this->recoveryKeyId
+ ) {
+ return true;
+ }
+ $util = new Util($this->view, $user);
+ return $util->ready();
+ }
+
+ /**
* Filter an array of UIDs to return only ones ready for sharing
* @param array $unfilteredUsers users to be checked for sharing readiness
* @return array as multi-dimensional array. keys: ready, unready
@@ -868,16 +902,9 @@ class Util {
// Loop through users and create array of UIDs that need new keyfiles
foreach ($unfilteredUsers as $user) {
-
- $util = new Util($this->view, $user);
-
// Check that the user is encryption capable, or is the
- // public system user 'ownCloud' (for public shares)
- if (
- $user === $this->publicShareKeyId
- or $user === $this->recoveryKeyId
- or $util->ready()
- ) {
+ // public system user (for public shares)
+ if ($this->isUserReady($user)) {
// Construct array of ready UIDs for Keymanager{}
$readyIds[] = $user;
@@ -960,7 +987,7 @@ class Util {
$plainKeyfile = $this->decryptKeyfile($filePath, $privateKey);
// Re-enc keyfile to (additional) sharekeys
$multiEncKey = Crypt::multiKeyEncrypt($plainKeyfile, $userPubKeys);
- } catch (Exceptions\EncryptionException $e) {
+ } catch (Exception\EncryptionException $e) {
$msg = 'set shareFileKeyFailed (code: ' . $e->getCode() . '): ' . $e->getMessage();
\OCP\Util::writeLog('files_encryption', $msg, \OCP\Util::FATAL);
return false;
@@ -1013,7 +1040,7 @@ class Util {
// Make sure that a share key is generated for the owner too
list($owner, $ownerPath) = $this->getUidAndFilename($filePath);
- $ownerPath = \OCA\Encryption\Helper::stripPartialFileExtension($ownerPath);
+ $ownerPath = Helper::stripPartialFileExtension($ownerPath);
// always add owner to the list of users with access to the file
$userIds = array($owner);
@@ -1080,7 +1107,12 @@ class Util {
// convert to string if preCondition is set
$preCondition = ($preCondition === null) ? null : (string)$preCondition;
- return \OC_Preferences::setValue($this->userId, 'files_encryption', 'migration_status', (string)$status, $preCondition);
+ try {
+ \OC::$server->getConfig()->setUserValue($this->userId, 'files_encryption', 'migration_status', (string)$status, $preCondition);
+ return true;
+ } catch(\OCP\PreConditionNotMetException $e) {
+ return false;
+ }
}
@@ -1132,9 +1164,9 @@ class Util {
$migrationStatus = false;
if (\OCP\User::userExists($this->userId)) {
- $migrationStatus = \OC_Preferences::getValue($this->userId, 'files_encryption', 'migration_status');
+ $migrationStatus = \OC::$server->getConfig()->getUserValue($this->userId, 'files_encryption', 'migration_status', null);
if ($migrationStatus === null) {
- \OC_Preferences::setValue($this->userId, 'files_encryption', 'migration_status', (string)self::MIGRATION_OPEN);
+ \OC::$server->getConfig()->setUserValue($this->userId, 'files_encryption', 'migration_status', (string)self::MIGRATION_OPEN);
$migrationStatus = self::MIGRATION_OPEN;
}
}
@@ -1175,13 +1207,7 @@ class Util {
// handle public access
if ($this->isPublic) {
- $filename = $path;
- $fileOwnerUid = $this->userId;
-
- return array(
- $fileOwnerUid,
- $filename
- );
+ return array($this->userId, $path);
} else {
// Check that UID is valid
@@ -1341,22 +1367,14 @@ class Util {
public function checkRecoveryPassword($password) {
$result = false;
- $pathKey = '/owncloud_private_key/' . $this->recoveryKeyId . ".private.key";
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $recoveryKey = $this->view->file_get_contents($pathKey);
+ $recoveryKey = Keymanager::getPrivateSystemKey($this->recoveryKeyId);
$decryptedRecoveryKey = Crypt::decryptPrivateKey($recoveryKey, $password);
if ($decryptedRecoveryKey) {
$result = true;
}
- \OC_FileProxy::$enabled = $proxyStatus;
-
-
return $result;
}
@@ -1371,19 +1389,17 @@ class Util {
* add recovery key to all encrypted files
*/
public function addRecoveryKeys($path = '/') {
- $dirContent = $this->view->getDirectoryContent($this->keyfilesPath . $path);
+ $dirContent = $this->view->getDirectoryContent($this->keysPath . '/' . $path);
foreach ($dirContent as $item) {
// get relative path from files_encryption/keyfiles/
- $filePath = substr($item['path'], strlen('files_encryption/keyfiles'));
- if ($item['type'] === 'dir') {
+ $filePath = substr($item['path'], strlen('files_encryption/keys'));
+ if ($this->view->is_dir($this->userFilesDir . '/' . $filePath)) {
$this->addRecoveryKeys($filePath . '/');
} else {
- $session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
+ $session = new Session(new \OC\Files\View('/'));
$sharingEnabled = \OCP\Share::isEnabled();
- // remove '.key' extension from path e.g. 'file.txt.key' to 'file.txt'
- $file = substr($filePath, 0, -4);
- $usersSharing = $this->getSharingUsersArray($sharingEnabled, $file);
- $this->setSharedFileKeyfiles($session, $usersSharing, $file);
+ $usersSharing = $this->getSharingUsersArray($sharingEnabled, $filePath);
+ $this->setSharedFileKeyfiles($session, $usersSharing, $filePath);
}
}
}
@@ -1392,16 +1408,14 @@ class Util {
* remove recovery key to all encrypted files
*/
public function removeRecoveryKeys($path = '/') {
- $dirContent = $this->view->getDirectoryContent($this->keyfilesPath . $path);
+ $dirContent = $this->view->getDirectoryContent($this->keysPath . '/' . $path);
foreach ($dirContent as $item) {
// get relative path from files_encryption/keyfiles
- $filePath = substr($item['path'], strlen('files_encryption/keyfiles'));
- if ($item['type'] === 'dir') {
+ $filePath = substr($item['path'], strlen('files_encryption/keys'));
+ if ($this->view->is_dir($this->userFilesDir . '/' . $filePath)) {
$this->removeRecoveryKeys($filePath . '/');
} else {
- // remove '.key' extension from path e.g. 'file.txt.key' to 'file.txt'
- $file = substr($filePath, 0, -4);
- $this->view->unlink($this->shareKeysPath . '/' . $file . '.' . $this->recoveryKeyId . '.shareKey');
+ $this->view->unlink($this->keysPath . '/' . $filePath . '/' . $this->recoveryKeyId . '.shareKey');
}
}
}
@@ -1431,27 +1445,17 @@ class Util {
}
$filteredUids = $this->filterShareReadyUsers($userIds);
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
//decrypt file key
- $encKeyfile = $this->view->file_get_contents($this->keyfilesPath . $file . ".key");
- $shareKey = $this->view->file_get_contents(
- $this->shareKeysPath . $file . "." . $this->recoveryKeyId . ".shareKey");
+ $encKeyfile = Keymanager::getFileKey($this->view, $this, $file);
+ $shareKey = Keymanager::getShareKey($this->view, $this->recoveryKeyId, $this, $file);
$plainKeyfile = Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey);
// encrypt file key again to all users, this time with the new public key for the recovered use
$userPubKeys = Keymanager::getPublicKeys($this->view, $filteredUids['ready']);
$multiEncKey = Crypt::multiKeyEncrypt($plainKeyfile, $userPubKeys);
- // write new keys to filesystem TDOO!
- $this->view->file_put_contents($this->keyfilesPath . $file . '.key', $multiEncKey['data']);
- foreach ($multiEncKey['keys'] as $userId => $shareKey) {
- $shareKeyPath = $this->shareKeysPath . $file . '.' . $userId . '.shareKey';
- $this->view->file_put_contents($shareKeyPath, $shareKey);
- }
+ Keymanager::setFileKey($this->view, $this, $file, $multiEncKey['data']);
+ Keymanager::setShareKeys($this->view, $this, $file, $multiEncKey['keys']);
- // Return proxy to original status
- \OC_FileProxy::$enabled = $proxyStatus;
}
/**
@@ -1460,16 +1464,14 @@ class Util {
* @param string $privateKey private recovery key which is used to decrypt the files
*/
private function recoverAllFiles($path, $privateKey) {
- $dirContent = $this->view->getDirectoryContent($this->keyfilesPath . $path);
+ $dirContent = $this->view->getDirectoryContent($this->keysPath . '/' . $path);
foreach ($dirContent as $item) {
// get relative path from files_encryption/keyfiles
- $filePath = substr($item['path'], strlen('files_encryption/keyfiles'));
- if ($item['type'] === 'dir') {
+ $filePath = substr($item['path'], strlen('files_encryption/keys'));
+ if ($this->view->is_dir($this->userFilesDir . '/' . $filePath)) {
$this->recoverAllFiles($filePath . '/', $privateKey);
} else {
- // remove '.key' extension from path e.g. 'file.txt.key' to 'file.txt'
- $file = substr($filePath, 0, -4);
- $this->recoverFile($file, $privateKey);
+ $this->recoverFile($filePath, $privateKey);
}
}
}
@@ -1480,16 +1482,9 @@ class Util {
*/
public function recoverUsersFiles($recoveryPassword) {
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $encryptedKey = $this->view->file_get_contents(
- '/owncloud_private_key/' . $this->recoveryKeyId . '.private.key');
+ $encryptedKey = Keymanager::getPrivateSystemKey( $this->recoveryKeyId);
$privateKey = Crypt::decryptPrivateKey($encryptedKey, $recoveryPassword);
- \OC_FileProxy::$enabled = $proxyStatus;
-
$this->recoverAllFiles('/', $privateKey);
}
@@ -1503,10 +1498,9 @@ class Util {
$backupDir = $this->encryptionDir . '/backup.';
$backupDir .= ($purpose === '') ? date("Y-m-d_H-i-s") . '/' : $purpose . '.' . date("Y-m-d_H-i-s") . '/';
$this->view->mkdir($backupDir);
- $this->view->copy($this->shareKeysPath, $backupDir . 'share-keys/');
- $this->view->copy($this->keyfilesPath, $backupDir . 'keyfiles/');
- $this->view->copy($this->privateKeyPath, $backupDir . $this->userId . '.private.key');
- $this->view->copy($this->publicKeyPath, $backupDir . $this->userId . '.public.key');
+ $this->view->copy($this->keysPath, $backupDir . 'keys/');
+ $this->view->copy($this->privateKeyPath, $backupDir . $this->userId . '.privateKey');
+ $this->view->copy($this->publicKeyPath, $backupDir . $this->userId . '.publicKey');
}
/**
@@ -1559,14 +1553,17 @@ class Util {
*/
public function initEncryption($params) {
- $session = new \OCA\Encryption\Session($this->view);
+ $session = new Session($this->view);
// we tried to initialize the encryption app for this session
- $session->setInitialized(\OCA\Encryption\Session::INIT_EXECUTED);
+ $session->setInitialized(Session::INIT_EXECUTED);
$encryptedKey = Keymanager::getPrivateKey($this->view, $params['uid']);
- $privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']);
+ $privateKey = false;
+ if ($encryptedKey) {
+ $privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']);
+ }
if ($privateKey === false) {
\OCP\Util::writeLog('Encryption library', 'Private key for user "' . $params['uid']
@@ -1575,7 +1572,7 @@ class Util {
}
$session->setPrivateKey($privateKey);
- $session->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL);
+ $session->setInitialized(Session::INIT_SUCCESSFUL);
return $session;
}
@@ -1584,7 +1581,7 @@ class Util {
* remove encryption related keys from the session
*/
public function closeEncryptionSession() {
- $session = new \OCA\Encryption\Session($this->view);
+ $session = new Session($this->view);
$session->closeSession();
}
diff --git a/apps/files_encryption/settings-admin.php b/apps/files_encryption/settings-admin.php
index 496a7cffb50..0f5d56a3734 100644
--- a/apps/files_encryption/settings-admin.php
+++ b/apps/files_encryption/settings-admin.php
@@ -12,7 +12,7 @@ $tmpl = new OCP\Template('files_encryption', 'settings-admin');
// Check if an adminRecovery account is enabled for recovering files after lost pwd
$recoveryAdminEnabled = \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryAdminEnabled', '0');
-$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
+$session = new \OCA\Files_Encryption\Session(new \OC\Files\View('/'));
$initStatus = $session->getInitialized();
$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled);
diff --git a/apps/files_encryption/settings-personal.php b/apps/files_encryption/settings-personal.php
index e9875518f67..834bac611ad 100644
--- a/apps/files_encryption/settings-personal.php
+++ b/apps/files_encryption/settings-personal.php
@@ -13,8 +13,8 @@ $tmpl = new OCP\Template('files_encryption', 'settings-personal');
$user = \OCP\USER::getUser();
$view = new \OC\Files\View('/');
-$util = new \OCA\Encryption\Util($view, $user);
-$session = new \OCA\Encryption\Session($view);
+$util = new \OCA\Files_Encryption\Util($view, $user);
+$session = new \OCA\Files_Encryption\Session($view);
$privateKeySet = $session->getPrivateKey() !== false;
// did we tried to initialize the keys for this session?
@@ -28,7 +28,6 @@ $result = false;
if ($recoveryAdminEnabled || !$privateKeySet) {
\OCP\Util::addscript('files_encryption', 'settings-personal');
- \OCP\Util::addScript('settings', 'personal');
$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled);
$tmpl->assign('recoveryEnabledForUser', $recoveryEnabledForUser);
diff --git a/apps/files_encryption/templates/invalid_private_key.php b/apps/files_encryption/templates/invalid_private_key.php
index b275b9c428c..b148e65b199 100644
--- a/apps/files_encryption/templates/invalid_private_key.php
+++ b/apps/files_encryption/templates/invalid_private_key.php
@@ -4,7 +4,7 @@
<?php p($_['message']); ?>
<br/>
- <?php if($_['errorCode'] === \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR): ?>
+ <?php if($_['errorCode'] === \OCA\Files_Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR): ?>
<?php p($l->t('Go directly to your %spersonal settings%s.', array('<a href="'.$location.'">', '</a>'))); ?>
<?php endif; ?>
<br/>
diff --git a/apps/files_encryption/templates/settings-admin.php b/apps/files_encryption/templates/settings-admin.php
index d003f245bb3..4c1d724b6dd 100644
--- a/apps/files_encryption/templates/settings-admin.php
+++ b/apps/files_encryption/templates/settings-admin.php
@@ -1,7 +1,7 @@
<form id="encryption" class="section">
<h2><?php p($l->t('Encryption')); ?></h2>
- <?php if($_["initStatus"] === \OCA\Encryption\Session::NOT_INITIALIZED): ?>
+ <?php if($_["initStatus"] === \OCA\Files_Encryption\Session::NOT_INITIALIZED): ?>
<?php p($l->t("Encryption App is enabled but your keys are not initialized, please log-out and log-in again")); ?>
<?php else: ?>
<p id="encryptionSetRecoveryKey">
diff --git a/apps/files_encryption/templates/settings-personal.php b/apps/files_encryption/templates/settings-personal.php
index ce8cf6aec28..17123a154d9 100644
--- a/apps/files_encryption/templates/settings-personal.php
+++ b/apps/files_encryption/templates/settings-personal.php
@@ -1,11 +1,11 @@
<form id="encryption" class="section">
<h2><?php p( $l->t( 'Encryption' ) ); ?></h2>
- <?php if ( $_["initialized"] === \OCA\Encryption\Session::NOT_INITIALIZED ): ?>
+ <?php if ( $_["initialized"] === \OCA\Files_Encryption\Session::NOT_INITIALIZED ): ?>
<?php p($l->t("Encryption App is enabled but your keys are not initialized, please log-out and log-in again")); ?>
- <?php elseif ( $_["initialized"] === \OCA\Encryption\Session::INIT_EXECUTED ): ?>
+ <?php elseif ( $_["initialized"] === \OCA\Files_Encryption\Session::INIT_EXECUTED ): ?>
<p>
<a name="changePKPasswd" />
<label for="changePrivateKeyPasswd">
@@ -37,7 +37,7 @@
<span class="msg"></span>
</p>
- <?php elseif ( $_["recoveryEnabled"] && $_["privateKeySet"] && $_["initialized"] === \OCA\Encryption\Session::INIT_SUCCESSFUL ): ?>
+ <?php elseif ( $_["recoveryEnabled"] && $_["privateKeySet"] && $_["initialized"] === \OCA\Files_Encryption\Session::INIT_SUCCESSFUL ): ?>
<br />
<p id="userEnableRecovery">
<label for="userEnableRecovery"><?php p( $l->t( "Enable password recovery:" ) ); ?></label>
diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php
index 1b8291fea28..3165279c558 100755
--- a/apps/files_encryption/tests/crypt.php
+++ b/apps/files_encryption/tests/crypt.php
@@ -7,12 +7,12 @@
* See the COPYING-README file.
*/
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Crypt
+ * Class Crypt
*/
-class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
+class Crypt extends TestCase {
const TEST_ENCRYPTION_CRYPT_USER1 = "test-crypt-user1";
@@ -23,37 +23,30 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
public $dataUrl;
public $dataShort;
/**
- * @var OC\Files\View
+ * @var \OC\Files\View
*/
public $view;
public $legacyEncryptedData;
public $genPrivateKey;
public $genPublicKey;
- public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerUserHooks();
+ /** @var \OCP\IConfig */
+ private $config;
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_CRYPT_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
- $this->userId = \Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1;
- $this->pass = \Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1;
+ self::loginHelper(self::TEST_ENCRYPTION_CRYPT_USER1);
+ $this->userId = self::TEST_ENCRYPTION_CRYPT_USER1;
+ $this->pass = self::TEST_ENCRYPTION_CRYPT_USER1;
// set content for encrypting / decrypting in tests
$this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
@@ -62,72 +55,70 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->legacyData = __DIR__ . '/legacy-text.txt';
$this->legacyEncryptedData = __DIR__ . '/legacy-encrypted-text.txt';
$this->legacyEncryptedDataKey = __DIR__ . '/encryption.key';
- $this->randomKey = Encryption\Crypt::generateKey();
+ $this->randomKey = \OCA\Files_Encryption\Crypt::generateKey();
- $keypair = Encryption\Crypt::createKeypair();
+ $keypair = \OCA\Files_Encryption\Crypt::createKeypair();
$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];
$this->view = new \OC\Files\View('/');
// remember files_trashbin state
- $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $this->stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
+
+ $this->config = \OC::$server->getConfig();
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
} else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
$this->assertTrue(\OC_FileProxy::$enabled);
- \OCP\Config::deleteSystemValue('cipher');
+ $this->config->deleteSystemValue('cipher');
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
-
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_CRYPT_USER1);
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ parent::tearDownAfterClass();
}
/**
* @medium
*/
- function testGenerateKey() {
+ public function testGenerateKey() {
# TODO: use more accurate (larger) string length for test confirmation
- $key = Encryption\Crypt::generateKey();
+ $key = \OCA\Files_Encryption\Crypt::generateKey();
$this->assertTrue(strlen($key) > 16);
}
- function testDecryptPrivateKey() {
+ public function testDecryptPrivateKey() {
// test successful decrypt
- $crypted = Encryption\Crypt::symmetricEncryptFileContent($this->genPrivateKey, 'hat');
+ $crypted = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->genPrivateKey, 'hat');
- $header = Encryption\Crypt::generateHeader();
+ $header = \OCA\Files_Encryption\Crypt::generateHeader();
- $decrypted = Encryption\Crypt::decryptPrivateKey($header . $crypted, 'hat');
+ $decrypted = \OCA\Files_Encryption\Crypt::decryptPrivateKey($header . $crypted, 'hat');
$this->assertEquals($this->genPrivateKey, $decrypted);
//test private key decrypt with wrong password
- $wrongPasswd = Encryption\Crypt::decryptPrivateKey($crypted, 'hat2');
+ $wrongPasswd = \OCA\Files_Encryption\Crypt::decryptPrivateKey($crypted, 'hat2');
$this->assertEquals(false, $wrongPasswd);
@@ -137,16 +128,16 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testSymmetricEncryptFileContent() {
+ public function testSymmetricEncryptFileContent() {
# TODO: search in keyfile for actual content as IV will ensure this test always passes
- $crypted = Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat');
+ $crypted = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat');
$this->assertNotEquals($this->dataShort, $crypted);
- $decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat');
+ $decrypt = \OCA\Files_Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat');
$this->assertEquals($this->dataShort, $decrypt);
@@ -155,16 +146,16 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testSymmetricEncryptFileContentAes128() {
+ public function testSymmetricEncryptFileContentAes128() {
# TODO: search in keyfile for actual content as IV will ensure this test always passes
- $crypted = Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat', 'AES-128-CFB');
+ $crypted = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat', 'AES-128-CFB');
$this->assertNotEquals($this->dataShort, $crypted);
- $decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat', 'AES-128-CFB');
+ $decrypt = \OCA\Files_Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat', 'AES-128-CFB');
$this->assertEquals($this->dataShort, $decrypt);
@@ -173,9 +164,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testSymmetricStreamEncryptShortFileContent() {
+ public function testSymmetricStreamEncryptShortFileContent() {
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/'. $filename, $this->dataShort);
@@ -203,25 +194,23 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
// Teardown
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
}
/**
* @medium
*/
- function testSymmetricStreamEncryptShortFileContentAes128() {
+ public function testSymmetricStreamEncryptShortFileContentAes128() {
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
- \OCP\Config::setSystemValue('cipher', 'AES-128-CFB');
+ $this->config->setSystemValue('cipher', 'AES-128-CFB');
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/'. $filename, $this->dataShort);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
- \OCP\Config::deleteSystemValue('cipher');
+ $this->config->deleteSystemValue('cipher');
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -244,8 +233,6 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
// Teardown
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
}
/**
@@ -255,10 +242,10 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
* reassembly of its data
*/
- function testSymmetricStreamEncryptLongFileContent() {
+ public function testSymmetricStreamEncryptLongFileContent() {
// Generate a a random filename
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong . $this->dataLong);
@@ -285,11 +272,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
@@ -299,12 +282,12 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
* reassembly of its data
*/
- function testSymmetricStreamEncryptLongFileContentAes128() {
+ public function testSymmetricStreamEncryptLongFileContentAes128() {
// Generate a a random filename
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
- \OCP\Config::setSystemValue('cipher', 'AES-128-CFB');
+ $this->config->setSystemValue('cipher', 'AES-128-CFB');
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong . $this->dataLong);
@@ -316,7 +299,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- \OCP\Config::deleteSystemValue('cipher');
+ $this->config->deleteSystemValue('cipher');
// Get file contents without using any wrapper to get it's actual contents on disk
$retreivedCryptedFile = $this->view->file_get_contents($this->userId . '/files/' . $filename);
@@ -333,11 +316,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
@@ -347,17 +326,17 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
* reassembly of its data
*/
- function testStreamDecryptLongFileContentWithoutHeader() {
+ public function testStreamDecryptLongFileContentWithoutHeader() {
// Generate a a random filename
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
- \OCP\Config::setSystemValue('cipher', 'AES-128-CFB');
+ $this->config->setSystemValue('cipher', 'AES-128-CFB');
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong . $this->dataLong);
- \OCP\Config::deleteSystemValue('cipher');
+ $this->config->deleteSystemValue('cipher');
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -374,7 +353,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
// remove the header to check if we can also decrypt old files without a header,
// this files should fall back to AES-128
- $cryptedWithoutHeader = substr($retreivedCryptedFile, Encryption\Crypt::BLOCKSIZE);
+ $cryptedWithoutHeader = substr($retreivedCryptedFile, \OCA\Files_Encryption\Crypt::BLOCKSIZE);
$this->view->file_put_contents($this->userId . '/files/' . $filename, $cryptedWithoutHeader);
// Re-enable proxy - our work is done
@@ -385,36 +364,32 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
* @medium
*/
- function testIsEncryptedContent() {
+ public function testIsEncryptedContent() {
- $this->assertFalse(Encryption\Crypt::isCatfileContent($this->dataUrl));
+ $this->assertFalse(\OCA\Files_Encryption\Crypt::isCatfileContent($this->dataUrl));
- $this->assertFalse(Encryption\Crypt::isCatfileContent($this->legacyEncryptedData));
+ $this->assertFalse(\OCA\Files_Encryption\Crypt::isCatfileContent($this->legacyEncryptedData));
- $keyfileContent = Encryption\Crypt::symmetricEncryptFileContent($this->dataUrl, 'hat', 'AES-128-CFB');
+ $keyfileContent = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->dataUrl, 'hat', 'AES-128-CFB');
- $this->assertTrue(Encryption\Crypt::isCatfileContent($keyfileContent));
+ $this->assertTrue(\OCA\Files_Encryption\Crypt::isCatfileContent($keyfileContent));
}
/**
* @large
*/
- function testMultiKeyEncrypt() {
+ public function testMultiKeyEncrypt() {
# TODO: search in keyfile for actual content as IV will ensure this test always passes
- $pair1 = Encryption\Crypt::createKeypair();
+ $pair1 = \OCA\Files_Encryption\Crypt::createKeypair();
$this->assertEquals(2, count($pair1));
@@ -423,12 +398,12 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertTrue(strlen($pair1['privateKey']) > 1);
- $crypted = Encryption\Crypt::multiKeyEncrypt($this->dataShort, array($pair1['publicKey']));
+ $crypted = \OCA\Files_Encryption\Crypt::multiKeyEncrypt($this->dataShort, array($pair1['publicKey']));
$this->assertNotEquals($this->dataShort, $crypted['data']);
- $decrypt = Encryption\Crypt::multiKeyDecrypt($crypted['data'], $crypted['keys'][0], $pair1['privateKey']);
+ $decrypt = \OCA\Files_Encryption\Crypt::multiKeyDecrypt($crypted['data'], $crypted['keys'][0], $pair1['privateKey']);
$this->assertEquals($this->dataShort, $decrypt);
@@ -437,9 +412,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testRenameFile() {
+ public function testRenameFile() {
- $filename = 'tmp-' . uniqid();
+ $filename = 'tmp-' . $this->getUniqueID();
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
@@ -452,7 +427,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong, $decrypt);
- $newFilename = 'tmp-new-' . uniqid();
+ $newFilename = 'tmp-new-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
$view->rename($filename, $newFilename);
@@ -468,9 +443,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testMoveFileIntoFolder() {
+ public function testMoveFileIntoFolder() {
- $filename = 'tmp-' . uniqid();
+ $filename = 'tmp-' . $this->getUniqueID();
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
@@ -483,8 +458,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong, $decrypt);
- $newFolder = '/newfolder' . uniqid();
- $newFilename = 'tmp-new-' . uniqid();
+ $newFolder = '/newfolder' . $this->getUniqueID();
+ $newFilename = 'tmp-new-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
$view->mkdir($newFolder);
$view->rename($filename, $newFolder . '/' . $newFilename);
@@ -501,12 +476,12 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testMoveFolder() {
+ public function testMoveFolder() {
$view = new \OC\Files\View('/' . $this->userId . '/files');
- $filename = '/tmp-' . uniqid();
- $folder = '/folder' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
+ $folder = '/folder' . $this->getUniqueID();
$view->mkdir($folder);
@@ -521,7 +496,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong, $decrypt);
- $newFolder = '/newfolder/subfolder' . uniqid();
+ $newFolder = '/newfolder/subfolder' . $this->getUniqueID();
$view->mkdir('/newfolder');
$view->rename($folder, $newFolder);
@@ -539,8 +514,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testChangePassphrase() {
- $filename = 'tmp-' . uniqid();
+ public function testChangePassphrase() {
+ $filename = 'tmp-' . $this->getUniqueID();
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
@@ -559,7 +534,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
// relogin
$params['uid'] = $this->userId;
$params['password'] = 'test';
- OCA\Encryption\Hooks::login($params);
+ \OCA\Files_Encryption\Hooks::login($params);
// Get file decrypted contents
$newDecrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);
@@ -576,9 +551,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testViewFilePutAndGetContents() {
+ public function testViewFilePutAndGetContents() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -610,8 +585,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @large
*/
- function testTouchExistingFile() {
- $filename = '/tmp-' . uniqid();
+ public function testTouchExistingFile() {
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -634,8 +609,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testTouchFile() {
- $filename = '/tmp-' . uniqid();
+ public function testTouchFile() {
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
$view->touch($filename);
@@ -658,8 +633,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testFopenFile() {
- $filename = '/tmp-' . uniqid();
+ public function testFopenFile() {
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -676,6 +651,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $decrypt);
// tear down
+ fclose($handle);
$view->unlink($filename);
}
diff --git a/apps/files_encryption/tests/helper.php b/apps/files_encryption/tests/helper.php
index ed543bf89f6..bf86860125a 100644
--- a/apps/files_encryption/tests/helper.php
+++ b/apps/files_encryption/tests/helper.php
@@ -6,39 +6,39 @@
* See the COPYING-README file.
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Helper
+ * Class Helper
*/
-class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
+class Helper extends TestCase {
const TEST_ENCRYPTION_HELPER_USER1 = "test-helper-user1";
const TEST_ENCRYPTION_HELPER_USER2 = "test-helper-user2";
- public function setUp() {
+ protected function setUpUsers() {
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER2, true);
+ self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1, true);
}
- public function tearDown() {
+ protected function cleanUpUsers() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
- \OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_HELPER_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_HELPER_USER2);
}
- public static function tearDownAfterClass() {
+ public static function setupHooks() {
+ // Filesystem related hooks
+ \OCA\Files_Encryption\Helper::registerFilesystemHooks();
- \OC_Hook::clear();
+ // clear and register hooks
\OC_FileProxy::clearProxies();
+ \OC_FileProxy::register(new \OCA\Files_Encryption\Proxy());
+ }
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ public static function tearDownAfterClass() {
+ parent::tearDownAfterClass();
}
/**
@@ -49,13 +49,13 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
$partFilename = 'testfile.txt.part';
$filename = 'testfile.txt';
- $this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename));
+ $this->assertTrue(\OCA\Files_Encryption\Helper::isPartialFilePath($partFilename));
- $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename));
+ $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($partFilename));
- $this->assertFalse(Encryption\Helper::isPartialFilePath($filename));
+ $this->assertFalse(\OCA\Files_Encryption\Helper::isPartialFilePath($filename));
- $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename));
+ $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($filename));
}
@@ -67,13 +67,13 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
$partFilename = 'testfile.txt.ocTransferId643653835.part';
$filename = 'testfile.txt';
- $this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename));
+ $this->assertTrue(\OCA\Files_Encryption\Helper::isPartialFilePath($partFilename));
- $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename));
+ $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($partFilename));
- $this->assertFalse(Encryption\Helper::isPartialFilePath($filename));
+ $this->assertFalse(\OCA\Files_Encryption\Helper::isPartialFilePath($filename));
- $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename));
+ $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($filename));
}
function testGetPathToRealFile() {
@@ -85,85 +85,36 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
$versionPath = "/user/files_versions/foo/bar/test.txt.v456756835";
$cachePath = "/user/cache/transferid636483/foo/bar/test.txt";
- $this->assertEquals($relativePath, Encryption\Helper::getPathToRealFile($versionPath));
- $this->assertEquals($relativePath, Encryption\Helper::getPathToRealFile($cachePath));
+ $this->assertEquals($relativePath, \OCA\Files_Encryption\Helper::getPathToRealFile($versionPath));
+ $this->assertEquals($relativePath, \OCA\Files_Encryption\Helper::getPathToRealFile($cachePath));
}
function testGetUser() {
+ self::setUpUsers();
$path1 = "/" . self::TEST_ENCRYPTION_HELPER_USER1 . "/files/foo/bar.txt";
$path2 = "/" . self::TEST_ENCRYPTION_HELPER_USER1 . "/cache/foo/bar.txt";
$path3 = "/" . self::TEST_ENCRYPTION_HELPER_USER2 . "/thumbnails/foo";
$path4 ="/" . "/" . self::TEST_ENCRYPTION_HELPER_USER1;
- \Test_Encryption_Util::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1);
// if we are logged-in every path should return the currently logged-in user
- $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path3));
+ $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path3));
// now log out
- \Test_Encryption_Util::logoutHelper();
+ self::logoutHelper();
// now we should only get the user from /user/files and user/cache paths
- $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path1));
- $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path2));
+ $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path1));
+ $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path2));
- $this->assertFalse(Encryption\Helper::getUser($path3));
- $this->assertFalse(Encryption\Helper::getUser($path4));
+ $this->assertFalse(\OCA\Files_Encryption\Helper::getUser($path3));
+ $this->assertFalse(\OCA\Files_Encryption\Helper::getUser($path4));
// Log-in again
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
- }
-
- function userNamesProvider() {
- return array(
- array('testuser' . uniqid()),
- array('user.name.with.dots'),
- );
- }
-
- /**
- * Tests whether share keys can be found
- *
- * @dataProvider userNamesProvider
- */
- function testFindShareKeys($userName) {
- // note: not using dataProvider as we want to make
- // sure that the correct keys are match and not any
- // other ones that might happen to have similar names
- \Test_Encryption_Util::setupHooks();
- \Test_Encryption_Util::loginHelper($userName, true);
- $testDir = 'testFindShareKeys' . uniqid() . '/';
- $baseDir = $userName . '/files/' . $testDir;
- $fileList = array(
- 't est.txt',
- 't est_.txt',
- 't est.doc.txt',
- 't est(.*).txt', // make sure the regexp is escaped
- 'multiple.dots.can.happen.too.txt',
- 't est.' . $userName . '.txt',
- 't est_.' . $userName . '.shareKey.txt',
- 'who would upload their.shareKey',
- 'user ones file.txt',
- 'user ones file.txt.backup',
- '.t est.txt'
- );
-
- $rootView = new \OC\Files\View('/');
- $rootView->mkdir($baseDir);
- foreach ($fileList as $fileName) {
- $rootView->file_put_contents($baseDir . $fileName, 'dummy');
- }
-
- $shareKeysDir = $userName . '/files_encryption/share-keys/' . $testDir;
- foreach ($fileList as $fileName) {
- // make sure that every file only gets its correct respective keys
- $result = Encryption\Helper::findShareKeys($baseDir . $fileName, $shareKeysDir . $fileName, $rootView);
- $this->assertEquals(
- array($shareKeysDir . $fileName . '.' . $userName . '.shareKey'),
- $result
- );
- }
+ self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1);
+ self::cleanUpUsers();
}
}
diff --git a/apps/files_encryption/tests/hooks.php b/apps/files_encryption/tests/hooks.php
index c2434c0f5f6..7c60024d637 100644
--- a/apps/files_encryption/tests/hooks.php
+++ b/apps/files_encryption/tests/hooks.php
@@ -20,24 +20,22 @@
*
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Hooks
+ * Class Hooks
* this class provide basic hook app tests
*/
-class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
+class Hooks extends TestCase {
const TEST_ENCRYPTION_HOOKS_USER1 = "test-encryption-hooks-user1.dot";
const TEST_ENCRYPTION_HOOKS_USER2 = "test-encryption-hooks-user2.dot";
- /**
- * @var \OC\Files\View
- */
+ /** @var \OC\Files\View */
public $user1View; // view on /data/user1/files
+ /** @var \OC\Files\View */
public $user2View; // view on /data/user2/files
+ /** @var \OC\Files\View */
public $rootView; // view on /data/user
public $data;
public $filename;
@@ -46,6 +44,8 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
private static $testFiles;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
// note: not using a data provider because these
// files all need to coexist to make sure the
// share keys are found properly (pattern matching)
@@ -63,62 +63,36 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
'.t est.txt'
);
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- \OC_Hook::clear('OC_Filesystem');
- \OC_Hook::clear('OC_User');
-
- // clear share hooks
- \OC_Hook::clear('OCP\\Share');
- \OC::registerShareHooks();
- \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // Sharing related hooks
- \OCA\Encryption\Helper::registerShareHooks();
-
- // clear and register proxies
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2, true);
+ self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER2, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);
// init filesystem view
- $this->user1View = new \OC\Files\View('/'. \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '/files');
- $this->user2View = new \OC\Files\View('/'. \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '/files');
+ $this->user1View = new \OC\Files\View('/'. self::TEST_ENCRYPTION_HOOKS_USER1 . '/files');
+ $this->user2View = new \OC\Files\View('/'. self::TEST_ENCRYPTION_HOOKS_USER2 . '/files');
$this->rootView = new \OC\Files\View('/');
// init short data
$this->data = 'hats';
- $this->filename = 'enc_hooks_tests-' . uniqid() . '.txt';
- $this->folder = 'enc_hooks_tests_folder-' . uniqid();
+ $this->filename = 'enc_hooks_tests-' . $this->getUniqueID() . '.txt';
+ $this->folder = 'enc_hooks_tests_folder-' . $this->getUniqueID();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
-
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_HOOKS_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_HOOKS_USER2);
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ parent::tearDownAfterClass();
}
function testDisableHook() {
@@ -130,7 +104,7 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
$this->assertTrue(is_array($row));
// disabling the app should delete all user specific settings
- \OCA\Encryption\Hooks::preDisable(array('app' => 'files_encryption'));
+ \OCA\Files_Encryption\Hooks::preDisable(array('app' => 'files_encryption'));
// check if user specific settings for the encryption app are really gone
$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*preferences` WHERE `appid` = ?');
@@ -140,14 +114,14 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// relogin user to initialize the encryption again
$user = \OCP\User::getUser();
- \Test_Encryption_Util::loginHelper($user);
+ self::loginHelper($user);
}
function testDeleteHooks() {
// remember files_trashbin state
- $stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we want to tests with app files_trashbin disabled
\OC_App::disable('files_trashbin');
@@ -159,25 +133,25 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
- \OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
+ self::logoutHelper();
+ self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER2);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER2);
$this->user2View->file_put_contents($this->filename, $this->data);
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// create a dummy file that we can delete something outside of data/user/files
@@ -189,10 +163,10 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// all keys should still exist
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// delete the file in data/user/files
@@ -201,34 +175,34 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// check if keys from user2 are really deleted
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// but user1 keys should still exist
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
if ($stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
}
else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
}
function testDeleteHooksForSharedFiles() {
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
+ self::logoutHelper();
+ self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);
// remember files_trashbin state
- $stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we want to tests with app files_trashbin disabled
\OC_App::disable('files_trashbin');
@@ -240,10 +214,10 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// get the file info from previous created file
$fileInfo = $this->user1View->getFileInfo($this->filename);
@@ -252,26 +226,26 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the file with user2
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_HOOKS_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_HOOKS_USER2, \OCP\Constants::PERMISSION_ALL);
// check if new share key exists
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
- \OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
+ self::logoutHelper();
+ self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER2);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER2);
// user2 update the shared file
$this->user2View->file_put_contents($this->filename, $this->data);
// keys should be stored at user1s dir, not in user2s
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// delete the Shared file from user1 in data/user2/files/Shared
$result = $this->user2View->unlink($this->filename);
@@ -280,25 +254,25 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// share key for user2 from user1s home should be gone, all other keys should still exists
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// cleanup
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
+ self::logoutHelper();
+ self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);
if ($stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
}
else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
}
@@ -323,12 +297,12 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
function doTestRenameHook($filename) {
// check if keys exists
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
// make subfolder and sub-subfolder
$this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -347,18 +321,18 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// keys should be renamed too
$this->assertFalse($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/fileKey'));
// cleanup
$this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -385,12 +359,12 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
function doTestCopyHook($filename) {
// check if keys exists
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
// make subfolder and sub-subfolder
$this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -406,18 +380,18 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// keys should be copied too
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/fileKey'));
// cleanup
$this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -433,35 +407,35 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
$view = new \OC\Files\View();
// set user password for the first time
- \OCA\Encryption\Hooks::postCreateUser(array('uid' => 'newUser', 'password' => 'newUserPassword'));
+ \OCA\Files_Encryption\Hooks::postCreateUser(array('uid' => 'newUser', 'password' => 'newUserPassword'));
- $this->assertTrue($view->file_exists('public-keys/newUser.public.key'));
- $this->assertTrue($view->file_exists('newUser/files_encryption/newUser.private.key'));
+ $this->assertTrue($view->file_exists(\OCA\Files_Encryption\Keymanager::getPublicKeyPath() . '/newUser.publicKey'));
+ $this->assertTrue($view->file_exists('newUser/files_encryption/newUser.privateKey'));
// check if we are able to decrypt the private key
- $encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
- $privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'newUserPassword');
+ $encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, 'newUser');
+ $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'newUserPassword');
$this->assertTrue(is_string($privateKey));
// change the password before the user logged-in for the first time,
// we can replace the encryption keys
- \OCA\Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged'));
+ \OCA\Files_Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged'));
- $encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
- $privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
+ $encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, 'newUser');
+ $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
$this->assertTrue(is_string($privateKey));
// now create a files folder to simulate a already used account
$view->mkdir('/newUser/files');
// change the password after the user logged in, now the password should not change
- \OCA\Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged2'));
+ \OCA\Files_Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged2'));
- $encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
- $privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged2');
+ $encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, 'newUser');
+ $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged2');
$this->assertFalse($privateKey);
- $privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
+ $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
$this->assertTrue(is_string($privateKey));
}
diff --git a/apps/files_encryption/tests/keymanager.php b/apps/files_encryption/tests/keymanager.php
index e2486ee93eb..0d17923664d 100644
--- a/apps/files_encryption/tests/keymanager.php
+++ b/apps/files_encryption/tests/keymanager.php
@@ -6,14 +6,12 @@
* See the COPYING-README file.
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Keymanager
+ * Class Keymanager
*/
-class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
+class Keymanager extends TestCase {
const TEST_USER = "test-keymanager-user.dot";
@@ -21,83 +19,87 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
public $pass;
public static $stateFilesTrashbin;
/**
- * @var OC\Files\View
+ * @var \OC\Files\View
*/
public $view;
public $randomKey;
public $dataShort;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ parent::setUpBeforeClass();
// disable file proxy by default
\OC_FileProxy::$enabled = false;
// remember files_trashbin state
- self::$stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ self::$stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
// create test user
- \OC_User::deleteUser(\Test_Encryption_Keymanager::TEST_USER);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Keymanager::TEST_USER, true);
+ \OC_User::deleteUser(self::TEST_USER);
+ parent::loginHelper(self::TEST_USER, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
// set content for encrypting / decrypting in tests
$this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
$this->dataShort = 'hats';
$this->dataUrl = __DIR__ . '/../lib/crypt.php';
$this->legacyData = __DIR__ . '/legacy-text.txt';
$this->legacyEncryptedData = __DIR__ . '/legacy-encrypted-text.txt';
- $this->randomKey = Encryption\Crypt::generateKey();
+ $this->randomKey = \OCA\Files_Encryption\Crypt::generateKey();
- $keypair = Encryption\Crypt::createKeypair();
+ $keypair = \OCA\Files_Encryption\Crypt::createKeypair();
$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];
$this->view = new \OC\Files\View('/');
- \Test_Encryption_Util::loginHelper(Test_Encryption_Keymanager::TEST_USER);
- $this->userId = \Test_Encryption_Keymanager::TEST_USER;
- $this->pass = \Test_Encryption_Keymanager::TEST_USER;
+ self::loginHelper(self::TEST_USER);
+ $this->userId = self::TEST_USER;
+ $this->pass = self::TEST_USER;
$userHome = \OC_User::getHome($this->userId);
$this->dataDir = str_replace('/' . $this->userId, '', $userHome);
}
function tearDown() {
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys');
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles');
+ $this->view->deleteAll('/' . self::TEST_USER . '/files_encryption/keys');
+ parent::tearDown();
}
public static function tearDownAfterClass() {
\OC_FileProxy::$enabled = true;
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Keymanager::TEST_USER);
+ \OC_User::deleteUser(self::TEST_USER);
// reset app files_trashbin
if (self::$stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
}
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
+ parent::tearDownAfterClass();
+ }
+
+ function testKeyCacheUpdate() {
+ $testUser = 'testKeyCacheUpdate';
+ \OCA\Files_Encryption\Keymanager::setPublicKey('oldKey', $testUser);
+
+ $this->assertSame('oldKey',
+ \OCA\Files_Encryption\Keymanager::getPublicKey($this->view, $testUser));
+
+ // update key
+ \OCA\Files_Encryption\Keymanager::setPublicKey('newKey', $testUser);
+
+ $this->assertSame('newKey',
+ \OCA\Files_Encryption\Keymanager::getPublicKey($this->view, $testUser));
+
+ // cleanup
+ \OCA\Files_Encryption\Keymanager::deletePublicKey($this->view, $testUser);
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
}
/**
@@ -105,9 +107,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
*/
function testGetPrivateKey() {
- $key = Encryption\Keymanager::getPrivateKey($this->view, $this->userId);
+ $key = \OCA\Files_Encryption\Keymanager::getPrivateKey($this->view, $this->userId);
- $privateKey = Encryption\Crypt::decryptPrivateKey($key, $this->pass);
+ $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($key, $this->pass);
$res = openssl_pkey_get_private($privateKey);
@@ -124,7 +126,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
*/
function testGetPublicKey() {
- $publiceKey = Encryption\Keymanager::getPublicKey($this->view, $this->userId);
+ $publiceKey = \OCA\Files_Encryption\Keymanager::getPublicKey($this->view, $this->userId);
$res = openssl_pkey_get_public($publiceKey);
@@ -135,27 +137,6 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$this->assertArrayHasKey('key', $sslInfo);
}
- function fileNameFromShareKeyProvider() {
- return array(
- array('file.user.shareKey', 'user', 'file'),
- array('file.name.with.dots.user.shareKey', 'user', 'file.name.with.dots'),
- array('file.name.user.with.dots.shareKey', 'user.with.dots', 'file.name'),
- array('file.txt', 'user', false),
- array('user.shareKey', 'user', false),
- );
- }
-
- /**
- * @small
- *
- * @dataProvider fileNameFromShareKeyProvider
- */
- function testGetFilenameFromShareKey($fileName, $user, $expectedFileName) {
- $this->assertEquals($expectedFileName,
- \TestProtectedKeymanagerMethods::testGetFilenameFromShareKey($fileName, $user)
- );
- }
-
/**
* @medium
*/
@@ -163,9 +144,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$key = $this->randomKey;
- $file = 'unittest-' . uniqid() . '.txt';
+ $file = 'unittest-' . $this->getUniqueID() . '.txt';
- $util = new Encryption\Util($this->view, $this->userId);
+ $util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -173,9 +154,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$this->view->file_put_contents($this->userId . '/files/' . $file, $this->dataShort);
- Encryption\Keymanager::setFileKey($this->view, $util, $file, $key);
+ \OCA\Files_Encryption\Keymanager::setFileKey($this->view, $util, $file, $key);
- $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/keyfiles/' . $file . '.key'));
+ $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/keys/' . $file . '/fileKey'));
// cleanup
$this->view->unlink('/' . $this->userId . '/files/' . $file);
@@ -191,9 +172,9 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$key = "dummy key";
- Encryption\Keymanager::setPrivateKey($key, 'dummyUser');
+ \OCA\Files_Encryption\Keymanager::setPrivateKey($key, 'dummyUser');
- $this->assertTrue($this->view->file_exists('/dummyUser/files_encryption/dummyUser.private.key'));
+ $this->assertTrue($this->view->file_exists('/dummyUser/files_encryption/dummyUser.privateKey'));
//clean up
$this->view->deleteAll('/dummyUser');
@@ -205,14 +186,19 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
function testSetPrivateSystemKey() {
$key = "dummy key";
- $keyName = "myDummyKey.private.key";
+ $keyName = "myDummyKey";
+ $encHeader = \OCA\Files_Encryption\Crypt::generateHeader();
- Encryption\Keymanager::setPrivateSystemKey($key, $keyName);
+ \OCA\Files_Encryption\Keymanager::setPrivateSystemKey($key, $keyName);
- $this->assertTrue($this->view->file_exists('/owncloud_private_key/' . $keyName));
+ $this->assertTrue($this->view->file_exists('/files_encryption/' . $keyName . '.privateKey'));
+
+ $result = \OCA\Files_Encryption\Keymanager::getPrivateSystemKey($keyName);
+
+ $this->assertSame($encHeader . $key, $result);
// clean up
- $this->view->unlink('/owncloud_private_key/' . $keyName);
+ $this->view->unlink('/files_encryption/' . $keyName.'.privateKey');
}
@@ -221,7 +207,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
*/
function testGetUserKeys() {
- $keys = Encryption\Keymanager::getUserKeys($this->view, $this->userId);
+ $keys = \OCA\Files_Encryption\Keymanager::getUserKeys($this->view, $this->userId);
$resPublic = openssl_pkey_get_public($keys['publicKey']);
@@ -231,7 +217,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$this->assertArrayHasKey('key', $sslInfoPublic);
- $privateKey = Encryption\Crypt::decryptPrivateKey($keys['privateKey'], $this->pass);
+ $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($keys['privateKey'], $this->pass);
$resPrivate = openssl_pkey_get_private($privateKey);
@@ -247,77 +233,85 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
*/
function testRecursiveDelShareKeysFolder() {
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
+ $this->view->mkdir('/' . self::TEST_USER . '/files/folder1');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files/folder1/existingFile.txt', 'data');
// create folder structure for some dummy share key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1');
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder');
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/file2');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/file2');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file1');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2');
// create some dummy share keys
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.test.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.test-keymanager-userxdot.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/file2.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user3.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user1.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/' . self::TEST_USER . '.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.test.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/userx.' . self::TEST_USER . '.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.userx.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.' . self::TEST_USER . '.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.user1.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file2/user2.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file2/user3.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/file2/user3.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file1/user1.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user2.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey', 'data');
// recursive delete share keys from user1 and user2
- Encryption\Keymanager::delShareKey($this->view, array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER), '/folder1/', Test_Encryption_Keymanager::TEST_USER);
+ \OCA\Files_Encryption\Keymanager::delShareKey($this->view,
+ array('user1', 'user2', self::TEST_USER),
+ \OCA\Files_Encryption\Keymanager::getKeyPath($this->view, new \OCA\Files_Encryption\Util($this->view, self::TEST_USER), '/folder1'),
+ self::TEST_USER,
+ '/folder1');
// check if share keys from user1 and user2 are deleted
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.user1.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/share-keys/folder1/file1/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user2.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/share-keys/folder1/file2/user2.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1.user1.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user2.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2/user2.shareKey'));
// check if share keys from user3 still exists
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user3.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/file2/user3.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user3.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/file2.user3.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/file2/user3.shareKey'));
- // check if share keys for user or file with similar name
+ // check if share keys for user or file with similar name
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.test.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.test.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.test-keymanager-userxdot.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.userx.shareKey'));
// FIXME: this case currently cannot be distinguished, needs further fixing
- /*
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/userx.' . self::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.' . self::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey'));
- */
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.user1.shareKey'));
// owner key from existing file should still exists because the file is still there
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/' . self::TEST_USER . '.shareKey'));
// cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
+ $this->view->deleteAll('/' . self::TEST_USER . '/files/folder1');
}
@@ -326,178 +320,53 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
*/
function testRecursiveDelShareKeysFile() {
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
+ $this->view->mkdir('/' . self::TEST_USER . '/files/folder1');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files/folder1/existingFile.txt', 'data');
// create folder structure for some dummy share key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1');
+ $this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt');
// create some dummy share keys
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user1.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user2.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user3.shareKey', 'data');
+ $this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/' . self::TEST_USER . '.shareKey', 'data');
// recursive delete share keys from user1 and user2
- Encryption\Keymanager::delShareKey($this->view, array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER), '/folder1/existingFile.txt', Test_Encryption_Keymanager::TEST_USER);
+ \OCA\Files_Encryption\Keymanager::delShareKey($this->view,
+ array('user1', 'user2', self::TEST_USER),
+ \OCA\Files_Encryption\Keymanager::getKeyPath($this->view, new \OCA\Files_Encryption\Util($this->view, self::TEST_USER), '/folder1/existingFile.txt'),
+ self::TEST_USER,
+ '/folder1/existingFile.txt');
+
// check if share keys from user1 and user2 are deleted
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.user1.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.user2.shareKey'));
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile/user2.shareKey'));
// check if share keys for user3 and owner
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey'));
- // cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
-
- }
-
- /**
- * @medium
- */
- function testDeleteFileKey() {
-
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
-
- // create folder structure for some dummy file key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1');
-
- // create dummy keyfile
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key', 'data');
-
- // recursive delete share keys from user1 and user2
- $result = Encryption\Keymanager::deleteFileKey($this->view, '/folder1/existingFile.txt');
- $this->assertFalse($result);
-
- $result2 = Encryption\Keymanager::deleteFileKey($this->view, '/folder1/dummyFile.txt');
- $this->assertTrue($result2);
-
- // check if file key from dummyFile was deleted
- $this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key'));
-
- // check if file key from existing file still exists
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/' . self::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/existingFile.txt.key'));
-
+ '/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user3.shareKey'));
// cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
-
- }
-
- /**
- * @medium
- */
- function testDeleteFileKeyFolder() {
-
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
-
- // create folder structure for some dummy file key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1');
-
- // create dummy keyfile
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key', 'data');
-
- // recursive delete share keys from user1 and user2
- $result = Encryption\Keymanager::deleteFileKey($this->view, '/folder1');
- $this->assertFalse($result);
-
- // all file keys should still exists if we try to delete a folder with keys for which some files still exists
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/existingFile.txt.key'));
-
- // delete folder
- $this->view->unlink('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- // create dummy keyfile
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key', 'data');
-
- // now file keys should be deleted since the folder no longer exists
- $result = Encryption\Keymanager::deleteFileKey($this->view, '/folder1');
- $this->assertTrue($result);
-
- $this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1'));
-
- // cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
-
- }
-
- function testDelAllShareKeysFile() {
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
-
- // create folder structure for some dummy share key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1');
-
- // create some dummy share keys for the existing file
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
-
- // create some dummy share keys for a non-existing file
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
-
- // try to del all share keys from a existing file, should fail because the file still exists
- $result = Encryption\Keymanager::delAllShareKeys($this->view, Test_Encryption_Keymanager::TEST_USER, 'folder1/existingFile.txt');
- $this->assertFalse($result);
-
- // check if share keys still exists
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user2.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey'));
-
- // try to del all share keys from file, should succeed because the does not exist any more
- $result2 = Encryption\Keymanager::delAllShareKeys($this->view, Test_Encryption_Keymanager::TEST_USER, 'folder1/nonexistingFile.txt');
- $this->assertTrue($result2);
-
- // check if share keys are really gone
- $this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
- // check that it only deleted keys or users who had access, others remain
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user1.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user2.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user3.shareKey'));
-
- // cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
+ $this->view->deleteAll('/' . self::TEST_USER . '/files/folder1');
}
function testKeySetPreperation() {
- $basePath = '/'.Test_Encryption_Keymanager::TEST_USER.'/files';
+ $basePath = '/' . self::TEST_USER . '/files';
$path = '/folder1/subfolder/subsubfolder/file.txt';
$this->assertFalse($this->view->is_dir($basePath . '/testKeySetPreperation'));
- $result = TestProtectedKeymanagerMethods::testKeySetPreperation($this->view, $path, $basePath);
-
- // return path without leading slash
- $this->assertSame('folder1/subfolder/subsubfolder/file.txt', $result);
+ TestProtectedKeymanagerMethods::testKeySetPreperation($this->view, $basePath . $path);
// check if directory structure was created
- $this->assertTrue($this->view->is_dir($basePath . '/folder1/subfolder/subsubfolder'));
+ $this->assertTrue($this->view->is_dir($basePath . $path));
// cleanup
$this->view->deleteAll($basePath . '/folder1');
@@ -506,23 +375,16 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
}
/**
- * dummy class to access protected methods of \OCA\Encryption\Keymanager for testing
+ * dummy class to access protected methods of \OCA\Files_Encryption\Keymanager for testing
*/
-class TestProtectedKeymanagerMethods extends \OCA\Encryption\Keymanager {
-
- /**
- * @param string $sharekey
- */
- public static function testGetFilenameFromShareKey($sharekey, $user) {
- return self::getFilenameFromShareKey($sharekey, $user);
- }
+class TestProtectedKeymanagerMethods extends \OCA\Files_Encryption\Keymanager {
/**
* @param \OC\Files\View $view relative to data/
* @param string $path
* @param string $basePath
*/
- public static function testKeySetPreperation($view, $path, $basePath) {
- return self::keySetPreparation($view, $path, $basePath);
+ public static function testKeySetPreperation($view, $path) {
+ self::keySetPreparation($view, $path);
}
}
diff --git a/apps/files_encryption/tests/migration.php b/apps/files_encryption/tests/migration.php
index 80f30d4e793..f0d1ba202ed 100644
--- a/apps/files_encryption/tests/migration.php
+++ b/apps/files_encryption/tests/migration.php
@@ -2,8 +2,9 @@
/**
* ownCloud
*
- * @author Thomas Müller
- * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -20,34 +21,51 @@
*
*/
-use OCA\Encryption;
-use OCA\Files_Encryption\Migration;
+namespace OCA\Files_Encryption\Tests;
-class Test_Migration extends PHPUnit_Framework_TestCase {
+class Migration extends TestCase {
- public function tearDown() {
- if (OC_DB::tableExists('encryption_test')) {
- OC_DB::dropTable('encryption_test');
- }
- $this->assertTableNotExist('encryption_test');
- }
+ const TEST_ENCRYPTION_MIGRATION_USER1='test_encryption_user1';
+ const TEST_ENCRYPTION_MIGRATION_USER2='test_encryption_user2';
+ const TEST_ENCRYPTION_MIGRATION_USER3='test_encryption_user3';
- public function setUp() {
- if (OC_DB::tableExists('encryption_test')) {
- OC_DB::dropTable('encryption_test');
- }
- $this->assertTableNotExist('encryption_test');
+ /** @var \OC\Files\View */
+ private $view;
+ private $public_share_key_id;
+ private $recovery_key_id;
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+ self::loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER2, true);
+ self::loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER3, true);
}
- public function testEncryptionTableDoesNotExist() {
+ public static function tearDownAfterClass() {
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER3);
+ parent::tearDownAfterClass();
+ }
+ protected function tearDown() {
+ if (\OC_DB::tableExists('encryption_test')) {
+ \OC_DB::dropTable('encryption_test');
+ }
$this->assertTableNotExist('encryption_test');
- $migration = new Migration('encryption_test');
- $migration->dropTableEncryption();
+ parent::tearDown();
+ }
+ public function setUp() {
+ $this->loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->view = new \OC\Files\View();
+ $this->public_share_key_id = \OCA\Files_Encryption\Helper::getPublicShareKeyId();
+ $this->recovery_key_id = \OCA\Files_Encryption\Helper::getRecoveryKeyId();
+ if (\OC_DB::tableExists('encryption_test')) {
+ \OC_DB::dropTable('encryption_test');
+ }
$this->assertTableNotExist('encryption_test');
-
}
public function checkLastIndexId() {
@@ -83,93 +101,164 @@ class Test_Migration extends PHPUnit_Framework_TestCase {
// create test table
$this->checkLastIndexId();
- OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
+ \OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
$this->checkLastIndexId();
}
- public function testDataMigration() {
- // TODO travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('Fails on travis');
+ /**
+ * @param string $table
+ */
+ public function assertTableNotExist($table) {
+ $type = \OC_Config::getValue( "dbtype", "sqlite" );
+ if( $type == 'sqlite' || $type == 'sqlite3' ) {
+ // sqlite removes the tables after closing the DB
+ $this->assertTrue(true);
+ } else {
+ $this->assertFalse(\OC_DB::tableExists($table), 'Table ' . $table . ' exists.');
}
-
- $this->assertTableNotExist('encryption_test');
-
- // create test table
- OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
- $this->assertTableExist('encryption_test');
-
- OC_DB::executeAudited('INSERT INTO `*PREFIX*encryption_test` values(?, ?, ?, ?)',
- array('user1', 'server-side', 1, 1));
-
- // preform migration
- $migration = new Migration('encryption_test');
- $migration->dropTableEncryption();
-
- // assert
- $this->assertTableNotExist('encryption_test');
-
- $rec = \OC_Preferences::getValue('user1', 'files_encryption', 'recovery_enabled');
- $mig = \OC_Preferences::getValue('user1', 'files_encryption', 'migration_status');
-
- $this->assertEquals(1, $rec);
- $this->assertEquals(1, $mig);
}
- public function testDuplicateDataMigration() {
- // TODO travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('Fails on travis');
+ protected function createDummyShareKeys($uid) {
+ $this->view->mkdir($uid . '/files_encryption/share-keys/folder1/folder2/folder3');
+ $this->view->mkdir($uid . '/files_encryption/share-keys/folder2/');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/folder3/file3.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/folder3/file3.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/folder3/file3.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/file.1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/file.1.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/file.1.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ if ($this->public_share_key_id) {
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . $this->public_share_key_id . '.shareKey' , 'data');
}
-
- // create test table
- OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
-
- // in case of duplicate entries we want to preserve 0 on migration status and 1 on recovery
- $data = array(
- array('user1', 'server-side', 1, 1),
- array('user1', 'server-side', 1, 0),
- array('user1', 'server-side', 0, 1),
- array('user1', 'server-side', 0, 0),
- );
- foreach ($data as $d) {
- OC_DB::executeAudited(
- 'INSERT INTO `*PREFIX*encryption_test` values(?, ?, ?, ?)',
- $d);
+ if ($this->recovery_key_id) {
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . $this->recovery_key_id . '.shareKey' , 'data');
}
+ }
- // preform migration
- $migration = new Migration('encryption_test');
- $migration->dropTableEncryption();
+ protected function createDummyFileKeys($uid) {
+ $this->view->mkdir($uid . '/files_encryption/keyfiles/folder1/folder2/folder3');
+ $this->view->mkdir($uid . '/files_encryption/keyfiles/folder2/');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder1/folder2/folder3/file3.key' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder1/folder2/file2.key' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder1/file.1.key' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder2/file.2.1.key' , 'data');
+ }
- // assert
- $this->assertTableNotExist('encryption_test');
+ protected function createDummyFilesInTrash($uid) {
+ $this->view->mkdir($uid . '/files_trashbin/share-keys');
+ $this->view->mkdir($uid . '/files_trashbin/share-keys/folder1.d7437648723');
+ $this->view->file_put_contents($uid . '/files_trashbin/share-keys/file1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_put_contents($uid . '/files_trashbin/share-keys/file1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_put_contents($uid . '/files_trashbin/share-keys/folder1.d7437648723/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+
+ $this->view->mkdir($uid . '/files_trashbin/keyfiles');
+ $this->view->mkdir($uid . '/files_trashbin/keyfiles/folder1.d7437648723');
+ $this->view->file_put_contents($uid . '/files_trashbin/keyfiles/file1.key.d5457864' , 'data');
+ $this->view->file_put_contents($uid . '/files_trashbin/keyfiles/folder1.d7437648723/file2.key' , 'data');
+ }
- $rec = \OC_Preferences::getValue('user1', 'files_encryption', 'recovery_enabled');
- $mig = \OC_Preferences::getValue('user1', 'files_encryption', 'migration_status');
+ protected function createDummySystemWideKeys() {
+ $this->view->mkdir('owncloud_private_key');
+ $this->view->file_put_contents('owncloud_private_key/systemwide_1.private.key', 'data');
+ $this->view->file_put_contents('owncloud_private_key/systemwide_2.private.key', 'data');
+ }
+
+ public function testMigrateToNewFolderStructure() {
+
+ // go back to the state before migration
+ $this->view->rename('/files_encryption/public_keys', '/public-keys');
+ $this->view->rename('/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.publicKey', '/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.public.key');
+ $this->view->rename('/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.publicKey', '/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.public.key');
+ $this->view->rename('/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.publicKey', '/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.public.key');
+ $this->view->deleteAll(self::TEST_ENCRYPTION_MIGRATION_USER1 . '/files_encryption/keys');
+ $this->view->deleteAll(self::TEST_ENCRYPTION_MIGRATION_USER2 . '/files_encryption/keys');
+ $this->view->deleteAll(self::TEST_ENCRYPTION_MIGRATION_USER3 . '/files_encryption/keys');
+ $this->view->rename(self::TEST_ENCRYPTION_MIGRATION_USER1 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.privateKey',
+ self::TEST_ENCRYPTION_MIGRATION_USER1 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.private.key');
+ $this->view->rename(self::TEST_ENCRYPTION_MIGRATION_USER2 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.privateKey',
+ self::TEST_ENCRYPTION_MIGRATION_USER2 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.private.key');
+ $this->view->rename(self::TEST_ENCRYPTION_MIGRATION_USER3 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.privateKey',
+ self::TEST_ENCRYPTION_MIGRATION_USER3 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.private.key');
+
+ $this->createDummyShareKeys(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->createDummyShareKeys(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ $this->createDummyShareKeys(self::TEST_ENCRYPTION_MIGRATION_USER3);
+
+ $this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ $this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER3);
+
+ $this->createDummyFilesInTrash(self::TEST_ENCRYPTION_MIGRATION_USER2);
+
+ // no user for system wide mount points
+ $this->createDummyFileKeys('');
+ $this->createDummyShareKeys('');
+
+ $this->createDummySystemWideKeys();
+
+ $m = new \OCA\Files_Encryption\Migration();
+ $m->reorganizeFolderStructure();
+
+ // TODO Verify that all files at the right place
+ $this->assertTrue($this->view->file_exists('/files_encryption/public_keys/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.publicKey'));
+ $this->assertTrue($this->view->file_exists('/files_encryption/public_keys/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.publicKey'));
+ $this->assertTrue($this->view->file_exists('/files_encryption/public_keys/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.publicKey'));
+ $this->verifyNewKeyPath(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->verifyNewKeyPath(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ $this->verifyNewKeyPath(self::TEST_ENCRYPTION_MIGRATION_USER3);
+ // system wide keys
+ $this->verifyNewKeyPath('');
+ // trash
+ $this->verifyFilesInTrash(self::TEST_ENCRYPTION_MIGRATION_USER2);
- $this->assertEquals(1, $rec);
- $this->assertEquals(0, $mig);
}
- /**
- * @param string $table
- */
- public function assertTableExist($table) {
- $this->assertTrue(OC_DB::tableExists($table), 'Table ' . $table . ' does not exist');
+ protected function verifyFilesInTrash($uid) {
+ // share keys
+ $this->view->file_exists($uid . '/files_trashbin/keys/file1.d5457864/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keys/file1.d5457864/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keys/folder1.d7437648723/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+
+ // file keys
+ $this->view->file_exists($uid . '/files_trashbin/keys/file1.d5457864/fileKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keyfiles/file1.d5457864/fileKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keyfiles/folder1.d7437648723/file2/fileKey' , 'data');
}
- /**
- * @param string $table
- */
- public function assertTableNotExist($table) {
- $type=OC_Config::getValue( "dbtype", "sqlite" );
- if( $type == 'sqlite' || $type == 'sqlite3' ) {
- // sqlite removes the tables after closing the DB
- $this->assertTrue(true);
- } else {
- $this->assertFalse(OC_DB::tableExists($table), 'Table ' . $table . ' exists.');
+ protected function verifyNewKeyPath($uid) {
+ // private key
+ if ($uid !== '') {
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/' . $uid . '.privateKey'));
+ }
+ // file keys
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/fileKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/fileKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/fileKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/fileKey'));
+ // share keys
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ if ($this->public_share_key_id) {
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . $this->public_share_key_id . '.shareKey'));
+ }
+ if ($this->recovery_key_id) {
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . $this->recovery_key_id . '.shareKey'));
}
}
-
}
diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php
index d3e568f8914..d5d9cc7daee 100644
--- a/apps/files_encryption/tests/proxy.php
+++ b/apps/files_encryption/tests/proxy.php
@@ -20,15 +20,13 @@
*
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Proxy
+ * Class Proxy
* this class provide basic proxy app tests
*/
-class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
+class Proxy extends TestCase {
const TEST_ENCRYPTION_PROXY_USER1 = "test-proxy-user1";
@@ -44,52 +42,36 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
public $filename;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- \OC_Hook::clear('OC_Filesystem');
- \OC_Hook::clear('OC_User');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_PROXY_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \OC_User::setUserId(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1);
- $this->userId = \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1;
- $this->pass = \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1;
+ \OC_User::setUserId(self::TEST_ENCRYPTION_PROXY_USER1);
+ $this->userId = self::TEST_ENCRYPTION_PROXY_USER1;
+ $this->pass = self::TEST_ENCRYPTION_PROXY_USER1;
// init filesystem view
- $this->view = new \OC\Files\View('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files');
- $this->rootView = new \OC\Files\View('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 );
+ $this->view = new \OC\Files\View('/'. self::TEST_ENCRYPTION_PROXY_USER1 . '/files');
+ $this->rootView = new \OC\Files\View('/'. self::TEST_ENCRYPTION_PROXY_USER1 );
// init short data
$this->data = 'hats';
$this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
- $this->filename = 'enc_proxy_tests-' . uniqid() . '.txt';
+ $this->filename = 'enc_proxy_tests-' . $this->getUniqueID() . '.txt';
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1);
-
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_PROXY_USER1);
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ parent::tearDownAfterClass();
}
/**
@@ -155,13 +137,13 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
public function isExcludedPathProvider() {
return array(
- array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
- array (\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
+ array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
+ array (self::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
array ('/files/test.txt', true),
- array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files/versions/test.txt', false),
- array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files_versions/test.txt', false),
- array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files_trashbin/test.txt', true),
- array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/file/test.txt', true),
+ array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files/versions/test.txt', false),
+ array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files_versions/test.txt', false),
+ array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files_trashbin/test.txt', true),
+ array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/file/test.txt', true),
);
}
@@ -171,7 +153,7 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
/**
* Dummy class to make protected methods available for testing
*/
-class DummyProxy extends \OCA\Encryption\Proxy {
+class DummyProxy extends \OCA\Files_Encryption\Proxy {
public function isExcludedPathTesting($path, $uid) {
return $this->isExcludedPath($path, $uid);
}
diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php
index d7efe21a8fd..d29e6a191c8 100755
--- a/apps/files_encryption/tests/share.php
+++ b/apps/files_encryption/tests/share.php
@@ -20,14 +20,12 @@
*
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Share
+ * Class Share
*/
-class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
+class Share extends TestCase {
const TEST_ENCRYPTION_SHARE_USER1 = "test-share-user1";
const TEST_ENCRYPTION_SHARE_USER2 = "test-share-user2";
@@ -39,7 +37,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
public $filename;
public $dataShort;
/**
- * @var OC\Files\View
+ * @var \OC\Files\View
*/
public $view;
public $folder1;
@@ -47,44 +45,33 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
public $subsubfolder;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
+ parent::setUpBeforeClass();
// enable resharing
\OC::$server->getAppConfig()->setValue('core', 'shareapi_allow_resharing', 'yes');
- // clear share hooks
- \OC_Hook::clear('OCP\\Share');
-
// register share hooks
\OC::registerShareHooks();
\OCA\Files_Sharing\Helper::registerHooks();
- // Sharing related hooks
- \OCA\Encryption\Helper::registerShareHooks();
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
// clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Files\Share\Proxy());
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ \OC_FileProxy::register(new \OCA\Files\Share\Proxy());
// create users
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, true);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2, true);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER3, true);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER4, true);
// create group and assign users
- \OC_Group::createGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
- \OC_Group::addToGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
- \OC_Group::addToGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
+ \OC_Group::createGroup(self::TEST_ENCRYPTION_SHARE_GROUP1);
+ \OC_Group::addToGroup(self::TEST_ENCRYPTION_SHARE_USER3, self::TEST_ENCRYPTION_SHARE_GROUP1);
+ \OC_Group::addToGroup(self::TEST_ENCRYPTION_SHARE_USER4, self::TEST_ENCRYPTION_SHARE_GROUP1);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->dataShort = 'hats';
$this->view = new \OC\Files\View('/');
@@ -95,43 +82,124 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->filename = 'share-tmp.test';
// remember files_trashbin state
- $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $this->stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
// login as first user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
} else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// clean group
- \OC_Group::deleteGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
+ \OC_Group::deleteGroup(self::TEST_ENCRYPTION_SHARE_GROUP1);
// cleanup users
- \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
- \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
- \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
- \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
-
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_SHARE_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_SHARE_USER2);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_SHARE_USER3);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_SHARE_USER4);
+
+ parent::tearDownAfterClass();
+ }
+
+ /**
+ * @medium
+ */
+ function testDeclineServer2ServerShare() {
+
+ $config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $certificateManager = $this->getMock('\OCP\ICertificateManager');
+ $httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper')
+ ->setConstructorArgs(array($config, $certificateManager))
+ ->getMock();
+ $httpHelperMock->expects($this->once())->method('post')->with($this->anything())->will($this->returnValue(true));
+
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
+
+ // save file with content
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+
+ // test that data was successfully written
+ $this->assertTrue(is_int($cryptedFile));
+
+ // get the file info from previous created file
+ $fileInfo = $this->view->getFileInfo(
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+
+
+ // share the file
+ $token = \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, '', \OCP\Constants::PERMISSION_ALL);
+ $this->assertTrue(is_string($token));
+
+ $publicShareKeyId = \OC::$server->getConfig()->getAppValue('files_encryption', 'publicShareKeyId');
+
+ // check if share key for public exists
+ $this->assertTrue($this->view->file_exists(
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $publicShareKeyId . '.shareKey'));
+
+ // manipulate share
+ $query = \OC::$server->getDatabaseConnection()->prepare('UPDATE `*PREFIX*share` SET `share_type` = ?, `share_with` = ? WHERE `token`=?');
+ $this->assertTrue($query->execute(array(\OCP\Share::SHARE_TYPE_REMOTE, 'foo@bar', $token)));
+
+ // check if share key not exists
+ $this->assertTrue($this->view->file_exists(
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $publicShareKeyId . '.shareKey'));
+
+
+ $query = \OC::$server->getDatabaseConnection()->prepare('SELECT * FROM `*PREFIX*share` WHERE `token`=?');
+ $query->execute(array($token));
+
+ $share = $query->fetch();
+
+ $this->registerHttpHelper($httpHelperMock);
+ $_POST['token'] = $token;
+ $s2s = new \OCA\Files_Sharing\API\Server2Server();
+ $s2s->declineShare(array('id' => $share['id']));
+ $this->restoreHttpHelper();
+
+ $this->assertFalse($this->view->file_exists(
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $publicShareKeyId . '.shareKey'));
+
+ }
+
+
+ /**
+ * Register an http helper mock for testing purposes.
+ * @param $httpHelper http helper mock
+ */
+ private function registerHttpHelper($httpHelper) {
+ $this->oldHttpHelper = \OC::$server->query('HTTPHelper');
+ \OC::$server->registerService('HTTPHelper', function ($c) use ($httpHelper) {
+ return $httpHelper;
+ });
}
+ /**
+ * Restore the original http helper
+ */
+ private function restoreHttpHelper() {
+ $oldHttpHelper = $this->oldHttpHelper;
+ \OC::$server->registerService('HTTPHelper', function ($c) use ($oldHttpHelper) {
+ return $oldHttpHelper;
+ });
+ }
/**
* @medium
@@ -139,10 +207,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testShareFile($withTeardown = true) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -153,7 +221,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// get the file info from previous created file
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
// check if we have a valid file info
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
@@ -165,22 +233,22 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key for user1 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// login as user1
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
@@ -189,25 +257,25 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// unshare the file
- \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
$this->view->unlink($this->filename);
$this->view->chroot('/');
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
}
@@ -219,29 +287,29 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->testShareFile(false);
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
// get the file info
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
// share the file with user3
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER3, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key for user2 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER3);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->filename);
// check if data is the same as previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
@@ -250,36 +318,36 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as user1
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
// unshare the file with user2
- \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER3);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// unshare the file with user1
- \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
$this->view->unlink($this->filename);
$this->view->chroot('/');
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
}
@@ -290,19 +358,19 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testShareFolder($withTeardown = true) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// create folder structure
- $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
+ $this->view->mkdir('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
$this->view->mkdir(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder);
$this->view->mkdir(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder
. $this->subsubfolder);
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
+ . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -313,7 +381,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// get the file info from previous created folder
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
// check if we have a valid file info
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
@@ -322,23 +390,23 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the folder with user1
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key for user1 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// login as user1
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/' . $this->filename);
// check if data is the same
@@ -348,27 +416,27 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// unshare the folder with user1
- \OCP\Share::unshare('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ \OCP\Share::unshare('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files');
$this->view->unlink($this->folder1);
$this->view->chroot('/');
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
return $fileInfo;
@@ -382,7 +450,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$fileInfoFolder1 = $this->testShareFolder(false);
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
// disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -390,7 +458,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// get the file info from previous created folder
$fileInfoSubFolder = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1
. $this->subfolder);
// check if we have a valid file info
@@ -400,23 +468,23 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file with user3
- \OCP\Share::shareItem('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER3, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key for user3 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// login as user3
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER3);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->subfolder
+ '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->subfolder
. $this->subsubfolder . '/' . $this->filename);
// check if data is the same
@@ -424,30 +492,30 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// get the file info
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->subfolder
+ '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->subfolder
. $this->subsubfolder . '/' . $this->filename);
// check if we have fileInfos
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the file with user3
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER4, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key for user3 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// login as user3
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER4);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER4 . '/files/' . $this->filename);
// check if data is the same
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
@@ -456,61 +524,61 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER3);
// unshare the file with user3
- \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
+ \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER4);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// login as user1
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
// unshare the folder with user2
- \OCP\Share::unshare('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ \OCP\Share::unshare('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER3);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// unshare the folder1 with user1
- \OCP\Share::unshare('folder', $fileInfoFolder1['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ \OCP\Share::unshare('folder', $fileInfoFolder1['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files');
$this->view->unlink($this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename);
$this->view->chroot('/');
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
}
function testPublicShareFile() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -521,7 +589,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// get the file info from previous created file
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
// check if we have a valid file info
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
@@ -533,25 +601,25 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, false, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, false, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
$publicShareKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'publicShareKeyId');
// check if share key for public exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $publicShareKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $publicShareKeyId . '.shareKey'));
// some hacking to simulate public link
//$GLOBALS['app'] = 'files_sharing';
- //$GLOBALS['fileOwner'] = \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1;
- \Test_Encryption_Util::logoutHelper();
+ //$GLOBALS['fileOwner'] = self::TEST_ENCRYPTION_SHARE_USER1;
+ self::logoutHelper();
// get file contents
- $retrievedCryptedFile = file_get_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+ $retrievedCryptedFile = file_get_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
@@ -559,25 +627,25 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// tear down
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// unshare the file
\OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $publicShareKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $publicShareKeyId . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
$this->view->unlink($this->filename);
$this->view->chroot('/');
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
/**
@@ -585,10 +653,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testShareFileWithGroup() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -599,7 +667,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// get the file info from previous created file
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
// check if we have a valid file info
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
@@ -611,52 +679,52 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_ENCRYPTION_SHARE_GROUP1, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key for user2 and user3 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// login as user1
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER3);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '/files/' . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// unshare the file
- \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
+ \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_ENCRYPTION_SHARE_GROUP1);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
$this->view->unlink($this->filename);
$this->view->chroot('/');
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
@@ -666,15 +734,15 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function testRecoveryFile() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
- \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
+ \OCA\Files_Encryption\Helper::adminEnableRecovery(null, 'test123');
$recoveryKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryKeyId');
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ $util = new \OCA\Files_Encryption\Util(new \OC\Files\View('/'), self::TEST_ENCRYPTION_SHARE_USER1);
// check if recovery password match
$this->assertTrue($util->checkRecoveryPassword('test123'));
@@ -684,17 +752,17 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$util->addRecoveryKeys();
// create folder structure
- $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
+ $this->view->mkdir('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
$this->view->mkdir(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder);
$this->view->mkdir(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder
. $this->subsubfolder);
// save file with content
- $cryptedFile1 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename, $this->dataShort);
+ $cryptedFile1 = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
+ . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile1));
@@ -702,19 +770,19 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// check if share key for admin and recovery exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// disable recovery for admin
$this->assertTrue($util->setRecoveryForUser(0));
@@ -724,12 +792,12 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// check if share key for recovery not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// enable recovery for admin
$this->assertTrue($util->setRecoveryForUser(1));
@@ -739,30 +807,30 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// check if share key for admin and recovery exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
$this->view->unlink($this->filename);
$this->view->unlink($this->folder1);
$this->view->chroot('/');
// check if share key for recovery not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
- $this->assertTrue(\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'));
- $this->assertTrue(\OCA\Encryption\Helper::adminDisableRecovery('test123'));
+ $this->assertTrue(\OCA\Files_Encryption\Helper::adminEnableRecovery(null, 'test123'));
+ $this->assertTrue(\OCA\Files_Encryption\Helper::adminDisableRecovery('test123'));
$this->assertEquals(0, \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryAdminEnabled'));
}
@@ -772,17 +840,17 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function testRecoveryForUser() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
- $result = \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
+ $result = \OCA\Files_Encryption\Helper::adminEnableRecovery(null, 'test123');
$this->assertTrue($result);
$recoveryKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryKeyId');
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ $util = new \OCA\Files_Encryption\Util(new \OC\Files\View('/'), self::TEST_ENCRYPTION_SHARE_USER2);
// enable recovery for admin
$this->assertTrue($util->setRecoveryForUser(1));
@@ -791,17 +859,17 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$util->addRecoveryKeys();
// create folder structure
- $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1);
+ $this->view->mkdir('/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1);
$this->view->mkdir(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder);
$this->view->mkdir(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder
. $this->subsubfolder);
// save file with content
- $cryptedFile1 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2. '/files/' . $this->filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename, $this->dataShort);
+ $cryptedFile1 = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER2. '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
+ . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile1));
@@ -809,76 +877,76 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// check if share key for user and recovery exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// change password
- \OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123');
- $params = array('uid' => \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2,
+ \OC_User::setPassword(self::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123');
+ $params = array('uid' => self::TEST_ENCRYPTION_SHARE_USER2,
'password' => 'test',
'recoveryPassword' => 'test123');
- \OCA\Encryption\Hooks::setPassphrase($params);
+ \OCA\Files_Encryption\Hooks::setPassphrase($params);
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test');
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2, false, 'test');
// get file contents
- $retrievedCryptedFile1 = file_get_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
+ $retrievedCryptedFile1 = file_get_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
$retrievedCryptedFile2 = file_get_contents(
- 'crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename);
+ 'crypt:///' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile1);
$this->assertEquals($this->dataShort, $retrievedCryptedFile2);
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/');
$this->view->unlink($this->folder1);
$this->view->unlink($this->filename);
$this->view->chroot('/');
// check if share key for user and recovery exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// enable recovery for admin
$this->assertTrue($util->setRecoveryForUser(0));
- \OCA\Encryption\Helper::adminDisableRecovery('test123');
+ \OCA\Files_Encryption\Helper::adminDisableRecovery('test123');
$this->assertEquals(0, \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryAdminEnabled'));
//clean up, reset passwords
- \OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test123');
- $params = array('uid' => \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2,
- 'password' => \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2,
+ \OC_User::setPassword(self::TEST_ENCRYPTION_SHARE_USER2, self::TEST_ENCRYPTION_SHARE_USER2, 'test123');
+ $params = array('uid' => self::TEST_ENCRYPTION_SHARE_USER2,
+ 'password' => self::TEST_ENCRYPTION_SHARE_USER2,
'recoveryPassword' => 'test123');
- \OCA\Encryption\Hooks::setPassphrase($params);
+ \OCA\Files_Encryption\Hooks::setPassphrase($params);
}
/**
@@ -886,10 +954,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testFailShareFile() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -900,7 +968,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// get the file info from previous created file
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
// check if we have a valid file info
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
@@ -909,27 +977,27 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertGreaterThan(0, $fileInfo['unencrypted_size']);
// break users public key
- $this->view->rename('/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key',
- '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup');
+ $this->view->rename(\OCA\Files_Encryption\Keymanager::getPublicKeyPath() . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey',
+ \OCA\Files_Encryption\Keymanager::getPublicKeyPath() . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey_backup');
// re-enable the file proxy
\OC_FileProxy::$enabled = $proxyStatus;
// share the file
try {
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL);
- } catch (Exception $e) {
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_ENCRYPTION_SHARE_GROUP1, \OCP\Constants::PERMISSION_ALL);
+ } catch (\Exception $e) {
$this->assertEquals(0, strpos($e->getMessage(), "Following users are not set up for encryption"));
}
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// check if share key for user1 not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -937,27 +1005,27 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// break user1 public key
$this->view->rename(
- '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup',
- '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key');
+ \OCA\Files_Encryption\Keymanager::getPublicKeyPath() . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey_backup',
+ \OCA\Files_Encryption\Keymanager::getPublicKeyPath() . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey');
// remove share file
- $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3
- . '.shareKey');
+ $this->view->unlink('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3
+ . '.shareKey');
// re-enable the file proxy
\OC_FileProxy::$enabled = $proxyStatus;
// unshare the file with user1
- \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
+ \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_ENCRYPTION_SHARE_GROUP1);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// cleanup
- $this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
+ $this->view->chroot('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
$this->view->unlink($this->filename);
$this->view->chroot('/');
}
@@ -969,56 +1037,56 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function testRename() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
// get the file info from previous created file
$fileInfo = $this->view->getFileInfo(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
// check if we have a valid file info
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// check if share key for user2 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2);
- $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename));
+ $this->assertTrue($this->view->file_exists('/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename));
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
// move the file to a subfolder
- $this->view->rename('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename,
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1 . $this->filename);
+ $this->view->rename('/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename,
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1 . $this->filename);
// check if we can read the moved file
$retrievedRenamedFile = $this->view->file_get_contents(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1 . $this->filename);
+ '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1 . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedRenamedFile);
// cleanup
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
- $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
+ $this->view->unlink('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
}
/**
@@ -1027,10 +1095,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testMoveFolder() {
- $view = new \OC\Files\View('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ $view = new \OC\Files\View('/' . self::TEST_ENCRYPTION_SHARE_USER1);
- $filename = '/tmp-' . uniqid();
- $folder = '/folder' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
+ $folder = '/folder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir($folder);
@@ -1045,7 +1113,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $decrypt);
- $newFolder = '/newfolder/subfolder' . uniqid();
+ $newFolder = '/newfolder/subfolder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir('/newfolder');
// get the file info from previous created file
@@ -1053,7 +1121,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the folder
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
\OC\Files\Filesystem::rename($folder, $newFolder);
@@ -1062,10 +1130,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $newDecrypt);
// check if additional share key for user2 exists
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $newFolder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $newFolder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// check that old keys were removed/moved properly
- $this->assertFalse($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertFalse($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// tear down
\OC\Files\Filesystem::unlink($newFolder);
@@ -1075,9 +1143,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function usersProvider() {
return array(
// test as owner
- array(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1),
+ array(self::TEST_ENCRYPTION_SHARE_USER1),
// test as share receiver
- array(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2),
+ array(self::TEST_ENCRYPTION_SHARE_USER2),
);
}
@@ -1085,10 +1153,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
* @dataProvider usersProvider
*/
function testMoveFileToFolder($userId) {
- $view = new \OC\Files\View('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ $view = new \OC\Files\View('/' . self::TEST_ENCRYPTION_SHARE_USER1);
- $filename = '/tmp-' . uniqid();
- $folder = '/folder' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
+ $folder = '/folder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir($folder);
@@ -1103,7 +1171,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $decrypt);
- $subFolder = $folder . '/subfolder' . uniqid();
+ $subFolder = $folder . '/subfolder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir($subFolder);
// get the file info from previous created file
@@ -1111,32 +1179,32 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the folder
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// check that the share keys exist
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// move the file into the subfolder as the test user
- \Test_Encryption_Util::loginHelper($userId);
+ self::loginHelper($userId);
\OC\Files\Filesystem::rename($folder . $filename, $subFolder . $filename);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1);
// Get file decrypted contents
$newDecrypt = \OC\Files\Filesystem::file_get_contents($subFolder . $filename);
$this->assertEquals($this->dataShort, $newDecrypt);
// check if additional share key for user2 exists
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $subFolder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $subFolder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $subFolder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $subFolder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// check that old keys were removed/moved properly
- $this->assertFalse($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
- $this->assertFalse($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertFalse($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ $this->assertFalse($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . self::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// tear down
\OC\Files\Filesystem::unlink($subFolder);
\OC\Files\Filesystem::unlink($folder);
}
-}
+} \ No newline at end of file
diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php
index 2b57f11c680..8295ddd9523 100644
--- a/apps/files_encryption/tests/stream.php
+++ b/apps/files_encryption/tests/stream.php
@@ -20,15 +20,13 @@
*
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Stream
+ * Class Stream
* this class provide basic stream tests
*/
-class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
+class Stream extends TestCase {
const TEST_ENCRYPTION_STREAM_USER1 = "test-stream-user1";
@@ -42,26 +40,19 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
public $stateFilesTrashbin;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_STREAM_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \OC_User::setUserId(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
- $this->userId = \Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1;
- $this->pass = \Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1;
+ \OC_User::setUserId(self::TEST_ENCRYPTION_STREAM_USER1);
+ $this->userId = self::TEST_ENCRYPTION_STREAM_USER1;
+ $this->pass = self::TEST_ENCRYPTION_STREAM_USER1;
// init filesystem view
$this->view = new \OC\Files\View('/');
@@ -70,37 +61,33 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
$this->dataShort = 'hats';
// remember files_trashbin state
- $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $this->stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
}
else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
-
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_STREAM_USER1);
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ parent::tearDownAfterClass();
}
function testStreamOptions() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -118,12 +105,14 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
$this->assertTrue(flock($handle, LOCK_SH));
$this->assertTrue(flock($handle, LOCK_UN));
+ fclose($handle);
+
// tear down
$view->unlink($filename);
}
function testStreamSetBlocking() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -134,6 +123,13 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
$handle = $view->fopen($filename, 'r');
+
+ if (\OC_Util::runningOnWindows()) {
+ fclose($handle);
+ $view->unlink($filename);
+ $this->markTestSkipped('[Windows] stream_set_blocking() does not work as expected on Windows.');
+ }
+
// set stream options
$this->assertTrue(stream_set_blocking($handle, 1));
@@ -147,7 +143,7 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
* @medium
*/
function testStreamSetTimeout() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -168,7 +164,7 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
}
function testStreamSetWriteBuffer() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -194,9 +190,9 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
*/
function testStreamFromLocalFile() {
- $filename = '/' . $this->userId . '/files/' . 'tmp-' . uniqid().'.txt';
+ $filename = '/' . $this->userId . '/files/' . 'tmp-' . $this->getUniqueID().'.txt';
- $tmpFilename = "/tmp/" . uniqid() . ".txt";
+ $tmpFilename = "/tmp/" . $this->getUniqueID() . ".txt";
// write an encrypted file
$cryptedFile = $this->view->file_put_contents($filename, $this->dataShort);
@@ -212,7 +208,7 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
file_put_contents($tmpFilename, $encryptedContent);
- \OCA\Encryption\Helper::addTmpFileToMapper($tmpFilename, $filename);
+ \OCA\Files_Encryption\Helper::addTmpFileToMapper($tmpFilename, $filename);
// try to read the file from /tmp
$handle = fopen("crypt://".$tmpFilename, "r");
@@ -221,6 +217,8 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
// check if it was successful
$this->assertEquals($this->dataShort, $contentFromTmpFile);
+ fclose($handle);
+
// clean up
unlink($tmpFilename);
$this->view->unlink($filename);
diff --git a/apps/files_encryption/tests/testcase.php b/apps/files_encryption/tests/testcase.php
new file mode 100644
index 00000000000..c2e5f4de8c1
--- /dev/null
+++ b/apps/files_encryption/tests/testcase.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Copyright (c) 2012 Sam Tuke <samtuke@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Encryption\Tests;
+
+/**
+ * Class TestCase
+ */
+abstract class TestCase extends \Test\TestCase {
+
+ /**
+ * @param string $user
+ * @param bool $create
+ * @param bool $password
+ */
+ public static function loginHelper($user, $create = false, $password = false, $loadEncryption = true) {
+ if ($create) {
+ try {
+ \OC_User::createUser($user, $user);
+ } catch (\Exception $e) {
+ // catch username is already being used from previous aborted runs
+ }
+ }
+
+ if ($password === false) {
+ $password = $user;
+ }
+
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ \OC\Files\Filesystem::tearDown();
+ \OC_User::setUserId($user);
+ \OC_Util::setupFS($user);
+
+ if ($loadEncryption) {
+ $params['uid'] = $user;
+ $params['password'] = $password;
+ \OCA\Files_Encryption\Hooks::login($params);
+ }
+ }
+
+ public static function logoutHelper() {
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId(false);
+ \OC\Files\Filesystem::tearDown();
+ }
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
+ // reset backend
+ \OC_User::clearBackends();
+ \OC_User::useBackend('database');
+
+ \OCA\Files_Encryption\Helper::registerFilesystemHooks();
+ \OCA\Files_Encryption\Helper::registerUserHooks();
+ \OCA\Files_Encryption\Helper::registerShareHooks();
+
+ \OC::registerShareHooks();
+ \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
+
+ // clear and register hooks
+ \OC_FileProxy::clearProxies();
+ \OC_FileProxy::register(new \OCA\Files_Encryption\Proxy());
+ }
+
+ public static function tearDownAfterClass() {
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->deleteAll('files_encryption');
+
+ parent::tearDownAfterClass();
+ }
+
+ protected function tearDown() {
+ parent::tearDown();
+ $this->resetKeyCache();
+ }
+
+ protected function resetKeyCache() {
+ // reset key cache for every testrun
+ $keyCache = new \ReflectionProperty('\OCA\Files_Encryption\Keymanager', 'key_cache');
+ $keyCache->setAccessible(true);
+ $keyCache->setValue(array());
+ $keyCache->setAccessible(false);
+ }
+
+}
diff --git a/apps/files_encryption/tests/trashbin.php b/apps/files_encryption/tests/trashbin.php
index d795240399c..d924b8ac77a 100755
--- a/apps/files_encryption/tests/trashbin.php
+++ b/apps/files_encryption/tests/trashbin.php
@@ -20,15 +20,13 @@
*
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Trashbin
+ * Class Trashbin
* this class provide basic trashbin app tests
*/
-class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
+class Trashbin extends TestCase {
const TEST_ENCRYPTION_TRASHBIN_USER1 = "test-trashbin-user1";
@@ -45,32 +43,22 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
public $subsubfolder;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- \OC_Hook::clear('OC_Filesystem');
- \OC_Hook::clear('OC_User');
+ parent::setUpBeforeClass();
// trashbin hooks
\OCA\Files_Trashbin\Trashbin::registerHooks();
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_TRASHBIN_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \OC_User::setUserId(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1);
- $this->userId = \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1;
- $this->pass = \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1;
+ \OC_User::setUserId(self::TEST_ENCRYPTION_TRASHBIN_USER1);
+ $this->userId = self::TEST_ENCRYPTION_TRASHBIN_USER1;
+ $this->pass = self::TEST_ENCRYPTION_TRASHBIN_USER1;
// init filesystem view
$this->view = new \OC\Files\View('/');
@@ -83,33 +71,29 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
$this->subsubfolder = '/subsubfolder1';
// remember files_trashbin state
- $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $this->stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we want to tests with app files_trashbin enabled
\OC_App::enable('files_trashbin');
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
}
else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_TRASHBIN_USER1);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ parent::tearDownAfterClass();
}
/**
@@ -119,12 +103,12 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
function testDeleteFile() {
// generate filename
- $filename = 'tmp-' . uniqid() . '.txt';
+ $filename = 'tmp-' . $this->getUniqueID() . '.txt';
$filename2 = $filename . '.backup'; // a second file with similar name
// save file with content
- $cryptedFile = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' .self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' .self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -132,59 +116,55 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename2
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename2 . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename2 . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// delete first file
- \OC\FIles\Filesystem::unlink($filename);
+ \OC\Files\Filesystem::unlink($filename);
// check if file not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// check that second file still exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
// check that key for second file still exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename2
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename2 . '/fileKey'));
// check that share key for second file still exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename2 . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// get files
$trashFiles = $this->view->getDirectoryContent(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
$trashFileSuffix = null;
// find created file with timestamp
foreach ($trashFiles as $file) {
- if (strncmp($file['path'], $filename, strlen($filename))) {
+ if (strpos($file['path'], $filename . '.d') !== false) {
$path_parts = pathinfo($file['name']);
$trashFileSuffix = $path_parts['extension'];
}
@@ -193,15 +173,16 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if we found the file we created
$this->assertNotNull($trashFileSuffix);
+ $this->assertTrue($this->view->is_dir('/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename . '.' . $trashFileSuffix));
+
// check if key for admin not exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename
- . '.key.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename . '.' . $trashFileSuffix . '/fileKey'));
// check if share key for admin not exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
/**
@@ -210,67 +191,67 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
*/
function testRestoreFile() {
// generate filename
- $filename = 'tmp-' . uniqid() . '.txt';
+ $filename = 'tmp-' . $this->getUniqueID() . '.txt';
$filename2 = $filename . '.backup'; // a second file with similar name
// save file with content
- $cryptedFile = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
// delete both files
\OC\Files\Filesystem::unlink($filename);
\OC\Files\Filesystem::unlink($filename2);
- $trashFiles = $this->view->getDirectoryContent(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
+ $trashFiles = $this->view->getDirectoryContent('/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
$trashFileSuffix = null;
$trashFileSuffix2 = null;
// find created file with timestamp
foreach ($trashFiles as $file) {
- if (strncmp($file['path'], $filename, strlen($filename))) {
+ if (strpos($file['path'], $filename . '.d') !== false) {
$path_parts = pathinfo($file['name']);
$trashFileSuffix = $path_parts['extension'];
}
- if (strncmp($file['path'], $filename2, strlen($filename2))) {
- $path_parts = pathinfo($file['name']);
- $trashFileSuffix2 = $path_parts['extension'];
- }
}
// prepare file information
$timestamp = str_replace('d', '', $trashFileSuffix);
+ // before calling the restore operation the keys shouldn't be there
+ $this->assertFalse($this->view->file_exists(
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
+ $this->assertFalse($this->view->file_exists(
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+
// restore first file
$this->assertTrue(\OCA\Files_Trashbin\Trashbin::restore($filename . '.' . $trashFileSuffix, $filename, $timestamp));
// check if file exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// check that second file was NOT restored
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
// check if key for admin exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/'
- . $filename2 . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename2 . '/fileKey'));
// check if share key for admin exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename2 . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
/**
@@ -280,7 +261,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
function testPermanentDeleteFile() {
// generate filename
- $filename = 'tmp-' . uniqid() . '.txt';
+ $filename = 'tmp-' . $this->getUniqueID() . '.txt';
// save file with content
$cryptedFile = file_put_contents('crypt:///' .$this->userId. '/files/' . $filename, $this->dataShort);
@@ -290,30 +271,29 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// delete file
\OC\Files\Filesystem::unlink($filename);
// check if file not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/'
+ . $filename . '.key'));
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// find created file with timestamp
$query = \OC_DB::prepare('SELECT `timestamp`,`type` FROM `*PREFIX*files_trash`'
@@ -327,13 +307,13 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename
- . '.key.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/'
+ . $filename . '.' . $trashFileSuffix . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// get timestamp from file
$timestamp = str_replace('d', '', $trashFileSuffix);
@@ -343,18 +323,18 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/' . $filename . '.'
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/' . $filename . '.'
. $trashFileSuffix));
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename
- . '.key.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/fileKey'));
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
}
diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php
index 210ffcc5410..c75f406cb61 100755
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
@@ -6,12 +6,12 @@
* See the COPYING-README file.
*/
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Util
+ * Class Util
*/
-class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
+class Util extends TestCase {
const TEST_ENCRYPTION_UTIL_USER1 = "test-util-user1";
const TEST_ENCRYPTION_UTIL_USER2 = "test-util-user2";
@@ -24,14 +24,14 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
public $publicKeyDir;
public $pass;
/**
- * @var OC\Files\View
+ * @var \OC\Files\View
*/
public $view;
public $keyfilesPath;
public $publicKeyPath;
public $privateKeyPath;
/**
- * @var \OCA\Encryption\Util
+ * @var \OCA\Files_Encryption\Util
*/
public $util;
public $dataShort;
@@ -41,16 +41,12 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
public $stateFilesTrashbin;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- self::setupHooks();
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER2, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER, true);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER2, true);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_LEGACY_USER, true);
// create groups
\OC_Group::createGroup(self::TEST_ENCRYPTION_UTIL_GROUP1);
@@ -60,13 +56,14 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
\OC_Group::addToGroup(self::TEST_ENCRYPTION_UTIL_USER1, self::TEST_ENCRYPTION_UTIL_GROUP1);
}
+ protected function setUp() {
+ parent::setUp();
- function setUp() {
// login user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
- \OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
- $this->userId = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1;
- $this->pass = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1;
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_UTIL_USER1);
+ $this->userId = self::TEST_ENCRYPTION_UTIL_USER1;
+ $this->pass = self::TEST_ENCRYPTION_UTIL_USER1;
// set content for encrypting / decrypting in tests
$this->dataUrl = __DIR__ . '/../lib/crypt.php';
@@ -77,66 +74,53 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
$this->legacyEncryptedDataKey = __DIR__ . '/encryption.key';
$this->legacyKey = "30943623843030686906\0\0\0\0";
- $keypair = Encryption\Crypt::createKeypair();
+ $keypair = \OCA\Files_Encryption\Crypt::createKeypair();
$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];
- $this->publicKeyDir = '/' . 'public-keys';
+ $this->publicKeyDir = \OCA\Files_Encryption\Keymanager::getPublicKeyPath();
$this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption';
- $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles';
+ $this->keysPath = $this->encryptionDir . '/' . 'keys';
$this->publicKeyPath =
- $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
+ $this->publicKeyDir . '/' . $this->userId . '.publicKey'; // e.g. data/public-keys/admin.publicKey
$this->privateKeyPath =
- $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
+ $this->encryptionDir . '/' . $this->userId . '.privateKey'; // e.g. data/admin/admin.privateKey
$this->view = new \OC\Files\View('/');
- $this->util = new Encryption\Util($this->view, $this->userId);
+ $this->util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
// remember files_trashbin state
- $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $this->stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
}
else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
- \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER2);
- \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_UTIL_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_UTIL_USER2);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_UTIL_LEGACY_USER);
//cleanup groups
\OC_Group::deleteGroup(self::TEST_ENCRYPTION_UTIL_GROUP1);
\OC_Group::deleteGroup(self::TEST_ENCRYPTION_UTIL_GROUP2);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
- }
-
- public static function setupHooks() {
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ parent::tearDownAfterClass();
}
/**
@@ -144,11 +128,11 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
* test that paths set during User construction are correct
*/
function testKeyPaths() {
- $util = new Encryption\Util($this->view, $this->userId);
+ $util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
$this->assertEquals($this->publicKeyDir, $util->getPath('publicKeyDir'));
$this->assertEquals($this->encryptionDir, $util->getPath('encryptionDir'));
- $this->assertEquals($this->keyfilesPath, $util->getPath('keyfilesPath'));
+ $this->assertEquals($this->keysPath, $util->getPath('keysPath'));
$this->assertEquals($this->publicKeyPath, $util->getPath('publicKeyPath'));
$this->assertEquals($this->privateKeyPath, $util->getPath('privateKeyPath'));
@@ -160,12 +144,12 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
*/
function testIsEncryptedPath() {
- $util = new Encryption\Util($this->view, $this->userId);
+ $util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
self::loginHelper($this->userId);
- $unencryptedFile = '/tmpUnencrypted-' . uniqid() . '.txt';
- $encryptedFile = '/tmpEncrypted-' . uniqid() . '.txt';
+ $unencryptedFile = '/tmpUnencrypted-' . $this->getUniqueID() . '.txt';
+ $encryptedFile = '/tmpEncrypted-' . $this->getUniqueID() . '.txt';
// Disable encryption proxy to write a unencrypted file
$proxyStatus = \OC_FileProxy::$enabled;
@@ -213,7 +197,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
//
// $params['uid'] = $this->userId;
// $params['password'] = $this->pass;
-// $this->assertFalse(OCA\Encryption\Hooks::login($params));
+// $this->assertFalse(OCA\Files_Encryption\Hooks::login($params));
//
// $this->view->unlink($this->privateKeyPath);
// }
@@ -223,7 +207,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
*/
function testRecoveryEnabledForUser() {
- $util = new Encryption\Util($this->view, $this->userId);
+ $util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
// Record the value so we can return it to it's original state later
$enabled = $util->recoveryEnabledForUser();
@@ -244,9 +228,9 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
*/
function testGetUidAndFilename() {
- \OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_UTIL_USER1);
- $filename = '/tmp-' . uniqid() . '.test';
+ $filename = '/tmp-' . $this->getUniqueID() . '.test';
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -257,11 +241,11 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
// Re-enable proxy - our work is done
\OC_FileProxy::$enabled = $proxyStatus;
- $util = new Encryption\Util($this->view, $this->userId);
+ $util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
list($fileOwnerUid, $file) = $util->getUidAndFilename($filename);
- $this->assertEquals(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1, $fileOwnerUid);
+ $this->assertEquals(self::TEST_ENCRYPTION_UTIL_USER1, $fileOwnerUid);
$this->assertEquals($file, $filename);
@@ -272,9 +256,9 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
* Test that data that is read by the crypto stream wrapper
*/
function testGetFileSize() {
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1);
- $filename = 'tmp-' . uniqid();
+ $filename = 'tmp-' . $this->getUniqueID();
$externalFilename = '/' . $this->userId . '/files/' . $filename;
// Test for 0 byte files
@@ -298,8 +282,8 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
function testEncryptAll() {
- $filename = "/encryptAll" . uniqid() . ".txt";
- $util = new Encryption\Util($this->view, $this->userId);
+ $filename = "/encryptAll" . $this->getUniqueID() . ".txt";
+ $util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
// disable encryption to upload a unencrypted file
\OC_App::disable('files_encryption');
@@ -329,7 +313,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
function testDecryptAll() {
- $filename = "/decryptAll" . uniqid() . ".txt";
+ $filename = "/decryptAll" . $this->getUniqueID() . ".txt";
$datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data/');
$userdir = $datadir . '/' . $this->userId . '/files/';
@@ -354,18 +338,18 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
$this->assertSame($encContent, $content);
// now we load the encryption app again
- OC_App::loadApp('files_encryption');
+ \OC_App::loadApp('files_encryption');
// init encryption app
$params = array('uid' => \OCP\User::getUser(),
'password' => \OCP\User::getUser());
- $view = new OC\Files\View('/');
- $util = new \OCA\Encryption\Util($view, \OCP\User::getUser());
+ $view = new \OC\Files\View('/');
+ $util = new \OCA\Files_Encryption\Util($view, \OCP\User::getUser());
$result = $util->initEncryption($params);
- $this->assertTrue($result instanceof \OCA\Encryption\Session);
+ $this->assertTrue($result instanceof \OCA\Files_Encryption\Session);
$successful = $util->decryptAll();
@@ -389,17 +373,19 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
// file should no longer be encrypted
$this->assertEquals(0, $fileInfoUnencrypted['encrypted']);
+ $backupPath = $this->getBackupPath('decryptAll');
+
// check if the keys where moved to the backup location
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/keyfiles.backup'));
- $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/keyfiles.backup/' . $filename . '.key'));
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/share-keys.backup'));
- $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/share-keys.backup/' . $filename . '.' . $user . '.shareKey'));
+ $this->assertTrue($this->view->is_dir($backupPath . '/keys'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/' . $filename . '/fileKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/' . $filename . '/' . $user . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . $user . '.privateKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . $user . '.publicKey'));
// cleanup
$this->view->unlink($this->userId . '/files/' . $filename);
- $this->view->deleteAll($this->userId . '/files_encryption/keyfiles.backup');
- $this->view->deleteAll($this->userId . '/files_encryption/share-keys.backup');
- OC_App::enable('files_encryption');
+ $this->view->deleteAll($backupPath);
+ \OC_App::enable('files_encryption');
}
@@ -411,47 +397,37 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
// create some dummy key files
$encPath = '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '/files_encryption';
- $this->view->file_put_contents($encPath . '/keyfiles/foo.key', 'key');
- $this->view->file_put_contents($encPath . '/share-keys/foo.user1.shareKey', 'share key');
-
- $util = new \OCA\Encryption\Util($this->view, self::TEST_ENCRYPTION_UTIL_USER1);
-
- $util->backupAllKeys('testing');
+ $this->view->mkdir($encPath . '/keys/foo');
+ $this->view->file_put_contents($encPath . '/keys/foo/fileKey', 'key');
+ $this->view->file_put_contents($encPath . '/keys/foo/user1.shareKey', 'share key');
- $encFolderContent = $this->view->getDirectoryContent($encPath);
+ $util = new \OCA\Files_Encryption\Util($this->view, self::TEST_ENCRYPTION_UTIL_USER1);
- $backupPath = '';
- foreach ($encFolderContent as $c) {
- $name = $c['name'];
- if (substr($name, 0, strlen('backup')) === 'backup') {
- $backupPath = $encPath . '/'. $c['name'];
- break;
- }
- }
+ $util->backupAllKeys('testBackupAllKeys');
- $this->assertTrue($backupPath !== '');
+ $backupPath = $this->getBackupPath('testBackupAllKeys');
// check backupDir Content
- $this->assertTrue($this->view->is_dir($backupPath . '/keyfiles'));
- $this->assertTrue($this->view->is_dir($backupPath . '/share-keys'));
- $this->assertTrue($this->view->file_exists($backupPath . '/keyfiles/foo.key'));
- $this->assertTrue($this->view->file_exists($backupPath . '/share-keys/foo.user1.shareKey'));
- $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.private.key'));
- $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.public.key'));
+ $this->assertTrue($this->view->is_dir($backupPath . '/keys'));
+ $this->assertTrue($this->view->is_dir($backupPath . '/keys/foo'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/foo/fileKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/foo/user1.shareKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.privateKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.publicKey'));
//cleanup
$this->view->deleteAll($backupPath);
- $this->view->unlink($encPath . '/keyfiles/foo.key', 'key');
- $this->view->unlink($encPath . '/share-keys/foo.user1.shareKey', 'share key');
+ $this->view->unlink($encPath . '/keys/foo/fileKey');
+ $this->view->unlink($encPath . '/keys/foo/user1.shareKey');
}
function testDescryptAllWithBrokenFiles() {
- $file1 = "/decryptAll1" . uniqid() . ".txt";
- $file2 = "/decryptAll2" . uniqid() . ".txt";
+ $file1 = "/decryptAll1" . $this->getUniqueID() . ".txt";
+ $file2 = "/decryptAll2" . $this->getUniqueID() . ".txt";
- $util = new Encryption\Util($this->view, $this->userId);
+ $util = new \OCA\Files_Encryption\Util($this->view, $this->userId);
$this->view->file_put_contents($this->userId . '/files/' . $file1, $this->dataShort);
$this->view->file_put_contents($this->userId . '/files/' . $file2, $this->dataShort);
@@ -466,8 +442,11 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
// rename keyfile for file1 so that the decryption for file1 fails
// Expected behaviour: decryptAll() returns false, file2 gets decrypted anyway
- $this->view->rename($this->userId . '/files_encryption/keyfiles/' . $file1 . '.key',
- $this->userId . '/files_encryption/keyfiles/' . $file1 . '.key.moved');
+ $this->view->rename($this->userId . '/files_encryption/keys/' . $file1 . '/fileKey',
+ $this->userId . '/files_encryption/keys/' . $file1 . '/fileKey.moved');
+
+ // need to reset key cache that we don't use the cached key
+ $this->resetKeyCache();
// decrypt all encrypted files
$result = $util->decryptAll();
@@ -485,12 +464,13 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
$this->assertEquals(0, $fileInfoUnencrypted2['encrypted']);
// keyfiles and share keys should still exist
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/keyfiles/'));
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/share-keys/'));
+ $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/keys/'));
+ $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/keys/' . $file1 . '/fileKey.moved'));
+ $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/keys/' . $file1 . '/' . $this->userId . '.shareKey'));
// rename the keyfile for file1 back
- $this->view->rename($this->userId . '/files_encryption/keyfiles/' . $file1 . '.key.moved',
- $this->userId . '/files_encryption/keyfiles/' . $file1 . '.key');
+ $this->view->rename($this->userId . '/files_encryption/keys/' . $file1 . '/fileKey.moved',
+ $this->userId . '/files_encryption/keys/' . $file1 . '/fileKey');
// try again to decrypt all encrypted files
$result = $util->decryptAll();
@@ -508,15 +488,30 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
$this->assertEquals(0, $fileInfoUnencrypted2['encrypted']);
// keyfiles and share keys should be deleted
- $this->assertFalse($this->view->is_dir($this->userId . '/files_encryption/keyfiles/'));
- $this->assertFalse($this->view->is_dir($this->userId . '/files_encryption/share-keys/'));
+ $this->assertFalse($this->view->is_dir($this->userId . '/files_encryption/keys/'));
//cleanup
+ $backupPath = $this->getBackupPath('decryptAll');
$this->view->unlink($this->userId . '/files/' . $file1);
$this->view->unlink($this->userId . '/files/' . $file2);
- $this->view->deleteAll($this->userId . '/files_encryption/keyfiles.backup');
- $this->view->deleteAll($this->userId . '/files_encryption/share-keys.backup');
+ $this->view->deleteAll($backupPath);
+
+ }
+
+ function getBackupPath($extension) {
+ $encPath = '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '/files_encryption';
+ $encFolderContent = $this->view->getDirectoryContent($encPath);
+
+ $backupPath = '';
+ foreach ($encFolderContent as $c) {
+ $name = $c['name'];
+ if (substr($name, 0, strlen('backup.' . $extension)) === 'backup.' . $extension) {
+ $backupPath = $encPath . '/'. $c['name'];
+ break;
+ }
+ }
+ return $backupPath;
}
/**
@@ -543,6 +538,43 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
}
/**
+ * Tests that filterShareReadyUsers() returns the correct list of
+ * users that are ready or not ready for encryption
+ */
+ public function testFilterShareReadyUsers() {
+ $appConfig = \OC::$server->getAppConfig();
+
+ $publicShareKeyId = $appConfig->getValue('files_encryption', 'publicShareKeyId');
+ $recoveryKeyId = $appConfig->getValue('files_encryption', 'recoveryKeyId');
+
+ $usersToTest = array(
+ 'readyUser',
+ 'notReadyUser',
+ 'nonExistingUser',
+ $publicShareKeyId,
+ $recoveryKeyId,
+ );
+ self::loginHelper('readyUser', true);
+ self::loginHelper('notReadyUser', true);
+ // delete encryption dir to make it not ready
+ $this->view->unlink('notReadyUser/files_encryption/');
+
+ // login as user1
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1);
+
+ $result = $this->util->filterShareReadyUsers($usersToTest);
+ $this->assertEquals(
+ array('readyUser', $publicShareKeyId, $recoveryKeyId),
+ $result['ready']
+ );
+ $this->assertEquals(
+ array('notReadyUser', 'nonExistingUser'),
+ $result['unready']
+ );
+ \OC_User::deleteUser('readyUser');
+ }
+
+ /**
* @param string $user
* @param bool $create
* @param bool $password
@@ -569,7 +601,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
if ($loadEncryption) {
$params['uid'] = $user;
$params['password'] = $password;
- OCA\Encryption\Hooks::login($params);
+ \OCA\Files_Encryption\Hooks::login($params);
}
}
@@ -588,15 +620,17 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
* @return boolean
*/
private function setMigrationStatus($status, $user) {
- return \OC_Preferences::setValue($user, 'files_encryption', 'migration_status', (string)$status);
+ \OC::$server->getConfig()->setUserValue($user, 'files_encryption', 'migration_status', (string)$status);
+ // the update will definitely be executed -> return value is always true
+ return true;
}
}
/**
- * dummy class extends \OCA\Encryption\Util to access protected methods for testing
+ * dummy class extends \OCA\Files_Encryption\Util to access protected methods for testing
*/
-class DummyUtilClass extends \OCA\Encryption\Util {
+class DummyUtilClass extends \OCA\Files_Encryption\Util {
public function testIsMountPointApplicableToUser($mount) {
return $this->isMountPointApplicableToUser($mount);
}
diff --git a/apps/files_encryption/tests/webdav.php b/apps/files_encryption/tests/webdav.php
index c838ddd29d1..83f4c0a77de 100755
--- a/apps/files_encryption/tests/webdav.php
+++ b/apps/files_encryption/tests/webdav.php
@@ -20,16 +20,14 @@
*
*/
-require_once __DIR__ . '/util.php';
-
-use OCA\Encryption;
+namespace OCA\Files_Encryption\Tests;
/**
- * Class Test_Encryption_Webdav
+ * Class Webdav
*
* this class provide basic webdav tests for PUT,GET and DELETE
*/
-class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
+class Webdav extends TestCase {
const TEST_ENCRYPTION_WEBDAV_USER1 = "test-webdav-user1";
@@ -45,33 +43,23 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
private $storage;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerUserHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_WEBDAV_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// reset backend
\OC_User::useBackend('database');
// set user id
- \OC_User::setUserId(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
- $this->userId = \Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1;
- $this->pass = \Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1;
+ \OC_User::setUserId(self::TEST_ENCRYPTION_WEBDAV_USER1);
+ $this->userId = self::TEST_ENCRYPTION_WEBDAV_USER1;
+ $this->pass = self::TEST_ENCRYPTION_WEBDAV_USER1;
// init filesystem view
$this->view = new \OC\Files\View('/');
@@ -80,35 +68,31 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
$this->dataShort = 'hats';
// remember files_trashbin state
- $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+ $this->stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_WEBDAV_USER1);
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
- OC_App::enable('files_trashbin');
+ \OC_App::enable('files_trashbin');
} else {
- OC_App::disable('files_trashbin');
+ \OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
-
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_WEBDAV_USER1);
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ parent::tearDownAfterClass();
}
/**
@@ -117,7 +101,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
function testWebdavPUT() {
// generate filename
- $filename = '/tmp-' . uniqid() . '.txt';
+ $filename = '/tmp-' . $this->getUniqueID() . '.txt';
// set server vars
$_SERVER['REQUEST_METHOD'] = 'OPTIONS';
@@ -137,11 +121,11 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
// check if key-file was created
$this->assertTrue($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/keyfiles/' . $filename . '.key'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if shareKey-file was created
$this->assertTrue($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/share-keys/' . $filename . '.' . $this->userId . '.shareKey'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/' . $this->userId . '.shareKey'));
// disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -154,7 +138,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// check if encrypted content is valid
- $this->assertTrue(Encryption\Crypt::isCatfileContent($encryptedContent));
+ $this->assertTrue(\OCA\Files_Encryption\Crypt::isCatfileContent($encryptedContent));
// get decrypted file contents
$decrypt = file_get_contents('crypt:///' . $this->userId . '/files' . $filename);
@@ -211,11 +195,11 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
// check if key-file was removed
$this->assertFalse($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/keyfiles' . $filename . '.key'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if shareKey-file was removed
$this->assertFalse($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/share-keys' . $filename . '.' . $this->userId . '.shareKey'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/' . $this->userId . '.shareKey'));
}
/**
@@ -227,14 +211,14 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
*/
function handleWebdavRequest($body = false) {
// Backends
- $authBackend = new OC_Connector_Sabre_Auth();
- $lockBackend = new OC_Connector_Sabre_Locks();
- $requestBackend = new OC_Connector_Sabre_Request();
+ $authBackend = new \OC_Connector_Sabre_Auth();
+ $lockBackend = new \OC_Connector_Sabre_Locks();
+ $requestBackend = new \OC_Connector_Sabre_Request();
// Create ownCloud Dir
$root = '/' . $this->userId . '/files';
$view = new \OC\Files\View($root);
- $publicDir = new OC_Connector_Sabre_Directory($view, $view->getFileInfo(''));
+ $publicDir = new \OC_Connector_Sabre_Directory($view, $view->getFileInfo(''));
$objectTree = new \OC\Connector\Sabre\ObjectTree();
$mountManager = \OC\Files\Filesystem::getMountManager();
$objectTree->init($publicDir, $view, $mountManager);
@@ -248,8 +232,8 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, 'ownCloud'));
$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload
- $server->addPlugin(new OC_Connector_Sabre_QuotaPlugin($view));
- $server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
+ $server->addPlugin(new \OC_Connector_Sabre_QuotaPlugin($view));
+ $server->addPlugin(new \OC_Connector_Sabre_MaintenancePlugin());
$server->debugExceptions = true;
// And off we go!
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Aws.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Aws.php
index 1824e09c664..9cd4ae2e16f 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Aws.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Aws.php
@@ -28,7 +28,7 @@ class Aws extends ServiceBuilder
/**
* @var string Current version of the SDK
*/
- const VERSION = '2.6.15';
+ const VERSION = '2.7.5';
/**
* Create a new service locator for the AWS SDK
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/AbstractClient.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/AbstractClient.php
index 0e2aa1a88ed..c9ee86a66ff 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/AbstractClient.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/AbstractClient.php
@@ -17,7 +17,6 @@
namespace Aws\Common\Client;
use Aws\Common\Aws;
-use Aws\Common\Credentials\Credentials;
use Aws\Common\Credentials\CredentialsInterface;
use Aws\Common\Credentials\NullCredentials;
use Aws\Common\Enum\ClientOptions as Options;
@@ -111,13 +110,7 @@ abstract class AbstractClient extends Client implements AwsClientInterface
/**
* Get an endpoint for a specific region from a service description
- *
- * @param ServiceDescriptionInterface $description Service description
- * @param string $region Region of the endpoint
- * @param string $scheme URL scheme
- *
- * @return string
- * @throws InvalidArgumentException
+ * @deprecated This function will no longer be updated to work with new regions.
*/
public static function getEndpoint(ServiceDescriptionInterface $description, $region, $scheme)
{
@@ -177,12 +170,27 @@ abstract class AbstractClient extends Client implements AwsClientInterface
$config = $this->getConfig();
$formerRegion = $config->get(Options::REGION);
$global = $this->serviceDescription->getData('globalEndpoint');
+ $provider = $config->get('endpoint_provider');
+
+ if (!$provider) {
+ throw new \RuntimeException('No endpoint provider configured');
+ }
// Only change the region if the service does not have a global endpoint
if (!$global || $this->serviceDescription->getData('namespace') === 'S3') {
- $baseUrl = self::getEndpoint($this->serviceDescription, $region, $config->get(Options::SCHEME));
- $this->setBaseUrl($baseUrl);
- $config->set(Options::BASE_URL, $baseUrl)->set(Options::REGION, $region);
+
+ $endpoint = call_user_func(
+ $provider,
+ array(
+ 'scheme' => $config->get(Options::SCHEME),
+ 'region' => $region,
+ 'service' => $config->get(Options::SERVICE)
+ )
+ );
+
+ $this->setBaseUrl($endpoint['endpoint']);
+ $config->set(Options::BASE_URL, $endpoint['endpoint']);
+ $config->set(Options::REGION, $region);
// Update the signature if necessary
$signature = $this->getSignature();
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/ClientBuilder.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/ClientBuilder.php
index dd81cba2351..b34a67ffd92 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/ClientBuilder.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Client/ClientBuilder.php
@@ -20,13 +20,13 @@ use Aws\Common\Credentials\Credentials;
use Aws\Common\Credentials\CredentialsInterface;
use Aws\Common\Credentials\NullCredentials;
use Aws\Common\Enum\ClientOptions as Options;
-use Aws\Common\Enum\Region;
use Aws\Common\Exception\ExceptionListener;
use Aws\Common\Exception\InvalidArgumentException;
use Aws\Common\Exception\NamespaceExceptionFactory;
use Aws\Common\Exception\Parser\DefaultXmlExceptionParser;
use Aws\Common\Exception\Parser\ExceptionParserInterface;
use Aws\Common\Iterator\AwsResourceIteratorFactory;
+use Aws\Common\RulesEndpointProvider;
use Aws\Common\Signature\EndpointSignatureInterface;
use Aws\Common\Signature\SignatureInterface;
use Aws\Common\Signature\SignatureV2;
@@ -38,7 +38,6 @@ use Guzzle\Plugin\Backoff\CurlBackoffStrategy;
use Guzzle\Plugin\Backoff\ExponentialBackoffStrategy;
use Guzzle\Plugin\Backoff\HttpBackoffStrategy;
use Guzzle\Plugin\Backoff\TruncatedBackoffStrategy;
-use Guzzle\Service\Client;
use Guzzle\Service\Description\ServiceDescription;
use Guzzle\Service\Resource\ResourceIteratorClassFactory;
use Guzzle\Log\LogAdapterInterface;
@@ -200,6 +199,10 @@ class ClientBuilder
(self::$commonConfigRequirements + $this->configRequirements)
);
+ if (!isset($config['endpoint_provider'])) {
+ $config['endpoint_provider'] = RulesEndpointProvider::fromDefaults();
+ }
+
// Resolve the endpoint, signature, and credentials
$description = $this->updateConfigFromDescription($config);
$signature = $this->getSignature($description, $config);
@@ -366,33 +369,36 @@ class ClientBuilder
$this->setIteratorsConfig($iterators);
}
- // Ensure that the service description has regions
- if (!$description->getData('regions')) {
- throw new InvalidArgumentException(
- 'No regions found in the ' . $description->getData('serviceFullName'). ' description'
- );
- }
-
// Make sure a valid region is set
$region = $config->get(Options::REGION);
$global = $description->getData('globalEndpoint');
+
if (!$global && !$region) {
throw new InvalidArgumentException(
'A region is required when using ' . $description->getData('serviceFullName')
- . '. Set "region" to one of: ' . implode(', ', array_keys($description->getData('regions')))
);
} elseif ($global && (!$region || $description->getData('namespace') !== 'S3')) {
- $region = Region::US_EAST_1;
- $config->set(Options::REGION, $region);
+ $region = 'us-east-1';
+ $config->set(Options::REGION, 'us-east-1');
}
if (!$config->get(Options::BASE_URL)) {
- // Set the base URL using the scheme and hostname of the service's region
- $config->set(Options::BASE_URL, AbstractClient::getEndpoint(
- $description,
- $region,
- $config->get(Options::SCHEME)
- ));
+ $endpoint = call_user_func(
+ $config->get('endpoint_provider'),
+ array(
+ 'scheme' => $config->get(Options::SCHEME),
+ 'region' => $region,
+ 'service' => $config->get(Options::SERVICE)
+ )
+ );
+ $config->set(Options::BASE_URL, $endpoint['endpoint']);
+
+ // Set a signature if one was not explicitly provided.
+ if (!$config->hasKey(Options::SIGNATURE)
+ && isset($endpoint['signatureVersion'])
+ ) {
+ $config->set(Options::SIGNATURE, $endpoint['signatureVersion']);
+ }
}
return $description;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Enum/Region.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Enum/Region.php
index b44bd971beb..017d1d7e16c 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Enum/Region.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Enum/Region.php
@@ -39,6 +39,9 @@ class Region extends Enum
const EU_WEST_1 = 'eu-west-1';
const IRELAND = 'eu-west-1';
+
+ const EU_CENTRAL_1 = 'eu-central-1';
+ const FRANKFURT = 'eu-central-1';
const AP_SOUTHEAST_1 = 'ap-southeast-1';
const SINGAPORE = 'ap-southeast-1';
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Hash/HashUtils.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Hash/HashUtils.php
index dd82ff75edd..f66af6edf53 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Hash/HashUtils.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Hash/HashUtils.php
@@ -38,6 +38,10 @@ class HashUtils
$useNative = function_exists('hex2bin');
}
+ if (!$useNative && strlen($hash) % 2 !== 0) {
+ $hash = '0' . $hash;
+ }
+
return $useNative ? hex2bin($hash) : pack("H*", $hash);
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php
index a1ad678610c..8690d5cb562 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php
@@ -49,7 +49,7 @@ abstract class AbstractUploadBuilder
/**
* Return a new instance of the UploadBuilder
*
- * @return self
+ * @return static
*/
public static function newInstance()
{
@@ -61,7 +61,7 @@ abstract class AbstractUploadBuilder
*
* @param AwsClientInterface $client Client to use
*
- * @return self
+ * @return $this
*/
public function setClient(AwsClientInterface $client)
{
@@ -78,7 +78,7 @@ abstract class AbstractUploadBuilder
* multipart upload. When an ID is passed, the builder will create a
* state object using the data from a ListParts API response.
*
- * @return self
+ * @return $this
*/
public function resumeFrom($state)
{
@@ -94,7 +94,7 @@ abstract class AbstractUploadBuilder
* You can also stream from a resource returned from fopen or a Guzzle
* {@see EntityBody} object.
*
- * @return self
+ * @return $this
* @throws InvalidArgumentException when the source cannot be found or opened
*/
public function setSource($source)
@@ -123,7 +123,7 @@ abstract class AbstractUploadBuilder
*
* @param array $headers Headers to add to the uploaded object
*
- * @return self
+ * @return $this
*/
public function setHeaders(array $headers)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/aws-config.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/aws-config.php
index 6a1e30c6413..710ad0d3385 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/aws-config.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/aws-config.php
@@ -78,6 +78,12 @@ return array(
'class' => 'Aws\CloudWatch\CloudWatchClient'
),
+ 'cloudwatchlogs' => array(
+ 'alias' => 'CloudWatchLogs',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudWatchLogs\CloudWatchLogsClient'
+ ),
+
'cognito-identity' => array(
'alias' => 'CognitoIdentity',
'extends' => 'default_settings',
@@ -94,10 +100,16 @@ return array(
'cognitosync' => array('extends' => 'cognito-sync'),
- 'cloudwatchlogs' => array(
- 'alias' => 'CloudWatchLogs',
+ 'codedeploy' => array(
+ 'alias' => 'CodeDeploy',
'extends' => 'default_settings',
- 'class' => 'Aws\CloudWatchLogs\CloudWatchLogsClient'
+ 'class' => 'Aws\CodeDeploy\CodeDeployClient'
+ ),
+
+ 'config' => array(
+ 'alias' => 'ConfigService',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\ConfigService\ConfigServiceClient'
),
'datapipeline' => array(
@@ -173,6 +185,18 @@ return array(
'class' => 'Aws\Kinesis\KinesisClient'
),
+ 'kms' => array(
+ 'alias' => 'Kms',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Kms\KmsClient'
+ ),
+
+ 'lambda' => array(
+ 'alias' => 'Lambda',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Lambda\LambdaClient'
+ ),
+
'iam' => array(
'alias' => 'Iam',
'extends' => 'default_settings',
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/public-endpoints.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/public-endpoints.php
new file mode 100644
index 00000000000..f24f3404f21
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Resources/public-endpoints.php
@@ -0,0 +1,64 @@
+<?php
+return array(
+ 'version' => 2,
+ 'endpoints' => array(
+ '*/*' => array(
+ 'endpoint' => '{service}.{region}.amazonaws.com'
+ ),
+ 'cn-north-1/*' => array(
+ 'endpoint' => '{service}.{region}.amazonaws.com.cn',
+ 'signatureVersion' => 'v4'
+ ),
+ 'us-gov-west-1/iam' => array(
+ 'endpoint' => 'iam.us-gov.amazonaws.com'
+ ),
+ 'us-gov-west-1/sts' => array(
+ 'endpoint' => 'sts.us-gov.amazonaws.com'
+ ),
+ 'us-gov-west-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ '*/cloudfront' => array(
+ 'endpoint' => 'cloudfront.amazonaws.com'
+ ),
+ '*/iam' => array(
+ 'endpoint' => 'iam.amazonaws.com'
+ ),
+ '*/importexport' => array(
+ 'endpoint' => 'importexport.amazonaws.com'
+ ),
+ '*/route53' => array(
+ 'endpoint' => 'route53.amazonaws.com'
+ ),
+ '*/sts' => array(
+ 'endpoint' => 'sts.amazonaws.com'
+ ),
+ 'us-east-1/sdb' => array(
+ 'endpoint' => 'sdb.amazonaws.com'
+ ),
+ 'us-east-1/s3' => array(
+ 'endpoint' => 's3.amazonaws.com'
+ ),
+ 'us-west-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'us-west-2/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'eu-west-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'ap-southeast-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'ap-southeast-2/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'ap-northeast-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'sa-east-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ )
+ )
+);
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/RulesEndpointProvider.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/RulesEndpointProvider.php
new file mode 100644
index 00000000000..ec57cb862ca
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/RulesEndpointProvider.php
@@ -0,0 +1,67 @@
+<?php
+namespace Aws\Common;
+
+/**
+ * Provides endpoints based on a rules configuration file.
+ */
+class RulesEndpointProvider
+{
+ /** @var array */
+ private $patterns;
+
+ /**
+ * @param array $patterns Hash of endpoint patterns mapping to endpoint
+ * configurations.
+ */
+ public function __construct(array $patterns)
+ {
+ $this->patterns = $patterns;
+ }
+
+ /**
+ * Creates and returns the default RulesEndpointProvider based on the
+ * public rule sets.
+ *
+ * @return self
+ */
+ public static function fromDefaults()
+ {
+ return new self(require __DIR__ . '/Resources/public-endpoints.php');
+ }
+
+ public function __invoke(array $args = array())
+ {
+ if (!isset($args['service'])) {
+ throw new \InvalidArgumentException('Requires a "service" value');
+ }
+
+ if (!isset($args['region'])) {
+ throw new \InvalidArgumentException('Requires a "region" value');
+ }
+
+ foreach ($this->getKeys($args['region'], $args['service']) as $key) {
+ if (isset($this->patterns['endpoints'][$key])) {
+ return $this->expand($this->patterns['endpoints'][$key], $args);
+ }
+ }
+
+ throw new \RuntimeException('Could not resolve endpoint');
+ }
+
+ private function expand(array $config, array $args)
+ {
+ $scheme = isset($args['scheme']) ? $args['scheme'] : 'https';
+ $config['endpoint'] = $scheme . '://' . str_replace(
+ array('{service}', '{region}'),
+ array($args['service'], $args['region']),
+ $config['endpoint']
+ );
+
+ return $config;
+ }
+
+ private function getKeys($region, $service)
+ {
+ return array("$region/$service", "$region/*", "*/$service", "*/*");
+ }
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Signature/SignatureV4.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Signature/SignatureV4.php
index fda63a95fc4..38b60b4594b 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Signature/SignatureV4.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/Common/Signature/SignatureV4.php
@@ -19,7 +19,6 @@ namespace Aws\Common\Signature;
use Aws\Common\Credentials\CredentialsInterface;
use Aws\Common\Enum\DateFormat;
use Aws\Common\HostNameUtils;
-use Guzzle\Http\Message\EntityEnclosingRequest;
use Guzzle\Http\Message\EntityEnclosingRequestInterface;
use Guzzle\Http\Message\RequestFactory;
use Guzzle\Http\Message\RequestInterface;
@@ -304,43 +303,42 @@ class SignatureV4 extends AbstractSignature implements EndpointSignatureInterfac
*/
private function createSigningContext(RequestInterface $request, $payload)
{
+ $signable = array(
+ 'host' => true,
+ 'date' => true,
+ 'content-md5' => true
+ );
+
// Normalize the path as required by SigV4 and ensure it's absolute
$canon = $request->getMethod() . "\n"
. $this->createCanonicalizedPath($request) . "\n"
. $this->getCanonicalizedQueryString($request) . "\n";
- // Create the canonical headers
- $headers = array();
+ $canonHeaders = array();
+
foreach ($request->getHeaders()->getAll() as $key => $values) {
$key = strtolower($key);
- if ($key != 'user-agent') {
- $headers[$key] = array();
- foreach ($values as $value) {
- $headers[$key][] = preg_replace('/\s+/', ' ', trim($value));
- }
- // Sort the value if there is more than one
- if (count($values) > 1) {
- sort($headers[$key]);
+ if (isset($signable[$key]) || substr($key, 0, 6) === 'x-amz-') {
+ $values = $values->toArray();
+ if (count($values) == 1) {
+ $values = $values[0];
+ } else {
+ sort($values);
+ $values = implode(',', $values);
}
+ $canonHeaders[$key] = $key . ':' . preg_replace('/\s+/', ' ', $values);
}
}
- // The headers must be sorted
- ksort($headers);
-
- // Continue to build the canonical request by adding headers
- foreach ($headers as $key => $values) {
- // Combine multi-value headers into a comma separated list
- $canon .= $key . ':' . implode(',', $values) . "\n";
- }
-
- // Create the signed headers
- $signedHeaders = implode(';', array_keys($headers));
- $canon .= "\n{$signedHeaders}\n{$payload}";
+ ksort($canonHeaders);
+ $signedHeadersString = implode(';', array_keys($canonHeaders));
+ $canon .= implode("\n", $canonHeaders) . "\n\n"
+ . $signedHeadersString . "\n"
+ . $payload;
return array(
'canonical_request' => $canon,
- 'signed_headers' => $signedHeaders
+ 'signed_headers' => $signedHeadersString
);
}
@@ -394,6 +392,8 @@ class SignatureV4 extends AbstractSignature implements EndpointSignatureInterfac
foreach ($queryParams as $key => $values) {
if (is_array($values)) {
sort($values);
+ } elseif ($values === 0) {
+ $values = array('0');
} elseif (!$values) {
$values = array('');
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Acp.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Acp.php
index 8325a2b6570..6c19f668400 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Acp.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Acp.php
@@ -54,7 +54,7 @@ class Acp implements ToArrayInterface, \IteratorAggregate, \Countable
*
* @param array $data Array of ACP data
*
- * @return self
+ * @return Acp
*/
public static function fromArray(array $data)
{
@@ -100,7 +100,7 @@ class Acp implements ToArrayInterface, \IteratorAggregate, \Countable
*
* @param Grantee $owner ACP policy owner
*
- * @return self
+ * @return $this
*
* @throws InvalidArgumentException if the grantee does not have an ID set
*/
@@ -130,7 +130,7 @@ class Acp implements ToArrayInterface, \IteratorAggregate, \Countable
*
* @param array|\Traversable $grants List of grants for the ACP
*
- * @return self
+ * @return $this
*
* @throws InvalidArgumentException
*/
@@ -167,7 +167,7 @@ class Acp implements ToArrayInterface, \IteratorAggregate, \Countable
*
* @param Grant $grant Grant to add
*
- * @return self
+ * @return $this
*/
public function addGrant(Grant $grant)
{
@@ -205,7 +205,7 @@ class Acp implements ToArrayInterface, \IteratorAggregate, \Countable
*
* @param AbstractCommand $command Command to be updated
*
- * @return self
+ * @return $this
*/
public function updateCommand(AbstractCommand $command)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/AcpBuilder.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/AcpBuilder.php
index 0e41c3cb0a0..b6d1be72167 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/AcpBuilder.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/AcpBuilder.php
@@ -36,11 +36,11 @@ class AcpBuilder
/**
* Static method for chainable instantiation
*
- * @return self
+ * @return static
*/
public static function newInstance()
{
- return new self;
+ return new static;
}
/**
@@ -49,7 +49,7 @@ class AcpBuilder
* @param string $id Owner identifier
* @param string $displayName Owner display name
*
- * @return self
+ * @return $this
*/
public function setOwner($id, $displayName = null)
{
@@ -65,7 +65,7 @@ class AcpBuilder
* @param string $id Grantee identifier
* @param string $displayName Grantee display name
*
- * @return self
+ * @return $this
*/
public function addGrantForUser($permission, $id, $displayName = null)
{
@@ -81,7 +81,7 @@ class AcpBuilder
* @param string $permission Permission for the Grant
* @param string $email Grantee email address
*
- * @return self
+ * @return $this
*/
public function addGrantForEmail($permission, $email)
{
@@ -97,7 +97,7 @@ class AcpBuilder
* @param string $permission Permission for the Grant
* @param string $group Grantee group
*
- * @return self
+ * @return $this
*/
public function addGrantForGroup($permission, $group)
{
@@ -113,7 +113,7 @@ class AcpBuilder
* @param string $permission Permission for the Grant
* @param Grantee $grantee The Grantee for the Grant
*
- * @return self
+ * @return $this
*/
public function addGrant($permission, Grantee $grantee)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/ClearBucket.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/ClearBucket.php
index 77ce9378f45..09982d8ae7d 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/ClearBucket.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/ClearBucket.php
@@ -81,7 +81,7 @@ class ClearBucket extends AbstractHasDispatcher
*
* @param string $bucket Name of the bucket to clear
*
- * @return self
+ * @return $this
*/
public function setBucket($bucket)
{
@@ -114,7 +114,7 @@ class ClearBucket extends AbstractHasDispatcher
*
* @param \Iterator $iterator Iterator used to yield the keys to be deleted
*
- * @return self
+ * @return $this
*/
public function setIterator(\Iterator $iterator)
{
@@ -129,7 +129,7 @@ class ClearBucket extends AbstractHasDispatcher
* @param string $mfa MFA token to send with each request. The value is the concatenation of the authentication
* device's serial number, a space, and the value displayed on your authentication device.
*
- * @return self
+ * @return $this
*/
public function setMfa($mfa)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsBatch.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsBatch.php
index 17d8af33a73..ab6425bbb87 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsBatch.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsBatch.php
@@ -38,7 +38,7 @@ class DeleteObjectsBatch extends AbstractBatchDecorator
* @param string $bucket Bucket that contains the objects to delete
* @param string $mfa MFA token to use with the request
*
- * @return self
+ * @return static
*/
public static function factory(AwsClientInterface $client, $bucket, $mfa = null)
{
@@ -47,7 +47,7 @@ class DeleteObjectsBatch extends AbstractBatchDecorator
->transferWith(new DeleteObjectsTransfer($client, $bucket, $mfa))
->build();
- return new self($batch);
+ return new static($batch);
}
/**
@@ -56,7 +56,7 @@ class DeleteObjectsBatch extends AbstractBatchDecorator
* @param string $key Key of the object
* @param string $versionId VersionID of the object
*
- * @return self
+ * @return $this
*/
public function addKey($key, $versionId = null)
{
@@ -82,6 +82,6 @@ class DeleteObjectsBatch extends AbstractBatchDecorator
throw new InvalidArgumentException('Item must be a DeleteObject command or array containing a Key and VersionId key.');
}
- return $this->decoratedBatch->add($item);
+ return parent::add($item);
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsTransfer.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsTransfer.php
index c3d3828c4e3..5918ff18ff7 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsTransfer.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/DeleteObjectsTransfer.php
@@ -64,7 +64,7 @@ class DeleteObjectsTransfer implements BatchTransferInterface
*
* @param string $token MFA token
*
- * @return self
+ * @return $this
*/
public function setMfa($token)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grant.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grant.php
index afc2757e8cc..2e35f059511 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grant.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grant.php
@@ -63,7 +63,7 @@ class Grant implements ToArrayInterface
*
* @param Grantee $grantee Affected grantee
*
- * @return self
+ * @return $this
*/
public function setGrantee(Grantee $grantee)
{
@@ -87,7 +87,7 @@ class Grant implements ToArrayInterface
*
* @param string $permission Permission applied
*
- * @return self
+ * @return $this
*
* @throws InvalidArgumentException
*/
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grantee.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grantee.php
index f49c70fca1c..7634b84a350 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grantee.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/Grantee.php
@@ -214,7 +214,7 @@ class Grantee implements ToArrayInterface
*/
public function getHeaderValue()
{
- $key = self::$headerMap[$this->type];
+ $key = static::$headerMap[$this->type];
return "{$key}=\"{$this->id}\"";
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/MultipartUpload/UploadBuilder.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/MultipartUpload/UploadBuilder.php
index cae7658d72e..e30f23a36cf 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/MultipartUpload/UploadBuilder.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Model/MultipartUpload/UploadBuilder.php
@@ -67,7 +67,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param string $bucket Name of the bucket
*
- * @return self
+ * @return $this
*/
public function setBucket($bucket)
{
@@ -79,7 +79,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param string $key Key of the object to upload
*
- * @return self
+ * @return $this
*/
public function setKey($key)
{
@@ -91,7 +91,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param int $minSize Minimum acceptable part size in bytes
*
- * @return self
+ * @return $this
*/
public function setMinPartSize($minSize)
{
@@ -107,7 +107,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param int $concurrency Concurrency level
*
- * @return self
+ * @return $this
*/
public function setConcurrency($concurrency)
{
@@ -121,7 +121,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param string $md5 MD5 hash of the entire body
*
- * @return self
+ * @return $this
*/
public function setMd5($md5)
{
@@ -137,7 +137,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param bool $calculateMd5 Set to true to calculate the MD5 hash of the body
*
- * @return self
+ * @return $this
*/
public function calculateMd5($calculateMd5)
{
@@ -152,7 +152,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param bool $usePartMd5 Set to true to calculate the MD5 has of each part
*
- * @return self
+ * @return $this
*/
public function calculatePartMd5($usePartMd5)
{
@@ -166,7 +166,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param Acp $acp ACP to set on the object
*
- * @return self
+ * @return $this
*/
public function setAcp(Acp $acp)
{
@@ -179,7 +179,7 @@ class UploadBuilder extends AbstractUploadBuilder
* @param string $name Option name
* @param string $value Option value
*
- * @return self
+ * @return $this
*/
public function setOption($name, $value)
{
@@ -193,7 +193,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param array $options Array of CreateMultipartUpload operation parameters
*
- * @return self
+ * @return $this
*/
public function addOptions(array $options)
{
@@ -207,7 +207,7 @@ class UploadBuilder extends AbstractUploadBuilder
*
* @param array $options Transfer options
*
- * @return self
+ * @return $this
*/
public function setTransferOptions(array $options)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Resources/s3-2006-03-01.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Resources/s3-2006-03-01.php
index 8739cef6a04..0d7b023f029 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Resources/s3-2006-03-01.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Resources/s3-2006-03-01.php
@@ -45,6 +45,11 @@ return array (
'https' => true,
'hostname' => 's3-eu-west-1.amazonaws.com',
),
+ 'eu-central-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-eu-central-1.amazonaws.com',
+ ),
'ap-northeast-1' => array(
'http' => true,
'https' => true,
@@ -355,6 +360,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-key-MD5',
),
+ 'CopySourceSSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-server-side-encryption-aws-kms-key-id',
+ ),
'ACP' => array(
'type' => 'object',
'additionalProperties' => true,
@@ -564,6 +574,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'ACP' => array(
'type' => 'object',
'additionalProperties' => true,
@@ -1068,6 +1083,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'SaveAs' => array(
'location' => 'response_body',
),
@@ -1236,6 +1256,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
),
'errorResponses' => array(
array(
@@ -1843,10 +1868,22 @@ return array (
'location' => 'uri',
),
'TopicConfiguration' => array(
- 'required' => true,
'type' => 'object',
'location' => 'xml',
'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ ),
+ ),
'Event' => array(
'type' => 'string',
),
@@ -1855,6 +1892,59 @@ return array (
),
),
),
+ 'QueueConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ ),
+ ),
+ 'Queue' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'CloudFunctionConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ ),
+ ),
+ 'CloudFunction' => array(
+ 'type' => 'string',
+ ),
+ 'InvocationRole' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
),
),
'PutBucketPolicy' => array(
@@ -2241,6 +2331,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'ACP' => array(
'type' => 'object',
'additionalProperties' => true,
@@ -2399,6 +2494,11 @@ return array (
'Aws\\S3\\S3Client::explodeKey',
),
),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'versionId',
+ ),
'Days' => array(
'required' => true,
'type' => 'numeric',
@@ -2488,6 +2588,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
),
),
'UploadPartCopy' => array(
@@ -2602,6 +2707,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-key-MD5',
),
+ 'CopySourceSSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'command.expects' => array(
'static' => true,
'default' => 'application/xml',
@@ -2655,6 +2765,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-version-id',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -2698,6 +2813,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -2750,6 +2870,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -3197,6 +3322,21 @@ return array (
'type' => 'object',
'location' => 'xml',
'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
'Event' => array(
'type' => 'string',
),
@@ -3205,6 +3345,63 @@ return array (
),
),
),
+ 'QueueConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Queue' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'CloudFunctionConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'CloudFunction' => array(
+ 'type' => 'string',
+ ),
+ 'InvocationRole' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -3478,6 +3675,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -3676,6 +3878,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -3745,6 +3952,10 @@ return array (
'type' => 'string',
'location' => 'xml',
),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
'NextUploadIdMarker' => array(
'type' => 'string',
'location' => 'xml',
@@ -3949,6 +4160,10 @@ return array (
'type' => 'string',
'location' => 'xml',
),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
'MaxKeys' => array(
'type' => 'numeric',
'location' => 'xml',
@@ -4042,6 +4257,10 @@ return array (
'type' => 'string',
'location' => 'xml',
),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
'MaxKeys' => array(
'type' => 'numeric',
'location' => 'xml',
@@ -4298,6 +4517,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -4349,6 +4573,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
@@ -4387,6 +4616,11 @@ return array (
'location' => 'header',
'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
'RequestId' => array(
'location' => 'header',
'sentAs' => 'x-amz-request-id',
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3Client.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3Client.php
index 219e37eb92d..7f7c7cf22c4 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3Client.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3Client.php
@@ -24,7 +24,6 @@ use Aws\Common\Enum\ClientOptions as Options;
use Aws\Common\Exception\RuntimeException;
use Aws\Common\Exception\InvalidArgumentException;
use Aws\Common\Signature\SignatureV4;
-use Aws\Common\Signature\SignatureInterface;
use Aws\Common\Model\MultipartUpload\AbstractTransfer;
use Aws\S3\Exception\AccessDeniedException;
use Aws\S3\Exception\Parser\S3ExceptionParser;
@@ -156,7 +155,7 @@ class S3Client extends AbstractClient
*
* @param array|Collection $config Client configuration data
*
- * @return self
+ * @return S3Client
* @link http://docs.aws.amazon.com/aws-sdk-php/guide/latest/configuration.html#client-configuration-options
*/
public static function factory($config = array())
@@ -165,10 +164,10 @@ class S3Client extends AbstractClient
// Configure the custom exponential backoff plugin for retrying S3 specific errors
if (!isset($config[Options::BACKOFF])) {
- $config[Options::BACKOFF] = self::createBackoffPlugin($exceptionParser);
+ $config[Options::BACKOFF] = static::createBackoffPlugin($exceptionParser);
}
- $config[Options::SIGNATURE] = $signature = self::createSignature($config);
+ $config[Options::SIGNATURE] = $signature = static::createSignature($config);
$client = ClientBuilder::factory(__NAMESPACE__)
->setConfig($config)
@@ -222,7 +221,7 @@ class S3Client extends AbstractClient
// Add aliases for some S3 operations
$default = CompositeFactory::getDefaultChain($client);
$default->add(
- new AliasFactory($client, self::$commandAliases),
+ new AliasFactory($client, static::$commandAliases),
'Guzzle\Service\Command\Factory\ServiceDescriptionFactory'
);
$client->setCommandFactory($default);
@@ -266,11 +265,16 @@ class S3Client extends AbstractClient
{
$currentValue = isset($config[Options::SIGNATURE]) ? $config[Options::SIGNATURE] : null;
+ // Force v4 if no value is provided, a region is in the config, and
+ // the region starts with "cn-" or "eu-central-".
+ $requiresV4 = !$currentValue
+ && isset($config['region'])
+ && (strpos($config['region'], 'eu-central-') === 0
+ || strpos($config['region'], 'cn-') === 0);
+
// Use the Amazon S3 signature V4 when the value is set to "v4" or when
// the value is not set and the region starts with "cn-".
- if ($currentValue == 'v4' ||
- (!$currentValue && isset($config['region']) && substr($config['region'], 0, 3) == 'cn-')
- ) {
+ if ($currentValue == 'v4' || $requiresV4) {
// Force SignatureV4 for specific regions or if specified in the config
$currentValue = new S3SignatureV4('s3');
} elseif (!$currentValue || $currentValue == 's3') {
@@ -456,7 +460,7 @@ class S3Client extends AbstractClient
/**
* Register the Amazon S3 stream wrapper and associates it with this client object
*
- * @return self
+ * @return $this
*/
public function registerStreamWrapper()
{
@@ -515,8 +519,7 @@ class S3Client extends AbstractClient
->setTransferOptions($options->toArray())
->addOptions($options['params'])
->setOption('ACL', $acl)
- ->build()
- ->upload();
+ ->build();
if ($options['before_upload']) {
$transfer->getEventDispatcher()->addListener(
@@ -525,7 +528,7 @@ class S3Client extends AbstractClient
);
}
- return $transfer;
+ return $transfer->upload();
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3SignatureV4.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3SignatureV4.php
index 7587af0fcba..edbb4fcd082 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3SignatureV4.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/S3SignatureV4.php
@@ -32,7 +32,10 @@ class S3SignatureV4 extends SignatureV4 implements S3SignatureInterface
public function signRequest(RequestInterface $request, CredentialsInterface $credentials)
{
if (!$request->hasHeader('x-amz-content-sha256')) {
- $request->setHeader('x-amz-content-sha256', $this->getPresignedPayload($request));
+ $request->setHeader(
+ 'x-amz-content-sha256',
+ $this->getPayload($request)
+ );
}
parent::signRequest($request, $credentials);
@@ -44,14 +47,7 @@ class S3SignatureV4 extends SignatureV4 implements S3SignatureInterface
*/
protected function getPresignedPayload(RequestInterface $request)
{
- $result = parent::getPresignedPayload($request);
-
- // If the body is empty, then sign with 'UNSIGNED-PAYLOAD'
- if ($result === self::DEFAULT_PAYLOAD) {
- $result = hash('sha256', 'UNSIGNED-PAYLOAD');
- }
-
- return $result;
+ return 'UNSIGNED-PAYLOAD';
}
/**
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/StreamWrapper.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/StreamWrapper.php
index 3bb85aae6df..b0bdb21f564 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/StreamWrapper.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/StreamWrapper.php
@@ -133,7 +133,7 @@ class StreamWrapper
}
stream_wrapper_register('s3', get_called_class(), STREAM_IS_URL);
- self::$client = $client;
+ static::$client = $client;
}
/**
@@ -172,7 +172,7 @@ class StreamWrapper
}
// When using mode "x" validate if the file exists before attempting to read
- if ($mode == 'x' && self::$client->doesObjectExist($params['Bucket'], $params['Key'], $this->getOptions())) {
+ if ($mode == 'x' && static::$client->doesObjectExist($params['Bucket'], $params['Key'], $this->getOptions())) {
$errors[] = "{$path} already exists on Amazon S3";
}
@@ -219,7 +219,7 @@ class StreamWrapper
}
try {
- self::$client->putObject($params);
+ static::$client->putObject($params);
return true;
} catch (\Exception $e) {
return $this->triggerError($e->getMessage());
@@ -283,7 +283,7 @@ class StreamWrapper
{
try {
$this->clearStatInfo($path);
- self::$client->deleteObject($this->getParams($path));
+ static::$client->deleteObject($this->getParams($path));
return true;
} catch (\Exception $e) {
return $this->triggerError($e->getMessage());
@@ -316,15 +316,15 @@ class StreamWrapper
public function url_stat($path, $flags)
{
// Check if this path is in the url_stat cache
- if (isset(self::$nextStat[$path])) {
- return self::$nextStat[$path];
+ if (isset(static::$nextStat[$path])) {
+ return static::$nextStat[$path];
}
$parts = $this->getParams($path);
if (!$parts['Key']) {
// Stat "directories": buckets, or "s3://"
- if (!$parts['Bucket'] || self::$client->doesBucketExist($parts['Bucket'])) {
+ if (!$parts['Bucket'] || static::$client->doesBucketExist($parts['Bucket'])) {
return $this->formatUrlStat($path);
} else {
return $this->triggerError("File or directory not found: {$path}", $flags);
@@ -333,7 +333,7 @@ class StreamWrapper
try {
try {
- $result = self::$client->headObject($parts)->toArray();
+ $result = static::$client->headObject($parts)->toArray();
if (substr($parts['Key'], -1, 1) == '/' && $result['ContentLength'] == 0) {
// Return as if it is a bucket to account for console bucket objects (e.g., zero-byte object "foo/")
return $this->formatUrlStat($path);
@@ -343,7 +343,7 @@ class StreamWrapper
}
} catch (NoSuchKeyException $e) {
// Maybe this isn't an actual key, but a prefix. Do a prefix listing of objects to determine.
- $result = self::$client->listObjects(array(
+ $result = static::$client->listObjects(array(
'Bucket' => $parts['Bucket'],
'Prefix' => rtrim($parts['Key'], '/') . '/',
'MaxKeys' => 1
@@ -404,7 +404,7 @@ class StreamWrapper
try {
if (!$params['Key']) {
- self::$client->deleteBucket(array('Bucket' => $params['Bucket']));
+ static::$client->deleteBucket(array('Bucket' => $params['Bucket']));
$this->clearStatInfo($path);
return true;
}
@@ -412,7 +412,7 @@ class StreamWrapper
// Use a key that adds a trailing slash if needed.
$prefix = rtrim($params['Key'], '/') . '/';
- $result = self::$client->listObjects(array(
+ $result = static::$client->listObjects(array(
'Bucket' => $params['Bucket'],
'Prefix' => $prefix,
'MaxKeys' => 1
@@ -476,7 +476,7 @@ class StreamWrapper
$operationParams['Delimiter'] = $delimiter;
}
- $objectIterator = self::$client->getIterator('ListObjects', $operationParams, array(
+ $objectIterator = static::$client->getIterator('ListObjects', $operationParams, array(
'return_prefixes' => true,
'sort_results' => true
));
@@ -554,7 +554,7 @@ class StreamWrapper
// Cache the object data for quick url_stat lookups used with
// RecursiveDirectoryIterator.
- self::$nextStat = array($key => $stat);
+ static::$nextStat = array($key => $stat);
$this->objectIterator->next();
return $result;
@@ -582,14 +582,14 @@ class StreamWrapper
try {
// Copy the object and allow overriding default parameters if desired, but by default copy metadata
- self::$client->copyObject($this->getOptions() + array(
+ static::$client->copyObject($this->getOptions() + array(
'Bucket' => $partsTo['Bucket'],
'Key' => $partsTo['Key'],
'CopySource' => '/' . $partsFrom['Bucket'] . '/' . rawurlencode($partsFrom['Key']),
'MetadataDirective' => 'COPY'
));
// Delete the original object
- self::$client->deleteObject(array(
+ static::$client->deleteObject(array(
'Bucket' => $partsFrom['Bucket'],
'Key' => $partsFrom['Key']
) + $this->getOptions());
@@ -685,7 +685,7 @@ class StreamWrapper
protected function openReadStream(array $params, array &$errors)
{
// Create the command and serialize the request
- $request = $this->getSignedRequest(self::$client->getCommand('GetObject', $params));
+ $request = $this->getSignedRequest(static::$client->getCommand('GetObject', $params));
// Create a stream that uses the EntityBody object
$factory = $this->getOption('stream_factory') ?: new PhpStreamRequestFactory();
$this->body = $factory->fromRequest($request, array(), array('stream_class' => 'Guzzle\Http\EntityBody'));
@@ -723,7 +723,7 @@ class StreamWrapper
{
try {
// Get the body of the object
- $this->body = self::$client->getObject($params)->get('Body');
+ $this->body = static::$client->getObject($params)->get('Body');
$this->body->seek(0, SEEK_END);
} catch (S3Exception $e) {
// The object does not exist, so use a simple write stream
@@ -810,7 +810,7 @@ class StreamWrapper
*/
protected function clearStatInfo($path = null)
{
- self::$nextStat = array();
+ static::$nextStat = array();
if ($path) {
clearstatcache(true, $path);
}
@@ -826,12 +826,12 @@ class StreamWrapper
*/
private function createBucket($path, array $params)
{
- if (self::$client->doesBucketExist($params['Bucket'])) {
+ if (static::$client->doesBucketExist($params['Bucket'])) {
return $this->triggerError("Directory already exists: {$path}");
}
try {
- self::$client->createBucket($params);
+ static::$client->createBucket($params);
$this->clearStatInfo($path);
return true;
} catch (\Exception $e) {
@@ -854,12 +854,12 @@ class StreamWrapper
$params['Body'] = '';
// Fail if this pseudo directory key already exists
- if (self::$client->doesObjectExist($params['Bucket'], $params['Key'])) {
+ if (static::$client->doesObjectExist($params['Bucket'], $params['Key'])) {
return $this->triggerError("Directory already exists: {$path}");
}
try {
- self::$client->putObject($params);
+ static::$client->putObject($params);
$this->clearStatInfo($path);
return true;
} catch (\Exception $e) {
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/AbstractSyncBuilder.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/AbstractSyncBuilder.php
index a2fe0fc5b8f..df69f4a8519 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/AbstractSyncBuilder.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/AbstractSyncBuilder.php
@@ -65,7 +65,7 @@ abstract class AbstractSyncBuilder
protected $debug;
/**
- * @return self
+ * @return static
*/
public static function getInstance()
{
@@ -77,7 +77,7 @@ abstract class AbstractSyncBuilder
*
* @param string $bucket Amazon S3 bucket name
*
- * @return self
+ * @return $this
*/
public function setBucket($bucket)
{
@@ -91,7 +91,7 @@ abstract class AbstractSyncBuilder
*
* @param S3Client $client Amazon S3 client
*
- * @return self
+ * @return $this
*/
public function setClient(S3Client $client)
{
@@ -105,7 +105,7 @@ abstract class AbstractSyncBuilder
*
* @param \Iterator $iterator
*
- * @return self
+ * @return $this
*/
public function setSourceIterator(\Iterator $iterator)
{
@@ -119,7 +119,7 @@ abstract class AbstractSyncBuilder
*
* @param FileNameConverterInterface $converter Filename to object key provider
*
- * @return self
+ * @return $this
*/
public function setSourceFilenameConverter(FilenameConverterInterface $converter)
{
@@ -133,7 +133,7 @@ abstract class AbstractSyncBuilder
*
* @param FileNameConverterInterface $converter Filename to object key provider
*
- * @return self
+ * @return $this
*/
public function setTargetFilenameConverter(FilenameConverterInterface $converter)
{
@@ -148,7 +148,7 @@ abstract class AbstractSyncBuilder
*
* @param string $baseDir Base directory, which will be deleted from each uploaded object key
*
- * @return self
+ * @return $this
*/
public function setBaseDir($baseDir)
{
@@ -164,7 +164,7 @@ abstract class AbstractSyncBuilder
*
* @param string $keyPrefix Prefix for each uploaded key
*
- * @return self
+ * @return $this
*/
public function setKeyPrefix($keyPrefix)
{
@@ -179,7 +179,7 @@ abstract class AbstractSyncBuilder
*
* @param string $delimiter Delimiter to use to separate paths
*
- * @return self
+ * @return $this
*/
public function setDelimiter($delimiter)
{
@@ -193,7 +193,7 @@ abstract class AbstractSyncBuilder
*
* @param array $params Associative array of PutObject (upload) GetObject (download) parameters
*
- * @return self
+ * @return $this
*/
public function setOperationParams(array $params)
{
@@ -207,7 +207,7 @@ abstract class AbstractSyncBuilder
*
* @param int $concurrency Number of concurrent transfers
*
- * @return self
+ * @return $this
*/
public function setConcurrency($concurrency)
{
@@ -221,7 +221,7 @@ abstract class AbstractSyncBuilder
*
* @param bool $force Set to true to force transfers without checking if it has changed
*
- * @return self
+ * @return $this
*/
public function force($force = false)
{
@@ -235,7 +235,7 @@ abstract class AbstractSyncBuilder
*
* @param bool|resource $enabledOrResource Set to true or false to enable or disable debug output. Pass an opened
* fopen resource to write to instead of writing to standard out.
- * @return self
+ * @return $this
*/
public function enableDebugOutput($enabledOrResource = true)
{
@@ -249,7 +249,7 @@ abstract class AbstractSyncBuilder
*
* @param string $search Regular expression search (in preg_match format). Any filename that matches this regex
* will not be transferred.
- * @return self
+ * @return $this
*/
public function addRegexFilter($search)
{
@@ -301,7 +301,7 @@ abstract class AbstractSyncBuilder
/**
* Hook to implement in subclasses
*
- * @return self
+ * @return AbstractSync
*/
abstract protected function specificBuild();
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/DownloadSyncBuilder.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/DownloadSyncBuilder.php
index b0a1e8cda4c..d9cd044449a 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/DownloadSyncBuilder.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/DownloadSyncBuilder.php
@@ -38,7 +38,7 @@ class DownloadSyncBuilder extends AbstractSyncBuilder
*
* @param string $directory Directory
*
- * @return self
+ * @return $this
*/
public function setDirectory($directory)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/UploadSyncBuilder.php b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/UploadSyncBuilder.php
index ad6333d687b..20830590692 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/UploadSyncBuilder.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Aws/S3/Sync/UploadSyncBuilder.php
@@ -36,7 +36,7 @@ class UploadSyncBuilder extends AbstractSyncBuilder
*
* @param string $path Path that contains files to upload
*
- * @return self
+ * @return $this
*/
public function uploadFromDirectory($path)
{
@@ -54,7 +54,7 @@ class UploadSyncBuilder extends AbstractSyncBuilder
*
* @param string $glob Glob expression
*
- * @return self
+ * @return $this
* @link http://www.php.net/manual/en/function.glob.php
*/
public function uploadFromGlob($glob)
@@ -71,7 +71,7 @@ class UploadSyncBuilder extends AbstractSyncBuilder
*
* @param string $acl Canned ACL for each upload
*
- * @return self
+ * @return $this
*/
public function setAcl($acl)
{
@@ -85,7 +85,7 @@ class UploadSyncBuilder extends AbstractSyncBuilder
*
* @param Acp $acp Access control policy
*
- * @return self
+ * @return $this
*/
public function setAcp(Acp $acp)
{
@@ -100,7 +100,7 @@ class UploadSyncBuilder extends AbstractSyncBuilder
*
* @param int $size Size threshold
*
- * @return self
+ * @return $this
*/
public function setMultipartUploadSize($size)
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ApcClassLoader.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ApcClassLoader.php
index 8ee49fb45d3..513362a5030 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ApcClassLoader.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ApcClassLoader.php
@@ -15,7 +15,7 @@ namespace Symfony\Component\ClassLoader;
* ApcClassLoader implements a wrapping autoloader cached in APC for PHP 5.3.
*
* It expects an object implementing a findFile method to find the file. This
- * allow using it as a wrapper around the other loaders of the component (the
+ * allows using it as a wrapper around the other loaders of the component (the
* ClassLoader and the UniversalClassLoader for instance) but also around any
* other autoloader following this convention (the Composer one for instance)
*
@@ -46,7 +46,7 @@ class ApcClassLoader
/**
* The class loader object being decorated.
*
- * @var \Symfony\Component\ClassLoader\ClassLoader
+ * @var object
* A class loader object that implements the findFile() method.
*/
protected $decorated;
@@ -133,5 +133,4 @@ class ApcClassLoader
{
return call_user_func_array(array($this->decorated, $method), $args);
}
-
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ClassMapGenerator.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ClassMapGenerator.php
index 7f83dbc5592..efc95ec8be9 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ClassMapGenerator.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/ClassMapGenerator.php
@@ -71,7 +71,6 @@ class ClassMapGenerator
foreach ($classes as $class) {
$map[$class] = $path;
}
-
}
return $map;
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Psr4ClassLoader.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Psr4ClassLoader.php
index 429812d1156..1c0c37e0988 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Psr4ClassLoader.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Psr4ClassLoader.php
@@ -32,7 +32,7 @@ class Psr4ClassLoader
public function addPrefix($prefix, $baseDir)
{
$prefix = trim($prefix, '\\').'\\';
- $baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
+ $baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
$this->prefixes[] = array($prefix, $baseDir);
}
@@ -49,7 +49,7 @@ class Psr4ClassLoader
list($currentPrefix, $currentBaseDir) = $current;
if (0 === strpos($class, $currentPrefix)) {
$classWithoutPrefix = substr($class, strlen($currentPrefix));
- $file = $currentBaseDir . str_replace('\\', DIRECTORY_SEPARATOR, $classWithoutPrefix) . '.php';
+ $file = $currentBaseDir.str_replace('\\', DIRECTORY_SEPARATOR, $classWithoutPrefix).'.php';
if (file_exists($file)) {
return $file;
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/README.md b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/README.md
index fc222b1c9e3..3c785049d20 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/README.md
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/README.md
@@ -9,51 +9,63 @@ standard or the PEAR naming convention.
First, register the autoloader:
- require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
+```php
+require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
- use Symfony\Component\ClassLoader\UniversalClassLoader;
+use Symfony\Component\ClassLoader\UniversalClassLoader;
- $loader = new UniversalClassLoader();
- $loader->register();
+$loader = new UniversalClassLoader();
+$loader->register();
+```
Then, register some namespaces with the `registerNamespace()` method:
- $loader->registerNamespace('Symfony', __DIR__.'/src');
- $loader->registerNamespace('Monolog', __DIR__.'/vendor/monolog/src');
+```php
+$loader->registerNamespace('Symfony', __DIR__.'/src');
+$loader->registerNamespace('Monolog', __DIR__.'/vendor/monolog/src');
+```
The `registerNamespace()` method takes a namespace prefix and a path where to
look for the classes as arguments.
You can also register a sub-namespaces:
- $loader->registerNamespace('Doctrine\\Common', __DIR__.'/vendor/doctrine-common/lib');
+```php
+$loader->registerNamespace('Doctrine\\Common', __DIR__.'/vendor/doctrine-common/lib');
+```
The order of registration is significant and the first registered namespace
takes precedence over later registered one.
You can also register more than one path for a given namespace:
- $loader->registerNamespace('Symfony', array(__DIR__.'/src', __DIR__.'/symfony/src'));
+```php
+$loader->registerNamespace('Symfony', array(__DIR__.'/src', __DIR__.'/symfony/src'));
+```
Alternatively, you can use the `registerNamespaces()` method to register more
than one namespace at once:
- $loader->registerNamespaces(array(
- 'Symfony' => array(__DIR__.'/src', __DIR__.'/symfony/src'),
- 'Doctrine\\Common' => __DIR__.'/vendor/doctrine-common/lib',
- 'Doctrine' => __DIR__.'/vendor/doctrine/lib',
- 'Monolog' => __DIR__.'/vendor/monolog/src',
- ));
+```php
+$loader->registerNamespaces(array(
+ 'Symfony' => array(__DIR__.'/src', __DIR__.'/symfony/src'),
+ 'Doctrine\\Common' => __DIR__.'/vendor/doctrine-common/lib',
+ 'Doctrine' => __DIR__.'/vendor/doctrine/lib',
+ 'Monolog' => __DIR__.'/vendor/monolog/src',
+));
+```
For better performance, you can use the APC based version of the universal
class loader:
- require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
- require_once __DIR__.'/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php';
+```php
+require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
+require_once __DIR__.'/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php';
- use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
+use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
- $loader = new ApcUniversalClassLoader('apc.prefix.');
+$loader = new ApcUniversalClassLoader('apc.prefix.');
+```
Furthermore, the component provides tools to aggregate classes into a single
file, which is especially useful to improve performance on servers that do not
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ApcUniversalClassLoaderTest.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ApcUniversalClassLoaderTest.php
index 38a17f28453..9755256c79a 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ApcUniversalClassLoaderTest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ApcUniversalClassLoaderTest.php
@@ -55,13 +55,13 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
- public function getLoadClassTests()
- {
- return array(
+ public function getLoadClassTests()
+ {
+ return array(
array('\\Apc\\Namespaced\\Foo', 'Apc\\Namespaced\\Foo', '->loadClass() loads Apc\Namespaced\Foo class'),
array('Apc_Pearlike_Foo', 'Apc_Pearlike_Foo', '->loadClass() loads Apc_Pearlike_Foo class'),
);
- }
+ }
/**
* @dataProvider getLoadClassFromFallbackTests
@@ -77,15 +77,15 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
- public function getLoadClassFromFallbackTests()
- {
- return array(
+ public function getLoadClassFromFallbackTests()
+ {
+ return array(
array('\\Apc\\Namespaced\\Baz', 'Apc\\Namespaced\\Baz', '->loadClass() loads Apc\Namespaced\Baz class'),
array('Apc_Pearlike_Baz', 'Apc_Pearlike_Baz', '->loadClass() loads Apc_Pearlike_Baz class'),
array('\\Apc\\Namespaced\\FooBar', 'Apc\\Namespaced\\FooBar', '->loadClass() loads Apc\Namespaced\Baz class from fallback dir'),
array('Apc_Pearlike_FooBar', 'Apc_Pearlike_FooBar', '->loadClass() loads Apc_Pearlike_Baz class from fallback dir'),
);
- }
+ }
/**
* @dataProvider getLoadClassNamespaceCollisionTests
@@ -100,9 +100,9 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
- public function getLoadClassNamespaceCollisionTests()
- {
- return array(
+ public function getLoadClassNamespaceCollisionTests()
+ {
+ return array(
array(
array(
'Apc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha',
@@ -136,7 +136,7 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
'->loadClass() loads NamespaceCollision\A\B\Bar from beta.',
),
);
- }
+ }
/**
* @dataProvider getLoadClassPrefixCollisionTests
@@ -150,9 +150,9 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
- public function getLoadClassPrefixCollisionTests()
- {
- return array(
+ public function getLoadClassPrefixCollisionTests()
+ {
+ return array(
array(
array(
'ApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha/Apc',
@@ -186,5 +186,5 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
'->loadClass() loads ApcPrefixCollision_A_B_Bar from beta.',
),
);
- }
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php
index b8600fc54ed..35617e363ea 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php
@@ -76,7 +76,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
'Namespaced\\Foo' => realpath(__DIR__).'/Fixtures/Namespaced/Foo.php',
'Namespaced\\Baz' => realpath(__DIR__).'/Fixtures/Namespaced/Baz.php',
'Namespaced\\WithComments' => realpath(__DIR__).'/Fixtures/Namespaced/WithComments.php',
- )
+ ),
),
array(__DIR__.'/Fixtures/beta/NamespaceCollision', array(
'NamespaceCollision\\A\\B\\Bar' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Bar.php',
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/A.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/A.php
index dff891dcb79..b0f9425950f 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/A.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/A.php
@@ -2,4 +2,6 @@
namespace ClassesWithParents;
-class A extends B {}
+class A extends B
+{
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/B.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/B.php
index 196bf7a2d31..22c751a7e5d 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/B.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/B.php
@@ -2,4 +2,6 @@
namespace ClassesWithParents;
-class B implements CInterface {}
+class B implements CInterface
+{
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeClass.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeClass.php
index 26fabbd96e2..c63cef9233e 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeClass.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeClass.php
@@ -13,5 +13,4 @@ namespace ClassMap;
class SomeClass extends SomeParent implements SomeInterface
{
-
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeInterface.php
index 09d7a8f35a4..1fe5e09aa1f 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeInterface.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeInterface.php
@@ -13,5 +13,4 @@ namespace ClassMap;
interface SomeInterface
{
-
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeParent.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeParent.php
index 5a859a94607..ce2f9fc6c47 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeParent.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeParent.php
@@ -13,5 +13,4 @@ namespace ClassMap;
abstract class SomeParent
{
-
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/multipleNs.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/multipleNs.php
index d19e07fc11a..7db8cd3b67c 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/multipleNs.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/multipleNs.php
@@ -1,14 +1,24 @@
<?php
namespace {
- class A {}
+ class A
+ {
+ }
}
namespace Alpha {
- class A {}
- class B {}
+ class A
+ {
+ }
+ class B
+ {
+ }
}
namespace Beta {
- class A {}
- class B {}
+ class A
+ {
+ }
+ class B
+ {
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/sameNsMultipleClasses.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/sameNsMultipleClasses.php
index d5ef5e5aa25..b34b9dd28be 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/sameNsMultipleClasses.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/sameNsMultipleClasses.php
@@ -11,5 +11,9 @@
namespace Foo\Bar;
-class A {}
-class B {}
+class A
+{
+}
+class B
+{
+}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/deps/traits.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/deps/traits.php
index a5537ac92fa..82b30a6f9d0 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/deps/traits.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/deps/traits.php
@@ -1,7 +1,8 @@
<?php
trait TD
-{}
+{
+}
trait TZ
{
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/php5.4/traits.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/php5.4/traits.php
index 2d92c378e1a..70950be6ff2 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/php5.4/traits.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Fixtures/php5.4/traits.php
@@ -25,6 +25,7 @@ namespace Foo {
class CBar implements IBar
{
- use TBar, TFooBar;
+ use TBar;
+ use TFooBar;
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php
index 65cae485ad2..21a7afbd6e7 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php
@@ -24,7 +24,7 @@ class Psr4ClassLoaderTest extends \PHPUnit_Framework_TestCase
$loader = new Psr4ClassLoader();
$loader->addPrefix(
'Acme\\DemoLib',
- __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' . DIRECTORY_SEPARATOR . 'psr-4'
+ __DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'psr-4'
);
$loader->loadClass($className);
$this->assertTrue(class_exists($className), sprintf('loadClass() should load %s', $className));
@@ -39,7 +39,7 @@ class Psr4ClassLoaderTest extends \PHPUnit_Framework_TestCase
array('Acme\\DemoLib\\Foo'),
array('Acme\\DemoLib\\Class_With_Underscores'),
array('Acme\\DemoLib\\Lets\\Go\\Deeper\\Foo'),
- array('Acme\\DemoLib\\Lets\\Go\\Deeper\\Class_With_Underscores')
+ array('Acme\\DemoLib\\Lets\\Go\\Deeper\\Class_With_Underscores'),
);
}
@@ -52,7 +52,7 @@ class Psr4ClassLoaderTest extends \PHPUnit_Framework_TestCase
$loader = new Psr4ClassLoader();
$loader->addPrefix(
'Acme\\DemoLib',
- __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' . DIRECTORY_SEPARATOR . 'psr-4'
+ __DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'psr-4'
);
$loader->loadClass($className);
$this->assertFalse(class_exists($className), sprintf('loadClass() should not load %s', $className));
@@ -65,7 +65,7 @@ class Psr4ClassLoaderTest extends \PHPUnit_Framework_TestCase
{
return array(
array('Acme\\DemoLib\\I_Do_Not_Exist'),
- array('UnknownVendor\\SomeLib\\I_Do_Not_Exist')
+ array('UnknownVendor\\SomeLib\\I_Do_Not_Exist'),
);
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/UniversalClassLoader.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/UniversalClassLoader.php
index 43f9a7d02c4..8a3149f3198 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/UniversalClassLoader.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/UniversalClassLoader.php
@@ -287,7 +287,6 @@ class UniversalClassLoader
return $file;
}
}
-
} else {
// PEAR-like class name
$normalizedClass = str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/XcacheClassLoader.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/XcacheClassLoader.php
index 299a79af932..30096bc83f1 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/XcacheClassLoader.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/ClassLoader/XcacheClassLoader.php
@@ -12,7 +12,7 @@
namespace Symfony\Component\ClassLoader;
/**
- * XcacheClassLoader implements a wrapping autoloader cached in Xcache for PHP 5.3.
+ * XcacheClassLoader implements a wrapping autoloader cached in XCache for PHP 5.3.
*
* It expects an object implementing a findFile method to find the file. This
* allows using it as a wrapper around the other loaders of the component (the
@@ -43,31 +43,35 @@ namespace Symfony\Component\ClassLoader;
class XcacheClassLoader
{
private $prefix;
- private $classFinder;
+
+ /**
+ * @var object A class loader object that implements the findFile() method
+ */
+ private $decorated;
/**
* Constructor.
*
- * @param string $prefix A prefix to create a namespace in Xcache
- * @param object $classFinder An object that implements findFile() method.
+ * @param string $prefix The XCache namespace prefix to use.
+ * @param object $decorated A class loader object that implements the findFile() method.
*
* @throws \RuntimeException
* @throws \InvalidArgumentException
*
* @api
*/
- public function __construct($prefix, $classFinder)
+ public function __construct($prefix, $decorated)
{
- if (!extension_loaded('Xcache')) {
- throw new \RuntimeException('Unable to use XcacheClassLoader as Xcache is not enabled.');
+ if (!extension_loaded('xcache')) {
+ throw new \RuntimeException('Unable to use XcacheClassLoader as XCache is not enabled.');
}
- if (!method_exists($classFinder, 'findFile')) {
+ if (!method_exists($decorated, 'findFile')) {
throw new \InvalidArgumentException('The class finder must implement a "findFile" method.');
}
$this->prefix = $prefix;
- $this->classFinder = $classFinder;
+ $this->decorated = $decorated;
}
/**
@@ -116,10 +120,18 @@ class XcacheClassLoader
if (xcache_isset($this->prefix.$class)) {
$file = xcache_get($this->prefix.$class);
} else {
- $file = $this->classFinder->findFile($class);
+ $file = $this->decorated->findFile($class);
xcache_set($this->prefix.$class, $file);
}
return $file;
}
+
+ /**
+ * Passes through all unknown calls onto the decorated object.
+ */
+ public function __call($method, $args)
+ {
+ return call_user_func_array(array($this->decorated, $method), $args);
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
index 410226bb363..b797667208b 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
@@ -271,7 +271,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
if ($listener instanceof \Closure) {
$info += array(
'type' => 'Closure',
- 'pretty' => 'closure'
+ 'pretty' => 'closure',
);
} elseif (is_string($listener)) {
try {
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/EventDispatcherInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/EventDispatcherInterface.php
index 3fdbfd8822e..c85ebdafc15 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/EventDispatcherInterface.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/EventDispatcherInterface.php
@@ -64,8 +64,8 @@ interface EventDispatcherInterface
/**
* Removes an event listener from the specified events.
*
- * @param string|array $eventName The event(s) to remove a listener from
- * @param callable $listener The listener to remove
+ * @param string $eventName The event to remove a listener from
+ * @param callable $listener The listener to remove
*/
public function removeListener($eventName, $listener);
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/README.md b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/README.md
index 22bf74fdc9d..c928f136692 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/README.md
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/README.md
@@ -4,16 +4,18 @@ EventDispatcher Component
The Symfony2 EventDispatcher component implements the Mediator pattern in a
simple and effective way to make your projects truly extensible.
- use Symfony\Component\EventDispatcher\EventDispatcher;
- use Symfony\Component\EventDispatcher\Event;
+```php
+use Symfony\Component\EventDispatcher\EventDispatcher;
+use Symfony\Component\EventDispatcher\Event;
- $dispatcher = new EventDispatcher();
+$dispatcher = new EventDispatcher();
- $dispatcher->addListener('event_name', function (Event $event) {
- // ...
- });
+$dispatcher->addListener('event_name', function (Event $event) {
+ // ...
+});
- $dispatcher->dispatch('event_name');
+$dispatcher->dispatch('event_name');
+```
Resources
---------
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php
index 8ccfabb1ca4..47dd5da1682 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php
@@ -24,7 +24,7 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
- $tdispatcher->addListener('foo', $listener = function () { ; });
+ $tdispatcher->addListener('foo', $listener = function () {; });
$listeners = $dispatcher->getListeners('foo');
$this->assertCount(1, $listeners);
$this->assertSame($listener, $listeners[0]);
@@ -38,7 +38,7 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
- $tdispatcher->addListener('foo', $listener = function () { ; });
+ $tdispatcher->addListener('foo', $listener = function () {; });
$this->assertSame($dispatcher->getListeners('foo'), $tdispatcher->getListeners('foo'));
}
@@ -50,7 +50,7 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($dispatcher->hasListeners('foo'));
$this->assertFalse($tdispatcher->hasListeners('foo'));
- $tdispatcher->addListener('foo', $listener = function () { ; });
+ $tdispatcher->addListener('foo', $listener = function () {; });
$this->assertTrue($dispatcher->hasListeners('foo'));
$this->assertTrue($tdispatcher->hasListeners('foo'));
}
@@ -75,7 +75,7 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
{
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
- $tdispatcher->addListener('foo', $listener = function () { ; });
+ $tdispatcher->addListener('foo', $listener = function () {; });
$this->assertEquals(array(), $tdispatcher->getCalledListeners());
$this->assertEquals(array('foo.closure' => array('event' => 'foo', 'type' => 'Closure', 'pretty' => 'closure')), $tdispatcher->getNotCalledListeners());
@@ -92,8 +92,8 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
- $tdispatcher->addListener('foo', $listener1 = function () { ; });
- $tdispatcher->addListener('foo', $listener2 = function () { ; });
+ $tdispatcher->addListener('foo', $listener1 = function () {; });
+ $tdispatcher->addListener('foo', $listener2 = function () {; });
$logger->expects($this->at(0))->method('debug')->with("Notified event \"foo\" to listener \"closure\".");
$logger->expects($this->at(1))->method('debug')->with("Notified event \"foo\" to listener \"closure\".");
@@ -108,7 +108,7 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
$tdispatcher->addListener('foo', $listener1 = function (Event $event) { $event->stopPropagation(); });
- $tdispatcher->addListener('foo', $listener2 = function () { ; });
+ $tdispatcher->addListener('foo', $listener2 = function () {; });
$logger->expects($this->at(0))->method('debug')->with("Notified event \"foo\" to listener \"closure\".");
$logger->expects($this->at(1))->method('debug')->with("Listener \"closure\" stopped propagation of the event \"foo\".");
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
index 5959db0d422..b291e1ee3c4 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
@@ -37,7 +37,10 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
->method('getClass')
->will($this->returnValue('stdClass'));
- $builder = $this->getMock('Symfony\Component\DependencyInjection\ContainerBuilder');
+ $builder = $this->getMock(
+ 'Symfony\Component\DependencyInjection\ContainerBuilder',
+ array('hasDefinition', 'findTaggedServiceIds', 'getDefinition')
+ );
$builder->expects($this->any())
->method('hasDefinition')
->will($this->returnValue(true));
@@ -69,7 +72,10 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
->method('getClass')
->will($this->returnValue('Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService'));
- $builder = $this->getMock('Symfony\Component\DependencyInjection\ContainerBuilder');
+ $builder = $this->getMock(
+ 'Symfony\Component\DependencyInjection\ContainerBuilder',
+ array('hasDefinition', 'findTaggedServiceIds', 'getDefinition', 'findDefinition')
+ );
$builder->expects($this->any())
->method('hasDefinition')
->will($this->returnValue(true));
@@ -136,5 +142,7 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
class SubscriberService implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
{
- public static function getSubscribedEvents() {}
+ public static function getSubscribedEvents()
+ {
+ }
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php
index efc0c29fab8..2bd0750b141 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php
@@ -362,7 +362,7 @@ class TestEventSubscriberWithMultipleListeners implements EventSubscriberInterfa
{
return array('pre.foo' => array(
array('preFoo1'),
- array('preFoo2', 10)
+ array('preFoo2', 10),
));
}
}
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php
index 5dfda92f2af..1090bcb2960 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php
@@ -18,7 +18,6 @@ use Symfony\Component\EventDispatcher\GenericEvent;
*/
class GenericEventTest extends \PHPUnit_Framework_TestCase
{
-
/**
* @var GenericEvent
*/
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/composer.json
index 3715ece302f..75fd243d529 100644
--- a/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/composer.json
+++ b/apps/files_external/3rdparty/aws-sdk-php/Symfony/Component/EventDispatcher/composer.json
@@ -19,7 +19,7 @@
"php": ">=5.3.3"
},
"require-dev": {
- "symfony/dependency-injection": "~2.0",
+ "symfony/dependency-injection": "~2.0,<2.6.0",
"symfony/config": "~2.0",
"symfony/stopwatch": "~2.2",
"psr/log": "~1.0"
diff --git a/apps/files_external/3rdparty/google-api-php-client/NOTICE b/apps/files_external/3rdparty/google-api-php-client/NOTICE
deleted file mode 100644
index 22d7cb59867..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/NOTICE
+++ /dev/null
@@ -1,4 +0,0 @@
-This product contains the following libraries:
-
-XRDS-Simple library from http://code.google.com/p/diso/
-Apache License 2.0
diff --git a/apps/files_external/3rdparty/google-api-php-client/README b/apps/files_external/3rdparty/google-api-php-client/README
deleted file mode 100644
index 42c42c0d5c7..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/README
+++ /dev/null
@@ -1,40 +0,0 @@
-Google APIs Client Library for PHP
-=====================================
-
-== Description
-The Google API Client Library enables you to work with Google APIs such as Google+, Drive, Tasks, or Latitude on your server.
-
-Requirements:
- PHP 5.2.x or higher [http://www.php.net/]
- PHP Curl extension [http://www.php.net/manual/en/intro.curl.php]
- PHP JSON extension [http://php.net/manual/en/book.json.php]
-
-Project page:
- http://code.google.com/p/google-api-php-client
-
-OAuth 2 instructions:
- http://code.google.com/p/google-api-php-client/wiki/OAuth2
-
-Report a defect or feature request here:
- http://code.google.com/p/google-api-php-client/issues/entry
-
-Subscribe to project updates in your feed reader:
- http://code.google.com/feeds/p/google-api-php-client/updates/basic
-
-Supported sample applications:
- http://code.google.com/p/google-api-php-client/wiki/Samples
-
-== Basic Example
- <?php
- require_once 'path/to/src/Google_Client.php';
- require_once 'path/to/src/contrib/apiBooksService.php';
-
- $client = new Google_Client();
- $service = new Google_BooksService($client);
-
- $optParams = array('filter' => 'free-ebooks');
- $results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
-
- foreach ($results['items'] as $item) {
- print($item['volumeInfo']['title'] . '<br>');
- }
diff --git a/apps/files_external/3rdparty/google-api-php-client/README.md b/apps/files_external/3rdparty/google-api-php-client/README.md
new file mode 100644
index 00000000000..e799f6725da
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/README.md
@@ -0,0 +1,77 @@
+[![Build Status](https://travis-ci.org/google/google-api-php-client.svg)](https://travis-ci.org/google/google-api-php-client)
+
+# Google APIs Client Library for PHP #
+
+## Description ##
+The Google API Client Library enables you to work with Google APIs such as Google+, Drive, or YouTube on your server.
+
+## Beta ##
+This library is in Beta. We're comfortable enough with the stability and features of the library that we want you to build real production applications on it. We will make an effort to support the public and protected surface of the library and maintain backwards compatibility in the future. While we are still in Beta, we reserve the right to make incompatible changes. If we do remove some functionality (typically because better functionality exists or if the feature proved infeasible), our intention is to deprecate and provide ample time for developers to update their code.
+
+## Requirements ##
+* [PHP 5.2.1 or higher](http://www.php.net/)
+* [PHP JSON extension](http://php.net/manual/en/book.json.php)
+
+*Note*: some features (service accounts and id token verification) require PHP 5.3.0 and above due to cryptographic algorithm requirements.
+
+## Developer Documentation ##
+http://developers.google.com/api-client-library/php
+
+## Installation ##
+
+For the latest installation and setup instructions, see [the documentation](https://developers.google.com/api-client-library/php/start/installation).
+
+## Basic Example ##
+See the examples/ directory for examples of the key client features.
+```PHP
+<?php
+ require_once 'google-api-php-client/autoload.php'; // or wherever autoload.php is located
+ $client = new Google_Client();
+ $client->setApplicationName("Client_Library_Examples");
+ $client->setDeveloperKey("YOUR_APP_KEY");
+ $service = new Google_Service_Books($client);
+ $optParams = array('filter' => 'free-ebooks');
+ $results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
+
+ foreach ($results as $item) {
+ echo $item['volumeInfo']['title'], "<br /> \n";
+ }
+```
+
+## Frequently Asked Questions ##
+
+### What do I do if something isn't working? ###
+
+For support with the library the best place to ask is via the google-api-php-client tag on StackOverflow: http://stackoverflow.com/questions/tagged/google-api-php-client
+
+If there is a specific bug with the library, please file a issue in the Github issues tracker, including a (minimal) example of the failing code and any specific errors retrieved. Feature requests can also be filed, as long as they are core library requests, and not-API specific: for those, refer to the documentation for the individual APIs for the best place to file requests. Please try to provide a clear statement of the problem that the feature would address.
+
+### How do I contribute? ###
+
+We accept contributions via Github Pull Requests, but all contributors need to be covered by the standard Google Contributor License Agreement. You can find links, and more instructions, in the documentation: https://developers.google.com/api-client-library/php/contribute
+
+### Why do you still support 5.2? ###
+
+When we started working on the 1.0.0 branch we knew there were several fundamental issues to fix with the 0.6 releases of the library. At that time we looked at the usage of the library, and other related projects, and determined that there was still a large and active base of PHP 5.2 installs. You can see this in statistics such as the PHP versions chart in the WordPress stats: http://wordpress.org/about/stats/. We will keep looking at the types of usage we see, and try to take advantage of newer PHP features where possible.
+
+### Why does Google_..._Service have weird names? ###
+
+The _Service classes are generally automatically generated from the API discovery documents: https://developers.google.com/discovery/. Sometimes new features are added to APIs with unusual names, which can cause some unexpected or non-standard style naming in the PHP classes.
+
+### How do I deal with non-JSON response types? ###
+
+Some services return XML or similar by default, rather than JSON, which is what the library supports. You can request a JSON response by adding an 'alt' argument to optional params that is normally the last argument to a method call:
+
+```
+$opt_params = array(
+ 'alt' => "json"
+);
+```
+
+## Code Quality ##
+
+Copy the ruleset.xml in style/ into a new directory named GAPI/ in your
+/usr/share/php/PHP/CodeSniffer/Standards (or appropriate equivalent directory),
+and run code sniffs with:
+
+ phpcs --standard=GAPI src/
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Abstract.php
index 010782d4a60..0832df3a408 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Abstract.php
@@ -14,23 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-require_once "Google_AuthNone.php";
-require_once "Google_OAuth2.php";
+require_once "Google/Http/Request.php";
/**
* Abstract class for the Authentication in the API client
* @author Chris Chabot <chabotc@google.com>
*
*/
-abstract class Google_Auth {
- abstract public function authenticate($service);
- abstract public function sign(Google_HttpRequest $request);
- abstract public function createAuthUrl($scope);
-
- abstract public function getAccessToken();
- abstract public function setAccessToken($accessToken);
- abstract public function setDeveloperKey($developerKey);
- abstract public function refreshToken($refreshToken);
- abstract public function revokeToken();
+abstract class Google_Auth_Abstract
+{
+ /**
+ * An utility function that first calls $this->auth->sign($request) and then
+ * executes makeRequest() on that signed request. Used for when a request
+ * should be authenticated
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request $request
+ */
+ abstract public function authenticatedRequest(Google_Http_Request $request);
+ abstract public function sign(Google_Http_Request $request);
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/AssertionCredentials.php
index d9b4394ba38..3db0a779df3 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/AssertionCredentials.php
@@ -15,12 +15,17 @@
* limitations under the License.
*/
+require_once "Google/Auth/OAuth2.php";
+require_once "Google/Signer/P12.php";
+require_once "Google/Utils.php";
+
/**
* Credentials object used for OAuth 2.0 Signed JWT assertion grants.
*
* @author Chirag Shah <chirags@google.com>
*/
-class Google_AssertionCredentials {
+class Google_Auth_AssertionCredentials
+{
const MAX_TOKEN_LIFETIME_SECS = 3600;
public $serviceAccountName;
@@ -34,6 +39,7 @@ class Google_AssertionCredentials {
* @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
*/
public $prn;
+ private $useCache;
/**
* @param $serviceAccountName
@@ -42,8 +48,9 @@ class Google_AssertionCredentials {
* @param string $privateKeyPassword
* @param string $assertionType
* @param bool|string $sub The email address of the user for which the
- * application is requesting delegated access.
- *
+ * application is requesting delegated access.
+ * @param bool useCache Whether to generate a cache key and allow
+ * automatic caching of the generated token.
*/
public function __construct(
$serviceAccountName,
@@ -51,7 +58,9 @@ class Google_AssertionCredentials {
$privateKey,
$privateKeyPassword = 'notasecret',
$assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
- $sub = false) {
+ $sub = false,
+ $useCache = true
+ ) {
$this->serviceAccountName = $serviceAccountName;
$this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
$this->privateKey = $privateKey;
@@ -59,13 +68,32 @@ class Google_AssertionCredentials {
$this->assertionType = $assertionType;
$this->sub = $sub;
$this->prn = $sub;
+ $this->useCache = $useCache;
+ }
+
+ /**
+ * Generate a unique key to represent this credential.
+ * @return string
+ */
+ public function getCacheKey()
+ {
+ if (!$this->useCache) {
+ return false;
+ }
+ $h = $this->sub;
+ $h .= $this->assertionType;
+ $h .= $this->privateKey;
+ $h .= $this->scopes;
+ $h .= $this->serviceAccountName;
+ return md5($h);
}
- public function generateAssertion() {
+ public function generateAssertion()
+ {
$now = time();
$jwtParams = array(
- 'aud' => Google_OAuth2::OAUTH2_TOKEN_URI,
+ 'aud' => Google_Auth_OAuth2::OAUTH2_TOKEN_URI,
'scope' => $this->scopes,
'iat' => $now,
'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
@@ -86,16 +114,22 @@ class Google_AssertionCredentials {
* @param array $payload
* @return string The signed JWT.
*/
- private function makeSignedJwt($payload) {
+ private function makeSignedJwt($payload)
+ {
$header = array('typ' => 'JWT', 'alg' => 'RS256');
+ $payload = json_encode($payload);
+ // Handle some overzealous escaping in PHP json that seemed to cause some errors
+ // with claimsets.
+ $payload = str_replace('\/', '/', $payload);
+
$segments = array(
Google_Utils::urlSafeB64Encode(json_encode($header)),
- Google_Utils::urlSafeB64Encode(json_encode($payload))
+ Google_Utils::urlSafeB64Encode($payload)
);
$signingInput = implode('.', $segments);
- $signer = new Google_P12Signer($this->privateKey, $this->privateKeyPassword);
+ $signer = new Google_Signer_P12($this->privateKey, $this->privateKeyPassword);
$signature = $signer->sign($signingInput);
$segments[] = Google_Utils::urlSafeB64Encode($signature);
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php
new file mode 100644
index 00000000000..65067ee4436
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Exception.php";
+
+class Google_Auth_Exception extends Google_Exception
+{
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/LoginTicket.php
index c0ce614232b..bcf798ae5ff 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/LoginTicket.php
@@ -15,13 +15,16 @@
* limitations under the License.
*/
+require_once "Google/Auth/Exception.php";
+
/**
* Class to hold information about an authenticated login.
*
* @author Brian Eaton <beaton@google.com>
*/
-class Google_LoginTicket {
- const USER_ATTR = "id";
+class Google_Auth_LoginTicket
+{
+ const USER_ATTR = "sub";
// Information from id token envelope.
private $envelope;
@@ -35,21 +38,23 @@ class Google_LoginTicket {
* @param string $envelope Header from a verified authentication token.
* @param string $payload Information from a verified authentication token.
*/
- public function __construct($envelope, $payload) {
+ public function __construct($envelope, $payload)
+ {
$this->envelope = $envelope;
$this->payload = $payload;
}
/**
* Returns the numeric identifier for the user.
- * @throws Google_AuthException
+ * @throws Google_Auth_Exception
* @return
*/
- public function getUserId() {
+ public function getUserId()
+ {
if (array_key_exists(self::USER_ATTR, $this->payload)) {
return $this->payload[self::USER_ATTR];
}
- throw new Google_AuthException("No user_id in token");
+ throw new Google_Auth_Exception("No user_id in token");
}
/**
@@ -57,7 +62,8 @@ class Google_LoginTicket {
* various information about the user session.
* @return array
*/
- public function getAttributes() {
+ public function getAttributes()
+ {
return array("envelope" => $this->envelope, "payload" => $this->payload);
}
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php
new file mode 100644
index 00000000000..5630d755e04
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php
@@ -0,0 +1,620 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Auth/Abstract.php";
+require_once "Google/Auth/AssertionCredentials.php";
+require_once "Google/Auth/Exception.php";
+require_once "Google/Auth/LoginTicket.php";
+require_once "Google/Client.php";
+require_once "Google/Http/Request.php";
+require_once "Google/Utils.php";
+require_once "Google/Verifier/Pem.php";
+
+/**
+ * Authentication class that deals with the OAuth 2 web-server authentication flow
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Auth_OAuth2 extends Google_Auth_Abstract
+{
+ const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
+ const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
+ const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
+ const CLOCK_SKEW_SECS = 300; // five minutes in seconds
+ const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
+ const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
+ const OAUTH2_ISSUER = 'accounts.google.com';
+
+ /** @var Google_Auth_AssertionCredentials $assertionCredentials */
+ private $assertionCredentials;
+
+ /**
+ * @var string The state parameters for CSRF and other forgery protection.
+ */
+ private $state;
+
+ /**
+ * @var array The token bundle.
+ */
+ private $token = array();
+
+ /**
+ * @var Google_Client the base client
+ */
+ private $client;
+
+ /**
+ * Instantiates the class, but does not initiate the login flow, leaving it
+ * to the discretion of the caller.
+ */
+ public function __construct(Google_Client $client)
+ {
+ $this->client = $client;
+ }
+
+ /**
+ * Perform an authenticated / signed apiHttpRequest.
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
+ * (which can modify the request in what ever way fits the auth mechanism)
+ * and then calls apiCurlIO::makeRequest on the signed request
+ *
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request The resulting HTTP response including the
+ * responseHttpCode, responseHeaders and responseBody.
+ */
+ public function authenticatedRequest(Google_Http_Request $request)
+ {
+ $request = $this->sign($request);
+ return $this->client->getIo()->makeRequest($request);
+ }
+
+ /**
+ * @param string $code
+ * @throws Google_Auth_Exception
+ * @return string
+ */
+ public function authenticate($code)
+ {
+ if (strlen($code) == 0) {
+ throw new Google_Auth_Exception("Invalid code");
+ }
+
+ // We got here from the redirect from a successful authorization grant,
+ // fetch the access token
+ $request = new Google_Http_Request(
+ self::OAUTH2_TOKEN_URI,
+ 'POST',
+ array(),
+ array(
+ 'code' => $code,
+ 'grant_type' => 'authorization_code',
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret')
+ )
+ );
+ $request->disableGzip();
+ $response = $this->client->getIo()->makeRequest($request);
+
+ if ($response->getResponseHttpCode() == 200) {
+ $this->setAccessToken($response->getResponseBody());
+ $this->token['created'] = time();
+ return $this->getAccessToken();
+ } else {
+ $decodedResponse = json_decode($response->getResponseBody(), true);
+ if ($decodedResponse != null && $decodedResponse['error']) {
+ $decodedResponse = $decodedResponse['error'];
+ if (isset($decodedResponse['error_description'])) {
+ $decodedResponse .= ": " . $decodedResponse['error_description'];
+ }
+ }
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Error fetching OAuth2 access token, message: '%s'",
+ $decodedResponse
+ ),
+ $response->getResponseHttpCode()
+ );
+ }
+ }
+
+ /**
+ * Create a URL to obtain user authorization.
+ * The authorization endpoint allows the user to first
+ * authenticate, and then grant/deny the access request.
+ * @param string $scope The scope is expressed as a list of space-delimited strings.
+ * @return string
+ */
+ public function createAuthUrl($scope)
+ {
+ $params = array(
+ 'response_type' => 'code',
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
+ 'scope' => $scope,
+ 'access_type' => $this->client->getClassConfig($this, 'access_type'),
+ );
+
+ $params = $this->maybeAddParam($params, 'approval_prompt');
+ $params = $this->maybeAddParam($params, 'login_hint');
+ $params = $this->maybeAddParam($params, 'hd');
+ $params = $this->maybeAddParam($params, 'openid.realm');
+ $params = $this->maybeAddParam($params, 'prompt');
+ $params = $this->maybeAddParam($params, 'include_granted_scopes');
+
+ // If the list of scopes contains plus.login, add request_visible_actions
+ // to auth URL.
+ $rva = $this->client->getClassConfig($this, 'request_visible_actions');
+ if (strpos($scope, 'plus.login') && strlen($rva) > 0) {
+ $params['request_visible_actions'] = $rva;
+ }
+
+ if (isset($this->state)) {
+ $params['state'] = $this->state;
+ }
+
+ return self::OAUTH2_AUTH_URL . "?" . http_build_query($params, '', '&');
+ }
+
+ /**
+ * @param string $token
+ * @throws Google_Auth_Exception
+ */
+ public function setAccessToken($token)
+ {
+ $token = json_decode($token, true);
+ if ($token == null) {
+ throw new Google_Auth_Exception('Could not json decode the token');
+ }
+ if (! isset($token['access_token'])) {
+ throw new Google_Auth_Exception("Invalid token format");
+ }
+ $this->token = $token;
+ }
+
+ public function getAccessToken()
+ {
+ return json_encode($this->token);
+ }
+
+ public function getRefreshToken()
+ {
+ if (array_key_exists('refresh_token', $this->token)) {
+ return $this->token['refresh_token'];
+ } else {
+ return null;
+ }
+ }
+
+ public function setState($state)
+ {
+ $this->state = $state;
+ }
+
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
+ {
+ $this->assertionCredentials = $creds;
+ }
+
+ /**
+ * Include an accessToken in a given apiHttpRequest.
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request
+ * @throws Google_Auth_Exception
+ */
+ public function sign(Google_Http_Request $request)
+ {
+ // add the developer key to the request before signing it
+ if ($this->client->getClassConfig($this, 'developer_key')) {
+ $request->setQueryParam('key', $this->client->getClassConfig($this, 'developer_key'));
+ }
+
+ // Cannot sign the request without an OAuth access token.
+ if (null == $this->token && null == $this->assertionCredentials) {
+ return $request;
+ }
+
+ // Check if the token is set to expire in the next 30 seconds
+ // (or has already expired).
+ if ($this->isAccessTokenExpired()) {
+ if ($this->assertionCredentials) {
+ $this->refreshTokenWithAssertion();
+ } else {
+ if (! array_key_exists('refresh_token', $this->token)) {
+ throw new Google_Auth_Exception(
+ "The OAuth 2.0 access token has expired,"
+ ." and a refresh token is not available. Refresh tokens"
+ ." are not returned for responses that were auto-approved."
+ );
+ }
+ $this->refreshToken($this->token['refresh_token']);
+ }
+ }
+
+ // Add the OAuth2 header to the request
+ $request->setRequestHeaders(
+ array('Authorization' => 'Bearer ' . $this->token['access_token'])
+ );
+
+ return $request;
+ }
+
+ /**
+ * Fetches a fresh access token with the given refresh token.
+ * @param string $refreshToken
+ * @return void
+ */
+ public function refreshToken($refreshToken)
+ {
+ $this->refreshTokenRequest(
+ array(
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret'),
+ 'refresh_token' => $refreshToken,
+ 'grant_type' => 'refresh_token'
+ )
+ );
+ }
+
+ /**
+ * Fetches a fresh access token with a given assertion token.
+ * @param Google_Auth_AssertionCredentials $assertionCredentials optional.
+ * @return void
+ */
+ public function refreshTokenWithAssertion($assertionCredentials = null)
+ {
+ if (!$assertionCredentials) {
+ $assertionCredentials = $this->assertionCredentials;
+ }
+
+ $cacheKey = $assertionCredentials->getCacheKey();
+
+ if ($cacheKey) {
+ // We can check whether we have a token available in the
+ // cache. If it is expired, we can retrieve a new one from
+ // the assertion.
+ $token = $this->client->getCache()->get($cacheKey);
+ if ($token) {
+ $this->setAccessToken($token);
+ }
+ if (!$this->isAccessTokenExpired()) {
+ return;
+ }
+ }
+
+ $this->refreshTokenRequest(
+ array(
+ 'grant_type' => 'assertion',
+ 'assertion_type' => $assertionCredentials->assertionType,
+ 'assertion' => $assertionCredentials->generateAssertion(),
+ )
+ );
+
+ if ($cacheKey) {
+ // Attempt to cache the token.
+ $this->client->getCache()->set(
+ $cacheKey,
+ $this->getAccessToken()
+ );
+ }
+ }
+
+ private function refreshTokenRequest($params)
+ {
+ $http = new Google_Http_Request(
+ self::OAUTH2_TOKEN_URI,
+ 'POST',
+ array(),
+ $params
+ );
+ $http->disableGzip();
+ $request = $this->client->getIo()->makeRequest($http);
+
+ $code = $request->getResponseHttpCode();
+ $body = $request->getResponseBody();
+ if (200 == $code) {
+ $token = json_decode($body, true);
+ if ($token == null) {
+ throw new Google_Auth_Exception("Could not json decode the access token");
+ }
+
+ if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
+ throw new Google_Auth_Exception("Invalid token format");
+ }
+
+ if (isset($token['id_token'])) {
+ $this->token['id_token'] = $token['id_token'];
+ }
+ $this->token['access_token'] = $token['access_token'];
+ $this->token['expires_in'] = $token['expires_in'];
+ $this->token['created'] = time();
+ } else {
+ throw new Google_Auth_Exception("Error refreshing the OAuth2 token, message: '$body'", $code);
+ }
+ }
+
+ /**
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
+ * token, if a token isn't provided.
+ * @throws Google_Auth_Exception
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
+ * @return boolean Returns True if the revocation was successful, otherwise False.
+ */
+ public function revokeToken($token = null)
+ {
+ if (!$token) {
+ if (!$this->token) {
+ // Not initialized, no token to actually revoke
+ return false;
+ } elseif (array_key_exists('refresh_token', $this->token)) {
+ $token = $this->token['refresh_token'];
+ } else {
+ $token = $this->token['access_token'];
+ }
+ }
+ $request = new Google_Http_Request(
+ self::OAUTH2_REVOKE_URI,
+ 'POST',
+ array(),
+ "token=$token"
+ );
+ $request->disableGzip();
+ $response = $this->client->getIo()->makeRequest($request);
+ $code = $response->getResponseHttpCode();
+ if ($code == 200) {
+ $this->token = null;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns if the access_token is expired.
+ * @return bool Returns True if the access_token is expired.
+ */
+ public function isAccessTokenExpired()
+ {
+ if (!$this->token || !isset($this->token['created'])) {
+ return true;
+ }
+
+ // If the token is set to expire in the next 30 seconds.
+ $expired = ($this->token['created']
+ + ($this->token['expires_in'] - 30)) < time();
+
+ return $expired;
+ }
+
+ // Gets federated sign-on certificates to use for verifying identity tokens.
+ // Returns certs as array structure, where keys are key ids, and values
+ // are PEM encoded certificates.
+ private function getFederatedSignOnCerts()
+ {
+ return $this->retrieveCertsFromLocation(
+ $this->client->getClassConfig($this, 'federated_signon_certs_url')
+ );
+ }
+
+ /**
+ * Retrieve and cache a certificates file.
+ * @param $url location
+ * @return array certificates
+ */
+ public function retrieveCertsFromLocation($url)
+ {
+ // If we're retrieving a local file, just grab it.
+ if ("http" != substr($url, 0, 4)) {
+ $file = file_get_contents($url);
+ if ($file) {
+ return json_decode($file, true);
+ } else {
+ throw new Google_Auth_Exception(
+ "Failed to retrieve verification certificates: '" .
+ $url . "'."
+ );
+ }
+ }
+
+ // This relies on makeRequest caching certificate responses.
+ $request = $this->client->getIo()->makeRequest(
+ new Google_Http_Request(
+ $url
+ )
+ );
+ if ($request->getResponseHttpCode() == 200) {
+ $certs = json_decode($request->getResponseBody(), true);
+ if ($certs) {
+ return $certs;
+ }
+ }
+ throw new Google_Auth_Exception(
+ "Failed to retrieve verification certificates: '" .
+ $request->getResponseBody() . "'.",
+ $request->getResponseHttpCode()
+ );
+ }
+
+ /**
+ * Verifies an id token and returns the authenticated apiLoginTicket.
+ * Throws an exception if the id token is not valid.
+ * The audience parameter can be used to control which id tokens are
+ * accepted. By default, the id token must have been issued to this OAuth2 client.
+ *
+ * @param $id_token
+ * @param $audience
+ * @return Google_Auth_LoginTicket
+ */
+ public function verifyIdToken($id_token = null, $audience = null)
+ {
+ if (!$id_token) {
+ $id_token = $this->token['id_token'];
+ }
+ $certs = $this->getFederatedSignonCerts();
+ if (!$audience) {
+ $audience = $this->client->getClassConfig($this, 'client_id');
+ }
+
+ return $this->verifySignedJwtWithCerts($id_token, $certs, $audience, self::OAUTH2_ISSUER);
+ }
+
+ /**
+ * Verifies the id token, returns the verified token contents.
+ *
+ * @param $jwt the token
+ * @param $certs array of certificates
+ * @param $required_audience the expected consumer of the token
+ * @param [$issuer] the expected issues, defaults to Google
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
+ * @return token information if valid, false if not
+ */
+ public function verifySignedJwtWithCerts(
+ $jwt,
+ $certs,
+ $required_audience,
+ $issuer = null,
+ $max_expiry = null
+ ) {
+ if (!$max_expiry) {
+ // Set the maximum time we will accept a token for.
+ $max_expiry = self::MAX_TOKEN_LIFETIME_SECS;
+ }
+
+ $segments = explode(".", $jwt);
+ if (count($segments) != 3) {
+ throw new Google_Auth_Exception("Wrong number of segments in token: $jwt");
+ }
+ $signed = $segments[0] . "." . $segments[1];
+ $signature = Google_Utils::urlSafeB64Decode($segments[2]);
+
+ // Parse envelope.
+ $envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
+ if (!$envelope) {
+ throw new Google_Auth_Exception("Can't parse token envelope: " . $segments[0]);
+ }
+
+ // Parse token
+ $json_body = Google_Utils::urlSafeB64Decode($segments[1]);
+ $payload = json_decode($json_body, true);
+ if (!$payload) {
+ throw new Google_Auth_Exception("Can't parse token payload: " . $segments[1]);
+ }
+
+ // Check signature
+ $verified = false;
+ foreach ($certs as $keyName => $pem) {
+ $public_key = new Google_Verifier_Pem($pem);
+ if ($public_key->verify($signed, $signature)) {
+ $verified = true;
+ break;
+ }
+ }
+
+ if (!$verified) {
+ throw new Google_Auth_Exception("Invalid token signature: $jwt");
+ }
+
+ // Check issued-at timestamp
+ $iat = 0;
+ if (array_key_exists("iat", $payload)) {
+ $iat = $payload["iat"];
+ }
+ if (!$iat) {
+ throw new Google_Auth_Exception("No issue time in token: $json_body");
+ }
+ $earliest = $iat - self::CLOCK_SKEW_SECS;
+
+ // Check expiration timestamp
+ $now = time();
+ $exp = 0;
+ if (array_key_exists("exp", $payload)) {
+ $exp = $payload["exp"];
+ }
+ if (!$exp) {
+ throw new Google_Auth_Exception("No expiration time in token: $json_body");
+ }
+ if ($exp >= $now + $max_expiry) {
+ throw new Google_Auth_Exception(
+ sprintf("Expiration time too far in future: %s", $json_body)
+ );
+ }
+
+ $latest = $exp + self::CLOCK_SKEW_SECS;
+ if ($now < $earliest) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Token used too early, %s < %s: %s",
+ $now,
+ $earliest,
+ $json_body
+ )
+ );
+ }
+ if ($now > $latest) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Token used too late, %s > %s: %s",
+ $now,
+ $latest,
+ $json_body
+ )
+ );
+ }
+
+ $iss = $payload['iss'];
+ if ($issuer && $iss != $issuer) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Invalid issuer, %s != %s: %s",
+ $iss,
+ $issuer,
+ $json_body
+ )
+ );
+ }
+
+ // Check audience
+ $aud = $payload["aud"];
+ if ($aud != $required_audience) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Wrong recipient, %s != %s:",
+ $aud,
+ $required_audience,
+ $json_body
+ )
+ );
+ }
+
+ // All good.
+ return new Google_Auth_LoginTicket($envelope, $payload);
+ }
+
+ /**
+ * Add a parameter to the auth params if not empty string.
+ */
+ private function maybeAddParam($params, $name)
+ {
+ $param = $this->client->getClassConfig($this, $name);
+ if ($param != '') {
+ $params[$name] = $param;
+ }
+ return $params;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php
new file mode 100644
index 00000000000..e83900fc26f
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Auth/Abstract.php";
+require_once "Google/Http/Request.php";
+
+/**
+ * Simple API access implementation. Can either be used to make requests
+ * completely unauthenticated, or by using a Simple API Access developer
+ * key.
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_Auth_Simple extends Google_Auth_Abstract
+{
+ private $key = null;
+ private $client;
+
+ public function __construct(Google_Client $client, $config = null)
+ {
+ $this->client = $client;
+ }
+
+ /**
+ * Perform an authenticated / signed apiHttpRequest.
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
+ * (which can modify the request in what ever way fits the auth mechanism)
+ * and then calls apiCurlIO::makeRequest on the signed request
+ *
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request The resulting HTTP response including the
+ * responseHttpCode, responseHeaders and responseBody.
+ */
+ public function authenticatedRequest(Google_Http_Request $request)
+ {
+ $request = $this->sign($request);
+ return $this->io->makeRequest($request);
+ }
+
+ public function sign(Google_Http_Request $request)
+ {
+ $key = $this->client->getClassConfig($this, 'developer_key');
+ if ($key) {
+ $request->setQueryParam('key', $key);
+ }
+ return $request;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Abstract.php
index 809c55e2b15..ff19f36ac46 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Abstract.php
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-require_once "Google_FileCache.php";
-require_once "Google_MemcacheCache.php";
-
/**
* Abstract storage class
*
* @author Chris Chabot <chabotc@google.com>
*/
-abstract class Google_Cache {
+abstract class Google_Cache_Abstract
+{
+
+ abstract public function __construct(Google_Client $client);
/**
* Retrieves the data for the given key, or false if they
@@ -33,7 +33,7 @@ abstract class Google_Cache {
* @param boolean|int $expiration Expiration time in seconds
*
*/
- abstract function get($key, $expiration = false);
+ abstract public function get($key, $expiration = false);
/**
* Store the key => $value set. The $value is serialized
@@ -42,14 +42,12 @@ abstract class Google_Cache {
* @param string $key Key of the data
* @param string $value data
*/
- abstract function set($key, $value);
+ abstract public function set($key, $value);
/**
* Removes the key/data pair for the given $key
*
* @param String $key
*/
- abstract function delete($key);
+ abstract public function delete($key);
}
-
-
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php
new file mode 100644
index 00000000000..051b537a4e1
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php
@@ -0,0 +1,73 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Cache/Abstract.php";
+require_once "Google/Cache/Exception.php";
+
+/**
+ * A persistent storage class based on the APC cache, which is not
+ * really very persistent, as soon as you restart your web server
+ * the storage will be wiped, however for debugging and/or speed
+ * it can be useful, and cache is a lot cheaper then storage.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_Cache_Apc extends Google_Cache_Abstract
+{
+ public function __construct(Google_Client $client)
+ {
+ if (! function_exists('apc_add') ) {
+ throw new Google_Cache_Exception("Apc functions not available");
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function get($key, $expiration = false)
+ {
+ $ret = apc_fetch($key);
+ if ($ret === false) {
+ return false;
+ }
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
+ $this->delete($key);
+ return false;
+ }
+ return $ret['data'];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function set($key, $value)
+ {
+ $rc = apc_store($key, array('time' => time(), 'data' => $value));
+ if ($rc == false) {
+ throw new Google_Cache_Exception("Couldn't store data");
+ }
+ }
+
+ /**
+ * @inheritDoc
+ * @param String $key
+ */
+ public function delete($key)
+ {
+ apc_delete($key);
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php
new file mode 100644
index 00000000000..23b624608e8
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php
@@ -0,0 +1,21 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+require_once "Google/Exception.php";
+
+class Google_Cache_Exception extends Google_Exception
+{
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php
new file mode 100644
index 00000000000..8d0d62fe88c
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php
@@ -0,0 +1,145 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Cache/Abstract.php";
+require_once "Google/Cache/Exception.php";
+
+/*
+ * This class implements a basic on disk storage. While that does
+ * work quite well it's not the most elegant and scalable solution.
+ * It will also get you into a heap of trouble when you try to run
+ * this in a clustered environment.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_Cache_File extends Google_Cache_Abstract
+{
+ const MAX_LOCK_RETRIES = 10;
+ private $path;
+ private $fh;
+
+ public function __construct(Google_Client $client)
+ {
+ $this->path = $client->getClassConfig($this, 'directory');
+ }
+
+ public function get($key, $expiration = false)
+ {
+ $storageFile = $this->getCacheFile($key);
+ $data = false;
+
+ if (!file_exists($storageFile)) {
+ return false;
+ }
+
+ if ($expiration) {
+ $mtime = filemtime($storageFile);
+ if ((time() - $mtime) >= $expiration) {
+ $this->delete($key);
+ return false;
+ }
+ }
+
+ if ($this->acquireReadLock($storageFile)) {
+ $data = fread($this->fh, filesize($storageFile));
+ $data = unserialize($data);
+ $this->unlock($storageFile);
+ }
+
+ return $data;
+ }
+
+ public function set($key, $value)
+ {
+ $storageFile = $this->getWriteableCacheFile($key);
+ if ($this->acquireWriteLock($storageFile)) {
+ // We serialize the whole request object, since we don't only want the
+ // responseContent but also the postBody used, headers, size, etc.
+ $data = serialize($value);
+ $result = fwrite($this->fh, $data);
+ $this->unlock($storageFile);
+ }
+ }
+
+ public function delete($key)
+ {
+ $file = $this->getCacheFile($key);
+ if (file_exists($file) && !unlink($file)) {
+ throw new Google_Cache_Exception("Cache file could not be deleted");
+ }
+ }
+
+ private function getWriteableCacheFile($file)
+ {
+ return $this->getCacheFile($file, true);
+ }
+
+ private function getCacheFile($file, $forWrite = false)
+ {
+ return $this->getCacheDir($file, $forWrite) . '/' . md5($file);
+ }
+
+ private function getCacheDir($file, $forWrite)
+ {
+ // use the first 2 characters of the hash as a directory prefix
+ // this should prevent slowdowns due to huge directory listings
+ // and thus give some basic amount of scalability
+ $storageDir = $this->path . '/' . substr(md5($file), 0, 2);
+ if ($forWrite && ! is_dir($storageDir)) {
+ if (! mkdir($storageDir, 0755, true)) {
+ throw new Google_Cache_Exception("Could not create storage directory: $storageDir");
+ }
+ }
+ return $storageDir;
+ }
+
+ private function acquireReadLock($storageFile)
+ {
+ return $this->acquireLock(LOCK_SH, $storageFile);
+ }
+
+ private function acquireWriteLock($storageFile)
+ {
+ $rc = $this->acquireLock(LOCK_EX, $storageFile);
+ if (!$rc) {
+ $this->delete($storageFile);
+ }
+ return $rc;
+ }
+
+ private function acquireLock($type, $storageFile)
+ {
+ $mode = $type == LOCK_EX ? "w" : "r";
+ $this->fh = fopen($storageFile, $mode);
+ $count = 0;
+ while (!flock($this->fh, $type | LOCK_NB)) {
+ // Sleep for 10ms.
+ usleep(10000);
+ if (++$count < self::MAX_LOCK_RETRIES) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public function unlock($storageFile)
+ {
+ if ($this->fh) {
+ flock($this->fh, LOCK_UN);
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php
new file mode 100644
index 00000000000..1104afb8aeb
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php
@@ -0,0 +1,137 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Cache/Abstract.php";
+require_once "Google/Cache/Exception.php";
+
+/**
+ * A persistent storage class based on the memcache, which is not
+ * really very persistent, as soon as you restart your memcache daemon
+ * the storage will be wiped.
+ *
+ * Will use either the memcache or memcached extensions, preferring
+ * memcached.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_Cache_Memcache extends Google_Cache_Abstract
+{
+ private $connection = false;
+ private $mc = false;
+ private $host;
+ private $port;
+
+ public function __construct(Google_Client $client)
+ {
+ if (!function_exists('memcache_connect') && !class_exists("Memcached")) {
+ throw new Google_Cache_Exception("Memcache functions not available");
+ }
+ if ($client->isAppEngine()) {
+ // No credentials needed for GAE.
+ $this->mc = new Memcached();
+ $this->connection = true;
+ } else {
+ $this->host = $client->getClassConfig($this, 'host');
+ $this->port = $client->getClassConfig($this, 'port');
+ if (empty($this->host) || (empty($this->port) && (string) $this->port != "0")) {
+ throw new Google_Cache_Exception("You need to supply a valid memcache host and port");
+ }
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function get($key, $expiration = false)
+ {
+ $this->connect();
+ $ret = false;
+ if ($this->mc) {
+ $ret = $this->mc->get($key);
+ } else {
+ $ret = memcache_get($this->connection, $key);
+ }
+ if ($ret === false) {
+ return false;
+ }
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
+ $this->delete($key);
+ return false;
+ }
+ return $ret['data'];
+ }
+
+ /**
+ * @inheritDoc
+ * @param string $key
+ * @param string $value
+ * @throws Google_Cache_Exception
+ */
+ public function set($key, $value)
+ {
+ $this->connect();
+ // we store it with the cache_time default expiration so objects will at
+ // least get cleaned eventually.
+ $data = array('time' => time(), 'data' => $value);
+ $rc = false;
+ if ($this->mc) {
+ $rc = $this->mc->set($key, $data);
+ } else {
+ $rc = memcache_set($this->connection, $key, $data, false);
+ }
+ if ($rc == false) {
+ throw new Google_Cache_Exception("Couldn't store data in cache");
+ }
+ }
+
+ /**
+ * @inheritDoc
+ * @param String $key
+ */
+ public function delete($key)
+ {
+ $this->connect();
+ if ($this->mc) {
+ $this->mc->delete($key, 0);
+ } else {
+ memcache_delete($this->connection, $key, 0);
+ }
+ }
+
+ /**
+ * Lazy initialiser for memcache connection. Uses pconnect for to take
+ * advantage of the persistence pool where possible.
+ */
+ private function connect()
+ {
+ if ($this->connection) {
+ return;
+ }
+
+ if (class_exists("Memcached")) {
+ $this->mc = new Memcached();
+ $this->mc->addServer($this->host, $this->port);
+ $this->connection = true;
+ } else {
+ $this->connection = memcache_pconnect($this->host, $this->port);
+ }
+
+ if (! $this->connection) {
+ throw new Google_Cache_Exception("Couldn't connect to memcache server");
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php
new file mode 100644
index 00000000000..e15b4f4ea3c
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php
@@ -0,0 +1,665 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Auth/AssertionCredentials.php';
+require_once 'Google/Cache/File.php';
+require_once 'Google/Cache/Memcache.php';
+require_once 'Google/Config.php';
+require_once 'Google/Collection.php';
+require_once 'Google/Exception.php';
+require_once 'Google/IO/Curl.php';
+require_once 'Google/IO/Stream.php';
+require_once 'Google/Model.php';
+require_once 'Google/Service.php';
+require_once 'Google/Service/Resource.php';
+
+/**
+ * The Google API Client
+ * http://code.google.com/p/google-api-php-client/
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_Client
+{
+ const LIBVER = "1.0.6-beta";
+ const USER_AGENT_SUFFIX = "google-api-php-client/";
+ /**
+ * @var Google_Auth_Abstract $auth
+ */
+ private $auth;
+
+ /**
+ * @var Google_IO_Abstract $io
+ */
+ private $io;
+
+ /**
+ * @var Google_Cache_Abstract $cache
+ */
+ private $cache;
+
+ /**
+ * @var Google_Config $config
+ */
+ private $config;
+
+ /**
+ * @var boolean $deferExecution
+ */
+ private $deferExecution = false;
+
+ /** @var array $scopes */
+ // Scopes requested by the client
+ protected $requestedScopes = array();
+
+ // definitions of services that are discovered.
+ protected $services = array();
+
+ // Used to track authenticated state, can't discover services after doing authenticate()
+ private $authenticated = false;
+
+ /**
+ * Construct the Google Client.
+ *
+ * @param $config Google_Config or string for the ini file to load
+ */
+ public function __construct($config = null)
+ {
+ if (is_string($config) && strlen($config)) {
+ $config = new Google_Config($config);
+ } else if ( !($config instanceof Google_Config)) {
+ $config = new Google_Config();
+
+ if ($this->isAppEngine()) {
+ // Automatically use Memcache if we're in AppEngine.
+ $config->setCacheClass('Google_Cache_Memcache');
+ }
+
+ if (version_compare(phpversion(), "5.3.4", "<=") || $this->isAppEngine()) {
+ // Automatically disable compress.zlib, as currently unsupported.
+ $config->setClassConfig('Google_Http_Request', 'disable_gzip', true);
+ }
+ }
+
+ if ($config->getIoClass() == Google_Config::USE_AUTO_IO_SELECTION) {
+ if (function_exists('curl_version') && function_exists('curl_exec')) {
+ $config->setIoClass("Google_IO_Curl");
+ } else {
+ $config->setIoClass("Google_IO_Stream");
+ }
+ }
+
+ $this->config = $config;
+ }
+
+ /**
+ * Get a string containing the version of the library.
+ *
+ * @return string
+ */
+ public function getLibraryVersion()
+ {
+ return self::LIBVER;
+ }
+
+ /**
+ * Attempt to exchange a code for an valid authentication token.
+ * Helper wrapped around the OAuth 2.0 implementation.
+ *
+ * @param $code string code from accounts.google.com
+ * @return string token
+ */
+ public function authenticate($code)
+ {
+ $this->authenticated = true;
+ return $this->getAuth()->authenticate($code);
+ }
+
+ /**
+ * Set the auth config from the JSON string provided.
+ * This structure should match the file downloaded from
+ * the "Download JSON" button on in the Google Developer
+ * Console.
+ * @param string $json the configuration json
+ */
+ public function setAuthConfig($json)
+ {
+ $data = json_decode($json);
+ $key = isset($data->installed) ? 'installed' : 'web';
+ if (!isset($data->$key)) {
+ throw new Google_Exception("Invalid client secret JSON file.");
+ }
+ $this->setClientId($data->$key->client_id);
+ $this->setClientSecret($data->$key->client_secret);
+ if (isset($data->$key->redirect_uris)) {
+ $this->setRedirectUri($data->$key->redirect_uris[0]);
+ }
+ }
+
+ /**
+ * Set the auth config from the JSON file in the path
+ * provided. This should match the file downloaded from
+ * the "Download JSON" button on in the Google Developer
+ * Console.
+ * @param string $file the file location of the client json
+ */
+ public function setAuthConfigFile($file)
+ {
+ $this->setAuthConfig(file_get_contents($file));
+ }
+
+ /**
+ * @return array
+ * @visible For Testing
+ */
+ public function prepareScopes()
+ {
+ if (empty($this->requestedScopes)) {
+ throw new Google_Auth_Exception("No scopes specified");
+ }
+ $scopes = implode(' ', $this->requestedScopes);
+ return $scopes;
+ }
+
+ /**
+ * Set the OAuth 2.0 access token using the string that resulted from calling createAuthUrl()
+ * or Google_Client#getAccessToken().
+ * @param string $accessToken JSON encoded string containing in the following format:
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+ * "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
+ */
+ public function setAccessToken($accessToken)
+ {
+ if ($accessToken == 'null') {
+ $accessToken = null;
+ }
+ $this->getAuth()->setAccessToken($accessToken);
+ }
+
+
+
+ /**
+ * Set the authenticator object
+ * @param Google_Auth_Abstract $auth
+ */
+ public function setAuth(Google_Auth_Abstract $auth)
+ {
+ $this->config->setAuthClass(get_class($auth));
+ $this->auth = $auth;
+ }
+
+ /**
+ * Set the IO object
+ * @param Google_Io_Abstract $auth
+ */
+ public function setIo(Google_Io_Abstract $io)
+ {
+ $this->config->setIoClass(get_class($io));
+ $this->io = $io;
+ }
+
+ /**
+ * Set the Cache object
+ * @param Google_Cache_Abstract $auth
+ */
+ public function setCache(Google_Cache_Abstract $cache)
+ {
+ $this->config->setCacheClass(get_class($cache));
+ $this->cache = $cache;
+ }
+
+ /**
+ * Construct the OAuth 2.0 authorization request URI.
+ * @return string
+ */
+ public function createAuthUrl()
+ {
+ $scopes = $this->prepareScopes();
+ return $this->getAuth()->createAuthUrl($scopes);
+ }
+
+ /**
+ * Get the OAuth 2.0 access token.
+ * @return string $accessToken JSON encoded string in the following format:
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+ * "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
+ */
+ public function getAccessToken()
+ {
+ $token = $this->getAuth()->getAccessToken();
+ // The response is json encoded, so could be the string null.
+ // It is arguable whether this check should be here or lower
+ // in the library.
+ return (null == $token || 'null' == $token || '[]' == $token) ? null : $token;
+ }
+
+ /**
+ * Get the OAuth 2.0 refresh token.
+ * @return string $refreshToken refresh token or null if not available
+ */
+ public function getRefreshToken()
+ {
+ return $this->getAuth()->getRefreshToken();
+ }
+
+ /**
+ * Returns if the access_token is expired.
+ * @return bool Returns True if the access_token is expired.
+ */
+ public function isAccessTokenExpired()
+ {
+ return $this->getAuth()->isAccessTokenExpired();
+ }
+
+ /**
+ * Set OAuth 2.0 "state" parameter to achieve per-request customization.
+ * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
+ * @param string $state
+ */
+ public function setState($state)
+ {
+ $this->getAuth()->setState($state);
+ }
+
+ /**
+ * @param string $accessType Possible values for access_type include:
+ * {@code "offline"} to request offline access from the user.
+ * {@code "online"} to request online access from the user.
+ */
+ public function setAccessType($accessType)
+ {
+ $this->config->setAccessType($accessType);
+ }
+
+ /**
+ * @param string $approvalPrompt Possible values for approval_prompt include:
+ * {@code "force"} to force the approval UI to appear. (This is the default value)
+ * {@code "auto"} to request auto-approval when possible.
+ */
+ public function setApprovalPrompt($approvalPrompt)
+ {
+ $this->config->setApprovalPrompt($approvalPrompt);
+ }
+
+ /**
+ * Set the login hint, email address or sub id.
+ * @param string $loginHint
+ */
+ public function setLoginHint($loginHint)
+ {
+ $this->config->setLoginHint($loginHint);
+ }
+
+ /**
+ * Set the application name, this is included in the User-Agent HTTP header.
+ * @param string $applicationName
+ */
+ public function setApplicationName($applicationName)
+ {
+ $this->config->setApplicationName($applicationName);
+ }
+
+ /**
+ * Set the OAuth 2.0 Client ID.
+ * @param string $clientId
+ */
+ public function setClientId($clientId)
+ {
+ $this->config->setClientId($clientId);
+ }
+
+ /**
+ * Set the OAuth 2.0 Client Secret.
+ * @param string $clientSecret
+ */
+ public function setClientSecret($clientSecret)
+ {
+ $this->config->setClientSecret($clientSecret);
+ }
+
+ /**
+ * Set the OAuth 2.0 Redirect URI.
+ * @param string $redirectUri
+ */
+ public function setRedirectUri($redirectUri)
+ {
+ $this->config->setRedirectUri($redirectUri);
+ }
+
+ /**
+ * If 'plus.login' is included in the list of requested scopes, you can use
+ * this method to define types of app activities that your app will write.
+ * You can find a list of available types here:
+ * @link https://developers.google.com/+/api/moment-types
+ *
+ * @param array $requestVisibleActions Array of app activity types
+ */
+ public function setRequestVisibleActions($requestVisibleActions)
+ {
+ if (is_array($requestVisibleActions)) {
+ $requestVisibleActions = join(" ", $requestVisibleActions);
+ }
+ $this->config->setRequestVisibleActions($requestVisibleActions);
+ }
+
+ /**
+ * Set the developer key to use, these are obtained through the API Console.
+ * @see http://code.google.com/apis/console-help/#generatingdevkeys
+ * @param string $developerKey
+ */
+ public function setDeveloperKey($developerKey)
+ {
+ $this->config->setDeveloperKey($developerKey);
+ }
+
+ /**
+ * Set the hd (hosted domain) parameter streamlines the login process for
+ * Google Apps hosted accounts. By including the domain of the user, you
+ * restrict sign-in to accounts at that domain.
+ * @param $hd string - the domain to use.
+ */
+ public function setHostedDomain($hd)
+ {
+ $this->config->setHostedDomain($hd);
+ }
+
+ /**
+ * Set the prompt hint. Valid values are none, consent and select_account.
+ * If no value is specified and the user has not previously authorized
+ * access, then the user is shown a consent screen.
+ * @param $prompt string
+ */
+ public function setPrompt($prompt)
+ {
+ $this->config->setPrompt($prompt);
+ }
+
+ /**
+ * openid.realm is a parameter from the OpenID 2.0 protocol, not from OAuth
+ * 2.0. It is used in OpenID 2.0 requests to signify the URL-space for which
+ * an authentication request is valid.
+ * @param $realm string - the URL-space to use.
+ */
+ public function setOpenidRealm($realm)
+ {
+ $this->config->setOpenidRealm($realm);
+ }
+
+ /**
+ * If this is provided with the value true, and the authorization request is
+ * granted, the authorization will include any previous authorizations
+ * granted to this user/application combination for other scopes.
+ * @param $include boolean - the URL-space to use.
+ */
+ public function setIncludeGrantedScopes($include)
+ {
+ $this->config->setIncludeGrantedScopes($include);
+ }
+
+ /**
+ * Fetches a fresh OAuth 2.0 access token with the given refresh token.
+ * @param string $refreshToken
+ * @return void
+ */
+ public function refreshToken($refreshToken)
+ {
+ return $this->getAuth()->refreshToken($refreshToken);
+ }
+
+ /**
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
+ * token, if a token isn't provided.
+ * @throws Google_Auth_Exception
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
+ * @return boolean Returns True if the revocation was successful, otherwise False.
+ */
+ public function revokeToken($token = null)
+ {
+ return $this->getAuth()->revokeToken($token);
+ }
+
+ /**
+ * Verify an id_token. This method will verify the current id_token, if one
+ * isn't provided.
+ * @throws Google_Auth_Exception
+ * @param string|null $token The token (id_token) that should be verified.
+ * @return Google_Auth_LoginTicket Returns an apiLoginTicket if the verification was
+ * successful.
+ */
+ public function verifyIdToken($token = null)
+ {
+ return $this->getAuth()->verifyIdToken($token);
+ }
+
+ /**
+ * Verify a JWT that was signed with your own certificates.
+ *
+ * @param $jwt the token
+ * @param $certs array of certificates
+ * @param $required_audience the expected consumer of the token
+ * @param [$issuer] the expected issues, defaults to Google
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
+ * @return token information if valid, false if not
+ */
+ public function verifySignedJwt($id_token, $cert_location, $audience, $issuer, $max_expiry = null)
+ {
+ $auth = new Google_Auth_OAuth2($this);
+ $certs = $auth->retrieveCertsFromLocation($cert_location);
+ return $auth->verifySignedJwtWithCerts($id_token, $certs, $audience, $issuer, $max_expiry);
+ }
+
+ /**
+ * @param Google_Auth_AssertionCredentials $creds
+ * @return void
+ */
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
+ {
+ $this->getAuth()->setAssertionCredentials($creds);
+ }
+
+ /**
+ * Set the scopes to be requested. Must be called before createAuthUrl().
+ * Will remove any previously configured scopes.
+ * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.login',
+ * 'https://www.googleapis.com/auth/moderator')
+ */
+ public function setScopes($scopes)
+ {
+ $this->requestedScopes = array();
+ $this->addScope($scopes);
+ }
+
+ /**
+ * This functions adds a scope to be requested as part of the OAuth2.0 flow.
+ * Will append any scopes not previously requested to the scope parameter.
+ * A single string will be treated as a scope to request. An array of strings
+ * will each be appended.
+ * @param $scope_or_scopes string|array e.g. "profile"
+ */
+ public function addScope($scope_or_scopes)
+ {
+ if (is_string($scope_or_scopes) && !in_array($scope_or_scopes, $this->requestedScopes)) {
+ $this->requestedScopes[] = $scope_or_scopes;
+ } else if (is_array($scope_or_scopes)) {
+ foreach ($scope_or_scopes as $scope) {
+ $this->addScope($scope);
+ }
+ }
+ }
+
+ /**
+ * Returns the list of scopes requested by the client
+ * @return array the list of scopes
+ *
+ */
+ public function getScopes()
+ {
+ return $this->requestedScopes;
+ }
+
+ /**
+ * Declare whether batch calls should be used. This may increase throughput
+ * by making multiple requests in one connection.
+ *
+ * @param boolean $useBatch True if the batch support should
+ * be enabled. Defaults to False.
+ */
+ public function setUseBatch($useBatch)
+ {
+ // This is actually an alias for setDefer.
+ $this->setDefer($useBatch);
+ }
+
+ /**
+ * Declare whether making API calls should make the call immediately, or
+ * return a request which can be called with ->execute();
+ *
+ * @param boolean $defer True if calls should not be executed right away.
+ */
+ public function setDefer($defer)
+ {
+ $this->deferExecution = $defer;
+ }
+
+ /**
+ * Helper method to execute deferred HTTP requests.
+ *
+ * @return object of the type of the expected class or array.
+ */
+ public function execute($request)
+ {
+ if ($request instanceof Google_Http_Request) {
+ $request->setUserAgent(
+ $this->getApplicationName()
+ . " " . self::USER_AGENT_SUFFIX
+ . $this->getLibraryVersion()
+ );
+ if (!$this->getClassConfig("Google_Http_Request", "disable_gzip")) {
+ $request->enableGzip();
+ }
+ $request->maybeMoveParametersToBody();
+ return Google_Http_REST::execute($this, $request);
+ } else if ($request instanceof Google_Http_Batch) {
+ return $request->execute();
+ } else {
+ throw new Google_Exception("Do not know how to execute this type of object.");
+ }
+ }
+
+ /**
+ * Whether or not to return raw requests
+ * @return boolean
+ */
+ public function shouldDefer()
+ {
+ return $this->deferExecution;
+ }
+
+ /**
+ * @return Google_Auth_Abstract Authentication implementation
+ */
+ public function getAuth()
+ {
+ if (!isset($this->auth)) {
+ $class = $this->config->getAuthClass();
+ $this->auth = new $class($this);
+ }
+ return $this->auth;
+ }
+
+ /**
+ * @return Google_IO_Abstract IO implementation
+ */
+ public function getIo()
+ {
+ if (!isset($this->io)) {
+ $class = $this->config->getIoClass();
+ $this->io = new $class($this);
+ }
+ return $this->io;
+ }
+
+ /**
+ * @return Google_Cache_Abstract Cache implementation
+ */
+ public function getCache()
+ {
+ if (!isset($this->cache)) {
+ $class = $this->config->getCacheClass();
+ $this->cache = new $class($this);
+ }
+ return $this->cache;
+ }
+
+ /**
+ * Retrieve custom configuration for a specific class.
+ * @param $class string|object - class or instance of class to retrieve
+ * @param $key string optional - key to retrieve
+ */
+ public function getClassConfig($class, $key = null)
+ {
+ if (!is_string($class)) {
+ $class = get_class($class);
+ }
+ return $this->config->getClassConfig($class, $key);
+ }
+
+ /**
+ * Set configuration specific to a given class.
+ * $config->setClassConfig('Google_Cache_File',
+ * array('directory' => '/tmp/cache'));
+ * @param $class The class name for the configuration
+ * @param $config string key or an array of configuration values
+ * @param $value optional - if $config is a key, the value
+ *
+ */
+ public function setClassConfig($class, $config, $value = null)
+ {
+ if (!is_string($class)) {
+ $class = get_class($class);
+ }
+ return $this->config->setClassConfig($class, $config, $value);
+
+ }
+
+ /**
+ * @return string the base URL to use for calls to the APIs
+ */
+ public function getBasePath()
+ {
+ return $this->config->getBasePath();
+ }
+
+ /**
+ * @return string the name of the application
+ */
+ public function getApplicationName()
+ {
+ return $this->config->getApplicationName();
+ }
+
+ /**
+ * Are we running in Google AppEngine?
+ * return bool
+ */
+ public function isAppEngine()
+ {
+ return (isset($_SERVER['SERVER_SOFTWARE']) &&
+ strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false);
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php
new file mode 100644
index 00000000000..6e7bf9b0f1e
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php
@@ -0,0 +1,96 @@
+<?php
+
+require_once "Google/Model.php";
+
+/**
+ * Extension to the regular Google_Model that automatically
+ * exposes the items array for iteration, so you can just
+ * iterate over the object rather than a reference inside.
+ */
+class Google_Collection extends Google_Model implements Iterator, Countable
+{
+ protected $collection_key = 'items';
+
+ public function rewind()
+ {
+ if (isset($this->modelData[$this->collection_key])
+ && is_array($this->modelData[$this->collection_key])) {
+ reset($this->modelData[$this->collection_key]);
+ }
+ }
+
+ public function current()
+ {
+ $this->coerceType($this->key());
+ if (is_array($this->modelData[$this->collection_key])) {
+ return current($this->modelData[$this->collection_key]);
+ }
+ }
+
+ public function key()
+ {
+ if (isset($this->modelData[$this->collection_key])
+ && is_array($this->modelData[$this->collection_key])) {
+ return key($this->modelData[$this->collection_key]);
+ }
+ }
+
+ public function next()
+ {
+ return next($this->modelData[$this->collection_key]);
+ }
+
+ public function valid()
+ {
+ $key = $this->key();
+ return $key !== null && $key !== false;
+ }
+
+ public function count()
+ {
+ return count($this->modelData[$this->collection_key]);
+ }
+
+ public function offsetExists ($offset)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetExists($offset);
+ }
+ return isset($this->modelData[$this->collection_key][$offset]);
+ }
+
+ public function offsetGet($offset)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetGet($offset);
+ }
+ $this->coerceType($offset);
+ return $this->modelData[$this->collection_key][$offset];
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetSet($offset, $value);
+ }
+ $this->modelData[$this->collection_key][$offset] = $value;
+ }
+
+ public function offsetUnset($offset)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetUnset($offset);
+ }
+ unset($this->modelData[$this->collection_key][$offset]);
+ }
+
+ private function coerceType($offset)
+ {
+ $typeKey = $this->keyType($this->collection_key);
+ if (isset($this->$typeKey) && !is_object($this->modelData[$this->collection_key][$offset])) {
+ $type = $this->$typeKey;
+ $this->modelData[$this->collection_key][$offset] =
+ new $type($this->modelData[$this->collection_key][$offset]);
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php
new file mode 100644
index 00000000000..84083058fe5
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php
@@ -0,0 +1,371 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A class to contain the library configuration for the Google API client.
+ */
+class Google_Config
+{
+ const GZIP_DISABLED = true;
+ const GZIP_ENABLED = false;
+ const GZIP_UPLOADS_ENABLED = true;
+ const GZIP_UPLOADS_DISABLED = false;
+ const USE_AUTO_IO_SELECTION = "auto";
+ protected $configuration;
+
+ /**
+ * Create a new Google_Config. Can accept an ini file location with the
+ * local configuration. For example:
+ * application_name="My App"
+ *
+ * @param [$ini_file_location] - optional - The location of the ini file to load
+ */
+ public function __construct($ini_file_location = null)
+ {
+ $this->configuration = array(
+ // The application_name is included in the User-Agent HTTP header.
+ 'application_name' => '',
+
+ // Which Authentication, Storage and HTTP IO classes to use.
+ 'auth_class' => 'Google_Auth_OAuth2',
+ 'io_class' => self::USE_AUTO_IO_SELECTION,
+ 'cache_class' => 'Google_Cache_File',
+
+ // Don't change these unless you're working against a special development
+ // or testing environment.
+ 'base_path' => 'https://www.googleapis.com',
+
+ // Definition of class specific values, like file paths and so on.
+ 'classes' => array(
+ 'Google_IO_Abstract' => array(
+ 'request_timeout_seconds' => 100,
+ ),
+ 'Google_Http_Request' => array(
+ // Disable the use of gzip on calls if set to true. Defaults to false.
+ 'disable_gzip' => self::GZIP_ENABLED,
+
+ // We default gzip to disabled on uploads even if gzip is otherwise
+ // enabled, due to some issues seen with small packet sizes for uploads.
+ // Please test with this option before enabling gzip for uploads in
+ // a production environment.
+ 'enable_gzip_for_uploads' => self::GZIP_UPLOADS_DISABLED,
+ ),
+ // If you want to pass in OAuth 2.0 settings, they will need to be
+ // structured like this.
+ 'Google_Auth_OAuth2' => array(
+ // Keys for OAuth 2.0 access, see the API console at
+ // https://developers.google.com/console
+ 'client_id' => '',
+ 'client_secret' => '',
+ 'redirect_uri' => '',
+
+ // Simple API access key, also from the API console. Ensure you get
+ // a Server key, and not a Browser key.
+ 'developer_key' => '',
+
+ // Other parameters.
+ 'hd' => '',
+ 'prompt' => '',
+ 'openid.realm' => '',
+ 'include_granted_scopes' => '',
+ 'login_hint' => '',
+ 'request_visible_actions' => '',
+ 'access_type' => 'online',
+ 'approval_prompt' => 'auto',
+ 'federated_signon_certs_url' =>
+ 'https://www.googleapis.com/oauth2/v1/certs',
+ ),
+ // Set a default directory for the file cache.
+ 'Google_Cache_File' => array(
+ 'directory' => sys_get_temp_dir() . '/Google_Client'
+ )
+ ),
+ );
+ if ($ini_file_location) {
+ $ini = parse_ini_file($ini_file_location, true);
+ if (is_array($ini) && count($ini)) {
+ $this->configuration = array_merge($this->configuration, $ini);
+ }
+ }
+ }
+
+ /**
+ * Set configuration specific to a given class.
+ * $config->setClassConfig('Google_Cache_File',
+ * array('directory' => '/tmp/cache'));
+ * @param $class The class name for the configuration
+ * @param $config string key or an array of configuration values
+ * @param $value optional - if $config is a key, the value
+ */
+ public function setClassConfig($class, $config, $value = null)
+ {
+ if (!is_array($config)) {
+ if (!isset($this->configuration['classes'][$class])) {
+ $this->configuration['classes'][$class] = array();
+ }
+ $this->configuration['classes'][$class][$config] = $value;
+ } else {
+ $this->configuration['classes'][$class] = $config;
+ }
+ }
+
+ public function getClassConfig($class, $key = null)
+ {
+ if (!isset($this->configuration['classes'][$class])) {
+ return null;
+ }
+ if ($key === null) {
+ return $this->configuration['classes'][$class];
+ } else {
+ return $this->configuration['classes'][$class][$key];
+ }
+ }
+
+ /**
+ * Return the configured cache class.
+ * @return string
+ */
+ public function getCacheClass()
+ {
+ return $this->configuration['cache_class'];
+ }
+
+ /**
+ * Return the configured Auth class.
+ * @return string
+ */
+ public function getAuthClass()
+ {
+ return $this->configuration['auth_class'];
+ }
+
+ /**
+ * Set the auth class.
+ *
+ * @param $class the class name to set
+ */
+ public function setAuthClass($class)
+ {
+ $prev = $this->configuration['auth_class'];
+ if (!isset($this->configuration['classes'][$class]) &&
+ isset($this->configuration['classes'][$prev])) {
+ $this->configuration['classes'][$class] =
+ $this->configuration['classes'][$prev];
+ }
+ $this->configuration['auth_class'] = $class;
+ }
+
+ /**
+ * Set the IO class.
+ *
+ * @param $class the class name to set
+ */
+ public function setIoClass($class)
+ {
+ $prev = $this->configuration['io_class'];
+ if (!isset($this->configuration['classes'][$class]) &&
+ isset($this->configuration['classes'][$prev])) {
+ $this->configuration['classes'][$class] =
+ $this->configuration['classes'][$prev];
+ }
+ $this->configuration['io_class'] = $class;
+ }
+
+ /**
+ * Set the cache class.
+ *
+ * @param $class the class name to set
+ */
+ public function setCacheClass($class)
+ {
+ $prev = $this->configuration['cache_class'];
+ if (!isset($this->configuration['classes'][$class]) &&
+ isset($this->configuration['classes'][$prev])) {
+ $this->configuration['classes'][$class] =
+ $this->configuration['classes'][$prev];
+ }
+ $this->configuration['cache_class'] = $class;
+ }
+
+ /**
+ * Return the configured IO class.
+ * @return string
+ */
+ public function getIoClass()
+ {
+ return $this->configuration['io_class'];
+ }
+
+ /**
+ * Set the application name, this is included in the User-Agent HTTP header.
+ * @param string $name
+ */
+ public function setApplicationName($name)
+ {
+ $this->configuration['application_name'] = $name;
+ }
+
+ /**
+ * @return string the name of the application
+ */
+ public function getApplicationName()
+ {
+ return $this->configuration['application_name'];
+ }
+
+ /**
+ * Set the client ID for the auth class.
+ * @param $key string - the API console client ID
+ */
+ public function setClientId($clientId)
+ {
+ $this->setAuthConfig('client_id', $clientId);
+ }
+
+ /**
+ * Set the client secret for the auth class.
+ * @param $key string - the API console client secret
+ */
+ public function setClientSecret($secret)
+ {
+ $this->setAuthConfig('client_secret', $secret);
+ }
+
+ /**
+ * Set the redirect uri for the auth class. Note that if using the
+ * Javascript based sign in flow, this should be the string 'postmessage'.
+ * @param $key string - the URI that users should be redirected to
+ */
+ public function setRedirectUri($uri)
+ {
+ $this->setAuthConfig('redirect_uri', $uri);
+ }
+
+ /**
+ * Set the app activities for the auth class.
+ * @param $rva string a space separated list of app activity types
+ */
+ public function setRequestVisibleActions($rva)
+ {
+ $this->setAuthConfig('request_visible_actions', $rva);
+ }
+
+ /**
+ * Set the the access type requested (offline or online.)
+ * @param $access string - the access type
+ */
+ public function setAccessType($access)
+ {
+ $this->setAuthConfig('access_type', $access);
+ }
+
+ /**
+ * Set when to show the approval prompt (auto or force)
+ * @param $approval string - the approval request
+ */
+ public function setApprovalPrompt($approval)
+ {
+ $this->setAuthConfig('approval_prompt', $approval);
+ }
+
+ /**
+ * Set the login hint (email address or sub identifier)
+ * @param $hint string
+ */
+ public function setLoginHint($hint)
+ {
+ $this->setAuthConfig('login_hint', $hint);
+ }
+
+ /**
+ * Set the developer key for the auth class. Note that this is separate value
+ * from the client ID - if it looks like a URL, its a client ID!
+ * @param $key string - the API console developer key
+ */
+ public function setDeveloperKey($key)
+ {
+ $this->setAuthConfig('developer_key', $key);
+ }
+
+ /**
+ * Set the hd (hosted domain) parameter streamlines the login process for
+ * Google Apps hosted accounts. By including the domain of the user, you
+ * restrict sign-in to accounts at that domain.
+ * @param $hd string - the domain to use.
+ */
+ public function setHostedDomain($hd)
+ {
+ $this->setAuthConfig('hd', $hd);
+ }
+
+ /**
+ * Set the prompt hint. Valid values are none, consent and select_account.
+ * If no value is specified and the user has not previously authorized
+ * access, then the user is shown a consent screen.
+ * @param $prompt string
+ */
+ public function setPrompt($prompt)
+ {
+ $this->setAuthConfig('prompt', $prompt);
+ }
+
+ /**
+ * openid.realm is a parameter from the OpenID 2.0 protocol, not from OAuth
+ * 2.0. It is used in OpenID 2.0 requests to signify the URL-space for which
+ * an authentication request is valid.
+ * @param $realm string - the URL-space to use.
+ */
+ public function setOpenidRealm($realm)
+ {
+ $this->setAuthConfig('openid.realm', $realm);
+ }
+
+ /**
+ * If this is provided with the value true, and the authorization request is
+ * granted, the authorization will include any previous authorizations
+ * granted to this user/application combination for other scopes.
+ * @param $include boolean - the URL-space to use.
+ */
+ public function setIncludeGrantedScopes($include)
+ {
+ $this->setAuthConfig(
+ 'include_granted_scopes',
+ $include ? "true" : "false"
+ );
+ }
+
+ /**
+ * @return string the base URL to use for API calls
+ */
+ public function getBasePath()
+ {
+ return $this->configuration['base_path'];
+ }
+
+ /**
+ * Set the auth configuration for the current auth class.
+ * @param $key - the key to set
+ * @param $value - the parameter value
+ */
+ private function setAuthConfig($key, $value)
+ {
+ if (!isset($this->configuration['classes'][$this->getAuthClass()])) {
+ $this->configuration['classes'][$this->getAuthClass()] = array();
+ }
+ $this->configuration['classes'][$this->getAuthClass()][$key] = $value;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Exception.php
index 1f4731fb2f4..af80269718a 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Exception.php
@@ -1,6 +1,6 @@
<?php
/*
- * Copyright 2010 Google Inc.
+ * Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,8 +15,6 @@
* limitations under the License.
*/
-class Google_Service {
- public $version;
- public $servicePath;
- public $resource;
+class Google_Exception extends Exception
+{
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Batch.php
index 3916b223a7e..d851da50499 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Batch.php
@@ -15,22 +15,39 @@
* limitations under the License.
*/
+require_once 'Google/Client.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Http/REST.php';
+
/**
* @author Chirag Shah <chirags@google.com>
*/
-class Google_BatchRequest {
+class Google_Http_Batch
+{
/** @var string Multipart Boundary. */
private $boundary;
/** @var array service requests to be executed. */
private $requests = array();
- public function __construct($boundary = false) {
+ /** @var Google_Client */
+ private $client;
+
+ private $expected_classes = array();
+
+ private $base_path;
+
+ public function __construct(Google_Client $client, $boundary = false)
+ {
+ $this->client = $client;
+ $this->base_path = $this->client->getBasePath();
+ $this->expected_classes = array();
$boundary = (false == $boundary) ? mt_rand() : $boundary;
$this->boundary = str_replace('"', '', $boundary);
}
- public function add(Google_HttpRequest $request, $key = false) {
+ public function add(Google_Http_Request $request, $key = false)
+ {
if (false == $key) {
$key = mt_rand();
}
@@ -38,36 +55,38 @@ class Google_BatchRequest {
$this->requests[$key] = $request;
}
- public function execute() {
+ public function execute()
+ {
$body = '';
- /** @var Google_HttpRequest $req */
- foreach($this->requests as $key => $req) {
+ /** @var Google_Http_Request $req */
+ foreach ($this->requests as $key => $req) {
$body .= "--{$this->boundary}\n";
$body .= $req->toBatchString($key) . "\n";
+ $this->expected_classes["response-" . $key] = $req->getExpectedClass();
}
$body = rtrim($body);
$body .= "\n--{$this->boundary}--";
- global $apiConfig;
- $url = $apiConfig['basePath'] . '/batch';
- $httpRequest = new Google_HttpRequest($url, 'POST');
- $httpRequest->setRequestHeaders(array(
- 'Content-Type' => 'multipart/mixed; boundary=' . $this->boundary));
+ $url = $this->base_path . '/batch';
+ $httpRequest = new Google_Http_Request($url, 'POST');
+ $httpRequest->setRequestHeaders(
+ array('Content-Type' => 'multipart/mixed; boundary=' . $this->boundary)
+ );
$httpRequest->setPostBody($body);
- $response = Google_Client::$io->makeRequest($httpRequest);
+ $response = $this->client->getIo()->makeRequest($httpRequest);
- $response = $this->parseResponse($response);
- return $response;
+ return $this->parseResponse($response);
}
- public function parseResponse(Google_HttpRequest $response) {
+ public function parseResponse(Google_Http_Request $response)
+ {
$contentType = $response->getResponseHeader('content-type');
$contentType = explode(';', $contentType);
$boundary = false;
- foreach($contentType as $part) {
+ foreach ($contentType as $part) {
$part = (explode('=', $part, 2));
if (isset($part[0]) && 'boundary' == trim($part[0])) {
$boundary = $part[1];
@@ -80,25 +99,39 @@ class Google_BatchRequest {
$parts = explode("--$boundary", $body);
$responses = array();
- foreach($parts as $part) {
+ foreach ($parts as $part) {
$part = trim($part);
if (!empty($part)) {
list($metaHeaders, $part) = explode("\r\n\r\n", $part, 2);
- $metaHeaders = Google_CurlIO::parseResponseHeaders($metaHeaders);
+ $metaHeaders = $this->client->getIo()->getHttpResponseHeaders($metaHeaders);
$status = substr($part, 0, strpos($part, "\n"));
$status = explode(" ", $status);
$status = $status[1];
- list($partHeaders, $partBody) = Google_CurlIO::parseHttpResponse($part, false);
- $response = new Google_HttpRequest("");
+ list($partHeaders, $partBody) = $this->client->getIo()->ParseHttpResponse($part, false);
+ $response = new Google_Http_Request("");
$response->setResponseHttpCode($status);
$response->setResponseHeaders($partHeaders);
$response->setResponseBody($partBody);
- $response = Google_REST::decodeHttpResponse($response);
// Need content id.
- $responses[$metaHeaders['content-id']] = $response;
+ $key = $metaHeaders['content-id'];
+
+ if (isset($this->expected_classes[$key]) &&
+ strlen($this->expected_classes[$key]) > 0) {
+ $class = $this->expected_classes[$key];
+ $response->setExpectedClass($class);
+ }
+
+ try {
+ $response = Google_Http_REST::decodeHttpResponse($response);
+ $responses[$key] = $response;
+ } catch (Google_Service_Exception $e) {
+ // Store the exception as the response, so succesful responses
+ // can be processed.
+ $responses[$key] = $e;
+ }
}
}
@@ -107,4 +140,4 @@ class Google_BatchRequest {
return null;
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/CacheParser.php
index 7f5accfefe9..83f1c8d2f42 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/CacheParser.php
@@ -14,26 +14,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+require_once 'Google/Http/Request.php';
+
/**
* Implement the caching directives specified in rfc2616. This
* implementation is guided by the guidance offered in rfc2616-sec13.
* @author Chirag Shah <chirags@google.com>
*/
-class Google_CacheParser {
+class Google_Http_CacheParser
+{
public static $CACHEABLE_HTTP_METHODS = array('GET', 'HEAD');
public static $CACHEABLE_STATUS_CODES = array('200', '203', '300', '301');
- private function __construct() {}
-
/**
* Check if an HTTP request can be cached by a private local cache.
*
* @static
- * @param Google_HttpRequest $resp
+ * @param Google_Http_Request $resp
* @return bool True if the request is cacheable.
* False if the request is uncacheable.
*/
- public static function isRequestCacheable (Google_HttpRequest $resp) {
+ public static function isRequestCacheable(Google_Http_Request $resp)
+ {
$method = $resp->getRequestMethod();
if (! in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
return false;
@@ -54,11 +57,12 @@ class Google_CacheParser {
* Check if an HTTP response can be cached by a private local cache.
*
* @static
- * @param Google_HttpRequest $resp
+ * @param Google_Http_Request $resp
* @return bool True if the response is cacheable.
* False if the response is un-cacheable.
*/
- public static function isResponseCacheable (Google_HttpRequest $resp) {
+ public static function isResponseCacheable(Google_Http_Request $resp)
+ {
// First, check if the HTTP request was cacheable before inspecting the
// HTTP response.
if (false == self::isRequestCacheable($resp)) {
@@ -105,15 +109,17 @@ class Google_CacheParser {
/**
* @static
- * @param Google_HttpRequest $resp
+ * @param Google_Http_Request $resp
* @return bool True if the HTTP response is considered to be expired.
* False if it is considered to be fresh.
*/
- public static function isExpired(Google_HttpRequest $resp) {
+ public static function isExpired(Google_Http_Request $resp)
+ {
// HTTP/1.1 clients and caches MUST treat other invalid date formats,
// especially including the value “0”, as in the past.
$parsedExpires = false;
$responseHeaders = $resp->getResponseHeaders();
+
if (isset($responseHeaders['expires'])) {
$rawExpires = $responseHeaders['expires'];
// Check for a malformed expires header first.
@@ -139,8 +145,12 @@ class Google_CacheParser {
$parsedDate = strtotime($rawDate);
if (empty($rawDate) || false == $parsedDate) {
- $parsedDate = time();
+ // We can't default this to now, as that means future cache reads
+ // will always pass with the logic below, so we will require a
+ // date be injected if not supplied.
+ throw new Google_Exception("All cacheable requests must have creation dates.");
}
+
if (false == $freshnessLifetime && isset($responseHeaders['expires'])) {
$freshnessLifetime = $parsedExpires - $parsedDate;
}
@@ -161,13 +171,14 @@ class Google_CacheParser {
/**
* Determine if a cache entry should be revalidated with by the origin.
*
- * @param Google_HttpRequest $response
+ * @param Google_Http_Request $response
* @return bool True if the entry is expired, else return false.
*/
- public static function mustRevalidate(Google_HttpRequest $response) {
+ public static function mustRevalidate(Google_Http_Request $response)
+ {
// [13.3] When a cache has a stale entry that it would like to use as a
// response to a client's request, it first has to check with the origin
// server to see if its cached entry is still usable.
return self::isExpired($response);
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php
new file mode 100644
index 00000000000..8005db4bb48
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php
@@ -0,0 +1,301 @@
+<?php
+/**
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Client.php';
+require_once 'Google/Exception.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Http/REST.php';
+require_once 'Google/Utils.php';
+
+/**
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Http_MediaFileUpload
+{
+ const UPLOAD_MEDIA_TYPE = 'media';
+ const UPLOAD_MULTIPART_TYPE = 'multipart';
+ const UPLOAD_RESUMABLE_TYPE = 'resumable';
+
+ /** @var string $mimeType */
+ private $mimeType;
+
+ /** @var string $data */
+ private $data;
+
+ /** @var bool $resumable */
+ private $resumable;
+
+ /** @var int $chunkSize */
+ private $chunkSize;
+
+ /** @var int $size */
+ private $size;
+
+ /** @var string $resumeUri */
+ private $resumeUri;
+
+ /** @var int $progress */
+ private $progress;
+
+ /** @var Google_Client */
+ private $client;
+
+ /** @var Google_Http_Request */
+ private $request;
+
+ /** @var string */
+ private $boundary;
+
+ /**
+ * Result code from last HTTP call
+ * @var int
+ */
+ private $httpResultCode;
+
+ /**
+ * @param $mimeType string
+ * @param $data string The bytes you want to upload.
+ * @param $resumable bool
+ * @param bool $chunkSize File will be uploaded in chunks of this many bytes.
+ * only used if resumable=True
+ */
+ public function __construct(
+ Google_Client $client,
+ Google_Http_Request $request,
+ $mimeType,
+ $data,
+ $resumable = false,
+ $chunkSize = false,
+ $boundary = false
+ ) {
+ $this->client = $client;
+ $this->request = $request;
+ $this->mimeType = $mimeType;
+ $this->data = $data;
+ $this->size = strlen($this->data);
+ $this->resumable = $resumable;
+ if (!$chunkSize) {
+ $chunkSize = 256 * 1024;
+ }
+ $this->chunkSize = $chunkSize;
+ $this->progress = 0;
+ $this->boundary = $boundary;
+
+ // Process Media Request
+ $this->process();
+ }
+
+ /**
+ * Set the size of the file that is being uploaded.
+ * @param $size - int file size in bytes
+ */
+ public function setFileSize($size)
+ {
+ $this->size = $size;
+ }
+
+ /**
+ * Return the progress on the upload
+ * @return int progress in bytes uploaded.
+ */
+ public function getProgress()
+ {
+ return $this->progress;
+ }
+
+ /**
+ * Return the HTTP result code from the last call made.
+ * @return int code
+ */
+ public function getHttpResultCode()
+ {
+ return $this->httpResultCode;
+ }
+
+ /**
+ * Send the next part of the file to upload.
+ * @param [$chunk] the next set of bytes to send. If false will used $data passed
+ * at construct time.
+ */
+ public function nextChunk($chunk = false)
+ {
+ if (false == $this->resumeUri) {
+ $this->resumeUri = $this->getResumeUri();
+ }
+
+ if (false == $chunk) {
+ $chunk = substr($this->data, $this->progress, $this->chunkSize);
+ }
+
+ $lastBytePos = $this->progress + strlen($chunk) - 1;
+ $headers = array(
+ 'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
+ 'content-type' => $this->request->getRequestHeader('content-type'),
+ 'content-length' => $this->chunkSize,
+ 'expect' => '',
+ );
+
+ $httpRequest = new Google_Http_Request(
+ $this->resumeUri,
+ 'PUT',
+ $headers,
+ $chunk
+ );
+
+ if ($this->client->getClassConfig("Google_Http_Request", "enable_gzip_for_uploads")) {
+ $httpRequest->enableGzip();
+ } else {
+ $httpRequest->disableGzip();
+ }
+
+ $response = $this->client->getIo()->makeRequest($httpRequest);
+ $response->setExpectedClass($this->request->getExpectedClass());
+ $code = $response->getResponseHttpCode();
+ $this->httpResultCode = $code;
+
+ if (308 == $code) {
+ // Track the amount uploaded.
+ $range = explode('-', $response->getResponseHeader('range'));
+ $this->progress = $range[1] + 1;
+
+ // Allow for changing upload URLs.
+ $location = $response->getResponseHeader('location');
+ if ($location) {
+ $this->resumeUri = $location;
+ }
+
+ // No problems, but upload not complete.
+ return false;
+ } else {
+ return Google_Http_REST::decodeHttpResponse($response);
+ }
+ }
+
+ /**
+ * @param $meta
+ * @param $params
+ * @return array|bool
+ * @visible for testing
+ */
+ private function process()
+ {
+ $postBody = false;
+ $contentType = false;
+
+ $meta = $this->request->getPostBody();
+ $meta = is_string($meta) ? json_decode($meta, true) : $meta;
+
+ $uploadType = $this->getUploadType($meta);
+ $this->request->setQueryParam('uploadType', $uploadType);
+ $this->transformToUploadUrl();
+ $mimeType = $this->mimeType ?
+ $this->mimeType :
+ $this->request->getRequestHeader('content-type');
+
+ if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
+ $contentType = $mimeType;
+ $postBody = is_string($meta) ? $meta : json_encode($meta);
+ } else if (self::UPLOAD_MEDIA_TYPE == $uploadType) {
+ $contentType = $mimeType;
+ $postBody = $this->data;
+ } else if (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
+ // This is a multipart/related upload.
+ $boundary = $this->boundary ? $this->boundary : mt_rand();
+ $boundary = str_replace('"', '', $boundary);
+ $contentType = 'multipart/related; boundary=' . $boundary;
+ $related = "--$boundary\r\n";
+ $related .= "Content-Type: application/json; charset=UTF-8\r\n";
+ $related .= "\r\n" . json_encode($meta) . "\r\n";
+ $related .= "--$boundary\r\n";
+ $related .= "Content-Type: $mimeType\r\n";
+ $related .= "Content-Transfer-Encoding: base64\r\n";
+ $related .= "\r\n" . base64_encode($this->data) . "\r\n";
+ $related .= "--$boundary--";
+ $postBody = $related;
+ }
+
+ $this->request->setPostBody($postBody);
+
+ if (isset($contentType) && $contentType) {
+ $contentTypeHeader['content-type'] = $contentType;
+ $this->request->setRequestHeaders($contentTypeHeader);
+ }
+ }
+
+ private function transformToUploadUrl()
+ {
+ $base = $this->request->getBaseComponent();
+ $this->request->setBaseComponent($base . '/upload');
+ }
+
+ /**
+ * Valid upload types:
+ * - resumable (UPLOAD_RESUMABLE_TYPE)
+ * - media (UPLOAD_MEDIA_TYPE)
+ * - multipart (UPLOAD_MULTIPART_TYPE)
+ * @param $meta
+ * @return string
+ * @visible for testing
+ */
+ public function getUploadType($meta)
+ {
+ if ($this->resumable) {
+ return self::UPLOAD_RESUMABLE_TYPE;
+ }
+
+ if (false == $meta && $this->data) {
+ return self::UPLOAD_MEDIA_TYPE;
+ }
+
+ return self::UPLOAD_MULTIPART_TYPE;
+ }
+
+ private function getResumeUri()
+ {
+ $result = null;
+ $body = $this->request->getPostBody();
+ if ($body) {
+ $headers = array(
+ 'content-type' => 'application/json; charset=UTF-8',
+ 'content-length' => Google_Utils::getStrLen($body),
+ 'x-upload-content-type' => $this->mimeType,
+ 'x-upload-content-length' => $this->size,
+ 'expect' => '',
+ );
+ $this->request->setRequestHeaders($headers);
+ }
+
+ $response = $this->client->getIo()->makeRequest($this->request);
+ $location = $response->getResponseHeader('location');
+ $code = $response->getResponseHttpCode();
+
+ if (200 == $code && true == $location) {
+ return $location;
+ }
+ $message = $code;
+ $body = @json_decode($response->getResponseBody());
+ if (!empty( $body->error->errors ) ) {
+ $message .= ': ';
+ foreach ($body->error->errors as $error) {
+ $message .= "{$error->domain}, {$error->message};";
+ }
+ $message = rtrim($message, ';');
+ }
+ throw new Google_Exception("Failed to start the resumable upload (HTTP {$message})");
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/REST.php
index d0f3b3d564c..3c318e44ceb 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/REST.php
@@ -15,47 +15,54 @@
* limitations under the License.
*/
+require_once 'Google/Client.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Service/Exception.php';
+require_once 'Google/Utils/URITemplate.php';
+
/**
* This class implements the RESTful transport of apiServiceRequest()'s
*
* @author Chris Chabot <chabotc@google.com>
* @author Chirag Shah <chirags@google.com>
*/
-class Google_REST {
+class Google_Http_REST
+{
/**
- * Executes a apiServiceRequest using a RESTful call by transforming it into
- * an apiHttpRequest, and executed via apiIO::authenticatedRequest().
+ * Executes a Google_Http_Request
*
- * @param Google_HttpRequest $req
+ * @param Google_Client $client
+ * @param Google_Http_Request $req
* @return array decoded result
- * @throws Google_ServiceException on server side error (ie: not authenticated,
+ * @throws Google_Service_Exception on server side error (ie: not authenticated,
* invalid or malformed post body, invalid url)
*/
- static public function execute(Google_HttpRequest $req) {
- $httpRequest = Google_Client::$io->makeRequest($req);
- $decodedResponse = self::decodeHttpResponse($httpRequest);
- $ret = isset($decodedResponse['data'])
- ? $decodedResponse['data'] : $decodedResponse;
- return $ret;
+ public static function execute(Google_Client $client, Google_Http_Request $req)
+ {
+ $httpRequest = $client->getIo()->makeRequest($req);
+ $httpRequest->setExpectedClass($req->getExpectedClass());
+ return self::decodeHttpResponse($httpRequest);
}
-
/**
* Decode an HTTP Response.
* @static
- * @throws Google_ServiceException
- * @param Google_HttpRequest $response The http response to be decoded.
+ * @throws Google_Service_Exception
+ * @param Google_Http_Request $response The http response to be decoded.
* @return mixed|null
*/
- public static function decodeHttpResponse($response) {
+ public static function decodeHttpResponse($response)
+ {
$code = $response->getResponseHttpCode();
$body = $response->getResponseBody();
$decoded = null;
-
+
if ((intVal($code)) >= 300) {
$decoded = json_decode($body, true);
$err = 'Error calling ' . $response->getRequestMethod() . ' ' . $response->getUrl();
- if ($decoded != null && isset($decoded['error']['message']) && isset($decoded['error']['code'])) {
+ if (isset($decoded['error']) &&
+ isset($decoded['error']['message']) &&
+ isset($decoded['error']['code'])) {
// if we're getting a json encoded error definition, use that instead of the raw response
// body for improved readability
$err .= ": ({$decoded['error']['code']}) {$decoded['error']['message']}";
@@ -63,14 +70,25 @@ class Google_REST {
$err .= ": ($code) $body";
}
- throw new Google_ServiceException($err, $code, null, $decoded['error']['errors']);
+ $errors = null;
+ // Specific check for APIs which don't return error details, such as Blogger.
+ if (isset($decoded['error']) && isset($decoded['error']['errors'])) {
+ $errors = $decoded['error']['errors'];
+ }
+
+ throw new Google_Service_Exception($err, $code, null, $errors);
}
-
+
// Only attempt to decode the response, if the response code wasn't (204) 'no content'
if ($code != '204') {
$decoded = json_decode($body, true);
if ($decoded === null || $decoded === "") {
- throw new Google_ServiceException("Invalid json in service response: $body");
+ throw new Google_Service_Exception("Invalid json in service response: $body");
+ }
+
+ if ($response->getExpectedClass()) {
+ $class = $response->getExpectedClass();
+ $decoded = new $class($decoded);
}
}
return $decoded;
@@ -85,22 +103,18 @@ class Google_REST {
* @param array $params
* @return string $requestUrl
*/
- static function createRequestUri($servicePath, $restPath, $params) {
+ public static function createRequestUri($servicePath, $restPath, $params)
+ {
$requestUrl = $servicePath . $restPath;
$uriTemplateVars = array();
$queryVars = array();
foreach ($params as $paramName => $paramSpec) {
- // Discovery v1.0 puts the canonical location under the 'location' field.
- if (! isset($paramSpec['location'])) {
- $paramSpec['location'] = $paramSpec['restParameterType'];
- }
-
if ($paramSpec['type'] == 'boolean') {
$paramSpec['value'] = ($paramSpec['value']) ? 'true' : 'false';
}
if ($paramSpec['location'] == 'path') {
$uriTemplateVars[$paramName] = $paramSpec['value'];
- } else {
+ } else if ($paramSpec['location'] == 'query') {
if (isset($paramSpec['repeated']) && is_array($paramSpec['value'])) {
foreach ($paramSpec['value'] as $value) {
$queryVars[] = $paramName . '=' . rawurlencode($value);
@@ -112,12 +126,9 @@ class Google_REST {
}
if (count($uriTemplateVars)) {
- $uriTemplateParser = new URI_Template_Parser($requestUrl);
- $requestUrl = $uriTemplateParser->expand($uriTemplateVars);
+ $uriTemplateParser = new Google_Utils_URITemplate();
+ $requestUrl = $uriTemplateParser->parse($requestUrl, $uriTemplateVars);
}
- //FIXME work around for the the uri template lib which url encodes
- // the @'s & confuses our servers.
- $requestUrl = str_replace('%40', '@', $requestUrl);
if (count($queryVars)) {
$requestUrl .= '?' . implode($queryVars, '&');
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php
new file mode 100644
index 00000000000..8643694da89
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php
@@ -0,0 +1,476 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Utils.php';
+
+/**
+ * HTTP Request to be executed by IO classes. Upon execution, the
+ * responseHttpCode, responseHeaders and responseBody will be filled in.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Http_Request
+{
+ const GZIP_UA = " (gzip)";
+
+ private $batchHeaders = array(
+ 'Content-Type' => 'application/http',
+ 'Content-Transfer-Encoding' => 'binary',
+ 'MIME-Version' => '1.0',
+ );
+
+ protected $queryParams;
+ protected $requestMethod;
+ protected $requestHeaders;
+ protected $baseComponent = null;
+ protected $path;
+ protected $postBody;
+ protected $userAgent;
+ protected $canGzip = null;
+
+ protected $responseHttpCode;
+ protected $responseHeaders;
+ protected $responseBody;
+
+ protected $expectedClass;
+
+ public $accessKey;
+
+ public function __construct(
+ $url,
+ $method = 'GET',
+ $headers = array(),
+ $postBody = null
+ ) {
+ $this->setUrl($url);
+ $this->setRequestMethod($method);
+ $this->setRequestHeaders($headers);
+ $this->setPostBody($postBody);
+ }
+
+ /**
+ * Misc function that returns the base url component of the $url
+ * used by the OAuth signing class to calculate the base string
+ * @return string The base url component of the $url.
+ */
+ public function getBaseComponent()
+ {
+ return $this->baseComponent;
+ }
+
+ /**
+ * Set the base URL that path and query parameters will be added to.
+ * @param $baseComponent string
+ */
+ public function setBaseComponent($baseComponent)
+ {
+ $this->baseComponent = $baseComponent;
+ }
+
+ /**
+ * Enable support for gzipped responses with this request.
+ */
+ public function enableGzip()
+ {
+ $this->setRequestHeaders(array("Accept-Encoding" => "gzip"));
+ $this->canGzip = true;
+ $this->setUserAgent($this->userAgent);
+ }
+
+ /**
+ * Disable support for gzip responses with this request.
+ */
+ public function disableGzip()
+ {
+ if (
+ isset($this->requestHeaders['accept-encoding']) &&
+ $this->requestHeaders['accept-encoding'] == "gzip"
+ ) {
+ unset($this->requestHeaders['accept-encoding']);
+ }
+ $this->canGzip = false;
+ $this->userAgent = str_replace(self::GZIP_UA, "", $this->userAgent);
+ }
+
+ /**
+ * Can this request accept a gzip response?
+ * @return bool
+ */
+ public function canGzip()
+ {
+ return $this->canGzip;
+ }
+
+ /**
+ * Misc function that returns an array of the query parameters of the current
+ * url used by the OAuth signing class to calculate the signature
+ * @return array Query parameters in the query string.
+ */
+ public function getQueryParams()
+ {
+ return $this->queryParams;
+ }
+
+ /**
+ * Set a new query parameter.
+ * @param $key - string to set, does not need to be URL encoded
+ * @param $value - string to set, does not need to be URL encoded
+ */
+ public function setQueryParam($key, $value)
+ {
+ $this->queryParams[$key] = $value;
+ }
+
+ /**
+ * @return string HTTP Response Code.
+ */
+ public function getResponseHttpCode()
+ {
+ return (int) $this->responseHttpCode;
+ }
+
+ /**
+ * @param int $responseHttpCode HTTP Response Code.
+ */
+ public function setResponseHttpCode($responseHttpCode)
+ {
+ $this->responseHttpCode = $responseHttpCode;
+ }
+
+ /**
+ * @return $responseHeaders (array) HTTP Response Headers.
+ */
+ public function getResponseHeaders()
+ {
+ return $this->responseHeaders;
+ }
+
+ /**
+ * @return string HTTP Response Body
+ */
+ public function getResponseBody()
+ {
+ return $this->responseBody;
+ }
+
+ /**
+ * Set the class the response to this request should expect.
+ *
+ * @param $class string the class name
+ */
+ public function setExpectedClass($class)
+ {
+ $this->expectedClass = $class;
+ }
+
+ /**
+ * Retrieve the expected class the response should expect.
+ * @return string class name
+ */
+ public function getExpectedClass()
+ {
+ return $this->expectedClass;
+ }
+
+ /**
+ * @param array $headers The HTTP response headers
+ * to be normalized.
+ */
+ public function setResponseHeaders($headers)
+ {
+ $headers = Google_Utils::normalize($headers);
+ if ($this->responseHeaders) {
+ $headers = array_merge($this->responseHeaders, $headers);
+ }
+
+ $this->responseHeaders = $headers;
+ }
+
+ /**
+ * @param string $key
+ * @return array|boolean Returns the requested HTTP header or
+ * false if unavailable.
+ */
+ public function getResponseHeader($key)
+ {
+ return isset($this->responseHeaders[$key])
+ ? $this->responseHeaders[$key]
+ : false;
+ }
+
+ /**
+ * @param string $responseBody The HTTP response body.
+ */
+ public function setResponseBody($responseBody)
+ {
+ $this->responseBody = $responseBody;
+ }
+
+ /**
+ * @return string $url The request URL.
+ */
+ public function getUrl()
+ {
+ return $this->baseComponent . $this->path .
+ (count($this->queryParams) ?
+ "?" . $this->buildQuery($this->queryParams) :
+ '');
+ }
+
+ /**
+ * @return string $method HTTP Request Method.
+ */
+ public function getRequestMethod()
+ {
+ return $this->requestMethod;
+ }
+
+ /**
+ * @return array $headers HTTP Request Headers.
+ */
+ public function getRequestHeaders()
+ {
+ return $this->requestHeaders;
+ }
+
+ /**
+ * @param string $key
+ * @return array|boolean Returns the requested HTTP header or
+ * false if unavailable.
+ */
+ public function getRequestHeader($key)
+ {
+ return isset($this->requestHeaders[$key])
+ ? $this->requestHeaders[$key]
+ : false;
+ }
+
+ /**
+ * @return string $postBody HTTP Request Body.
+ */
+ public function getPostBody()
+ {
+ return $this->postBody;
+ }
+
+ /**
+ * @param string $url the url to set
+ */
+ public function setUrl($url)
+ {
+ if (substr($url, 0, 4) != 'http') {
+ // Force the path become relative.
+ if (substr($url, 0, 1) !== '/') {
+ $url = '/' . $url;
+ }
+ }
+ $parts = parse_url($url);
+ if (isset($parts['host'])) {
+ $this->baseComponent = sprintf(
+ "%s%s%s",
+ isset($parts['scheme']) ? $parts['scheme'] . "://" : '',
+ isset($parts['host']) ? $parts['host'] : '',
+ isset($parts['port']) ? ":" . $parts['port'] : ''
+ );
+ }
+ $this->path = isset($parts['path']) ? $parts['path'] : '';
+ $this->queryParams = array();
+ if (isset($parts['query'])) {
+ $this->queryParams = $this->parseQuery($parts['query']);
+ }
+ }
+
+ /**
+ * @param string $method Set he HTTP Method and normalize
+ * it to upper-case, as required by HTTP.
+ *
+ */
+ public function setRequestMethod($method)
+ {
+ $this->requestMethod = strtoupper($method);
+ }
+
+ /**
+ * @param array $headers The HTTP request headers
+ * to be set and normalized.
+ */
+ public function setRequestHeaders($headers)
+ {
+ $headers = Google_Utils::normalize($headers);
+ if ($this->requestHeaders) {
+ $headers = array_merge($this->requestHeaders, $headers);
+ }
+ $this->requestHeaders = $headers;
+ }
+
+ /**
+ * @param string $postBody the postBody to set
+ */
+ public function setPostBody($postBody)
+ {
+ $this->postBody = $postBody;
+ }
+
+ /**
+ * Set the User-Agent Header.
+ * @param string $userAgent The User-Agent.
+ */
+ public function setUserAgent($userAgent)
+ {
+ $this->userAgent = $userAgent;
+ if ($this->canGzip) {
+ $this->userAgent = $userAgent . self::GZIP_UA;
+ }
+ }
+
+ /**
+ * @return string The User-Agent.
+ */
+ public function getUserAgent()
+ {
+ return $this->userAgent;
+ }
+
+ /**
+ * Returns a cache key depending on if this was an OAuth signed request
+ * in which case it will use the non-signed url and access key to make this
+ * cache key unique per authenticated user, else use the plain request url
+ * @return string The md5 hash of the request cache key.
+ */
+ public function getCacheKey()
+ {
+ $key = $this->getUrl();
+
+ if (isset($this->accessKey)) {
+ $key .= $this->accessKey;
+ }
+
+ if (isset($this->requestHeaders['authorization'])) {
+ $key .= $this->requestHeaders['authorization'];
+ }
+
+ return md5($key);
+ }
+
+ public function getParsedCacheControl()
+ {
+ $parsed = array();
+ $rawCacheControl = $this->getResponseHeader('cache-control');
+ if ($rawCacheControl) {
+ $rawCacheControl = str_replace(', ', '&', $rawCacheControl);
+ parse_str($rawCacheControl, $parsed);
+ }
+
+ return $parsed;
+ }
+
+ /**
+ * @param string $id
+ * @return string A string representation of the HTTP Request.
+ */
+ public function toBatchString($id)
+ {
+ $str = '';
+ $path = parse_url($this->getUrl(), PHP_URL_PATH) . "?" .
+ http_build_query($this->queryParams);
+ $str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
+
+ foreach ($this->getRequestHeaders() as $key => $val) {
+ $str .= $key . ': ' . $val . "\n";
+ }
+
+ if ($this->getPostBody()) {
+ $str .= "\n";
+ $str .= $this->getPostBody();
+ }
+
+ $headers = '';
+ foreach ($this->batchHeaders as $key => $val) {
+ $headers .= $key . ': ' . $val . "\n";
+ }
+
+ $headers .= "Content-ID: $id\n";
+ $str = $headers . "\n" . $str;
+
+ return $str;
+ }
+
+ /**
+ * Our own version of parse_str that allows for multiple variables
+ * with the same name.
+ * @param $string - the query string to parse
+ */
+ private function parseQuery($string)
+ {
+ $return = array();
+ $parts = explode("&", $string);
+ foreach ($parts as $part) {
+ list($key, $value) = explode('=', $part, 2);
+ $value = urldecode($value);
+ if (isset($return[$key])) {
+ if (!is_array($return[$key])) {
+ $return[$key] = array($return[$key]);
+ }
+ $return[$key][] = $value;
+ } else {
+ $return[$key] = $value;
+ }
+ }
+ return $return;
+ }
+
+ /**
+ * A version of build query that allows for multiple
+ * duplicate keys.
+ * @param $parts array of key value pairs
+ */
+ private function buildQuery($parts)
+ {
+ $return = array();
+ foreach ($parts as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $v) {
+ $return[] = urlencode($key) . "=" . urlencode($v);
+ }
+ } else {
+ $return[] = urlencode($key) . "=" . urlencode($value);
+ }
+ }
+ return implode('&', $return);
+ }
+
+ /**
+ * If we're POSTing and have no body to send, we can send the query
+ * parameters in there, which avoids length issues with longer query
+ * params.
+ */
+ public function maybeMoveParametersToBody()
+ {
+ if ($this->getRequestMethod() == "POST" && empty($this->postBody)) {
+ $this->setRequestHeaders(
+ array(
+ "content-type" =>
+ "application/x-www-form-urlencoded; charset=UTF-8"
+ )
+ );
+ $this->setPostBody($this->buildQuery($this->queryParams));
+ $this->queryParams = array();
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php
new file mode 100644
index 00000000000..a4025e874ad
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php
@@ -0,0 +1,332 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract IO base class
+ */
+
+require_once 'Google/Client.php';
+require_once 'Google/IO/Exception.php';
+require_once 'Google/Http/CacheParser.php';
+require_once 'Google/Http/Request.php';
+
+abstract class Google_IO_Abstract
+{
+ const UNKNOWN_CODE = 0;
+ const FORM_URLENCODED = 'application/x-www-form-urlencoded';
+ private static $CONNECTION_ESTABLISHED_HEADERS = array(
+ "HTTP/1.0 200 Connection established\r\n\r\n",
+ "HTTP/1.1 200 Connection established\r\n\r\n",
+ );
+ private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
+
+ /** @var Google_Client */
+ protected $client;
+
+ public function __construct(Google_Client $client)
+ {
+ $this->client = $client;
+ $timeout = $client->getClassConfig('Google_IO_Abstract', 'request_timeout_seconds');
+ if ($timeout > 0) {
+ $this->setTimeout($timeout);
+ }
+ }
+
+ /**
+ * Executes a Google_Http_Request and returns the resulting populated Google_Http_Request
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request $request
+ */
+ abstract public function executeRequest(Google_Http_Request $request);
+
+ /**
+ * Set options that update the transport implementation's behavior.
+ * @param $options
+ */
+ abstract public function setOptions($options);
+
+ /**
+ * Set the maximum request time in seconds.
+ * @param $timeout in seconds
+ */
+ abstract public function setTimeout($timeout);
+
+ /**
+ * Get the maximum request time in seconds.
+ * @return timeout in seconds
+ */
+ abstract public function getTimeout();
+
+ /**
+ * Test for the presence of a cURL header processing bug
+ *
+ * The cURL bug was present in versions prior to 7.30.0 and caused the header
+ * length to be miscalculated when a "Connection established" header added by
+ * some proxies was present.
+ *
+ * @return boolean
+ */
+ abstract protected function needsQuirk();
+
+ /**
+ * @visible for testing.
+ * Cache the response to an HTTP request if it is cacheable.
+ * @param Google_Http_Request $request
+ * @return bool Returns true if the insertion was successful.
+ * Otherwise, return false.
+ */
+ public function setCachedRequest(Google_Http_Request $request)
+ {
+ // Determine if the request is cacheable.
+ if (Google_Http_CacheParser::isResponseCacheable($request)) {
+ $this->client->getCache()->set($request->getCacheKey(), $request);
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Execute an HTTP Request
+ *
+ * @param Google_HttpRequest $request the http request to be executed
+ * @return Google_HttpRequest http request with the response http code,
+ * response headers and response body filled in
+ * @throws Google_IO_Exception on curl or IO error
+ */
+ public function makeRequest(Google_Http_Request $request)
+ {
+ // First, check to see if we have a valid cached version.
+ $cached = $this->getCachedRequest($request);
+ if ($cached !== false && $cached instanceof Google_Http_Request) {
+ if (!$this->checkMustRevalidateCachedRequest($cached, $request)) {
+ return $cached;
+ }
+ }
+
+ if (array_key_exists($request->getRequestMethod(), self::$ENTITY_HTTP_METHODS)) {
+ $request = $this->processEntityRequest($request);
+ }
+
+ list($responseData, $responseHeaders, $respHttpCode) = $this->executeRequest($request);
+
+ if ($respHttpCode == 304 && $cached) {
+ // If the server responded NOT_MODIFIED, return the cached request.
+ $this->updateCachedRequest($cached, $responseHeaders);
+ return $cached;
+ }
+
+ if (!isset($responseHeaders['Date']) && !isset($responseHeaders['date'])) {
+ $responseHeaders['Date'] = date("r");
+ }
+
+ $request->setResponseHttpCode($respHttpCode);
+ $request->setResponseHeaders($responseHeaders);
+ $request->setResponseBody($responseData);
+ // Store the request in cache (the function checks to see if the request
+ // can actually be cached)
+ $this->setCachedRequest($request);
+ return $request;
+ }
+
+ /**
+ * @visible for testing.
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request|bool Returns the cached object or
+ * false if the operation was unsuccessful.
+ */
+ public function getCachedRequest(Google_Http_Request $request)
+ {
+ if (false === Google_Http_CacheParser::isRequestCacheable($request)) {
+ return false;
+ }
+
+ return $this->client->getCache()->get($request->getCacheKey());
+ }
+
+ /**
+ * @visible for testing
+ * Process an http request that contains an enclosed entity.
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request Processed request with the enclosed entity.
+ */
+ public function processEntityRequest(Google_Http_Request $request)
+ {
+ $postBody = $request->getPostBody();
+ $contentType = $request->getRequestHeader("content-type");
+
+ // Set the default content-type as application/x-www-form-urlencoded.
+ if (false == $contentType) {
+ $contentType = self::FORM_URLENCODED;
+ $request->setRequestHeaders(array('content-type' => $contentType));
+ }
+
+ // Force the payload to match the content-type asserted in the header.
+ if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
+ $postBody = http_build_query($postBody, '', '&');
+ $request->setPostBody($postBody);
+ }
+
+ // Make sure the content-length header is set.
+ if (!$postBody || is_string($postBody)) {
+ $postsLength = strlen($postBody);
+ $request->setRequestHeaders(array('content-length' => $postsLength));
+ }
+
+ return $request;
+ }
+
+ /**
+ * Check if an already cached request must be revalidated, and if so update
+ * the request with the correct ETag headers.
+ * @param Google_Http_Request $cached A previously cached response.
+ * @param Google_Http_Request $request The outbound request.
+ * return bool If the cached object needs to be revalidated, false if it is
+ * still current and can be re-used.
+ */
+ protected function checkMustRevalidateCachedRequest($cached, $request)
+ {
+ if (Google_Http_CacheParser::mustRevalidate($cached)) {
+ $addHeaders = array();
+ if ($cached->getResponseHeader('etag')) {
+ // [13.3.4] If an entity tag has been provided by the origin server,
+ // we must use that entity tag in any cache-conditional request.
+ $addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
+ } elseif ($cached->getResponseHeader('date')) {
+ $addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
+ }
+
+ $request->setRequestHeaders($addHeaders);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Update a cached request, using the headers from the last response.
+ * @param Google_HttpRequest $cached A previously cached response.
+ * @param mixed Associative array of response headers from the last request.
+ */
+ protected function updateCachedRequest($cached, $responseHeaders)
+ {
+ if (isset($responseHeaders['connection'])) {
+ $hopByHop = array_merge(
+ self::$HOP_BY_HOP,
+ explode(
+ ',',
+ $responseHeaders['connection']
+ )
+ );
+
+ $endToEnd = array();
+ foreach ($hopByHop as $key) {
+ if (isset($responseHeaders[$key])) {
+ $endToEnd[$key] = $responseHeaders[$key];
+ }
+ }
+ $cached->setResponseHeaders($endToEnd);
+ }
+ }
+
+ /**
+ * Used by the IO lib and also the batch processing.
+ *
+ * @param $respData
+ * @param $headerSize
+ * @return array
+ */
+ public function parseHttpResponse($respData, $headerSize)
+ {
+ // check proxy header
+ foreach (self::$CONNECTION_ESTABLISHED_HEADERS as $established_header) {
+ if (stripos($respData, $established_header) !== false) {
+ // existed, remove it
+ $respData = str_ireplace($established_header, '', $respData);
+ // Subtract the proxy header size unless the cURL bug prior to 7.30.0
+ // is present which prevented the proxy header size from being taken into
+ // account.
+ if (!$this->needsQuirk()) {
+ $headerSize -= strlen($established_header);
+ }
+ break;
+ }
+ }
+
+ if ($headerSize) {
+ $responseBody = substr($respData, $headerSize);
+ $responseHeaders = substr($respData, 0, $headerSize);
+ } else {
+ $responseSegments = explode("\r\n\r\n", $respData, 2);
+ $responseHeaders = $responseSegments[0];
+ $responseBody = isset($responseSegments[1]) ? $responseSegments[1] :
+ null;
+ }
+
+ $responseHeaders = $this->getHttpResponseHeaders($responseHeaders);
+ return array($responseHeaders, $responseBody);
+ }
+
+ /**
+ * Parse out headers from raw headers
+ * @param rawHeaders array or string
+ * @return array
+ */
+ public function getHttpResponseHeaders($rawHeaders)
+ {
+ if (is_array($rawHeaders)) {
+ return $this->parseArrayHeaders($rawHeaders);
+ } else {
+ return $this->parseStringHeaders($rawHeaders);
+ }
+ }
+
+ private function parseStringHeaders($rawHeaders)
+ {
+ $headers = array();
+ $responseHeaderLines = explode("\r\n", $rawHeaders);
+ foreach ($responseHeaderLines as $headerLine) {
+ if ($headerLine && strpos($headerLine, ':') !== false) {
+ list($header, $value) = explode(': ', $headerLine, 2);
+ $header = strtolower($header);
+ if (isset($headers[$header])) {
+ $headers[$header] .= "\n" . $value;
+ } else {
+ $headers[$header] = $value;
+ }
+ }
+ }
+ return $headers;
+ }
+
+ private function parseArrayHeaders($rawHeaders)
+ {
+ $header_count = count($rawHeaders);
+ $headers = array();
+
+ for ($i = 0; $i < $header_count; $i++) {
+ $header = $rawHeaders[$i];
+ // Times will have colons in - so we just want the first match.
+ $header_parts = explode(': ', $header, 2);
+ if (count($header_parts) == 2) {
+ $headers[$header_parts[0]] = $header_parts[1];
+ }
+ }
+
+ return $headers;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php
new file mode 100644
index 00000000000..57a057114cc
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php
@@ -0,0 +1,137 @@
+<?php
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Curl based implementation of Google_IO.
+ *
+ * @author Stuart Langley <slangley@google.com>
+ */
+
+require_once 'Google/IO/Abstract.php';
+
+class Google_IO_Curl extends Google_IO_Abstract
+{
+ // cURL hex representation of version 7.30.0
+ const NO_QUIRK_VERSION = 0x071E00;
+
+ private $options = array();
+ /**
+ * Execute an HTTP Request
+ *
+ * @param Google_HttpRequest $request the http request to be executed
+ * @return Google_HttpRequest http request with the response http code,
+ * response headers and response body filled in
+ * @throws Google_IO_Exception on curl or IO error
+ */
+ public function executeRequest(Google_Http_Request $request)
+ {
+ $curl = curl_init();
+
+ if ($request->getPostBody()) {
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getPostBody());
+ }
+
+ $requestHeaders = $request->getRequestHeaders();
+ if ($requestHeaders && is_array($requestHeaders)) {
+ $curlHeaders = array();
+ foreach ($requestHeaders as $k => $v) {
+ $curlHeaders[] = "$k: $v";
+ }
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $curlHeaders);
+ }
+
+ curl_setopt($curl, CURLOPT_URL, $request->getUrl());
+
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
+ curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent());
+
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_HEADER, true);
+
+ if ($request->canGzip()) {
+ curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
+ }
+
+ foreach ($this->options as $key => $var) {
+ curl_setopt($curl, $key, $var);
+ }
+
+ if (!isset($this->options[CURLOPT_CAINFO])) {
+ curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
+ }
+
+ $response = curl_exec($curl);
+ if ($response === false) {
+ throw new Google_IO_Exception(curl_error($curl));
+ }
+ $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
+
+ list($responseHeaders, $responseBody) = $this->parseHttpResponse($response, $headerSize);
+
+ $responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+
+ return array($responseBody, $responseHeaders, $responseCode);
+ }
+
+ /**
+ * Set options that update the transport implementation's behavior.
+ * @param $options
+ */
+ public function setOptions($options)
+ {
+ $this->options = $options + $this->options;
+ }
+
+ /**
+ * Set the maximum request time in seconds.
+ * @param $timeout in seconds
+ */
+ public function setTimeout($timeout)
+ {
+ // Since this timeout is really for putting a bound on the time
+ // we'll set them both to the same. If you need to specify a longer
+ // CURLOPT_TIMEOUT, or a tigher CONNECTTIMEOUT, the best thing to
+ // do is use the setOptions method for the values individually.
+ $this->options[CURLOPT_CONNECTTIMEOUT] = $timeout;
+ $this->options[CURLOPT_TIMEOUT] = $timeout;
+ }
+
+ /**
+ * Get the maximum request time in seconds.
+ * @return timeout in seconds
+ */
+ public function getTimeout()
+ {
+ return $this->options[CURLOPT_TIMEOUT];
+ }
+
+ /**
+ * Test for the presence of a cURL header processing bug
+ *
+ * {@inheritDoc}
+ *
+ * @return boolean
+ */
+ protected function needsQuirk()
+ {
+ $ver = curl_version();
+ $versionNum = $ver['version_number'];
+ return $versionNum < Google_IO_Curl::NO_QUIRK_VERSION;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php
new file mode 100644
index 00000000000..28c2d8ce645
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Exception.php';
+
+class Google_IO_Exception extends Google_Exception
+{
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php
new file mode 100644
index 00000000000..917578d87a0
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php
@@ -0,0 +1,211 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Http Streams based implementation of Google_IO.
+ *
+ * @author Stuart Langley <slangley@google.com>
+ */
+
+require_once 'Google/IO/Abstract.php';
+
+class Google_IO_Stream extends Google_IO_Abstract
+{
+ const TIMEOUT = "timeout";
+ const ZLIB = "compress.zlib://";
+ private $options = array();
+ private $trappedErrorNumber;
+ private $trappedErrorString;
+
+ private static $DEFAULT_HTTP_CONTEXT = array(
+ "follow_location" => 0,
+ "ignore_errors" => 1,
+ );
+
+ private static $DEFAULT_SSL_CONTEXT = array(
+ "verify_peer" => true,
+ );
+
+ /**
+ * Execute an HTTP Request
+ *
+ * @param Google_HttpRequest $request the http request to be executed
+ * @return Google_HttpRequest http request with the response http code,
+ * response headers and response body filled in
+ * @throws Google_IO_Exception on curl or IO error
+ */
+ public function executeRequest(Google_Http_Request $request)
+ {
+ $default_options = stream_context_get_options(stream_context_get_default());
+
+ $requestHttpContext = array_key_exists('http', $default_options) ?
+ $default_options['http'] : array();
+
+ if ($request->getPostBody()) {
+ $requestHttpContext["content"] = $request->getPostBody();
+ }
+
+ $requestHeaders = $request->getRequestHeaders();
+ if ($requestHeaders && is_array($requestHeaders)) {
+ $headers = "";
+ foreach ($requestHeaders as $k => $v) {
+ $headers .= "$k: $v\r\n";
+ }
+ $requestHttpContext["header"] = $headers;
+ }
+
+ $requestHttpContext["method"] = $request->getRequestMethod();
+ $requestHttpContext["user_agent"] = $request->getUserAgent();
+
+ $requestSslContext = array_key_exists('ssl', $default_options) ?
+ $default_options['ssl'] : array();
+
+ if (!array_key_exists("cafile", $requestSslContext)) {
+ $requestSslContext["cafile"] = dirname(__FILE__) . '/cacerts.pem';
+ }
+
+ $options = array(
+ "http" => array_merge(
+ self::$DEFAULT_HTTP_CONTEXT,
+ $requestHttpContext
+ ),
+ "ssl" => array_merge(
+ self::$DEFAULT_SSL_CONTEXT,
+ $requestSslContext
+ )
+ );
+
+ $context = stream_context_create($options);
+
+ $url = $request->getUrl();
+
+ if ($request->canGzip()) {
+ $url = self::ZLIB . $url;
+ }
+
+ // We are trapping any thrown errors in this method only and
+ // throwing an exception.
+ $this->trappedErrorNumber = null;
+ $this->trappedErrorString = null;
+
+ // START - error trap.
+ set_error_handler(array($this, 'trapError'));
+ $fh = fopen($url, 'r', false, $context);
+ restore_error_handler();
+ // END - error trap.
+
+ if ($this->trappedErrorNumber) {
+ throw new Google_IO_Exception(
+ sprintf(
+ "HTTP Error: Unable to connect: '%s'",
+ $this->trappedErrorString
+ ),
+ $this->trappedErrorNumber
+ );
+ }
+
+ $response_data = false;
+ $respHttpCode = self::UNKNOWN_CODE;
+ if ($fh) {
+ if (isset($this->options[self::TIMEOUT])) {
+ stream_set_timeout($fh, $this->options[self::TIMEOUT]);
+ }
+
+ $response_data = stream_get_contents($fh);
+ fclose($fh);
+
+ $respHttpCode = $this->getHttpResponseCode($http_response_header);
+ }
+
+ if (false === $response_data) {
+ throw new Google_IO_Exception(
+ sprintf(
+ "HTTP Error: Unable to connect: '%s'",
+ $respHttpCode
+ ),
+ $respHttpCode
+ );
+ }
+
+ $responseHeaders = $this->getHttpResponseHeaders($http_response_header);
+
+ return array($response_data, $responseHeaders, $respHttpCode);
+ }
+
+ /**
+ * Set options that update the transport implementation's behavior.
+ * @param $options
+ */
+ public function setOptions($options)
+ {
+ $this->options = $options + $this->options;
+ }
+
+ /**
+ * Method to handle errors, used for error handling around
+ * stream connection methods.
+ */
+ public function trapError($errno, $errstr)
+ {
+ $this->trappedErrorNumber = $errno;
+ $this->trappedErrorString = $errstr;
+ }
+
+ /**
+ * Set the maximum request time in seconds.
+ * @param $timeout in seconds
+ */
+ public function setTimeout($timeout)
+ {
+ $this->options[self::TIMEOUT] = $timeout;
+ }
+
+ /**
+ * Get the maximum request time in seconds.
+ * @return timeout in seconds
+ */
+ public function getTimeout()
+ {
+ return $this->options[self::TIMEOUT];
+ }
+
+ /**
+ * Test for the presence of a cURL header processing bug
+ *
+ * {@inheritDoc}
+ *
+ * @return boolean
+ */
+ protected function needsQuirk()
+ {
+ return false;
+ }
+
+ protected function getHttpResponseCode($response_headers)
+ {
+ $header_count = count($response_headers);
+
+ for ($i = 0; $i < $header_count; $i++) {
+ $header = $response_headers[$i];
+ if (strncasecmp("HTTP", $header, strlen("HTTP")) == 0) {
+ $response = explode(' ', $header);
+ return $response[1];
+ }
+ }
+ return self::UNKNOWN_CODE;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/cacerts.pem
index da36ed1ba6d..79a49289cbe 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/cacerts.pem
@@ -712,3 +712,27 @@ IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
-----END CERTIFICATE-----
+GeoTrust Global CA
+==================
+
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
+WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
+AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
+OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
+T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
+JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
+Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
+PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
+aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
+TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
+LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
+BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
+dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
+AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
+NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
+b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
+-----END CERTIFICATE-----
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php
new file mode 100644
index 00000000000..2bb9a333d66
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php
@@ -0,0 +1,265 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This class defines attributes, valid values, and usage which is generated
+ * from a given json schema.
+ * http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
+ *
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Model implements ArrayAccess
+{
+ protected $internal_gapi_mappings = array();
+ protected $modelData = array();
+ protected $processed = array();
+
+ /**
+ * Polymorphic - accepts a variable number of arguments dependent
+ * on the type of the model subclass.
+ */
+ public function __construct()
+ {
+ if (func_num_args() == 1 && is_array(func_get_arg(0))) {
+ // Initialize the model with the array's contents.
+ $array = func_get_arg(0);
+ $this->mapTypes($array);
+ }
+ }
+
+ public function __get($key)
+ {
+ $keyTypeName = $this->keyType($key);
+ $keyDataType = $this->dataType($key);
+ if (isset($this->$keyTypeName) && !isset($this->processed[$key])) {
+ if (isset($this->modelData[$key])) {
+ $val = $this->modelData[$key];
+ } else if (isset($this->$keyDataType) &&
+ ($this->$keyDataType == 'array' || $this->$keyDataType == 'map')) {
+ $val = array();
+ } else {
+ $val = null;
+ }
+
+ if ($this->isAssociativeArray($val)) {
+ if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
+ foreach ($val as $arrayKey => $arrayItem) {
+ $this->modelData[$key][$arrayKey] =
+ $this->createObjectFromName($keyTypeName, $arrayItem);
+ }
+ } else {
+ $this->modelData[$key] = $this->createObjectFromName($keyTypeName, $val);
+ }
+ } else if (is_array($val)) {
+ $arrayObject = array();
+ foreach ($val as $arrayIndex => $arrayItem) {
+ $arrayObject[$arrayIndex] =
+ $this->createObjectFromName($keyTypeName, $arrayItem);
+ }
+ $this->modelData[$key] = $arrayObject;
+ }
+ $this->processed[$key] = true;
+ }
+
+ return isset($this->modelData[$key]) ? $this->modelData[$key] : null;
+ }
+
+ /**
+ * Initialize this object's properties from an array.
+ *
+ * @param array $array Used to seed this object's properties.
+ * @return void
+ */
+ protected function mapTypes($array)
+ {
+ // Hard initilise simple types, lazy load more complex ones.
+ foreach ($array as $key => $val) {
+ if ( !property_exists($this, $this->keyType($key)) &&
+ property_exists($this, $key)) {
+ $this->$key = $val;
+ unset($array[$key]);
+ } elseif (property_exists($this, $camelKey = Google_Utils::camelCase($key))) {
+ // This checks if property exists as camelCase, leaving it in array as snake_case
+ // in case of backwards compatibility issues.
+ $this->$camelKey = $val;
+ }
+ }
+ $this->modelData = $array;
+ }
+
+ /**
+ * Create a simplified object suitable for straightforward
+ * conversion to JSON. This is relatively expensive
+ * due to the usage of reflection, but shouldn't be called
+ * a whole lot, and is the most straightforward way to filter.
+ */
+ public function toSimpleObject()
+ {
+ $object = new stdClass();
+
+ // Process all other data.
+ foreach ($this->modelData as $key => $val) {
+ $result = $this->getSimpleValue($val);
+ if ($result !== null) {
+ $object->$key = $result;
+ }
+ }
+
+ // Process all public properties.
+ $reflect = new ReflectionObject($this);
+ $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
+ foreach ($props as $member) {
+ $name = $member->getName();
+ $result = $this->getSimpleValue($this->$name);
+ if ($result !== null) {
+ $name = $this->getMappedName($name);
+ $object->$name = $result;
+ }
+ }
+
+ return $object;
+ }
+
+ /**
+ * Handle different types of values, primarily
+ * other objects and map and array data types.
+ */
+ private function getSimpleValue($value)
+ {
+ if ($value instanceof Google_Model) {
+ return $value->toSimpleObject();
+ } else if (is_array($value)) {
+ $return = array();
+ foreach ($value as $key => $a_value) {
+ $a_value = $this->getSimpleValue($a_value);
+ if ($a_value !== null) {
+ $key = $this->getMappedName($key);
+ $return[$key] = $a_value;
+ }
+ }
+ return $return;
+ }
+ return $value;
+ }
+
+ /**
+ * If there is an internal name mapping, use that.
+ */
+ private function getMappedName($key)
+ {
+ if (isset($this->internal_gapi_mappings) &&
+ isset($this->internal_gapi_mappings[$key])) {
+ $key = $this->internal_gapi_mappings[$key];
+ }
+ return $key;
+ }
+
+ /**
+ * Returns true only if the array is associative.
+ * @param array $array
+ * @return bool True if the array is associative.
+ */
+ protected function isAssociativeArray($array)
+ {
+ if (!is_array($array)) {
+ return false;
+ }
+ $keys = array_keys($array);
+ foreach ($keys as $key) {
+ if (is_string($key)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Given a variable name, discover its type.
+ *
+ * @param $name
+ * @param $item
+ * @return object The object from the item.
+ */
+ private function createObjectFromName($name, $item)
+ {
+ $type = $this->$name;
+ return new $type($item);
+ }
+
+ /**
+ * Verify if $obj is an array.
+ * @throws Google_Exception Thrown if $obj isn't an array.
+ * @param array $obj Items that should be validated.
+ * @param string $method Method expecting an array as an argument.
+ */
+ public function assertIsArray($obj, $method)
+ {
+ if ($obj && !is_array($obj)) {
+ throw new Google_Exception(
+ "Incorrect parameter type passed to $method(). Expected an array."
+ );
+ }
+ }
+
+ public function offsetExists($offset)
+ {
+ return isset($this->$offset) || isset($this->modelData[$offset]);
+ }
+
+ public function offsetGet($offset)
+ {
+ return isset($this->$offset) ?
+ $this->$offset :
+ $this->__get($offset);
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ if (property_exists($this, $offset)) {
+ $this->$offset = $value;
+ } else {
+ $this->modelData[$offset] = $value;
+ $this->processed[$offset] = true;
+ }
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->modelData[$offset]);
+ }
+
+ protected function keyType($key)
+ {
+ return $key . "Type";
+ }
+
+ protected function dataType($key)
+ {
+ return $key . "DataType";
+ }
+
+ public function __isset($key)
+ {
+ return isset($this->modelData[$key]);
+ }
+
+ public function __unset($key)
+ {
+ unset($this->modelData[$key]);
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php
new file mode 100644
index 00000000000..2e0b6c52282
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php
@@ -0,0 +1,39 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class Google_Service
+{
+ public $version;
+ public $servicePath;
+ public $availableScopes;
+ public $resource;
+ private $client;
+
+ public function __construct(Google_Client $client)
+ {
+ $this->client = $client;
+ }
+
+ /**
+ * Return the associated Google_Client class.
+ * @return Google_Client
+ */
+ public function getClient()
+ {
+ return $this->client;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php
new file mode 100644
index 00000000000..291a6091232
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php
@@ -0,0 +1,6136 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/**
+ * Service definition for Drive (v2).
+ *
+ * <p>
+ * The API to interact with Drive.
+ * </p>
+ *
+ * <p>
+ * For more information about this service, see the API
+ * <a href="https://developers.google.com/drive/" target="_blank">Documentation</a>
+ * </p>
+ *
+ * @author Google, Inc.
+ */
+class Google_Service_Drive extends Google_Service
+{
+ /** View and manage the files and documents in your Google Drive. */
+ const DRIVE = "https://www.googleapis.com/auth/drive";
+ /** View and manage its own configuration data in your Google Drive. */
+ const DRIVE_APPDATA = "https://www.googleapis.com/auth/drive.appdata";
+ /** View your Google Drive apps. */
+ const DRIVE_APPS_READONLY = "https://www.googleapis.com/auth/drive.apps.readonly";
+ /** View and manage Google Drive files that you have opened or created with this app. */
+ const DRIVE_FILE = "https://www.googleapis.com/auth/drive.file";
+ /** View metadata for files and documents in your Google Drive. */
+ const DRIVE_METADATA_READONLY = "https://www.googleapis.com/auth/drive.metadata.readonly";
+ /** View the files and documents in your Google Drive. */
+ const DRIVE_READONLY = "https://www.googleapis.com/auth/drive.readonly";
+ /** Modify your Google Apps Script scripts' behavior. */
+ const DRIVE_SCRIPTS = "https://www.googleapis.com/auth/drive.scripts";
+
+ public $about;
+ public $apps;
+ public $changes;
+ public $channels;
+ public $children;
+ public $comments;
+ public $files;
+ public $parents;
+ public $permissions;
+ public $properties;
+ public $realtime;
+ public $replies;
+ public $revisions;
+
+
+ /**
+ * Constructs the internal representation of the Drive service.
+ *
+ * @param Google_Client $client
+ */
+ public function __construct(Google_Client $client)
+ {
+ parent::__construct($client);
+ $this->servicePath = 'drive/v2/';
+ $this->version = 'v2';
+ $this->serviceName = 'drive';
+
+ $this->about = new Google_Service_Drive_About_Resource(
+ $this,
+ $this->serviceName,
+ 'about',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'about',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'includeSubscribed' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxChangeIdCount' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'startChangeId' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->apps = new Google_Service_Drive_Apps_Resource(
+ $this,
+ $this->serviceName,
+ 'apps',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'apps/{appId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'appId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'apps',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'languageCode' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'appFilterExtensions' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'appFilterMimeTypes' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->changes = new Google_Service_Drive_Changes_Resource(
+ $this,
+ $this->serviceName,
+ 'changes',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'changes/{changeId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'changeId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'changes',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'includeSubscribed' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'startChangeId' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'watch' => array(
+ 'path' => 'changes/watch',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'includeSubscribed' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'startChangeId' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->channels = new Google_Service_Drive_Channels_Resource(
+ $this,
+ $this->serviceName,
+ 'channels',
+ array(
+ 'methods' => array(
+ 'stop' => array(
+ 'path' => 'channels/stop',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(),
+ ),
+ )
+ )
+ );
+ $this->children = new Google_Service_Drive_Children_Resource(
+ $this,
+ $this->serviceName,
+ 'children',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{folderId}/children/{childId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'childId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{folderId}/children/{childId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'childId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{folderId}/children',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{folderId}/children',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'q' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->comments = new Google_Service_Drive_Comments_Resource(
+ $this,
+ $this->serviceName,
+ 'comments',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/comments',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/comments',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'updatedMin' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->files = new Google_Service_Drive_Files_Resource(
+ $this,
+ $this->serviceName,
+ 'files',
+ array(
+ 'methods' => array(
+ 'copy' => array(
+ 'path' => 'files/{fileId}/copy',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'delete' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'emptyTrash' => array(
+ 'path' => 'files/trash',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(),
+ ),'get' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'projection' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'useContentAsIndexableText' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'q' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'corpus' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'projection' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'addParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'removeParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'setModifiedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'useContentAsIndexableText' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'newRevision' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'touch' => array(
+ 'path' => 'files/{fileId}/touch',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'trash' => array(
+ 'path' => 'files/{fileId}/trash',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'untrash' => array(
+ 'path' => 'files/{fileId}/untrash',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'addParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'removeParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'setModifiedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'useContentAsIndexableText' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'newRevision' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'watch' => array(
+ 'path' => 'files/{fileId}/watch',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'projection' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->parents = new Google_Service_Drive_Parents_Resource(
+ $this,
+ $this->serviceName,
+ 'parents',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/parents/{parentId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'parentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/parents/{parentId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'parentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/parents',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/parents',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->permissions = new Google_Service_Drive_Permissions_Resource(
+ $this,
+ $this->serviceName,
+ 'permissions',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'getIdForEmail' => array(
+ 'path' => 'permissionIds/{email}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'email' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/permissions',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'emailMessage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'sendNotificationEmails' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/permissions',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'transferOwnership' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'transferOwnership' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->properties = new Google_Service_Drive_Properties_Resource(
+ $this,
+ $this->serviceName,
+ 'properties',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/properties',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/properties',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->realtime = new Google_Service_Drive_Realtime_Resource(
+ $this,
+ $this->serviceName,
+ 'realtime',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'files/{fileId}/realtime',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revision' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/realtime',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'baseRevision' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->replies = new Google_Service_Drive_Replies_Resource(
+ $this,
+ $this->serviceName,
+ 'replies',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->revisions = new Google_Service_Drive_Revisions_Resource(
+ $this,
+ $this->serviceName,
+ 'revisions',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/revisions',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ }
+}
+
+
+/**
+ * The "about" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $about = $driveService->about;
+ * </code>
+ */
+class Google_Service_Drive_About_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Gets the information about the current user along with Drive API settings
+ * (about.get)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeSubscribed
+ * When calculating the number of remaining change IDs, whether to include public files the user
+ * has opened and shared files. When set to false, this counts only change IDs for owned files and
+ * any shared or public files that the user has explicitly added to a folder they own.
+ * @opt_param string maxChangeIdCount
+ * Maximum number of remaining change IDs to count
+ * @opt_param string startChangeId
+ * Change ID to start counting from when calculating number of remaining change IDs
+ * @return Google_Service_Drive_About
+ */
+ public function get($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_About");
+ }
+}
+
+/**
+ * The "apps" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $apps = $driveService->apps;
+ * </code>
+ */
+class Google_Service_Drive_Apps_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Gets a specific app. (apps.get)
+ *
+ * @param string $appId
+ * The ID of the app.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_App
+ */
+ public function get($appId, $optParams = array())
+ {
+ $params = array('appId' => $appId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_App");
+ }
+ /**
+ * Lists a user's installed apps. (apps.listApps)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string languageCode
+ * A language or locale code, as defined by BCP 47, with some extensions from Unicode's LDML format
+ * (http://www.unicode.org/reports/tr35/).
+ * @opt_param string appFilterExtensions
+ * A comma-separated list of file extensions for open with filtering. All apps within the given app
+ * query scope which can open any of the given file extensions will be included in the response. If
+ * appFilterMimeTypes are provided as well, the result is a union of the two resulting app lists.
+ * @opt_param string appFilterMimeTypes
+ * A comma-separated list of MIME types for open with filtering. All apps within the given app
+ * query scope which can open any of the given MIME types will be included in the response. If
+ * appFilterExtensions are provided as well, the result is a union of the two resulting app lists.
+ * @return Google_Service_Drive_AppList
+ */
+ public function listApps($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_AppList");
+ }
+}
+
+/**
+ * The "changes" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $changes = $driveService->changes;
+ * </code>
+ */
+class Google_Service_Drive_Changes_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Gets a specific change. (changes.get)
+ *
+ * @param string $changeId
+ * The ID of the change.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Change
+ */
+ public function get($changeId, $optParams = array())
+ {
+ $params = array('changeId' => $changeId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Change");
+ }
+ /**
+ * Lists the changes for a user. (changes.listChanges)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeSubscribed
+ * Whether to include public files the user has opened and shared files. When set to false, the
+ * list only includes owned files plus any shared or public files the user has explicitly added to
+ * a folder they own.
+ * @opt_param string startChangeId
+ * Change ID to start listing changes from.
+ * @opt_param bool includeDeleted
+ * Whether to include deleted items.
+ * @opt_param int maxResults
+ * Maximum number of changes to return.
+ * @opt_param string pageToken
+ * Page token for changes.
+ * @return Google_Service_Drive_ChangeList
+ */
+ public function listChanges($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_ChangeList");
+ }
+ /**
+ * Subscribe to changes for a user. (changes.watch)
+ *
+ * @param Google_Channel $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeSubscribed
+ * Whether to include public files the user has opened and shared files. When set to false, the
+ * list only includes owned files plus any shared or public files the user has explicitly added to
+ * a folder they own.
+ * @opt_param string startChangeId
+ * Change ID to start listing changes from.
+ * @opt_param bool includeDeleted
+ * Whether to include deleted items.
+ * @opt_param int maxResults
+ * Maximum number of changes to return.
+ * @opt_param string pageToken
+ * Page token for changes.
+ * @return Google_Service_Drive_Channel
+ */
+ public function watch(Google_Service_Drive_Channel $postBody, $optParams = array())
+ {
+ $params = array('postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('watch', array($params), "Google_Service_Drive_Channel");
+ }
+}
+
+/**
+ * The "channels" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $channels = $driveService->channels;
+ * </code>
+ */
+class Google_Service_Drive_Channels_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Stop watching resources through this channel (channels.stop)
+ *
+ * @param Google_Channel $postBody
+ * @param array $optParams Optional parameters.
+ */
+ public function stop(Google_Service_Drive_Channel $postBody, $optParams = array())
+ {
+ $params = array('postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('stop', array($params));
+ }
+}
+
+/**
+ * The "children" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $children = $driveService->children;
+ * </code>
+ */
+class Google_Service_Drive_Children_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Removes a child from a folder. (children.delete)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param string $childId
+ * The ID of the child.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($folderId, $childId, $optParams = array())
+ {
+ $params = array('folderId' => $folderId, 'childId' => $childId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a specific child reference. (children.get)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param string $childId
+ * The ID of the child.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ChildReference
+ */
+ public function get($folderId, $childId, $optParams = array())
+ {
+ $params = array('folderId' => $folderId, 'childId' => $childId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_ChildReference");
+ }
+ /**
+ * Inserts a file into a folder. (children.insert)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param Google_ChildReference $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ChildReference
+ */
+ public function insert($folderId, Google_Service_Drive_ChildReference $postBody, $optParams = array())
+ {
+ $params = array('folderId' => $folderId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_ChildReference");
+ }
+ /**
+ * Lists a folder's children. (children.listChildren)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string q
+ * Query string for searching children.
+ * @opt_param string pageToken
+ * Page token for children.
+ * @opt_param int maxResults
+ * Maximum number of children to return.
+ * @return Google_Service_Drive_ChildList
+ */
+ public function listChildren($folderId, $optParams = array())
+ {
+ $params = array('folderId' => $folderId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_ChildList");
+ }
+}
+
+/**
+ * The "comments" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $comments = $driveService->comments;
+ * </code>
+ */
+class Google_Service_Drive_Comments_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a comment. (comments.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $commentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a comment by ID. (comments.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeDeleted
+ * If set, this will succeed when retrieving a deleted comment, and will include any deleted
+ * replies.
+ * @return Google_Service_Drive_Comment
+ */
+ public function get($fileId, $commentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Comment");
+ }
+ /**
+ * Creates a new comment on the given file. (comments.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param Google_Comment $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Comment
+ */
+ public function insert($fileId, Google_Service_Drive_Comment $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_Comment");
+ }
+ /**
+ * Lists a file's comments. (comments.listComments)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string pageToken
+ * The continuation token, used to page through large result sets. To get the next page of results,
+ * set this parameter to the value of "nextPageToken" from the previous response.
+ * @opt_param string updatedMin
+ * Only discussions that were updated after this timestamp will be returned. Formatted as an RFC
+ * 3339 timestamp.
+ * @opt_param bool includeDeleted
+ * If set, all comments and replies, including deleted comments and replies (with content stripped)
+ * will be returned.
+ * @opt_param int maxResults
+ * The maximum number of discussions to include in the response, used for paging.
+ * @return Google_Service_Drive_CommentList
+ */
+ public function listComments($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_CommentList");
+ }
+ /**
+ * Updates an existing comment. This method supports patch semantics.
+ * (comments.patch)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param Google_Comment $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Comment
+ */
+ public function patch($fileId, $commentId, Google_Service_Drive_Comment $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Comment");
+ }
+ /**
+ * Updates an existing comment. (comments.update)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param Google_Comment $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Comment
+ */
+ public function update($fileId, $commentId, Google_Service_Drive_Comment $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Comment");
+ }
+}
+
+/**
+ * The "files" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $files = $driveService->files;
+ * </code>
+ */
+class Google_Service_Drive_Files_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Creates a copy of the specified file. (files.copy)
+ *
+ * @param string $fileId
+ * The ID of the file to copy.
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param string visibility
+ * The visibility of the new file. This parameter is only relevant when the source is not a native
+ * Google Doc and convert=false.
+ * @opt_param bool pinned
+ * Whether to pin the head revision of the new copy. A file can have a maximum of 200 pinned
+ * revisions.
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function copy($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('copy', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Permanently deletes a file by ID. Skips the trash. (files.delete)
+ *
+ * @param string $fileId
+ * The ID of the file to delete.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Permanently deletes all of the user's trashed files. (files.emptyTrash)
+ *
+ * @param array $optParams Optional parameters.
+ */
+ public function emptyTrash($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('emptyTrash', array($params));
+ }
+ /**
+ * Gets a file's metadata by ID. (files.get)
+ *
+ * @param string $fileId
+ * The ID for the file in question.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully retrieving the file.
+ * @opt_param string projection
+ * This parameter is deprecated and has no function.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function get($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Insert a new file. (files.insert)
+ *
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param bool useContentAsIndexableText
+ * Whether to use the content as indexable text.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param string visibility
+ * The visibility of the new file. This parameter is only relevant when convert=false.
+ * @opt_param bool pinned
+ * Whether to pin the head revision of the uploaded file. A file can have a maximum of 200 pinned
+ * revisions.
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function insert(Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Lists the user's files. (files.listFiles)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string q
+ * Query string for searching files.
+ * @opt_param string pageToken
+ * Page token for files.
+ * @opt_param string corpus
+ * The body of items (files/documents) to which the query applies.
+ * @opt_param string projection
+ * This parameter is deprecated and has no function.
+ * @opt_param int maxResults
+ * Maximum number of files to return.
+ * @return Google_Service_Drive_FileList
+ */
+ public function listFiles($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_FileList");
+ }
+ /**
+ * Updates file metadata and/or content. This method supports patch semantics.
+ * (files.patch)
+ *
+ * @param string $fileId
+ * The ID of the file to update.
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string addParents
+ * Comma-separated list of parent IDs to add.
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully updating the file.
+ * @opt_param string removeParents
+ * Comma-separated list of parent IDs to remove.
+ * @opt_param bool setModifiedDate
+ * Whether to set the modified date with the supplied modified date.
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param bool useContentAsIndexableText
+ * Whether to use the content as indexable text.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param bool pinned
+ * Whether to pin the new revision. A file can have a maximum of 200 pinned revisions.
+ * @opt_param bool newRevision
+ * Whether a blob upload should create a new revision. If false, the blob data in the current head
+ * revision is replaced. If true or not set, a new blob is created as head revision, and previous
+ * revisions are preserved (causing increased use of the user's data storage quota).
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function patch($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Set the file's updated time to the current server time. (files.touch)
+ *
+ * @param string $fileId
+ * The ID of the file to update.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function touch($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('touch', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Moves a file to the trash. (files.trash)
+ *
+ * @param string $fileId
+ * The ID of the file to trash.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function trash($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('trash', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Restores a file from the trash. (files.untrash)
+ *
+ * @param string $fileId
+ * The ID of the file to untrash.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function untrash($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('untrash', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Updates file metadata and/or content. (files.update)
+ *
+ * @param string $fileId
+ * The ID of the file to update.
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string addParents
+ * Comma-separated list of parent IDs to add.
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully updating the file.
+ * @opt_param string removeParents
+ * Comma-separated list of parent IDs to remove.
+ * @opt_param bool setModifiedDate
+ * Whether to set the modified date with the supplied modified date.
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param bool useContentAsIndexableText
+ * Whether to use the content as indexable text.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param bool pinned
+ * Whether to pin the new revision. A file can have a maximum of 200 pinned revisions.
+ * @opt_param bool newRevision
+ * Whether a blob upload should create a new revision. If false, the blob data in the current head
+ * revision is replaced. If true or not set, a new blob is created as head revision, and previous
+ * revisions are preserved (causing increased use of the user's data storage quota).
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function update($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Subscribe to changes on a file (files.watch)
+ *
+ * @param string $fileId
+ * The ID for the file in question.
+ * @param Google_Channel $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully retrieving the file.
+ * @opt_param string projection
+ * This parameter is deprecated and has no function.
+ * @return Google_Service_Drive_Channel
+ */
+ public function watch($fileId, Google_Service_Drive_Channel $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('watch', array($params), "Google_Service_Drive_Channel");
+ }
+}
+
+/**
+ * The "parents" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $parents = $driveService->parents;
+ * </code>
+ */
+class Google_Service_Drive_Parents_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Removes a parent from a file. (parents.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $parentId
+ * The ID of the parent.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $parentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'parentId' => $parentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a specific parent reference. (parents.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $parentId
+ * The ID of the parent.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ParentReference
+ */
+ public function get($fileId, $parentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'parentId' => $parentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_ParentReference");
+ }
+ /**
+ * Adds a parent folder for a file. (parents.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param Google_ParentReference $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ParentReference
+ */
+ public function insert($fileId, Google_Service_Drive_ParentReference $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_ParentReference");
+ }
+ /**
+ * Lists a file's parents. (parents.listParents)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ParentList
+ */
+ public function listParents($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_ParentList");
+ }
+}
+
+/**
+ * The "permissions" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $permissions = $driveService->permissions;
+ * </code>
+ */
+class Google_Service_Drive_Permissions_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a permission from a file. (permissions.delete)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $permissionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a permission by ID. (permissions.get)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Permission
+ */
+ public function get($fileId, $permissionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Permission");
+ }
+ /**
+ * Returns the permission ID for an email address. (permissions.getIdForEmail)
+ *
+ * @param string $email
+ * The email address for which to return a permission ID
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_PermissionId
+ */
+ public function getIdForEmail($email, $optParams = array())
+ {
+ $params = array('email' => $email);
+ $params = array_merge($params, $optParams);
+ return $this->call('getIdForEmail', array($params), "Google_Service_Drive_PermissionId");
+ }
+ /**
+ * Inserts a permission for a file. (permissions.insert)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param Google_Permission $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string emailMessage
+ * A custom message to include in notification emails.
+ * @opt_param bool sendNotificationEmails
+ * Whether to send notification emails when sharing to users or groups. This parameter is ignored
+ * and an email is sent if the role is owner.
+ * @return Google_Service_Drive_Permission
+ */
+ public function insert($fileId, Google_Service_Drive_Permission $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_Permission");
+ }
+ /**
+ * Lists a file's permissions. (permissions.listPermissions)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_PermissionList
+ */
+ public function listPermissions($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_PermissionList");
+ }
+ /**
+ * Updates a permission. This method supports patch semantics.
+ * (permissions.patch)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param Google_Permission $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool transferOwnership
+ * Whether changing a role to 'owner' should also downgrade the current owners to writers.
+ * @return Google_Service_Drive_Permission
+ */
+ public function patch($fileId, $permissionId, Google_Service_Drive_Permission $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Permission");
+ }
+ /**
+ * Updates a permission. (permissions.update)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param Google_Permission $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool transferOwnership
+ * Whether changing a role to 'owner' should also downgrade the current owners to writers.
+ * @return Google_Service_Drive_Permission
+ */
+ public function update($fileId, $permissionId, Google_Service_Drive_Permission $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Permission");
+ }
+}
+
+/**
+ * The "properties" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $properties = $driveService->properties;
+ * </code>
+ */
+class Google_Service_Drive_Properties_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a property. (properties.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ */
+ public function delete($fileId, $propertyKey, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a property by its key. (properties.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ * @return Google_Service_Drive_Property
+ */
+ public function get($fileId, $propertyKey, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Property");
+ }
+ /**
+ * Adds a property to a file. (properties.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param Google_Property $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Property
+ */
+ public function insert($fileId, Google_Service_Drive_Property $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_Property");
+ }
+ /**
+ * Lists a file's properties. (properties.listProperties)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_PropertyList
+ */
+ public function listProperties($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_PropertyList");
+ }
+ /**
+ * Updates a property. This method supports patch semantics. (properties.patch)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param Google_Property $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ * @return Google_Service_Drive_Property
+ */
+ public function patch($fileId, $propertyKey, Google_Service_Drive_Property $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Property");
+ }
+ /**
+ * Updates a property. (properties.update)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param Google_Property $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ * @return Google_Service_Drive_Property
+ */
+ public function update($fileId, $propertyKey, Google_Service_Drive_Property $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Property");
+ }
+}
+
+/**
+ * The "realtime" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $realtime = $driveService->realtime;
+ * </code>
+ */
+class Google_Service_Drive_Realtime_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Exports the contents of the Realtime API data model associated with this file
+ * as JSON. (realtime.get)
+ *
+ * @param string $fileId
+ * The ID of the file that the Realtime API data model is associated with.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param int revision
+ * The revision of the Realtime API data model to export. Revisions start at 1 (the initial empty
+ * data model) and are incremented with each change. If this parameter is excluded, the most recent
+ * data model will be returned.
+ */
+ public function get($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params));
+ }
+ /**
+ * Overwrites the Realtime API data model associated with this file with the
+ * provided JSON data model. (realtime.update)
+ *
+ * @param string $fileId
+ * The ID of the file that the Realtime API data model is associated with.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string baseRevision
+ * The revision of the model to diff the uploaded model against. If set, the uploaded model is
+ * diffed against the provided revision and those differences are merged with any changes made to
+ * the model after the provided revision. If not set, the uploaded model replaces the current model
+ * on the server.
+ */
+ public function update($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params));
+ }
+}
+
+/**
+ * The "replies" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $replies = $driveService->replies;
+ * </code>
+ */
+class Google_Service_Drive_Replies_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a reply. (replies.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $commentId, $replyId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a reply. (replies.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeDeleted
+ * If set, this will succeed when retrieving a deleted reply.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function get($fileId, $commentId, $replyId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_CommentReply");
+ }
+ /**
+ * Creates a new reply to the given comment. (replies.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param Google_CommentReply $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function insert($fileId, $commentId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_CommentReply");
+ }
+ /**
+ * Lists all of the replies to a comment. (replies.listReplies)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string pageToken
+ * The continuation token, used to page through large result sets. To get the next page of results,
+ * set this parameter to the value of "nextPageToken" from the previous response.
+ * @opt_param bool includeDeleted
+ * If set, all replies, including deleted replies (with content stripped) will be returned.
+ * @opt_param int maxResults
+ * The maximum number of replies to include in the response, used for paging.
+ * @return Google_Service_Drive_CommentReplyList
+ */
+ public function listReplies($fileId, $commentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_CommentReplyList");
+ }
+ /**
+ * Updates an existing reply. This method supports patch semantics.
+ * (replies.patch)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param Google_CommentReply $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function patch($fileId, $commentId, $replyId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_CommentReply");
+ }
+ /**
+ * Updates an existing reply. (replies.update)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param Google_CommentReply $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function update($fileId, $commentId, $replyId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_CommentReply");
+ }
+}
+
+/**
+ * The "revisions" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $revisions = $driveService->revisions;
+ * </code>
+ */
+class Google_Service_Drive_Revisions_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Removes a revision. (revisions.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $revisionId
+ * The ID of the revision.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $revisionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a specific revision. (revisions.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $revisionId
+ * The ID of the revision.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Revision
+ */
+ public function get($fileId, $revisionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Revision");
+ }
+ /**
+ * Lists a file's revisions. (revisions.listRevisions)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_RevisionList
+ */
+ public function listRevisions($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_RevisionList");
+ }
+ /**
+ * Updates a revision. This method supports patch semantics. (revisions.patch)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $revisionId
+ * The ID for the revision.
+ * @param Google_Revision $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Revision
+ */
+ public function patch($fileId, $revisionId, Google_Service_Drive_Revision $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Revision");
+ }
+ /**
+ * Updates a revision. (revisions.update)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $revisionId
+ * The ID for the revision.
+ * @param Google_Revision $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Revision
+ */
+ public function update($fileId, $revisionId, Google_Service_Drive_Revision $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Revision");
+ }
+}
+
+
+
+
+class Google_Service_Drive_About extends Google_Collection
+{
+ protected $collection_key = 'quotaBytesByService';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $additionalRoleInfoType = 'Google_Service_Drive_AboutAdditionalRoleInfo';
+ protected $additionalRoleInfoDataType = 'array';
+ public $domainSharingPolicy;
+ public $etag;
+ protected $exportFormatsType = 'Google_Service_Drive_AboutExportFormats';
+ protected $exportFormatsDataType = 'array';
+ protected $featuresType = 'Google_Service_Drive_AboutFeatures';
+ protected $featuresDataType = 'array';
+ protected $importFormatsType = 'Google_Service_Drive_AboutImportFormats';
+ protected $importFormatsDataType = 'array';
+ public $isCurrentAppInstalled;
+ public $kind;
+ public $languageCode;
+ public $largestChangeId;
+ protected $maxUploadSizesType = 'Google_Service_Drive_AboutMaxUploadSizes';
+ protected $maxUploadSizesDataType = 'array';
+ public $name;
+ public $permissionId;
+ protected $quotaBytesByServiceType = 'Google_Service_Drive_AboutQuotaBytesByService';
+ protected $quotaBytesByServiceDataType = 'array';
+ public $quotaBytesTotal;
+ public $quotaBytesUsed;
+ public $quotaBytesUsedAggregate;
+ public $quotaBytesUsedInTrash;
+ public $quotaType;
+ public $remainingChangeIds;
+ public $rootFolderId;
+ public $selfLink;
+ protected $userType = 'Google_Service_Drive_User';
+ protected $userDataType = '';
+
+ public function setAdditionalRoleInfo($additionalRoleInfo)
+ {
+ $this->additionalRoleInfo = $additionalRoleInfo;
+ }
+
+ public function getAdditionalRoleInfo()
+ {
+ return $this->additionalRoleInfo;
+ }
+
+ public function setDomainSharingPolicy($domainSharingPolicy)
+ {
+ $this->domainSharingPolicy = $domainSharingPolicy;
+ }
+
+ public function getDomainSharingPolicy()
+ {
+ return $this->domainSharingPolicy;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setExportFormats($exportFormats)
+ {
+ $this->exportFormats = $exportFormats;
+ }
+
+ public function getExportFormats()
+ {
+ return $this->exportFormats;
+ }
+
+ public function setFeatures($features)
+ {
+ $this->features = $features;
+ }
+
+ public function getFeatures()
+ {
+ return $this->features;
+ }
+
+ public function setImportFormats($importFormats)
+ {
+ $this->importFormats = $importFormats;
+ }
+
+ public function getImportFormats()
+ {
+ return $this->importFormats;
+ }
+
+ public function setIsCurrentAppInstalled($isCurrentAppInstalled)
+ {
+ $this->isCurrentAppInstalled = $isCurrentAppInstalled;
+ }
+
+ public function getIsCurrentAppInstalled()
+ {
+ return $this->isCurrentAppInstalled;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLanguageCode($languageCode)
+ {
+ $this->languageCode = $languageCode;
+ }
+
+ public function getLanguageCode()
+ {
+ return $this->languageCode;
+ }
+
+ public function setLargestChangeId($largestChangeId)
+ {
+ $this->largestChangeId = $largestChangeId;
+ }
+
+ public function getLargestChangeId()
+ {
+ return $this->largestChangeId;
+ }
+
+ public function setMaxUploadSizes($maxUploadSizes)
+ {
+ $this->maxUploadSizes = $maxUploadSizes;
+ }
+
+ public function getMaxUploadSizes()
+ {
+ return $this->maxUploadSizes;
+ }
+
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function setPermissionId($permissionId)
+ {
+ $this->permissionId = $permissionId;
+ }
+
+ public function getPermissionId()
+ {
+ return $this->permissionId;
+ }
+
+ public function setQuotaBytesByService($quotaBytesByService)
+ {
+ $this->quotaBytesByService = $quotaBytesByService;
+ }
+
+ public function getQuotaBytesByService()
+ {
+ return $this->quotaBytesByService;
+ }
+
+ public function setQuotaBytesTotal($quotaBytesTotal)
+ {
+ $this->quotaBytesTotal = $quotaBytesTotal;
+ }
+
+ public function getQuotaBytesTotal()
+ {
+ return $this->quotaBytesTotal;
+ }
+
+ public function setQuotaBytesUsed($quotaBytesUsed)
+ {
+ $this->quotaBytesUsed = $quotaBytesUsed;
+ }
+
+ public function getQuotaBytesUsed()
+ {
+ return $this->quotaBytesUsed;
+ }
+
+ public function setQuotaBytesUsedAggregate($quotaBytesUsedAggregate)
+ {
+ $this->quotaBytesUsedAggregate = $quotaBytesUsedAggregate;
+ }
+
+ public function getQuotaBytesUsedAggregate()
+ {
+ return $this->quotaBytesUsedAggregate;
+ }
+
+ public function setQuotaBytesUsedInTrash($quotaBytesUsedInTrash)
+ {
+ $this->quotaBytesUsedInTrash = $quotaBytesUsedInTrash;
+ }
+
+ public function getQuotaBytesUsedInTrash()
+ {
+ return $this->quotaBytesUsedInTrash;
+ }
+
+ public function setQuotaType($quotaType)
+ {
+ $this->quotaType = $quotaType;
+ }
+
+ public function getQuotaType()
+ {
+ return $this->quotaType;
+ }
+
+ public function setRemainingChangeIds($remainingChangeIds)
+ {
+ $this->remainingChangeIds = $remainingChangeIds;
+ }
+
+ public function getRemainingChangeIds()
+ {
+ return $this->remainingChangeIds;
+ }
+
+ public function setRootFolderId($rootFolderId)
+ {
+ $this->rootFolderId = $rootFolderId;
+ }
+
+ public function getRootFolderId()
+ {
+ return $this->rootFolderId;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setUser(Google_Service_Drive_User $user)
+ {
+ $this->user = $user;
+ }
+
+ public function getUser()
+ {
+ return $this->user;
+ }
+}
+
+class Google_Service_Drive_AboutAdditionalRoleInfo extends Google_Collection
+{
+ protected $collection_key = 'roleSets';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $roleSetsType = 'Google_Service_Drive_AboutAdditionalRoleInfoRoleSets';
+ protected $roleSetsDataType = 'array';
+ public $type;
+
+ public function setRoleSets($roleSets)
+ {
+ $this->roleSets = $roleSets;
+ }
+
+ public function getRoleSets()
+ {
+ return $this->roleSets;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+}
+
+class Google_Service_Drive_AboutAdditionalRoleInfoRoleSets extends Google_Collection
+{
+ protected $collection_key = 'additionalRoles';
+ protected $internal_gapi_mappings = array(
+ );
+ public $additionalRoles;
+ public $primaryRole;
+
+ public function setAdditionalRoles($additionalRoles)
+ {
+ $this->additionalRoles = $additionalRoles;
+ }
+
+ public function getAdditionalRoles()
+ {
+ return $this->additionalRoles;
+ }
+
+ public function setPrimaryRole($primaryRole)
+ {
+ $this->primaryRole = $primaryRole;
+ }
+
+ public function getPrimaryRole()
+ {
+ return $this->primaryRole;
+ }
+}
+
+class Google_Service_Drive_AboutExportFormats extends Google_Collection
+{
+ protected $collection_key = 'targets';
+ protected $internal_gapi_mappings = array(
+ );
+ public $source;
+ public $targets;
+
+ public function setSource($source)
+ {
+ $this->source = $source;
+ }
+
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ public function setTargets($targets)
+ {
+ $this->targets = $targets;
+ }
+
+ public function getTargets()
+ {
+ return $this->targets;
+ }
+}
+
+class Google_Service_Drive_AboutFeatures extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $featureName;
+ public $featureRate;
+
+ public function setFeatureName($featureName)
+ {
+ $this->featureName = $featureName;
+ }
+
+ public function getFeatureName()
+ {
+ return $this->featureName;
+ }
+
+ public function setFeatureRate($featureRate)
+ {
+ $this->featureRate = $featureRate;
+ }
+
+ public function getFeatureRate()
+ {
+ return $this->featureRate;
+ }
+}
+
+class Google_Service_Drive_AboutImportFormats extends Google_Collection
+{
+ protected $collection_key = 'targets';
+ protected $internal_gapi_mappings = array(
+ );
+ public $source;
+ public $targets;
+
+ public function setSource($source)
+ {
+ $this->source = $source;
+ }
+
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ public function setTargets($targets)
+ {
+ $this->targets = $targets;
+ }
+
+ public function getTargets()
+ {
+ return $this->targets;
+ }
+}
+
+class Google_Service_Drive_AboutMaxUploadSizes extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $size;
+ public $type;
+
+ public function setSize($size)
+ {
+ $this->size = $size;
+ }
+
+ public function getSize()
+ {
+ return $this->size;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+}
+
+class Google_Service_Drive_AboutQuotaBytesByService extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $bytesUsed;
+ public $serviceName;
+
+ public function setBytesUsed($bytesUsed)
+ {
+ $this->bytesUsed = $bytesUsed;
+ }
+
+ public function getBytesUsed()
+ {
+ return $this->bytesUsed;
+ }
+
+ public function setServiceName($serviceName)
+ {
+ $this->serviceName = $serviceName;
+ }
+
+ public function getServiceName()
+ {
+ return $this->serviceName;
+ }
+}
+
+class Google_Service_Drive_App extends Google_Collection
+{
+ protected $collection_key = 'secondaryMimeTypes';
+ protected $internal_gapi_mappings = array(
+ );
+ public $authorized;
+ public $createInFolderTemplate;
+ public $createUrl;
+ public $hasDriveWideScope;
+ protected $iconsType = 'Google_Service_Drive_AppIcons';
+ protected $iconsDataType = 'array';
+ public $id;
+ public $installed;
+ public $kind;
+ public $longDescription;
+ public $name;
+ public $objectType;
+ public $openUrlTemplate;
+ public $primaryFileExtensions;
+ public $primaryMimeTypes;
+ public $productId;
+ public $productUrl;
+ public $secondaryFileExtensions;
+ public $secondaryMimeTypes;
+ public $shortDescription;
+ public $supportsCreate;
+ public $supportsImport;
+ public $supportsMultiOpen;
+ public $supportsOfflineCreate;
+ public $useByDefault;
+
+ public function setAuthorized($authorized)
+ {
+ $this->authorized = $authorized;
+ }
+
+ public function getAuthorized()
+ {
+ return $this->authorized;
+ }
+
+ public function setCreateInFolderTemplate($createInFolderTemplate)
+ {
+ $this->createInFolderTemplate = $createInFolderTemplate;
+ }
+
+ public function getCreateInFolderTemplate()
+ {
+ return $this->createInFolderTemplate;
+ }
+
+ public function setCreateUrl($createUrl)
+ {
+ $this->createUrl = $createUrl;
+ }
+
+ public function getCreateUrl()
+ {
+ return $this->createUrl;
+ }
+
+ public function setHasDriveWideScope($hasDriveWideScope)
+ {
+ $this->hasDriveWideScope = $hasDriveWideScope;
+ }
+
+ public function getHasDriveWideScope()
+ {
+ return $this->hasDriveWideScope;
+ }
+
+ public function setIcons($icons)
+ {
+ $this->icons = $icons;
+ }
+
+ public function getIcons()
+ {
+ return $this->icons;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setInstalled($installed)
+ {
+ $this->installed = $installed;
+ }
+
+ public function getInstalled()
+ {
+ return $this->installed;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLongDescription($longDescription)
+ {
+ $this->longDescription = $longDescription;
+ }
+
+ public function getLongDescription()
+ {
+ return $this->longDescription;
+ }
+
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function setObjectType($objectType)
+ {
+ $this->objectType = $objectType;
+ }
+
+ public function getObjectType()
+ {
+ return $this->objectType;
+ }
+
+ public function setOpenUrlTemplate($openUrlTemplate)
+ {
+ $this->openUrlTemplate = $openUrlTemplate;
+ }
+
+ public function getOpenUrlTemplate()
+ {
+ return $this->openUrlTemplate;
+ }
+
+ public function setPrimaryFileExtensions($primaryFileExtensions)
+ {
+ $this->primaryFileExtensions = $primaryFileExtensions;
+ }
+
+ public function getPrimaryFileExtensions()
+ {
+ return $this->primaryFileExtensions;
+ }
+
+ public function setPrimaryMimeTypes($primaryMimeTypes)
+ {
+ $this->primaryMimeTypes = $primaryMimeTypes;
+ }
+
+ public function getPrimaryMimeTypes()
+ {
+ return $this->primaryMimeTypes;
+ }
+
+ public function setProductId($productId)
+ {
+ $this->productId = $productId;
+ }
+
+ public function getProductId()
+ {
+ return $this->productId;
+ }
+
+ public function setProductUrl($productUrl)
+ {
+ $this->productUrl = $productUrl;
+ }
+
+ public function getProductUrl()
+ {
+ return $this->productUrl;
+ }
+
+ public function setSecondaryFileExtensions($secondaryFileExtensions)
+ {
+ $this->secondaryFileExtensions = $secondaryFileExtensions;
+ }
+
+ public function getSecondaryFileExtensions()
+ {
+ return $this->secondaryFileExtensions;
+ }
+
+ public function setSecondaryMimeTypes($secondaryMimeTypes)
+ {
+ $this->secondaryMimeTypes = $secondaryMimeTypes;
+ }
+
+ public function getSecondaryMimeTypes()
+ {
+ return $this->secondaryMimeTypes;
+ }
+
+ public function setShortDescription($shortDescription)
+ {
+ $this->shortDescription = $shortDescription;
+ }
+
+ public function getShortDescription()
+ {
+ return $this->shortDescription;
+ }
+
+ public function setSupportsCreate($supportsCreate)
+ {
+ $this->supportsCreate = $supportsCreate;
+ }
+
+ public function getSupportsCreate()
+ {
+ return $this->supportsCreate;
+ }
+
+ public function setSupportsImport($supportsImport)
+ {
+ $this->supportsImport = $supportsImport;
+ }
+
+ public function getSupportsImport()
+ {
+ return $this->supportsImport;
+ }
+
+ public function setSupportsMultiOpen($supportsMultiOpen)
+ {
+ $this->supportsMultiOpen = $supportsMultiOpen;
+ }
+
+ public function getSupportsMultiOpen()
+ {
+ return $this->supportsMultiOpen;
+ }
+
+ public function setSupportsOfflineCreate($supportsOfflineCreate)
+ {
+ $this->supportsOfflineCreate = $supportsOfflineCreate;
+ }
+
+ public function getSupportsOfflineCreate()
+ {
+ return $this->supportsOfflineCreate;
+ }
+
+ public function setUseByDefault($useByDefault)
+ {
+ $this->useByDefault = $useByDefault;
+ }
+
+ public function getUseByDefault()
+ {
+ return $this->useByDefault;
+ }
+}
+
+class Google_Service_Drive_AppIcons extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $category;
+ public $iconUrl;
+ public $size;
+
+ public function setCategory($category)
+ {
+ $this->category = $category;
+ }
+
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ public function setIconUrl($iconUrl)
+ {
+ $this->iconUrl = $iconUrl;
+ }
+
+ public function getIconUrl()
+ {
+ return $this->iconUrl;
+ }
+
+ public function setSize($size)
+ {
+ $this->size = $size;
+ }
+
+ public function getSize()
+ {
+ return $this->size;
+ }
+}
+
+class Google_Service_Drive_AppList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $defaultAppIds;
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_App';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setDefaultAppIds($defaultAppIds)
+ {
+ $this->defaultAppIds = $defaultAppIds;
+ }
+
+ public function getDefaultAppIds()
+ {
+ return $this->defaultAppIds;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Change extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $deleted;
+ protected $fileType = 'Google_Service_Drive_DriveFile';
+ protected $fileDataType = '';
+ public $fileId;
+ public $id;
+ public $kind;
+ public $modificationDate;
+ public $selfLink;
+
+ public function setDeleted($deleted)
+ {
+ $this->deleted = $deleted;
+ }
+
+ public function getDeleted()
+ {
+ return $this->deleted;
+ }
+
+ public function setFile(Google_Service_Drive_DriveFile $file)
+ {
+ $this->file = $file;
+ }
+
+ public function getFile()
+ {
+ return $this->file;
+ }
+
+ public function setFileId($fileId)
+ {
+ $this->fileId = $fileId;
+ }
+
+ public function getFileId()
+ {
+ return $this->fileId;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setModificationDate($modificationDate)
+ {
+ $this->modificationDate = $modificationDate;
+ }
+
+ public function getModificationDate()
+ {
+ return $this->modificationDate;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ChangeList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Change';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $largestChangeId;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLargestChangeId($largestChangeId)
+ {
+ $this->largestChangeId = $largestChangeId;
+ }
+
+ public function getLargestChangeId()
+ {
+ return $this->largestChangeId;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Channel extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $address;
+ public $expiration;
+ public $id;
+ public $kind;
+ public $params;
+ public $payload;
+ public $resourceId;
+ public $resourceUri;
+ public $token;
+ public $type;
+
+ public function setAddress($address)
+ {
+ $this->address = $address;
+ }
+
+ public function getAddress()
+ {
+ return $this->address;
+ }
+
+ public function setExpiration($expiration)
+ {
+ $this->expiration = $expiration;
+ }
+
+ public function getExpiration()
+ {
+ return $this->expiration;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setParams($params)
+ {
+ $this->params = $params;
+ }
+
+ public function getParams()
+ {
+ return $this->params;
+ }
+
+ public function setPayload($payload)
+ {
+ $this->payload = $payload;
+ }
+
+ public function getPayload()
+ {
+ return $this->payload;
+ }
+
+ public function setResourceId($resourceId)
+ {
+ $this->resourceId = $resourceId;
+ }
+
+ public function getResourceId()
+ {
+ return $this->resourceId;
+ }
+
+ public function setResourceUri($resourceUri)
+ {
+ $this->resourceUri = $resourceUri;
+ }
+
+ public function getResourceUri()
+ {
+ return $this->resourceUri;
+ }
+
+ public function setToken($token)
+ {
+ $this->token = $token;
+ }
+
+ public function getToken()
+ {
+ return $this->token;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+}
+
+class Google_Service_Drive_ChannelParams extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_ChildList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_ChildReference';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ChildReference extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $childLink;
+ public $id;
+ public $kind;
+ public $selfLink;
+
+ public function setChildLink($childLink)
+ {
+ $this->childLink = $childLink;
+ }
+
+ public function getChildLink()
+ {
+ return $this->childLink;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Comment extends Google_Collection
+{
+ protected $collection_key = 'replies';
+ protected $internal_gapi_mappings = array(
+ );
+ public $anchor;
+ protected $authorType = 'Google_Service_Drive_User';
+ protected $authorDataType = '';
+ public $commentId;
+ public $content;
+ protected $contextType = 'Google_Service_Drive_CommentContext';
+ protected $contextDataType = '';
+ public $createdDate;
+ public $deleted;
+ public $fileId;
+ public $fileTitle;
+ public $htmlContent;
+ public $kind;
+ public $modifiedDate;
+ protected $repliesType = 'Google_Service_Drive_CommentReply';
+ protected $repliesDataType = 'array';
+ public $selfLink;
+ public $status;
+
+ public function setAnchor($anchor)
+ {
+ $this->anchor = $anchor;
+ }
+
+ public function getAnchor()
+ {
+ return $this->anchor;
+ }
+
+ public function setAuthor(Google_Service_Drive_User $author)
+ {
+ $this->author = $author;
+ }
+
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ public function setCommentId($commentId)
+ {
+ $this->commentId = $commentId;
+ }
+
+ public function getCommentId()
+ {
+ return $this->commentId;
+ }
+
+ public function setContent($content)
+ {
+ $this->content = $content;
+ }
+
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ public function setContext(Google_Service_Drive_CommentContext $context)
+ {
+ $this->context = $context;
+ }
+
+ public function getContext()
+ {
+ return $this->context;
+ }
+
+ public function setCreatedDate($createdDate)
+ {
+ $this->createdDate = $createdDate;
+ }
+
+ public function getCreatedDate()
+ {
+ return $this->createdDate;
+ }
+
+ public function setDeleted($deleted)
+ {
+ $this->deleted = $deleted;
+ }
+
+ public function getDeleted()
+ {
+ return $this->deleted;
+ }
+
+ public function setFileId($fileId)
+ {
+ $this->fileId = $fileId;
+ }
+
+ public function getFileId()
+ {
+ return $this->fileId;
+ }
+
+ public function setFileTitle($fileTitle)
+ {
+ $this->fileTitle = $fileTitle;
+ }
+
+ public function getFileTitle()
+ {
+ return $this->fileTitle;
+ }
+
+ public function setHtmlContent($htmlContent)
+ {
+ $this->htmlContent = $htmlContent;
+ }
+
+ public function getHtmlContent()
+ {
+ return $this->htmlContent;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setReplies($replies)
+ {
+ $this->replies = $replies;
+ }
+
+ public function getReplies()
+ {
+ return $this->replies;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setStatus($status)
+ {
+ $this->status = $status;
+ }
+
+ public function getStatus()
+ {
+ return $this->status;
+ }
+}
+
+class Google_Service_Drive_CommentContext extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $type;
+ public $value;
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ public function getValue()
+ {
+ return $this->value;
+ }
+}
+
+class Google_Service_Drive_CommentList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $itemsType = 'Google_Service_Drive_Comment';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_CommentReply extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ protected $authorType = 'Google_Service_Drive_User';
+ protected $authorDataType = '';
+ public $content;
+ public $createdDate;
+ public $deleted;
+ public $htmlContent;
+ public $kind;
+ public $modifiedDate;
+ public $replyId;
+ public $verb;
+
+ public function setAuthor(Google_Service_Drive_User $author)
+ {
+ $this->author = $author;
+ }
+
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ public function setContent($content)
+ {
+ $this->content = $content;
+ }
+
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ public function setCreatedDate($createdDate)
+ {
+ $this->createdDate = $createdDate;
+ }
+
+ public function getCreatedDate()
+ {
+ return $this->createdDate;
+ }
+
+ public function setDeleted($deleted)
+ {
+ $this->deleted = $deleted;
+ }
+
+ public function getDeleted()
+ {
+ return $this->deleted;
+ }
+
+ public function setHtmlContent($htmlContent)
+ {
+ $this->htmlContent = $htmlContent;
+ }
+
+ public function getHtmlContent()
+ {
+ return $this->htmlContent;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setReplyId($replyId)
+ {
+ $this->replyId = $replyId;
+ }
+
+ public function getReplyId()
+ {
+ return $this->replyId;
+ }
+
+ public function setVerb($verb)
+ {
+ $this->verb = $verb;
+ }
+
+ public function getVerb()
+ {
+ return $this->verb;
+ }
+}
+
+class Google_Service_Drive_CommentReplyList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $itemsType = 'Google_Service_Drive_CommentReply';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_DriveFile extends Google_Collection
+{
+ protected $collection_key = 'properties';
+ protected $internal_gapi_mappings = array(
+ );
+ public $alternateLink;
+ public $appDataContents;
+ public $copyable;
+ public $createdDate;
+ public $defaultOpenWithLink;
+ public $description;
+ public $downloadUrl;
+ public $editable;
+ public $embedLink;
+ public $etag;
+ public $explicitlyTrashed;
+ public $exportLinks;
+ public $fileExtension;
+ public $fileSize;
+ public $headRevisionId;
+ public $iconLink;
+ public $id;
+ protected $imageMediaMetadataType = 'Google_Service_Drive_DriveFileImageMediaMetadata';
+ protected $imageMediaMetadataDataType = '';
+ protected $indexableTextType = 'Google_Service_Drive_DriveFileIndexableText';
+ protected $indexableTextDataType = '';
+ public $kind;
+ protected $labelsType = 'Google_Service_Drive_DriveFileLabels';
+ protected $labelsDataType = '';
+ protected $lastModifyingUserType = 'Google_Service_Drive_User';
+ protected $lastModifyingUserDataType = '';
+ public $lastModifyingUserName;
+ public $lastViewedByMeDate;
+ public $markedViewedByMeDate;
+ public $md5Checksum;
+ public $mimeType;
+ public $modifiedByMeDate;
+ public $modifiedDate;
+ public $openWithLinks;
+ public $originalFilename;
+ public $ownerNames;
+ protected $ownersType = 'Google_Service_Drive_User';
+ protected $ownersDataType = 'array';
+ protected $parentsType = 'Google_Service_Drive_ParentReference';
+ protected $parentsDataType = 'array';
+ protected $permissionsType = 'Google_Service_Drive_Permission';
+ protected $permissionsDataType = 'array';
+ protected $propertiesType = 'Google_Service_Drive_Property';
+ protected $propertiesDataType = 'array';
+ public $quotaBytesUsed;
+ public $selfLink;
+ public $shared;
+ public $sharedWithMeDate;
+ protected $sharingUserType = 'Google_Service_Drive_User';
+ protected $sharingUserDataType = '';
+ protected $thumbnailType = 'Google_Service_Drive_DriveFileThumbnail';
+ protected $thumbnailDataType = '';
+ public $thumbnailLink;
+ public $title;
+ protected $userPermissionType = 'Google_Service_Drive_Permission';
+ protected $userPermissionDataType = '';
+ public $version;
+ protected $videoMediaMetadataType = 'Google_Service_Drive_DriveFileVideoMediaMetadata';
+ protected $videoMediaMetadataDataType = '';
+ public $webContentLink;
+ public $webViewLink;
+ public $writersCanShare;
+
+ public function setAlternateLink($alternateLink)
+ {
+ $this->alternateLink = $alternateLink;
+ }
+
+ public function getAlternateLink()
+ {
+ return $this->alternateLink;
+ }
+
+ public function setAppDataContents($appDataContents)
+ {
+ $this->appDataContents = $appDataContents;
+ }
+
+ public function getAppDataContents()
+ {
+ return $this->appDataContents;
+ }
+
+ public function setCopyable($copyable)
+ {
+ $this->copyable = $copyable;
+ }
+
+ public function getCopyable()
+ {
+ return $this->copyable;
+ }
+
+ public function setCreatedDate($createdDate)
+ {
+ $this->createdDate = $createdDate;
+ }
+
+ public function getCreatedDate()
+ {
+ return $this->createdDate;
+ }
+
+ public function setDefaultOpenWithLink($defaultOpenWithLink)
+ {
+ $this->defaultOpenWithLink = $defaultOpenWithLink;
+ }
+
+ public function getDefaultOpenWithLink()
+ {
+ return $this->defaultOpenWithLink;
+ }
+
+ public function setDescription($description)
+ {
+ $this->description = $description;
+ }
+
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ public function setDownloadUrl($downloadUrl)
+ {
+ $this->downloadUrl = $downloadUrl;
+ }
+
+ public function getDownloadUrl()
+ {
+ return $this->downloadUrl;
+ }
+
+ public function setEditable($editable)
+ {
+ $this->editable = $editable;
+ }
+
+ public function getEditable()
+ {
+ return $this->editable;
+ }
+
+ public function setEmbedLink($embedLink)
+ {
+ $this->embedLink = $embedLink;
+ }
+
+ public function getEmbedLink()
+ {
+ return $this->embedLink;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setExplicitlyTrashed($explicitlyTrashed)
+ {
+ $this->explicitlyTrashed = $explicitlyTrashed;
+ }
+
+ public function getExplicitlyTrashed()
+ {
+ return $this->explicitlyTrashed;
+ }
+
+ public function setExportLinks($exportLinks)
+ {
+ $this->exportLinks = $exportLinks;
+ }
+
+ public function getExportLinks()
+ {
+ return $this->exportLinks;
+ }
+
+ public function setFileExtension($fileExtension)
+ {
+ $this->fileExtension = $fileExtension;
+ }
+
+ public function getFileExtension()
+ {
+ return $this->fileExtension;
+ }
+
+ public function setFileSize($fileSize)
+ {
+ $this->fileSize = $fileSize;
+ }
+
+ public function getFileSize()
+ {
+ return $this->fileSize;
+ }
+
+ public function setHeadRevisionId($headRevisionId)
+ {
+ $this->headRevisionId = $headRevisionId;
+ }
+
+ public function getHeadRevisionId()
+ {
+ return $this->headRevisionId;
+ }
+
+ public function setIconLink($iconLink)
+ {
+ $this->iconLink = $iconLink;
+ }
+
+ public function getIconLink()
+ {
+ return $this->iconLink;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setImageMediaMetadata(Google_Service_Drive_DriveFileImageMediaMetadata $imageMediaMetadata)
+ {
+ $this->imageMediaMetadata = $imageMediaMetadata;
+ }
+
+ public function getImageMediaMetadata()
+ {
+ return $this->imageMediaMetadata;
+ }
+
+ public function setIndexableText(Google_Service_Drive_DriveFileIndexableText $indexableText)
+ {
+ $this->indexableText = $indexableText;
+ }
+
+ public function getIndexableText()
+ {
+ return $this->indexableText;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLabels(Google_Service_Drive_DriveFileLabels $labels)
+ {
+ $this->labels = $labels;
+ }
+
+ public function getLabels()
+ {
+ return $this->labels;
+ }
+
+ public function setLastModifyingUser(Google_Service_Drive_User $lastModifyingUser)
+ {
+ $this->lastModifyingUser = $lastModifyingUser;
+ }
+
+ public function getLastModifyingUser()
+ {
+ return $this->lastModifyingUser;
+ }
+
+ public function setLastModifyingUserName($lastModifyingUserName)
+ {
+ $this->lastModifyingUserName = $lastModifyingUserName;
+ }
+
+ public function getLastModifyingUserName()
+ {
+ return $this->lastModifyingUserName;
+ }
+
+ public function setLastViewedByMeDate($lastViewedByMeDate)
+ {
+ $this->lastViewedByMeDate = $lastViewedByMeDate;
+ }
+
+ public function getLastViewedByMeDate()
+ {
+ return $this->lastViewedByMeDate;
+ }
+
+ public function setMarkedViewedByMeDate($markedViewedByMeDate)
+ {
+ $this->markedViewedByMeDate = $markedViewedByMeDate;
+ }
+
+ public function getMarkedViewedByMeDate()
+ {
+ return $this->markedViewedByMeDate;
+ }
+
+ public function setMd5Checksum($md5Checksum)
+ {
+ $this->md5Checksum = $md5Checksum;
+ }
+
+ public function getMd5Checksum()
+ {
+ return $this->md5Checksum;
+ }
+
+ public function setMimeType($mimeType)
+ {
+ $this->mimeType = $mimeType;
+ }
+
+ public function getMimeType()
+ {
+ return $this->mimeType;
+ }
+
+ public function setModifiedByMeDate($modifiedByMeDate)
+ {
+ $this->modifiedByMeDate = $modifiedByMeDate;
+ }
+
+ public function getModifiedByMeDate()
+ {
+ return $this->modifiedByMeDate;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setOpenWithLinks($openWithLinks)
+ {
+ $this->openWithLinks = $openWithLinks;
+ }
+
+ public function getOpenWithLinks()
+ {
+ return $this->openWithLinks;
+ }
+
+ public function setOriginalFilename($originalFilename)
+ {
+ $this->originalFilename = $originalFilename;
+ }
+
+ public function getOriginalFilename()
+ {
+ return $this->originalFilename;
+ }
+
+ public function setOwnerNames($ownerNames)
+ {
+ $this->ownerNames = $ownerNames;
+ }
+
+ public function getOwnerNames()
+ {
+ return $this->ownerNames;
+ }
+
+ public function setOwners($owners)
+ {
+ $this->owners = $owners;
+ }
+
+ public function getOwners()
+ {
+ return $this->owners;
+ }
+
+ public function setParents($parents)
+ {
+ $this->parents = $parents;
+ }
+
+ public function getParents()
+ {
+ return $this->parents;
+ }
+
+ public function setPermissions($permissions)
+ {
+ $this->permissions = $permissions;
+ }
+
+ public function getPermissions()
+ {
+ return $this->permissions;
+ }
+
+ public function setProperties($properties)
+ {
+ $this->properties = $properties;
+ }
+
+ public function getProperties()
+ {
+ return $this->properties;
+ }
+
+ public function setQuotaBytesUsed($quotaBytesUsed)
+ {
+ $this->quotaBytesUsed = $quotaBytesUsed;
+ }
+
+ public function getQuotaBytesUsed()
+ {
+ return $this->quotaBytesUsed;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setShared($shared)
+ {
+ $this->shared = $shared;
+ }
+
+ public function getShared()
+ {
+ return $this->shared;
+ }
+
+ public function setSharedWithMeDate($sharedWithMeDate)
+ {
+ $this->sharedWithMeDate = $sharedWithMeDate;
+ }
+
+ public function getSharedWithMeDate()
+ {
+ return $this->sharedWithMeDate;
+ }
+
+ public function setSharingUser(Google_Service_Drive_User $sharingUser)
+ {
+ $this->sharingUser = $sharingUser;
+ }
+
+ public function getSharingUser()
+ {
+ return $this->sharingUser;
+ }
+
+ public function setThumbnail(Google_Service_Drive_DriveFileThumbnail $thumbnail)
+ {
+ $this->thumbnail = $thumbnail;
+ }
+
+ public function getThumbnail()
+ {
+ return $this->thumbnail;
+ }
+
+ public function setThumbnailLink($thumbnailLink)
+ {
+ $this->thumbnailLink = $thumbnailLink;
+ }
+
+ public function getThumbnailLink()
+ {
+ return $this->thumbnailLink;
+ }
+
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ public function setUserPermission(Google_Service_Drive_Permission $userPermission)
+ {
+ $this->userPermission = $userPermission;
+ }
+
+ public function getUserPermission()
+ {
+ return $this->userPermission;
+ }
+
+ public function setVersion($version)
+ {
+ $this->version = $version;
+ }
+
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ public function setVideoMediaMetadata(Google_Service_Drive_DriveFileVideoMediaMetadata $videoMediaMetadata)
+ {
+ $this->videoMediaMetadata = $videoMediaMetadata;
+ }
+
+ public function getVideoMediaMetadata()
+ {
+ return $this->videoMediaMetadata;
+ }
+
+ public function setWebContentLink($webContentLink)
+ {
+ $this->webContentLink = $webContentLink;
+ }
+
+ public function getWebContentLink()
+ {
+ return $this->webContentLink;
+ }
+
+ public function setWebViewLink($webViewLink)
+ {
+ $this->webViewLink = $webViewLink;
+ }
+
+ public function getWebViewLink()
+ {
+ return $this->webViewLink;
+ }
+
+ public function setWritersCanShare($writersCanShare)
+ {
+ $this->writersCanShare = $writersCanShare;
+ }
+
+ public function getWritersCanShare()
+ {
+ return $this->writersCanShare;
+ }
+}
+
+class Google_Service_Drive_DriveFileExportLinks extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_DriveFileImageMediaMetadata extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $aperture;
+ public $cameraMake;
+ public $cameraModel;
+ public $colorSpace;
+ public $date;
+ public $exposureBias;
+ public $exposureMode;
+ public $exposureTime;
+ public $flashUsed;
+ public $focalLength;
+ public $height;
+ public $isoSpeed;
+ public $lens;
+ protected $locationType = 'Google_Service_Drive_DriveFileImageMediaMetadataLocation';
+ protected $locationDataType = '';
+ public $maxApertureValue;
+ public $meteringMode;
+ public $rotation;
+ public $sensor;
+ public $subjectDistance;
+ public $whiteBalance;
+ public $width;
+
+ public function setAperture($aperture)
+ {
+ $this->aperture = $aperture;
+ }
+
+ public function getAperture()
+ {
+ return $this->aperture;
+ }
+
+ public function setCameraMake($cameraMake)
+ {
+ $this->cameraMake = $cameraMake;
+ }
+
+ public function getCameraMake()
+ {
+ return $this->cameraMake;
+ }
+
+ public function setCameraModel($cameraModel)
+ {
+ $this->cameraModel = $cameraModel;
+ }
+
+ public function getCameraModel()
+ {
+ return $this->cameraModel;
+ }
+
+ public function setColorSpace($colorSpace)
+ {
+ $this->colorSpace = $colorSpace;
+ }
+
+ public function getColorSpace()
+ {
+ return $this->colorSpace;
+ }
+
+ public function setDate($date)
+ {
+ $this->date = $date;
+ }
+
+ public function getDate()
+ {
+ return $this->date;
+ }
+
+ public function setExposureBias($exposureBias)
+ {
+ $this->exposureBias = $exposureBias;
+ }
+
+ public function getExposureBias()
+ {
+ return $this->exposureBias;
+ }
+
+ public function setExposureMode($exposureMode)
+ {
+ $this->exposureMode = $exposureMode;
+ }
+
+ public function getExposureMode()
+ {
+ return $this->exposureMode;
+ }
+
+ public function setExposureTime($exposureTime)
+ {
+ $this->exposureTime = $exposureTime;
+ }
+
+ public function getExposureTime()
+ {
+ return $this->exposureTime;
+ }
+
+ public function setFlashUsed($flashUsed)
+ {
+ $this->flashUsed = $flashUsed;
+ }
+
+ public function getFlashUsed()
+ {
+ return $this->flashUsed;
+ }
+
+ public function setFocalLength($focalLength)
+ {
+ $this->focalLength = $focalLength;
+ }
+
+ public function getFocalLength()
+ {
+ return $this->focalLength;
+ }
+
+ public function setHeight($height)
+ {
+ $this->height = $height;
+ }
+
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ public function setIsoSpeed($isoSpeed)
+ {
+ $this->isoSpeed = $isoSpeed;
+ }
+
+ public function getIsoSpeed()
+ {
+ return $this->isoSpeed;
+ }
+
+ public function setLens($lens)
+ {
+ $this->lens = $lens;
+ }
+
+ public function getLens()
+ {
+ return $this->lens;
+ }
+
+ public function setLocation(Google_Service_Drive_DriveFileImageMediaMetadataLocation $location)
+ {
+ $this->location = $location;
+ }
+
+ public function getLocation()
+ {
+ return $this->location;
+ }
+
+ public function setMaxApertureValue($maxApertureValue)
+ {
+ $this->maxApertureValue = $maxApertureValue;
+ }
+
+ public function getMaxApertureValue()
+ {
+ return $this->maxApertureValue;
+ }
+
+ public function setMeteringMode($meteringMode)
+ {
+ $this->meteringMode = $meteringMode;
+ }
+
+ public function getMeteringMode()
+ {
+ return $this->meteringMode;
+ }
+
+ public function setRotation($rotation)
+ {
+ $this->rotation = $rotation;
+ }
+
+ public function getRotation()
+ {
+ return $this->rotation;
+ }
+
+ public function setSensor($sensor)
+ {
+ $this->sensor = $sensor;
+ }
+
+ public function getSensor()
+ {
+ return $this->sensor;
+ }
+
+ public function setSubjectDistance($subjectDistance)
+ {
+ $this->subjectDistance = $subjectDistance;
+ }
+
+ public function getSubjectDistance()
+ {
+ return $this->subjectDistance;
+ }
+
+ public function setWhiteBalance($whiteBalance)
+ {
+ $this->whiteBalance = $whiteBalance;
+ }
+
+ public function getWhiteBalance()
+ {
+ return $this->whiteBalance;
+ }
+
+ public function setWidth($width)
+ {
+ $this->width = $width;
+ }
+
+ public function getWidth()
+ {
+ return $this->width;
+ }
+}
+
+class Google_Service_Drive_DriveFileImageMediaMetadataLocation extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $altitude;
+ public $latitude;
+ public $longitude;
+
+ public function setAltitude($altitude)
+ {
+ $this->altitude = $altitude;
+ }
+
+ public function getAltitude()
+ {
+ return $this->altitude;
+ }
+
+ public function setLatitude($latitude)
+ {
+ $this->latitude = $latitude;
+ }
+
+ public function getLatitude()
+ {
+ return $this->latitude;
+ }
+
+ public function setLongitude($longitude)
+ {
+ $this->longitude = $longitude;
+ }
+
+ public function getLongitude()
+ {
+ return $this->longitude;
+ }
+}
+
+class Google_Service_Drive_DriveFileIndexableText extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $text;
+
+ public function setText($text)
+ {
+ $this->text = $text;
+ }
+
+ public function getText()
+ {
+ return $this->text;
+ }
+}
+
+class Google_Service_Drive_DriveFileLabels extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $hidden;
+ public $restricted;
+ public $starred;
+ public $trashed;
+ public $viewed;
+
+ public function setHidden($hidden)
+ {
+ $this->hidden = $hidden;
+ }
+
+ public function getHidden()
+ {
+ return $this->hidden;
+ }
+
+ public function setRestricted($restricted)
+ {
+ $this->restricted = $restricted;
+ }
+
+ public function getRestricted()
+ {
+ return $this->restricted;
+ }
+
+ public function setStarred($starred)
+ {
+ $this->starred = $starred;
+ }
+
+ public function getStarred()
+ {
+ return $this->starred;
+ }
+
+ public function setTrashed($trashed)
+ {
+ $this->trashed = $trashed;
+ }
+
+ public function getTrashed()
+ {
+ return $this->trashed;
+ }
+
+ public function setViewed($viewed)
+ {
+ $this->viewed = $viewed;
+ }
+
+ public function getViewed()
+ {
+ return $this->viewed;
+ }
+}
+
+class Google_Service_Drive_DriveFileOpenWithLinks extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_DriveFileThumbnail extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $image;
+ public $mimeType;
+
+ public function setImage($image)
+ {
+ $this->image = $image;
+ }
+
+ public function getImage()
+ {
+ return $this->image;
+ }
+
+ public function setMimeType($mimeType)
+ {
+ $this->mimeType = $mimeType;
+ }
+
+ public function getMimeType()
+ {
+ return $this->mimeType;
+ }
+}
+
+class Google_Service_Drive_DriveFileVideoMediaMetadata extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $durationMillis;
+ public $height;
+ public $width;
+
+ public function setDurationMillis($durationMillis)
+ {
+ $this->durationMillis = $durationMillis;
+ }
+
+ public function getDurationMillis()
+ {
+ return $this->durationMillis;
+ }
+
+ public function setHeight($height)
+ {
+ $this->height = $height;
+ }
+
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ public function setWidth($width)
+ {
+ $this->width = $width;
+ }
+
+ public function getWidth()
+ {
+ return $this->width;
+ }
+}
+
+class Google_Service_Drive_FileList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_DriveFile';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ParentList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_ParentReference';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ParentReference extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $id;
+ public $isRoot;
+ public $kind;
+ public $parentLink;
+ public $selfLink;
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setIsRoot($isRoot)
+ {
+ $this->isRoot = $isRoot;
+ }
+
+ public function getIsRoot()
+ {
+ return $this->isRoot;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setParentLink($parentLink)
+ {
+ $this->parentLink = $parentLink;
+ }
+
+ public function getParentLink()
+ {
+ return $this->parentLink;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Permission extends Google_Collection
+{
+ protected $collection_key = 'additionalRoles';
+ protected $internal_gapi_mappings = array(
+ );
+ public $additionalRoles;
+ public $authKey;
+ public $domain;
+ public $emailAddress;
+ public $etag;
+ public $id;
+ public $kind;
+ public $name;
+ public $photoLink;
+ public $role;
+ public $selfLink;
+ public $type;
+ public $value;
+ public $withLink;
+
+ public function setAdditionalRoles($additionalRoles)
+ {
+ $this->additionalRoles = $additionalRoles;
+ }
+
+ public function getAdditionalRoles()
+ {
+ return $this->additionalRoles;
+ }
+
+ public function setAuthKey($authKey)
+ {
+ $this->authKey = $authKey;
+ }
+
+ public function getAuthKey()
+ {
+ return $this->authKey;
+ }
+
+ public function setDomain($domain)
+ {
+ $this->domain = $domain;
+ }
+
+ public function getDomain()
+ {
+ return $this->domain;
+ }
+
+ public function setEmailAddress($emailAddress)
+ {
+ $this->emailAddress = $emailAddress;
+ }
+
+ public function getEmailAddress()
+ {
+ return $this->emailAddress;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function setPhotoLink($photoLink)
+ {
+ $this->photoLink = $photoLink;
+ }
+
+ public function getPhotoLink()
+ {
+ return $this->photoLink;
+ }
+
+ public function setRole($role)
+ {
+ $this->role = $role;
+ }
+
+ public function getRole()
+ {
+ return $this->role;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ public function setWithLink($withLink)
+ {
+ $this->withLink = $withLink;
+ }
+
+ public function getWithLink()
+ {
+ return $this->withLink;
+ }
+}
+
+class Google_Service_Drive_PermissionId extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $id;
+ public $kind;
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+}
+
+class Google_Service_Drive_PermissionList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Permission';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Property extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ public $key;
+ public $kind;
+ public $selfLink;
+ public $value;
+ public $visibility;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setKey($key)
+ {
+ $this->key = $key;
+ }
+
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ public function setVisibility($visibility)
+ {
+ $this->visibility = $visibility;
+ }
+
+ public function getVisibility()
+ {
+ return $this->visibility;
+ }
+}
+
+class Google_Service_Drive_PropertyList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Property';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Revision extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $downloadUrl;
+ public $etag;
+ public $exportLinks;
+ public $fileSize;
+ public $id;
+ public $kind;
+ protected $lastModifyingUserType = 'Google_Service_Drive_User';
+ protected $lastModifyingUserDataType = '';
+ public $lastModifyingUserName;
+ public $md5Checksum;
+ public $mimeType;
+ public $modifiedDate;
+ public $originalFilename;
+ public $pinned;
+ public $publishAuto;
+ public $published;
+ public $publishedLink;
+ public $publishedOutsideDomain;
+ public $selfLink;
+
+ public function setDownloadUrl($downloadUrl)
+ {
+ $this->downloadUrl = $downloadUrl;
+ }
+
+ public function getDownloadUrl()
+ {
+ return $this->downloadUrl;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setExportLinks($exportLinks)
+ {
+ $this->exportLinks = $exportLinks;
+ }
+
+ public function getExportLinks()
+ {
+ return $this->exportLinks;
+ }
+
+ public function setFileSize($fileSize)
+ {
+ $this->fileSize = $fileSize;
+ }
+
+ public function getFileSize()
+ {
+ return $this->fileSize;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLastModifyingUser(Google_Service_Drive_User $lastModifyingUser)
+ {
+ $this->lastModifyingUser = $lastModifyingUser;
+ }
+
+ public function getLastModifyingUser()
+ {
+ return $this->lastModifyingUser;
+ }
+
+ public function setLastModifyingUserName($lastModifyingUserName)
+ {
+ $this->lastModifyingUserName = $lastModifyingUserName;
+ }
+
+ public function getLastModifyingUserName()
+ {
+ return $this->lastModifyingUserName;
+ }
+
+ public function setMd5Checksum($md5Checksum)
+ {
+ $this->md5Checksum = $md5Checksum;
+ }
+
+ public function getMd5Checksum()
+ {
+ return $this->md5Checksum;
+ }
+
+ public function setMimeType($mimeType)
+ {
+ $this->mimeType = $mimeType;
+ }
+
+ public function getMimeType()
+ {
+ return $this->mimeType;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setOriginalFilename($originalFilename)
+ {
+ $this->originalFilename = $originalFilename;
+ }
+
+ public function getOriginalFilename()
+ {
+ return $this->originalFilename;
+ }
+
+ public function setPinned($pinned)
+ {
+ $this->pinned = $pinned;
+ }
+
+ public function getPinned()
+ {
+ return $this->pinned;
+ }
+
+ public function setPublishAuto($publishAuto)
+ {
+ $this->publishAuto = $publishAuto;
+ }
+
+ public function getPublishAuto()
+ {
+ return $this->publishAuto;
+ }
+
+ public function setPublished($published)
+ {
+ $this->published = $published;
+ }
+
+ public function getPublished()
+ {
+ return $this->published;
+ }
+
+ public function setPublishedLink($publishedLink)
+ {
+ $this->publishedLink = $publishedLink;
+ }
+
+ public function getPublishedLink()
+ {
+ return $this->publishedLink;
+ }
+
+ public function setPublishedOutsideDomain($publishedOutsideDomain)
+ {
+ $this->publishedOutsideDomain = $publishedOutsideDomain;
+ }
+
+ public function getPublishedOutsideDomain()
+ {
+ return $this->publishedOutsideDomain;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_RevisionExportLinks extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_RevisionList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Revision';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_User extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $displayName;
+ public $emailAddress;
+ public $isAuthenticatedUser;
+ public $kind;
+ public $permissionId;
+ protected $pictureType = 'Google_Service_Drive_UserPicture';
+ protected $pictureDataType = '';
+
+ public function setDisplayName($displayName)
+ {
+ $this->displayName = $displayName;
+ }
+
+ public function getDisplayName()
+ {
+ return $this->displayName;
+ }
+
+ public function setEmailAddress($emailAddress)
+ {
+ $this->emailAddress = $emailAddress;
+ }
+
+ public function getEmailAddress()
+ {
+ return $this->emailAddress;
+ }
+
+ public function setIsAuthenticatedUser($isAuthenticatedUser)
+ {
+ $this->isAuthenticatedUser = $isAuthenticatedUser;
+ }
+
+ public function getIsAuthenticatedUser()
+ {
+ return $this->isAuthenticatedUser;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setPermissionId($permissionId)
+ {
+ $this->permissionId = $permissionId;
+ }
+
+ public function getPermissionId()
+ {
+ return $this->permissionId;
+ }
+
+ public function setPicture(Google_Service_Drive_UserPicture $picture)
+ {
+ $this->picture = $picture;
+ }
+
+ public function getPicture()
+ {
+ return $this->picture;
+ }
+}
+
+class Google_Service_Drive_UserPicture extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $url;
+
+ public function setUrl($url)
+ {
+ $this->url = $url;
+ }
+
+ public function getUrl()
+ {
+ return $this->url;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php
new file mode 100644
index 00000000000..a780ff7b47c
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php
@@ -0,0 +1,53 @@
+<?php
+
+require_once 'Google/Exception.php';
+
+class Google_Service_Exception extends Google_Exception
+{
+ /**
+ * Optional list of errors returned in a JSON body of an HTTP error response.
+ */
+ protected $errors = array();
+
+ /**
+ * Override default constructor to add ability to set $errors.
+ *
+ * @param string $message
+ * @param int $code
+ * @param Exception|null $previous
+ * @param [{string, string}] errors List of errors returned in an HTTP
+ * response. Defaults to [].
+ */
+ public function __construct(
+ $message,
+ $code = 0,
+ Exception $previous = null,
+ $errors = array()
+ ) {
+ if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
+ parent::__construct($message, $code, $previous);
+ } else {
+ parent::__construct($message, $code);
+ }
+
+ $this->errors = $errors;
+ }
+
+ /**
+ * An example of the possible errors returned.
+ *
+ * {
+ * "domain": "global",
+ * "reason": "authError",
+ * "message": "Invalid Credentials",
+ * "locationType": "header",
+ * "location": "Authorization",
+ * }
+ *
+ * @return [{string, string}] List of errors return in an HTTP response or [].
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php
new file mode 100644
index 00000000000..d396907e1d0
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php
@@ -0,0 +1,210 @@
+<?php
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Client.php';
+require_once 'Google/Exception.php';
+require_once 'Google/Utils.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Http/MediaFileUpload.php';
+require_once 'Google/Http/REST.php';
+
+/**
+ * Implements the actual methods/resources of the discovered Google API using magic function
+ * calling overloading (__call()), which on call will see if the method name (plus.activities.list)
+ * is available in this service, and if so construct an apiHttpRequest representing it.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Service_Resource
+{
+ // Valid query parameters that work, but don't appear in discovery.
+ private $stackParameters = array(
+ 'alt' => array('type' => 'string', 'location' => 'query'),
+ 'fields' => array('type' => 'string', 'location' => 'query'),
+ 'trace' => array('type' => 'string', 'location' => 'query'),
+ 'userIp' => array('type' => 'string', 'location' => 'query'),
+ 'userip' => array('type' => 'string', 'location' => 'query'),
+ 'quotaUser' => array('type' => 'string', 'location' => 'query'),
+ 'data' => array('type' => 'string', 'location' => 'body'),
+ 'mimeType' => array('type' => 'string', 'location' => 'header'),
+ 'uploadType' => array('type' => 'string', 'location' => 'query'),
+ 'mediaUpload' => array('type' => 'complex', 'location' => 'query'),
+ );
+
+ /** @var Google_Service $service */
+ private $service;
+
+ /** @var Google_Client $client */
+ private $client;
+
+ /** @var string $serviceName */
+ private $serviceName;
+
+ /** @var string $resourceName */
+ private $resourceName;
+
+ /** @var array $methods */
+ private $methods;
+
+ public function __construct($service, $serviceName, $resourceName, $resource)
+ {
+ $this->service = $service;
+ $this->client = $service->getClient();
+ $this->serviceName = $serviceName;
+ $this->resourceName = $resourceName;
+ $this->methods = isset($resource['methods']) ?
+ $resource['methods'] :
+ array($resourceName => $resource);
+ }
+
+ /**
+ * TODO(ianbarber): This function needs simplifying.
+ * @param $name
+ * @param $arguments
+ * @param $expected_class - optional, the expected class name
+ * @return Google_Http_Request|expected_class
+ * @throws Google_Exception
+ */
+ public function call($name, $arguments, $expected_class = null)
+ {
+ if (! isset($this->methods[$name])) {
+ throw new Google_Exception(
+ "Unknown function: " .
+ "{$this->serviceName}->{$this->resourceName}->{$name}()"
+ );
+ }
+ $method = $this->methods[$name];
+ $parameters = $arguments[0];
+
+ // postBody is a special case since it's not defined in the discovery
+ // document as parameter, but we abuse the param entry for storing it.
+ $postBody = null;
+ if (isset($parameters['postBody'])) {
+ if ($parameters['postBody'] instanceof Google_Model) {
+ // In the cases the post body is an existing object, we want
+ // to use the smart method to create a simple object for
+ // for JSONification.
+ $parameters['postBody'] = $parameters['postBody']->toSimpleObject();
+ } else if (is_object($parameters['postBody'])) {
+ // If the post body is another kind of object, we will try and
+ // wrangle it into a sensible format.
+ $parameters['postBody'] =
+ $this->convertToArrayAndStripNulls($parameters['postBody']);
+ }
+ $postBody = json_encode($parameters['postBody']);
+ unset($parameters['postBody']);
+ }
+
+ // TODO(ianbarber): optParams here probably should have been
+ // handled already - this may well be redundant code.
+ if (isset($parameters['optParams'])) {
+ $optParams = $parameters['optParams'];
+ unset($parameters['optParams']);
+ $parameters = array_merge($parameters, $optParams);
+ }
+
+ if (!isset($method['parameters'])) {
+ $method['parameters'] = array();
+ }
+
+ $method['parameters'] = array_merge(
+ $method['parameters'],
+ $this->stackParameters
+ );
+ foreach ($parameters as $key => $val) {
+ if ($key != 'postBody' && ! isset($method['parameters'][$key])) {
+ throw new Google_Exception("($name) unknown parameter: '$key'");
+ }
+ }
+
+ foreach ($method['parameters'] as $paramName => $paramSpec) {
+ if (isset($paramSpec['required']) &&
+ $paramSpec['required'] &&
+ ! isset($parameters[$paramName])
+ ) {
+ throw new Google_Exception("($name) missing required param: '$paramName'");
+ }
+ if (isset($parameters[$paramName])) {
+ $value = $parameters[$paramName];
+ $parameters[$paramName] = $paramSpec;
+ $parameters[$paramName]['value'] = $value;
+ unset($parameters[$paramName]['required']);
+ } else {
+ // Ensure we don't pass nulls.
+ unset($parameters[$paramName]);
+ }
+ }
+
+ $servicePath = $this->service->servicePath;
+
+ $url = Google_Http_REST::createRequestUri(
+ $servicePath,
+ $method['path'],
+ $parameters
+ );
+ $httpRequest = new Google_Http_Request(
+ $url,
+ $method['httpMethod'],
+ null,
+ $postBody
+ );
+ $httpRequest->setBaseComponent($this->client->getBasePath());
+
+ if ($postBody) {
+ $contentTypeHeader = array();
+ $contentTypeHeader['content-type'] = 'application/json; charset=UTF-8';
+ $httpRequest->setRequestHeaders($contentTypeHeader);
+ $httpRequest->setPostBody($postBody);
+ }
+
+ $httpRequest = $this->client->getAuth()->sign($httpRequest);
+ $httpRequest->setExpectedClass($expected_class);
+
+ if (isset($parameters['data']) &&
+ ($parameters['uploadType']['value'] == 'media' || $parameters['uploadType']['value'] == 'multipart')) {
+ // If we are doing a simple media upload, trigger that as a convenience.
+ $mfu = new Google_Http_MediaFileUpload(
+ $this->client,
+ $httpRequest,
+ isset($parameters['mimeType']) ? $parameters['mimeType']['value'] : 'application/octet-stream',
+ $parameters['data']['value']
+ );
+ }
+
+ if ($this->client->shouldDefer()) {
+ // If we are in batch or upload mode, return the raw request.
+ return $httpRequest;
+ }
+
+ return $this->client->execute($httpRequest);
+ }
+
+ protected function convertToArrayAndStripNulls($o)
+ {
+ $o = (array) $o;
+ foreach ($o as $k => $v) {
+ if ($v === null) {
+ unset($o[$k]);
+ } elseif (is_object($v) || is_array($v)) {
+ $o[$k] = $this->convertToArrayAndStripNulls($o[$k]);
+ }
+ }
+ return $o;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/Abstract.php
index 7892baac8df..250180920db 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/Abstract.php
@@ -15,14 +15,13 @@
* limitations under the License.
*/
-require_once "Google_P12Signer.php";
-
/**
* Signs data.
*
* @author Brian Eaton <beaton@google.com>
*/
-abstract class Google_Signer {
+abstract class Google_Signer_Abstract
+{
/**
* Signs data, returns the signature as binary data.
*/
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php
new file mode 100644
index 00000000000..7cc6098bb63
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php
@@ -0,0 +1,91 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Auth/Exception.php';
+require_once 'Google/Signer/Abstract.php';
+
+/**
+ * Signs data.
+ *
+ * Only used for testing.
+ *
+ * @author Brian Eaton <beaton@google.com>
+ */
+class Google_Signer_P12 extends Google_Signer_Abstract
+{
+ // OpenSSL private key resource
+ private $privateKey;
+
+ // Creates a new signer from a .p12 file.
+ public function __construct($p12, $password)
+ {
+ if (!function_exists('openssl_x509_read')) {
+ throw new Google_Exception(
+ 'The Google PHP API library needs the openssl PHP extension'
+ );
+ }
+
+ // If the private key is provided directly, then this isn't in the p12
+ // format. Different versions of openssl support different p12 formats
+ // and the key from google wasn't being accepted by the version available
+ // at the time.
+ if (!$password && strpos($p12, "-----BEGIN RSA PRIVATE KEY-----") !== false) {
+ $this->privateKey = openssl_pkey_get_private($p12);
+ } else {
+ // This throws on error
+ $certs = array();
+ if (!openssl_pkcs12_read($p12, $certs, $password)) {
+ throw new Google_Auth_Exception(
+ "Unable to parse the p12 file. " .
+ "Is this a .p12 file? Is the password correct? OpenSSL error: " .
+ openssl_error_string()
+ );
+ }
+ // TODO(beaton): is this part of the contract for the openssl_pkcs12_read
+ // method? What happens if there are multiple private keys? Do we care?
+ if (!array_key_exists("pkey", $certs) || !$certs["pkey"]) {
+ throw new Google_Auth_Exception("No private key found in p12 file.");
+ }
+ $this->privateKey = openssl_pkey_get_private($certs['pkey']);
+ }
+
+ if (!$this->privateKey) {
+ throw new Google_Auth_Exception("Unable to load private key");
+ }
+ }
+
+ public function __destruct()
+ {
+ if ($this->privateKey) {
+ openssl_pkey_free($this->privateKey);
+ }
+ }
+
+ public function sign($data)
+ {
+ if (version_compare(PHP_VERSION, '5.3.0') < 0) {
+ throw new Google_Auth_Exception(
+ "PHP 5.3.0 or higher is required to use service accounts."
+ );
+ }
+ $hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
+ if (!openssl_sign($data, $signature, $this->privateKey, $hash)) {
+ throw new Google_Auth_Exception("Unable to sign data");
+ }
+ return $signature;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils.php
index be94902c2ed..f5ef32cd4d6 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils.php
@@ -21,25 +21,33 @@
*
* @author Chirag Shah <chirags@google.com>
*/
-class Google_Utils {
- public static function urlSafeB64Encode($data) {
+class Google_Utils
+{
+ public static function urlSafeB64Encode($data)
+ {
$b64 = base64_encode($data);
- $b64 = str_replace(array('+', '/', '\r', '\n', '='),
- array('-', '_'),
- $b64);
+ $b64 = str_replace(
+ array('+', '/', '\r', '\n', '='),
+ array('-', '_'),
+ $b64
+ );
return $b64;
}
- public static function urlSafeB64Decode($b64) {
- $b64 = str_replace(array('-', '_'),
- array('+', '/'),
- $b64);
+ public static function urlSafeB64Decode($b64)
+ {
+ $b64 = str_replace(
+ array('-', '_'),
+ array('+', '/'),
+ $b64
+ );
return base64_decode($b64);
}
/**
- * Misc function used to count the number of bytes in a post body, in the world of multi-byte chars
- * and the unpredictability of strlen/mb_strlen/sizeof, this is the only way to do that in a sane
+ * Misc function used to count the number of bytes in a post body, in the
+ * world of multi-byte chars and the unpredictability of
+ * strlen/mb_strlen/sizeof, this is the only way to do that in a sane
* manner at the moment.
*
* This algorithm was originally developed for the
@@ -51,7 +59,8 @@ class Google_Utils {
* @param string $str
* @return int The number of bytes in a string.
*/
- static public function getStrLen($str) {
+ public static function getStrLen($str)
+ {
$strlenVar = strlen($str);
$d = $ret = 0;
for ($count = 0; $count < $strlenVar; ++ $count) {
@@ -61,31 +70,26 @@ class Google_Utils {
// characters U-00000000 - U-0000007F (same as ASCII)
$ret ++;
break;
-
case (($ordinalValue & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 2;
break;
-
case (($ordinalValue & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 3;
break;
-
case (($ordinalValue & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 4;
break;
-
case (($ordinalValue & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 5;
break;
-
case (($ordinalValue & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
@@ -103,7 +107,8 @@ class Google_Utils {
* @param array $arr
* @return array Normalized array.
*/
- public static function normalize($arr) {
+ public static function normalize($arr)
+ {
if (!is_array($arr)) {
return array();
}
@@ -114,4 +119,17 @@ class Google_Utils {
}
return $normalized;
}
-} \ No newline at end of file
+
+ /**
+ * Convert a string to camelCase
+ * @param string $value
+ * @return string
+ */
+ public static function camelCase($value)
+ {
+ $value = ucwords(str_replace(array('-', '_'), ' ', $value));
+ $value = str_replace(' ', '', $value);
+ $value[0] = strtolower($value[0]);
+ return $value;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php
new file mode 100644
index 00000000000..f5ee38bb333
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php
@@ -0,0 +1,333 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Implementation of levels 1-3 of the URI Template spec.
+ * @see http://tools.ietf.org/html/rfc6570
+ */
+class Google_Utils_URITemplate
+{
+ const TYPE_MAP = "1";
+ const TYPE_LIST = "2";
+ const TYPE_SCALAR = "4";
+
+ /**
+ * @var $operators array
+ * These are valid at the start of a template block to
+ * modify the way in which the variables inside are
+ * processed.
+ */
+ private $operators = array(
+ "+" => "reserved",
+ "/" => "segments",
+ "." => "dotprefix",
+ "#" => "fragment",
+ ";" => "semicolon",
+ "?" => "form",
+ "&" => "continuation"
+ );
+
+ /**
+ * @var reserved array
+ * These are the characters which should not be URL encoded in reserved
+ * strings.
+ */
+ private $reserved = array(
+ "=", ",", "!", "@", "|", ":", "/", "?", "#",
+ "[", "]",'$', "&", "'", "(", ")", "*", "+", ";"
+ );
+ private $reservedEncoded = array(
+ "%3D", "%2C", "%21", "%40", "%7C", "%3A", "%2F", "%3F",
+ "%23", "%5B", "%5D", "%24", "%26", "%27", "%28", "%29",
+ "%2A", "%2B", "%3B"
+ );
+
+ public function parse($string, array $parameters)
+ {
+ return $this->resolveNextSection($string, $parameters);
+ }
+
+ /**
+ * This function finds the first matching {...} block and
+ * executes the replacement. It then calls itself to find
+ * subsequent blocks, if any.
+ */
+ private function resolveNextSection($string, $parameters)
+ {
+ $start = strpos($string, "{");
+ if ($start === false) {
+ return $string;
+ }
+ $end = strpos($string, "}");
+ if ($end === false) {
+ return $string;
+ }
+ $string = $this->replace($string, $start, $end, $parameters);
+ return $this->resolveNextSection($string, $parameters);
+ }
+
+ private function replace($string, $start, $end, $parameters)
+ {
+ // We know a data block will have {} round it, so we can strip that.
+ $data = substr($string, $start + 1, $end - $start - 1);
+
+ // If the first character is one of the reserved operators, it effects
+ // the processing of the stream.
+ if (isset($this->operators[$data[0]])) {
+ $op = $this->operators[$data[0]];
+ $data = substr($data, 1);
+ $prefix = "";
+ $prefix_on_missing = false;
+
+ switch ($op) {
+ case "reserved":
+ // Reserved means certain characters should not be URL encoded
+ $data = $this->replaceVars($data, $parameters, ",", null, true);
+ break;
+ case "fragment":
+ // Comma separated with fragment prefix. Bare values only.
+ $prefix = "#";
+ $prefix_on_missing = true;
+ $data = $this->replaceVars($data, $parameters, ",", null, true);
+ break;
+ case "segments":
+ // Slash separated data. Bare values only.
+ $prefix = "/";
+ $data =$this->replaceVars($data, $parameters, "/");
+ break;
+ case "dotprefix":
+ // Dot separated data. Bare values only.
+ $prefix = ".";
+ $prefix_on_missing = true;
+ $data = $this->replaceVars($data, $parameters, ".");
+ break;
+ case "semicolon":
+ // Semicolon prefixed and separated. Uses the key name
+ $prefix = ";";
+ $data = $this->replaceVars($data, $parameters, ";", "=", false, true, false);
+ break;
+ case "form":
+ // Standard URL format. Uses the key name
+ $prefix = "?";
+ $data = $this->replaceVars($data, $parameters, "&", "=");
+ break;
+ case "continuation":
+ // Standard URL, but with leading ampersand. Uses key name.
+ $prefix = "&";
+ $data = $this->replaceVars($data, $parameters, "&", "=");
+ break;
+ }
+
+ // Add the initial prefix character if data is valid.
+ if ($data || ($data !== false && $prefix_on_missing)) {
+ $data = $prefix . $data;
+ }
+
+ } else {
+ // If no operator we replace with the defaults.
+ $data = $this->replaceVars($data, $parameters);
+ }
+ // This is chops out the {...} and replaces with the new section.
+ return substr($string, 0, $start) . $data . substr($string, $end + 1);
+ }
+
+ private function replaceVars(
+ $section,
+ $parameters,
+ $sep = ",",
+ $combine = null,
+ $reserved = false,
+ $tag_empty = false,
+ $combine_on_empty = true
+ ) {
+ if (strpos($section, ",") === false) {
+ // If we only have a single value, we can immediately process.
+ return $this->combine(
+ $section,
+ $parameters,
+ $sep,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ );
+ } else {
+ // If we have multiple values, we need to split and loop over them.
+ // Each is treated individually, then glued together with the
+ // separator character.
+ $vars = explode(",", $section);
+ return $this->combineList(
+ $vars,
+ $sep,
+ $parameters,
+ $combine,
+ $reserved,
+ false, // Never emit empty strings in multi-param replacements
+ $combine_on_empty
+ );
+ }
+ }
+
+ public function combine(
+ $key,
+ $parameters,
+ $sep,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ ) {
+ $length = false;
+ $explode = false;
+ $skip_final_combine = false;
+ $value = false;
+
+ // Check for length restriction.
+ if (strpos($key, ":") !== false) {
+ list($key, $length) = explode(":", $key);
+ }
+
+ // Check for explode parameter.
+ if ($key[strlen($key) - 1] == "*") {
+ $explode = true;
+ $key = substr($key, 0, -1);
+ $skip_final_combine = true;
+ }
+
+ // Define the list separator.
+ $list_sep = $explode ? $sep : ",";
+
+ if (isset($parameters[$key])) {
+ $data_type = $this->getDataType($parameters[$key]);
+ switch($data_type) {
+ case self::TYPE_SCALAR:
+ $value = $this->getValue($parameters[$key], $length);
+ break;
+ case self::TYPE_LIST:
+ $values = array();
+ foreach ($parameters[$key] as $pkey => $pvalue) {
+ $pvalue = $this->getValue($pvalue, $length);
+ if ($combine && $explode) {
+ $values[$pkey] = $key . $combine . $pvalue;
+ } else {
+ $values[$pkey] = $pvalue;
+ }
+ }
+ $value = implode($list_sep, $values);
+ if ($value == '') {
+ return '';
+ }
+ break;
+ case self::TYPE_MAP:
+ $values = array();
+ foreach ($parameters[$key] as $pkey => $pvalue) {
+ $pvalue = $this->getValue($pvalue, $length);
+ if ($explode) {
+ $pkey = $this->getValue($pkey, $length);
+ $values[] = $pkey . "=" . $pvalue; // Explode triggers = combine.
+ } else {
+ $values[] = $pkey;
+ $values[] = $pvalue;
+ }
+ }
+ $value = implode($list_sep, $values);
+ if ($value == '') {
+ return false;
+ }
+ break;
+ }
+ } else if ($tag_empty) {
+ // If we are just indicating empty values with their key name, return that.
+ return $key;
+ } else {
+ // Otherwise we can skip this variable due to not being defined.
+ return false;
+ }
+
+ if ($reserved) {
+ $value = str_replace($this->reservedEncoded, $this->reserved, $value);
+ }
+
+ // If we do not need to include the key name, we just return the raw
+ // value.
+ if (!$combine || $skip_final_combine) {
+ return $value;
+ }
+
+ // Else we combine the key name: foo=bar, if value is not the empty string.
+ return $key . ($value != '' || $combine_on_empty ? $combine . $value : '');
+ }
+
+ /**
+ * Return the type of a passed in value
+ */
+ private function getDataType($data)
+ {
+ if (is_array($data)) {
+ reset($data);
+ if (key($data) !== 0) {
+ return self::TYPE_MAP;
+ }
+ return self::TYPE_LIST;
+ }
+ return self::TYPE_SCALAR;
+ }
+
+ /**
+ * Utility function that merges multiple combine calls
+ * for multi-key templates.
+ */
+ private function combineList(
+ $vars,
+ $sep,
+ $parameters,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ ) {
+ $ret = array();
+ foreach ($vars as $var) {
+ $response = $this->combine(
+ $var,
+ $parameters,
+ $sep,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ );
+ if ($response === false) {
+ continue;
+ }
+ $ret[] = $response;
+ }
+ return implode($sep, $ret);
+ }
+
+ /**
+ * Utility function to encode and trim values
+ */
+ private function getValue($value, $length)
+ {
+ if ($length) {
+ $value = substr($value, 0, $length);
+ }
+ $value = rawurlencode($value);
+ return $value;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Abstract.php
index 2839a371df1..e6c9eeb03cc 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Abstract.php
@@ -15,14 +15,13 @@
* limitations under the License.
*/
-require_once "Google_PemVerifier.php";
-
/**
* Verifies signatures.
*
* @author Brian Eaton <beaton@google.com>
*/
-abstract class Google_Verifier {
+abstract class Google_Verifier_Abstract
+{
/**
* Checks a signature, returns true if the signature is correct,
* false otherwise.
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Pem.php
index 6c1c85fa20e..f281575e172 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Pem.php
@@ -14,13 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+require_once 'Google/Auth/Exception.php';
+require_once 'Google/Verifier/Abstract.php';
/**
* Verifies signatures using PEM encoded certificates.
*
* @author Brian Eaton <beaton@google.com>
*/
-class Google_PemVerifier extends Google_Verifier {
+class Google_Verifier_Pem extends Google_Verifier_Abstract
+{
private $publicKey;
/**
@@ -28,20 +32,22 @@ class Google_PemVerifier extends Google_Verifier {
*
* $pem: a PEM encoded certificate (not a file).
* @param $pem
- * @throws Google_AuthException
+ * @throws Google_Auth_Exception
* @throws Google_Exception
*/
- function __construct($pem) {
+ public function __construct($pem)
+ {
if (!function_exists('openssl_x509_read')) {
throw new Google_Exception('Google API PHP client needs the openssl PHP extension');
}
$this->publicKey = openssl_x509_read($pem);
if (!$this->publicKey) {
- throw new Google_AuthException("Unable to parse PEM: $pem");
+ throw new Google_Auth_Exception("Unable to parse PEM: $pem");
}
}
- function __destruct() {
+ public function __destruct()
+ {
if ($this->publicKey) {
openssl_x509_free($this->publicKey);
}
@@ -53,13 +59,15 @@ class Google_PemVerifier extends Google_Verifier {
* Returns true if the signature is valid, false otherwise.
* @param $data
* @param $signature
- * @throws Google_AuthException
+ * @throws Google_Auth_Exception
* @return bool
*/
- function verify($data, $signature) {
- $status = openssl_verify($data, $signature, $this->publicKey, "sha256");
+ public function verify($data, $signature)
+ {
+ $hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
+ $status = openssl_verify($data, $signature, $this->publicKey, $hash);
if ($status === -1) {
- throw new Google_AuthException('Signature verification error: ' . openssl_error_string());
+ throw new Google_Auth_Exception('Signature verification error: ' . openssl_error_string());
}
return $status === 1;
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php b/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
deleted file mode 100644
index 498d3a8e9dd..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
+++ /dev/null
@@ -1,462 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Check for the required json and curl extensions, the Google APIs PHP Client
-// won't function without them.
-if (! function_exists('curl_init')) {
- throw new Exception('Google PHP API Client requires the CURL PHP extension');
-}
-
-if (! function_exists('json_decode')) {
- throw new Exception('Google PHP API Client requires the JSON PHP extension');
-}
-
-if (! function_exists('http_build_query')) {
- throw new Exception('Google PHP API Client requires http_build_query()');
-}
-
-if (! ini_get('date.timezone') && function_exists('date_default_timezone_set')) {
- date_default_timezone_set('UTC');
-}
-
-// hack around with the include paths a bit so the library 'just works'
-set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
-
-require_once "config.php";
-// If a local configuration file is found, merge it's values with the default configuration
-if (file_exists(dirname(__FILE__) . '/local_config.php')) {
- $defaultConfig = $apiConfig;
- require_once (dirname(__FILE__) . '/local_config.php');
- $apiConfig = array_merge($defaultConfig, $apiConfig);
-}
-
-// Include the top level classes, they each include their own dependencies
-require_once 'service/Google_Model.php';
-require_once 'service/Google_Service.php';
-require_once 'service/Google_ServiceResource.php';
-require_once 'auth/Google_AssertionCredentials.php';
-require_once 'auth/Google_Signer.php';
-require_once 'auth/Google_P12Signer.php';
-require_once 'service/Google_BatchRequest.php';
-require_once 'external/URITemplateParser.php';
-require_once 'auth/Google_Auth.php';
-require_once 'cache/Google_Cache.php';
-require_once 'io/Google_IO.php';
-require_once('service/Google_MediaFileUpload.php');
-
-/**
- * The Google API Client
- * http://code.google.com/p/google-api-php-client/
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- */
-class Google_Client {
- /**
- * @static
- * @var Google_Auth $auth
- */
- static $auth;
-
- /**
- * @static
- * @var Google_IO $io
- */
- static $io;
-
- /**
- * @static
- * @var Google_Cache $cache
- */
- static $cache;
-
- /**
- * @static
- * @var boolean $useBatch
- */
- static $useBatch = false;
-
- /** @var array $scopes */
- protected $scopes = array();
-
- /** @var bool $useObjects */
- protected $useObjects = false;
-
- // definitions of services that are discovered.
- protected $services = array();
-
- // Used to track authenticated state, can't discover services after doing authenticate()
- private $authenticated = false;
-
- public function __construct($config = array()) {
- global $apiConfig;
- $apiConfig = array_merge($apiConfig, $config);
- self::$cache = new $apiConfig['cacheClass']();
- self::$auth = new $apiConfig['authClass']();
- self::$io = new $apiConfig['ioClass']();
- }
-
- /**
- * Add a service
- */
- public function addService($service, $version = false) {
- global $apiConfig;
- if ($this->authenticated) {
- throw new Google_Exception('Cant add services after having authenticated');
- }
- $this->services[$service] = array();
- if (isset($apiConfig['services'][$service])) {
- // Merge the service descriptor with the default values
- $this->services[$service] = array_merge($this->services[$service], $apiConfig['services'][$service]);
- }
- }
-
- public function authenticate($code = null) {
- $service = $this->prepareService();
- $this->authenticated = true;
- return self::$auth->authenticate($service, $code);
- }
-
- /**
- * @return array
- * @visible For Testing
- */
- public function prepareService() {
- $service = array();
- $scopes = array();
- if ($this->scopes) {
- $scopes = $this->scopes;
- } else {
- foreach ($this->services as $key => $val) {
- if (isset($val['scope'])) {
- if (is_array($val['scope'])) {
- $scopes = array_merge($val['scope'], $scopes);
- } else {
- $scopes[] = $val['scope'];
- }
- } else {
- $scopes[] = 'https://www.googleapis.com/auth/' . $key;
- }
- unset($val['discoveryURI']);
- unset($val['scope']);
- $service = array_merge($service, $val);
- }
- }
- $service['scope'] = implode(' ', $scopes);
- return $service;
- }
-
- /**
- * Set the OAuth 2.0 access token using the string that resulted from calling authenticate()
- * or Google_Client#getAccessToken().
- * @param string $accessToken JSON encoded string containing in the following format:
- * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
- * "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
- */
- public function setAccessToken($accessToken) {
- if ($accessToken == null || 'null' == $accessToken) {
- $accessToken = null;
- }
- self::$auth->setAccessToken($accessToken);
- }
-
- /**
- * Set the type of Auth class the client should use.
- * @param string $authClassName
- */
- public function setAuthClass($authClassName) {
- self::$auth = new $authClassName();
- }
-
- /**
- * Construct the OAuth 2.0 authorization request URI.
- * @return string
- */
- public function createAuthUrl() {
- $service = $this->prepareService();
- return self::$auth->createAuthUrl($service['scope']);
- }
-
- /**
- * Get the OAuth 2.0 access token.
- * @return string $accessToken JSON encoded string in the following format:
- * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
- * "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
- */
- public function getAccessToken() {
- $token = self::$auth->getAccessToken();
- return (null == $token || 'null' == $token) ? null : $token;
- }
-
- /**
- * Returns if the access_token is expired.
- * @return bool Returns True if the access_token is expired.
- */
- public function isAccessTokenExpired() {
- return self::$auth->isAccessTokenExpired();
- }
-
- /**
- * Set the developer key to use, these are obtained through the API Console.
- * @see http://code.google.com/apis/console-help/#generatingdevkeys
- * @param string $developerKey
- */
- public function setDeveloperKey($developerKey) {
- self::$auth->setDeveloperKey($developerKey);
- }
-
- /**
- * Set OAuth 2.0 "state" parameter to achieve per-request customization.
- * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
- * @param string $state
- */
- public function setState($state) {
- self::$auth->setState($state);
- }
-
- /**
- * @param string $accessType Possible values for access_type include:
- * {@code "offline"} to request offline access from the user. (This is the default value)
- * {@code "online"} to request online access from the user.
- */
- public function setAccessType($accessType) {
- self::$auth->setAccessType($accessType);
- }
-
- /**
- * @param string $approvalPrompt Possible values for approval_prompt include:
- * {@code "force"} to force the approval UI to appear. (This is the default value)
- * {@code "auto"} to request auto-approval when possible.
- */
- public function setApprovalPrompt($approvalPrompt) {
- self::$auth->setApprovalPrompt($approvalPrompt);
- }
-
- /**
- * Set the application name, this is included in the User-Agent HTTP header.
- * @param string $applicationName
- */
- public function setApplicationName($applicationName) {
- global $apiConfig;
- $apiConfig['application_name'] = $applicationName;
- }
-
- /**
- * Set the OAuth 2.0 Client ID.
- * @param string $clientId
- */
- public function setClientId($clientId) {
- global $apiConfig;
- $apiConfig['oauth2_client_id'] = $clientId;
- self::$auth->clientId = $clientId;
- }
-
- /**
- * Get the OAuth 2.0 Client ID.
- */
- public function getClientId() {
- return self::$auth->clientId;
- }
-
- /**
- * Set the OAuth 2.0 Client Secret.
- * @param string $clientSecret
- */
- public function setClientSecret($clientSecret) {
- global $apiConfig;
- $apiConfig['oauth2_client_secret'] = $clientSecret;
- self::$auth->clientSecret = $clientSecret;
- }
-
- /**
- * Get the OAuth 2.0 Client Secret.
- */
- public function getClientSecret() {
- return self::$auth->clientSecret;
- }
-
- /**
- * Set the OAuth 2.0 Redirect URI.
- * @param string $redirectUri
- */
- public function setRedirectUri($redirectUri) {
- global $apiConfig;
- $apiConfig['oauth2_redirect_uri'] = $redirectUri;
- self::$auth->redirectUri = $redirectUri;
- }
-
- /**
- * Get the OAuth 2.0 Redirect URI.
- */
- public function getRedirectUri() {
- return self::$auth->redirectUri;
- }
-
- /**
- * Fetches a fresh OAuth 2.0 access token with the given refresh token.
- * @param string $refreshToken
- * @return void
- */
- public function refreshToken($refreshToken) {
- self::$auth->refreshToken($refreshToken);
- }
-
- /**
- * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
- * token, if a token isn't provided.
- * @throws Google_AuthException
- * @param string|null $token The token (access token or a refresh token) that should be revoked.
- * @return boolean Returns True if the revocation was successful, otherwise False.
- */
- public function revokeToken($token = null) {
- self::$auth->revokeToken($token);
- }
-
- /**
- * Verify an id_token. This method will verify the current id_token, if one
- * isn't provided.
- * @throws Google_AuthException
- * @param string|null $token The token (id_token) that should be verified.
- * @return Google_LoginTicket Returns an apiLoginTicket if the verification was
- * successful.
- */
- public function verifyIdToken($token = null) {
- return self::$auth->verifyIdToken($token);
- }
-
- /**
- * @param Google_AssertionCredentials $creds
- * @return void
- */
- public function setAssertionCredentials(Google_AssertionCredentials $creds) {
- self::$auth->setAssertionCredentials($creds);
- }
-
- /**
- * This function allows you to overrule the automatically generated scopes,
- * so that you can ask for more or less permission in the auth flow
- * Set this before you call authenticate() though!
- * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.me', 'https://www.googleapis.com/auth/moderator')
- */
- public function setScopes($scopes) {
- $this->scopes = is_string($scopes) ? explode(" ", $scopes) : $scopes;
- }
-
- /**
- * Returns the list of scopes set on the client
- * @return array the list of scopes
- *
- */
- public function getScopes() {
- return $this->scopes;
- }
-
- /**
- * Declare if objects should be returned by the api service classes.
- *
- * @param boolean $useObjects True if objects should be returned by the service classes.
- * False if associative arrays should be returned (default behavior).
- * @experimental
- */
- public function setUseObjects($useObjects) {
- global $apiConfig;
- $apiConfig['use_objects'] = $useObjects;
- }
-
- /**
- * Declare if objects should be returned by the api service classes.
- *
- * @param boolean $useBatch True if the experimental batch support should
- * be enabled. Defaults to False.
- * @experimental
- */
- public function setUseBatch($useBatch) {
- self::$useBatch = $useBatch;
- }
-
- /**
- * @static
- * @return Google_Auth the implementation of apiAuth.
- */
- public static function getAuth() {
- return Google_Client::$auth;
- }
-
- /**
- * @static
- * @return Google_IO the implementation of apiIo.
- */
- public static function getIo() {
- return Google_Client::$io;
- }
-
- /**
- * @return Google_Cache the implementation of apiCache.
- */
- public function getCache() {
- return Google_Client::$cache;
- }
-}
-
-// Exceptions that the Google PHP API Library can throw
-class Google_Exception extends Exception {}
-class Google_AuthException extends Google_Exception {}
-class Google_CacheException extends Google_Exception {}
-class Google_IOException extends Google_Exception {}
-class Google_ServiceException extends Google_Exception {
- /**
- * Optional list of errors returned in a JSON body of an HTTP error response.
- */
- protected $errors = array();
-
- /**
- * Override default constructor to add ability to set $errors.
- *
- * @param string $message
- * @param int $code
- * @param Exception|null $previous
- * @param [{string, string}] errors List of errors returned in an HTTP
- * response. Defaults to [].
- */
- public function __construct($message, $code = 0, Exception $previous = null,
- $errors = array()) {
- if(version_compare(PHP_VERSION, '5.3.0') >= 0) {
- parent::__construct($message, $code, $previous);
- } else {
- parent::__construct($message, $code);
- }
-
- $this->errors = $errors;
- }
-
- /**
- * An example of the possible errors returned.
- *
- * {
- * "domain": "global",
- * "reason": "authError",
- * "message": "Invalid Credentials",
- * "locationType": "header",
- * "location": "Authorization",
- * }
- *
- * @return [{string, string}] List of errors return in an HTTP response or [].
- */
- public function getErrors() {
- return $this->errors;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php
deleted file mode 100644
index 6ca6bc2b0db..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Do-nothing authentication implementation, use this if you want to make un-authenticated calls
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- */
-class Google_AuthNone extends Google_Auth {
- public $key = null;
-
- public function __construct() {
- global $apiConfig;
- if (!empty($apiConfig['developer_key'])) {
- $this->setDeveloperKey($apiConfig['developer_key']);
- }
- }
-
- public function setDeveloperKey($key) {$this->key = $key;}
- public function authenticate($service) {/*noop*/}
- public function setAccessToken($accessToken) {/* noop*/}
- public function getAccessToken() {return null;}
- public function createAuthUrl($scope) {return null;}
- public function refreshToken($refreshToken) {/* noop*/}
- public function revokeToken() {/* noop*/}
-
- public function sign(Google_HttpRequest $request) {
- if ($this->key) {
- $request->setUrl($request->getUrl() . ((strpos($request->getUrl(), '?') === false) ? '?' : '&')
- . 'key='.urlencode($this->key));
- }
- return $request;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php
deleted file mode 100644
index a07d4365a7a..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php
+++ /dev/null
@@ -1,445 +0,0 @@
-<?php
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-require_once "Google_Verifier.php";
-require_once "Google_LoginTicket.php";
-require_once "service/Google_Utils.php";
-
-/**
- * Authentication class that deals with the OAuth 2 web-server authentication flow
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_OAuth2 extends Google_Auth {
- public $clientId;
- public $clientSecret;
- public $developerKey;
- public $token;
- public $redirectUri;
- public $state;
- public $accessType = 'offline';
- public $approvalPrompt = 'force';
-
- /** @var Google_AssertionCredentials $assertionCredentials */
- public $assertionCredentials;
-
- const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
- const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
- const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
- const OAUTH2_FEDERATED_SIGNON_CERTS_URL = 'https://www.googleapis.com/oauth2/v1/certs';
- const CLOCK_SKEW_SECS = 300; // five minutes in seconds
- const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
- const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
-
- /**
- * Instantiates the class, but does not initiate the login flow, leaving it
- * to the discretion of the caller (which is done by calling authenticate()).
- */
- public function __construct() {
- global $apiConfig;
-
- if (! empty($apiConfig['developer_key'])) {
- $this->developerKey = $apiConfig['developer_key'];
- }
-
- if (! empty($apiConfig['oauth2_client_id'])) {
- $this->clientId = $apiConfig['oauth2_client_id'];
- }
-
- if (! empty($apiConfig['oauth2_client_secret'])) {
- $this->clientSecret = $apiConfig['oauth2_client_secret'];
- }
-
- if (! empty($apiConfig['oauth2_redirect_uri'])) {
- $this->redirectUri = $apiConfig['oauth2_redirect_uri'];
- }
-
- if (! empty($apiConfig['oauth2_access_type'])) {
- $this->accessType = $apiConfig['oauth2_access_type'];
- }
-
- if (! empty($apiConfig['oauth2_approval_prompt'])) {
- $this->approvalPrompt = $apiConfig['oauth2_approval_prompt'];
- }
-
- }
-
- /**
- * @param $service
- * @param string|null $code
- * @throws Google_AuthException
- * @return string
- */
- public function authenticate($service, $code = null) {
- if (!$code && isset($_GET['code'])) {
- $code = $_GET['code'];
- }
-
- if ($code) {
- // We got here from the redirect from a successful authorization grant, fetch the access token
- $request = Google_Client::$io->makeRequest(new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), array(
- 'code' => $code,
- 'grant_type' => 'authorization_code',
- 'redirect_uri' => $this->redirectUri,
- 'client_id' => $this->clientId,
- 'client_secret' => $this->clientSecret
- )));
-
- if ($request->getResponseHttpCode() == 200) {
- $this->setAccessToken($request->getResponseBody());
- $this->token['created'] = time();
- return $this->getAccessToken();
- } else {
- $response = $request->getResponseBody();
- $decodedResponse = json_decode($response, true);
- if ($decodedResponse != null && $decodedResponse['error']) {
- $response = $decodedResponse['error'];
- }
- throw new Google_AuthException("Error fetching OAuth2 access token, message: '$response'", $request->getResponseHttpCode());
- }
- }
-
- $authUrl = $this->createAuthUrl($service['scope']);
- header('Location: ' . $authUrl);
- return true;
- }
-
- /**
- * Create a URL to obtain user authorization.
- * The authorization endpoint allows the user to first
- * authenticate, and then grant/deny the access request.
- * @param string $scope The scope is expressed as a list of space-delimited strings.
- * @return string
- */
- public function createAuthUrl($scope) {
- $params = array(
- 'response_type=code',
- 'redirect_uri=' . urlencode($this->redirectUri),
- 'client_id=' . urlencode($this->clientId),
- 'scope=' . urlencode($scope),
- 'access_type=' . urlencode($this->accessType),
- 'approval_prompt=' . urlencode($this->approvalPrompt),
- );
-
- if (isset($this->state)) {
- $params[] = 'state=' . urlencode($this->state);
- }
- $params = implode('&', $params);
- return self::OAUTH2_AUTH_URL . "?$params";
- }
-
- /**
- * @param string $token
- * @throws Google_AuthException
- */
- public function setAccessToken($token) {
- $token = json_decode($token, true);
- if ($token == null) {
- throw new Google_AuthException('Could not json decode the token');
- }
- if (! isset($token['access_token'])) {
- throw new Google_AuthException("Invalid token format");
- }
- $this->token = $token;
- }
-
- public function getAccessToken() {
- return json_encode($this->token);
- }
-
- public function setDeveloperKey($developerKey) {
- $this->developerKey = $developerKey;
- }
-
- public function setState($state) {
- $this->state = $state;
- }
-
- public function setAccessType($accessType) {
- $this->accessType = $accessType;
- }
-
- public function setApprovalPrompt($approvalPrompt) {
- $this->approvalPrompt = $approvalPrompt;
- }
-
- public function setAssertionCredentials(Google_AssertionCredentials $creds) {
- $this->assertionCredentials = $creds;
- }
-
- /**
- * Include an accessToken in a given apiHttpRequest.
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest
- * @throws Google_AuthException
- */
- public function sign(Google_HttpRequest $request) {
- // add the developer key to the request before signing it
- if ($this->developerKey) {
- $requestUrl = $request->getUrl();
- $requestUrl .= (strpos($request->getUrl(), '?') === false) ? '?' : '&';
- $requestUrl .= 'key=' . urlencode($this->developerKey);
- $request->setUrl($requestUrl);
- }
-
- // Cannot sign the request without an OAuth access token.
- if (null == $this->token && null == $this->assertionCredentials) {
- return $request;
- }
-
- // Check if the token is set to expire in the next 30 seconds
- // (or has already expired).
- if ($this->isAccessTokenExpired()) {
- if ($this->assertionCredentials) {
- $this->refreshTokenWithAssertion();
- } else {
- if (! array_key_exists('refresh_token', $this->token)) {
- throw new Google_AuthException("The OAuth 2.0 access token has expired, "
- . "and a refresh token is not available. Refresh tokens are not "
- . "returned for responses that were auto-approved.");
- }
- $this->refreshToken($this->token['refresh_token']);
- }
- }
-
- // Add the OAuth2 header to the request
- $request->setRequestHeaders(
- array('Authorization' => 'Bearer ' . $this->token['access_token'])
- );
-
- return $request;
- }
-
- /**
- * Fetches a fresh access token with the given refresh token.
- * @param string $refreshToken
- * @return void
- */
- public function refreshToken($refreshToken) {
- $this->refreshTokenRequest(array(
- 'client_id' => $this->clientId,
- 'client_secret' => $this->clientSecret,
- 'refresh_token' => $refreshToken,
- 'grant_type' => 'refresh_token'
- ));
- }
-
- /**
- * Fetches a fresh access token with a given assertion token.
- * @param Google_AssertionCredentials $assertionCredentials optional.
- * @return void
- */
- public function refreshTokenWithAssertion($assertionCredentials = null) {
- if (!$assertionCredentials) {
- $assertionCredentials = $this->assertionCredentials;
- }
-
- $this->refreshTokenRequest(array(
- 'grant_type' => 'assertion',
- 'assertion_type' => $assertionCredentials->assertionType,
- 'assertion' => $assertionCredentials->generateAssertion(),
- ));
- }
-
- private function refreshTokenRequest($params) {
- $http = new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), $params);
- $request = Google_Client::$io->makeRequest($http);
-
- $code = $request->getResponseHttpCode();
- $body = $request->getResponseBody();
- if (200 == $code) {
- $token = json_decode($body, true);
- if ($token == null) {
- throw new Google_AuthException("Could not json decode the access token");
- }
-
- if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
- throw new Google_AuthException("Invalid token format");
- }
-
- $this->token['access_token'] = $token['access_token'];
- $this->token['expires_in'] = $token['expires_in'];
- $this->token['created'] = time();
- } else {
- throw new Google_AuthException("Error refreshing the OAuth2 token, message: '$body'", $code);
- }
- }
-
- /**
- * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
- * token, if a token isn't provided.
- * @throws Google_AuthException
- * @param string|null $token The token (access token or a refresh token) that should be revoked.
- * @return boolean Returns True if the revocation was successful, otherwise False.
- */
- public function revokeToken($token = null) {
- if (!$token) {
- $token = $this->token['access_token'];
- }
- $request = new Google_HttpRequest(self::OAUTH2_REVOKE_URI, 'POST', array(), "token=$token");
- $response = Google_Client::$io->makeRequest($request);
- $code = $response->getResponseHttpCode();
- if ($code == 200) {
- $this->token = null;
- return true;
- }
-
- return false;
- }
-
- /**
- * Returns if the access_token is expired.
- * @return bool Returns True if the access_token is expired.
- */
- public function isAccessTokenExpired() {
- if (null == $this->token) {
- return true;
- }
-
- // If the token is set to expire in the next 30 seconds.
- $expired = ($this->token['created']
- + ($this->token['expires_in'] - 30)) < time();
-
- return $expired;
- }
-
- // Gets federated sign-on certificates to use for verifying identity tokens.
- // Returns certs as array structure, where keys are key ids, and values
- // are PEM encoded certificates.
- private function getFederatedSignOnCerts() {
- // This relies on makeRequest caching certificate responses.
- $request = Google_Client::$io->makeRequest(new Google_HttpRequest(
- self::OAUTH2_FEDERATED_SIGNON_CERTS_URL));
- if ($request->getResponseHttpCode() == 200) {
- $certs = json_decode($request->getResponseBody(), true);
- if ($certs) {
- return $certs;
- }
- }
- throw new Google_AuthException(
- "Failed to retrieve verification certificates: '" .
- $request->getResponseBody() . "'.",
- $request->getResponseHttpCode());
- }
-
- /**
- * Verifies an id token and returns the authenticated apiLoginTicket.
- * Throws an exception if the id token is not valid.
- * The audience parameter can be used to control which id tokens are
- * accepted. By default, the id token must have been issued to this OAuth2 client.
- *
- * @param $id_token
- * @param $audience
- * @return Google_LoginTicket
- */
- public function verifyIdToken($id_token = null, $audience = null) {
- if (!$id_token) {
- $id_token = $this->token['id_token'];
- }
-
- $certs = $this->getFederatedSignonCerts();
- if (!$audience) {
- $audience = $this->clientId;
- }
- return $this->verifySignedJwtWithCerts($id_token, $certs, $audience);
- }
-
- // Verifies the id token, returns the verified token contents.
- // Visible for testing.
- function verifySignedJwtWithCerts($jwt, $certs, $required_audience) {
- $segments = explode(".", $jwt);
- if (count($segments) != 3) {
- throw new Google_AuthException("Wrong number of segments in token: $jwt");
- }
- $signed = $segments[0] . "." . $segments[1];
- $signature = Google_Utils::urlSafeB64Decode($segments[2]);
-
- // Parse envelope.
- $envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
- if (!$envelope) {
- throw new Google_AuthException("Can't parse token envelope: " . $segments[0]);
- }
-
- // Parse token
- $json_body = Google_Utils::urlSafeB64Decode($segments[1]);
- $payload = json_decode($json_body, true);
- if (!$payload) {
- throw new Google_AuthException("Can't parse token payload: " . $segments[1]);
- }
-
- // Check signature
- $verified = false;
- foreach ($certs as $keyName => $pem) {
- $public_key = new Google_PemVerifier($pem);
- if ($public_key->verify($signed, $signature)) {
- $verified = true;
- break;
- }
- }
-
- if (!$verified) {
- throw new Google_AuthException("Invalid token signature: $jwt");
- }
-
- // Check issued-at timestamp
- $iat = 0;
- if (array_key_exists("iat", $payload)) {
- $iat = $payload["iat"];
- }
- if (!$iat) {
- throw new Google_AuthException("No issue time in token: $json_body");
- }
- $earliest = $iat - self::CLOCK_SKEW_SECS;
-
- // Check expiration timestamp
- $now = time();
- $exp = 0;
- if (array_key_exists("exp", $payload)) {
- $exp = $payload["exp"];
- }
- if (!$exp) {
- throw new Google_AuthException("No expiration time in token: $json_body");
- }
- if ($exp >= $now + self::MAX_TOKEN_LIFETIME_SECS) {
- throw new Google_AuthException(
- "Expiration time too far in future: $json_body");
- }
-
- $latest = $exp + self::CLOCK_SKEW_SECS;
- if ($now < $earliest) {
- throw new Google_AuthException(
- "Token used too early, $now < $earliest: $json_body");
- }
- if ($now > $latest) {
- throw new Google_AuthException(
- "Token used too late, $now > $latest: $json_body");
- }
-
- // TODO(beaton): check issuer field?
-
- // Check audience
- $aud = $payload["aud"];
- if ($aud != $required_audience) {
- throw new Google_AuthException("Wrong recipient, $aud != $required_audience: $json_body");
- }
-
- // All good.
- return new Google_LoginTicket($envelope, $payload);
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php
deleted file mode 100644
index 1bed5909913..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Signs data.
- *
- * Only used for testing.
- *
- * @author Brian Eaton <beaton@google.com>
- */
-class Google_P12Signer extends Google_Signer {
- // OpenSSL private key resource
- private $privateKey;
-
- // Creates a new signer from a .p12 file.
- function __construct($p12, $password) {
- if (!function_exists('openssl_x509_read')) {
- throw new Exception(
- 'The Google PHP API library needs the openssl PHP extension');
- }
-
- // This throws on error
- $certs = array();
- if (!openssl_pkcs12_read($p12, $certs, $password)) {
- throw new Google_AuthException("Unable to parse the p12 file. " .
- "Is this a .p12 file? Is the password correct? OpenSSL error: " .
- openssl_error_string());
- }
- // TODO(beaton): is this part of the contract for the openssl_pkcs12_read
- // method? What happens if there are multiple private keys? Do we care?
- if (!array_key_exists("pkey", $certs) || !$certs["pkey"]) {
- throw new Google_AuthException("No private key found in p12 file.");
- }
- $this->privateKey = openssl_pkey_get_private($certs["pkey"]);
- if (!$this->privateKey) {
- throw new Google_AuthException("Unable to load private key in ");
- }
- }
-
- function __destruct() {
- if ($this->privateKey) {
- openssl_pkey_free($this->privateKey);
- }
- }
-
- function sign($data) {
- if(version_compare(PHP_VERSION, '5.3.0') < 0) {
- throw new Google_AuthException(
- "PHP 5.3.0 or higher is required to use service accounts.");
- }
- if (!openssl_sign($data, $signature, $this->privateKey, "sha256")) {
- throw new Google_AuthException("Unable to sign data");
- }
- return $signature;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php
deleted file mode 100644
index 3523c98dcca..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * A persistent storage class based on the APC cache, which is not
- * really very persistent, as soon as you restart your web server
- * the storage will be wiped, however for debugging and/or speed
- * it can be useful, kinda, and cache is a lot cheaper then storage.
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-class googleApcCache extends Google_Cache {
-
- public function __construct() {
- if (! function_exists('apc_add')) {
- throw new Google_CacheException("Apc functions not available");
- }
- }
-
- private function isLocked($key) {
- if ((@apc_fetch($key . '.lock')) === false) {
- return false;
- }
- return true;
- }
-
- private function createLock($key) {
- // the interesting thing is that this could fail if the lock was created in the meantime..
- // but we'll ignore that out of convenience
- @apc_add($key . '.lock', '', 5);
- }
-
- private function removeLock($key) {
- // suppress all warnings, if some other process removed it that's ok too
- @apc_delete($key . '.lock');
- }
-
- private function waitForLock($key) {
- // 20 x 250 = 5 seconds
- $tries = 20;
- $cnt = 0;
- do {
- // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
- usleep(250);
- $cnt ++;
- } while ($cnt <= $tries && $this->isLocked($key));
- if ($this->isLocked($key)) {
- // 5 seconds passed, assume the owning process died off and remove it
- $this->removeLock($key);
- }
- }
-
- /**
- * @inheritDoc
- */
- public function get($key, $expiration = false) {
-
- if (($ret = @apc_fetch($key)) === false) {
- return false;
- }
- if (!$expiration || (time() - $ret['time'] > $expiration)) {
- $this->delete($key);
- return false;
- }
- return unserialize($ret['data']);
- }
-
- /**
- * @inheritDoc
- */
- public function set($key, $value) {
- if (@apc_store($key, array('time' => time(), 'data' => serialize($value))) == false) {
- throw new Google_CacheException("Couldn't store data");
- }
- }
-
- /**
- * @inheritDoc
- * @param String $key
- */
- public function delete($key) {
- @apc_delete($key);
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php
deleted file mode 100644
index 1e32859a48b..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This class implements a basic on disk storage. While that does
- * work quite well it's not the most elegant and scalable solution.
- * It will also get you into a heap of trouble when you try to run
- * this in a clustered environment. In those cases please use the
- * MySql back-end
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-class Google_FileCache extends Google_Cache {
- private $path;
-
- public function __construct() {
- global $apiConfig;
- $this->path = $apiConfig['ioFileCache_directory'];
- }
-
- private function isLocked($storageFile) {
- // our lock file convention is simple: /the/file/path.lock
- return file_exists($storageFile . '.lock');
- }
-
- private function createLock($storageFile) {
- $storageDir = dirname($storageFile);
- if (! is_dir($storageDir)) {
- // @codeCoverageIgnoreStart
- if (! @mkdir($storageDir, 0755, true)) {
- // make sure the failure isn't because of a concurrency issue
- if (! is_dir($storageDir)) {
- throw new Google_CacheException("Could not create storage directory: $storageDir");
- }
- }
- // @codeCoverageIgnoreEnd
- }
- @touch($storageFile . '.lock');
- }
-
- private function removeLock($storageFile) {
- // suppress all warnings, if some other process removed it that's ok too
- @unlink($storageFile . '.lock');
- }
-
- private function waitForLock($storageFile) {
- // 20 x 250 = 5 seconds
- $tries = 20;
- $cnt = 0;
- do {
- // make sure PHP picks up on file changes. This is an expensive action but really can't be avoided
- clearstatcache();
- // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
- usleep(250);
- $cnt ++;
- } while ($cnt <= $tries && $this->isLocked($storageFile));
- if ($this->isLocked($storageFile)) {
- // 5 seconds passed, assume the owning process died off and remove it
- $this->removeLock($storageFile);
- }
- }
-
- private function getCacheDir($hash) {
- // use the first 2 characters of the hash as a directory prefix
- // this should prevent slowdowns due to huge directory listings
- // and thus give some basic amount of scalability
- return $this->path . '/' . substr($hash, 0, 2);
- }
-
- private function getCacheFile($hash) {
- return $this->getCacheDir($hash) . '/' . $hash;
- }
-
- public function get($key, $expiration = false) {
- $storageFile = $this->getCacheFile(md5($key));
- // See if this storage file is locked, if so we wait up to 5 seconds for the lock owning process to
- // complete it's work. If the lock is not released within that time frame, it's cleaned up.
- // This should give us a fair amount of 'Cache Stampeding' protection
- if ($this->isLocked($storageFile)) {
- $this->waitForLock($storageFile);
- }
- if (file_exists($storageFile) && is_readable($storageFile)) {
- $now = time();
- if (! $expiration || (($mtime = @filemtime($storageFile)) !== false && ($now - $mtime) < $expiration)) {
- if (($data = @file_get_contents($storageFile)) !== false) {
- $data = unserialize($data);
- return $data;
- }
- }
- }
- return false;
- }
-
- public function set($key, $value) {
- $storageDir = $this->getCacheDir(md5($key));
- $storageFile = $this->getCacheFile(md5($key));
- if ($this->isLocked($storageFile)) {
- // some other process is writing to this file too, wait until it's done to prevent hiccups
- $this->waitForLock($storageFile);
- }
- if (! is_dir($storageDir)) {
- if (! @mkdir($storageDir, 0755, true)) {
- throw new Google_CacheException("Could not create storage directory: $storageDir");
- }
- }
- // we serialize the whole request object, since we don't only want the
- // responseContent but also the postBody used, headers, size, etc
- $data = serialize($value);
- $this->createLock($storageFile);
- if (! @file_put_contents($storageFile, $data)) {
- $this->removeLock($storageFile);
- throw new Google_CacheException("Could not store data in the file");
- }
- $this->removeLock($storageFile);
- }
-
- public function delete($key) {
- $file = $this->getCacheFile(md5($key));
- if (! @unlink($file)) {
- throw new Google_CacheException("Cache file could not be deleted");
- }
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php
deleted file mode 100644
index 22493f8b1ec..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * A persistent storage class based on the memcache, which is not
- * really very persistent, as soon as you restart your memcache daemon
- * the storage will be wiped, however for debugging and/or speed
- * it can be useful, kinda, and cache is a lot cheaper then storage.
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-class Google_MemcacheCache extends Google_Cache {
- private $connection = false;
-
- public function __construct() {
- global $apiConfig;
- if (! function_exists('memcache_connect')) {
- throw new Google_CacheException("Memcache functions not available");
- }
- $this->host = $apiConfig['ioMemCacheCache_host'];
- $this->port = $apiConfig['ioMemCacheCache_port'];
- if (empty($this->host) || empty($this->port)) {
- throw new Google_CacheException("You need to supply a valid memcache host and port");
- }
- }
-
- private function isLocked($key) {
- $this->check();
- if ((@memcache_get($this->connection, $key . '.lock')) === false) {
- return false;
- }
- return true;
- }
-
- private function createLock($key) {
- $this->check();
- // the interesting thing is that this could fail if the lock was created in the meantime..
- // but we'll ignore that out of convenience
- @memcache_add($this->connection, $key . '.lock', '', 0, 5);
- }
-
- private function removeLock($key) {
- $this->check();
- // suppress all warnings, if some other process removed it that's ok too
- @memcache_delete($this->connection, $key . '.lock');
- }
-
- private function waitForLock($key) {
- $this->check();
- // 20 x 250 = 5 seconds
- $tries = 20;
- $cnt = 0;
- do {
- // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
- usleep(250);
- $cnt ++;
- } while ($cnt <= $tries && $this->isLocked($key));
- if ($this->isLocked($key)) {
- // 5 seconds passed, assume the owning process died off and remove it
- $this->removeLock($key);
- }
- }
-
- // I prefer lazy initialization since the cache isn't used every request
- // so this potentially saves a lot of overhead
- private function connect() {
- if (! $this->connection = @memcache_pconnect($this->host, $this->port)) {
- throw new Google_CacheException("Couldn't connect to memcache server");
- }
- }
-
- private function check() {
- if (! $this->connection) {
- $this->connect();
- }
- }
-
- /**
- * @inheritDoc
- */
- public function get($key, $expiration = false) {
- $this->check();
- if (($ret = @memcache_get($this->connection, $key)) === false) {
- return false;
- }
- if (! $expiration || (time() - $ret['time'] > $expiration)) {
- $this->delete($key);
- return false;
- }
- return $ret['data'];
- }
-
- /**
- * @inheritDoc
- * @param string $key
- * @param string $value
- * @throws Google_CacheException
- */
- public function set($key, $value) {
- $this->check();
- // we store it with the cache_time default expiration so objects will at least get cleaned eventually.
- if (@memcache_set($this->connection, $key, array('time' => time(),
- 'data' => $value), false) == false) {
- throw new Google_CacheException("Couldn't store data in cache");
- }
- }
-
- /**
- * @inheritDoc
- * @param String $key
- */
- public function delete($key) {
- $this->check();
- @memcache_delete($this->connection, $key);
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/config.php b/apps/files_external/3rdparty/google-api-php-client/src/config.php
deleted file mode 100644
index e3a57138d05..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/config.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-global $apiConfig;
-$apiConfig = array(
- // True if objects should be returned by the service classes.
- // False if associative arrays should be returned (default behavior).
- 'use_objects' => false,
-
- // The application_name is included in the User-Agent HTTP header.
- 'application_name' => '',
-
- // OAuth2 Settings, you can get these keys at https://code.google.com/apis/console
- 'oauth2_client_id' => '',
- 'oauth2_client_secret' => '',
- 'oauth2_redirect_uri' => '',
-
- // The developer key, you get this at https://code.google.com/apis/console
- 'developer_key' => '',
-
- // Site name to show in the Google's OAuth 1 authentication screen.
- 'site_name' => 'www.example.org',
-
- // Which Authentication, Storage and HTTP IO classes to use.
- 'authClass' => 'Google_OAuth2',
- 'ioClass' => 'Google_CurlIO',
- 'cacheClass' => 'Google_FileCache',
-
- // Don't change these unless you're working against a special development or testing environment.
- 'basePath' => 'https://www.googleapis.com',
-
- // IO Class dependent configuration, you only have to configure the values
- // for the class that was configured as the ioClass above
- 'ioFileCache_directory' =>
- (function_exists('sys_get_temp_dir') ?
- sys_get_temp_dir() . '/Google_Client' :
- '/tmp/Google_Client'),
-
- // Definition of service specific values like scopes, oauth token URLs, etc
- 'services' => array(
- 'analytics' => array('scope' => 'https://www.googleapis.com/auth/analytics.readonly'),
- 'calendar' => array(
- 'scope' => array(
- "https://www.googleapis.com/auth/calendar",
- "https://www.googleapis.com/auth/calendar.readonly",
- )
- ),
- 'books' => array('scope' => 'https://www.googleapis.com/auth/books'),
- 'latitude' => array(
- 'scope' => array(
- 'https://www.googleapis.com/auth/latitude.all.best',
- 'https://www.googleapis.com/auth/latitude.all.city',
- )
- ),
- 'moderator' => array('scope' => 'https://www.googleapis.com/auth/moderator'),
- 'oauth2' => array(
- 'scope' => array(
- 'https://www.googleapis.com/auth/userinfo.profile',
- 'https://www.googleapis.com/auth/userinfo.email',
- )
- ),
- 'plus' => array('scope' => 'https://www.googleapis.com/auth/plus.login'),
- 'siteVerification' => array('scope' => 'https://www.googleapis.com/auth/siteverification'),
- 'tasks' => array('scope' => 'https://www.googleapis.com/auth/tasks'),
- 'urlshortener' => array('scope' => 'https://www.googleapis.com/auth/urlshortener')
- )
-);
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php b/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php
deleted file mode 100644
index 896e8b93826..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php
+++ /dev/null
@@ -1,3143 +0,0 @@
-<?php
-/*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-
- /**
- * The "about" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $about = $driveService->about;
- * </code>
- */
- class Google_AboutServiceResource extends Google_ServiceResource {
-
-
- /**
- * Gets the information about the current user along with Drive API settings (about.get)
- *
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeSubscribed When calculating the number of remaining change IDs, whether to include shared files and public files the user has opened. When set to false, this counts only change IDs for owned files and any shared or public files that the user has explictly added to a folder in Drive.
- * @opt_param string maxChangeIdCount Maximum number of remaining change IDs to count
- * @opt_param string startChangeId Change ID to start counting from when calculating number of remaining change IDs
- * @return Google_About
- */
- public function get($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_About($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "apps" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $apps = $driveService->apps;
- * </code>
- */
- class Google_AppsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Gets a specific app. (apps.get)
- *
- * @param string $appId The ID of the app.
- * @param array $optParams Optional parameters.
- * @return Google_App
- */
- public function get($appId, $optParams = array()) {
- $params = array('appId' => $appId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_App($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a user's installed apps. (apps.list)
- *
- * @param array $optParams Optional parameters.
- * @return Google_AppList
- */
- public function listApps($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_AppList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "changes" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $changes = $driveService->changes;
- * </code>
- */
- class Google_ChangesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Gets a specific change. (changes.get)
- *
- * @param string $changeId The ID of the change.
- * @param array $optParams Optional parameters.
- * @return Google_Change
- */
- public function get($changeId, $optParams = array()) {
- $params = array('changeId' => $changeId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Change($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists the changes for a user. (changes.list)
- *
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted Whether to include deleted items.
- * @opt_param bool includeSubscribed Whether to include shared files and public files the user has opened. When set to false, the list will include owned files plus any shared or public files the user has explictly added to a folder in Drive.
- * @opt_param int maxResults Maximum number of changes to return.
- * @opt_param string pageToken Page token for changes.
- * @opt_param string startChangeId Change ID to start listing changes from.
- * @return Google_ChangeList
- */
- public function listChanges($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_ChangeList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "children" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $children = $driveService->children;
- * </code>
- */
- class Google_ChildrenServiceResource extends Google_ServiceResource {
-
-
- /**
- * Removes a child from a folder. (children.delete)
- *
- * @param string $folderId The ID of the folder.
- * @param string $childId The ID of the child.
- * @param array $optParams Optional parameters.
- */
- public function delete($folderId, $childId, $optParams = array()) {
- $params = array('folderId' => $folderId, 'childId' => $childId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a specific child reference. (children.get)
- *
- * @param string $folderId The ID of the folder.
- * @param string $childId The ID of the child.
- * @param array $optParams Optional parameters.
- * @return Google_ChildReference
- */
- public function get($folderId, $childId, $optParams = array()) {
- $params = array('folderId' => $folderId, 'childId' => $childId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_ChildReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Inserts a file into a folder. (children.insert)
- *
- * @param string $folderId The ID of the folder.
- * @param Google_ChildReference $postBody
- * @param array $optParams Optional parameters.
- * @return Google_ChildReference
- */
- public function insert($folderId, Google_ChildReference $postBody, $optParams = array()) {
- $params = array('folderId' => $folderId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_ChildReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a folder's children. (children.list)
- *
- * @param string $folderId The ID of the folder.
- * @param array $optParams Optional parameters.
- *
- * @opt_param int maxResults Maximum number of children to return.
- * @opt_param string pageToken Page token for children.
- * @opt_param string q Query string for searching children.
- * @return Google_ChildList
- */
- public function listChildren($folderId, $optParams = array()) {
- $params = array('folderId' => $folderId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_ChildList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "comments" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $comments = $driveService->comments;
- * </code>
- */
- class Google_CommentsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a comment. (comments.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $commentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a comment by ID. (comments.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, this will succeed when retrieving a deleted comment, and will include any deleted replies.
- * @return Google_Comment
- */
- public function get($fileId, $commentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- /**
- * Creates a new comment on the given file. (comments.insert)
- *
- * @param string $fileId The ID of the file.
- * @param Google_Comment $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Comment
- */
- public function insert($fileId, Google_Comment $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's comments. (comments.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, all comments and replies, including deleted comments and replies (with content stripped) will be returned.
- * @opt_param int maxResults The maximum number of discussions to include in the response, used for paging.
- * @opt_param string pageToken The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
- * @opt_param string updatedMin Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.
- * @return Google_CommentList
- */
- public function listComments($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_CommentList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing comment. This method supports patch semantics. (comments.patch)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param Google_Comment $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Comment
- */
- public function patch($fileId, $commentId, Google_Comment $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing comment. (comments.update)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param Google_Comment $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Comment
- */
- public function update($fileId, $commentId, Google_Comment $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "files" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $files = $driveService->files;
- * </code>
- */
- class Google_FilesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Creates a copy of the specified file. (files.copy)
- *
- * @param string $fileId The ID of the file to copy.
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the head revision of the new copy.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @return Google_DriveFile
- */
- public function copy($fileId, Google_DriveFile $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('copy', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Permanently deletes a file by ID. Skips the trash. (files.delete)
- *
- * @param string $fileId The ID of the file to delete.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a file's metadata by ID. (files.get)
- *
- * @param string $fileId The ID for the file in question.
- * @param array $optParams Optional parameters.
- *
- * @opt_param string projection This parameter is deprecated and has no function.
- * @opt_param bool updateViewedDate Whether to update the view date after successfully retrieving the file.
- * @return Google_DriveFile
- */
- public function get($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Insert a new file. (files.insert)
- *
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the head revision of the uploaded file.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
- * @return Google_DriveFile
- */
- public function insert(Google_DriveFile $postBody, $optParams = array()) {
- $params = array('postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists the user's files. (files.list)
- *
- * @param array $optParams Optional parameters.
- *
- * @opt_param int maxResults Maximum number of files to return.
- * @opt_param string pageToken Page token for files.
- * @opt_param string projection This parameter is deprecated and has no function.
- * @opt_param string q Query string for searching files.
- * @return Google_FileList
- */
- public function listFiles($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_FileList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates file metadata and/or content. This method supports patch semantics. (files.patch)
- *
- * @param string $fileId The ID of the file to update.
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool newRevision Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the new revision.
- * @opt_param bool setModifiedDate Whether to set the modified date with the supplied modified date.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @opt_param bool updateViewedDate Whether to update the view date after successfully updating the file.
- * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
- * @return Google_DriveFile
- */
- public function patch($fileId, Google_DriveFile $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Set the file's updated time to the current server time. (files.touch)
- *
- * @param string $fileId The ID of the file to update.
- * @param array $optParams Optional parameters.
- * @return Google_DriveFile
- */
- public function touch($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('touch', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Moves a file to the trash. (files.trash)
- *
- * @param string $fileId The ID of the file to trash.
- * @param array $optParams Optional parameters.
- * @return Google_DriveFile
- */
- public function trash($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('trash', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Restores a file from the trash. (files.untrash)
- *
- * @param string $fileId The ID of the file to untrash.
- * @param array $optParams Optional parameters.
- * @return Google_DriveFile
- */
- public function untrash($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('untrash', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates file metadata and/or content. (files.update)
- *
- * @param string $fileId The ID of the file to update.
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool newRevision Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the new revision.
- * @opt_param bool setModifiedDate Whether to set the modified date with the supplied modified date.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @opt_param bool updateViewedDate Whether to update the view date after successfully updating the file.
- * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
- * @return Google_DriveFile
- */
- public function update($fileId, Google_DriveFile $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "parents" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $parents = $driveService->parents;
- * </code>
- */
- class Google_ParentsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Removes a parent from a file. (parents.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $parentId The ID of the parent.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $parentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'parentId' => $parentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a specific parent reference. (parents.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $parentId The ID of the parent.
- * @param array $optParams Optional parameters.
- * @return Google_ParentReference
- */
- public function get($fileId, $parentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'parentId' => $parentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_ParentReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Adds a parent folder for a file. (parents.insert)
- *
- * @param string $fileId The ID of the file.
- * @param Google_ParentReference $postBody
- * @param array $optParams Optional parameters.
- * @return Google_ParentReference
- */
- public function insert($fileId, Google_ParentReference $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_ParentReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's parents. (parents.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- * @return Google_ParentList
- */
- public function listParents($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_ParentList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "permissions" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $permissions = $driveService->permissions;
- * </code>
- */
- class Google_PermissionsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a permission from a file. (permissions.delete)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $permissionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a permission by ID. (permissions.get)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param array $optParams Optional parameters.
- * @return Google_Permission
- */
- public function get($fileId, $permissionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- /**
- * Inserts a permission for a file. (permissions.insert)
- *
- * @param string $fileId The ID for the file.
- * @param Google_Permission $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param string emailMessage A custom message to include in notification emails.
- * @opt_param bool sendNotificationEmails Whether to send notification emails when sharing to users or groups.
- * @return Google_Permission
- */
- public function insert($fileId, Google_Permission $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's permissions. (permissions.list)
- *
- * @param string $fileId The ID for the file.
- * @param array $optParams Optional parameters.
- * @return Google_PermissionList
- */
- public function listPermissions($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_PermissionList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a permission. This method supports patch semantics. (permissions.patch)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param Google_Permission $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool transferOwnership Whether changing a role to 'owner' should also downgrade the current owners to writers.
- * @return Google_Permission
- */
- public function patch($fileId, $permissionId, Google_Permission $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a permission. (permissions.update)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param Google_Permission $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool transferOwnership Whether changing a role to 'owner' should also downgrade the current owners to writers.
- * @return Google_Permission
- */
- public function update($fileId, $permissionId, Google_Permission $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "properties" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $properties = $driveService->properties;
- * </code>
- */
- class Google_PropertiesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a property. (properties.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- */
- public function delete($fileId, $propertyKey, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a property by its key. (properties.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- * @return Google_Property
- */
- public function get($fileId, $propertyKey, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- /**
- * Adds a property to a file. (properties.insert)
- *
- * @param string $fileId The ID of the file.
- * @param Google_Property $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Property
- */
- public function insert($fileId, Google_Property $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's properties. (properties.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- * @return Google_PropertyList
- */
- public function listProperties($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_PropertyList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a property. This method supports patch semantics. (properties.patch)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param Google_Property $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- * @return Google_Property
- */
- public function patch($fileId, $propertyKey, Google_Property $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a property. (properties.update)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param Google_Property $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- * @return Google_Property
- */
- public function update($fileId, $propertyKey, Google_Property $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "replies" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $replies = $driveService->replies;
- * </code>
- */
- class Google_RepliesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a reply. (replies.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $commentId, $replyId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a reply. (replies.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, this will succeed when retrieving a deleted reply.
- * @return Google_CommentReply
- */
- public function get($fileId, $commentId, $replyId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- /**
- * Creates a new reply to the given comment. (replies.insert)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param Google_CommentReply $postBody
- * @param array $optParams Optional parameters.
- * @return Google_CommentReply
- */
- public function insert($fileId, $commentId, Google_CommentReply $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists all of the replies to a comment. (replies.list)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, all replies, including deleted replies (with content stripped) will be returned.
- * @opt_param int maxResults The maximum number of replies to include in the response, used for paging.
- * @opt_param string pageToken The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
- * @return Google_CommentReplyList
- */
- public function listReplies($fileId, $commentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReplyList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing reply. This method supports patch semantics. (replies.patch)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param Google_CommentReply $postBody
- * @param array $optParams Optional parameters.
- * @return Google_CommentReply
- */
- public function patch($fileId, $commentId, $replyId, Google_CommentReply $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing reply. (replies.update)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param Google_CommentReply $postBody
- * @param array $optParams Optional parameters.
- * @return Google_CommentReply
- */
- public function update($fileId, $commentId, $replyId, Google_CommentReply $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "revisions" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $revisions = $driveService->revisions;
- * </code>
- */
- class Google_RevisionsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Removes a revision. (revisions.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $revisionId The ID of the revision.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $revisionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a specific revision. (revisions.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $revisionId The ID of the revision.
- * @param array $optParams Optional parameters.
- * @return Google_Revision
- */
- public function get($fileId, $revisionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Revision($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's revisions. (revisions.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- * @return Google_RevisionList
- */
- public function listRevisions($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_RevisionList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a revision. This method supports patch semantics. (revisions.patch)
- *
- * @param string $fileId The ID for the file.
- * @param string $revisionId The ID for the revision.
- * @param Google_Revision $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Revision
- */
- public function patch($fileId, $revisionId, Google_Revision $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Revision($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a revision. (revisions.update)
- *
- * @param string $fileId The ID for the file.
- * @param string $revisionId The ID for the revision.
- * @param Google_Revision $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Revision
- */
- public function update($fileId, $revisionId, Google_Revision $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Revision($data);
- } else {
- return $data;
- }
- }
- }
-
-/**
- * Service definition for Google_Drive (v2).
- *
- * <p>
- * The API to interact with Drive.
- * </p>
- *
- * <p>
- * For more information about this service, see the
- * <a href="https://developers.google.com/drive/" target="_blank">API Documentation</a>
- * </p>
- *
- * @author Google, Inc.
- */
-class Google_DriveService extends Google_Service {
- public $about;
- public $apps;
- public $changes;
- public $children;
- public $comments;
- public $files;
- public $parents;
- public $permissions;
- public $properties;
- public $replies;
- public $revisions;
- /**
- * Constructs the internal representation of the Drive service.
- *
- * @param Google_Client $client
- */
- public function __construct(Google_Client $client) {
- $this->servicePath = 'drive/v2/';
- $this->version = 'v2';
- $this->serviceName = 'drive';
-
- $client->addService($this->serviceName, $this->version);
- $this->about = new Google_AboutServiceResource($this, $this->serviceName, 'about', json_decode('{"methods": {"get": {"id": "drive.about.get", "path": "about", "httpMethod": "GET", "parameters": {"includeSubscribed": {"type": "boolean", "default": "true", "location": "query"}, "maxChangeIdCount": {"type": "string", "default": "1", "format": "int64", "location": "query"}, "startChangeId": {"type": "string", "format": "int64", "location": "query"}}, "response": {"$ref": "About"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
- $this->apps = new Google_AppsServiceResource($this, $this->serviceName, 'apps', json_decode('{"methods": {"get": {"id": "drive.apps.get", "path": "apps/{appId}", "httpMethod": "GET", "parameters": {"appId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "App"}, "scopes": ["https://www.googleapis.com/auth/drive.apps.readonly"]}, "list": {"id": "drive.apps.list", "path": "apps", "httpMethod": "GET", "response": {"$ref": "AppList"}, "scopes": ["https://www.googleapis.com/auth/drive.apps.readonly"]}}}', true));
- $this->changes = new Google_ChangesServiceResource($this, $this->serviceName, 'changes', json_decode('{"methods": {"get": {"id": "drive.changes.get", "path": "changes/{changeId}", "httpMethod": "GET", "parameters": {"changeId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Change"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.changes.list", "path": "changes", "httpMethod": "GET", "parameters": {"includeDeleted": {"type": "boolean", "default": "true", "location": "query"}, "includeSubscribed": {"type": "boolean", "default": "true", "location": "query"}, "maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "startChangeId": {"type": "string", "format": "int64", "location": "query"}}, "response": {"$ref": "ChangeList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"], "supportsSubscription": true}}}', true));
- $this->children = new Google_ChildrenServiceResource($this, $this->serviceName, 'children', json_decode('{"methods": {"delete": {"id": "drive.children.delete", "path": "files/{folderId}/children/{childId}", "httpMethod": "DELETE", "parameters": {"childId": {"type": "string", "required": true, "location": "path"}, "folderId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.children.get", "path": "files/{folderId}/children/{childId}", "httpMethod": "GET", "parameters": {"childId": {"type": "string", "required": true, "location": "path"}, "folderId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ChildReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.children.insert", "path": "files/{folderId}/children", "httpMethod": "POST", "parameters": {"folderId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "ChildReference"}, "response": {"$ref": "ChildReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.children.list", "path": "files/{folderId}/children", "httpMethod": "GET", "parameters": {"folderId": {"type": "string", "required": true, "location": "path"}, "maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "q": {"type": "string", "location": "query"}}, "response": {"$ref": "ChildList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
- $this->comments = new Google_CommentsServiceResource($this, $this->serviceName, 'comments', json_decode('{"methods": {"delete": {"id": "drive.comments.delete", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "DELETE", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "get": {"id": "drive.comments.get", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.comments.insert", "path": "files/{fileId}/comments", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.comments.list", "path": "files/{fileId}/comments", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "maxResults": {"type": "integer", "default": "20", "format": "int32", "minimum": "0", "maximum": "100", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "updatedMin": {"type": "string", "location": "query"}}, "response": {"$ref": "CommentList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.comments.patch", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "PATCH", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.comments.update", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "PUT", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->files = new Google_FilesServiceResource($this, $this->serviceName, 'files', json_decode('{"methods": {"copy": {"id": "drive.files.copy", "path": "files/{fileId}/copy", "httpMethod": "POST", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "delete": {"id": "drive.files.delete", "path": "files/{fileId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.files.get", "path": "files/{fileId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "projection": {"type": "string", "enum": ["BASIC", "FULL"], "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "false", "location": "query"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"], "supportsSubscription": true}, "insert": {"id": "drive.files.insert", "path": "files", "httpMethod": "POST", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"], "supportsMediaUpload": true, "mediaUpload": {"accept": ["*/*"], "maxSize": "10GB", "protocols": {"simple": {"multipart": true, "path": "/upload/drive/v2/files"}, "resumable": {"multipart": true, "path": "/resumable/upload/drive/v2/files"}}}, "supportsSubscription": true}, "list": {"id": "drive.files.list", "path": "files", "httpMethod": "GET", "parameters": {"maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "projection": {"type": "string", "enum": ["BASIC", "FULL"], "location": "query"}, "q": {"type": "string", "location": "query"}}, "response": {"$ref": "FileList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.files.patch", "path": "files/{fileId}", "httpMethod": "PATCH", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "newRevision": {"type": "boolean", "default": "true", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "setModifiedDate": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "true", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.scripts"]}, "touch": {"id": "drive.files.touch", "path": "files/{fileId}/touch", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "trash": {"id": "drive.files.trash", "path": "files/{fileId}/trash", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "untrash": {"id": "drive.files.untrash", "path": "files/{fileId}/untrash", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.files.update", "path": "files/{fileId}", "httpMethod": "PUT", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "newRevision": {"type": "boolean", "default": "true", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "setModifiedDate": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "true", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.scripts"], "supportsMediaUpload": true, "mediaUpload": {"accept": ["*/*"], "maxSize": "10GB", "protocols": {"simple": {"multipart": true, "path": "/upload/drive/v2/files/{fileId}"}, "resumable": {"multipart": true, "path": "/resumable/upload/drive/v2/files/{fileId}"}}}}}}', true));
- $this->parents = new Google_ParentsServiceResource($this, $this->serviceName, 'parents', json_decode('{"methods": {"delete": {"id": "drive.parents.delete", "path": "files/{fileId}/parents/{parentId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "parentId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.parents.get", "path": "files/{fileId}/parents/{parentId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "parentId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ParentReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.parents.insert", "path": "files/{fileId}/parents", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "ParentReference"}, "response": {"$ref": "ParentReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.parents.list", "path": "files/{fileId}/parents", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ParentList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
- $this->permissions = new Google_PermissionsServiceResource($this, $this->serviceName, 'permissions', json_decode('{"methods": {"delete": {"id": "drive.permissions.delete", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.permissions.get", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.permissions.insert", "path": "files/{fileId}/permissions", "httpMethod": "POST", "parameters": {"emailMessage": {"type": "string", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "sendNotificationEmails": {"type": "boolean", "default": "true", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.permissions.list", "path": "files/{fileId}/permissions", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "PermissionList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.permissions.patch", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}, "transferOwnership": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.permissions.update", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}, "transferOwnership": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->properties = new Google_PropertiesServiceResource($this, $this->serviceName, 'properties', json_decode('{"methods": {"delete": {"id": "drive.properties.delete", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.properties.get", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.properties.insert", "path": "files/{fileId}/properties", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.properties.list", "path": "files/{fileId}/properties", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "PropertyList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.properties.patch", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.properties.update", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->replies = new Google_RepliesServiceResource($this, $this->serviceName, 'replies', json_decode('{"methods": {"delete": {"id": "drive.replies.delete", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "DELETE", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.replies.get", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.replies.insert", "path": "files/{fileId}/comments/{commentId}/replies", "httpMethod": "POST", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.replies.list", "path": "files/{fileId}/comments/{commentId}/replies", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "maxResults": {"type": "integer", "default": "20", "format": "int32", "minimum": "0", "maximum": "100", "location": "query"}, "pageToken": {"type": "string", "location": "query"}}, "response": {"$ref": "CommentReplyList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.replies.patch", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "PATCH", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.replies.update", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "PUT", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->revisions = new Google_RevisionsServiceResource($this, $this->serviceName, 'revisions', json_decode('{"methods": {"delete": {"id": "drive.revisions.delete", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.revisions.get", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.revisions.list", "path": "files/{fileId}/revisions", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "RevisionList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.revisions.patch", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Revision"}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.revisions.update", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Revision"}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
-
- }
-}
-
-
-
-class Google_About extends Google_Model {
- protected $__additionalRoleInfoType = 'Google_AboutAdditionalRoleInfo';
- protected $__additionalRoleInfoDataType = 'array';
- public $additionalRoleInfo;
- public $domainSharingPolicy;
- public $etag;
- protected $__exportFormatsType = 'Google_AboutExportFormats';
- protected $__exportFormatsDataType = 'array';
- public $exportFormats;
- protected $__featuresType = 'Google_AboutFeatures';
- protected $__featuresDataType = 'array';
- public $features;
- protected $__importFormatsType = 'Google_AboutImportFormats';
- protected $__importFormatsDataType = 'array';
- public $importFormats;
- public $isCurrentAppInstalled;
- public $kind;
- public $largestChangeId;
- protected $__maxUploadSizesType = 'Google_AboutMaxUploadSizes';
- protected $__maxUploadSizesDataType = 'array';
- public $maxUploadSizes;
- public $name;
- public $permissionId;
- public $quotaBytesTotal;
- public $quotaBytesUsed;
- public $quotaBytesUsedAggregate;
- public $quotaBytesUsedInTrash;
- public $remainingChangeIds;
- public $rootFolderId;
- public $selfLink;
- protected $__userType = 'Google_User';
- protected $__userDataType = '';
- public $user;
- public function setAdditionalRoleInfo(/* array(Google_AboutAdditionalRoleInfo) */ $additionalRoleInfo) {
- $this->assertIsArray($additionalRoleInfo, 'Google_AboutAdditionalRoleInfo', __METHOD__);
- $this->additionalRoleInfo = $additionalRoleInfo;
- }
- public function getAdditionalRoleInfo() {
- return $this->additionalRoleInfo;
- }
- public function setDomainSharingPolicy($domainSharingPolicy) {
- $this->domainSharingPolicy = $domainSharingPolicy;
- }
- public function getDomainSharingPolicy() {
- return $this->domainSharingPolicy;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setExportFormats(/* array(Google_AboutExportFormats) */ $exportFormats) {
- $this->assertIsArray($exportFormats, 'Google_AboutExportFormats', __METHOD__);
- $this->exportFormats = $exportFormats;
- }
- public function getExportFormats() {
- return $this->exportFormats;
- }
- public function setFeatures(/* array(Google_AboutFeatures) */ $features) {
- $this->assertIsArray($features, 'Google_AboutFeatures', __METHOD__);
- $this->features = $features;
- }
- public function getFeatures() {
- return $this->features;
- }
- public function setImportFormats(/* array(Google_AboutImportFormats) */ $importFormats) {
- $this->assertIsArray($importFormats, 'Google_AboutImportFormats', __METHOD__);
- $this->importFormats = $importFormats;
- }
- public function getImportFormats() {
- return $this->importFormats;
- }
- public function setIsCurrentAppInstalled($isCurrentAppInstalled) {
- $this->isCurrentAppInstalled = $isCurrentAppInstalled;
- }
- public function getIsCurrentAppInstalled() {
- return $this->isCurrentAppInstalled;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLargestChangeId($largestChangeId) {
- $this->largestChangeId = $largestChangeId;
- }
- public function getLargestChangeId() {
- return $this->largestChangeId;
- }
- public function setMaxUploadSizes(/* array(Google_AboutMaxUploadSizes) */ $maxUploadSizes) {
- $this->assertIsArray($maxUploadSizes, 'Google_AboutMaxUploadSizes', __METHOD__);
- $this->maxUploadSizes = $maxUploadSizes;
- }
- public function getMaxUploadSizes() {
- return $this->maxUploadSizes;
- }
- public function setName($name) {
- $this->name = $name;
- }
- public function getName() {
- return $this->name;
- }
- public function setPermissionId($permissionId) {
- $this->permissionId = $permissionId;
- }
- public function getPermissionId() {
- return $this->permissionId;
- }
- public function setQuotaBytesTotal($quotaBytesTotal) {
- $this->quotaBytesTotal = $quotaBytesTotal;
- }
- public function getQuotaBytesTotal() {
- return $this->quotaBytesTotal;
- }
- public function setQuotaBytesUsed($quotaBytesUsed) {
- $this->quotaBytesUsed = $quotaBytesUsed;
- }
- public function getQuotaBytesUsed() {
- return $this->quotaBytesUsed;
- }
- public function setQuotaBytesUsedAggregate($quotaBytesUsedAggregate) {
- $this->quotaBytesUsedAggregate = $quotaBytesUsedAggregate;
- }
- public function getQuotaBytesUsedAggregate() {
- return $this->quotaBytesUsedAggregate;
- }
- public function setQuotaBytesUsedInTrash($quotaBytesUsedInTrash) {
- $this->quotaBytesUsedInTrash = $quotaBytesUsedInTrash;
- }
- public function getQuotaBytesUsedInTrash() {
- return $this->quotaBytesUsedInTrash;
- }
- public function setRemainingChangeIds($remainingChangeIds) {
- $this->remainingChangeIds = $remainingChangeIds;
- }
- public function getRemainingChangeIds() {
- return $this->remainingChangeIds;
- }
- public function setRootFolderId($rootFolderId) {
- $this->rootFolderId = $rootFolderId;
- }
- public function getRootFolderId() {
- return $this->rootFolderId;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setUser(Google_User $user) {
- $this->user = $user;
- }
- public function getUser() {
- return $this->user;
- }
-}
-
-class Google_AboutAdditionalRoleInfo extends Google_Model {
- protected $__roleSetsType = 'Google_AboutAdditionalRoleInfoRoleSets';
- protected $__roleSetsDataType = 'array';
- public $roleSets;
- public $type;
- public function setRoleSets(/* array(Google_AboutAdditionalRoleInfoRoleSets) */ $roleSets) {
- $this->assertIsArray($roleSets, 'Google_AboutAdditionalRoleInfoRoleSets', __METHOD__);
- $this->roleSets = $roleSets;
- }
- public function getRoleSets() {
- return $this->roleSets;
- }
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
-}
-
-class Google_AboutAdditionalRoleInfoRoleSets extends Google_Model {
- public $additionalRoles;
- public $primaryRole;
- public function setAdditionalRoles(/* array(Google_string) */ $additionalRoles) {
- $this->assertIsArray($additionalRoles, 'Google_string', __METHOD__);
- $this->additionalRoles = $additionalRoles;
- }
- public function getAdditionalRoles() {
- return $this->additionalRoles;
- }
- public function setPrimaryRole($primaryRole) {
- $this->primaryRole = $primaryRole;
- }
- public function getPrimaryRole() {
- return $this->primaryRole;
- }
-}
-
-class Google_AboutExportFormats extends Google_Model {
- public $source;
- public $targets;
- public function setSource($source) {
- $this->source = $source;
- }
- public function getSource() {
- return $this->source;
- }
- public function setTargets(/* array(Google_string) */ $targets) {
- $this->assertIsArray($targets, 'Google_string', __METHOD__);
- $this->targets = $targets;
- }
- public function getTargets() {
- return $this->targets;
- }
-}
-
-class Google_AboutFeatures extends Google_Model {
- public $featureName;
- public $featureRate;
- public function setFeatureName($featureName) {
- $this->featureName = $featureName;
- }
- public function getFeatureName() {
- return $this->featureName;
- }
- public function setFeatureRate($featureRate) {
- $this->featureRate = $featureRate;
- }
- public function getFeatureRate() {
- return $this->featureRate;
- }
-}
-
-class Google_AboutImportFormats extends Google_Model {
- public $source;
- public $targets;
- public function setSource($source) {
- $this->source = $source;
- }
- public function getSource() {
- return $this->source;
- }
- public function setTargets(/* array(Google_string) */ $targets) {
- $this->assertIsArray($targets, 'Google_string', __METHOD__);
- $this->targets = $targets;
- }
- public function getTargets() {
- return $this->targets;
- }
-}
-
-class Google_AboutMaxUploadSizes extends Google_Model {
- public $size;
- public $type;
- public function setSize($size) {
- $this->size = $size;
- }
- public function getSize() {
- return $this->size;
- }
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
-}
-
-class Google_App extends Google_Model {
- public $authorized;
- protected $__iconsType = 'Google_AppIcons';
- protected $__iconsDataType = 'array';
- public $icons;
- public $id;
- public $installed;
- public $kind;
- public $name;
- public $objectType;
- public $primaryFileExtensions;
- public $primaryMimeTypes;
- public $productUrl;
- public $secondaryFileExtensions;
- public $secondaryMimeTypes;
- public $supportsCreate;
- public $supportsImport;
- public $useByDefault;
- public function setAuthorized($authorized) {
- $this->authorized = $authorized;
- }
- public function getAuthorized() {
- return $this->authorized;
- }
- public function setIcons(/* array(Google_AppIcons) */ $icons) {
- $this->assertIsArray($icons, 'Google_AppIcons', __METHOD__);
- $this->icons = $icons;
- }
- public function getIcons() {
- return $this->icons;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setInstalled($installed) {
- $this->installed = $installed;
- }
- public function getInstalled() {
- return $this->installed;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setName($name) {
- $this->name = $name;
- }
- public function getName() {
- return $this->name;
- }
- public function setObjectType($objectType) {
- $this->objectType = $objectType;
- }
- public function getObjectType() {
- return $this->objectType;
- }
- public function setPrimaryFileExtensions(/* array(Google_string) */ $primaryFileExtensions) {
- $this->assertIsArray($primaryFileExtensions, 'Google_string', __METHOD__);
- $this->primaryFileExtensions = $primaryFileExtensions;
- }
- public function getPrimaryFileExtensions() {
- return $this->primaryFileExtensions;
- }
- public function setPrimaryMimeTypes(/* array(Google_string) */ $primaryMimeTypes) {
- $this->assertIsArray($primaryMimeTypes, 'Google_string', __METHOD__);
- $this->primaryMimeTypes = $primaryMimeTypes;
- }
- public function getPrimaryMimeTypes() {
- return $this->primaryMimeTypes;
- }
- public function setProductUrl($productUrl) {
- $this->productUrl = $productUrl;
- }
- public function getProductUrl() {
- return $this->productUrl;
- }
- public function setSecondaryFileExtensions(/* array(Google_string) */ $secondaryFileExtensions) {
- $this->assertIsArray($secondaryFileExtensions, 'Google_string', __METHOD__);
- $this->secondaryFileExtensions = $secondaryFileExtensions;
- }
- public function getSecondaryFileExtensions() {
- return $this->secondaryFileExtensions;
- }
- public function setSecondaryMimeTypes(/* array(Google_string) */ $secondaryMimeTypes) {
- $this->assertIsArray($secondaryMimeTypes, 'Google_string', __METHOD__);
- $this->secondaryMimeTypes = $secondaryMimeTypes;
- }
- public function getSecondaryMimeTypes() {
- return $this->secondaryMimeTypes;
- }
- public function setSupportsCreate($supportsCreate) {
- $this->supportsCreate = $supportsCreate;
- }
- public function getSupportsCreate() {
- return $this->supportsCreate;
- }
- public function setSupportsImport($supportsImport) {
- $this->supportsImport = $supportsImport;
- }
- public function getSupportsImport() {
- return $this->supportsImport;
- }
- public function setUseByDefault($useByDefault) {
- $this->useByDefault = $useByDefault;
- }
- public function getUseByDefault() {
- return $this->useByDefault;
- }
-}
-
-class Google_AppIcons extends Google_Model {
- public $category;
- public $iconUrl;
- public $size;
- public function setCategory($category) {
- $this->category = $category;
- }
- public function getCategory() {
- return $this->category;
- }
- public function setIconUrl($iconUrl) {
- $this->iconUrl = $iconUrl;
- }
- public function getIconUrl() {
- return $this->iconUrl;
- }
- public function setSize($size) {
- $this->size = $size;
- }
- public function getSize() {
- return $this->size;
- }
-}
-
-class Google_AppList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_App';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_App) */ $items) {
- $this->assertIsArray($items, 'Google_App', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Change extends Google_Model {
- public $deleted;
- protected $__fileType = 'Google_DriveFile';
- protected $__fileDataType = '';
- public $file;
- public $fileId;
- public $id;
- public $kind;
- public $selfLink;
- public function setDeleted($deleted) {
- $this->deleted = $deleted;
- }
- public function getDeleted() {
- return $this->deleted;
- }
- public function setFile(Google_DriveFile $file) {
- $this->file = $file;
- }
- public function getFile() {
- return $this->file;
- }
- public function setFileId($fileId) {
- $this->fileId = $fileId;
- }
- public function getFileId() {
- return $this->fileId;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ChangeList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Change';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $largestChangeId;
- public $nextLink;
- public $nextPageToken;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Change) */ $items) {
- $this->assertIsArray($items, 'Google_Change', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLargestChangeId($largestChangeId) {
- $this->largestChangeId = $largestChangeId;
- }
- public function getLargestChangeId() {
- return $this->largestChangeId;
- }
- public function setNextLink($nextLink) {
- $this->nextLink = $nextLink;
- }
- public function getNextLink() {
- return $this->nextLink;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ChildList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_ChildReference';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextLink;
- public $nextPageToken;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_ChildReference) */ $items) {
- $this->assertIsArray($items, 'Google_ChildReference', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextLink($nextLink) {
- $this->nextLink = $nextLink;
- }
- public function getNextLink() {
- return $this->nextLink;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ChildReference extends Google_Model {
- public $childLink;
- public $id;
- public $kind;
- public $selfLink;
- public function setChildLink($childLink) {
- $this->childLink = $childLink;
- }
- public function getChildLink() {
- return $this->childLink;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Comment extends Google_Model {
- public $anchor;
- protected $__authorType = 'Google_User';
- protected $__authorDataType = '';
- public $author;
- public $commentId;
- public $content;
- protected $__contextType = 'Google_CommentContext';
- protected $__contextDataType = '';
- public $context;
- public $createdDate;
- public $deleted;
- public $fileId;
- public $fileTitle;
- public $htmlContent;
- public $kind;
- public $modifiedDate;
- protected $__repliesType = 'Google_CommentReply';
- protected $__repliesDataType = 'array';
- public $replies;
- public $selfLink;
- public $status;
- public function setAnchor($anchor) {
- $this->anchor = $anchor;
- }
- public function getAnchor() {
- return $this->anchor;
- }
- public function setAuthor(Google_User $author) {
- $this->author = $author;
- }
- public function getAuthor() {
- return $this->author;
- }
- public function setCommentId($commentId) {
- $this->commentId = $commentId;
- }
- public function getCommentId() {
- return $this->commentId;
- }
- public function setContent($content) {
- $this->content = $content;
- }
- public function getContent() {
- return $this->content;
- }
- public function setContext(Google_CommentContext $context) {
- $this->context = $context;
- }
- public function getContext() {
- return $this->context;
- }
- public function setCreatedDate($createdDate) {
- $this->createdDate = $createdDate;
- }
- public function getCreatedDate() {
- return $this->createdDate;
- }
- public function setDeleted($deleted) {
- $this->deleted = $deleted;
- }
- public function getDeleted() {
- return $this->deleted;
- }
- public function setFileId($fileId) {
- $this->fileId = $fileId;
- }
- public function getFileId() {
- return $this->fileId;
- }
- public function setFileTitle($fileTitle) {
- $this->fileTitle = $fileTitle;
- }
- public function getFileTitle() {
- return $this->fileTitle;
- }
- public function setHtmlContent($htmlContent) {
- $this->htmlContent = $htmlContent;
- }
- public function getHtmlContent() {
- return $this->htmlContent;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setReplies(/* array(Google_CommentReply) */ $replies) {
- $this->assertIsArray($replies, 'Google_CommentReply', __METHOD__);
- $this->replies = $replies;
- }
- public function getReplies() {
- return $this->replies;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setStatus($status) {
- $this->status = $status;
- }
- public function getStatus() {
- return $this->status;
- }
-}
-
-class Google_CommentContext extends Google_Model {
- public $type;
- public $value;
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
- public function setValue($value) {
- $this->value = $value;
- }
- public function getValue() {
- return $this->value;
- }
-}
-
-class Google_CommentList extends Google_Model {
- protected $__itemsType = 'Google_Comment';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextPageToken;
- public function setItems(/* array(Google_Comment) */ $items) {
- $this->assertIsArray($items, 'Google_Comment', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
-}
-
-class Google_CommentReply extends Google_Model {
- protected $__authorType = 'Google_User';
- protected $__authorDataType = '';
- public $author;
- public $content;
- public $createdDate;
- public $deleted;
- public $htmlContent;
- public $kind;
- public $modifiedDate;
- public $replyId;
- public $verb;
- public function setAuthor(Google_User $author) {
- $this->author = $author;
- }
- public function getAuthor() {
- return $this->author;
- }
- public function setContent($content) {
- $this->content = $content;
- }
- public function getContent() {
- return $this->content;
- }
- public function setCreatedDate($createdDate) {
- $this->createdDate = $createdDate;
- }
- public function getCreatedDate() {
- return $this->createdDate;
- }
- public function setDeleted($deleted) {
- $this->deleted = $deleted;
- }
- public function getDeleted() {
- return $this->deleted;
- }
- public function setHtmlContent($htmlContent) {
- $this->htmlContent = $htmlContent;
- }
- public function getHtmlContent() {
- return $this->htmlContent;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setReplyId($replyId) {
- $this->replyId = $replyId;
- }
- public function getReplyId() {
- return $this->replyId;
- }
- public function setVerb($verb) {
- $this->verb = $verb;
- }
- public function getVerb() {
- return $this->verb;
- }
-}
-
-class Google_CommentReplyList extends Google_Model {
- protected $__itemsType = 'Google_CommentReply';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextPageToken;
- public function setItems(/* array(Google_CommentReply) */ $items) {
- $this->assertIsArray($items, 'Google_CommentReply', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
-}
-
-class Google_DriveFile extends Google_Model {
- public $alternateLink;
- public $appDataContents;
- public $createdDate;
- public $description;
- public $downloadUrl;
- public $editable;
- public $embedLink;
- public $etag;
- public $explicitlyTrashed;
- public $exportLinks;
- public $fileExtension;
- public $fileSize;
- public $iconLink;
- public $id;
- protected $__imageMediaMetadataType = 'Google_DriveFileImageMediaMetadata';
- protected $__imageMediaMetadataDataType = '';
- public $imageMediaMetadata;
- protected $__indexableTextType = 'Google_DriveFileIndexableText';
- protected $__indexableTextDataType = '';
- public $indexableText;
- public $kind;
- protected $__labelsType = 'Google_DriveFileLabels';
- protected $__labelsDataType = '';
- public $labels;
- protected $__lastModifyingUserType = 'Google_User';
- protected $__lastModifyingUserDataType = '';
- public $lastModifyingUser;
- public $lastModifyingUserName;
- public $lastViewedByMeDate;
- public $md5Checksum;
- public $mimeType;
- public $modifiedByMeDate;
- public $modifiedDate;
- public $originalFilename;
- public $ownerNames;
- protected $__ownersType = 'Google_User';
- protected $__ownersDataType = 'array';
- public $owners;
- protected $__parentsType = 'Google_ParentReference';
- protected $__parentsDataType = 'array';
- public $parents;
- public $quotaBytesUsed;
- public $selfLink;
- public $shared;
- public $sharedWithMeDate;
- protected $__thumbnailType = 'Google_DriveFileThumbnail';
- protected $__thumbnailDataType = '';
- public $thumbnail;
- public $thumbnailLink;
- public $title;
- protected $__userPermissionType = 'Google_Permission';
- protected $__userPermissionDataType = '';
- public $userPermission;
- public $webContentLink;
- public $webViewLink;
- public $writersCanShare;
- public function setAlternateLink($alternateLink) {
- $this->alternateLink = $alternateLink;
- }
- public function getAlternateLink() {
- return $this->alternateLink;
- }
- public function setAppDataContents($appDataContents) {
- $this->appDataContents = $appDataContents;
- }
- public function getAppDataContents() {
- return $this->appDataContents;
- }
- public function setCreatedDate($createdDate) {
- $this->createdDate = $createdDate;
- }
- public function getCreatedDate() {
- return $this->createdDate;
- }
- public function setDescription($description) {
- $this->description = $description;
- }
- public function getDescription() {
- return $this->description;
- }
- public function setDownloadUrl($downloadUrl) {
- $this->downloadUrl = $downloadUrl;
- }
- public function getDownloadUrl() {
- return $this->downloadUrl;
- }
- public function setEditable($editable) {
- $this->editable = $editable;
- }
- public function getEditable() {
- return $this->editable;
- }
- public function setEmbedLink($embedLink) {
- $this->embedLink = $embedLink;
- }
- public function getEmbedLink() {
- return $this->embedLink;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setExplicitlyTrashed($explicitlyTrashed) {
- $this->explicitlyTrashed = $explicitlyTrashed;
- }
- public function getExplicitlyTrashed() {
- return $this->explicitlyTrashed;
- }
- public function setExportLinks($exportLinks) {
- $this->exportLinks = $exportLinks;
- }
- public function getExportLinks() {
- return $this->exportLinks;
- }
- public function setFileExtension($fileExtension) {
- $this->fileExtension = $fileExtension;
- }
- public function getFileExtension() {
- return $this->fileExtension;
- }
- public function setFileSize($fileSize) {
- $this->fileSize = $fileSize;
- }
- public function getFileSize() {
- return $this->fileSize;
- }
- public function setIconLink($iconLink) {
- $this->iconLink = $iconLink;
- }
- public function getIconLink() {
- return $this->iconLink;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setImageMediaMetadata(Google_DriveFileImageMediaMetadata $imageMediaMetadata) {
- $this->imageMediaMetadata = $imageMediaMetadata;
- }
- public function getImageMediaMetadata() {
- return $this->imageMediaMetadata;
- }
- public function setIndexableText(Google_DriveFileIndexableText $indexableText) {
- $this->indexableText = $indexableText;
- }
- public function getIndexableText() {
- return $this->indexableText;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLabels(Google_DriveFileLabels $labels) {
- $this->labels = $labels;
- }
- public function getLabels() {
- return $this->labels;
- }
- public function setLastModifyingUser(Google_User $lastModifyingUser) {
- $this->lastModifyingUser = $lastModifyingUser;
- }
- public function getLastModifyingUser() {
- return $this->lastModifyingUser;
- }
- public function setLastModifyingUserName($lastModifyingUserName) {
- $this->lastModifyingUserName = $lastModifyingUserName;
- }
- public function getLastModifyingUserName() {
- return $this->lastModifyingUserName;
- }
- public function setLastViewedByMeDate($lastViewedByMeDate) {
- $this->lastViewedByMeDate = $lastViewedByMeDate;
- }
- public function getLastViewedByMeDate() {
- return $this->lastViewedByMeDate;
- }
- public function setMd5Checksum($md5Checksum) {
- $this->md5Checksum = $md5Checksum;
- }
- public function getMd5Checksum() {
- return $this->md5Checksum;
- }
- public function setMimeType($mimeType) {
- $this->mimeType = $mimeType;
- }
- public function getMimeType() {
- return $this->mimeType;
- }
- public function setModifiedByMeDate($modifiedByMeDate) {
- $this->modifiedByMeDate = $modifiedByMeDate;
- }
- public function getModifiedByMeDate() {
- return $this->modifiedByMeDate;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setOriginalFilename($originalFilename) {
- $this->originalFilename = $originalFilename;
- }
- public function getOriginalFilename() {
- return $this->originalFilename;
- }
- public function setOwnerNames(/* array(Google_string) */ $ownerNames) {
- $this->assertIsArray($ownerNames, 'Google_string', __METHOD__);
- $this->ownerNames = $ownerNames;
- }
- public function getOwnerNames() {
- return $this->ownerNames;
- }
- public function setOwners(/* array(Google_User) */ $owners) {
- $this->assertIsArray($owners, 'Google_User', __METHOD__);
- $this->owners = $owners;
- }
- public function getOwners() {
- return $this->owners;
- }
- public function setParents(/* array(Google_ParentReference) */ $parents) {
- $this->assertIsArray($parents, 'Google_ParentReference', __METHOD__);
- $this->parents = $parents;
- }
- public function getParents() {
- return $this->parents;
- }
- public function setQuotaBytesUsed($quotaBytesUsed) {
- $this->quotaBytesUsed = $quotaBytesUsed;
- }
- public function getQuotaBytesUsed() {
- return $this->quotaBytesUsed;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setShared($shared) {
- $this->shared = $shared;
- }
- public function getShared() {
- return $this->shared;
- }
- public function setSharedWithMeDate($sharedWithMeDate) {
- $this->sharedWithMeDate = $sharedWithMeDate;
- }
- public function getSharedWithMeDate() {
- return $this->sharedWithMeDate;
- }
- public function setThumbnail(Google_DriveFileThumbnail $thumbnail) {
- $this->thumbnail = $thumbnail;
- }
- public function getThumbnail() {
- return $this->thumbnail;
- }
- public function setThumbnailLink($thumbnailLink) {
- $this->thumbnailLink = $thumbnailLink;
- }
- public function getThumbnailLink() {
- return $this->thumbnailLink;
- }
- public function setTitle($title) {
- $this->title = $title;
- }
- public function getTitle() {
- return $this->title;
- }
- public function setUserPermission(Google_Permission $userPermission) {
- $this->userPermission = $userPermission;
- }
- public function getUserPermission() {
- return $this->userPermission;
- }
- public function setWebContentLink($webContentLink) {
- $this->webContentLink = $webContentLink;
- }
- public function getWebContentLink() {
- return $this->webContentLink;
- }
- public function setWebViewLink($webViewLink) {
- $this->webViewLink = $webViewLink;
- }
- public function getWebViewLink() {
- return $this->webViewLink;
- }
- public function setWritersCanShare($writersCanShare) {
- $this->writersCanShare = $writersCanShare;
- }
- public function getWritersCanShare() {
- return $this->writersCanShare;
- }
-}
-
-class Google_DriveFileImageMediaMetadata extends Google_Model {
- public $aperture;
- public $cameraMake;
- public $cameraModel;
- public $colorSpace;
- public $date;
- public $exposureBias;
- public $exposureMode;
- public $exposureTime;
- public $flashUsed;
- public $focalLength;
- public $height;
- public $isoSpeed;
- public $lens;
- protected $__locationType = 'Google_DriveFileImageMediaMetadataLocation';
- protected $__locationDataType = '';
- public $location;
- public $maxApertureValue;
- public $meteringMode;
- public $rotation;
- public $sensor;
- public $subjectDistance;
- public $whiteBalance;
- public $width;
- public function setAperture($aperture) {
- $this->aperture = $aperture;
- }
- public function getAperture() {
- return $this->aperture;
- }
- public function setCameraMake($cameraMake) {
- $this->cameraMake = $cameraMake;
- }
- public function getCameraMake() {
- return $this->cameraMake;
- }
- public function setCameraModel($cameraModel) {
- $this->cameraModel = $cameraModel;
- }
- public function getCameraModel() {
- return $this->cameraModel;
- }
- public function setColorSpace($colorSpace) {
- $this->colorSpace = $colorSpace;
- }
- public function getColorSpace() {
- return $this->colorSpace;
- }
- public function setDate($date) {
- $this->date = $date;
- }
- public function getDate() {
- return $this->date;
- }
- public function setExposureBias($exposureBias) {
- $this->exposureBias = $exposureBias;
- }
- public function getExposureBias() {
- return $this->exposureBias;
- }
- public function setExposureMode($exposureMode) {
- $this->exposureMode = $exposureMode;
- }
- public function getExposureMode() {
- return $this->exposureMode;
- }
- public function setExposureTime($exposureTime) {
- $this->exposureTime = $exposureTime;
- }
- public function getExposureTime() {
- return $this->exposureTime;
- }
- public function setFlashUsed($flashUsed) {
- $this->flashUsed = $flashUsed;
- }
- public function getFlashUsed() {
- return $this->flashUsed;
- }
- public function setFocalLength($focalLength) {
- $this->focalLength = $focalLength;
- }
- public function getFocalLength() {
- return $this->focalLength;
- }
- public function setHeight($height) {
- $this->height = $height;
- }
- public function getHeight() {
- return $this->height;
- }
- public function setIsoSpeed($isoSpeed) {
- $this->isoSpeed = $isoSpeed;
- }
- public function getIsoSpeed() {
- return $this->isoSpeed;
- }
- public function setLens($lens) {
- $this->lens = $lens;
- }
- public function getLens() {
- return $this->lens;
- }
- public function setLocation(Google_DriveFileImageMediaMetadataLocation $location) {
- $this->location = $location;
- }
- public function getLocation() {
- return $this->location;
- }
- public function setMaxApertureValue($maxApertureValue) {
- $this->maxApertureValue = $maxApertureValue;
- }
- public function getMaxApertureValue() {
- return $this->maxApertureValue;
- }
- public function setMeteringMode($meteringMode) {
- $this->meteringMode = $meteringMode;
- }
- public function getMeteringMode() {
- return $this->meteringMode;
- }
- public function setRotation($rotation) {
- $this->rotation = $rotation;
- }
- public function getRotation() {
- return $this->rotation;
- }
- public function setSensor($sensor) {
- $this->sensor = $sensor;
- }
- public function getSensor() {
- return $this->sensor;
- }
- public function setSubjectDistance($subjectDistance) {
- $this->subjectDistance = $subjectDistance;
- }
- public function getSubjectDistance() {
- return $this->subjectDistance;
- }
- public function setWhiteBalance($whiteBalance) {
- $this->whiteBalance = $whiteBalance;
- }
- public function getWhiteBalance() {
- return $this->whiteBalance;
- }
- public function setWidth($width) {
- $this->width = $width;
- }
- public function getWidth() {
- return $this->width;
- }
-}
-
-class Google_DriveFileImageMediaMetadataLocation extends Google_Model {
- public $altitude;
- public $latitude;
- public $longitude;
- public function setAltitude($altitude) {
- $this->altitude = $altitude;
- }
- public function getAltitude() {
- return $this->altitude;
- }
- public function setLatitude($latitude) {
- $this->latitude = $latitude;
- }
- public function getLatitude() {
- return $this->latitude;
- }
- public function setLongitude($longitude) {
- $this->longitude = $longitude;
- }
- public function getLongitude() {
- return $this->longitude;
- }
-}
-
-class Google_DriveFileIndexableText extends Google_Model {
- public $text;
- public function setText($text) {
- $this->text = $text;
- }
- public function getText() {
- return $this->text;
- }
-}
-
-class Google_DriveFileLabels extends Google_Model {
- public $hidden;
- public $restricted;
- public $starred;
- public $trashed;
- public $viewed;
- public function setHidden($hidden) {
- $this->hidden = $hidden;
- }
- public function getHidden() {
- return $this->hidden;
- }
- public function setRestricted($restricted) {
- $this->restricted = $restricted;
- }
- public function getRestricted() {
- return $this->restricted;
- }
- public function setStarred($starred) {
- $this->starred = $starred;
- }
- public function getStarred() {
- return $this->starred;
- }
- public function setTrashed($trashed) {
- $this->trashed = $trashed;
- }
- public function getTrashed() {
- return $this->trashed;
- }
- public function setViewed($viewed) {
- $this->viewed = $viewed;
- }
- public function getViewed() {
- return $this->viewed;
- }
-}
-
-class Google_DriveFileThumbnail extends Google_Model {
- public $image;
- public $mimeType;
- public function setImage($image) {
- $this->image = $image;
- }
- public function getImage() {
- return $this->image;
- }
- public function setMimeType($mimeType) {
- $this->mimeType = $mimeType;
- }
- public function getMimeType() {
- return $this->mimeType;
- }
-}
-
-class Google_FileList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_DriveFile';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextLink;
- public $nextPageToken;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_DriveFile) */ $items) {
- $this->assertIsArray($items, 'Google_DriveFile', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextLink($nextLink) {
- $this->nextLink = $nextLink;
- }
- public function getNextLink() {
- return $this->nextLink;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ParentList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_ParentReference';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_ParentReference) */ $items) {
- $this->assertIsArray($items, 'Google_ParentReference', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ParentReference extends Google_Model {
- public $id;
- public $isRoot;
- public $kind;
- public $parentLink;
- public $selfLink;
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setIsRoot($isRoot) {
- $this->isRoot = $isRoot;
- }
- public function getIsRoot() {
- return $this->isRoot;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setParentLink($parentLink) {
- $this->parentLink = $parentLink;
- }
- public function getParentLink() {
- return $this->parentLink;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Permission extends Google_Model {
- public $additionalRoles;
- public $authKey;
- public $etag;
- public $id;
- public $kind;
- public $name;
- public $photoLink;
- public $role;
- public $selfLink;
- public $type;
- public $value;
- public $withLink;
- public function setAdditionalRoles(/* array(Google_string) */ $additionalRoles) {
- $this->assertIsArray($additionalRoles, 'Google_string', __METHOD__);
- $this->additionalRoles = $additionalRoles;
- }
- public function getAdditionalRoles() {
- return $this->additionalRoles;
- }
- public function setAuthKey($authKey) {
- $this->authKey = $authKey;
- }
- public function getAuthKey() {
- return $this->authKey;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setName($name) {
- $this->name = $name;
- }
- public function getName() {
- return $this->name;
- }
- public function setPhotoLink($photoLink) {
- $this->photoLink = $photoLink;
- }
- public function getPhotoLink() {
- return $this->photoLink;
- }
- public function setRole($role) {
- $this->role = $role;
- }
- public function getRole() {
- return $this->role;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
- public function setValue($value) {
- $this->value = $value;
- }
- public function getValue() {
- return $this->value;
- }
- public function setWithLink($withLink) {
- $this->withLink = $withLink;
- }
- public function getWithLink() {
- return $this->withLink;
- }
-}
-
-class Google_PermissionList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Permission';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Permission) */ $items) {
- $this->assertIsArray($items, 'Google_Permission', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Property extends Google_Model {
- public $etag;
- public $key;
- public $kind;
- public $selfLink;
- public $value;
- public $visibility;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setKey($key) {
- $this->key = $key;
- }
- public function getKey() {
- return $this->key;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setValue($value) {
- $this->value = $value;
- }
- public function getValue() {
- return $this->value;
- }
- public function setVisibility($visibility) {
- $this->visibility = $visibility;
- }
- public function getVisibility() {
- return $this->visibility;
- }
-}
-
-class Google_PropertyList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Property';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Property) */ $items) {
- $this->assertIsArray($items, 'Google_Property', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Revision extends Google_Model {
- public $downloadUrl;
- public $etag;
- public $exportLinks;
- public $fileSize;
- public $id;
- public $kind;
- protected $__lastModifyingUserType = 'Google_User';
- protected $__lastModifyingUserDataType = '';
- public $lastModifyingUser;
- public $lastModifyingUserName;
- public $md5Checksum;
- public $mimeType;
- public $modifiedDate;
- public $originalFilename;
- public $pinned;
- public $publishAuto;
- public $published;
- public $publishedLink;
- public $publishedOutsideDomain;
- public $selfLink;
- public function setDownloadUrl($downloadUrl) {
- $this->downloadUrl = $downloadUrl;
- }
- public function getDownloadUrl() {
- return $this->downloadUrl;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setExportLinks($exportLinks) {
- $this->exportLinks = $exportLinks;
- }
- public function getExportLinks() {
- return $this->exportLinks;
- }
- public function setFileSize($fileSize) {
- $this->fileSize = $fileSize;
- }
- public function getFileSize() {
- return $this->fileSize;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLastModifyingUser(Google_User $lastModifyingUser) {
- $this->lastModifyingUser = $lastModifyingUser;
- }
- public function getLastModifyingUser() {
- return $this->lastModifyingUser;
- }
- public function setLastModifyingUserName($lastModifyingUserName) {
- $this->lastModifyingUserName = $lastModifyingUserName;
- }
- public function getLastModifyingUserName() {
- return $this->lastModifyingUserName;
- }
- public function setMd5Checksum($md5Checksum) {
- $this->md5Checksum = $md5Checksum;
- }
- public function getMd5Checksum() {
- return $this->md5Checksum;
- }
- public function setMimeType($mimeType) {
- $this->mimeType = $mimeType;
- }
- public function getMimeType() {
- return $this->mimeType;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setOriginalFilename($originalFilename) {
- $this->originalFilename = $originalFilename;
- }
- public function getOriginalFilename() {
- return $this->originalFilename;
- }
- public function setPinned($pinned) {
- $this->pinned = $pinned;
- }
- public function getPinned() {
- return $this->pinned;
- }
- public function setPublishAuto($publishAuto) {
- $this->publishAuto = $publishAuto;
- }
- public function getPublishAuto() {
- return $this->publishAuto;
- }
- public function setPublished($published) {
- $this->published = $published;
- }
- public function getPublished() {
- return $this->published;
- }
- public function setPublishedLink($publishedLink) {
- $this->publishedLink = $publishedLink;
- }
- public function getPublishedLink() {
- return $this->publishedLink;
- }
- public function setPublishedOutsideDomain($publishedOutsideDomain) {
- $this->publishedOutsideDomain = $publishedOutsideDomain;
- }
- public function getPublishedOutsideDomain() {
- return $this->publishedOutsideDomain;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_RevisionList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Revision';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Revision) */ $items) {
- $this->assertIsArray($items, 'Google_Revision', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_User extends Google_Model {
- public $displayName;
- public $isAuthenticatedUser;
- public $kind;
- public $permissionId;
- protected $__pictureType = 'Google_UserPicture';
- protected $__pictureDataType = '';
- public $picture;
- public function setDisplayName($displayName) {
- $this->displayName = $displayName;
- }
- public function getDisplayName() {
- return $this->displayName;
- }
- public function setIsAuthenticatedUser($isAuthenticatedUser) {
- $this->isAuthenticatedUser = $isAuthenticatedUser;
- }
- public function getIsAuthenticatedUser() {
- return $this->isAuthenticatedUser;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setPermissionId($permissionId) {
- $this->permissionId = $permissionId;
- }
- public function getPermissionId() {
- return $this->permissionId;
- }
- public function setPicture(Google_UserPicture $picture) {
- $this->picture = $picture;
- }
- public function getPicture() {
- return $this->picture;
- }
-}
-
-class Google_UserPicture extends Google_Model {
- public $url;
- public function setUrl($url) {
- $this->url = $url;
- }
- public function getUrl() {
- return $this->url;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php b/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php
deleted file mode 100644
index 594adbb15e2..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php
-/*
-Copyright (c) 2010 Kevin M Burns Jr, http://kevburnsjr.com/
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-/**
- * A URI Template Parser which is used by the apiREST class to resolve the REST requests
- * Blogpost: http://lab.kevburnsjr.com/php-uri-template-parser
- * Source: http://github.com/KevBurnsJr/php-uri-template-parser
- */
-class URI_Template_Parser {
-
- public static $operators = array('+', ';', '?', '/', '.');
- public static $reserved_operators = array('|', '!', '@');
- public static $explode_modifiers = array('+', '*');
- public static $partial_modifiers = array(':', '^');
-
- public static $gen_delims = array(':', '/', '?', '#', '[', ']', '@');
- public static $gen_delims_pct = array('%3A', '%2F', '%3F', '%23', '%5B', '%5D', '%40');
- public static $sub_delims = array('!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=');
- public static $sub_delims_pct = array('%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', '%3B', '%3D');
- public static $reserved;
- public static $reserved_pct;
-
- public function __construct($template) {
- self::$reserved = array_merge(self::$gen_delims, self::$sub_delims);
- self::$reserved_pct = array_merge(self::$gen_delims_pct, self::$sub_delims_pct);
- $this->template = $template;
- }
-
- public function expand($data) {
- // Modification to make this a bit more performant (since gettype is very slow)
- if (! is_array($data)) {
- $data = (array)$data;
- }
- /*
- // Original code, which uses a slow gettype() statement, kept in place for if the assumption that is_array always works here is incorrect
- switch (gettype($data)) {
- case "boolean":
- case "integer":
- case "double":
- case "string":
- case "object":
- $data = (array)$data;
- break;
- }
-*/
-
- // Resolve template vars
- preg_match_all('/\{([^\}]*)\}/', $this->template, $em);
-
- foreach ($em[1] as $i => $bare_expression) {
- preg_match('/^([\+\;\?\/\.]{1})?(.*)$/', $bare_expression, $lm);
- $exp = new StdClass();
- $exp->expression = $em[0][$i];
- $exp->operator = $lm[1];
- $exp->variable_list = $lm[2];
- $exp->varspecs = explode(',', $exp->variable_list);
- $exp->vars = array();
- foreach ($exp->varspecs as $varspec) {
- preg_match('/^([a-zA-Z0-9_]+)([\*\+]{1})?([\:\^][0-9-]+)?(\=[^,]+)?$/', $varspec, $vm);
- $var = new StdClass();
- $var->name = $vm[1];
- $var->modifier = isset($vm[2]) && $vm[2] ? $vm[2] : null;
- $var->modifier = isset($vm[3]) && $vm[3] ? $vm[3] : $var->modifier;
- $var->default = isset($vm[4]) ? substr($vm[4], 1) : null;
- $exp->vars[] = $var;
- }
-
- // Add processing flags
- $exp->reserved = false;
- $exp->prefix = '';
- $exp->delimiter = ',';
- switch ($exp->operator) {
- case '+':
- $exp->reserved = 'true';
- break;
- case ';':
- $exp->prefix = ';';
- $exp->delimiter = ';';
- break;
- case '?':
- $exp->prefix = '?';
- $exp->delimiter = '&';
- break;
- case '/':
- $exp->prefix = '/';
- $exp->delimiter = '/';
- break;
- case '.':
- $exp->prefix = '.';
- $exp->delimiter = '.';
- break;
- }
- $expressions[] = $exp;
- }
-
- // Expansion
- $this->expansion = $this->template;
-
- foreach ($expressions as $exp) {
- $part = $exp->prefix;
- $exp->one_var_defined = false;
- foreach ($exp->vars as $var) {
- $val = '';
- if ($exp->one_var_defined && isset($data[$var->name])) {
- $part .= $exp->delimiter;
- }
- // Variable present
- if (isset($data[$var->name])) {
- $exp->one_var_defined = true;
- $var->data = $data[$var->name];
-
- $val = self::val_from_var($var, $exp);
-
- // Variable missing
- } else {
- if ($var->default) {
- $exp->one_var_defined = true;
- $val = $var->default;
- }
- }
- $part .= $val;
- }
- if (! $exp->one_var_defined) $part = '';
- $this->expansion = str_replace($exp->expression, $part, $this->expansion);
- }
-
- return $this->expansion;
- }
-
- private function val_from_var($var, $exp) {
- $val = '';
- if (is_array($var->data)) {
- $i = 0;
- if ($exp->operator == '?' && ! $var->modifier) {
- $val .= $var->name . '=';
- }
- foreach ($var->data as $k => $v) {
- $del = $var->modifier ? $exp->delimiter : ',';
- $ek = rawurlencode($k);
- $ev = rawurlencode($v);
-
- // Array
- if ($k !== $i) {
- if ($var->modifier == '+') {
- $val .= $var->name . '.';
- }
- if ($exp->operator == '?' && $var->modifier || $exp->operator == ';' && $var->modifier == '*' || $exp->operator == ';' && $var->modifier == '+') {
- $val .= $ek . '=';
- } else {
- $val .= $ek . $del;
- }
-
- // List
- } else {
- if ($var->modifier == '+') {
- if ($exp->operator == ';' && $var->modifier == '*' || $exp->operator == ';' && $var->modifier == '+' || $exp->operator == '?' && $var->modifier == '+') {
- $val .= $var->name . '=';
- } else {
- $val .= $var->name . '.';
- }
- }
- }
- $val .= $ev . $del;
- $i ++;
- }
- $val = trim($val, $del);
-
- // Strings, numbers, etc.
- } else {
- if ($exp->operator == '?') {
- $val = $var->name . (isset($var->data) ? '=' : '');
- } else if ($exp->operator == ';') {
- $val = $var->name . ($var->data ? '=' : '');
- }
- $val .= rawurlencode($var->data);
- if ($exp->operator == '+') {
- $val = str_replace(self::$reserved_pct, self::$reserved, $val);
- }
- }
- return $val;
- }
-
- public function match($uri) {}
-
- public function __toString() {
- return $this->template;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php
deleted file mode 100644
index 65352f29882..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php
+++ /dev/null
@@ -1,278 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Curl based implementation of apiIO.
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- */
-
-require_once 'Google_CacheParser.php';
-
-class Google_CurlIO implements Google_IO {
- const CONNECTION_ESTABLISHED = "HTTP/1.0 200 Connection established\r\n\r\n";
- const FORM_URLENCODED = 'application/x-www-form-urlencoded';
-
- private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
- private static $HOP_BY_HOP = array(
- 'connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization',
- 'te', 'trailers', 'transfer-encoding', 'upgrade');
-
- private $curlParams = array (
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_FOLLOWLOCATION => 0,
- CURLOPT_FAILONERROR => false,
- CURLOPT_SSL_VERIFYPEER => true,
- CURLOPT_HEADER => true,
- CURLOPT_VERBOSE => false,
- );
-
- /**
- * Perform an authenticated / signed apiHttpRequest.
- * This function takes the apiHttpRequest, calls apiAuth->sign on it
- * (which can modify the request in what ever way fits the auth mechanism)
- * and then calls apiCurlIO::makeRequest on the signed request
- *
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest The resulting HTTP response including the
- * responseHttpCode, responseHeaders and responseBody.
- */
- public function authenticatedRequest(Google_HttpRequest $request) {
- $request = Google_Client::$auth->sign($request);
- return $this->makeRequest($request);
- }
-
- /**
- * Execute a apiHttpRequest
- *
- * @param Google_HttpRequest $request the http request to be executed
- * @return Google_HttpRequest http request with the response http code, response
- * headers and response body filled in
- * @throws Google_IOException on curl or IO error
- */
- public function makeRequest(Google_HttpRequest $request) {
- // First, check to see if we have a valid cached version.
- $cached = $this->getCachedRequest($request);
- if ($cached !== false) {
- if (Google_CacheParser::mustRevalidate($cached)) {
- $addHeaders = array();
- if ($cached->getResponseHeader('etag')) {
- // [13.3.4] If an entity tag has been provided by the origin server,
- // we must use that entity tag in any cache-conditional request.
- $addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
- } elseif ($cached->getResponseHeader('date')) {
- $addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
- }
-
- $request->setRequestHeaders($addHeaders);
- } else {
- // No need to revalidate the request, return it directly
- return $cached;
- }
- }
-
- if (array_key_exists($request->getRequestMethod(),
- self::$ENTITY_HTTP_METHODS)) {
- $request = $this->processEntityRequest($request);
- }
-
- $ch = curl_init();
- curl_setopt_array($ch, $this->curlParams);
- curl_setopt($ch, CURLOPT_URL, $request->getUrl());
- if ($request->getPostBody()) {
- curl_setopt($ch, CURLOPT_POSTFIELDS, $request->getPostBody());
- }
-
- $requestHeaders = $request->getRequestHeaders();
- if ($requestHeaders && is_array($requestHeaders)) {
- $parsed = array();
- foreach ($requestHeaders as $k => $v) {
- $parsed[] = "$k: $v";
- }
- curl_setopt($ch, CURLOPT_HTTPHEADER, $parsed);
- }
-
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
- curl_setopt($ch, CURLOPT_USERAGENT, $request->getUserAgent());
- $respData = curl_exec($ch);
-
- // Retry if certificates are missing.
- if (curl_errno($ch) == CURLE_SSL_CACERT) {
- error_log('SSL certificate problem, verify that the CA cert is OK.'
- . ' Retrying with the CA cert bundle from google-api-php-client.');
- curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
- $respData = curl_exec($ch);
- }
-
- $respHeaderSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
- $respHttpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
- $curlErrorNum = curl_errno($ch);
- $curlError = curl_error($ch);
- curl_close($ch);
- if ($curlErrorNum != CURLE_OK) {
- throw new Google_IOException("HTTP Error: ($respHttpCode) $curlError");
- }
-
- // Parse out the raw response into usable bits
- list($responseHeaders, $responseBody) =
- self::parseHttpResponse($respData, $respHeaderSize);
-
- if ($respHttpCode == 304 && $cached) {
- // If the server responded NOT_MODIFIED, return the cached request.
- if (isset($responseHeaders['connection'])) {
- $hopByHop = array_merge(
- self::$HOP_BY_HOP,
- explode(',', $responseHeaders['connection'])
- );
-
- $endToEnd = array();
- foreach($hopByHop as $key) {
- if (isset($responseHeaders[$key])) {
- $endToEnd[$key] = $responseHeaders[$key];
- }
- }
- $cached->setResponseHeaders($endToEnd);
- }
- return $cached;
- }
-
- // Fill in the apiHttpRequest with the response values
- $request->setResponseHttpCode($respHttpCode);
- $request->setResponseHeaders($responseHeaders);
- $request->setResponseBody($responseBody);
- // Store the request in cache (the function checks to see if the request
- // can actually be cached)
- $this->setCachedRequest($request);
- // And finally return it
- return $request;
- }
-
- /**
- * @visible for testing.
- * Cache the response to an HTTP request if it is cacheable.
- * @param Google_HttpRequest $request
- * @return bool Returns true if the insertion was successful.
- * Otherwise, return false.
- */
- public function setCachedRequest(Google_HttpRequest $request) {
- // Determine if the request is cacheable.
- if (Google_CacheParser::isResponseCacheable($request)) {
- Google_Client::$cache->set($request->getCacheKey(), $request);
- return true;
- }
-
- return false;
- }
-
- /**
- * @visible for testing.
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest|bool Returns the cached object or
- * false if the operation was unsuccessful.
- */
- public function getCachedRequest(Google_HttpRequest $request) {
- if (false == Google_CacheParser::isRequestCacheable($request)) {
- false;
- }
-
- return Google_Client::$cache->get($request->getCacheKey());
- }
-
- /**
- * @param $respData
- * @param $headerSize
- * @return array
- */
- public static function parseHttpResponse($respData, $headerSize) {
- if (stripos($respData, self::CONNECTION_ESTABLISHED) !== false) {
- $respData = str_ireplace(self::CONNECTION_ESTABLISHED, '', $respData);
- }
-
- if ($headerSize) {
- $responseBody = substr($respData, $headerSize);
- $responseHeaders = substr($respData, 0, $headerSize);
- } else {
- list($responseHeaders, $responseBody) = explode("\r\n\r\n", $respData, 2);
- }
-
- $responseHeaders = self::parseResponseHeaders($responseHeaders);
- return array($responseHeaders, $responseBody);
- }
-
- public static function parseResponseHeaders($rawHeaders) {
- $responseHeaders = array();
-
- $responseHeaderLines = explode("\r\n", $rawHeaders);
- foreach ($responseHeaderLines as $headerLine) {
- if ($headerLine && strpos($headerLine, ':') !== false) {
- list($header, $value) = explode(': ', $headerLine, 2);
- $header = strtolower($header);
- if (isset($responseHeaders[$header])) {
- $responseHeaders[$header] .= "\n" . $value;
- } else {
- $responseHeaders[$header] = $value;
- }
- }
- }
- return $responseHeaders;
- }
-
- /**
- * @visible for testing
- * Process an http request that contains an enclosed entity.
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest Processed request with the enclosed entity.
- */
- public function processEntityRequest(Google_HttpRequest $request) {
- $postBody = $request->getPostBody();
- $contentType = $request->getRequestHeader("content-type");
-
- // Set the default content-type as application/x-www-form-urlencoded.
- if (false == $contentType) {
- $contentType = self::FORM_URLENCODED;
- $request->setRequestHeaders(array('content-type' => $contentType));
- }
-
- // Force the payload to match the content-type asserted in the header.
- if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
- $postBody = http_build_query($postBody, '', '&');
- $request->setPostBody($postBody);
- }
-
- // Make sure the content-length header is set.
- if (!$postBody || is_string($postBody)) {
- $postsLength = strlen($postBody);
- $request->setRequestHeaders(array('content-length' => $postsLength));
- }
-
- return $request;
- }
-
- /**
- * Set options that update cURL's default behavior.
- * The list of accepted options are:
- * {@link http://php.net/manual/en/function.curl-setopt.php]
- *
- * @param array $optCurlParams Multiple options used by a cURL session.
- */
- public function setOptions($optCurlParams) {
- foreach ($optCurlParams as $key => $val) {
- $this->curlParams[$key] = $val;
- }
- }
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php
deleted file mode 100644
index b98eae54008..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php
+++ /dev/null
@@ -1,304 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * HTTP Request to be executed by apiIO classes. Upon execution, the
- * responseHttpCode, responseHeaders and responseBody will be filled in.
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_HttpRequest {
- const USER_AGENT_SUFFIX = "google-api-php-client/0.6.0";
- private $batchHeaders = array(
- 'Content-Type' => 'application/http',
- 'Content-Transfer-Encoding' => 'binary',
- 'MIME-Version' => '1.0',
- 'Content-Length' => ''
- );
-
- protected $url;
- protected $requestMethod;
- protected $requestHeaders;
- protected $postBody;
- protected $userAgent;
-
- protected $responseHttpCode;
- protected $responseHeaders;
- protected $responseBody;
-
- public $accessKey;
-
- public function __construct($url, $method = 'GET', $headers = array(), $postBody = null) {
- $this->setUrl($url);
- $this->setRequestMethod($method);
- $this->setRequestHeaders($headers);
- $this->setPostBody($postBody);
-
- global $apiConfig;
- if (empty($apiConfig['application_name'])) {
- $this->userAgent = self::USER_AGENT_SUFFIX;
- } else {
- $this->userAgent = $apiConfig['application_name'] . " " . self::USER_AGENT_SUFFIX;
- }
- }
-
- /**
- * Misc function that returns the base url component of the $url
- * used by the OAuth signing class to calculate the base string
- * @return string The base url component of the $url.
- * @see http://oauth.net/core/1.0a/#anchor13
- */
- public function getBaseUrl() {
- if ($pos = strpos($this->url, '?')) {
- return substr($this->url, 0, $pos);
- }
- return $this->url;
- }
-
- /**
- * Misc function that returns an array of the query parameters of the current
- * url used by the OAuth signing class to calculate the signature
- * @return array Query parameters in the query string.
- */
- public function getQueryParams() {
- if ($pos = strpos($this->url, '?')) {
- $queryStr = substr($this->url, $pos + 1);
- $params = array();
- parse_str($queryStr, $params);
- return $params;
- }
- return array();
- }
-
- /**
- * @return string HTTP Response Code.
- */
- public function getResponseHttpCode() {
- return (int) $this->responseHttpCode;
- }
-
- /**
- * @param int $responseHttpCode HTTP Response Code.
- */
- public function setResponseHttpCode($responseHttpCode) {
- $this->responseHttpCode = $responseHttpCode;
- }
-
- /**
- * @return $responseHeaders (array) HTTP Response Headers.
- */
- public function getResponseHeaders() {
- return $this->responseHeaders;
- }
-
- /**
- * @return string HTTP Response Body
- */
- public function getResponseBody() {
- return $this->responseBody;
- }
-
- /**
- * @param array $headers The HTTP response headers
- * to be normalized.
- */
- public function setResponseHeaders($headers) {
- $headers = Google_Utils::normalize($headers);
- if ($this->responseHeaders) {
- $headers = array_merge($this->responseHeaders, $headers);
- }
-
- $this->responseHeaders = $headers;
- }
-
- /**
- * @param string $key
- * @return array|boolean Returns the requested HTTP header or
- * false if unavailable.
- */
- public function getResponseHeader($key) {
- return isset($this->responseHeaders[$key])
- ? $this->responseHeaders[$key]
- : false;
- }
-
- /**
- * @param string $responseBody The HTTP response body.
- */
- public function setResponseBody($responseBody) {
- $this->responseBody = $responseBody;
- }
-
- /**
- * @return string $url The request URL.
- */
-
- public function getUrl() {
- return $this->url;
- }
-
- /**
- * @return string $method HTTP Request Method.
- */
- public function getRequestMethod() {
- return $this->requestMethod;
- }
-
- /**
- * @return array $headers HTTP Request Headers.
- */
- public function getRequestHeaders() {
- return $this->requestHeaders;
- }
-
- /**
- * @param string $key
- * @return array|boolean Returns the requested HTTP header or
- * false if unavailable.
- */
- public function getRequestHeader($key) {
- return isset($this->requestHeaders[$key])
- ? $this->requestHeaders[$key]
- : false;
- }
-
- /**
- * @return string $postBody HTTP Request Body.
- */
- public function getPostBody() {
- return $this->postBody;
- }
-
- /**
- * @param string $url the url to set
- */
- public function setUrl($url) {
- if (substr($url, 0, 4) == 'http') {
- $this->url = $url;
- } else {
- // Force the path become relative.
- if (substr($url, 0, 1) !== '/') {
- $url = '/' . $url;
- }
- global $apiConfig;
- $this->url = $apiConfig['basePath'] . $url;
- }
- }
-
- /**
- * @param string $method Set he HTTP Method and normalize
- * it to upper-case, as required by HTTP.
- *
- */
- public function setRequestMethod($method) {
- $this->requestMethod = strtoupper($method);
- }
-
- /**
- * @param array $headers The HTTP request headers
- * to be set and normalized.
- */
- public function setRequestHeaders($headers) {
- $headers = Google_Utils::normalize($headers);
- if ($this->requestHeaders) {
- $headers = array_merge($this->requestHeaders, $headers);
- }
- $this->requestHeaders = $headers;
- }
-
- /**
- * @param string $postBody the postBody to set
- */
- public function setPostBody($postBody) {
- $this->postBody = $postBody;
- }
-
- /**
- * Set the User-Agent Header.
- * @param string $userAgent The User-Agent.
- */
- public function setUserAgent($userAgent) {
- $this->userAgent = $userAgent;
- }
-
- /**
- * @return string The User-Agent.
- */
- public function getUserAgent() {
- return $this->userAgent;
- }
-
- /**
- * Returns a cache key depending on if this was an OAuth signed request
- * in which case it will use the non-signed url and access key to make this
- * cache key unique per authenticated user, else use the plain request url
- * @return string The md5 hash of the request cache key.
- */
- public function getCacheKey() {
- $key = $this->getUrl();
-
- if (isset($this->accessKey)) {
- $key .= $this->accessKey;
- }
-
- if (isset($this->requestHeaders['authorization'])) {
- $key .= $this->requestHeaders['authorization'];
- }
-
- return md5($key);
- }
-
- public function getParsedCacheControl() {
- $parsed = array();
- $rawCacheControl = $this->getResponseHeader('cache-control');
- if ($rawCacheControl) {
- $rawCacheControl = str_replace(', ', '&', $rawCacheControl);
- parse_str($rawCacheControl, $parsed);
- }
-
- return $parsed;
- }
-
- /**
- * @param string $id
- * @return string A string representation of the HTTP Request.
- */
- public function toBatchString($id) {
- $str = '';
- foreach($this->batchHeaders as $key => $val) {
- $str .= $key . ': ' . $val . "\n";
- }
-
- $str .= "Content-ID: $id\n";
- $str .= "\n";
-
- $path = parse_url($this->getUrl(), PHP_URL_PATH);
- $str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
- foreach($this->getRequestHeaders() as $key => $val) {
- $str .= $key . ': ' . $val . "\n";
- }
-
- if ($this->getPostBody()) {
- $str .= "\n";
- $str .= $this->getPostBody();
- }
-
- return $str;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php
deleted file mode 100644
index 5445e699038..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-require_once 'io/Google_HttpRequest.php';
-require_once 'io/Google_CurlIO.php';
-require_once 'io/Google_REST.php';
-
-/**
- * Abstract IO class
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-interface Google_IO {
- /**
- * An utility function that first calls $this->auth->sign($request) and then executes makeRequest()
- * on that signed request. Used for when a request should be authenticated
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest $request
- */
- public function authenticatedRequest(Google_HttpRequest $request);
-
- /**
- * Executes a apIHttpRequest and returns the resulting populated httpRequest
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest $request
- */
- public function makeRequest(Google_HttpRequest $request);
-
- /**
- * Set options that update the transport implementation's behavior.
- * @param $options
- */
- public function setOptions($options);
-
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php
deleted file mode 100644
index c64e18851df..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php
+++ /dev/null
@@ -1,262 +0,0 @@
-<?php
-/**
- * Copyright 2012 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_MediaFileUpload {
- const UPLOAD_MEDIA_TYPE = 'media';
- const UPLOAD_MULTIPART_TYPE = 'multipart';
- const UPLOAD_RESUMABLE_TYPE = 'resumable';
-
- /** @var string $mimeType */
- public $mimeType;
-
- /** @var string $data */
- public $data;
-
- /** @var bool $resumable */
- public $resumable;
-
- /** @var int $chunkSize */
- public $chunkSize;
-
- /** @var int $size */
- public $size;
-
- /** @var string $resumeUri */
- public $resumeUri;
-
- /** @var int $progress */
- public $progress;
-
- /**
- * @param $mimeType string
- * @param $data string The bytes you want to upload.
- * @param $resumable bool
- * @param bool $chunkSize File will be uploaded in chunks of this many bytes.
- * only used if resumable=True
- */
- public function __construct($mimeType, $data, $resumable=false, $chunkSize=false) {
- $this->mimeType = $mimeType;
- $this->data = $data;
- $this->size = strlen($this->data);
- $this->resumable = $resumable;
- if(!$chunkSize) {
- $chunkSize = 256 * 1024;
- }
- $this->chunkSize = $chunkSize;
- $this->progress = 0;
- }
-
- public function setFileSize($size) {
- $this->size = $size;
- }
-
- /**
- * @static
- * @param $meta
- * @param $params
- * @return array|bool
- */
- public static function process($meta, &$params) {
- $payload = array();
- $meta = is_string($meta) ? json_decode($meta, true) : $meta;
- $uploadType = self::getUploadType($meta, $payload, $params);
- if (!$uploadType) {
- // Process as a normal API request.
- return false;
- }
-
- // Process as a media upload request.
- $params['uploadType'] = array(
- 'type' => 'string',
- 'location' => 'query',
- 'value' => $uploadType,
- );
-
- $mimeType = isset($params['mimeType'])
- ? $params['mimeType']['value']
- : false;
- unset($params['mimeType']);
-
- if (!$mimeType) {
- $mimeType = $payload['content-type'];
- }
-
- if (isset($params['file'])) {
- // This is a standard file upload with curl.
- $file = $params['file']['value'];
- unset($params['file']);
- return self::processFileUpload($file, $mimeType);
- }
-
- $data = isset($params['data'])
- ? $params['data']['value']
- : false;
- unset($params['data']);
-
- if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
- $payload['content-type'] = $mimeType;
- $payload['postBody'] = is_string($meta) ? $meta : json_encode($meta);
-
- } elseif (self::UPLOAD_MEDIA_TYPE == $uploadType) {
- // This is a simple media upload.
- $payload['content-type'] = $mimeType;
- $payload['postBody'] = $data;
- }
-
- elseif (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
- // This is a multipart/related upload.
- $boundary = isset($params['boundary']['value']) ? $params['boundary']['value'] : mt_rand();
- $boundary = str_replace('"', '', $boundary);
- $payload['content-type'] = 'multipart/related; boundary=' . $boundary;
- $related = "--$boundary\r\n";
- $related .= "Content-Type: application/json; charset=UTF-8\r\n";
- $related .= "\r\n" . json_encode($meta) . "\r\n";
- $related .= "--$boundary\r\n";
- $related .= "Content-Type: $mimeType\r\n";
- $related .= "Content-Transfer-Encoding: base64\r\n";
- $related .= "\r\n" . base64_encode($data) . "\r\n";
- $related .= "--$boundary--";
- $payload['postBody'] = $related;
- }
-
- return $payload;
- }
-
- /**
- * Prepares a standard file upload via cURL.
- * @param $file
- * @param $mime
- * @return array Includes the processed file name.
- * @visible For testing.
- */
- public static function processFileUpload($file, $mime) {
- if (!$file) return array();
- if (substr($file, 0, 1) != '@') {
- $file = '@' . $file;
- }
-
- // This is a standard file upload with curl.
- $params = array('postBody' => array('file' => $file));
- if ($mime) {
- $params['content-type'] = $mime;
- }
-
- return $params;
- }
-
- /**
- * Valid upload types:
- * - resumable (UPLOAD_RESUMABLE_TYPE)
- * - media (UPLOAD_MEDIA_TYPE)
- * - multipart (UPLOAD_MULTIPART_TYPE)
- * - none (false)
- * @param $meta
- * @param $payload
- * @param $params
- * @return bool|string
- */
- public static function getUploadType($meta, &$payload, &$params) {
- if (isset($params['mediaUpload'])
- && get_class($params['mediaUpload']['value']) == 'Google_MediaFileUpload') {
- $upload = $params['mediaUpload']['value'];
- unset($params['mediaUpload']);
- $payload['content-type'] = $upload->mimeType;
- if (isset($upload->resumable) && $upload->resumable) {
- return self::UPLOAD_RESUMABLE_TYPE;
- }
- }
-
- // Allow the developer to override the upload type.
- if (isset($params['uploadType'])) {
- return $params['uploadType']['value'];
- }
-
- $data = isset($params['data']['value'])
- ? $params['data']['value'] : false;
-
- if (false == $data && false == isset($params['file'])) {
- // No upload data available.
- return false;
- }
-
- if (isset($params['file'])) {
- return self::UPLOAD_MEDIA_TYPE;
- }
-
- if (false == $meta) {
- return self::UPLOAD_MEDIA_TYPE;
- }
-
- return self::UPLOAD_MULTIPART_TYPE;
- }
-
-
- public function nextChunk(Google_HttpRequest $req, $chunk=false) {
- if (false == $this->resumeUri) {
- $this->resumeUri = $this->getResumeUri($req);
- }
-
- if (false == $chunk) {
- $chunk = substr($this->data, $this->progress, $this->chunkSize);
- }
-
- $lastBytePos = $this->progress + strlen($chunk) - 1;
- $headers = array(
- 'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
- 'content-type' => $req->getRequestHeader('content-type'),
- 'content-length' => $this->chunkSize,
- 'expect' => '',
- );
-
- $httpRequest = new Google_HttpRequest($this->resumeUri, 'PUT', $headers, $chunk);
- $response = Google_Client::$io->authenticatedRequest($httpRequest);
- $code = $response->getResponseHttpCode();
- if (308 == $code) {
- $range = explode('-', $response->getResponseHeader('range'));
- $this->progress = $range[1] + 1;
- return false;
- } else {
- return Google_REST::decodeHttpResponse($response);
- }
- }
-
- private function getResumeUri(Google_HttpRequest $httpRequest) {
- $result = null;
- $body = $httpRequest->getPostBody();
- if ($body) {
- $httpRequest->setRequestHeaders(array(
- 'content-type' => 'application/json; charset=UTF-8',
- 'content-length' => Google_Utils::getStrLen($body),
- 'x-upload-content-type' => $this->mimeType,
- 'x-upload-content-length' => $this->size,
- 'expect' => '',
- ));
- }
-
- $response = Google_Client::$io->makeRequest($httpRequest);
- $location = $response->getResponseHeader('location');
- $code = $response->getResponseHttpCode();
- if (200 == $code && true == $location) {
- return $location;
- }
- throw new Google_Exception("Failed to start the resumable upload");
- }
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php
deleted file mode 100644
index cb44cb25748..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * This class defines attributes, valid values, and usage which is generated from
- * a given json schema. http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
- *
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_Model {
- public function __construct( /* polymorphic */ ) {
- if (func_num_args() == 1 && is_array(func_get_arg(0))) {
- // Initialize the model with the array's contents.
- $array = func_get_arg(0);
- $this->mapTypes($array);
- }
- }
-
- /**
- * Initialize this object's properties from an array.
- *
- * @param array $array Used to seed this object's properties.
- * @return void
- */
- protected function mapTypes($array) {
- foreach ($array as $key => $val) {
- $this->$key = $val;
-
- $keyTypeName = "__$key" . 'Type';
- $keyDataType = "__$key" . 'DataType';
- if ($this->useObjects() && property_exists($this, $keyTypeName)) {
- if ($this->isAssociativeArray($val)) {
- if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
- foreach($val as $arrayKey => $arrayItem) {
- $val[$arrayKey] = $this->createObjectFromName($keyTypeName, $arrayItem);
- }
- $this->$key = $val;
- } else {
- $this->$key = $this->createObjectFromName($keyTypeName, $val);
- }
- } else if (is_array($val)) {
- $arrayObject = array();
- foreach ($val as $arrayIndex => $arrayItem) {
- $arrayObject[$arrayIndex] = $this->createObjectFromName($keyTypeName, $arrayItem);
- }
- $this->$key = $arrayObject;
- }
- }
- }
- }
-
- /**
- * Returns true only if the array is associative.
- * @param array $array
- * @return bool True if the array is associative.
- */
- protected function isAssociativeArray($array) {
- if (!is_array($array)) {
- return false;
- }
- $keys = array_keys($array);
- foreach($keys as $key) {
- if (is_string($key)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Given a variable name, discover its type.
- *
- * @param $name
- * @param $item
- * @return object The object from the item.
- */
- private function createObjectFromName($name, $item) {
- $type = $this->$name;
- return new $type($item);
- }
-
- protected function useObjects() {
- global $apiConfig;
- return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
- }
-
- /**
- * Verify if $obj is an array.
- * @throws Google_Exception Thrown if $obj isn't an array.
- * @param array $obj Items that should be validated.
- * @param string $type Array items should be of this type.
- * @param string $method Method expecting an array as an argument.
- */
- public function assertIsArray($obj, $type, $method) {
- if ($obj && !is_array($obj)) {
- throw new Google_Exception("Incorrect parameter type passed to $method(), expected an"
- . " array containing items of type $type.");
- }
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php
deleted file mode 100644
index bb3af4db809..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-/**
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Implements the actual methods/resources of the discovered Google API using magic function
- * calling overloading (__call()), which on call will see if the method name (plus.activities.list)
- * is available in this service, and if so construct an apiHttpRequest representing it.
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_ServiceResource {
- // Valid query parameters that work, but don't appear in discovery.
- private $stackParameters = array(
- 'alt' => array('type' => 'string', 'location' => 'query'),
- 'boundary' => array('type' => 'string', 'location' => 'query'),
- 'fields' => array('type' => 'string', 'location' => 'query'),
- 'trace' => array('type' => 'string', 'location' => 'query'),
- 'userIp' => array('type' => 'string', 'location' => 'query'),
- 'userip' => array('type' => 'string', 'location' => 'query'),
- 'quotaUser' => array('type' => 'string', 'location' => 'query'),
- 'file' => array('type' => 'complex', 'location' => 'body'),
- 'data' => array('type' => 'string', 'location' => 'body'),
- 'mimeType' => array('type' => 'string', 'location' => 'header'),
- 'uploadType' => array('type' => 'string', 'location' => 'query'),
- 'mediaUpload' => array('type' => 'complex', 'location' => 'query'),
- );
-
- /** @var Google_Service $service */
- private $service;
-
- /** @var string $serviceName */
- private $serviceName;
-
- /** @var string $resourceName */
- private $resourceName;
-
- /** @var array $methods */
- private $methods;
-
- public function __construct($service, $serviceName, $resourceName, $resource) {
- $this->service = $service;
- $this->serviceName = $serviceName;
- $this->resourceName = $resourceName;
- $this->methods = isset($resource['methods']) ? $resource['methods'] : array($resourceName => $resource);
- }
-
- /**
- * @param $name
- * @param $arguments
- * @return Google_HttpRequest|array
- * @throws Google_Exception
- */
- public function __call($name, $arguments) {
- if (! isset($this->methods[$name])) {
- throw new Google_Exception("Unknown function: {$this->serviceName}->{$this->resourceName}->{$name}()");
- }
- $method = $this->methods[$name];
- $parameters = $arguments[0];
-
- // postBody is a special case since it's not defined in the discovery document as parameter, but we abuse the param entry for storing it
- $postBody = null;
- if (isset($parameters['postBody'])) {
- if (is_object($parameters['postBody'])) {
- $this->stripNull($parameters['postBody']);
- }
-
- // Some APIs require the postBody to be set under the data key.
- if (is_array($parameters['postBody']) && 'latitude' == $this->serviceName) {
- if (!isset($parameters['postBody']['data'])) {
- $rawBody = $parameters['postBody'];
- unset($parameters['postBody']);
- $parameters['postBody']['data'] = $rawBody;
- }
- }
-
- $postBody = is_array($parameters['postBody']) || is_object($parameters['postBody'])
- ? json_encode($parameters['postBody'])
- : $parameters['postBody'];
- unset($parameters['postBody']);
-
- if (isset($parameters['optParams'])) {
- $optParams = $parameters['optParams'];
- unset($parameters['optParams']);
- $parameters = array_merge($parameters, $optParams);
- }
- }
-
- if (!isset($method['parameters'])) {
- $method['parameters'] = array();
- }
-
- $method['parameters'] = array_merge($method['parameters'], $this->stackParameters);
- foreach ($parameters as $key => $val) {
- if ($key != 'postBody' && ! isset($method['parameters'][$key])) {
- throw new Google_Exception("($name) unknown parameter: '$key'");
- }
- }
- if (isset($method['parameters'])) {
- foreach ($method['parameters'] as $paramName => $paramSpec) {
- if (isset($paramSpec['required']) && $paramSpec['required'] && ! isset($parameters[$paramName])) {
- throw new Google_Exception("($name) missing required param: '$paramName'");
- }
- if (isset($parameters[$paramName])) {
- $value = $parameters[$paramName];
- $parameters[$paramName] = $paramSpec;
- $parameters[$paramName]['value'] = $value;
- unset($parameters[$paramName]['required']);
- } else {
- unset($parameters[$paramName]);
- }
- }
- }
-
- // Discovery v1.0 puts the canonical method id under the 'id' field.
- if (! isset($method['id'])) {
- $method['id'] = $method['rpcMethod'];
- }
-
- // Discovery v1.0 puts the canonical path under the 'path' field.
- if (! isset($method['path'])) {
- $method['path'] = $method['restPath'];
- }
-
- $servicePath = $this->service->servicePath;
-
- // Process Media Request
- $contentType = false;
- if (isset($method['mediaUpload'])) {
- $media = Google_MediaFileUpload::process($postBody, $parameters);
- if ($media) {
- $contentType = isset($media['content-type']) ? $media['content-type']: null;
- $postBody = isset($media['postBody']) ? $media['postBody'] : null;
- $servicePath = $method['mediaUpload']['protocols']['simple']['path'];
- $method['path'] = '';
- }
- }
-
- $url = Google_REST::createRequestUri($servicePath, $method['path'], $parameters);
- $httpRequest = new Google_HttpRequest($url, $method['httpMethod'], null, $postBody);
- if ($postBody) {
- $contentTypeHeader = array();
- if (isset($contentType) && $contentType) {
- $contentTypeHeader['content-type'] = $contentType;
- } else {
- $contentTypeHeader['content-type'] = 'application/json; charset=UTF-8';
- $contentTypeHeader['content-length'] = Google_Utils::getStrLen($postBody);
- }
- $httpRequest->setRequestHeaders($contentTypeHeader);
- }
-
- $httpRequest = Google_Client::$auth->sign($httpRequest);
- if (Google_Client::$useBatch) {
- return $httpRequest;
- }
-
- // Terminate immediately if this is a resumable request.
- if (isset($parameters['uploadType']['value'])
- && Google_MediaFileUpload::UPLOAD_RESUMABLE_TYPE == $parameters['uploadType']['value']) {
- $contentTypeHeader = array();
- if (isset($contentType) && $contentType) {
- $contentTypeHeader['content-type'] = $contentType;
- }
- $httpRequest->setRequestHeaders($contentTypeHeader);
- if ($postBody) {
- $httpRequest->setPostBody($postBody);
- }
- return $httpRequest;
- }
-
- return Google_REST::execute($httpRequest);
- }
-
- public function useObjects() {
- global $apiConfig;
- return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
- }
-
- protected function stripNull(&$o) {
- $o = (array) $o;
- foreach ($o as $k => $v) {
- if ($v === null || strstr($k, "\0*\0__")) {
- unset($o[$k]);
- }
- elseif (is_object($v) || is_array($v)) {
- $this->stripNull($o[$k]);
- }
- }
- }
-}
diff --git a/apps/files_external/ajax/google.php b/apps/files_external/ajax/google.php
index 40c10aa5d07..b80f24bbd2c 100644
--- a/apps/files_external/ajax/google.php
+++ b/apps/files_external/ajax/google.php
@@ -1,7 +1,7 @@
<?php
set_include_path(get_include_path().PATH_SEPARATOR.
\OC_App::getAppPath('files_external').'/3rdparty/google-api-php-client/src');
-require_once 'Google_Client.php';
+require_once 'Google/Client.php';
OCP\JSON::checkAppEnabled('files_external');
OCP\JSON::checkLoggedIn();
@@ -14,6 +14,7 @@ if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST
$client->setClientSecret($_POST['client_secret']);
$client->setRedirectUri($_POST['redirect']);
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
+ $client->setAccessType('offline');
if (isset($_POST['step'])) {
$step = $_POST['step'];
if ($step == 1) {
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index ea14f7adbcf..0aafcad559a 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -90,7 +90,7 @@ OC_Mount_Config::registerBackend('\OC\Files\Storage\FTP', array(
'host' => (string)$l->t('Host'),
'user' => (string)$l->t('Username'),
'password' => '*'.$l->t('Password'),
- 'root' => '&'.$l->t('Root'),
+ 'root' => '&'.$l->t('Remote subfolder'),
'secure' => '!'.$l->t('Secure ftps://')),
'has_dependencies' => true));
@@ -132,7 +132,7 @@ if (!OC_Util::runningOnWindows()) {
'user' => (string)$l->t('Username'),
'password' => '*'.$l->t('Password'),
'share' => (string)$l->t('Share'),
- 'root' => '&'.$l->t('Root')),
+ 'root' => '&'.$l->t('Remote subfolder')),
'has_dependencies' => true));
OC_Mount_Config::registerBackend('\OC\Files\Storage\SMB_OC', array(
@@ -142,7 +142,7 @@ if (!OC_Util::runningOnWindows()) {
'host' => (string)$l->t('Host'),
'username_as_share' => '!'.$l->t('Username as share'),
'share' => '&'.$l->t('Share'),
- 'root' => '&'.$l->t('Root')),
+ 'root' => '&'.$l->t('Remote subfolder')),
'has_dependencies' => true));
}
@@ -153,7 +153,7 @@ OC_Mount_Config::registerBackend('\OC\Files\Storage\DAV', array(
'host' => (string)$l->t('URL'),
'user' => (string)$l->t('Username'),
'password' => '*'.$l->t('Password'),
- 'root' => '&'.$l->t('Root'),
+ 'root' => '&'.$l->t('Remote subfolder'),
'secure' => '!'.$l->t('Secure https://')),
'has_dependencies' => true));
@@ -175,5 +175,7 @@ OC_Mount_Config::registerBackend('\OC\Files\Storage\SFTP', array(
'host' => (string)$l->t('Host'),
'user' => (string)$l->t('Username'),
'password' => '*'.$l->t('Password'),
- 'root' => '&'.$l->t('Root'))));
+ 'root' => '&'.$l->t('Remote subfolder'))));
+$mountProvider = new \OCA\Files_External\Config\ConfigAdapter();
+\OC::$server->getMountProviderCollection()->registerProvider($mountProvider);
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index 6acb58960d4..f23dea83caa 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -3,9 +3,9 @@
<id>files_external</id>
<name>External storage support</name>
<description>
- This application enables administrators to configure connections to external storage provides, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers and more. Administrators can choose in the GUI which type of storage to enable, and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, and then can then access and use it like any other ownCloud folder. External Storage also allows users to share files stored in these external location. In these cases, the credentials for the owner of the file are used then the recipient requests the file from external storage, thereby ensuring that the recipient can get at the file that was shared.
+ This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External Storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
- In addition to the GUI, it is possible to configure external storage manually at the command line. This option provides the advanced user with more flexibility for configuring bulk external storage mounts, as well as setting mount priorities. More information is available in the External Storage GUI documentation and the External Storage Configuration File documentation.
+ External Storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the External Storage GUI documentation and the External Storage Configuration File documentation.
</description>
<licence>AGPL</licence>
<author>Robin Appelman, Michael Gapczynski, Vincent Petry</author>
diff --git a/apps/files_external/img/app.svg b/apps/files_external/img/app.svg
index df1bfd163ff..6cafe174f60 100644
--- a/apps/files_external/img/app.svg
+++ b/apps/files_external/img/app.svg
@@ -1,212 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="32px"
- width="32px"
- version="1.1"
- id="svg2"
- inkscape:version="0.48.5 r10040"
- sodipodi:docname="app.svg">
- <metadata
- id="metadata80">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- id="namedview78"
- showgrid="false"
- inkscape:zoom="7.375"
- inkscape:cx="-13.559322"
- inkscape:cy="16"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg2" />
- <defs
- id="defs4">
- <linearGradient
- id="m"
- y2="21.387"
- gradientUnits="userSpaceOnUse"
- x2="27.557"
- gradientTransform="matrix(.89186 0 0 1.0539 3.1208 3.4122)"
- y1="7.1627"
- x1="27.557">
- <stop
- stop-color="#fff"
- offset="0"
- id="stop7" />
- <stop
- stop-color="#fff"
- stop-opacity=".23529"
- offset=".0097359"
- id="stop9" />
- <stop
- stop-color="#fff"
- stop-opacity=".15686"
- offset=".99001"
- id="stop11" />
- <stop
- stop-color="#fff"
- stop-opacity=".39216"
- offset="1"
- id="stop13" />
- </linearGradient>
- <linearGradient
- id="l"
- y2="43.761"
- gradientUnits="userSpaceOnUse"
- x2="35.793"
- gradientTransform="matrix(.64444 0 0 .64286 .53352 -1.1074)"
- y1="17.118"
- x1="35.793">
- <stop
- stop-color="#b4cee1"
- offset="0"
- id="stop16" />
- <stop
- stop-color="#5d9fcd"
- offset="1"
- id="stop18" />
- </linearGradient>
- <linearGradient
- id="k"
- y2="609.51"
- gradientUnits="userSpaceOnUse"
- x2="302.86"
- gradientTransform="matrix(.051143 0 0 .015916 -2.49 22.299)"
- y1="366.65"
- x1="302.86">
- <stop
- stop-opacity="0"
- offset="0"
- id="stop21" />
- <stop
- offset=".5"
- id="stop23" />
- <stop
- stop-opacity="0"
- offset="1"
- id="stop25" />
- </linearGradient>
- <radialGradient
- id="n"
- gradientUnits="userSpaceOnUse"
- cy="486.65"
- cx="605.71"
- gradientTransform="matrix(.019836 0 0 .015916 16.388 22.299)"
- r="117.14">
- <stop
- offset="0"
- id="stop28" />
- <stop
- stop-opacity="0"
- offset="1"
- id="stop30" />
- </radialGradient>
- <radialGradient
- id="o"
- gradientUnits="userSpaceOnUse"
- cy="486.65"
- cx="605.71"
- gradientTransform="matrix(-.019836 0 0 .015916 15.601 22.299)"
- r="117.14">
- <stop
- offset="0"
- id="stop33" />
- <stop
- stop-opacity="0"
- offset="1"
- id="stop35" />
- </radialGradient>
- <linearGradient
- id="j"
- y2="34.143"
- gradientUnits="userSpaceOnUse"
- x2="21.37"
- gradientTransform="matrix(.54384 0 0 .61466 3.2689 3.0908)"
- y1="4.7324"
- x1="21.37">
- <stop
- stop-color="#fff"
- offset="0"
- id="stop38" />
- <stop
- stop-color="#fff"
- stop-opacity=".23529"
- offset=".11063"
- id="stop40" />
- <stop
- stop-color="#fff"
- stop-opacity=".15686"
- offset=".99001"
- id="stop42" />
- <stop
- stop-color="#fff"
- stop-opacity=".39216"
- offset="1"
- id="stop44" />
- </linearGradient>
- <linearGradient
- id="i"
- y2="16"
- gradientUnits="userSpaceOnUse"
- x2="62.989"
- gradientTransform="matrix(.61905 0 0 .61905 -30.392 -.57170)"
- y1="13"
- x1="62.989">
- <stop
- stop-color="#f9f9f9"
- offset="0"
- id="stop47" />
- <stop
- stop-color="#d8d8d8"
- offset="1"
- id="stop49" />
- </linearGradient>
- <linearGradient
- id="d"
- y2="3.6337"
- gradientUnits="userSpaceOnUse"
- y1="53.514"
- gradientTransform="matrix(.50703 0 0 .503 68.029 -.67050)"
- x2="-51.786"
- x1="-51.786">
- <stop
- stop-opacity=".32174"
- offset="0"
- id="stop52" />
- <stop
- stop-opacity=".27826"
- offset="1"
- id="stop54" />
- </linearGradient>
- </defs>
- <path
- d="m 14.902928,3.2372882 4.76117,4.5146377 -7.141758,6.7719561 4.761174,4.514639 7.141756,-6.771956 4.761171,4.514636 V 3.2372882 H 14.902928 z M 5.3805857,5.4946057 C 4.0617412,5.4946057 3,6.501372 3,7.7519259 V 25.810477 c 0,1.250555 1.0617412,2.257319 2.3805857,2.257319 H 24.42527 c 1.318844,0 2.380584,-1.006764 2.380584,-2.257319 v -6.771956 l -2.380584,-2.25732 v 9.029276 H 5.3805857 V 7.7519259 H 14.902928 L 12.52234,5.4946057 H 5.3805857 z"
- id="path76"
- inkscape:connector-curvature="0"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1" />
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <path d="m14.903 3.2373 4.7612 4.5146-7.1418 6.772 4.7612 4.5146 7.1418-6.772 4.7612 4.5146v-13.545h-14.283zm-9.5224 2.2573c-1.3189 0-2.3806 1.0068-2.3806 2.2573v18.058c0 1.2506 1.0617 2.2573 2.3806 2.2573h19.044c1.3188 0 2.3806-1.0068 2.3806-2.2573v-6.772l-2.3806-2.2573v9.0293h-19.044v-18.058h9.522l-2.381-2.2574h-7.1414z" fill="#fff"/>
</svg>
diff --git a/apps/files_external/js/app.js b/apps/files_external/js/app.js
index 58ad1a0f6ef..bf853f926dc 100644
--- a/apps/files_external/js/app.js
+++ b/apps/files_external/js/app.js
@@ -9,8 +9,14 @@
*/
if (!OCA.External) {
+ /**
+ * @namespace
+ */
OCA.External = {};
}
+/**
+ * @namespace
+ */
OCA.External.App = {
fileList: null,
diff --git a/apps/files_external/js/mountsfilelist.js b/apps/files_external/js/mountsfilelist.js
index 20bf0f785db..c45faafd9bf 100644
--- a/apps/files_external/js/mountsfilelist.js
+++ b/apps/files_external/js/mountsfilelist.js
@@ -10,15 +10,29 @@
(function() {
/**
- * External storage file list
- */
+ * @class OCA.External.FileList
+ * @augments OCA.Files.FileList
+ *
+ * @classdesc External storage file list.
+ *
+ * Displays a list of mount points visible
+ * for the current user.
+ *
+ * @param $el container element with existing markup for the #controls
+ * and a table
+ * @param [options] map of options, see other parameters
+ **/
var FileList = function($el, options) {
this.initialize($el, options);
};
- FileList.prototype = _.extend({}, OCA.Files.FileList.prototype, {
+ FileList.prototype = _.extend({}, OCA.Files.FileList.prototype,
+ /** @lends OCA.External.FileList.prototype */ {
appName: 'External storage',
+ /**
+ * @private
+ */
initialize: function($el, options) {
OCA.Files.FileList.prototype.initialize.apply(this, arguments);
if (this.initialized) {
@@ -26,6 +40,9 @@
}
},
+ /**
+ * @param {OCA.External.MountPointInfo} fileData
+ */
_createRow: function(fileData) {
// TODO: hook earlier and render the whole row here
var $tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments);
@@ -114,5 +131,15 @@
}
});
+ /**
+ * Mount point info attributes.
+ *
+ * @typedef {Object} OCA.External.MountPointInfo
+ *
+ * @property {String} name mount point name
+ * @property {String} scope mount point scope "personal" or "system"
+ * @property {String} backend external storage backend name
+ */
+
OCA.External.FileList = FileList;
})();
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index 75d45ae1924..ee3d0b736da 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -468,14 +468,14 @@ $(document).ready(function() {
OC.AppConfig.setValue('files_external', 'allow_user_mounting', 'no');
$('#userMountingBackends').addClass('hidden');
}
- OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('settings', 'Saved')}});
+ OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('files_external', 'Saved')}});
});
$('input[name="allowUserMountingBackends\\[\\]"]').bind('change', function() {
OC.msg.startSaving('#userMountingMsg');
var userMountingBackends = $('input[name="allowUserMountingBackends\\[\\]"]:checked').map(function(){return $(this).val();}).get();
OC.AppConfig.setValue('files_external', 'user_mounting_backends', userMountingBackends.join());
- OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('settings', 'Saved')}});
+ OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('files_external', 'Saved')}});
// disable allowUserMounting
if(userMountingBackends.length === 0) {
diff --git a/apps/files_external/l10n/ast.js b/apps/files_external/l10n/ast.js
index d1d9f05b498..63a6fe63cfc 100644
--- a/apps/files_external/l10n/ast.js
+++ b/apps/files_external/l10n/ast.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Sirvidor",
"Username" : "Nome d'usuariu",
"Password" : "Contraseña",
- "Root" : "Raíz",
+ "Remote subfolder" : "Subcarpeta remota",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "ID de veceru",
"Client secret" : "Veceru secretu",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Nome d'usuariu como Compartición",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Subcarpeta remota",
"Access granted" : "Accesu concedíu",
"Error configuring Dropbox storage" : "Fallu configurando l'almacenamientu de Dropbox",
"Grant access" : "Conceder accesu",
@@ -54,11 +53,9 @@ OC.L10N.register(
"(group)" : "(grupu)",
"Saved" : "Guardáu",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "y",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP nun ta activáu o instaláu. Nun pue montase %s. Pídi-y al alministrador de sistema que lu instale.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP nun ta activáu o instaláu. Nun pue montase %s. Pídi-y al alministrador de sistema que lu instale.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" nun ta instaláu. Nun pue montase %s. Pídi-y al alministrador de sistema que lu instale.",
- "You don't have any external storages" : "Nun tienes almacenamientos esternos",
"Name" : "Nome",
"Storage type" : "Triba d'almacenamientu",
"Scope" : "Ámbitu",
diff --git a/apps/files_external/l10n/ast.json b/apps/files_external/l10n/ast.json
index eeca7714b31..f3858591e09 100644
--- a/apps/files_external/l10n/ast.json
+++ b/apps/files_external/l10n/ast.json
@@ -24,7 +24,7 @@
"Host" : "Sirvidor",
"Username" : "Nome d'usuariu",
"Password" : "Contraseña",
- "Root" : "Raíz",
+ "Remote subfolder" : "Subcarpeta remota",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "ID de veceru",
"Client secret" : "Veceru secretu",
@@ -41,7 +41,6 @@
"Username as share" : "Nome d'usuariu como Compartición",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Subcarpeta remota",
"Access granted" : "Accesu concedíu",
"Error configuring Dropbox storage" : "Fallu configurando l'almacenamientu de Dropbox",
"Grant access" : "Conceder accesu",
@@ -52,11 +51,9 @@
"(group)" : "(grupu)",
"Saved" : "Guardáu",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "y",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP nun ta activáu o instaláu. Nun pue montase %s. Pídi-y al alministrador de sistema que lu instale.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP nun ta activáu o instaláu. Nun pue montase %s. Pídi-y al alministrador de sistema que lu instale.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" nun ta instaláu. Nun pue montase %s. Pídi-y al alministrador de sistema que lu instale.",
- "You don't have any external storages" : "Nun tienes almacenamientos esternos",
"Name" : "Nome",
"Storage type" : "Triba d'almacenamientu",
"Scope" : "Ámbitu",
diff --git a/apps/files_external/l10n/bg_BG.js b/apps/files_external/l10n/bg_BG.js
index 1944af503f1..dabf8715e82 100644
--- a/apps/files_external/l10n/bg_BG.js
+++ b/apps/files_external/l10n/bg_BG.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Сървър",
"Username" : "Потребителско Име",
"Password" : "Парола",
- "Root" : "Root",
+ "Remote subfolder" : "Външна подпапка",
"Secure ftps://" : "Сигурен ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Потребителско име като споделена папка",
"URL" : "Интернет Адрес",
"Secure https://" : "Подсигурен https://",
- "Remote subfolder" : "Външна подпапка",
"Access granted" : "Достъпът разрешен",
"Error configuring Dropbox storage" : "Грешка при настройката на Dropbox дисковото пространство.",
"Grant access" : "Разреши достъп",
@@ -54,11 +53,9 @@ OC.L10N.register(
"(group)" : "(група)",
"Saved" : "Запазено",
"<b>Note:</b> " : "<b>Бележка:</b> ",
- " and " : "и",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> 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>Note:</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>Note:</b> \"%s\" не е инсталиран. Прикачването на %s не е възможно. Моля, поискай системния администратор да я инсталира.",
- "You don't have any external storages" : "Нямаш никакви външни дискови пространства",
"Name" : "Име",
"Storage type" : "Тип дисково пространство",
"Scope" : "Обхват",
diff --git a/apps/files_external/l10n/bg_BG.json b/apps/files_external/l10n/bg_BG.json
index 0564415c3d6..5dc9e8d60a2 100644
--- a/apps/files_external/l10n/bg_BG.json
+++ b/apps/files_external/l10n/bg_BG.json
@@ -24,7 +24,7 @@
"Host" : "Сървър",
"Username" : "Потребителско Име",
"Password" : "Парола",
- "Root" : "Root",
+ "Remote subfolder" : "Външна подпапка",
"Secure ftps://" : "Сигурен ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -41,7 +41,6 @@
"Username as share" : "Потребителско име като споделена папка",
"URL" : "Интернет Адрес",
"Secure https://" : "Подсигурен https://",
- "Remote subfolder" : "Външна подпапка",
"Access granted" : "Достъпът разрешен",
"Error configuring Dropbox storage" : "Грешка при настройката на Dropbox дисковото пространство.",
"Grant access" : "Разреши достъп",
@@ -52,11 +51,9 @@
"(group)" : "(група)",
"Saved" : "Запазено",
"<b>Note:</b> " : "<b>Бележка:</b> ",
- " and " : "и",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> 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>Note:</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>Note:</b> \"%s\" не е инсталиран. Прикачването на %s не е възможно. Моля, поискай системния администратор да я инсталира.",
- "You don't have any external storages" : "Нямаш никакви външни дискови пространства",
"Name" : "Име",
"Storage type" : "Тип дисково пространство",
"Scope" : "Обхват",
diff --git a/apps/files_external/l10n/bn_BD.js b/apps/files_external/l10n/bn_BD.js
index 1afb8c66ee1..79df8f58bf3 100644
--- a/apps/files_external/l10n/bn_BD.js
+++ b/apps/files_external/l10n/bn_BD.js
@@ -20,7 +20,6 @@ OC.L10N.register(
"Host" : "হোস্ট",
"Username" : "ব্যবহারকারী",
"Password" : "কূটশব্দ",
- "Root" : "শেকড়",
"Secure ftps://" : "ftps:// অর্জন কর",
"Client ID" : "ক্লায়েন্ট পরিচিতি",
"Share" : "ভাগাভাগি কর",
@@ -33,7 +32,6 @@ OC.L10N.register(
"(group)" : "(গোষ্ঠি)",
"Saved" : "সংরক্ষণ করা হলো",
"<b>Note:</b> " : "<b>দ্রষ্টব্য:</b> ",
- " and " : "এবং",
"Name" : "রাম",
"External Storage" : "বাহ্যিক সংরক্ষণাগার",
"Folder name" : "ফোলডারের নাম",
diff --git a/apps/files_external/l10n/bn_BD.json b/apps/files_external/l10n/bn_BD.json
index 975bf7cace7..74da3dd1af3 100644
--- a/apps/files_external/l10n/bn_BD.json
+++ b/apps/files_external/l10n/bn_BD.json
@@ -18,7 +18,6 @@
"Host" : "হোস্ট",
"Username" : "ব্যবহারকারী",
"Password" : "কূটশব্দ",
- "Root" : "শেকড়",
"Secure ftps://" : "ftps:// অর্জন কর",
"Client ID" : "ক্লায়েন্ট পরিচিতি",
"Share" : "ভাগাভাগি কর",
@@ -31,7 +30,6 @@
"(group)" : "(গোষ্ঠি)",
"Saved" : "সংরক্ষণ করা হলো",
"<b>Note:</b> " : "<b>দ্রষ্টব্য:</b> ",
- " and " : "এবং",
"Name" : "রাম",
"External Storage" : "বাহ্যিক সংরক্ষণাগার",
"Folder name" : "ফোলডারের নাম",
diff --git a/apps/files_external/l10n/bs.js b/apps/files_external/l10n/bs.js
index 349554cd2dd..b71d1832e51 100644
--- a/apps/files_external/l10n/bs.js
+++ b/apps/files_external/l10n/bs.js
@@ -1,7 +1,15 @@
OC.L10N.register(
"files_external",
{
+ "Local" : "Lokalno",
+ "Location" : "Lokacija",
+ "Port" : "Priključak",
+ "Username" : "Korisničko ime",
+ "Password" : "Lozinka",
"Share" : "Podijeli",
- "Name" : "Ime"
+ "Personal" : "Osobno",
+ "Saved" : "Spremljeno",
+ "Name" : "Ime",
+ "Delete" : "Izbriši"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_external/l10n/bs.json b/apps/files_external/l10n/bs.json
index 123aaea647a..36141be81e4 100644
--- a/apps/files_external/l10n/bs.json
+++ b/apps/files_external/l10n/bs.json
@@ -1,5 +1,13 @@
{ "translations": {
+ "Local" : "Lokalno",
+ "Location" : "Lokacija",
+ "Port" : "Priključak",
+ "Username" : "Korisničko ime",
+ "Password" : "Lozinka",
"Share" : "Podijeli",
- "Name" : "Ime"
+ "Personal" : "Osobno",
+ "Saved" : "Spremljeno",
+ "Name" : "Ime",
+ "Delete" : "Izbriši"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/ca.js b/apps/files_external/l10n/ca.js
index 4663654f63c..78aa5ad5b8d 100644
--- a/apps/files_external/l10n/ca.js
+++ b/apps/files_external/l10n/ca.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Equip remot",
"Username" : "Nom d'usuari",
"Password" : "Contrasenya",
- "Root" : "Arrel",
+ "Remote subfolder" : "Subcarpeta remota",
"Secure ftps://" : "Protocol segur ftps://",
"Client ID" : "Client ID",
"Client secret" : "Secret del client",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Nom d'usuari per compartir",
"URL" : "URL",
"Secure https://" : "Protocol segur https://",
- "Remote subfolder" : "Subcarpeta remota",
"Access granted" : "S'ha concedit l'accés",
"Error configuring Dropbox storage" : "Error en configurar l'emmagatzemament Dropbox",
"Grant access" : "Concedeix accés",
@@ -54,11 +53,9 @@ OC.L10N.register(
"(group)" : "(grup)",
"Saved" : "Desat",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "i",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport cURL no està activat o instal·lat a PHP. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport FTP per PHP no està activat o no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> %s no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
- "You don't have any external storages" : "No teniu emmagatzaments externs",
"Name" : "Nom",
"Storage type" : "Tipus d'emmagatzemament",
"Scope" : "Abast",
diff --git a/apps/files_external/l10n/ca.json b/apps/files_external/l10n/ca.json
index 6bd1dcca39b..01f63676b59 100644
--- a/apps/files_external/l10n/ca.json
+++ b/apps/files_external/l10n/ca.json
@@ -24,7 +24,7 @@
"Host" : "Equip remot",
"Username" : "Nom d'usuari",
"Password" : "Contrasenya",
- "Root" : "Arrel",
+ "Remote subfolder" : "Subcarpeta remota",
"Secure ftps://" : "Protocol segur ftps://",
"Client ID" : "Client ID",
"Client secret" : "Secret del client",
@@ -41,7 +41,6 @@
"Username as share" : "Nom d'usuari per compartir",
"URL" : "URL",
"Secure https://" : "Protocol segur https://",
- "Remote subfolder" : "Subcarpeta remota",
"Access granted" : "S'ha concedit l'accés",
"Error configuring Dropbox storage" : "Error en configurar l'emmagatzemament Dropbox",
"Grant access" : "Concedeix accés",
@@ -52,11 +51,9 @@
"(group)" : "(grup)",
"Saved" : "Desat",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "i",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport cURL no està activat o instal·lat a PHP. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport FTP per PHP no està activat o no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> %s no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
- "You don't have any external storages" : "No teniu emmagatzaments externs",
"Name" : "Nom",
"Storage type" : "Tipus d'emmagatzemament",
"Scope" : "Abast",
diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js
index 29af393cf07..59eace0010d 100644
--- a/apps/files_external/l10n/cs_CZ.js
+++ b/apps/files_external/l10n/cs_CZ.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Počítač",
"Username" : "Uživatelské jméno",
"Password" : "Heslo",
- "Root" : "Kořen",
+ "Remote subfolder" : "Vzdálený podadresář",
"Secure ftps://" : "Zabezpečené ftps://",
"Client ID" : "Klientské ID",
"Client secret" : "Klientské tajemství",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Uživatelské jméno jako sdílený adresář",
"URL" : "URL",
"Secure https://" : "Zabezpečené https://",
- "Remote subfolder" : "Vzdálený podadresář",
"Access granted" : "Přístup povolen",
"Error configuring Dropbox storage" : "Chyba při nastavení úložiště Dropbox",
"Grant access" : "Povolit přístup",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(skupina)",
"Saved" : "Uloženo",
"<b>Note:</b> " : "<b>Poznámka:</b>",
- " and " : "a",
+ "and" : "a",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.",
- "You don't have any external storages" : "Nemáte žádná externí úložiště",
+ "No external storages configured" : "Nejsou nakonfigurována žádná externí úložiště",
+ "You can configure external storages in the personal settings" : "Externí úložiště můžete spravovat v osobním nastavení",
"Name" : "Název",
"Storage type" : "Typ úložiště",
"Scope" : "Rozsah",
diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json
index f8acc7d469d..46bbed2a7c4 100644
--- a/apps/files_external/l10n/cs_CZ.json
+++ b/apps/files_external/l10n/cs_CZ.json
@@ -24,7 +24,7 @@
"Host" : "Počítač",
"Username" : "Uživatelské jméno",
"Password" : "Heslo",
- "Root" : "Kořen",
+ "Remote subfolder" : "Vzdálený podadresář",
"Secure ftps://" : "Zabezpečené ftps://",
"Client ID" : "Klientské ID",
"Client secret" : "Klientské tajemství",
@@ -41,7 +41,6 @@
"Username as share" : "Uživatelské jméno jako sdílený adresář",
"URL" : "URL",
"Secure https://" : "Zabezpečené https://",
- "Remote subfolder" : "Vzdálený podadresář",
"Access granted" : "Přístup povolen",
"Error configuring Dropbox storage" : "Chyba při nastavení úložiště Dropbox",
"Grant access" : "Povolit přístup",
@@ -52,11 +51,12 @@
"(group)" : "(skupina)",
"Saved" : "Uloženo",
"<b>Note:</b> " : "<b>Poznámka:</b>",
- " and " : "a",
+ "and" : "a",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.",
- "You don't have any external storages" : "Nemáte žádná externí úložiště",
+ "No external storages configured" : "Nejsou nakonfigurována žádná externí úložiště",
+ "You can configure external storages in the personal settings" : "Externí úložiště můžete spravovat v osobním nastavení",
"Name" : "Název",
"Storage type" : "Typ úložiště",
"Scope" : "Rozsah",
diff --git a/apps/files_external/l10n/da.js b/apps/files_external/l10n/da.js
index 5420917e2a9..05cdb974bd8 100644
--- a/apps/files_external/l10n/da.js
+++ b/apps/files_external/l10n/da.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Vært",
"Username" : "Brugernavn",
"Password" : "Kodeord",
- "Root" : "Root",
+ "Remote subfolder" : "Fjernundermappe",
"Secure ftps://" : "Sikker ftps://",
"Client ID" : "Klient-ID",
"Client secret" : "Klient hemmelighed",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Brugernavn som deling",
"URL" : "URL",
"Secure https://" : "Sikker https://",
- "Remote subfolder" : "Fjernundermappe",
"Access granted" : "Adgang godkendt",
"Error configuring Dropbox storage" : "Fejl ved konfiguration af Dropbox plads",
"Grant access" : "Godkend adgang",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(gruppe)",
"Saved" : "Gemt",
"<b>Note:</b> " : "<b>Note:</b> ",
- " and " : "og",
+ "and" : "og",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
- "You don't have any external storages" : "Du har ingen eksterne lagre",
+ "No external storages configured" : "Der er ikke konfigureret eksterne lagerenheder",
+ "You can configure external storages in the personal settings" : "Du kan konfigurere eksterne lagerenheder i de personlige indstillinger",
"Name" : "Navn",
"Storage type" : "Lagertype",
"Scope" : "Anvendelsesområde",
diff --git a/apps/files_external/l10n/da.json b/apps/files_external/l10n/da.json
index d5c468a5d8e..9e56044050a 100644
--- a/apps/files_external/l10n/da.json
+++ b/apps/files_external/l10n/da.json
@@ -24,7 +24,7 @@
"Host" : "Vært",
"Username" : "Brugernavn",
"Password" : "Kodeord",
- "Root" : "Root",
+ "Remote subfolder" : "Fjernundermappe",
"Secure ftps://" : "Sikker ftps://",
"Client ID" : "Klient-ID",
"Client secret" : "Klient hemmelighed",
@@ -41,7 +41,6 @@
"Username as share" : "Brugernavn som deling",
"URL" : "URL",
"Secure https://" : "Sikker https://",
- "Remote subfolder" : "Fjernundermappe",
"Access granted" : "Adgang godkendt",
"Error configuring Dropbox storage" : "Fejl ved konfiguration af Dropbox plads",
"Grant access" : "Godkend adgang",
@@ -52,11 +51,12 @@
"(group)" : "(gruppe)",
"Saved" : "Gemt",
"<b>Note:</b> " : "<b>Note:</b> ",
- " and " : "og",
+ "and" : "og",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
- "You don't have any external storages" : "Du har ingen eksterne lagre",
+ "No external storages configured" : "Der er ikke konfigureret eksterne lagerenheder",
+ "You can configure external storages in the personal settings" : "Du kan konfigurere eksterne lagerenheder i de personlige indstillinger",
"Name" : "Navn",
"Storage type" : "Lagertype",
"Scope" : "Anvendelsesområde",
diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js
index d67bda49b4d..4acabfe214a 100644
--- a/apps/files_external/l10n/de.js
+++ b/apps/files_external/l10n/de.js
@@ -1,8 +1,8 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Anfrage-Token holen fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
- "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Zugriff-Token holen fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Anfrage-Tokens fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Zugriff-Tokens fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
"Please provide a valid Dropbox app key and secret." : "Bitte trage einen gültigen Dropbox-App-Key mit Secret ein.",
"Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s",
"Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s",
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Benutzername",
"Password" : "Passwort",
- "Root" : "Root",
+ "Remote subfolder" : "Remote subfolder",
"Secure ftps://" : "Sicherer FTPS://",
"Client ID" : "Client-ID",
"Client secret" : "Geheime Zeichenkette des Client",
@@ -38,12 +38,11 @@ OC.L10N.register(
"Service Name (required for OpenStack Object Storage)" : "Name der Dienstleistung (Erforderlich für Openstack-Objektspeicher)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL des Identitätsendpunktes (Erforderlich für Openstack-Objektspeicher)",
"Timeout of HTTP requests in seconds" : "Zeitüberschreitung von HTTP-Anfragen in Sekunden",
- "Share" : "Teilen",
+ "Share" : "Share",
"SMB / CIFS using OC login" : "SMB / CIFS mit OC-Login",
"Username as share" : "Benutzername als Freigabe",
"URL" : "URL",
"Secure https://" : "Sicherer HTTPS://",
- "Remote subfolder" : "Remote-Unterordner:",
"Access granted" : "Zugriff gestattet",
"Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox",
"Grant access" : "Zugriff gestatten",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(group)",
"Saved" : "Gespeichert",
"<b>Note:</b> " : "<b>Hinweis:</b> ",
- " and " : "und",
+ "and" : "und",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
- "You don't have any external storages" : "Du hast noch keinen externen Speicher",
+ "No external storages configured" : "Keine externen Speicher konfiguriert",
+ "You can configure external storages in the personal settings" : "Du kannst externe Speicher in den persönlichen Einstellungen konfigurieren",
"Name" : "Name",
"Storage type" : "Du hast noch keinen externen Speicher",
"Scope" : "Anwendungsbereich",
diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json
index fb4467cc1f2..17c31921196 100644
--- a/apps/files_external/l10n/de.json
+++ b/apps/files_external/l10n/de.json
@@ -1,6 +1,6 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Anfrage-Token holen fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
- "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Zugriff-Token holen fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Anfrage-Tokens fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Zugriff-Tokens fehlgeschlagen. Stelle bitte sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
"Please provide a valid Dropbox app key and secret." : "Bitte trage einen gültigen Dropbox-App-Key mit Secret ein.",
"Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s",
"Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s",
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Benutzername",
"Password" : "Passwort",
- "Root" : "Root",
+ "Remote subfolder" : "Remote subfolder",
"Secure ftps://" : "Sicherer FTPS://",
"Client ID" : "Client-ID",
"Client secret" : "Geheime Zeichenkette des Client",
@@ -36,12 +36,11 @@
"Service Name (required for OpenStack Object Storage)" : "Name der Dienstleistung (Erforderlich für Openstack-Objektspeicher)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL des Identitätsendpunktes (Erforderlich für Openstack-Objektspeicher)",
"Timeout of HTTP requests in seconds" : "Zeitüberschreitung von HTTP-Anfragen in Sekunden",
- "Share" : "Teilen",
+ "Share" : "Share",
"SMB / CIFS using OC login" : "SMB / CIFS mit OC-Login",
"Username as share" : "Benutzername als Freigabe",
"URL" : "URL",
"Secure https://" : "Sicherer HTTPS://",
- "Remote subfolder" : "Remote-Unterordner:",
"Access granted" : "Zugriff gestattet",
"Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox",
"Grant access" : "Zugriff gestatten",
@@ -52,11 +51,12 @@
"(group)" : "(group)",
"Saved" : "Gespeichert",
"<b>Note:</b> " : "<b>Hinweis:</b> ",
- " and " : "und",
+ "and" : "und",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
- "You don't have any external storages" : "Du hast noch keinen externen Speicher",
+ "No external storages configured" : "Keine externen Speicher konfiguriert",
+ "You can configure external storages in the personal settings" : "Du kannst externe Speicher in den persönlichen Einstellungen konfigurieren",
"Name" : "Name",
"Storage type" : "Du hast noch keinen externen Speicher",
"Scope" : "Anwendungsbereich",
diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js
index d12b171f639..11a9a41aaa8 100644
--- a/apps/files_external/l10n/de_DE.js
+++ b/apps/files_external/l10n/de_DE.js
@@ -1,8 +1,8 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Anfrage-Token holen fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
- "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Zugriff-Token holen fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Anfrage-Tokens fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Zugriff-Tokens fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
"Please provide a valid Dropbox app key and secret." : "Bitte tragen Sie einen gültigen Dropbox-App-Key mit Secret ein.",
"Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s",
"Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s",
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Benutzername",
"Password" : "Passwort",
- "Root" : "Root",
+ "Remote subfolder" : "Entfernter Unterordner:",
"Secure ftps://" : "Sicherer FTPS://",
"Client ID" : "Client-ID",
"Client secret" : "Geheime Zeichenkette des Client",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Benutzername als Freigabe",
"URL" : "Adresse",
"Secure https://" : "Sicherer HTTPS://",
- "Remote subfolder" : "Entfernter Unterordner:",
"Access granted" : "Zugriff gestattet",
"Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox",
"Grant access" : "Zugriff gestatten",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(group)",
"Saved" : "Gespeichert",
"<b>Note:</b> " : "<b>Hinweis:</b> ",
- " and " : "und",
+ "and" : "und",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "You don't have any external storages" : "Sie haben noch keinen externen Speicher",
+ "No external storages configured" : "Keine externen Speicher konfiguriert",
+ "You can configure external storages in the personal settings" : "Sie können externe Speicher in den persönlichen Einstellungen konfigurieren",
"Name" : "Name",
"Storage type" : "Speichertyp",
"Scope" : "Anwendungsbereich",
diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json
index 43c24e0c94a..a530df9ed5f 100644
--- a/apps/files_external/l10n/de_DE.json
+++ b/apps/files_external/l10n/de_DE.json
@@ -1,6 +1,6 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Anfrage-Token holen fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
- "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Zugriff-Token holen fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Anfrage-Tokens fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Abrufen des Zugriff-Tokens fehlgeschlagen. Stellen Sie sicher, dass der Anwendungsschlüssel und Sicherheitsschlüssel für Dropbox korrekt sind.",
"Please provide a valid Dropbox app key and secret." : "Bitte tragen Sie einen gültigen Dropbox-App-Key mit Secret ein.",
"Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s",
"Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s",
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Benutzername",
"Password" : "Passwort",
- "Root" : "Root",
+ "Remote subfolder" : "Entfernter Unterordner:",
"Secure ftps://" : "Sicherer FTPS://",
"Client ID" : "Client-ID",
"Client secret" : "Geheime Zeichenkette des Client",
@@ -41,7 +41,6 @@
"Username as share" : "Benutzername als Freigabe",
"URL" : "Adresse",
"Secure https://" : "Sicherer HTTPS://",
- "Remote subfolder" : "Entfernter Unterordner:",
"Access granted" : "Zugriff gestattet",
"Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox",
"Grant access" : "Zugriff gestatten",
@@ -52,11 +51,12 @@
"(group)" : "(group)",
"Saved" : "Gespeichert",
"<b>Note:</b> " : "<b>Hinweis:</b> ",
- " and " : "und",
+ "and" : "und",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "You don't have any external storages" : "Sie haben noch keinen externen Speicher",
+ "No external storages configured" : "Keine externen Speicher konfiguriert",
+ "You can configure external storages in the personal settings" : "Sie können externe Speicher in den persönlichen Einstellungen konfigurieren",
"Name" : "Name",
"Storage type" : "Speichertyp",
"Scope" : "Anwendungsbereich",
diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js
index 28105a01d6b..ba31abd802f 100644
--- a/apps/files_external/l10n/el.js
+++ b/apps/files_external/l10n/el.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Διακομιστής",
"Username" : "Όνομα χρήστη",
"Password" : "Κωδικός πρόσβασης",
- "Root" : "Root",
+ "Remote subfolder" : "Απομακρυσμένος υποφάκελος",
"Secure ftps://" : "Ασφαλής ftps://",
"Client ID" : "ID πελάτη",
"Client secret" : "Μυστικό πελάτη",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Όνομα χρήστη ως διαμοιραζόμενος φάκελος",
"URL" : "URL",
"Secure https://" : "Ασφαλής σύνδεση https://",
- "Remote subfolder" : "Απομακρυσμένος υποφάκελος",
"Access granted" : "Πρόσβαση παρασχέθηκε",
"Error configuring Dropbox storage" : "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox ",
"Grant access" : "Παροχή πρόσβασης",
@@ -54,11 +53,10 @@ OC.L10N.register(
"(group)" : "(ομάδα)",
"Saved" : "Αποθηκεύτηκαν",
"<b>Note:</b> " : "<b>Σημείωση:</b> ",
- " and " : "και",
+ "and" : "και",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "You don't have any external storages" : "Δεν έχετε κανέναν εξωτερικό αποθηκευτικό χώρο",
"Name" : "Όνομα",
"Storage type" : "Τύπος αποθηκευτικού χώρου",
"Scope" : "Εύρος",
diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json
index 4be10506a02..322949e30a1 100644
--- a/apps/files_external/l10n/el.json
+++ b/apps/files_external/l10n/el.json
@@ -24,7 +24,7 @@
"Host" : "Διακομιστής",
"Username" : "Όνομα χρήστη",
"Password" : "Κωδικός πρόσβασης",
- "Root" : "Root",
+ "Remote subfolder" : "Απομακρυσμένος υποφάκελος",
"Secure ftps://" : "Ασφαλής ftps://",
"Client ID" : "ID πελάτη",
"Client secret" : "Μυστικό πελάτη",
@@ -41,7 +41,6 @@
"Username as share" : "Όνομα χρήστη ως διαμοιραζόμενος φάκελος",
"URL" : "URL",
"Secure https://" : "Ασφαλής σύνδεση https://",
- "Remote subfolder" : "Απομακρυσμένος υποφάκελος",
"Access granted" : "Πρόσβαση παρασχέθηκε",
"Error configuring Dropbox storage" : "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox ",
"Grant access" : "Παροχή πρόσβασης",
@@ -52,11 +51,10 @@
"(group)" : "(ομάδα)",
"Saved" : "Αποθηκεύτηκαν",
"<b>Note:</b> " : "<b>Σημείωση:</b> ",
- " and " : "και",
+ "and" : "και",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "You don't have any external storages" : "Δεν έχετε κανέναν εξωτερικό αποθηκευτικό χώρο",
"Name" : "Όνομα",
"Storage type" : "Τύπος αποθηκευτικού χώρου",
"Scope" : "Εύρος",
diff --git a/apps/files_external/l10n/en_GB.js b/apps/files_external/l10n/en_GB.js
index 9f97d2c488c..123bf7242c7 100644
--- a/apps/files_external/l10n/en_GB.js
+++ b/apps/files_external/l10n/en_GB.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Username",
"Password" : "Password",
- "Root" : "Root",
+ "Remote subfolder" : "Remote subfolder",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Username as share",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Remote subfolder",
"Access granted" : "Access granted",
"Error configuring Dropbox storage" : "Error configuring Dropbox storage",
"Grant access" : "Grant access",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(group)",
"Saved" : "Saved",
"<b>Note:</b> " : "<b>Note:</b> ",
- " and " : " and ",
+ "and" : "and",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "You don't have any external storages" : "You don't have any external storage",
+ "No external storages configured" : "No external storage configured",
+ "You can configure external storages in the personal settings" : "You can configure external storage in the personal settings",
"Name" : "Name",
"Storage type" : "Storage type",
"Scope" : "Scope",
diff --git a/apps/files_external/l10n/en_GB.json b/apps/files_external/l10n/en_GB.json
index d4e7ad11bbe..685955577db 100644
--- a/apps/files_external/l10n/en_GB.json
+++ b/apps/files_external/l10n/en_GB.json
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Username",
"Password" : "Password",
- "Root" : "Root",
+ "Remote subfolder" : "Remote subfolder",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -41,7 +41,6 @@
"Username as share" : "Username as share",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Remote subfolder",
"Access granted" : "Access granted",
"Error configuring Dropbox storage" : "Error configuring Dropbox storage",
"Grant access" : "Grant access",
@@ -52,11 +51,12 @@
"(group)" : "(group)",
"Saved" : "Saved",
"<b>Note:</b> " : "<b>Note:</b> ",
- " and " : " and ",
+ "and" : "and",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "You don't have any external storages" : "You don't have any external storage",
+ "No external storages configured" : "No external storage configured",
+ "You can configure external storages in the personal settings" : "You can configure external storage in the personal settings",
"Name" : "Name",
"Storage type" : "Storage type",
"Scope" : "Scope",
diff --git a/apps/files_external/l10n/eo.js b/apps/files_external/l10n/eo.js
index 1d5014cdf23..4eb13bb55e9 100644
--- a/apps/files_external/l10n/eo.js
+++ b/apps/files_external/l10n/eo.js
@@ -18,7 +18,7 @@ OC.L10N.register(
"Host" : "Gastigo",
"Username" : "Uzantonomo",
"Password" : "Pasvorto",
- "Root" : "Radiko",
+ "Remote subfolder" : "Malloka subdosierujo",
"Secure ftps://" : "Sekura ftps://",
"Client ID" : "Klientidentigilo",
"Client secret" : "Klientosekreto",
@@ -30,7 +30,6 @@ OC.L10N.register(
"Share" : "Kunhavigi",
"URL" : "URL",
"Secure https://" : "Sekura https://",
- "Remote subfolder" : "Malloka subdosierujo",
"Access granted" : "Alirpermeso donita",
"Error configuring Dropbox storage" : "Eraro dum agordado de la memorservo Dropbox",
"Grant access" : "Doni alirpermeson",
@@ -38,7 +37,6 @@ OC.L10N.register(
"Personal" : "Persona",
"Saved" : "Konservita",
"<b>Note:</b> " : "<b>Noto:</b>",
- " and " : "kaj",
"Name" : "Nomo",
"External Storage" : "Malena memorilo",
"Folder name" : "Dosierujnomo",
diff --git a/apps/files_external/l10n/eo.json b/apps/files_external/l10n/eo.json
index cf63614fb88..2f31fb24214 100644
--- a/apps/files_external/l10n/eo.json
+++ b/apps/files_external/l10n/eo.json
@@ -16,7 +16,7 @@
"Host" : "Gastigo",
"Username" : "Uzantonomo",
"Password" : "Pasvorto",
- "Root" : "Radiko",
+ "Remote subfolder" : "Malloka subdosierujo",
"Secure ftps://" : "Sekura ftps://",
"Client ID" : "Klientidentigilo",
"Client secret" : "Klientosekreto",
@@ -28,7 +28,6 @@
"Share" : "Kunhavigi",
"URL" : "URL",
"Secure https://" : "Sekura https://",
- "Remote subfolder" : "Malloka subdosierujo",
"Access granted" : "Alirpermeso donita",
"Error configuring Dropbox storage" : "Eraro dum agordado de la memorservo Dropbox",
"Grant access" : "Doni alirpermeson",
@@ -36,7 +35,6 @@
"Personal" : "Persona",
"Saved" : "Konservita",
"<b>Note:</b> " : "<b>Noto:</b>",
- " and " : "kaj",
"Name" : "Nomo",
"External Storage" : "Malena memorilo",
"Folder name" : "Dosierujnomo",
diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js
index 9306558b346..f91509a74da 100644
--- a/apps/files_external/l10n/es.js
+++ b/apps/files_external/l10n/es.js
@@ -1,8 +1,8 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la llave y el secreto de su app Dropbox es correcta.",
- "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens de acceso ha fallado. Verifique que la llave y el secreto de su app Dropbox es correcta.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens de acceso ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.",
"Please provide a valid Dropbox app key and secret." : "Por favor, proporcione un una clave válida de la app Dropbox y una clave secreta.",
"Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s",
"Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s",
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Servidor",
"Username" : "Nombre de usuario",
"Password" : "Contraseña",
- "Root" : "Raíz",
+ "Remote subfolder" : "Subcarpeta remota",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "ID de Cliente",
"Client secret" : "Cliente secreto",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Nombre de Usuario como compartir",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Subcarpeta remota",
"Access granted" : "Acceso concedido",
"Error configuring Dropbox storage" : "Error configurando el almacenamiento de Dropbox",
"Grant access" : "Conceder acceso",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(grupo)",
"Saved" : "Guardado",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "y",
+ "and" : "y",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
- "You don't have any external storages" : "Usted no tiene ningún almacenamiento externo",
+ "No external storages configured" : "No hay almacenamientos externos configurados",
+ "You can configure external storages in the personal settings" : "Puede configurar almacenamientos externos en su configuración personal",
"Name" : "Nombre",
"Storage type" : "Tipo de almacenamiento",
"Scope" : "Ámbito",
diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json
index 1d9067106eb..4f2c206da8e 100644
--- a/apps/files_external/l10n/es.json
+++ b/apps/files_external/l10n/es.json
@@ -1,6 +1,6 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la llave y el secreto de su app Dropbox es correcta.",
- "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens de acceso ha fallado. Verifique que la llave y el secreto de su app Dropbox es correcta.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens de acceso ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.",
"Please provide a valid Dropbox app key and secret." : "Por favor, proporcione un una clave válida de la app Dropbox y una clave secreta.",
"Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s",
"Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s",
@@ -24,7 +24,7 @@
"Host" : "Servidor",
"Username" : "Nombre de usuario",
"Password" : "Contraseña",
- "Root" : "Raíz",
+ "Remote subfolder" : "Subcarpeta remota",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "ID de Cliente",
"Client secret" : "Cliente secreto",
@@ -41,7 +41,6 @@
"Username as share" : "Nombre de Usuario como compartir",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Subcarpeta remota",
"Access granted" : "Acceso concedido",
"Error configuring Dropbox storage" : "Error configurando el almacenamiento de Dropbox",
"Grant access" : "Conceder acceso",
@@ -52,11 +51,12 @@
"(group)" : "(grupo)",
"Saved" : "Guardado",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "y",
+ "and" : "y",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador de sistema que lo instale.",
- "You don't have any external storages" : "Usted no tiene ningún almacenamiento externo",
+ "No external storages configured" : "No hay almacenamientos externos configurados",
+ "You can configure external storages in the personal settings" : "Puede configurar almacenamientos externos en su configuración personal",
"Name" : "Nombre",
"Storage type" : "Tipo de almacenamiento",
"Scope" : "Ámbito",
diff --git a/apps/files_external/l10n/et_EE.js b/apps/files_external/l10n/et_EE.js
index 226190cb5f8..07bdfa7cdd3 100644
--- a/apps/files_external/l10n/et_EE.js
+++ b/apps/files_external/l10n/et_EE.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Kasutajanimi",
"Password" : "Parool",
- "Root" : "Juur",
+ "Remote subfolder" : "Mujahl olev alamkaust",
"Secure ftps://" : "Turvaline ftps://",
"Client ID" : "Kliendi ID",
"Client secret" : "Kliendi salasõna",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Kasutajanimi kui jagamine",
"URL" : "URL",
"Secure https://" : "Turvaline https://",
- "Remote subfolder" : "Mujahl olev alamkaust",
"Access granted" : "Ligipääs on antud",
"Error configuring Dropbox storage" : "Viga Dropboxi salvestusruumi seadistamisel",
"Grant access" : "Anna ligipääs",
@@ -54,11 +53,9 @@ OC.L10N.register(
"(group)" : "(grupp)",
"Saved" : "Salvestatud",
"<b>Note:</b> " : "<b>Märkus:</b>",
- " and " : "ja",
"<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>Märkus:</b> cURL tugi puudub PHP paigalduses. FTP %s hoidla ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata cURL tugi.",
"<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>Märkus:</b> FTP tugi puudub PHP paigalduses. FTP %s hoidla ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata FTP tugi.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Märkus:</b> \"%s\" pole paigaldatud. Hoidla %s ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata vajalik tugi.",
- "You don't have any external storages" : "Sul pole ühtegi välist andmehoidlat",
"Name" : "Nimi",
"Storage type" : "Andmehoidla tüüp",
"Scope" : "Skoop",
diff --git a/apps/files_external/l10n/et_EE.json b/apps/files_external/l10n/et_EE.json
index a32eca9e8c2..11592f9e9a7 100644
--- a/apps/files_external/l10n/et_EE.json
+++ b/apps/files_external/l10n/et_EE.json
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Kasutajanimi",
"Password" : "Parool",
- "Root" : "Juur",
+ "Remote subfolder" : "Mujahl olev alamkaust",
"Secure ftps://" : "Turvaline ftps://",
"Client ID" : "Kliendi ID",
"Client secret" : "Kliendi salasõna",
@@ -41,7 +41,6 @@
"Username as share" : "Kasutajanimi kui jagamine",
"URL" : "URL",
"Secure https://" : "Turvaline https://",
- "Remote subfolder" : "Mujahl olev alamkaust",
"Access granted" : "Ligipääs on antud",
"Error configuring Dropbox storage" : "Viga Dropboxi salvestusruumi seadistamisel",
"Grant access" : "Anna ligipääs",
@@ -52,11 +51,9 @@
"(group)" : "(grupp)",
"Saved" : "Salvestatud",
"<b>Note:</b> " : "<b>Märkus:</b>",
- " and " : "ja",
"<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>Märkus:</b> cURL tugi puudub PHP paigalduses. FTP %s hoidla ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata cURL tugi.",
"<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>Märkus:</b> FTP tugi puudub PHP paigalduses. FTP %s hoidla ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata FTP tugi.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Märkus:</b> \"%s\" pole paigaldatud. Hoidla %s ühendamine pole võimalik. Palu oma süsteemihalduril paigaldata vajalik tugi.",
- "You don't have any external storages" : "Sul pole ühtegi välist andmehoidlat",
"Name" : "Nimi",
"Storage type" : "Andmehoidla tüüp",
"Scope" : "Skoop",
diff --git a/apps/files_external/l10n/eu.js b/apps/files_external/l10n/eu.js
index db535359491..8da8ca68263 100644
--- a/apps/files_external/l10n/eu.js
+++ b/apps/files_external/l10n/eu.js
@@ -25,7 +25,7 @@ OC.L10N.register(
"Host" : "Ostalaria",
"Username" : "Erabiltzaile izena",
"Password" : "Pasahitza",
- "Root" : "Erroa",
+ "Remote subfolder" : "Urruneko azpikarpeta",
"Secure ftps://" : "ftps:// segurua",
"Client ID" : "Bezero ID",
"Client secret" : "Bezeroaren Sekretua",
@@ -42,7 +42,6 @@ OC.L10N.register(
"Username as share" : "Erabiltzaile izena elkarbanaketa bezala",
"URL" : "URL",
"Secure https://" : "https:// segurua",
- "Remote subfolder" : "Urruneko azpikarpeta",
"Access granted" : "Sarrera baimendua",
"Error configuring Dropbox storage" : "Errore bat egon da Dropbox biltegiratzea konfiguratzean",
"Grant access" : "Baimendu sarrera",
@@ -53,11 +52,9 @@ OC.L10N.register(
"(group)" : "(taldea)",
"Saved" : "Gordeta",
"<b>Note:</b> " : "<b>Oharra:</b>",
- " and " : "eta",
"<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>Oharra:</b> :PHPko cURL euskarria ez dago instalatuta edo gaitua. Ezinezko da %s muntatzea. Mesedez eskatu sistema administratzaleari instala dezan. ",
"<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>Oharra:</b> :PHPko FTP euskarria ez dago instalatuta edo gaitua. Ezinezko da %s muntatzea. Mesedez eskatu sistema administratzaleari instala dezan. ",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Oharra:</b>\"%s\" euskarria ez dago instalatuta Ezinezko da %s muntatzea. Mesedez eskatu sistema administratzaleari instala dezan. ",
- "You don't have any external storages" : "Ez duzu kanpoko biltegiratzerik",
"Name" : "Izena",
"Storage type" : "Biltegiratze mota",
"External Storage" : "Kanpoko biltegiratzea",
diff --git a/apps/files_external/l10n/eu.json b/apps/files_external/l10n/eu.json
index a5c642bd772..7ae84c8dbd3 100644
--- a/apps/files_external/l10n/eu.json
+++ b/apps/files_external/l10n/eu.json
@@ -23,7 +23,7 @@
"Host" : "Ostalaria",
"Username" : "Erabiltzaile izena",
"Password" : "Pasahitza",
- "Root" : "Erroa",
+ "Remote subfolder" : "Urruneko azpikarpeta",
"Secure ftps://" : "ftps:// segurua",
"Client ID" : "Bezero ID",
"Client secret" : "Bezeroaren Sekretua",
@@ -40,7 +40,6 @@
"Username as share" : "Erabiltzaile izena elkarbanaketa bezala",
"URL" : "URL",
"Secure https://" : "https:// segurua",
- "Remote subfolder" : "Urruneko azpikarpeta",
"Access granted" : "Sarrera baimendua",
"Error configuring Dropbox storage" : "Errore bat egon da Dropbox biltegiratzea konfiguratzean",
"Grant access" : "Baimendu sarrera",
@@ -51,11 +50,9 @@
"(group)" : "(taldea)",
"Saved" : "Gordeta",
"<b>Note:</b> " : "<b>Oharra:</b>",
- " and " : "eta",
"<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>Oharra:</b> :PHPko cURL euskarria ez dago instalatuta edo gaitua. Ezinezko da %s muntatzea. Mesedez eskatu sistema administratzaleari instala dezan. ",
"<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>Oharra:</b> :PHPko FTP euskarria ez dago instalatuta edo gaitua. Ezinezko da %s muntatzea. Mesedez eskatu sistema administratzaleari instala dezan. ",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Oharra:</b>\"%s\" euskarria ez dago instalatuta Ezinezko da %s muntatzea. Mesedez eskatu sistema administratzaleari instala dezan. ",
- "You don't have any external storages" : "Ez duzu kanpoko biltegiratzerik",
"Name" : "Izena",
"Storage type" : "Biltegiratze mota",
"External Storage" : "Kanpoko biltegiratzea",
diff --git a/apps/files_external/l10n/fi.js b/apps/files_external/l10n/fi.js
new file mode 100644
index 00000000000..eaa9b89fc04
--- /dev/null
+++ b/apps/files_external/l10n/fi.js
@@ -0,0 +1,9 @@
+OC.L10N.register(
+ "files_external",
+ {
+ "Username" : "Käyttäjätunnus",
+ "Password" : "Salasana",
+ "URL" : "URL",
+ "Delete" : "Poista"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/fi.json b/apps/files_external/l10n/fi.json
new file mode 100644
index 00000000000..8a702552ca1
--- /dev/null
+++ b/apps/files_external/l10n/fi.json
@@ -0,0 +1,7 @@
+{ "translations": {
+ "Username" : "Käyttäjätunnus",
+ "Password" : "Salasana",
+ "URL" : "URL",
+ "Delete" : "Poista"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js
index f7895f842c3..a6fb4c7b6b3 100644
--- a/apps/files_external/l10n/fi_FI.js
+++ b/apps/files_external/l10n/fi_FI.js
@@ -16,9 +16,11 @@ OC.L10N.register(
"Host" : "Isäntä",
"Username" : "Käyttäjätunnus",
"Password" : "Salasana",
+ "Remote subfolder" : "Etäalikansio",
"Secure ftps://" : "Salattu ftps://",
"Timeout of HTTP requests in seconds" : "HTTP-pyyntöjen aikakatkaisu sekunneissa",
"Share" : "Jaa",
+ "Username as share" : "Käyttäjänimi jakona",
"URL" : "Verkko-osoite",
"Secure https://" : "Salattu https://",
"Access granted" : "Pääsy sallittu",
@@ -31,11 +33,12 @@ OC.L10N.register(
"(group)" : "(ryhmä)",
"Saved" : "Tallennettu",
"<b>Note:</b> " : "<b>Huomio:</b> ",
- " and " : "ja",
+ "and" : "ja",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.",
- "You don't have any external storages" : "Käytössäsi ei ole erillisiä tallennustiloja",
+ "No external storages configured" : "Erillisiä tallennusvälineitä ei ole määritelty",
+ "You can configure external storages in the personal settings" : "Voit määrittää erillisten tallennustilojen asetukset henkilökohtaisissa asetuksissasi",
"Name" : "Nimi",
"Storage type" : "Tallennustilan tyyppi",
"External Storage" : "Erillinen tallennusväline",
diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json
index dad235128fb..3f0465db07f 100644
--- a/apps/files_external/l10n/fi_FI.json
+++ b/apps/files_external/l10n/fi_FI.json
@@ -14,9 +14,11 @@
"Host" : "Isäntä",
"Username" : "Käyttäjätunnus",
"Password" : "Salasana",
+ "Remote subfolder" : "Etäalikansio",
"Secure ftps://" : "Salattu ftps://",
"Timeout of HTTP requests in seconds" : "HTTP-pyyntöjen aikakatkaisu sekunneissa",
"Share" : "Jaa",
+ "Username as share" : "Käyttäjänimi jakona",
"URL" : "Verkko-osoite",
"Secure https://" : "Salattu https://",
"Access granted" : "Pääsy sallittu",
@@ -29,11 +31,12 @@
"(group)" : "(ryhmä)",
"Saved" : "Tallennettu",
"<b>Note:</b> " : "<b>Huomio:</b> ",
- " and " : "ja",
+ "and" : "ja",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.",
- "You don't have any external storages" : "Käytössäsi ei ole erillisiä tallennustiloja",
+ "No external storages configured" : "Erillisiä tallennusvälineitä ei ole määritelty",
+ "You can configure external storages in the personal settings" : "Voit määrittää erillisten tallennustilojen asetukset henkilökohtaisissa asetuksissasi",
"Name" : "Nimi",
"Storage type" : "Tallennustilan tyyppi",
"External Storage" : "Erillinen tallennusväline",
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index bdaf0a19b01..f88e0134a17 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -4,8 +4,8 @@ OC.L10N.register(
"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La récupération des jetons d’authentification a échoué. Veuillez vérifier votre clé d'application Dropbox ainsi que le mot de passe.",
"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La requête d’accès aux jetons d’authentification a échoué. Veuillez vérifier votre App-Key Dropbox ainsi que le mot de passe.",
"Please provide a valid Dropbox app key and secret." : "Veuillez fournir une clé d'application (app key) ainsi qu'un mot de passe valides.",
- "Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur: %s",
- "Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur: %s",
+ "Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur : %s",
+ "Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur : %s",
"External storage" : "Stockage externe",
"Local" : "Local",
"Location" : "Emplacement",
@@ -26,8 +26,8 @@ OC.L10N.register(
"Host" : "Hôte",
"Username" : "Nom d'utilisateur",
"Password" : "Mot de passe",
- "Root" : "Root",
- "Secure ftps://" : "Sécuriser via ftps://",
+ "Remote subfolder" : "Sous-dossier distant",
+ "Secure ftps://" : "Sécurisation ftps://",
"Client ID" : "ID Client",
"Client secret" : "Secret client",
"OpenStack Object Storage" : "Object de Stockage OpenStack",
@@ -43,22 +43,21 @@ OC.L10N.register(
"Username as share" : "Nom d'utilisateur du partage",
"URL" : "URL",
"Secure https://" : "Sécurisation https://",
- "Remote subfolder" : "Sous-dossier distant",
"Access granted" : "Accès autorisé",
"Error configuring Dropbox storage" : "Erreur lors de la configuration du support de stockage Dropbox",
"Grant access" : "Autoriser l'accès",
"Error configuring Google Drive storage" : "Erreur lors de la configuration du support de stockage Google Drive",
"Personal" : "Personnel",
"System" : "Système",
- "All users. Type to select user or group." : "Tous les utilisateurs. Commencez à saisir pour sélectionner un utilisateur ou un groupe.",
+ "All users. Type to select user or group." : "Tous les utilisateurs. Cliquez ici pour restreindre.",
"(group)" : "(groupe)",
"Saved" : "Sauvegarder",
"<b>Note:</b> " : "<b>Attention :</b>",
- " and " : "et",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> Le support de cURL de PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> Le support FTP de PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
+ "and" : " et ",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "You don't have any external storages" : "Vous n'avez pas de support de stockage externe",
+ "You can configure external storages in the personal settings" : "Vous pouvez configurer vos stockages externes dans les paramètres personnels.",
"Name" : "Nom",
"Storage type" : "Type de support de stockage",
"Scope" : "Portée",
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index e9f1c91b30d..77f810ba5c2 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -2,8 +2,8 @@
"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La récupération des jetons d’authentification a échoué. Veuillez vérifier votre clé d'application Dropbox ainsi que le mot de passe.",
"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La requête d’accès aux jetons d’authentification a échoué. Veuillez vérifier votre App-Key Dropbox ainsi que le mot de passe.",
"Please provide a valid Dropbox app key and secret." : "Veuillez fournir une clé d'application (app key) ainsi qu'un mot de passe valides.",
- "Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur: %s",
- "Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur: %s",
+ "Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur : %s",
+ "Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur : %s",
"External storage" : "Stockage externe",
"Local" : "Local",
"Location" : "Emplacement",
@@ -24,8 +24,8 @@
"Host" : "Hôte",
"Username" : "Nom d'utilisateur",
"Password" : "Mot de passe",
- "Root" : "Root",
- "Secure ftps://" : "Sécuriser via ftps://",
+ "Remote subfolder" : "Sous-dossier distant",
+ "Secure ftps://" : "Sécurisation ftps://",
"Client ID" : "ID Client",
"Client secret" : "Secret client",
"OpenStack Object Storage" : "Object de Stockage OpenStack",
@@ -41,22 +41,21 @@
"Username as share" : "Nom d'utilisateur du partage",
"URL" : "URL",
"Secure https://" : "Sécurisation https://",
- "Remote subfolder" : "Sous-dossier distant",
"Access granted" : "Accès autorisé",
"Error configuring Dropbox storage" : "Erreur lors de la configuration du support de stockage Dropbox",
"Grant access" : "Autoriser l'accès",
"Error configuring Google Drive storage" : "Erreur lors de la configuration du support de stockage Google Drive",
"Personal" : "Personnel",
"System" : "Système",
- "All users. Type to select user or group." : "Tous les utilisateurs. Commencez à saisir pour sélectionner un utilisateur ou un groupe.",
+ "All users. Type to select user or group." : "Tous les utilisateurs. Cliquez ici pour restreindre.",
"(group)" : "(groupe)",
"Saved" : "Sauvegarder",
"<b>Note:</b> " : "<b>Attention :</b>",
- " and " : "et",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> Le support de cURL de PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> Le support FTP de PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
+ "and" : " et ",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "You don't have any external storages" : "Vous n'avez pas de support de stockage externe",
+ "You can configure external storages in the personal settings" : "Vous pouvez configurer vos stockages externes dans les paramètres personnels.",
"Name" : "Nom",
"Storage type" : "Type de support de stockage",
"Scope" : "Portée",
diff --git a/apps/files_external/l10n/gl.js b/apps/files_external/l10n/gl.js
index 0ff342e958d..96cfb314a10 100644
--- a/apps/files_external/l10n/gl.js
+++ b/apps/files_external/l10n/gl.js
@@ -18,7 +18,7 @@ OC.L10N.register(
"Secret Key" : "Clave secreta",
"Hostname" : "Nome de máquina",
"Port" : "Porto",
- "Region" : "Autonomía",
+ "Region" : "Rexión",
"Enable SSL" : "Activar SSL",
"Enable Path Style" : "Activar o estilo de ruta",
"App key" : "Clave da API",
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Servidor",
"Username" : "Nome de usuario",
"Password" : "Contrasinal",
- "Root" : "Root (raíz)",
+ "Remote subfolder" : "Subcartafol remoto",
"Secure ftps://" : "ftps:// seguro",
"Client ID" : "ID do cliente",
"Client secret" : "Secreto do cliente",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Nome de usuario como compartición",
"URL" : "URL",
"Secure https://" : "https:// seguro",
- "Remote subfolder" : "Subcartafol remoto",
"Access granted" : "Concedeuse acceso",
"Error configuring Dropbox storage" : "Produciuse un erro ao configurar o almacenamento en Dropbox",
"Grant access" : "Permitir o acceso",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(grupo)",
"Saved" : "Gardado",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> A compatibilidade de cURL en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> A compatibilidade de FTP en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> «%s» non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
- "You don't have any external storages" : "Non ten ningún almacenamento externo",
+ "No external storages configured" : "Non hai un almacenamento externo configurado",
+ "You can configure external storages in the personal settings" : "Ten que configurar o almacenamento externo nos axustes persoais",
"Name" : "Nome",
"Storage type" : "Tipo de almacenamento",
"Scope" : "Ámbito",
diff --git a/apps/files_external/l10n/gl.json b/apps/files_external/l10n/gl.json
index 549de28f928..918233634f4 100644
--- a/apps/files_external/l10n/gl.json
+++ b/apps/files_external/l10n/gl.json
@@ -16,7 +16,7 @@
"Secret Key" : "Clave secreta",
"Hostname" : "Nome de máquina",
"Port" : "Porto",
- "Region" : "Autonomía",
+ "Region" : "Rexión",
"Enable SSL" : "Activar SSL",
"Enable Path Style" : "Activar o estilo de ruta",
"App key" : "Clave da API",
@@ -24,7 +24,7 @@
"Host" : "Servidor",
"Username" : "Nome de usuario",
"Password" : "Contrasinal",
- "Root" : "Root (raíz)",
+ "Remote subfolder" : "Subcartafol remoto",
"Secure ftps://" : "ftps:// seguro",
"Client ID" : "ID do cliente",
"Client secret" : "Secreto do cliente",
@@ -41,7 +41,6 @@
"Username as share" : "Nome de usuario como compartición",
"URL" : "URL",
"Secure https://" : "https:// seguro",
- "Remote subfolder" : "Subcartafol remoto",
"Access granted" : "Concedeuse acceso",
"Error configuring Dropbox storage" : "Produciuse un erro ao configurar o almacenamento en Dropbox",
"Grant access" : "Permitir o acceso",
@@ -52,11 +51,12 @@
"(group)" : "(grupo)",
"Saved" : "Gardado",
"<b>Note:</b> " : "<b>Nota:</b> ",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> A compatibilidade de cURL en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> A compatibilidade de FTP en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> «%s» non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.",
- "You don't have any external storages" : "Non ten ningún almacenamento externo",
+ "No external storages configured" : "Non hai un almacenamento externo configurado",
+ "You can configure external storages in the personal settings" : "Ten que configurar o almacenamento externo nos axustes persoais",
"Name" : "Nome",
"Storage type" : "Tipo de almacenamento",
"Scope" : "Ámbito",
diff --git a/apps/files_external/l10n/hr.js b/apps/files_external/l10n/hr.js
index c166841d9c6..37193bceeb0 100644
--- a/apps/files_external/l10n/hr.js
+++ b/apps/files_external/l10n/hr.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Glavno računalo",
"Username" : "Korisničko ime",
"Password" : "Lozinka",
- "Root" : "Korijen",
+ "Remote subfolder" : "Udaljena podmapa",
"Secure ftps://" : "Sigurni ftps://",
"Client ID" : "ID klijenta",
"Client secret" : "Klijentski tajni ključ",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Korisničko ime kao dijeljeni resurs",
"URL" : "URL",
"Secure https://" : "Siguran https://",
- "Remote subfolder" : "Udaljena podmapa",
"Access granted" : "Pristup odobren",
"Error configuring Dropbox storage" : "Pogreška pri konfiguriranju spremišta u zajedničkoj mrežnoj mapi",
"Grant access" : "Dodijeli pristup",
@@ -54,11 +53,9 @@ OC.L10N.register(
"(group)" : "(grupa)",
"Saved" : "Spremljeno",
"<b>Note:</b> " : "<b>Bilješka:</b>",
- " and " : " i ",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> Podrška cURL u PHP nije omogućena ili nije instalirana. Postavljanje%s nije moguće. Molimo zamolite svog administratora sustava da je instalira.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> Podrška FTP u PHP nije omogućena ili nije instalirana. Postavljanje%s nije moguće. Molimo zamolite svotg administratora sustava da je instalira.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" nije instaliran. Postavljanje %s nije moguće. Molimo zamolitesvog administratora sustava da ga instalira.",
- "You don't have any external storages" : "Vi nemate nikakvo vanjsko spremište",
"Name" : "Naziv",
"Storage type" : "Vrsta spremišta",
"Scope" : "Opseg",
diff --git a/apps/files_external/l10n/hr.json b/apps/files_external/l10n/hr.json
index 069af3fa6c8..04e6c778538 100644
--- a/apps/files_external/l10n/hr.json
+++ b/apps/files_external/l10n/hr.json
@@ -24,7 +24,7 @@
"Host" : "Glavno računalo",
"Username" : "Korisničko ime",
"Password" : "Lozinka",
- "Root" : "Korijen",
+ "Remote subfolder" : "Udaljena podmapa",
"Secure ftps://" : "Sigurni ftps://",
"Client ID" : "ID klijenta",
"Client secret" : "Klijentski tajni ključ",
@@ -41,7 +41,6 @@
"Username as share" : "Korisničko ime kao dijeljeni resurs",
"URL" : "URL",
"Secure https://" : "Siguran https://",
- "Remote subfolder" : "Udaljena podmapa",
"Access granted" : "Pristup odobren",
"Error configuring Dropbox storage" : "Pogreška pri konfiguriranju spremišta u zajedničkoj mrežnoj mapi",
"Grant access" : "Dodijeli pristup",
@@ -52,11 +51,9 @@
"(group)" : "(grupa)",
"Saved" : "Spremljeno",
"<b>Note:</b> " : "<b>Bilješka:</b>",
- " and " : " i ",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> Podrška cURL u PHP nije omogućena ili nije instalirana. Postavljanje%s nije moguće. Molimo zamolite svog administratora sustava da je instalira.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> Podrška FTP u PHP nije omogućena ili nije instalirana. Postavljanje%s nije moguće. Molimo zamolite svotg administratora sustava da je instalira.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" nije instaliran. Postavljanje %s nije moguće. Molimo zamolitesvog administratora sustava da ga instalira.",
- "You don't have any external storages" : "Vi nemate nikakvo vanjsko spremište",
"Name" : "Naziv",
"Storage type" : "Vrsta spremišta",
"Scope" : "Opseg",
diff --git a/apps/files_external/l10n/hu_HU.js b/apps/files_external/l10n/hu_HU.js
index bf2e0badb20..7ec61b91943 100644
--- a/apps/files_external/l10n/hu_HU.js
+++ b/apps/files_external/l10n/hu_HU.js
@@ -5,23 +5,45 @@ OC.L10N.register(
"External storage" : "Külső tárolók",
"Local" : "Helyi",
"Location" : "Hely",
+ "Amazon S3" : "Amazon S3",
+ "Key" : "Kulcs",
+ "Secret" : "Titkos",
+ "Bucket" : "Bucket",
+ "Amazon S3 and compliant" : "Amazon S3-mal kompatibilisek",
+ "Access Key" : "Hozzáférési kulcs",
+ "Secret Key" : "Titkos kulcs",
+ "Hostname" : "Hosztnév",
"Port" : "Port",
"Region" : "Megye",
+ "Enable SSL" : "SSL engedélyezése",
+ "App key" : "App kulcs",
+ "App secret" : "App titkos kulcs",
"Host" : "Kiszolgáló",
"Username" : "Felhasználónév",
"Password" : "Jelszó",
+ "Remote subfolder" : "Távoli alkönyvtár",
+ "Secure ftps://" : "Biztonságos ftps://",
+ "Timeout of HTTP requests in seconds" : "A HTTP-kérés időkorlátja másodpercben",
"Share" : "Megosztás",
+ "Username as share" : "Felhasználónév és megosztás",
"URL" : "URL",
+ "Secure https://" : "Biztonságos https://",
"Access granted" : "Érvényes hozzáférés",
"Error configuring Dropbox storage" : "A Dropbox tárolót nem sikerült beállítani",
"Grant access" : "Megadom a hozzáférést",
"Error configuring Google Drive storage" : "A Google Drive tárolót nem sikerült beállítani",
"Personal" : "Személyes",
+ "System" : "Rendszer",
+ "(group)" : "(csoport)",
"Saved" : "Elmentve",
+ "<b>Note:</b> " : "<b>Megjegyzés:</b>",
+ "and" : "és",
"Name" : "Név",
+ "Storage type" : "Tároló típusa",
"External Storage" : "Külső tárolási szolgáltatások becsatolása",
"Folder name" : "Mappanév",
"Configuration" : "Beállítások",
+ "Available for" : "Elérhető számukra",
"Add storage" : "Tároló becsatolása",
"Delete" : "Törlés",
"Enable User External Storage" : "Külső tárolók engedélyezése a felhasználók részére"
diff --git a/apps/files_external/l10n/hu_HU.json b/apps/files_external/l10n/hu_HU.json
index 430188e2144..f8160e2eebf 100644
--- a/apps/files_external/l10n/hu_HU.json
+++ b/apps/files_external/l10n/hu_HU.json
@@ -3,23 +3,45 @@
"External storage" : "Külső tárolók",
"Local" : "Helyi",
"Location" : "Hely",
+ "Amazon S3" : "Amazon S3",
+ "Key" : "Kulcs",
+ "Secret" : "Titkos",
+ "Bucket" : "Bucket",
+ "Amazon S3 and compliant" : "Amazon S3-mal kompatibilisek",
+ "Access Key" : "Hozzáférési kulcs",
+ "Secret Key" : "Titkos kulcs",
+ "Hostname" : "Hosztnév",
"Port" : "Port",
"Region" : "Megye",
+ "Enable SSL" : "SSL engedélyezése",
+ "App key" : "App kulcs",
+ "App secret" : "App titkos kulcs",
"Host" : "Kiszolgáló",
"Username" : "Felhasználónév",
"Password" : "Jelszó",
+ "Remote subfolder" : "Távoli alkönyvtár",
+ "Secure ftps://" : "Biztonságos ftps://",
+ "Timeout of HTTP requests in seconds" : "A HTTP-kérés időkorlátja másodpercben",
"Share" : "Megosztás",
+ "Username as share" : "Felhasználónév és megosztás",
"URL" : "URL",
+ "Secure https://" : "Biztonságos https://",
"Access granted" : "Érvényes hozzáférés",
"Error configuring Dropbox storage" : "A Dropbox tárolót nem sikerült beállítani",
"Grant access" : "Megadom a hozzáférést",
"Error configuring Google Drive storage" : "A Google Drive tárolót nem sikerült beállítani",
"Personal" : "Személyes",
+ "System" : "Rendszer",
+ "(group)" : "(csoport)",
"Saved" : "Elmentve",
+ "<b>Note:</b> " : "<b>Megjegyzés:</b>",
+ "and" : "és",
"Name" : "Név",
+ "Storage type" : "Tároló típusa",
"External Storage" : "Külső tárolási szolgáltatások becsatolása",
"Folder name" : "Mappanév",
"Configuration" : "Beállítások",
+ "Available for" : "Elérhető számukra",
"Add storage" : "Tároló becsatolása",
"Delete" : "Törlés",
"Enable User External Storage" : "Külső tárolók engedélyezése a felhasználók részére"
diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js
index 4673da66543..590bc3b34d5 100644
--- a/apps/files_external/l10n/id.js
+++ b/apps/files_external/l10n/id.js
@@ -1,32 +1,64 @@
OC.L10N.register(
"files_external",
{
- "Please provide a valid Dropbox app key and secret." : "Masukkan kunci dan sandi aplikasi Dropbox yang benar.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Permintaan untuk mengambil token gagal. Pastikan kunci dan rahasia apl Dropbox Anda sudah benar.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Akses untuk mengambil token gagal. Pastikan kunci dan rahasia apl Dropbox Anda sudah benar.",
+ "Please provide a valid Dropbox app key and secret." : "Masukkan kunci dan rahasia aplikasi Dropbox yang benar.",
+ "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s",
+ "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s",
"External storage" : "Penyimpanan eksternal",
"Local" : "Lokal",
"Location" : "lokasi",
"Amazon S3" : "Amazon S3",
- "Port" : "port",
- "Region" : "daerah",
+ "Key" : "Kunci",
+ "Secret" : "Rahasia",
+ "Bucket" : "Keranjang",
+ "Amazon S3 and compliant" : "Amazon S3 dan yang sesuai",
+ "Access Key" : "Kunci Akses",
+ "Secret Key" : "Kunci Rahasia",
+ "Hostname" : "Nama Host",
+ "Port" : "Port",
+ "Region" : "Daerah",
"Enable SSL" : "Aktifkan SSL",
+ "Enable Path Style" : "Aktifkan Gaya Path",
+ "App key" : "Kunci Apl",
+ "App secret" : "Rahasia Apl",
"Host" : "Host",
"Username" : "Nama Pengguna",
"Password" : "Sandi",
- "Root" : "Root",
+ "Remote subfolder" : "Subfolder remote",
+ "Secure ftps://" : "Secure ftps://",
+ "Client ID" : "ID Klien",
+ "Client secret" : "Rahasia klien",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Region (optional for OpenStack Object Storage)" : "Daerah (tambahan untuk OpenStack Object Storage)",
+ "API Key (required for Rackspace Cloud Files)" : "Kunci API (diperlukan untuk Rackspace Cloud Files)",
+ "Tenantname (required for OpenStack Object Storage)" : "Tenantname (diperlukan untuk OpenStack Object Storage)",
+ "Password (required for OpenStack Object Storage)" : "Sandi (diperlukan untuk OpenStack Object Storage)",
+ "Service Name (required for OpenStack Object Storage)" : "Nama Layanan (diperlukan untuk OpenStack Object Storage)",
+ "URL of identity endpoint (required for OpenStack Object Storage)" : "URL of identity endpoint (diperlukan untuk OpenStack Object Storage)",
+ "Timeout of HTTP requests in seconds" : "Batas waktu permintaan HTTP dalam detik",
"Share" : "Bagikan",
- "URL" : "tautan",
+ "SMB / CIFS using OC login" : "SMB / CIFS menggunakan OC login",
+ "Username as share" : "Nama pengguna berbagi",
+ "URL" : "URL",
+ "Secure https://" : "Secure https://",
"Access granted" : "Akses diberikan",
"Error configuring Dropbox storage" : "Kesalahan dalam mengonfigurasi penyimpanan Dropbox",
"Grant access" : "Berikan hak akses",
"Error configuring Google Drive storage" : "Kesalahan dalam mengkonfigurasi penyimpanan Google Drive",
"Personal" : "Pribadi",
+ "System" : "Sistem",
+ "All users. Type to select user or group." : "Semua pengguna. Ketik untuk memilih pengguna atau grup.",
+ "(group)" : "(grup)",
"Saved" : "Disimpan",
"<b>Note:</b> " : "<b>Catatan:</b> ",
- " and " : "dan",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan tanyakan ke administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan tanyakan ke administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan tanyakan ke administrator sistem Anda untuk menginstalnya.",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
"Name" : "Nama",
+ "Storage type" : "Tipe penyimpanan",
+ "Scope" : "Skop",
"External Storage" : "Penyimpanan Eksternal",
"Folder name" : "Nama folder",
"Configuration" : "Konfigurasi",
diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json
index 067f79b2a20..f77d87cacb2 100644
--- a/apps/files_external/l10n/id.json
+++ b/apps/files_external/l10n/id.json
@@ -1,30 +1,62 @@
{ "translations": {
- "Please provide a valid Dropbox app key and secret." : "Masukkan kunci dan sandi aplikasi Dropbox yang benar.",
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Permintaan untuk mengambil token gagal. Pastikan kunci dan rahasia apl Dropbox Anda sudah benar.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Akses untuk mengambil token gagal. Pastikan kunci dan rahasia apl Dropbox Anda sudah benar.",
+ "Please provide a valid Dropbox app key and secret." : "Masukkan kunci dan rahasia aplikasi Dropbox yang benar.",
+ "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s",
+ "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s",
"External storage" : "Penyimpanan eksternal",
"Local" : "Lokal",
"Location" : "lokasi",
"Amazon S3" : "Amazon S3",
- "Port" : "port",
- "Region" : "daerah",
+ "Key" : "Kunci",
+ "Secret" : "Rahasia",
+ "Bucket" : "Keranjang",
+ "Amazon S3 and compliant" : "Amazon S3 dan yang sesuai",
+ "Access Key" : "Kunci Akses",
+ "Secret Key" : "Kunci Rahasia",
+ "Hostname" : "Nama Host",
+ "Port" : "Port",
+ "Region" : "Daerah",
"Enable SSL" : "Aktifkan SSL",
+ "Enable Path Style" : "Aktifkan Gaya Path",
+ "App key" : "Kunci Apl",
+ "App secret" : "Rahasia Apl",
"Host" : "Host",
"Username" : "Nama Pengguna",
"Password" : "Sandi",
- "Root" : "Root",
+ "Remote subfolder" : "Subfolder remote",
+ "Secure ftps://" : "Secure ftps://",
+ "Client ID" : "ID Klien",
+ "Client secret" : "Rahasia klien",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Region (optional for OpenStack Object Storage)" : "Daerah (tambahan untuk OpenStack Object Storage)",
+ "API Key (required for Rackspace Cloud Files)" : "Kunci API (diperlukan untuk Rackspace Cloud Files)",
+ "Tenantname (required for OpenStack Object Storage)" : "Tenantname (diperlukan untuk OpenStack Object Storage)",
+ "Password (required for OpenStack Object Storage)" : "Sandi (diperlukan untuk OpenStack Object Storage)",
+ "Service Name (required for OpenStack Object Storage)" : "Nama Layanan (diperlukan untuk OpenStack Object Storage)",
+ "URL of identity endpoint (required for OpenStack Object Storage)" : "URL of identity endpoint (diperlukan untuk OpenStack Object Storage)",
+ "Timeout of HTTP requests in seconds" : "Batas waktu permintaan HTTP dalam detik",
"Share" : "Bagikan",
- "URL" : "tautan",
+ "SMB / CIFS using OC login" : "SMB / CIFS menggunakan OC login",
+ "Username as share" : "Nama pengguna berbagi",
+ "URL" : "URL",
+ "Secure https://" : "Secure https://",
"Access granted" : "Akses diberikan",
"Error configuring Dropbox storage" : "Kesalahan dalam mengonfigurasi penyimpanan Dropbox",
"Grant access" : "Berikan hak akses",
"Error configuring Google Drive storage" : "Kesalahan dalam mengkonfigurasi penyimpanan Google Drive",
"Personal" : "Pribadi",
+ "System" : "Sistem",
+ "All users. Type to select user or group." : "Semua pengguna. Ketik untuk memilih pengguna atau grup.",
+ "(group)" : "(grup)",
"Saved" : "Disimpan",
"<b>Note:</b> " : "<b>Catatan:</b> ",
- " and " : "dan",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan tanyakan ke administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan tanyakan ke administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan tanyakan ke administrator sistem Anda untuk menginstalnya.",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
"Name" : "Nama",
+ "Storage type" : "Tipe penyimpanan",
+ "Scope" : "Skop",
"External Storage" : "Penyimpanan Eksternal",
"Folder name" : "Nama folder",
"Configuration" : "Konfigurasi",
diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js
index 5834ff25f0b..f882caa5002 100644
--- a/apps/files_external/l10n/it.js
+++ b/apps/files_external/l10n/it.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Nome utente",
"Password" : "Password",
- "Root" : "Radice",
+ "Remote subfolder" : "Sottocartella remota",
"Secure ftps://" : "Sicuro ftps://",
"Client ID" : "ID client",
"Client secret" : "Segreto del client",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Nome utente come condivisione",
"URL" : "URL",
"Secure https://" : "Sicuro https://",
- "Remote subfolder" : "Sottocartella remota",
"Access granted" : "Accesso consentito",
"Error configuring Dropbox storage" : "Errore durante la configurazione dell'archivio Dropbox",
"Grant access" : "Concedi l'accesso",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(gruppo)",
"Saved" : "Salvato",
"<b>Note:</b> " : "<b>Nota:</b>",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "You don't have any external storages" : "Non è disponibile alcuna archiviazione esterna",
+ "No external storages configured" : "Nessuna archiviazione esterna configurata",
+ "You can configure external storages in the personal settings" : "Puoi configurare archiviazioni esterno nelle impostazioni personali",
"Name" : "Nome",
"Storage type" : "Tipo di archiviazione",
"Scope" : "Ambito",
diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json
index b780cae57a6..698dea290a0 100644
--- a/apps/files_external/l10n/it.json
+++ b/apps/files_external/l10n/it.json
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Nome utente",
"Password" : "Password",
- "Root" : "Radice",
+ "Remote subfolder" : "Sottocartella remota",
"Secure ftps://" : "Sicuro ftps://",
"Client ID" : "ID client",
"Client secret" : "Segreto del client",
@@ -41,7 +41,6 @@
"Username as share" : "Nome utente come condivisione",
"URL" : "URL",
"Secure https://" : "Sicuro https://",
- "Remote subfolder" : "Sottocartella remota",
"Access granted" : "Accesso consentito",
"Error configuring Dropbox storage" : "Errore durante la configurazione dell'archivio Dropbox",
"Grant access" : "Concedi l'accesso",
@@ -52,11 +51,12 @@
"(group)" : "(gruppo)",
"Saved" : "Salvato",
"<b>Note:</b> " : "<b>Nota:</b>",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "You don't have any external storages" : "Non è disponibile alcuna archiviazione esterna",
+ "No external storages configured" : "Nessuna archiviazione esterna configurata",
+ "You can configure external storages in the personal settings" : "Puoi configurare archiviazioni esterno nelle impostazioni personali",
"Name" : "Nome",
"Storage type" : "Tipo di archiviazione",
"Scope" : "Ambito",
diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js
index d4ef6347664..0eac968ef62 100644
--- a/apps/files_external/l10n/ja.js
+++ b/apps/files_external/l10n/ja.js
@@ -26,24 +26,23 @@ OC.L10N.register(
"Host" : "ホスト",
"Username" : "ユーザー名",
"Password" : "パスワード",
- "Root" : "ルート",
+ "Remote subfolder" : "リモートサブフォルダー",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "クライアントID",
"Client secret" : "クライアント秘密キー",
- "OpenStack Object Storage" : "OpenStack Object Storage",
- "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack Object Storage用のオプション)",
- "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace Cloud Filesに必須)",
- "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack Object Storage用に必要)",
- "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack Object Storage用に必要)",
- "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack Object Storage用に必要)",
- "URL of identity endpoint (required for OpenStack Object Storage)" : "識別用エンドポイントURL (OpenStack Object Storage用に必要)",
+ "OpenStack Object Storage" : "OpenStack ObjectStorage",
+ "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack ObjectStorage用)",
+ "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace CloudFiles用)",
+ "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack ObjectStorage用)",
+ "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack ObjectStorage用)",
+ "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack ObjectStorage用)",
+ "URL of identity endpoint (required for OpenStack Object Storage)" : "識別用エンドポイントURL (OpenStack ObjectStorage)",
"Timeout of HTTP requests in seconds" : "HTTP接続タイムアウト秒数",
"Share" : "共有",
"SMB / CIFS using OC login" : "ownCloudログインで SMB/CIFSを使用",
"Username as share" : "共有名",
"URL" : "URL",
"Secure https://" : "セキュア https://",
- "Remote subfolder" : "リモートサブフォルダー",
"Access granted" : "アクセスは許可されました",
"Error configuring Dropbox storage" : "Dropboxストレージの設定エラー",
"Grant access" : "アクセスを許可",
@@ -54,11 +53,11 @@ OC.L10N.register(
"(group)" : "(グループ)",
"Saved" : "保存されました",
"<b>Note:</b> " : "<b>注意:</b> ",
- " and " : "と",
+ "and" : "と",
"<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をマウントできません。このシステムの管理者にインストールをお願いしてください。",
- "You don't have any external storages" : "外部ストレージはありません。",
+ "You can configure external storages in the personal settings" : "個人設定で外部ストレージを設定することができます。",
"Name" : "名前",
"Storage type" : "ストレージ種別",
"Scope" : "スコープ",
diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json
index d630e19904d..6618cd90da3 100644
--- a/apps/files_external/l10n/ja.json
+++ b/apps/files_external/l10n/ja.json
@@ -24,24 +24,23 @@
"Host" : "ホスト",
"Username" : "ユーザー名",
"Password" : "パスワード",
- "Root" : "ルート",
+ "Remote subfolder" : "リモートサブフォルダー",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "クライアントID",
"Client secret" : "クライアント秘密キー",
- "OpenStack Object Storage" : "OpenStack Object Storage",
- "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack Object Storage用のオプション)",
- "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace Cloud Filesに必須)",
- "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack Object Storage用に必要)",
- "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack Object Storage用に必要)",
- "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack Object Storage用に必要)",
- "URL of identity endpoint (required for OpenStack Object Storage)" : "識別用エンドポイントURL (OpenStack Object Storage用に必要)",
+ "OpenStack Object Storage" : "OpenStack ObjectStorage",
+ "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack ObjectStorage用)",
+ "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace CloudFiles用)",
+ "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack ObjectStorage用)",
+ "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack ObjectStorage用)",
+ "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack ObjectStorage用)",
+ "URL of identity endpoint (required for OpenStack Object Storage)" : "識別用エンドポイントURL (OpenStack ObjectStorage)",
"Timeout of HTTP requests in seconds" : "HTTP接続タイムアウト秒数",
"Share" : "共有",
"SMB / CIFS using OC login" : "ownCloudログインで SMB/CIFSを使用",
"Username as share" : "共有名",
"URL" : "URL",
"Secure https://" : "セキュア https://",
- "Remote subfolder" : "リモートサブフォルダー",
"Access granted" : "アクセスは許可されました",
"Error configuring Dropbox storage" : "Dropboxストレージの設定エラー",
"Grant access" : "アクセスを許可",
@@ -52,11 +51,11 @@
"(group)" : "(グループ)",
"Saved" : "保存されました",
"<b>Note:</b> " : "<b>注意:</b> ",
- " and " : "と",
+ "and" : "と",
"<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をマウントできません。このシステムの管理者にインストールをお願いしてください。",
- "You don't have any external storages" : "外部ストレージはありません。",
+ "You can configure external storages in the personal settings" : "個人設定で外部ストレージを設定することができます。",
"Name" : "名前",
"Storage type" : "ストレージ種別",
"Scope" : "スコープ",
diff --git a/apps/files_external/l10n/kn.js b/apps/files_external/l10n/kn.js
new file mode 100644
index 00000000000..ad1987e2266
--- /dev/null
+++ b/apps/files_external/l10n/kn.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "files_external",
+ {
+ "Local" : "ಸ್ಥಳೀಯ",
+ "Port" : "ರೇವು",
+ "Host" : "ಅತಿಥೆಯ-ಗಣಕ",
+ "Username" : "ಬಳಕೆಯ ಹೆಸರು",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Share" : "ಹಂಚಿಕೊಳ್ಳಿ",
+ "URL" : "ಜಾಲದ ಕೊಂಡಿ",
+ "Personal" : "ವೈಯಕ್ತಿಕ",
+ "Saved" : "ಉಳಿಸಿದ",
+ "Name" : "ಹೆಸರು",
+ "Delete" : "ಅಳಿಸಿ"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/kn.json b/apps/files_external/l10n/kn.json
new file mode 100644
index 00000000000..74fc7e223bd
--- /dev/null
+++ b/apps/files_external/l10n/kn.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Local" : "ಸ್ಥಳೀಯ",
+ "Port" : "ರೇವು",
+ "Host" : "ಅತಿಥೆಯ-ಗಣಕ",
+ "Username" : "ಬಳಕೆಯ ಹೆಸರು",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Share" : "ಹಂಚಿಕೊಳ್ಳಿ",
+ "URL" : "ಜಾಲದ ಕೊಂಡಿ",
+ "Personal" : "ವೈಯಕ್ತಿಕ",
+ "Saved" : "ಉಳಿಸಿದ",
+ "Name" : "ಹೆಸರು",
+ "Delete" : "ಅಳಿಸಿ"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/files_external/l10n/lv.js b/apps/files_external/l10n/lv.js
index 8f22ff9fd1b..8b3dae5e4fb 100644
--- a/apps/files_external/l10n/lv.js
+++ b/apps/files_external/l10n/lv.js
@@ -15,6 +15,7 @@ OC.L10N.register(
"Grant access" : "Piešķirt pieeju",
"Error configuring Google Drive storage" : "Kļūda, konfigurējot Google Drive krātuvi",
"Personal" : "Personīgi",
+ "Saved" : "Saglabāts",
"Name" : "Nosaukums",
"External Storage" : "Ārējā krātuve",
"Folder name" : "Mapes nosaukums",
diff --git a/apps/files_external/l10n/lv.json b/apps/files_external/l10n/lv.json
index f5637ac9b55..6ec5fad6f90 100644
--- a/apps/files_external/l10n/lv.json
+++ b/apps/files_external/l10n/lv.json
@@ -13,6 +13,7 @@
"Grant access" : "Piešķirt pieeju",
"Error configuring Google Drive storage" : "Kļūda, konfigurējot Google Drive krātuvi",
"Personal" : "Personīgi",
+ "Saved" : "Saglabāts",
"Name" : "Nosaukums",
"External Storage" : "Ārējā krātuve",
"Folder name" : "Mapes nosaukums",
diff --git a/apps/files_external/l10n/mn.js b/apps/files_external/l10n/mn.js
new file mode 100644
index 00000000000..a83f8310862
--- /dev/null
+++ b/apps/files_external/l10n/mn.js
@@ -0,0 +1,8 @@
+OC.L10N.register(
+ "files_external",
+ {
+ "Username" : "Хэрэглэгчийн нэр",
+ "Password" : "Нууц үг",
+ "Share" : "Түгээх"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/mn.json b/apps/files_external/l10n/mn.json
new file mode 100644
index 00000000000..e28fa6e52ad
--- /dev/null
+++ b/apps/files_external/l10n/mn.json
@@ -0,0 +1,6 @@
+{ "translations": {
+ "Username" : "Хэрэглэгчийн нэр",
+ "Password" : "Нууц үг",
+ "Share" : "Түгээх"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js
index ebf113068a2..4bfdd78d0e7 100644
--- a/apps/files_external/l10n/nb_NO.js
+++ b/apps/files_external/l10n/nb_NO.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Tjener",
"Username" : "Brukernavn",
"Password" : "Passord",
- "Root" : "Rot",
+ "Remote subfolder" : "Ekstern undermappe",
"Secure ftps://" : "Sikker ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Brukernavn som share",
"URL" : "URL",
"Secure https://" : "Sikker https://",
- "Remote subfolder" : "Ekstern undermappe",
"Access granted" : "Tilgang innvilget",
"Error configuring Dropbox storage" : "Feil ved konfigurering av Dropbox-lagring",
"Grant access" : "Gi tilgang",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(gruppe)",
"Saved" : "Lagret",
"<b>Note:</b> " : "<b>Merk:</b> ",
- " and " : " og ",
+ "and" : "og",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å installere det.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.",
- "You don't have any external storages" : "Du har ingen eksterne lagre",
+ "No external storages configured" : "Ingen eksterne lagre er konfigurert",
+ "You can configure external storages in the personal settings" : "Du kan konfigurerer eksterne lagre i personlige innstillinger",
"Name" : "Navn",
"Storage type" : "Lagringstype",
"Scope" : "Omfang",
diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json
index b9b736fb13a..3e9c58b02c8 100644
--- a/apps/files_external/l10n/nb_NO.json
+++ b/apps/files_external/l10n/nb_NO.json
@@ -24,7 +24,7 @@
"Host" : "Tjener",
"Username" : "Brukernavn",
"Password" : "Passord",
- "Root" : "Rot",
+ "Remote subfolder" : "Ekstern undermappe",
"Secure ftps://" : "Sikker ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -41,7 +41,6 @@
"Username as share" : "Brukernavn som share",
"URL" : "URL",
"Secure https://" : "Sikker https://",
- "Remote subfolder" : "Ekstern undermappe",
"Access granted" : "Tilgang innvilget",
"Error configuring Dropbox storage" : "Feil ved konfigurering av Dropbox-lagring",
"Grant access" : "Gi tilgang",
@@ -52,11 +51,12 @@
"(group)" : "(gruppe)",
"Saved" : "Lagret",
"<b>Note:</b> " : "<b>Merk:</b> ",
- " and " : " og ",
+ "and" : "og",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å installere det.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.",
- "You don't have any external storages" : "Du har ingen eksterne lagre",
+ "No external storages configured" : "Ingen eksterne lagre er konfigurert",
+ "You can configure external storages in the personal settings" : "Du kan konfigurerer eksterne lagre i personlige innstillinger",
"Name" : "Navn",
"Storage type" : "Lagringstype",
"Scope" : "Omfang",
diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js
index 0dcbe8556a3..7e4b491433e 100644
--- a/apps/files_external/l10n/nl.js
+++ b/apps/files_external/l10n/nl.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Gebruikersnaam",
"Password" : "Wachtwoord",
- "Root" : "Root",
+ "Remote subfolder" : "Externe submap",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Gebruikersnaam als share",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Externe submap",
"Access granted" : "Toegang toegestaan",
"Error configuring Dropbox storage" : "Fout tijdens het configureren van Dropbox opslag",
"Grant access" : "Sta toegang toe",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(groep)",
"Saved" : "Bewaard",
"<b>Note:</b> " : "<b>Let op:</b> ",
- " and " : "en",
+ "and" : "en",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw systeembeheerder dit te installeren.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder dit te installeren.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.",
- "You don't have any external storages" : "U hebt geen externe opslag",
+ "No external storages configured" : "Geen externe opslag geconfigureerd",
+ "You can configure external storages in the personal settings" : "U kunt externe opslag configureren in persoonlijke instellingen",
"Name" : "Naam",
"Storage type" : "Opslagtype",
"Scope" : "Scope",
diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json
index 135aea89664..ff01cca6bd3 100644
--- a/apps/files_external/l10n/nl.json
+++ b/apps/files_external/l10n/nl.json
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Gebruikersnaam",
"Password" : "Wachtwoord",
- "Root" : "Root",
+ "Remote subfolder" : "Externe submap",
"Secure ftps://" : "Secure ftps://",
"Client ID" : "Client ID",
"Client secret" : "Client secret",
@@ -41,7 +41,6 @@
"Username as share" : "Gebruikersnaam als share",
"URL" : "URL",
"Secure https://" : "Secure https://",
- "Remote subfolder" : "Externe submap",
"Access granted" : "Toegang toegestaan",
"Error configuring Dropbox storage" : "Fout tijdens het configureren van Dropbox opslag",
"Grant access" : "Sta toegang toe",
@@ -52,11 +51,12 @@
"(group)" : "(groep)",
"Saved" : "Bewaard",
"<b>Note:</b> " : "<b>Let op:</b> ",
- " and " : "en",
+ "and" : "en",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw systeembeheerder dit te installeren.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder dit te installeren.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.",
- "You don't have any external storages" : "U hebt geen externe opslag",
+ "No external storages configured" : "Geen externe opslag geconfigureerd",
+ "You can configure external storages in the personal settings" : "U kunt externe opslag configureren in persoonlijke instellingen",
"Name" : "Naam",
"Storage type" : "Opslagtype",
"Scope" : "Scope",
diff --git a/apps/files_external/l10n/pl.js b/apps/files_external/l10n/pl.js
index a20f61c4677..d1e330912cc 100644
--- a/apps/files_external/l10n/pl.js
+++ b/apps/files_external/l10n/pl.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Nazwa użytkownika",
"Password" : "Hasło",
- "Root" : "Root",
+ "Remote subfolder" : "Zdalny podfolder",
"Secure ftps://" : "Bezpieczny ftps://",
"Client ID" : "ID klienta",
"Client secret" : "Hasło klienta",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Użytkownik jako zasób",
"URL" : "URL",
"Secure https://" : "Bezpieczny https://",
- "Remote subfolder" : "Zdalny podfolder",
"Access granted" : "Dostęp do",
"Error configuring Dropbox storage" : "Wystąpił błąd podczas konfigurowania zasobu Dropbox",
"Grant access" : "Udziel dostępu",
@@ -54,11 +53,11 @@ OC.L10N.register(
"(group)" : "(grupa)",
"Saved" : "Zapisano",
"<b>Note:</b> " : "<b>Uwaga:</b> ",
- " and " : "oraz",
+ "and" : "i",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla cURL w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla FTP w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> \"%s\" nie jest zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "You don't have any external storages" : "Nie masz żadnych zewnętrznych magazynów",
+ "You can configure external storages in the personal settings" : "Możesz skonfigurować zewnętrzne zasoby w ustawieniach personalnych",
"Name" : "Nazwa",
"Storage type" : "Typ magazynu",
"Scope" : "Zakres",
diff --git a/apps/files_external/l10n/pl.json b/apps/files_external/l10n/pl.json
index c838595674d..41800919db8 100644
--- a/apps/files_external/l10n/pl.json
+++ b/apps/files_external/l10n/pl.json
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Nazwa użytkownika",
"Password" : "Hasło",
- "Root" : "Root",
+ "Remote subfolder" : "Zdalny podfolder",
"Secure ftps://" : "Bezpieczny ftps://",
"Client ID" : "ID klienta",
"Client secret" : "Hasło klienta",
@@ -41,7 +41,6 @@
"Username as share" : "Użytkownik jako zasób",
"URL" : "URL",
"Secure https://" : "Bezpieczny https://",
- "Remote subfolder" : "Zdalny podfolder",
"Access granted" : "Dostęp do",
"Error configuring Dropbox storage" : "Wystąpił błąd podczas konfigurowania zasobu Dropbox",
"Grant access" : "Udziel dostępu",
@@ -52,11 +51,11 @@
"(group)" : "(grupa)",
"Saved" : "Zapisano",
"<b>Note:</b> " : "<b>Uwaga:</b> ",
- " and " : "oraz",
+ "and" : "i",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla cURL w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla FTP w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> \"%s\" nie jest zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "You don't have any external storages" : "Nie masz żadnych zewnętrznych magazynów",
+ "You can configure external storages in the personal settings" : "Możesz skonfigurować zewnętrzne zasoby w ustawieniach personalnych",
"Name" : "Nazwa",
"Storage type" : "Typ magazynu",
"Scope" : "Zakres",
diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js
index e9ec582e182..30d3f90c99e 100644
--- a/apps/files_external/l10n/pt_BR.js
+++ b/apps/files_external/l10n/pt_BR.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Host",
"Username" : "Nome de Usuário",
"Password" : "Senha",
- "Root" : "Raiz",
+ "Remote subfolder" : "Subpasta remota",
"Secure ftps://" : "Seguro ftps://",
"Client ID" : "ID do Cliente",
"Client secret" : "Segredo do cliente",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Nome de usuário como compartilhado",
"URL" : "URL",
"Secure https://" : "https:// segura",
- "Remote subfolder" : "Subpasta remota",
"Access granted" : "Acesso concedido",
"Error configuring Dropbox storage" : "Erro ao configurar armazenamento do Dropbox",
"Grant access" : "Permitir acesso",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(grupo)",
"Saved" : "Salvo",
"<b>Note:</b> " : "<b>Nota:</b>",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "You don't have any external storages" : "Você não tem nenhuma armazenamento externa",
+ "No external storages configured" : "Nenhum armazendo externo foi configurado",
+ "You can configure external storages in the personal settings" : "Você pode configurar armazenamentos externos nas configurações pessoais",
"Name" : "Nome",
"Storage type" : "Tipo de armazenamento",
"Scope" : "Escopo",
diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json
index 9f0907b9d20..b76cda427f2 100644
--- a/apps/files_external/l10n/pt_BR.json
+++ b/apps/files_external/l10n/pt_BR.json
@@ -24,7 +24,7 @@
"Host" : "Host",
"Username" : "Nome de Usuário",
"Password" : "Senha",
- "Root" : "Raiz",
+ "Remote subfolder" : "Subpasta remota",
"Secure ftps://" : "Seguro ftps://",
"Client ID" : "ID do Cliente",
"Client secret" : "Segredo do cliente",
@@ -41,7 +41,6 @@
"Username as share" : "Nome de usuário como compartilhado",
"URL" : "URL",
"Secure https://" : "https:// segura",
- "Remote subfolder" : "Subpasta remota",
"Access granted" : "Acesso concedido",
"Error configuring Dropbox storage" : "Erro ao configurar armazenamento do Dropbox",
"Grant access" : "Permitir acesso",
@@ -52,11 +51,12 @@
"(group)" : "(grupo)",
"Saved" : "Salvo",
"<b>Note:</b> " : "<b>Nota:</b>",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "You don't have any external storages" : "Você não tem nenhuma armazenamento externa",
+ "No external storages configured" : "Nenhum armazendo externo foi configurado",
+ "You can configure external storages in the personal settings" : "Você pode configurar armazenamentos externos nas configurações pessoais",
"Name" : "Nome",
"Storage type" : "Tipo de armazenamento",
"Scope" : "Escopo",
diff --git a/apps/files_external/l10n/pt_PT.js b/apps/files_external/l10n/pt_PT.js
index 2d3f342e9e9..cc3c4419619 100644
--- a/apps/files_external/l10n/pt_PT.js
+++ b/apps/files_external/l10n/pt_PT.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Endereço",
"Username" : "Nome de utilizador",
"Password" : "Palavra-passe",
- "Root" : "Raiz",
+ "Remote subfolder" : "Sub-pasta remota ",
"Secure ftps://" : "ftps:// Seguro",
"Client ID" : "ID Cliente",
"Client secret" : "Segredo do cliente",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Utilizar nome de utilizador como partilha",
"URL" : "URL",
"Secure https://" : "https:// Seguro",
- "Remote subfolder" : "Sub-pasta remota ",
"Access granted" : "Acesso autorizado",
"Error configuring Dropbox storage" : "Erro ao configurar o armazenamento do Dropbox",
"Grant access" : "Conceder acesso",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(grupo)",
"Saved" : "Guardado",
"<b>Note:</b> " : "<b>Aviso:</b> ",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.",
- "You don't have any external storages" : "Não possui quaisquer armazenamentos externos",
+ "No external storages configured" : "Nenhuns armazenamentos externos configurados",
+ "You can configure external storages in the personal settings" : "Pode configurar os armazenamentos externos nas definições pessoais",
"Name" : "Nome",
"Storage type" : "Tipo de Armazenamento",
"Scope" : "Âmbito",
diff --git a/apps/files_external/l10n/pt_PT.json b/apps/files_external/l10n/pt_PT.json
index cee9e1b7f1a..e4ebe0236aa 100644
--- a/apps/files_external/l10n/pt_PT.json
+++ b/apps/files_external/l10n/pt_PT.json
@@ -24,7 +24,7 @@
"Host" : "Endereço",
"Username" : "Nome de utilizador",
"Password" : "Palavra-passe",
- "Root" : "Raiz",
+ "Remote subfolder" : "Sub-pasta remota ",
"Secure ftps://" : "ftps:// Seguro",
"Client ID" : "ID Cliente",
"Client secret" : "Segredo do cliente",
@@ -41,7 +41,6 @@
"Username as share" : "Utilizar nome de utilizador como partilha",
"URL" : "URL",
"Secure https://" : "https:// Seguro",
- "Remote subfolder" : "Sub-pasta remota ",
"Access granted" : "Acesso autorizado",
"Error configuring Dropbox storage" : "Erro ao configurar o armazenamento do Dropbox",
"Grant access" : "Conceder acesso",
@@ -52,11 +51,12 @@
"(group)" : "(grupo)",
"Saved" : "Guardado",
"<b>Note:</b> " : "<b>Aviso:</b> ",
- " and " : "e",
+ "and" : "e",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.",
- "You don't have any external storages" : "Não possui quaisquer armazenamentos externos",
+ "No external storages configured" : "Nenhuns armazenamentos externos configurados",
+ "You can configure external storages in the personal settings" : "Pode configurar os armazenamentos externos nas definições pessoais",
"Name" : "Nome",
"Storage type" : "Tipo de Armazenamento",
"Scope" : "Âmbito",
diff --git a/apps/files_external/l10n/ro.js b/apps/files_external/l10n/ro.js
index b98fd2557b6..bef9b29c81a 100644
--- a/apps/files_external/l10n/ro.js
+++ b/apps/files_external/l10n/ro.js
@@ -10,7 +10,6 @@ OC.L10N.register(
"Host" : "Gazdă",
"Username" : "Nume utilizator",
"Password" : "Parolă",
- "Root" : "Root",
"Share" : "Partajează",
"URL" : "URL",
"Access granted" : "Acces permis",
diff --git a/apps/files_external/l10n/ro.json b/apps/files_external/l10n/ro.json
index a0e03679958..ee904b6712e 100644
--- a/apps/files_external/l10n/ro.json
+++ b/apps/files_external/l10n/ro.json
@@ -8,7 +8,6 @@
"Host" : "Gazdă",
"Username" : "Nume utilizator",
"Password" : "Parolă",
- "Root" : "Root",
"Share" : "Partajează",
"URL" : "URL",
"Access granted" : "Acces permis",
diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js
index 35eec150d01..fe537001cc2 100644
--- a/apps/files_external/l10n/ru.js
+++ b/apps/files_external/l10n/ru.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Ошибка при получении токенов. Проверьте правильность вашего ключа приложения и секретного ключа.",
"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Ошибка при получении токена доступа. Проверьте правильность вашего ключа приложения и секретного ключа.",
- "Please provide a valid Dropbox app key and secret." : "Пожалуйста, предоставьте действующий ключ Dropbox и пароль.",
+ "Please provide a valid Dropbox app key and secret." : "Укажите действительные ключ и пароль для Dropbox.",
"Step 1 failed. Exception: %s" : "Шаг 1 неудачен. Исключение: %s",
"Step 2 failed. Exception: %s" : "Шаг 2 неудачен. Исключение: %s",
"External storage" : "Внешнее хранилище",
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Сервер",
"Username" : "Имя пользователя",
"Password" : "Пароль",
- "Root" : "Корневой каталог",
+ "Remote subfolder" : "Удаленный подкаталог",
"Secure ftps://" : "Защищённый ftps://",
"Client ID" : "Идентификатор клиента",
"Client secret" : "Клиентский ключ ",
@@ -38,12 +38,11 @@ OC.L10N.register(
"Service Name (required for OpenStack Object Storage)" : "Имя Службы (обяз. для Хранилища объектов OpenStack)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL для удостоверения конечной точки (обяз. для Хранилища объектов OpenStack)",
"Timeout of HTTP requests in seconds" : "Тайм-аут HTTP-запросов в секундах",
- "Share" : "Открыть доступ",
+ "Share" : "Поделиться",
"SMB / CIFS using OC login" : "SMB / CIFS с ипользованием логина OC",
- "Username as share" : "Имя для открытого доступа",
+ "Username as share" : "Имя пользователя в качестве имени общего ресурса",
"URL" : "Ссылка",
"Secure https://" : "Безопасный https://",
- "Remote subfolder" : "Удаленный подкаталог",
"Access granted" : "Доступ предоставлен",
"Error configuring Dropbox storage" : "Ошибка при настройке хранилища Dropbox",
"Grant access" : "Предоставить доступ",
@@ -54,21 +53,22 @@ OC.L10N.register(
"(group)" : "(группа)",
"Saved" : "Сохранено",
"<b>Note:</b> " : "<b>Примечание:</b> ",
- " and " : "и",
+ "and" : "и",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
- "You don't have any external storages" : "У вас нет внешних хранилищ",
+ "No external storages configured" : "Нет внешних носителей",
+ "You can configure external storages in the personal settings" : "Вы можете изменить параметры внешних носителей в личных настройках",
"Name" : "Имя",
"Storage type" : "Тип хранилища",
"Scope" : "Область",
"External Storage" : "Внешнее хранилище",
- "Folder name" : "Имя папки",
+ "Folder name" : "Имя каталога",
"Configuration" : "Конфигурация",
"Available for" : "Доступно для",
"Add storage" : "Добавить хранилище",
"Delete" : "Удалить",
"Enable User External Storage" : "Включить пользовательские внешние носители",
- "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующее внешнее хранилище данных"
+ "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json
index 85b9bf38e4c..9f70d469724 100644
--- a/apps/files_external/l10n/ru.json
+++ b/apps/files_external/l10n/ru.json
@@ -1,7 +1,7 @@
{ "translations": {
"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Ошибка при получении токенов. Проверьте правильность вашего ключа приложения и секретного ключа.",
"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Ошибка при получении токена доступа. Проверьте правильность вашего ключа приложения и секретного ключа.",
- "Please provide a valid Dropbox app key and secret." : "Пожалуйста, предоставьте действующий ключ Dropbox и пароль.",
+ "Please provide a valid Dropbox app key and secret." : "Укажите действительные ключ и пароль для Dropbox.",
"Step 1 failed. Exception: %s" : "Шаг 1 неудачен. Исключение: %s",
"Step 2 failed. Exception: %s" : "Шаг 2 неудачен. Исключение: %s",
"External storage" : "Внешнее хранилище",
@@ -24,7 +24,7 @@
"Host" : "Сервер",
"Username" : "Имя пользователя",
"Password" : "Пароль",
- "Root" : "Корневой каталог",
+ "Remote subfolder" : "Удаленный подкаталог",
"Secure ftps://" : "Защищённый ftps://",
"Client ID" : "Идентификатор клиента",
"Client secret" : "Клиентский ключ ",
@@ -36,12 +36,11 @@
"Service Name (required for OpenStack Object Storage)" : "Имя Службы (обяз. для Хранилища объектов OpenStack)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL для удостоверения конечной точки (обяз. для Хранилища объектов OpenStack)",
"Timeout of HTTP requests in seconds" : "Тайм-аут HTTP-запросов в секундах",
- "Share" : "Открыть доступ",
+ "Share" : "Поделиться",
"SMB / CIFS using OC login" : "SMB / CIFS с ипользованием логина OC",
- "Username as share" : "Имя для открытого доступа",
+ "Username as share" : "Имя пользователя в качестве имени общего ресурса",
"URL" : "Ссылка",
"Secure https://" : "Безопасный https://",
- "Remote subfolder" : "Удаленный подкаталог",
"Access granted" : "Доступ предоставлен",
"Error configuring Dropbox storage" : "Ошибка при настройке хранилища Dropbox",
"Grant access" : "Предоставить доступ",
@@ -52,21 +51,22 @@
"(group)" : "(группа)",
"Saved" : "Сохранено",
"<b>Note:</b> " : "<b>Примечание:</b> ",
- " and " : "и",
+ "and" : "и",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
- "You don't have any external storages" : "У вас нет внешних хранилищ",
+ "No external storages configured" : "Нет внешних носителей",
+ "You can configure external storages in the personal settings" : "Вы можете изменить параметры внешних носителей в личных настройках",
"Name" : "Имя",
"Storage type" : "Тип хранилища",
"Scope" : "Область",
"External Storage" : "Внешнее хранилище",
- "Folder name" : "Имя папки",
+ "Folder name" : "Имя каталога",
"Configuration" : "Конфигурация",
"Available for" : "Доступно для",
"Add storage" : "Добавить хранилище",
"Delete" : "Удалить",
"Enable User External Storage" : "Включить пользовательские внешние носители",
- "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующее внешнее хранилище данных"
+ "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/sk.php b/apps/files_external/l10n/sk.php
deleted file mode 100644
index 9418c949228..00000000000
--- a/apps/files_external/l10n/sk.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Location" => "Poloha",
-"Share" => "Zdieľať",
-"Personal" => "Osobné",
-"Delete" => "Odstrániť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_external/l10n/sk_SK.js b/apps/files_external/l10n/sk_SK.js
index 636953c42ea..67de616dfc6 100644
--- a/apps/files_external/l10n/sk_SK.js
+++ b/apps/files_external/l10n/sk_SK.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Hostiteľ",
"Username" : "Používateľské meno",
"Password" : "Heslo",
- "Root" : "Root",
+ "Remote subfolder" : "Vzdialený podpriečinok",
"Secure ftps://" : "Zabezpečené ftps://",
"Client ID" : "Client ID",
"Client secret" : "Heslo klienta",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Používateľské meno ako zdieľaný priečinok",
"URL" : "URL",
"Secure https://" : "Zabezpečené https://",
- "Remote subfolder" : "Vzdialený podpriečinok",
"Access granted" : "Prístup povolený",
"Error configuring Dropbox storage" : "Chyba pri konfigurácii úložiska Dropbox",
"Grant access" : "Povoliť prístup",
@@ -54,11 +53,9 @@ OC.L10N.register(
"(group)" : "(skupina)",
"Saved" : "Uložené",
"<b>Note:</b> " : "<b>Poznámka:</b> ",
- " and " : "a",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP nie je zapnutá alebo nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP nie je zapnutá alebo nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" nie je nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.",
- "You don't have any external storages" : "Nemáte žiadne externé úložisko",
"Name" : "Názov",
"Storage type" : "Typ úložiska",
"Scope" : "Rozsah",
diff --git a/apps/files_external/l10n/sk_SK.json b/apps/files_external/l10n/sk_SK.json
index 5d2ca0a95a0..3ad132167df 100644
--- a/apps/files_external/l10n/sk_SK.json
+++ b/apps/files_external/l10n/sk_SK.json
@@ -24,7 +24,7 @@
"Host" : "Hostiteľ",
"Username" : "Používateľské meno",
"Password" : "Heslo",
- "Root" : "Root",
+ "Remote subfolder" : "Vzdialený podpriečinok",
"Secure ftps://" : "Zabezpečené ftps://",
"Client ID" : "Client ID",
"Client secret" : "Heslo klienta",
@@ -41,7 +41,6 @@
"Username as share" : "Používateľské meno ako zdieľaný priečinok",
"URL" : "URL",
"Secure https://" : "Zabezpečené https://",
- "Remote subfolder" : "Vzdialený podpriečinok",
"Access granted" : "Prístup povolený",
"Error configuring Dropbox storage" : "Chyba pri konfigurácii úložiska Dropbox",
"Grant access" : "Povoliť prístup",
@@ -52,11 +51,9 @@
"(group)" : "(skupina)",
"Saved" : "Uložené",
"<b>Note:</b> " : "<b>Poznámka:</b> ",
- " and " : "a",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP nie je zapnutá alebo nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP nie je zapnutá alebo nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" nie je nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.",
- "You don't have any external storages" : "Nemáte žiadne externé úložisko",
"Name" : "Názov",
"Storage type" : "Typ úložiska",
"Scope" : "Rozsah",
diff --git a/apps/files_external/l10n/sl.js b/apps/files_external/l10n/sl.js
index 690fd9ae322..a68849a12f6 100644
--- a/apps/files_external/l10n/sl.js
+++ b/apps/files_external/l10n/sl.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Gostitelj",
"Username" : "Uporabniško ime",
"Password" : "Geslo",
- "Root" : "Koren",
+ "Remote subfolder" : "Oddaljena podrejena mapa",
"Secure ftps://" : "Varni način ftps://",
"Client ID" : "ID odjemalca",
"Client secret" : "Skrivni ključ odjemalca",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Uporabniško ime za souporabo",
"URL" : "Naslov URL",
"Secure https://" : "Varni način https://",
- "Remote subfolder" : "Oddaljena podrejena mapa",
"Access granted" : "Dostop je odobren",
"Error configuring Dropbox storage" : "Napaka nastavljanja shrambe Dropbox",
"Grant access" : "Odobri dostop",
@@ -54,11 +53,12 @@ OC.L10N.register(
"(group)" : "(skupina)",
"Saved" : "Shranjeno",
"<b>Note:</b> " : "<b>Opomba:</b> ",
- " and " : "in",
+ "and" : "in",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "You don't have any external storages" : "Ni navedenih zunanjih shramb",
+ "No external storages configured" : "Ni določene zunanje shrambe",
+ "You can configure external storages in the personal settings" : "Zunanjo shrambo je mogoče določiti med osebnimi nastavitvami",
"Name" : "Ime",
"Storage type" : "Vrsta shrambe",
"Scope" : "Obseg",
diff --git a/apps/files_external/l10n/sl.json b/apps/files_external/l10n/sl.json
index c92e9a310d8..4ee4fedfc09 100644
--- a/apps/files_external/l10n/sl.json
+++ b/apps/files_external/l10n/sl.json
@@ -24,7 +24,7 @@
"Host" : "Gostitelj",
"Username" : "Uporabniško ime",
"Password" : "Geslo",
- "Root" : "Koren",
+ "Remote subfolder" : "Oddaljena podrejena mapa",
"Secure ftps://" : "Varni način ftps://",
"Client ID" : "ID odjemalca",
"Client secret" : "Skrivni ključ odjemalca",
@@ -41,7 +41,6 @@
"Username as share" : "Uporabniško ime za souporabo",
"URL" : "Naslov URL",
"Secure https://" : "Varni način https://",
- "Remote subfolder" : "Oddaljena podrejena mapa",
"Access granted" : "Dostop je odobren",
"Error configuring Dropbox storage" : "Napaka nastavljanja shrambe Dropbox",
"Grant access" : "Odobri dostop",
@@ -52,11 +51,12 @@
"(group)" : "(skupina)",
"Saved" : "Shranjeno",
"<b>Note:</b> " : "<b>Opomba:</b> ",
- " and " : "in",
+ "and" : "in",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "You don't have any external storages" : "Ni navedenih zunanjih shramb",
+ "No external storages configured" : "Ni določene zunanje shrambe",
+ "You can configure external storages in the personal settings" : "Zunanjo shrambo je mogoče določiti med osebnimi nastavitvami",
"Name" : "Ime",
"Storage type" : "Vrsta shrambe",
"Scope" : "Obseg",
diff --git a/apps/files_external/l10n/sr@latin.js b/apps/files_external/l10n/sr@latin.js
index 518d9e3957d..bf67124cf6a 100644
--- a/apps/files_external/l10n/sr@latin.js
+++ b/apps/files_external/l10n/sr@latin.js
@@ -1,13 +1,74 @@
OC.L10N.register(
"files_external",
{
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Dobavljanje detalja zahteva nije uspelo. Proverite da li su Vaš ključ aplikacije za Dropbox i tajna lozinka ispravni.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Dobavljanje detalja pristupa nije uspelo. Proverite da li su Vaš Dropbox ključ aplikacije i tajna lozinka ispravni.",
+ "Please provide a valid Dropbox app key and secret." : "Molimo unesite ispravan Dropbox ključ aplikacije i tajnu lozinku.",
+ "Step 1 failed. Exception: %s" : "Korak 1 nije uspeo. Izuzetak: %s",
+ "Step 2 failed. Exception: %s" : "Korak 2 nije uspeo. Izuzetak: %s",
+ "External storage" : "Spoljašnje skladište",
+ "Local" : "Lokalno",
"Location" : "Lokacija",
+ "Amazon S3" : "Amazon S3",
+ "Key" : "Ključ",
+ "Secret" : "Tajna lozinka",
+ "Bucket" : "Korpa",
+ "Amazon S3 and compliant" : "Amazon S3 i kompatibilni",
+ "Access Key" : "Pristupni Ključ",
+ "Secret Key" : "Tajni Ključ",
+ "Hostname" : "Ime računara",
+ "Port" : "Port",
"Region" : "Regija",
+ "Enable SSL" : "Uključi SSL",
+ "Enable Path Style" : "Omogući stil putanje",
+ "App key" : "Ključ Aplikacije",
+ "App secret" : "Tajna lozinka Aplikacije",
+ "Host" : "Računar",
"Username" : "Korisničko ime",
"Password" : "Lozinka",
+ "Remote subfolder" : "Udaljeni poddirektorijum",
+ "Secure ftps://" : "Sigurni ftps://",
+ "Client ID" : "Identifikator klijenta",
+ "Client secret" : "Tajna lozinka klijenta",
+ "OpenStack Object Storage" : "OpenStack skladište objekata",
+ "Region (optional for OpenStack Object Storage)" : "Region (opciono za OpenStack skladište objekata)",
+ "API Key (required for Rackspace Cloud Files)" : "API ključ (neophodno za Rackspace datoteke u oblaku)",
+ "Tenantname (required for OpenStack Object Storage)" : "Ime stanara (neophodno za OpenStack skladište objekata)",
+ "Password (required for OpenStack Object Storage)" : "Lozinka (neophodno za OpenStack skladište objekata)",
+ "Service Name (required for OpenStack Object Storage)" : "Ime Servisa (neophodno za OpenStack skladište objekata)",
+ "URL of identity endpoint (required for OpenStack Object Storage)" : "URL krajnje tačke identiteta (neophodno za OpenStack skladište objekata)",
+ "Timeout of HTTP requests in seconds" : "Ograničenje vremena veze HTTP zahteva u sekundama",
"Share" : "Podeli",
+ "SMB / CIFS using OC login" : "SMB / CIFS koji koristi OC prijavljivanje",
+ "Username as share" : "Korisničko ime i deljeni direktorijum",
+ "URL" : "URL",
+ "Secure https://" : "Sigurni https://",
+ "Access granted" : "Pristup Dozvoljen",
+ "Error configuring Dropbox storage" : "Greška u podešavanju Dropbox skladišta",
+ "Grant access" : "Dozvoli pristup",
+ "Error configuring Google Drive storage" : "Greška u podešavanju Google Disk skladišta",
"Personal" : "Lično",
+ "System" : "Sistemsko",
+ "All users. Type to select user or group." : "Svi korisnici. Kucajte da biste izabrali korisnika ili grupu.",
+ "(group)" : "(grupa)",
+ "Saved" : "Sačuvano",
+ "<b>Note:</b> " : "<b>Obratite pažnju:</b>",
+ "and" : "i",
+ "<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>Obratite pažnju</b> Podrška za cURL u PHP-u nije uključena ili instalirana. Montiranje %s nije moguće. Molimo Vas da se obratite Vašem sistem administratoru da je instalira.",
+ "<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>Obratite pažnju:</b> FTP podrška u PHP-u nije uključena ili instalirana. Montiranje %s nije moguće. Molimo Vas da tražite od Vašeg sistem administratora da je instalira.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Obratite pažnju:</b> \"%s\" nije instaliran. Monitranje %s nije moguće. Molimo Vas da se obratite Vašem sistem administratoru da to instalira.",
+ "No external storages configured" : "Nema podešenih spoljašnjih skladišta",
+ "You can configure external storages in the personal settings" : "Možete da podešavate spoljašnja skladišta u ličnim podešavanjima",
"Name" : "Ime",
- "Delete" : "Obriši"
+ "Storage type" : "Tip skladišta",
+ "Scope" : "Opseg",
+ "External Storage" : "Spoljašnje skladište",
+ "Folder name" : "Ime fascikle",
+ "Configuration" : "Podešavanje",
+ "Available for" : "Dostupno za",
+ "Add storage" : "Dodaj skladište",
+ "Delete" : "Obriši",
+ "Enable User External Storage" : "Omogući korisničko spoljašnje skladište",
+ "Allow users to mount the following external storage" : "Omogući korisnicima da namontiraju sledeće spoljašnje skladište"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_external/l10n/sr@latin.json b/apps/files_external/l10n/sr@latin.json
index 9dbfe640d85..057cdc2c6a7 100644
--- a/apps/files_external/l10n/sr@latin.json
+++ b/apps/files_external/l10n/sr@latin.json
@@ -1,11 +1,72 @@
{ "translations": {
+ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Dobavljanje detalja zahteva nije uspelo. Proverite da li su Vaš ključ aplikacije za Dropbox i tajna lozinka ispravni.",
+ "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Dobavljanje detalja pristupa nije uspelo. Proverite da li su Vaš Dropbox ključ aplikacije i tajna lozinka ispravni.",
+ "Please provide a valid Dropbox app key and secret." : "Molimo unesite ispravan Dropbox ključ aplikacije i tajnu lozinku.",
+ "Step 1 failed. Exception: %s" : "Korak 1 nije uspeo. Izuzetak: %s",
+ "Step 2 failed. Exception: %s" : "Korak 2 nije uspeo. Izuzetak: %s",
+ "External storage" : "Spoljašnje skladište",
+ "Local" : "Lokalno",
"Location" : "Lokacija",
+ "Amazon S3" : "Amazon S3",
+ "Key" : "Ključ",
+ "Secret" : "Tajna lozinka",
+ "Bucket" : "Korpa",
+ "Amazon S3 and compliant" : "Amazon S3 i kompatibilni",
+ "Access Key" : "Pristupni Ključ",
+ "Secret Key" : "Tajni Ključ",
+ "Hostname" : "Ime računara",
+ "Port" : "Port",
"Region" : "Regija",
+ "Enable SSL" : "Uključi SSL",
+ "Enable Path Style" : "Omogući stil putanje",
+ "App key" : "Ključ Aplikacije",
+ "App secret" : "Tajna lozinka Aplikacije",
+ "Host" : "Računar",
"Username" : "Korisničko ime",
"Password" : "Lozinka",
+ "Remote subfolder" : "Udaljeni poddirektorijum",
+ "Secure ftps://" : "Sigurni ftps://",
+ "Client ID" : "Identifikator klijenta",
+ "Client secret" : "Tajna lozinka klijenta",
+ "OpenStack Object Storage" : "OpenStack skladište objekata",
+ "Region (optional for OpenStack Object Storage)" : "Region (opciono za OpenStack skladište objekata)",
+ "API Key (required for Rackspace Cloud Files)" : "API ključ (neophodno za Rackspace datoteke u oblaku)",
+ "Tenantname (required for OpenStack Object Storage)" : "Ime stanara (neophodno za OpenStack skladište objekata)",
+ "Password (required for OpenStack Object Storage)" : "Lozinka (neophodno za OpenStack skladište objekata)",
+ "Service Name (required for OpenStack Object Storage)" : "Ime Servisa (neophodno za OpenStack skladište objekata)",
+ "URL of identity endpoint (required for OpenStack Object Storage)" : "URL krajnje tačke identiteta (neophodno za OpenStack skladište objekata)",
+ "Timeout of HTTP requests in seconds" : "Ograničenje vremena veze HTTP zahteva u sekundama",
"Share" : "Podeli",
+ "SMB / CIFS using OC login" : "SMB / CIFS koji koristi OC prijavljivanje",
+ "Username as share" : "Korisničko ime i deljeni direktorijum",
+ "URL" : "URL",
+ "Secure https://" : "Sigurni https://",
+ "Access granted" : "Pristup Dozvoljen",
+ "Error configuring Dropbox storage" : "Greška u podešavanju Dropbox skladišta",
+ "Grant access" : "Dozvoli pristup",
+ "Error configuring Google Drive storage" : "Greška u podešavanju Google Disk skladišta",
"Personal" : "Lično",
+ "System" : "Sistemsko",
+ "All users. Type to select user or group." : "Svi korisnici. Kucajte da biste izabrali korisnika ili grupu.",
+ "(group)" : "(grupa)",
+ "Saved" : "Sačuvano",
+ "<b>Note:</b> " : "<b>Obratite pažnju:</b>",
+ "and" : "i",
+ "<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>Obratite pažnju</b> Podrška za cURL u PHP-u nije uključena ili instalirana. Montiranje %s nije moguće. Molimo Vas da se obratite Vašem sistem administratoru da je instalira.",
+ "<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>Obratite pažnju:</b> FTP podrška u PHP-u nije uključena ili instalirana. Montiranje %s nije moguće. Molimo Vas da tražite od Vašeg sistem administratora da je instalira.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Obratite pažnju:</b> \"%s\" nije instaliran. Monitranje %s nije moguće. Molimo Vas da se obratite Vašem sistem administratoru da to instalira.",
+ "No external storages configured" : "Nema podešenih spoljašnjih skladišta",
+ "You can configure external storages in the personal settings" : "Možete da podešavate spoljašnja skladišta u ličnim podešavanjima",
"Name" : "Ime",
- "Delete" : "Obriši"
+ "Storage type" : "Tip skladišta",
+ "Scope" : "Opseg",
+ "External Storage" : "Spoljašnje skladište",
+ "Folder name" : "Ime fascikle",
+ "Configuration" : "Podešavanje",
+ "Available for" : "Dostupno za",
+ "Add storage" : "Dodaj skladište",
+ "Delete" : "Obriši",
+ "Enable User External Storage" : "Omogući korisničko spoljašnje skladište",
+ "Allow users to mount the following external storage" : "Omogući korisnicima da namontiraju sledeće spoljašnje skladište"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/sv.js b/apps/files_external/l10n/sv.js
index cb12208c49a..d4049efcfa4 100644
--- a/apps/files_external/l10n/sv.js
+++ b/apps/files_external/l10n/sv.js
@@ -4,6 +4,8 @@ OC.L10N.register(
"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Misslyckades att hämta access tokens. Verifiera att din Dropbox app-nyckel och app-hemlighet är korrekt",
"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Misslyckades att hämta request tokens. Verifiera att din Dropbox app-nyckel och app-hemlighet är korrekt",
"Please provide a valid Dropbox app key and secret." : "Ange en giltig Dropbox nyckel och hemlighet.",
+ "Step 1 failed. Exception: %s" : "Steg 1 flaerade. Undantag: %s",
+ "Step 2 failed. Exception: %s" : "Steg 2 falerade. Undantag: %s",
"External storage" : "Extern lagring",
"Local" : "Lokal",
"Location" : "Plats",
@@ -14,6 +16,7 @@ OC.L10N.register(
"Amazon S3 and compliant" : "Amazon S3 och compliant",
"Access Key" : "Accessnyckel",
"Secret Key" : "Hemlig nyckel",
+ "Hostname" : "Värdnamn",
"Port" : "Port",
"Region" : "Län",
"Enable SSL" : "Aktivera SSL",
@@ -23,7 +26,7 @@ OC.L10N.register(
"Host" : "Server",
"Username" : "Användarnamn",
"Password" : "Lösenord",
- "Root" : "Root",
+ "Remote subfolder" : "Fjärrmapp",
"Secure ftps://" : "Säker ftps://",
"Client ID" : "Klient ID",
"Client secret" : "klient secret",
@@ -34,25 +37,28 @@ OC.L10N.register(
"Password (required for OpenStack Object Storage)" : "Lösenord (krävs för OpenStack Object Storage)",
"Service Name (required for OpenStack Object Storage)" : "Tjänstens namn (krävs för OpenStack Object Storage)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL för identitetens slutpunkt (krävs för OpenStack Object Storage)",
+ "Timeout of HTTP requests in seconds" : "Timeout för HTTP-anrop i sekunder",
"Share" : "Dela",
"SMB / CIFS using OC login" : "SMB / CIFS använder OC inloggning",
"Username as share" : "Användarnamn till utdelning",
"URL" : "URL",
"Secure https://" : "Säker https://",
- "Remote subfolder" : "Fjärrmapp",
"Access granted" : "Åtkomst beviljad",
"Error configuring Dropbox storage" : "Fel vid konfigurering av Dropbox",
"Grant access" : "Bevilja åtkomst",
"Error configuring Google Drive storage" : "Fel vid konfigurering av Google Drive",
"Personal" : "Personligt",
"System" : "System",
+ "All users. Type to select user or group." : "Alla användare. Skriv för att välja användare eller grupp.",
+ "(group)" : "(grupp)",
"Saved" : "Sparad",
"<b>Note:</b> " : "<b> OBS: </ b>",
- " and " : "och",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> cURL stöd i PHP inte är aktiverat eller installeras. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> Den FTP-stöd i PHP inte är aktiverat eller installeras. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
+ "and" : "och",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> cURL-stöd i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> FTP-stödet i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> \"%s\" är inte installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "You don't have any external storages" : "Du har ingen extern extern lagring",
+ "No external storages configured" : "Inga externa lagringsplatser konfigurerade",
+ "You can configure external storages in the personal settings" : "Du kan konfigurera externa laringsplatser i personliga inställningar",
"Name" : "Namn",
"Storage type" : "Lagringstyp",
"Scope" : "Scope",
diff --git a/apps/files_external/l10n/sv.json b/apps/files_external/l10n/sv.json
index 12b9f36fd5d..caf24335e9f 100644
--- a/apps/files_external/l10n/sv.json
+++ b/apps/files_external/l10n/sv.json
@@ -2,6 +2,8 @@
"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Misslyckades att hämta access tokens. Verifiera att din Dropbox app-nyckel och app-hemlighet är korrekt",
"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Misslyckades att hämta request tokens. Verifiera att din Dropbox app-nyckel och app-hemlighet är korrekt",
"Please provide a valid Dropbox app key and secret." : "Ange en giltig Dropbox nyckel och hemlighet.",
+ "Step 1 failed. Exception: %s" : "Steg 1 flaerade. Undantag: %s",
+ "Step 2 failed. Exception: %s" : "Steg 2 falerade. Undantag: %s",
"External storage" : "Extern lagring",
"Local" : "Lokal",
"Location" : "Plats",
@@ -12,6 +14,7 @@
"Amazon S3 and compliant" : "Amazon S3 och compliant",
"Access Key" : "Accessnyckel",
"Secret Key" : "Hemlig nyckel",
+ "Hostname" : "Värdnamn",
"Port" : "Port",
"Region" : "Län",
"Enable SSL" : "Aktivera SSL",
@@ -21,7 +24,7 @@
"Host" : "Server",
"Username" : "Användarnamn",
"Password" : "Lösenord",
- "Root" : "Root",
+ "Remote subfolder" : "Fjärrmapp",
"Secure ftps://" : "Säker ftps://",
"Client ID" : "Klient ID",
"Client secret" : "klient secret",
@@ -32,25 +35,28 @@
"Password (required for OpenStack Object Storage)" : "Lösenord (krävs för OpenStack Object Storage)",
"Service Name (required for OpenStack Object Storage)" : "Tjänstens namn (krävs för OpenStack Object Storage)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL för identitetens slutpunkt (krävs för OpenStack Object Storage)",
+ "Timeout of HTTP requests in seconds" : "Timeout för HTTP-anrop i sekunder",
"Share" : "Dela",
"SMB / CIFS using OC login" : "SMB / CIFS använder OC inloggning",
"Username as share" : "Användarnamn till utdelning",
"URL" : "URL",
"Secure https://" : "Säker https://",
- "Remote subfolder" : "Fjärrmapp",
"Access granted" : "Åtkomst beviljad",
"Error configuring Dropbox storage" : "Fel vid konfigurering av Dropbox",
"Grant access" : "Bevilja åtkomst",
"Error configuring Google Drive storage" : "Fel vid konfigurering av Google Drive",
"Personal" : "Personligt",
"System" : "System",
+ "All users. Type to select user or group." : "Alla användare. Skriv för att välja användare eller grupp.",
+ "(group)" : "(grupp)",
"Saved" : "Sparad",
"<b>Note:</b> " : "<b> OBS: </ b>",
- " and " : "och",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> cURL stöd i PHP inte är aktiverat eller installeras. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> Den FTP-stöd i PHP inte är aktiverat eller installeras. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
+ "and" : "och",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> cURL-stöd i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> FTP-stödet i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> \"%s\" är inte installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "You don't have any external storages" : "Du har ingen extern extern lagring",
+ "No external storages configured" : "Inga externa lagringsplatser konfigurerade",
+ "You can configure external storages in the personal settings" : "Du kan konfigurera externa laringsplatser i personliga inställningar",
"Name" : "Namn",
"Storage type" : "Lagringstyp",
"Scope" : "Scope",
diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js
index cbe240b5818..4672fee457c 100644
--- a/apps/files_external/l10n/tr.js
+++ b/apps/files_external/l10n/tr.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Sunucu",
"Username" : "Kullanıcı Adı",
"Password" : "Parola",
- "Root" : "Kök",
+ "Remote subfolder" : "Uzak alt klasör",
"Secure ftps://" : "Güvenli ftps://",
"Client ID" : "İstemci kimliği",
"Client secret" : "İstemci parolası",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Paylaşım olarak kullanıcı adı",
"URL" : "URL",
"Secure https://" : "Güvenli https://",
- "Remote subfolder" : "Uzak alt klasör",
"Access granted" : "Giriş kabul edildi",
"Error configuring Dropbox storage" : "Dropbox depo yapılandırma hatası",
"Grant access" : "Erişimi sağla",
@@ -54,11 +53,10 @@ OC.L10N.register(
"(group)" : "(grup)",
"Saved" : "Kaydedildi",
"<b>Note:</b> " : "<b>Not:</b> ",
- " and " : "ve",
+ "and" : "ve",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "You don't have any external storages" : "Hiç harici depolamanız yok",
"Name" : "Ad",
"Storage type" : "Depolama türü",
"Scope" : "Kapsam",
diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json
index 669608cca27..7a6143d69de 100644
--- a/apps/files_external/l10n/tr.json
+++ b/apps/files_external/l10n/tr.json
@@ -24,7 +24,7 @@
"Host" : "Sunucu",
"Username" : "Kullanıcı Adı",
"Password" : "Parola",
- "Root" : "Kök",
+ "Remote subfolder" : "Uzak alt klasör",
"Secure ftps://" : "Güvenli ftps://",
"Client ID" : "İstemci kimliği",
"Client secret" : "İstemci parolası",
@@ -41,7 +41,6 @@
"Username as share" : "Paylaşım olarak kullanıcı adı",
"URL" : "URL",
"Secure https://" : "Güvenli https://",
- "Remote subfolder" : "Uzak alt klasör",
"Access granted" : "Giriş kabul edildi",
"Error configuring Dropbox storage" : "Dropbox depo yapılandırma hatası",
"Grant access" : "Erişimi sağla",
@@ -52,11 +51,10 @@
"(group)" : "(grup)",
"Saved" : "Kaydedildi",
"<b>Note:</b> " : "<b>Not:</b> ",
- " and " : "ve",
+ "and" : "ve",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "You don't have any external storages" : "Hiç harici depolamanız yok",
"Name" : "Ad",
"Storage type" : "Depolama türü",
"Scope" : "Kapsam",
diff --git a/apps/files_external/l10n/uk.js b/apps/files_external/l10n/uk.js
index 7cf8533fd24..dc914f9340f 100644
--- a/apps/files_external/l10n/uk.js
+++ b/apps/files_external/l10n/uk.js
@@ -26,7 +26,7 @@ OC.L10N.register(
"Host" : "Хост",
"Username" : "Ім'я користувача",
"Password" : "Пароль",
- "Root" : "Батьківський каталог",
+ "Remote subfolder" : "Віддалений підкаталог",
"Secure ftps://" : "Захищений ftps://",
"Client ID" : "Ідентифікатор клієнта",
"Client secret" : "Ключ клієнта",
@@ -43,7 +43,6 @@ OC.L10N.register(
"Username as share" : "Ім'я для відкритого доступу",
"URL" : "URL",
"Secure https://" : "Захищений https://",
- "Remote subfolder" : "Віддалений підкаталог",
"Access granted" : "Доступ дозволено",
"Error configuring Dropbox storage" : "Помилка при налаштуванні сховища Dropbox",
"Grant access" : "Дозволити доступ",
@@ -54,11 +53,9 @@ OC.L10N.register(
"(group)" : "(група)",
"Saved" : "Збереженно",
"<b>Note:</b> " : "<b>Примітка:</b>",
- " and " : "та",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку cURL в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку FTP в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> \"%s\" не встановлено. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
- "You don't have any external storages" : "У вас немає зовнішніх сховищ",
"Name" : "Ім'я",
"Storage type" : "Тип сховища",
"Scope" : "Область",
diff --git a/apps/files_external/l10n/uk.json b/apps/files_external/l10n/uk.json
index 8ebccaf5c1c..7c18abea055 100644
--- a/apps/files_external/l10n/uk.json
+++ b/apps/files_external/l10n/uk.json
@@ -24,7 +24,7 @@
"Host" : "Хост",
"Username" : "Ім'я користувача",
"Password" : "Пароль",
- "Root" : "Батьківський каталог",
+ "Remote subfolder" : "Віддалений підкаталог",
"Secure ftps://" : "Захищений ftps://",
"Client ID" : "Ідентифікатор клієнта",
"Client secret" : "Ключ клієнта",
@@ -41,7 +41,6 @@
"Username as share" : "Ім'я для відкритого доступу",
"URL" : "URL",
"Secure https://" : "Захищений https://",
- "Remote subfolder" : "Віддалений підкаталог",
"Access granted" : "Доступ дозволено",
"Error configuring Dropbox storage" : "Помилка при налаштуванні сховища Dropbox",
"Grant access" : "Дозволити доступ",
@@ -52,11 +51,9 @@
"(group)" : "(група)",
"Saved" : "Збереженно",
"<b>Note:</b> " : "<b>Примітка:</b>",
- " and " : "та",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку cURL в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку FTP в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> \"%s\" не встановлено. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
- "You don't have any external storages" : "У вас немає зовнішніх сховищ",
"Name" : "Ім'я",
"Storage type" : "Тип сховища",
"Scope" : "Область",
diff --git a/apps/files_external/l10n/zh_CN.js b/apps/files_external/l10n/zh_CN.js
index 8c71da68db7..1045c03423f 100644
--- a/apps/files_external/l10n/zh_CN.js
+++ b/apps/files_external/l10n/zh_CN.js
@@ -18,14 +18,13 @@ OC.L10N.register(
"Host" : "主机",
"Username" : "用户名",
"Password" : "密码",
- "Root" : "根路径",
+ "Remote subfolder" : "远程子文件夹",
"Secure ftps://" : "安全 ftps://",
"OpenStack Object Storage" : "OpenStack 对象存储",
"Share" : "共享",
"SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登录信息",
"URL" : "URL",
"Secure https://" : "安全 https://",
- "Remote subfolder" : "远程子文件夹",
"Access granted" : "权限已授予。",
"Error configuring Dropbox storage" : "配置Dropbox存储时出错",
"Grant access" : "授权",
@@ -34,8 +33,6 @@ OC.L10N.register(
"System" : "系统",
"Saved" : "已保存",
"<b>Note:</b> " : "<b>注意:</b>",
- " and " : "和",
- "You don't have any external storages" : "您没有外部存储",
"Name" : "名称",
"Storage type" : "存储类型",
"Scope" : "适用范围",
diff --git a/apps/files_external/l10n/zh_CN.json b/apps/files_external/l10n/zh_CN.json
index ba2ca93be86..b6a826e4209 100644
--- a/apps/files_external/l10n/zh_CN.json
+++ b/apps/files_external/l10n/zh_CN.json
@@ -16,14 +16,13 @@
"Host" : "主机",
"Username" : "用户名",
"Password" : "密码",
- "Root" : "根路径",
+ "Remote subfolder" : "远程子文件夹",
"Secure ftps://" : "安全 ftps://",
"OpenStack Object Storage" : "OpenStack 对象存储",
"Share" : "共享",
"SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登录信息",
"URL" : "URL",
"Secure https://" : "安全 https://",
- "Remote subfolder" : "远程子文件夹",
"Access granted" : "权限已授予。",
"Error configuring Dropbox storage" : "配置Dropbox存储时出错",
"Grant access" : "授权",
@@ -32,8 +31,6 @@
"System" : "系统",
"Saved" : "已保存",
"<b>Note:</b> " : "<b>注意:</b>",
- " and " : "和",
- "You don't have any external storages" : "您没有外部存储",
"Name" : "名称",
"Storage type" : "存储类型",
"Scope" : "适用范围",
diff --git a/apps/files_external/l10n/zh_HK.js b/apps/files_external/l10n/zh_HK.js
index d8446e4dac6..9ad4b8a7bce 100644
--- a/apps/files_external/l10n/zh_HK.js
+++ b/apps/files_external/l10n/zh_HK.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"files_external",
{
"Port" : "連接埠",
+ "Host" : "主機",
"Username" : "用戶名稱",
"Password" : "密碼",
"Share" : "分享",
diff --git a/apps/files_external/l10n/zh_HK.json b/apps/files_external/l10n/zh_HK.json
index 46d6c0dabe7..955170d618f 100644
--- a/apps/files_external/l10n/zh_HK.json
+++ b/apps/files_external/l10n/zh_HK.json
@@ -1,5 +1,6 @@
{ "translations": {
"Port" : "連接埠",
+ "Host" : "主機",
"Username" : "用戶名稱",
"Password" : "密碼",
"Share" : "分享",
diff --git a/apps/files_external/l10n/zh_TW.js b/apps/files_external/l10n/zh_TW.js
index a1f2d8a226d..22c213ad5cc 100644
--- a/apps/files_external/l10n/zh_TW.js
+++ b/apps/files_external/l10n/zh_TW.js
@@ -25,11 +25,9 @@ OC.L10N.register(
"System" : "系統",
"Saved" : "已儲存",
"<b>Note:</b> " : "<b>警告:</b> ",
- " and " : "與",
"<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。請洽您的系統管理員將其安裝並啓用。",
- "You don't have any external storages" : "您沒有任何外部儲存",
"Name" : "名稱",
"External Storage" : "外部儲存",
"Folder name" : "資料夾名稱",
diff --git a/apps/files_external/l10n/zh_TW.json b/apps/files_external/l10n/zh_TW.json
index 03a20a3215e..84d1abf182a 100644
--- a/apps/files_external/l10n/zh_TW.json
+++ b/apps/files_external/l10n/zh_TW.json
@@ -23,11 +23,9 @@
"System" : "系統",
"Saved" : "已儲存",
"<b>Note:</b> " : "<b>警告:</b> ",
- " and " : "與",
"<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。請洽您的系統管理員將其安裝並啓用。",
- "You don't have any external storages" : "您沒有任何外部儲存",
"Name" : "名稱",
"External Storage" : "外部儲存",
"Folder name" : "資料夾名稱",
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index 53adb929e29..4d94e3561f8 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -267,10 +267,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$file = basename(
isset($object['Key']) ? $object['Key'] : $object['Prefix']
);
-
- if ($file != basename($path)) {
- $files[] = $file;
- }
+ $files[] = $file;
}
\OC\Files\Stream\Dir::register('amazons3' . $path, $files);
diff --git a/apps/files_external/lib/api.php b/apps/files_external/lib/api.php
index 81ebd4e886a..3b5e0e1759a 100644
--- a/apps/files_external/lib/api.php
+++ b/apps/files_external/lib/api.php
@@ -45,10 +45,10 @@ class Api {
$isSystemMount = !$mountConfig['personal'];
- $permissions = \OCP\PERMISSION_READ;
+ $permissions = \OCP\Constants::PERMISSION_READ;
// personal mounts can be deleted
if (!$isSystemMount) {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
$entry = array(
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index fa44e446d96..823c0bcbfc1 100644
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -1,25 +1,25 @@
<?php
/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
-* @copyright 2014 Vincent Petry <pvince81@owncloud.com>
-* @copyright 2014 Robin McCorkell <rmccorkell@karoshi.org.uk>
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*/
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+ * @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+ * @copyright 2014 Robin McCorkell <rmccorkell@karoshi.org.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
/**
* Class to configure mount.json globally and for users
@@ -64,16 +64,17 @@ class OC_Mount_Config {
}
/**
- * Get details on each of the external storage backends, used for the mount config UI
- * If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
- * If the configuration parameter should be secret, add a '*' to the beginning of the value
- * If the configuration parameter is a boolean, add a '!' to the beginning of the value
- * If the configuration parameter is optional, add a '&' to the beginning of the value
- * If the configuration parameter is hidden, add a '#' to the beginning of the value
- * @return array
- */
+ * Get details on each of the external storage backends, used for the mount config UI
+ * If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
+ * If the configuration parameter should be secret, add a '*' to the beginning of the value
+ * If the configuration parameter is a boolean, add a '!' to the beginning of the value
+ * If the configuration parameter is optional, add a '&' to the beginning of the value
+ * If the configuration parameter is hidden, add a '#' to the beginning of the value
+ *
+ * @return array
+ */
public static function getBackends() {
- $sortFunc = function($a, $b) {
+ $sortFunc = function ($a, $b) {
return strcasecmp($a['backend'], $b['backend']);
};
@@ -100,27 +101,22 @@ class OC_Mount_Config {
/**
* Hook that mounts the given user's visible mount points
+ *
* @param array $data
*/
public static function initMountPointsHook($data) {
- $mountPoints = self::getAbsoluteMountPoints($data['user']);
- $loader = \OC\Files\Filesystem::getLoader();
- $manager = \OC\Files\Filesystem::getMountManager();
- foreach ($mountPoints as $mountPoint => $options) {
- if (isset($options['options']['objectstore'])) {
- $objectClass = $options['options']['objectstore']['class'];
- $options['options']['objectstore'] = new $objectClass($options['options']['objectstore']);
- }
- if (isset($options['personal']) && $options['personal']) {
- $mount = new \OCA\Files_External\PersonalMount($options['class'], $mountPoint, $options['options'], $loader);
- } else{
- $mount = new \OC\Files\Mount\Mount($options['class'], $mountPoint, $options['options'], $loader);
- }
- $manager->addMount($mount);
- }
-
+ self::addStorageIdToConfig(null);
if ($data['user']) {
+ self::addStorageIdToConfig($data['user']);
$user = \OC::$server->getUserManager()->get($data['user']);
+ if (!$user) {
+ \OC_Log::write(
+ 'files_external',
+ 'Cannot init external mount points for non-existant user "' . $data['user'] . '".',
+ \OC_Log::WARN
+ );
+ return;
+ }
$userView = new \OC\Files\View('/' . $user->getUID() . '/files');
$changePropagator = new \OC\Files\Cache\ChangePropagator($userView);
$etagPropagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, \OC::$server->getConfig());
@@ -169,8 +165,9 @@ class OC_Mount_Config {
}
// Override if priority greater
- if ( (!isset($mountPoints[$mountPoint]))
- || ($options['priority'] >= $mountPoints[$mountPoint]['priority']) ) {
+ if ((!isset($mountPoints[$mountPoint]))
+ || ($options['priority'] >= $mountPoints[$mountPoint]['priority'])
+ ) {
$options['priority_type'] = self::MOUNT_TYPE_GLOBAL;
$options['backend'] = $backends[$options['class']]['backend'];
$mountPoints[$mountPoint] = $options;
@@ -192,8 +189,9 @@ class OC_Mount_Config {
}
// Override if priority greater
- if ( (!isset($mountPoints[$mountPoint]))
- || ($options['priority'] >= $mountPoints[$mountPoint]['priority']) ) {
+ if ((!isset($mountPoints[$mountPoint]))
+ || ($options['priority'] >= $mountPoints[$mountPoint]['priority'])
+ ) {
$options['priority_type'] = self::MOUNT_TYPE_GLOBAL;
$options['backend'] = $backends[$options['class']]['backend'];
$mountPoints[$mountPoint] = $options;
@@ -216,9 +214,10 @@ class OC_Mount_Config {
}
// Override if priority greater or if priority type different
- if ( (!isset($mountPoints[$mountPoint]))
+ if ((!isset($mountPoints[$mountPoint]))
|| ($options['priority'] >= $mountPoints[$mountPoint]['priority'])
- || ($mountPoints[$mountPoint]['priority_type'] !== self::MOUNT_TYPE_GROUP) ) {
+ || ($mountPoints[$mountPoint]['priority_type'] !== self::MOUNT_TYPE_GROUP)
+ ) {
$options['priority_type'] = self::MOUNT_TYPE_GROUP;
$options['backend'] = $backends[$options['class']]['backend'];
$mountPoints[$mountPoint] = $options;
@@ -243,9 +242,10 @@ class OC_Mount_Config {
}
// Override if priority greater or if priority type different
- if ( (!isset($mountPoints[$mountPoint]))
+ if ((!isset($mountPoints[$mountPoint]))
|| ($options['priority'] >= $mountPoints[$mountPoint]['priority'])
- || ($mountPoints[$mountPoint]['priority_type'] !== self::MOUNT_TYPE_USER) ) {
+ || ($mountPoints[$mountPoint]['priority_type'] !== self::MOUNT_TYPE_USER)
+ ) {
$options['priority_type'] = self::MOUNT_TYPE_USER;
$options['backend'] = $backends[$options['class']]['backend'];
$mountPoints[$mountPoint] = $options;
@@ -289,22 +289,23 @@ class OC_Mount_Config {
/**
- * Get details on each of the external storage backends, used for the mount config UI
- * Some backends are not available as a personal backend, f.e. Local and such that have
- * been disabled by the admin.
- *
- * If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
- * If the configuration parameter should be secret, add a '*' to the beginning of the value
- * If the configuration parameter is a boolean, add a '!' to the beginning of the value
- * If the configuration parameter is optional, add a '&' to the beginning of the value
- * If the configuration parameter is hidden, add a '#' to the beginning of the value
- * @return array
- */
+ * Get details on each of the external storage backends, used for the mount config UI
+ * Some backends are not available as a personal backend, f.e. Local and such that have
+ * been disabled by the admin.
+ *
+ * If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
+ * If the configuration parameter should be secret, add a '*' to the beginning of the value
+ * If the configuration parameter is a boolean, add a '!' to the beginning of the value
+ * If the configuration parameter is optional, add a '&' to the beginning of the value
+ * If the configuration parameter is hidden, add a '#' to the beginning of the value
+ *
+ * @return array
+ */
public static function getPersonalBackends() {
// Check whether the user has permissions to add personal storage backends
// return an empty array if this is not the case
- if(OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes') !== 'yes') {
+ if (OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes') !== 'yes') {
return array();
}
@@ -324,10 +325,11 @@ class OC_Mount_Config {
}
/**
- * Get the system mount points
- * The returned array is not in the same format as getUserMountPoints()
- * @return array
- */
+ * Get the system mount points
+ * The returned array is not in the same format as getUserMountPoints()
+ *
+ * @return array
+ */
public static function getSystemMountPoints() {
$mountPoints = self::readData();
$backends = self::getBackends();
@@ -337,7 +339,7 @@ class OC_Mount_Config {
foreach ($mounts as $mountPoint => $mount) {
// Update old classes to new namespace
if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
- $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ $mount['class'] = '\OC\Files\Storage\\' . substr($mount['class'], 15);
}
$mount['options'] = self::decryptPasswords($mount['options']);
if (!isset($mount['priority'])) {
@@ -372,7 +374,7 @@ class OC_Mount_Config {
foreach ($mounts as $mountPoint => $mount) {
// Update old classes to new namespace
if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
- $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ $mount['class'] = '\OC\Files\Storage\\' . substr($mount['class'], 15);
}
$mount['options'] = self::decryptPasswords($mount['options']);
if (!isset($mount['priority'])) {
@@ -405,10 +407,11 @@ class OC_Mount_Config {
}
/**
- * Get the personal mount points of the current user
- * The returned array is not in the same format as getUserMountPoints()
- * @return array
- */
+ * Get the personal mount points of the current user
+ * The returned array is not in the same format as getUserMountPoints()
+ *
+ * @return array
+ */
public static function getPersonalMountPoints() {
$mountPoints = self::readData(OCP\User::getUser());
$backEnds = self::getBackends();
@@ -418,7 +421,7 @@ class OC_Mount_Config {
foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) {
// Update old classes to new namespace
if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
- $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ $mount['class'] = '\OC\Files\Storage\\' . substr($mount['class'], 15);
}
$mount['options'] = self::decryptPasswords($mount['options']);
$personal[] = array(
@@ -436,6 +439,7 @@ class OC_Mount_Config {
/**
* Test connecting using the given backend configuration
+ *
* @param string $class backend class name
* @param array $options backend configuration options
* @return bool true if the connection succeeded, false otherwise
@@ -460,16 +464,17 @@ class OC_Mount_Config {
}
/**
- * Add a mount point to the filesystem
- * @param string $mountPoint Mount point
- * @param string $class Backend class
- * @param array $classOptions Backend parameters for the class
- * @param string $mountType MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
- * @param string $applicable User or group to apply mount to
- * @param bool $isPersonal Personal or system mount point i.e. is this being called from the personal or admin page
- * @param int|null $priority Mount point priority, null for default
- * @return boolean
- */
+ * Add a mount point to the filesystem
+ *
+ * @param string $mountPoint Mount point
+ * @param string $class Backend class
+ * @param array $classOptions Backend parameters for the class
+ * @param string $mountType MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
+ * @param string $applicable User or group to apply mount to
+ * @param bool $isPersonal Personal or system mount point i.e. is this being called from the personal or admin page
+ * @param int|null $priority Mount point priority, null for default
+ * @return boolean
+ */
public static function addMountPoint($mountPoint,
$class,
$classOptions,
@@ -496,22 +501,22 @@ class OC_Mount_Config {
if ($applicable != OCP\User::getUser() || !isset($allowed_backends[$class])) {
return false;
}
- $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
+ $mountPoint = '/' . $applicable . '/files/' . ltrim($mountPoint, '/');
} else {
- $mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
+ $mountPoint = '/$user/files/' . ltrim($mountPoint, '/');
}
$mount = array($applicable => array(
$mountPoint => array(
'class' => $class,
'options' => self::encryptPasswords($classOptions))
- )
+ )
);
- if (! $isPersonal && !is_null($priority)) {
+ if (!$isPersonal && !is_null($priority)) {
$mount[$applicable][$mountPoint]['priority'] = $priority;
}
- $mountPoints = self::readData($isPersonal ? OCP\User::getUser() : NULL);
+ $mountPoints = self::readData($isPersonal ? OCP\User::getUser() : null);
// who else loves multi-dimensional array ?
$isNew = !isset($mountPoints[$mountType]) ||
!isset($mountPoints[$mountType][$applicable]) ||
@@ -529,7 +534,7 @@ class OC_Mount_Config {
}
}
- self::writeData($isPersonal ? OCP\User::getUser() : NULL, $mountPoints);
+ self::writeData($isPersonal ? OCP\User::getUser() : null, $mountPoints);
$result = self::getBackendStatus($class, $classOptions, $isPersonal);
if ($result && $isNew) {
@@ -547,13 +552,13 @@ class OC_Mount_Config {
}
/**
- *
- * @param string $mountPoint Mount point
- * @param string $mountType MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
- * @param string $applicable User or group to remove mount from
- * @param bool $isPersonal Personal or system mount point
- * @return bool
- */
+ *
+ * @param string $mountPoint Mount point
+ * @param string $mountType MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
+ * @param string $applicable User or group to remove mount from
+ * @param bool $isPersonal Personal or system mount point
+ * @return bool
+ */
public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) {
// Verify that the mount point applies for the current user
$relMountPoints = $mountPoint;
@@ -561,12 +566,12 @@ class OC_Mount_Config {
if ($applicable != OCP\User::getUser()) {
return false;
}
- $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
+ $mountPoint = '/' . $applicable . '/files/' . ltrim($mountPoint, '/');
} else {
- $mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
+ $mountPoint = '/$user/files/' . ltrim($mountPoint, '/');
}
$mountPoint = \OC\Files\Filesystem::normalizePath($mountPoint);
- $mountPoints = self::readData($isPersonal ? OCP\User::getUser() : NULL);
+ $mountPoints = self::readData($isPersonal ? OCP\User::getUser() : null);
// Remove mount point
unset($mountPoints[$mountType][$applicable][$mountPoint]);
// Unset parent arrays if empty
@@ -576,7 +581,7 @@ class OC_Mount_Config {
unset($mountPoints[$mountType]);
}
}
- self::writeData($isPersonal ? OCP\User::getUser() : NULL, $mountPoints);
+ self::writeData($isPersonal ? OCP\User::getUser() : null, $mountPoints);
\OC_Hook::emit(
\OC\Files\Filesystem::CLASSNAME,
\OC\Files\Filesystem::signal_delete_mount,
@@ -612,17 +617,18 @@ class OC_Mount_Config {
}
/**
- * Read the mount points in the config file into an array
- * @param string|null $user If not null, personal for $user, otherwise system
- * @return array
- */
- private static function readData($user = NULL) {
+ * Read the mount points in the config file into an array
+ *
+ * @param string|null $user If not null, personal for $user, otherwise system
+ * @return array
+ */
+ private static function readData($user = null) {
$parser = new \OC\ArrayParser();
if (isset($user)) {
- $phpFile = OC_User::getHome($user).'/mount.php';
- $jsonFile = OC_User::getHome($user).'/mount.json';
+ $phpFile = OC_User::getHome($user) . '/mount.php';
+ $jsonFile = OC_User::getHome($user) . '/mount.json';
} else {
- $phpFile = OC::$SERVERROOT.'/config/mount.php';
+ $phpFile = OC::$SERVERROOT . '/config/mount.php';
$datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data/');
$jsonFile = \OC_Config::getValue('mount_file', $datadir . '/mount.json');
}
@@ -641,23 +647,28 @@ class OC_Mount_Config {
}
/**
- * Write the mount points to the config file
- * @param string|null $user If not null, personal for $user, otherwise system
- * @param array $data Mount points
- */
+ * Write the mount points to the config file
+ *
+ * @param string|null $user If not null, personal for $user, otherwise system
+ * @param array $data Mount points
+ */
private static function writeData($user, $data) {
if (isset($user)) {
- $file = OC_User::getHome($user).'/mount.json';
+ $file = OC_User::getHome($user) . '/mount.json';
} else {
$datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data/');
$file = \OC_Config::getValue('mount_file', $datadir . '/mount.json');
}
- $options = 0;
- if (defined('JSON_PRETTY_PRINT')) {
- // only for PHP >= 5.4
- $options = JSON_PRETTY_PRINT;
+
+ foreach ($data as &$applicables) {
+ foreach ($applicables as &$mountPoints) {
+ foreach ($mountPoints as &$options) {
+ self::addStorageId($options);
+ }
+ }
}
- $content = json_encode($data, $options);
+
+ $content = json_encode($data, JSON_PRETTY_PRINT);
@file_put_contents($file, $content);
@chmod($file, 0640);
}
@@ -691,7 +702,7 @@ class OC_Mount_Config {
return '';
}
- private static function addDependency(&$dependencies, $module, $backend, $message=null) {
+ private static function addDependency(&$dependencies, $module, $backend, $message = null) {
if (!isset($dependencies[$module])) {
$dependencies[$module] = array();
}
@@ -721,7 +732,7 @@ class OC_Mount_Config {
$backends = '';
for ($i = 0; $i < $dependencyGroupCount; $i++) {
if ($i > 0 && $i === $dependencyGroupCount - 1) {
- $backends .= $l->t(' and ');
+ $backends .= ' ' . $l->t('and') . ' ';
} elseif ($i > 0) {
$backends .= ', ';
}
@@ -735,6 +746,7 @@ class OC_Mount_Config {
/**
* Returns a dependency missing message
+ *
* @param OC_L10N $l
* @param string $module
* @param string $backend
@@ -753,6 +765,7 @@ class OC_Mount_Config {
/**
* Encrypt passwords in the given config options
+ *
* @param array $options mount options
* @return array updated options
*/
@@ -768,6 +781,7 @@ class OC_Mount_Config {
/**
* Decrypt passwords in the given config options
+ *
* @param array $options mount options
* @return array updated options
*/
@@ -782,6 +796,7 @@ class OC_Mount_Config {
/**
* Encrypt a single password
+ *
* @param string $password plain text password
* @return string encrypted password
*/
@@ -794,6 +809,7 @@ class OC_Mount_Config {
/**
* Decrypts a single password
+ *
* @param string $encryptedPassword encrypted password
* @return string plain text password
*/
@@ -808,6 +824,7 @@ class OC_Mount_Config {
/**
* Merges mount points
+ *
* @param array $data Existing mount points
* @param array $mountPoint New mount point
* @param string $mountType
@@ -821,7 +838,8 @@ class OC_Mount_Config {
// Merge priorities
if (isset($data[$mountType][$applicable][$mountPath])
&& isset($data[$mountType][$applicable][$mountPath]['priority'])
- && !isset($mountPoint[$applicable][$mountPath]['priority'])) {
+ && !isset($mountPoint[$applicable][$mountPath]['priority'])
+ ) {
$mountPoint[$applicable][$mountPath]['priority']
= $data[$mountType][$applicable][$mountPath]['priority'];
}
@@ -844,7 +862,7 @@ class OC_Mount_Config {
include('Crypt/AES.php');
}
$cipher = new Crypt_AES(CRYPT_AES_MODE_CBC);
- $cipher->setKey(\OCP\Config::getSystemValue('passwordsalt'));
+ $cipher->setKey(\OC::$server->getConfig()->getSystemValue('passwordsalt', null));
return $cipher;
}
@@ -863,4 +881,32 @@ class OC_Mount_Config {
);
return hash('md5', $data);
}
+
+ private static function addStorageIdToConfig($user) {
+ $config = self::readData($user);
+
+ $needUpdate = false;
+ foreach ($config as &$applicables) {
+ foreach ($applicables as &$mountPoints) {
+ foreach ($mountPoints as &$options) {
+ $needUpdate |= !isset($options['storage_id']);
+ }
+ }
+ }
+
+ if ($needUpdate) {
+ self::writeData($user, $config);
+ }
+ }
+
+ private static function addStorageId(&$options) {
+ if (isset($options['storage_id'])) {
+ return false;
+ }
+ $class = $options['class'];
+ /** @var \OC\Files\Storage\Storage $storage */
+ $storage = new $class($options['options']);
+ $options['storage_id'] = $storage->getCache()->getNumericStorageId();
+ return true;
+ }
}
diff --git a/apps/files_external/lib/config/configadapter.php b/apps/files_external/lib/config/configadapter.php
new file mode 100644
index 00000000000..de484a44698
--- /dev/null
+++ b/apps/files_external/lib/config/configadapter.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_External\Config;
+
+use OC\Files\Mount\MountPoint;
+use OCP\Files\Storage\IStorageFactory;
+use OCA\Files_External\PersonalMount;
+use OCP\Files\Config\IMountProvider;
+use OCP\IUser;
+
+/**
+ * Make the old files_external config work with the new public mount config api
+ */
+class ConfigAdapter implements IMountProvider {
+ /**
+ * Get all mountpoints applicable for the user
+ *
+ * @param \OCP\IUser $user
+ * @param \OCP\Files\Storage\IStorageFactory $loader
+ * @return \OCP\Files\Mount\IMountPoint[]
+ */
+ public function getMountsForUser(IUser $user, IStorageFactory $loader) {
+ $mountPoints = \OC_Mount_Config::getAbsoluteMountPoints($user->getUID());
+ $mounts = array();
+ foreach ($mountPoints as $mountPoint => $options) {
+ if (isset($options['options']['objectstore'])) {
+ $objectClass = $options['options']['objectstore']['class'];
+ $options['options']['objectstore'] = new $objectClass($options['options']['objectstore']);
+ }
+ $mountOptions = isset($options['mountOptions']) ? $options['mountOptions'] : [];
+ if (isset($options['personal']) && $options['personal']) {
+ $mounts[] = new PersonalMount($options['class'], $mountPoint, $options['options'], $loader, $mountOptions);
+ } else {
+ $mounts[] = new MountPoint($options['class'], $mountPoint, $options['options'], $loader, $mountOptions);
+ }
+ }
+ return $mounts;
+ }
+}
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index 62b0f182e98..bd9bdce2a67 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -23,11 +23,12 @@ namespace OC\Files\Storage;
set_include_path(get_include_path().PATH_SEPARATOR.
\OC_App::getAppPath('files_external').'/3rdparty/google-api-php-client/src');
-require_once 'Google_Client.php';
-require_once 'contrib/Google_DriveService.php';
+require_once 'Google/Client.php';
+require_once 'Google/Service/Drive.php';
class Google extends \OC\Files\Storage\Common {
+ private $client;
private $id;
private $service;
private $driveFiles;
@@ -46,14 +47,19 @@ class Google extends \OC\Files\Storage\Common {
&& isset($params['client_id']) && isset($params['client_secret'])
&& isset($params['token'])
) {
- $client = new \Google_Client();
- $client->setClientId($params['client_id']);
- $client->setClientSecret($params['client_secret']);
- $client->setScopes(array('https://www.googleapis.com/auth/drive'));
- $client->setUseObjects(true);
- $client->setAccessToken($params['token']);
+ $this->client = new \Google_Client();
+ $this->client->setClientId($params['client_id']);
+ $this->client->setClientSecret($params['client_secret']);
+ $this->client->setScopes(array('https://www.googleapis.com/auth/drive'));
+ $this->client->setAccessToken($params['token']);
+ // if curl isn't available we're likely to run into
+ // https://github.com/google/google-api-php-client/issues/59
+ // - disable gzip to avoid it.
+ if (!function_exists('curl_version') || !function_exists('curl_exec')) {
+ $this->client->setClassConfig("Google_Http_Request", "disable_gzip", true);
+ }
// note: API connection is lazy
- $this->service = new \Google_DriveService($client);
+ $this->service = new \Google_Service_Drive($this->client);
$token = json_decode($params['token'], true);
$this->id = 'google::'.substr($params['client_id'], 0, 30).$token['created'];
} else {
@@ -66,9 +72,10 @@ class Google extends \OC\Files\Storage\Common {
}
/**
- * Get the Google_DriveFile object for the specified path
+ * Get the Google_Service_Drive_DriveFile object for the specified path.
+ * Returns false on failure.
* @param string $path
- * @return string
+ * @return \Google_Service_Drive_DriveFile|false
*/
private function getDriveFile($path) {
// Remove leading and trailing slashes
@@ -115,7 +122,7 @@ class Google extends \OC\Files\Storage\Common {
$pathWithoutExt = substr($path, 0, $pos);
$file = $this->getDriveFile($pathWithoutExt);
if ($file) {
- // Switch cached Google_DriveFile to the correct index
+ // Switch cached Google_Service_Drive_DriveFile to the correct index
unset($this->driveFiles[$pathWithoutExt]);
$this->driveFiles[$path] = $file;
$parentId = $file->getId();
@@ -133,9 +140,9 @@ class Google extends \OC\Files\Storage\Common {
}
/**
- * Set the Google_DriveFile object in the cache
+ * Set the Google_Service_Drive_DriveFile object in the cache
* @param string $path
- * @param Google_DriveFile|false $file
+ * @param Google_Service_Drive_DriveFile|false $file
*/
private function setDriveFile($path, $file) {
$path = trim($path, '/');
@@ -188,10 +195,10 @@ class Google extends \OC\Files\Storage\Common {
if (!$this->is_dir($path)) {
$parentFolder = $this->getDriveFile(dirname($path));
if ($parentFolder) {
- $folder = new \Google_DriveFile();
+ $folder = new \Google_Service_Drive_DriveFile();
$folder->setTitle(basename($path));
$folder->setMimeType(self::FOLDER);
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder->getId());
$folder->setParents(array($parent));
$result = $this->service->files->insert($folder);
@@ -266,7 +273,7 @@ class Google extends \OC\Files\Storage\Common {
$this->onDuplicateFileDetected($filepath);
}
} else {
- // Cache the Google_DriveFile for future use
+ // Cache the Google_Service_Drive_DriveFile for future use
$this->setDriveFile($filepath, $child);
$files[] = $name;
}
@@ -356,17 +363,29 @@ class Google extends \OC\Files\Storage\Common {
// Change file parent
$parentFolder2 = $this->getDriveFile(dirname($path2));
if ($parentFolder2) {
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder2->getId());
$file->setParents(array($parent));
} else {
return false;
}
}
+ // We need to get the object for the existing file with the same
+ // name (if there is one) before we do the patch. If oldfile
+ // exists and is a directory we have to delete it before we
+ // do the rename too.
+ $oldfile = $this->getDriveFile($path2);
+ if ($oldfile && $this->is_dir($path2)) {
+ $this->rmdir($path2);
+ $oldfile = false;
+ }
$result = $this->service->files->patch($file->getId(), $file);
if ($result) {
$this->setDriveFile($path1, false);
$this->setDriveFile($path2, $result);
+ if ($oldfile) {
+ $this->service->files->delete($oldfile->getId());
+ }
}
return (bool)$result;
} else {
@@ -395,8 +414,8 @@ class Google extends \OC\Files\Storage\Common {
$downloadUrl = $file->getDownloadUrl();
}
if (isset($downloadUrl)) {
- $request = new \Google_HttpRequest($downloadUrl, 'GET', null, null);
- $httpRequest = \Google_Client::$io->authenticatedRequest($request);
+ $request = new \Google_Http_Request($downloadUrl, 'GET', null, null);
+ $httpRequest = $this->client->getAuth()->authenticatedRequest($request);
if ($httpRequest->getResponseHttpCode() == 200) {
$tmpFile = \OC_Helper::tmpFile($ext);
$data = $httpRequest->getResponseBody();
@@ -440,16 +459,17 @@ class Google extends \OC\Files\Storage\Common {
$params = array(
'data' => $data,
'mimeType' => $mimetype,
+ 'uploadType' => 'media'
);
$result = false;
if ($this->file_exists($path)) {
$file = $this->getDriveFile($path);
$result = $this->service->files->update($file->getId(), $file, $params);
} else {
- $file = new \Google_DriveFile();
+ $file = new \Google_Service_Drive_DriveFile();
$file->setTitle(basename($path));
$file->setMimeType($mimetype);
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder->getId());
$file->setParents(array($parent));
$result = $this->service->files->insert($file, $params);
@@ -496,7 +516,10 @@ class Google extends \OC\Files\Storage\Common {
$result = false;
if ($file) {
if (isset($mtime)) {
- $file->setModifiedDate($mtime);
+ // This is just RFC3339, but frustratingly, GDrive's API *requires*
+ // the fractions portion be present, while no handy PHP constant
+ // for RFC3339 or ISO8601 includes it. So we do it ourselves.
+ $file->setModifiedDate(date('Y-m-d\TH:i:s.uP', $mtime));
$result = $this->service->files->patch($file->getId(), $file, array(
'setModifiedDate' => true,
));
@@ -506,9 +529,9 @@ class Google extends \OC\Files\Storage\Common {
} else {
$parentFolder = $this->getDriveFile(dirname($path));
if ($parentFolder) {
- $file = new \Google_DriveFile();
+ $file = new \Google_Service_Drive_DriveFile();
$file->setTitle(basename($path));
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder->getId());
$file->setParents(array($parent));
$result = $this->service->files->insert($file);
diff --git a/apps/files_external/lib/personalmount.php b/apps/files_external/lib/personalmount.php
index 708128d644a..0c741179139 100644
--- a/apps/files_external/lib/personalmount.php
+++ b/apps/files_external/lib/personalmount.php
@@ -8,13 +8,13 @@
namespace OCA\Files_External;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
/**
* Person mount points can be moved by the user
*/
-class PersonalMount extends Mount implements MoveableMount {
+class PersonalMount extends MountPoint implements MoveableMount {
/**
* Move the mount point to $target
*
diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php
index f0a6f145422..f6c56669734 100644
--- a/apps/files_external/lib/sftp.php
+++ b/apps/files_external/lib/sftp.php
@@ -112,7 +112,7 @@ class SFTP extends \OC\Files\Storage\Common {
try {
$storage_view = \OCP\Files::getStorage('files_external');
if ($storage_view) {
- return \OCP\Config::getSystemValue('datadirectory') .
+ return \OC::$server->getConfig()->getSystemValue('datadirectory') .
$storage_view->getAbsolutePath('') .
'ssh_hostKeys';
}
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 6e53c4a9931..3f0b0f45bfb 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -139,13 +139,8 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
* check if smbclient is installed
*/
public static function checkDependencies() {
- if (function_exists('shell_exec')) {
- $output=shell_exec('command -v smbclient 2> /dev/null');
- if (!empty($output)) {
- return true;
- }
- }
- return array('smbclient');
+ $smbClientExists = (bool) \OC_Helper::findBinaryPath('smbclient');
+ return $smbClientExists ? true : array('smbclient');
}
}
diff --git a/apps/files_external/lib/smb_oc.php b/apps/files_external/lib/smb_oc.php
index e6f3aaf4052..a7c93d97fd1 100644
--- a/apps/files_external/lib/smb_oc.php
+++ b/apps/files_external/lib/smb_oc.php
@@ -13,12 +13,16 @@ require_once __DIR__ . '/../3rdparty/smb4php/smb.php';
class SMB_OC extends \OC\Files\Storage\SMB {
private $username_as_share;
+ /**
+ * @param array $params
+ * @throws \Exception
+ */
public function __construct($params) {
if (isset($params['host']) && \OC::$server->getSession()->exists('smb-credentials')) {
$host=$params['host'];
$this->username_as_share = ($params['username_as_share'] === 'true');
- $params_auth = \OC::$server->getSession()->get('smb-credentials');
+ $params_auth = json_decode(\OC::$server->getCrypto()->decrypt(\OC::$server->getSession()->get('smb-credentials')), true);
$user = \OC::$server->getSession()->get('loginname');
$password = $params_auth['password'];
@@ -44,14 +48,35 @@ class SMB_OC extends \OC\Files\Storage\SMB {
}
}
- public static function login( $params ) {
- \OC::$server->getSession()->set('smb-credentials', $params);
+
+ /**
+ * Intercepts the user credentials on login and stores them
+ * encrypted inside the session if SMB_OC storage is enabled.
+ * @param array $params
+ */
+ public static function login($params) {
+ $mountpoints = \OC_Mount_Config::getAbsoluteMountPoints($params['uid']);
+ $mountpointClasses = array();
+ foreach($mountpoints as $mountpoint) {
+ $mountpointClasses[$mountpoint['class']] = true;
+ }
+ if(isset($mountpointClasses['\OC\Files\Storage\SMB_OC'])) {
+ \OC::$server->getSession()->set('smb-credentials', \OC::$server->getCrypto()->encrypt(json_encode($params)));
+ }
}
+ /**
+ * @param string $path
+ * @return boolean
+ */
public function isSharable($path) {
return false;
}
+ /**
+ * @param bool $isPersonal
+ * @return bool
+ */
public function test($isPersonal = true) {
if ($isPersonal) {
if ($this->stat('')) {
diff --git a/apps/files_external/templates/list.php b/apps/files_external/templates/list.php
index 4e06bc7024c..c21a475deba 100644
--- a/apps/files_external/templates/list.php
+++ b/apps/files_external/templates/list.php
@@ -4,7 +4,11 @@
</div>
<div id='notification'></div>
-<div id="emptycontent" class="hidden"><?php p($l->t( 'You don\'t have any external storages' )); ?></div>
+<div id="emptycontent" class="hidden">
+ <div class="icon-external"></div>
+ <h2><?php p($l->t('No external storages configured')); ?></h2>
+ <p><?php p($l->t('You can configure external storages in the personal settings')); ?></p>
+</div>
<input type="hidden" name="dir" value="" id="dir">
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
index 072f856dfbd..79950f30385 100644
--- a/apps/files_external/templates/settings.php
+++ b/apps/files_external/templates/settings.php
@@ -76,7 +76,7 @@
<?php endif; ?>
<?php endif; ?>
<?php endforeach; ?>
- <?php if (isset($_['backends'][$mount['class']]['custom']) && !in_array('files_external/js/'.$_['backends'][$mount['class']]['custom'], \OC_Util::$scripts)): ?>
+ <?php if (isset($_['backends'][$mount['class']]['custom'])): ?>
<?php OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?>
<?php endif; ?>
<?php endif; ?>
diff --git a/apps/files_external/tests/amazons3migration.php b/apps/files_external/tests/amazons3migration.php
index 629cf5cfa3c..145213f5293 100644
--- a/apps/files_external/tests/amazons3migration.php
+++ b/apps/files_external/tests/amazons3migration.php
@@ -23,15 +23,26 @@
namespace Test\Files\Storage;
-class AmazonS3Migration extends \PHPUnit_Framework_TestCase {
+class AmazonS3Migration extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage instance
*/
protected $instance;
- public function setUp () {
- $uuid = uniqid();
+ /** @var array */
+ protected $params;
+
+ /** @var string */
+ protected $oldId;
+
+ /** @var string */
+ protected $newId;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $uuid = $this->getUniqueID();
$this->params['key'] = 'key'.$uuid;
$this->params['secret'] = 'secret'.$uuid;
@@ -41,9 +52,11 @@ class AmazonS3Migration extends \PHPUnit_Framework_TestCase {
$this->newId = 'amazon::' . $this->params['bucket'];
}
- public function tearDown () {
+ protected function tearDown() {
$this->deleteStorage($this->oldId);
$this->deleteStorage($this->newId);
+
+ parent::tearDown();
}
public function testUpdateLegacyOnlyId () {
diff --git a/apps/files_external/tests/amazons3.php b/apps/files_external/tests/backends/amazons3.php
index 8eaece6dad9..fbb8744bd8d 100644
--- a/apps/files_external/tests/amazons3.php
+++ b/apps/files_external/tests/backends/amazons3.php
@@ -28,7 +28,9 @@ class AmazonS3 extends Storage {
private $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['amazons3']) or ! $this->config['amazons3']['run']) {
$this->markTestSkipped('AmazonS3 backend not configured');
@@ -36,10 +38,12 @@ class AmazonS3 extends Storage {
$this->instance = new \OC\Files\Storage\AmazonS3($this->config['amazons3']);
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->rmdir('');
}
+
+ parent::tearDown();
}
public function testStat() {
diff --git a/apps/files_external/tests/dropbox.php b/apps/files_external/tests/backends/dropbox.php
index 4b052282019..3f25d5a31e8 100644
--- a/apps/files_external/tests/dropbox.php
+++ b/apps/files_external/tests/backends/dropbox.php
@@ -11,8 +11,10 @@ namespace Test\Files\Storage;
class Dropbox extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['dropbox']) or ! $this->config['dropbox']['run']) {
$this->markTestSkipped('Dropbox backend not configured');
@@ -21,6 +23,14 @@ class Dropbox extends Storage {
$this->instance = new \OC\Files\Storage\Dropbox($this->config['dropbox']);
}
+ protected function tearDown() {
+ if ($this->instance) {
+ $this->instance->unlink('/');
+ }
+
+ parent::tearDown();
+ }
+
public function directoryProvider() {
// doesn't support leading/trailing spaces
return array(array('folder'));
@@ -36,10 +46,4 @@ class Dropbox extends Storage {
// false because not supported
$this->assertFalse($this->instance->touch('foo'));
}
-
- public function tearDown() {
- if ($this->instance) {
- $this->instance->unlink('/');
- }
- }
}
diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/backends/ftp.php
index 3037793120a..842b7f43fa8 100644
--- a/apps/files_external/tests/ftp.php
+++ b/apps/files_external/tests/backends/ftp.php
@@ -11,8 +11,10 @@ namespace Test\Files\Storage;
class FTP extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['ftp']) or ! $this->config['ftp']['run']) {
$this->markTestSkipped('FTP backend not configured');
@@ -22,10 +24,12 @@ class FTP extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
\OCP\Files::rmdirr($this->instance->constructUrl(''));
}
+
+ parent::tearDown();
}
public function testConstructUrl(){
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/backends/google.php
index d5495d49c5e..79023fac9e1 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/backends/google.php
@@ -28,6 +28,8 @@ class Google extends Storage {
private $config;
protected function setUp() {
+ parent::setUp();
+
$this->config = include('files_external/tests/config.php');
if (!is_array($this->config) || !isset($this->config['google'])
|| !$this->config['google']['run']
@@ -41,5 +43,7 @@ class Google extends Storage {
if ($this->instance) {
$this->instance->rmdir('/');
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/owncloud.php b/apps/files_external/tests/backends/owncloud.php
index 408a55864f2..ab9101cfe5f 100644
--- a/apps/files_external/tests/owncloud.php
+++ b/apps/files_external/tests/backends/owncloud.php
@@ -12,8 +12,10 @@ class OwnCloud extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['owncloud']) or ! $this->config['owncloud']['run']) {
$this->markTestSkipped('ownCloud backend not configured');
@@ -23,9 +25,11 @@ class OwnCloud extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->rmdir('/');
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/sftp.php b/apps/files_external/tests/backends/sftp.php
index efea7f075ff..703b37d93f1 100644
--- a/apps/files_external/tests/sftp.php
+++ b/apps/files_external/tests/backends/sftp.php
@@ -25,8 +25,10 @@ namespace Test\Files\Storage;
class SFTP extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['sftp']) or ! $this->config['sftp']['run']) {
$this->markTestSkipped('SFTP backend not configured');
@@ -36,9 +38,11 @@ class SFTP extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->rmdir('/');
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/backends/smb.php
index 199e35af676..9e5ab2b331f 100644
--- a/apps/files_external/tests/smb.php
+++ b/apps/files_external/tests/backends/smb.php
@@ -12,8 +12,10 @@ class SMB extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if (!is_array($this->config) or !isset($this->config['smb']) or !$this->config['smb']['run']) {
$this->markTestSkipped('Samba backend not configured');
@@ -23,10 +25,12 @@ class SMB extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
\OCP\Files::rmdirr($this->instance->constructUrl(''));
}
+
+ parent::tearDown();
}
public function directoryProvider() {
diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/backends/swift.php
index 3918497ebfa..d2c884a8b4c 100644
--- a/apps/files_external/tests/swift.php
+++ b/apps/files_external/tests/backends/swift.php
@@ -26,7 +26,9 @@ class Swift extends Storage {
private $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = include('files_external/tests/config.php');
if (!is_array($this->config) or !isset($this->config['swift'])
or !$this->config['swift']['run']) {
@@ -35,7 +37,7 @@ class Swift extends Storage {
$this->instance = new \OC\Files\Storage\Swift($this->config['swift']);
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$connection = $this->instance->getConnection();
$container = $connection->getContainer($this->config['swift']['bucket']);
@@ -48,5 +50,7 @@ class Swift extends Storage {
$container->delete();
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/backends/webdav.php b/apps/files_external/tests/backends/webdav.php
new file mode 100644
index 00000000000..c390612810d
--- /dev/null
+++ b/apps/files_external/tests/backends/webdav.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage;
+
+class DAV extends Storage {
+
+ private $config;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
+ $config = include('files_external/tests/config.webdav.php');
+ if ( ! is_array($config) or !$config['run']) {
+ $this->markTestSkipped('WebDAV backend not configured');
+ }
+ if (isset($config['wait'])) {
+ $this->waitDelay = $config['wait'];
+ }
+ $config['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new \OC\Files\Storage\DAV($config);
+ $this->instance->mkdir('/');
+ }
+
+ protected function tearDown() {
+ if ($this->instance) {
+ $this->instance->rmdir('/');
+ }
+
+ parent::tearDown();
+ }
+}
diff --git a/apps/files_external/tests/dynamicmountconfig.php b/apps/files_external/tests/dynamicmountconfig.php
index 650299075e6..eef2a896b3a 100644
--- a/apps/files_external/tests/dynamicmountconfig.php
+++ b/apps/files_external/tests/dynamicmountconfig.php
@@ -36,7 +36,7 @@ class Test_Mount_Config_Dummy_Backend {
/**
* Class Test_Dynamic_Mount_Config
*/
-class Test_Dynamic_Mount_Config extends \PHPUnit_Framework_TestCase {
+class Test_Dynamic_Mount_Config extends \Test\TestCase {
private $backup;
@@ -82,6 +82,7 @@ class Test_Dynamic_Mount_Config extends \PHPUnit_Framework_TestCase {
}
protected function setUp() {
+ parent::setUp();
$this->backup = OC_Mount_Config::setUp();
@@ -97,5 +98,6 @@ class Test_Dynamic_Mount_Config extends \PHPUnit_Framework_TestCase {
protected function tearDown()
{
OC_Mount_Config::setUp($this->backup);
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/env/start-webdav-ownCloud.sh b/apps/files_external/tests/env/start-webdav-ownCloud.sh
new file mode 100755
index 00000000000..c7267cff341
--- /dev/null
+++ b/apps/files_external/tests/env/start-webdav-ownCloud.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# This script start a docker container to test the files_external tests
+# against. It will also change the files_external config to use the docker
+# container as testing environment. This is reverted in the stop step.
+#
+# If the environment variable RUN_DOCKER_MYSQL is set the ownCloud will
+# be set up using MySQL instead of SQLite.
+#
+# Set environment variable DEBUG to print config file
+#
+# @author Morris Jobke
+# @copyright 2014 Morris Jobke <hey@morrisjobke.de>
+#
+
+if ! command -v docker >/dev/null 2>&1; then
+ echo "No docker executable found - skipped docker setup"
+ exit 0;
+fi
+
+echo "Docker executable found - setup docker"
+
+echo "Fetch recent morrisjobke/owncloud docker image"
+docker pull morrisjobke/owncloud
+
+# retrieve current folder to place the config in the parent folder
+thisFolder=`echo $0 | replace "env/start-webdav-ownCloud.sh" ""`
+
+if [ -n "$RUN_DOCKER_MYSQL" ]; then
+ echo "Fetch recent mysql docker image"
+ docker pull mysql
+
+ echo "Setup MySQL ..."
+ # user/password will be read by ENV variables in owncloud container (they are generated by docker)
+ databaseContainer=`docker run -e MYSQL_ROOT_PASSWORD=mysupersecretpassword -d mysql`
+ containerName=`docker inspect $databaseContainer | grep Name | grep _ | cut -d \" -f 4 | cut -d / -f 2`
+
+ parameter="--link $containerName:db"
+fi
+
+container=`docker run -P $parameter -d -e ADMINLOGIN=test -e ADMINPWD=test morrisjobke/owncloud`
+
+# TODO find a way to determine the successful initialization inside the docker container
+echo "Waiting 30 seconds for ownCloud initialization ... "
+sleep 30
+
+# get mapped port on host for internal port 80 - output is IP:PORT - we need to extract the port with 'cut'
+port=`docker port $container 80 | cut -f 2 -d :`
+
+
+cat > $thisFolder/config.webdav.php <<DELIM
+<?php
+
+return array(
+ 'run'=>true,
+ 'host'=>'localhost:$port/owncloud/remote.php/webdav/',
+ 'user'=>'test',
+ 'password'=>'test',
+ 'root'=>'',
+ // wait delay in seconds after write operations
+ // (only in tests)
+ // set to higher value for lighttpd webdav
+ 'wait'=> 0
+);
+
+DELIM
+
+echo "ownCloud container: $container"
+
+# put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host)
+echo $container >> $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav
+
+if [ -n "$databaseContainer" ]; then
+ echo "Database container: $databaseContainer"
+ echo $databaseContainer >> $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav
+fi
+
+if [ -n "$DEBUG" ]; then
+ echo $thisFolder/config.webdav.php
+fi
diff --git a/apps/files_external/tests/env/stop-webdav-ownCloud.sh b/apps/files_external/tests/env/stop-webdav-ownCloud.sh
new file mode 100755
index 00000000000..2f06eadcf7c
--- /dev/null
+++ b/apps/files_external/tests/env/stop-webdav-ownCloud.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# This script stops the docker container the files_external tests were run
+# against. It will also revert the config changes done in start step.
+#
+# @author Morris Jobke
+# @copyright 2014 Morris Jobke <hey@morrisjobke.de>
+#
+
+if ! command -v docker >/dev/null 2>&1; then
+ echo "No docker executable found - skipped docker stop"
+ exit 0;
+fi
+
+echo "Docker executable found - stop and remove docker containers"
+
+# retrieve current folder to remove the config from the parent folder
+thisFolder=`echo $0 | replace "env/stop-webdav-ownCloud.sh" ""`
+
+echo "DEBUG"
+
+netstat -tlpen
+
+echo "CONFIG:"
+
+cat $thisFolder/config.webdav.php
+cat $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav
+
+# stopping and removing docker containers
+for container in `cat $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav`; do
+ echo "Stopping and removing docker container $container"
+ # kills running container and removes it
+ docker rm -f $container
+done;
+
+# cleanup
+rm $thisFolder/config.webdav.php
+rm $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav
+
diff --git a/apps/files_external/tests/etagpropagator.php b/apps/files_external/tests/etagpropagator.php
index 7fa1863f962..84b687d18e4 100644
--- a/apps/files_external/tests/etagpropagator.php
+++ b/apps/files_external/tests/etagpropagator.php
@@ -11,9 +11,9 @@ namespace Tests\Files_External;
use OC\Files\Filesystem;
use OC\User\User;
-class EtagPropagator extends \PHPUnit_Framework_TestCase {
+class EtagPropagator extends \Test\TestCase {
protected function getUser() {
- return new User(uniqid(), null);
+ return new User($this->getUniqueID(), null);
}
/**
diff --git a/apps/files_external/tests/js/mountsfilelistSpec.js b/apps/files_external/tests/js/mountsfilelistSpec.js
index b599df77aac..a4e4fec1177 100644
--- a/apps/files_external/tests/js/mountsfilelistSpec.js
+++ b/apps/files_external/tests/js/mountsfilelistSpec.js
@@ -9,8 +9,7 @@
*/
describe('OCA.External.FileList tests', function() {
- var testFiles, alertStub, notificationStub, fileList, fileActions;
- var oldFileListPrototype;
+ var testFiles, alertStub, notificationStub, fileList;
beforeEach(function() {
alertStub = sinon.stub(OC.dialogs, 'alert');
@@ -49,14 +48,11 @@ describe('OCA.External.FileList tests', function() {
'<div id="emptycontent">Empty content message</div>' +
'</div>'
);
- fileActions = new OCA.Files.FileActions();
});
afterEach(function() {
- OCA.Files.FileList.prototype = oldFileListPrototype;
testFiles = undefined;
fileList.destroy();
fileList = undefined;
- fileActions = undefined;
notificationStub.restore();
alertStub.restore();
@@ -148,7 +144,7 @@ describe('OCA.External.FileList tests', function() {
'?dir=/mount%20points/smb%20mount'
);
expect($tr.find('.nametext').text().trim()).toEqual('smb mount');
- expect($tr.find('.column-scope').text().trim()).toEqual('Personal');
+ expect($tr.find('.column-scope > span').text().trim()).toEqual('Personal');
expect($tr.find('.column-backend').text().trim()).toEqual('SMB');
});
diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php
index c11e48b82f3..342f020d3a9 100644
--- a/apps/files_external/tests/mountconfig.php
+++ b/apps/files_external/tests/mountconfig.php
@@ -65,7 +65,7 @@ class Test_Mount_Config_Hook_Test {
/**
* Class Test_Mount_Config
*/
-class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
+class Test_Mount_Config extends \Test\TestCase {
private $dataDir;
private $userHome;
@@ -79,7 +79,9 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
const TEST_GROUP2 = 'group2';
const TEST_GROUP2B = 'group2b';
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
\OC_User::createUser(self::TEST_USER1, self::TEST_USER1);
\OC_User::createUser(self::TEST_USER2, self::TEST_USER2);
@@ -116,7 +118,7 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
Test_Mount_Config_Hook_Test::setupHooks();
}
- public function tearDown() {
+ protected function tearDown() {
Test_Mount_Config_Hook_Test::clear();
OC_Mount_Config::$skipTest = false;
@@ -134,6 +136,8 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
'user_mounting_backends',
$this->oldAllowedBackends
);
+
+ parent::tearDown();
}
/**
@@ -292,10 +296,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* @dataProvider applicableConfigProvider
*/
public function testReadWriteGlobalConfig($mountType, $applicable, $expectApplicableArray) {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = $mountType;
$applicable = $applicable;
@@ -336,10 +336,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* Test reading and writing config
*/
public function testReadWritePersonalConfig() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$applicable = self::TEST_USER1;
@@ -475,10 +471,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* Test password obfuscation
*/
public function testPasswordObfuscation() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$applicable = self::TEST_USER1;
@@ -520,10 +512,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* Test read legacy passwords
*/
public function testReadLegacyPassword() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$applicable = self::TEST_USER1;
@@ -636,10 +624,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* @param bool $expectVisible whether to expect the mount point to be visible for $testUser
*/
public function testMount($isPersonal, $mountType, $applicable, $testUser, $expectVisible) {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountConfig = array(
'host' => 'someost',
@@ -680,10 +664,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* The config will be merged by getSystemMountPoints().
*/
public function testConfigMerging() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$isPersonal = false;
@@ -755,10 +735,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* have the same path, the config must NOT be merged.
*/
public function testRereadMountpointWithSamePath() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$isPersonal = false;
@@ -891,10 +867,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* @param int $expected index of expected visible mount
*/
public function testPriority($mounts, $expected) {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountConfig = array(
'host' => 'somehost',
@@ -929,10 +901,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* Test for persistence of priority when changing mount options
*/
public function testPriorityPersistence() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$class = '\OC\Files\Storage\SMB';
$priority = 123;
@@ -982,10 +950,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
* Test for correct personal configuration loading in file sharing scenarios
*/
public function testMultiUserPersonalConfigLoading() {
- // TODO travis: multi user config test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('multi user config test doesn\'t work on travis');
- }
$mountConfig = array(
'host' => 'somehost',
'user' => 'someuser',
diff --git a/apps/files_external/tests/owncloudfunctions.php b/apps/files_external/tests/owncloudfunctions.php
index 57608fff0cf..8232f30a5e2 100644
--- a/apps/files_external/tests/owncloudfunctions.php
+++ b/apps/files_external/tests/owncloudfunctions.php
@@ -8,7 +8,7 @@
namespace Test\Files\Storage;
-class OwnCloudFunctions extends \PHPUnit_Framework_TestCase {
+class OwnCloudFunctions extends \Test\TestCase {
function configUrlProvider() {
return array(
diff --git a/apps/files_external/tests/smbfunctions.php b/apps/files_external/tests/smbfunctions.php
index 749906d0136..cf9f7cb20fe 100644
--- a/apps/files_external/tests/smbfunctions.php
+++ b/apps/files_external/tests/smbfunctions.php
@@ -8,10 +8,11 @@
namespace Test\Files\Storage;
-class SMBFunctions extends \PHPUnit_Framework_TestCase {
+class SMBFunctions extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
- $id = uniqid();
// dummy config
$this->config = array(
'run'=>false,
@@ -25,9 +26,6 @@ class SMBFunctions extends \PHPUnit_Framework_TestCase {
$this->instance = new \OC\Files\Storage\SMB($this->config);
}
- public function tearDown() {
- }
-
public function testGetId() {
$this->assertEquals('smb::test@smbhost//sharename//rootdir/', $this->instance->getId());
}
diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php
deleted file mode 100644
index 74e905ccc89..00000000000
--- a/apps/files_external/tests/webdav.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace Test\Files\Storage;
-
-class DAV extends Storage {
-
- private $config;
-
- public function setUp() {
- $id = uniqid();
- $this->config = include('files_external/tests/config.php');
- if ( ! is_array($this->config) or ! isset($this->config['webdav']) or ! $this->config['webdav']['run']) {
- $this->markTestSkipped('WebDAV backend not configured');
- }
- if (isset($this->config['webdav']['wait'])) {
- $this->waitDelay = $this->config['webdav']['wait'];
- }
- $this->config['webdav']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new \OC\Files\Storage\DAV($this->config['webdav']);
- $this->instance->mkdir('/');
- }
-
- public function tearDown() {
- if ($this->instance) {
- $this->instance->rmdir('/');
- }
- }
-}
diff --git a/apps/files_sharing/ajax/external.php b/apps/files_sharing/ajax/external.php
index 6d68b5f7f82..1a709eda07c 100644
--- a/apps/files_sharing/ajax/external.php
+++ b/apps/files_sharing/ajax/external.php
@@ -31,10 +31,11 @@ if(!\OCP\Util::isValidFileName($name)) {
}
$externalManager = new \OCA\Files_Sharing\External\Manager(
- \OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
- \OC::$server->getUserSession()
+ \OC::$server->getDatabaseConnection(),
+ \OC\Files\Filesystem::getMountManager(),
+ \OC\Files\Filesystem::getLoader(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getHTTPHelper()
);
$name = OCP\Files::buildNotExistingFileName('/', $name);
@@ -44,7 +45,7 @@ if (substr($remote, 0, 5) === 'https' and !OC_Util::getUrlContent($remote)) {
\OCP\JSON::error(array('data' => array('message' => $l->t("Invalid or untrusted SSL certificate"))));
exit;
} else {
- $mount = $externalManager->addShare($remote, $token, $password, $name, $owner);
+ $mount = $externalManager->addShare($remote, $token, $password, $name, $owner, true);
/**
* @var \OCA\Files_Sharing\External\Storage $storage
*/
diff --git a/apps/files_sharing/ajax/list.php b/apps/files_sharing/ajax/list.php
index 7e2e54a1bd9..073c86365be 100644
--- a/apps/files_sharing/ajax/list.php
+++ b/apps/files_sharing/ajax/list.php
@@ -65,7 +65,7 @@ $formattedFiles = array();
foreach ($files as $file) {
$entry = \OCA\Files\Helper::formatFileInfo($file);
unset($entry['directory']); // for now
- $entry['permissions'] = \OCP\PERMISSION_READ;
+ $entry['permissions'] = \OCP\Constants::PERMISSION_READ;
$formattedFiles[] = $entry;
}
@@ -78,7 +78,7 @@ $permissions = $linkItem['permissions'];
// if globally disabled
if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_allow_public_upload', 'yes') === 'no') {
// only allow reading
- $permissions = \OCP\PERMISSION_READ;
+ $permissions = \OCP\Constants::PERMISSION_READ;
}
$data['permissions'] = $permissions;
diff --git a/apps/files_sharing/ajax/shareinfo.php b/apps/files_sharing/ajax/shareinfo.php
index e87b0779e8d..f196a67a9dd 100644
--- a/apps/files_sharing/ajax/shareinfo.php
+++ b/apps/files_sharing/ajax/shareinfo.php
@@ -31,7 +31,7 @@ $linkItem = $data['linkItem'];
// Load the files
$path = $data['realPath'];
-$isWritable = $linkItem['permissions'] & (\OCP\PERMISSION_UPDATE | \OCP\PERMISSION_CREATE);
+$isWritable = $linkItem['permissions'] & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE);
if (!$isWritable) {
\OC\Files\Filesystem::addStorageWrapper('readonly', function ($mountPoint, $storage) {
return new \OCA\Files_Sharing\ReadOnlyWrapper(array('storage' => $storage));
diff --git a/apps/files_sharing/ajax/testremote.php b/apps/files_sharing/ajax/testremote.php
index 89581794698..08149bf7ecc 100644
--- a/apps/files_sharing/ajax/testremote.php
+++ b/apps/files_sharing/ajax/testremote.php
@@ -14,7 +14,8 @@ function testUrl($url) {
try {
$result = file_get_contents($url);
$data = json_decode($result);
- return is_object($data) and !empty($data->version);
+ // public link mount is only supported in ownCloud 7+
+ return is_object($data) and !empty($data->version) and version_compare($data->version, '7.0.0', '>=');
} catch (Exception $e) {
return false;
}
diff --git a/apps/files_sharing/lib/api.php b/apps/files_sharing/api/local.php
index 8556036f118..d9291c29f61 100644
--- a/apps/files_sharing/lib/api.php
+++ b/apps/files_sharing/api/local.php
@@ -1,6 +1,6 @@
<?php
/**
- * ownCloud
+ * ownCloud - OCS API for local shares
*
* @author Bjoern Schiessle
* @copyright 2013 Bjoern Schiessle schiessle@owncloud.com
@@ -20,9 +20,9 @@
*
*/
-namespace OCA\Files\Share;
+namespace OCA\Files_Sharing\API;
-class Api {
+class Local {
/**
* get all shares
diff --git a/apps/files_sharing/api/server2server.php b/apps/files_sharing/api/server2server.php
new file mode 100644
index 00000000000..f78d64caa73
--- /dev/null
+++ b/apps/files_sharing/api/server2server.php
@@ -0,0 +1,241 @@
+<?php
+/**
+ * ownCloud - OCS API for server-to-server shares
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Sharing\API;
+
+class Server2Server {
+
+ /**
+ * create a new share
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function createShare($params) {
+
+ if (!$this->isS2SEnabled(true)) {
+ return new \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $remote = isset($_POST['remote']) ? $_POST['remote'] : null;
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+ $name = isset($_POST['name']) ? $_POST['name'] : null;
+ $owner = isset($_POST['owner']) ? $_POST['owner'] : null;
+ $shareWith = isset($_POST['shareWith']) ? $_POST['shareWith'] : null;
+ $remoteId = isset($_POST['remoteId']) ? (int)$_POST['remoteId'] : null;
+
+ if ($remote && $token && $name && $owner && $remoteId && $shareWith) {
+
+ if(!\OCP\Util::isValidFileName($name)) {
+ return new \OC_OCS_Result(null, 400, 'The mountpoint name contains invalid characters.');
+ }
+
+ if (!\OCP\User::userExists($shareWith)) {
+ return new \OC_OCS_Result(null, 400, 'User does not exists');
+ }
+
+ \OC_Util::setupFS($shareWith);
+
+ $externalManager = new \OCA\Files_Sharing\External\Manager(
+ \OC::$server->getDatabaseConnection(),
+ \OC\Files\Filesystem::getMountManager(),
+ \OC\Files\Filesystem::getLoader(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getHTTPHelper());
+
+ $name = \OCP\Files::buildNotExistingFileName('/', $name);
+
+ try {
+ $externalManager->addShare($remote, $token, '', $name, $owner, false, $shareWith, $remoteId);
+
+ $user = $owner . '@' . $this->cleanupRemote($remote);
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_RECEIVED, array($user), '', array(),
+ '', '', $shareWith, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_LOW);
+
+ return new \OC_OCS_Result();
+ } catch (\Exception $e) {
+ \OCP\Util::writeLog('files_sharing', 'server can not add remote share, ' . $e->getMessage(), \OCP\Util::ERROR);
+ return new \OC_OCS_Result(null, 500, 'internal server error, was not able to add share from ' . $remote);
+ }
+ }
+
+ return new \OC_OCS_Result(null, 400, 'server can not add remote share, missing parameter');
+ }
+
+ /**
+ * accept server-to-server share
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function acceptShare($params) {
+
+ if (!$this->isS2SEnabled()) {
+ return new \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $id = $params['id'];
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+ $share = self::getShare($id, $token);
+
+ if ($share) {
+ list($file, $link) = self::getFile($share['uid_owner'], $share['file_source']);
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_ACCEPTED, array($share['share_with'], basename($file)), '', array(),
+ $file, $link, $share['uid_owner'], \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_LOW);
+ }
+
+ return new \OC_OCS_Result();
+ }
+
+ /**
+ * decline server-to-server share
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function declineShare($params) {
+
+ if (!$this->isS2SEnabled()) {
+ return new \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $id = $params['id'];
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+
+ $share = $this->getShare($id, $token);
+
+ if ($share) {
+ // userId must be set to the user who unshares
+ \OCP\Share::unshare($share['item_type'], $share['item_source'], $share['share_type'], null, $share['uid_owner']);
+
+ list($file, $link) = $this->getFile($share['uid_owner'], $share['file_source']);
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_DECLINED, array($share['share_with'], basename($file)), '', array(),
+ $file, $link, $share['uid_owner'], \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_LOW);
+ }
+
+ return new \OC_OCS_Result();
+ }
+
+ /**
+ * remove server-to-server share if it was unshared by the owner
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public function unshare($params) {
+
+ if (!$this->isS2SEnabled()) {
+ return new \OC_OCS_Result(null, 503, 'Server does not support server-to-server sharing');
+ }
+
+ $id = $params['id'];
+ $token = isset($_POST['token']) ? $_POST['token'] : null;
+
+ $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share_external` WHERE `remote_id` = ? AND `share_token` = ?');
+ $query->execute(array($id, $token));
+ $share = $query->fetchRow();
+
+ if ($token && $id && !empty($share)) {
+
+ $remote = $this->cleanupRemote($share['remote']);
+
+ $owner = $share['owner'] . '@' . $remote;
+ $mountpoint = $share['mountpoint'];
+ $user = $share['user'];
+
+ $query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share_external` WHERE `remote_id` = ? AND `share_token` = ?');
+ $query->execute(array($id, $token));
+
+ \OC::$server->getActivityManager()->publishActivity(
+ 'files_sharing', \OCA\Files_Sharing\Activity::SUBJECT_REMOTE_SHARE_UNSHARED, array($owner, $mountpoint), '', array(),
+ '', '', $user, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::PRIORITY_MEDIUM);
+ }
+
+ return new \OC_OCS_Result();
+ }
+
+ private function cleanupRemote($remote) {
+ $remote = substr($remote, strpos($remote, '://') + 3);
+
+ return rtrim($remote, '/');
+ }
+
+ /**
+ * get share
+ *
+ * @param int $id
+ * @param string $token
+ * @return array
+ */
+ private function getShare($id, $token) {
+ $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `id` = ? AND `token` = ? AND `share_type` = ?');
+ $query->execute(array($id, $token, \OCP\Share::SHARE_TYPE_REMOTE));
+ $share = $query->fetchRow();
+
+ return $share;
+ }
+
+ /**
+ * get file
+ *
+ * @param string $user
+ * @param int $fileSource
+ * @return array with internal path of the file and a absolute link to it
+ */
+ private function getFile($user, $fileSource) {
+ \OC_Util::setupFS($user);
+
+ $file = \OC\Files\Filesystem::getPath($fileSource);
+ $args = \OC\Files\Filesystem::is_dir($file) ? array('dir' => $file) : array('dir' => dirname($file), 'scrollto' => $file);
+ $link = \OCP\Util::linkToAbsolute('files', 'index.php', $args);
+
+ return array($file, $link);
+
+ }
+
+ /**
+ * check if server-to-server sharing is enabled
+ *
+ * @param bool $incoming
+ * @return bool
+ */
+ private function isS2SEnabled($incoming = false) {
+
+ $result = \OCP\App::isEnabled('files_sharing');
+
+ if ($incoming) {
+ $result = $result && \OCA\Files_Sharing\Helper::isIncomingServer2serverShareEnabled();
+ } else {
+ $result = $result && \OCA\Files_Sharing\Helper::isOutgoingServer2serverShareEnabled();
+ }
+
+ return $result;
+ }
+
+}
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index a01f8d98c7d..36d148dce96 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -8,7 +8,6 @@ OC::$CLASSPATH['OC\Files\Cache\Shared_Cache'] = 'files_sharing/lib/cache.php';
OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'files_sharing/lib/permissions.php';
OC::$CLASSPATH['OC\Files\Cache\Shared_Updater'] = 'files_sharing/lib/updater.php';
OC::$CLASSPATH['OC\Files\Cache\Shared_Watcher'] = 'files_sharing/lib/watcher.php';
-OC::$CLASSPATH['OCA\Files\Share\Api'] = 'files_sharing/lib/api.php';
OC::$CLASSPATH['OCA\Files\Share\Maintainer'] = 'files_sharing/lib/maintainer.php';
OC::$CLASSPATH['OCA\Files\Share\Proxy'] = 'files_sharing/lib/proxy.php';
@@ -28,6 +27,10 @@ OCP\Util::addScript('files_sharing', 'external');
OC_FileProxy::register(new OCA\Files\Share\Proxy());
+\OC::$server->getActivityManager()->registerExtension(function() {
+ return new \OCA\Files_Sharing\Activity();
+});
+
$config = \OC::$server->getConfig();
if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') {
@@ -52,14 +55,17 @@ if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') {
"name" => $l->t('Shared with others')
)
);
- \OCA\Files\App::getNavigationManager()->add(
- array(
- "id" => 'sharinglinks',
- "appname" => 'files_sharing',
- "script" => 'list.php',
- "order" => 20,
- "name" => $l->t('Shared by link')
- )
- );
+ // Check if sharing by link is enabled
+ if ($config->getAppValue('core', 'shareapi_allow_links', 'yes') === 'yes') {
+ \OCA\Files\App::getNavigationManager()->add(
+ array(
+ "id" => 'sharinglinks',
+ "appname" => 'files_sharing',
+ "script" => 'list.php',
+ "order" => 20,
+ "name" => $l->t('Shared by link')
+ )
+ );
+ }
}
}
diff --git a/apps/files_sharing/appinfo/database.xml b/apps/files_sharing/appinfo/database.xml
index 73d64c527b7..38718ab0773 100644
--- a/apps/files_sharing/appinfo/database.xml
+++ b/apps/files_sharing/appinfo/database.xml
@@ -23,6 +23,12 @@
<comments>Url of the remove owncloud instance</comments>
</field>
<field>
+ <name>remote_id</name>
+ <type>integer</type>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+ <field>
<name>share_token</name>
<type>text</type>
<notnull>true</notnull>
@@ -32,7 +38,7 @@
<field>
<name>password</name>
<type>text</type>
- <notnull>true</notnull>
+ <notnull>false</notnull>
<length>64</length>
<comments>Optional password for the public share</comments>
</field>
@@ -71,6 +77,13 @@
<length>32</length>
<comments>md5 hash of the mountpoint</comments>
</field>
+ <field>
+ <name>accepted</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
<index>
<name>sh_external_user</name>
<field>
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index d58a97e2956..dd9509575b7 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -1,4 +1,16 @@
<?php
+
+namespace OCA\Files_Sharing\AppInfo;
+
+use OCA\Files_Sharing\Application;
+
+$application = new Application();
+$application->registerRoutes($this, [
+ 'resources' => [
+ 'ExternalShares' => ['url' => '/api/externalShares'],
+ ]
+]);
+
/** @var $this \OCP\Route\IRouter */
$this->create('core_ajax_public_preview', '/publicpreview')->action(
function() {
@@ -15,31 +27,32 @@ $this->create('sharing_external_add', '/external')
->actionInclude('files_sharing/ajax/external.php');
$this->create('sharing_external_test_remote', '/testremote')
->actionInclude('files_sharing/ajax/testremote.php');
+
// OCS API
//TODO: SET: mail notification, waiting for PR #4689 to be accepted
-OC_API::register('get',
+\OC_API::register('get',
'/apps/files_sharing/api/v1/shares',
- array('\OCA\Files\Share\Api', 'getAllShares'),
+ array('\OCA\Files_Sharing\API\Local', 'getAllShares'),
'files_sharing');
-OC_API::register('post',
+\OC_API::register('post',
'/apps/files_sharing/api/v1/shares',
- array('\OCA\Files\Share\Api', 'createShare'),
+ array('\OCA\Files_Sharing\API\Local', 'createShare'),
'files_sharing');
-OC_API::register('get',
+\OC_API::register('get',
'/apps/files_sharing/api/v1/shares/{id}',
- array('\OCA\Files\Share\Api', 'getShare'),
+ array('\OCA\Files_Sharing\API\Local', 'getShare'),
'files_sharing');
-OC_API::register('put',
+\OC_API::register('put',
'/apps/files_sharing/api/v1/shares/{id}',
- array('\OCA\Files\Share\Api', 'updateShare'),
+ array('\OCA\Files_Sharing\API\Local', 'updateShare'),
'files_sharing');
-OC_API::register('delete',
+\OC_API::register('delete',
'/apps/files_sharing/api/v1/shares/{id}',
- array('\OCA\Files\Share\Api', 'deleteShare'),
+ array('\OCA\Files_Sharing\API\Local', 'deleteShare'),
'files_sharing');
diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php
deleted file mode 100644
index e393b1575af..00000000000
--- a/apps/files_sharing/appinfo/update.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-$installedVersion = OCP\Config::getAppValue('files_sharing', 'installed_version');
-
-if (version_compare($installedVersion, '0.5', '<')) {
- updateFilePermissions();
-}
-
-if (version_compare($installedVersion, '0.4', '<')) {
- removeSharedFolder();
-}
-
-// clean up oc_share table from files which are no longer exists
-if (version_compare($installedVersion, '0.3.5.6', '<')) {
- \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate();
-}
-
-
-/**
- * it is no longer possible to share single files with delete permissions. User
- * should only be able to unshare single files but never to delete them.
- */
-function updateFilePermissions($chunkSize = 99) {
- $query = OCP\DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `item_type` = ?');
- $result = $query->execute(array('file'));
-
- $updatedRows = array();
-
- while ($row = $result->fetchRow()) {
- if ($row['permissions'] & \OCP\PERMISSION_DELETE) {
- $updatedRows[$row['id']] = (int)$row['permissions'] & ~\OCP\PERMISSION_DELETE;
- }
- }
-
- $connection = \OC_DB::getConnection();
- $chunkedPermissionList = array_chunk($updatedRows, $chunkSize, true);
-
- foreach ($chunkedPermissionList as $subList) {
- $statement = "UPDATE `*PREFIX*share` SET `permissions` = CASE `id` ";
- //update share table
- $ids = implode(',', array_keys($subList));
- foreach ($subList as $id => $permission) {
- $statement .= "WHEN " . $connection->quote($id, \PDO::PARAM_INT) . " THEN " . $permission . " ";
- }
- $statement .= ' END WHERE `id` IN (' . $ids . ')';
-
- $query = OCP\DB::prepare($statement);
- $query->execute();
- }
-
-}
-
-/**
- * update script for the removal of the logical "Shared" folder, we create physical "Shared" folder and
- * update the users file_target so that it doesn't make any difference for the user
- * @note parameters are just for testing, please ignore them
- */
-function removeSharedFolder($mkdirs = true, $chunkSize = 99) {
- $query = OCP\DB::prepare('SELECT * FROM `*PREFIX*share`');
- $result = $query->execute();
- $view = new \OC\Files\View('/');
- $users = array();
- $shares = array();
- //we need to set up user backends
- OC_User::useBackend(new OC_User_Database());
- OC_Group::useBackend(new OC_Group_Database());
- OC_App::loadApps(array('authentication'));
- //we need to set up user backends, otherwise creating the shares will fail with "because user does not exist"
- while ($row = $result->fetchRow()) {
- //collect all user shares
- if ((int)$row['share_type'] === 0 && ($row['item_type'] === 'file' || $row['item_type'] === 'folder')) {
- $users[] = $row['share_with'];
- $shares[$row['id']] = $row['file_target'];
- } else if ((int)$row['share_type'] === 1 && ($row['item_type'] === 'file' || $row['item_type'] === 'folder')) {
- //collect all group shares
- $users = array_merge($users, \OC_group::usersInGroup($row['share_with']));
- $shares[$row['id']] = $row['file_target'];
- } else if ((int)$row['share_type'] === 2) {
- $shares[$row['id']] = $row['file_target'];
- }
- }
-
- $unique_users = array_unique($users);
-
- if (!empty($unique_users) && !empty($shares)) {
-
- // create folder Shared for each user
-
- if ($mkdirs) {
- foreach ($unique_users as $user) {
- \OC\Files\Filesystem::initMountPoints($user);
- if (!$view->file_exists('/' . $user . '/files/Shared')) {
- $view->mkdir('/' . $user . '/files/Shared');
- }
- }
- }
-
- $chunkedShareList = array_chunk($shares, $chunkSize, true);
- $connection = \OC_DB::getConnection();
-
- foreach ($chunkedShareList as $subList) {
-
- $statement = "UPDATE `*PREFIX*share` SET `file_target` = CASE `id` ";
- //update share table
- $ids = implode(',', array_keys($subList));
- foreach ($subList as $id => $target) {
- $statement .= "WHEN " . $connection->quote($id, \PDO::PARAM_INT) . " THEN " . $connection->quote('/Shared' . $target, \PDO::PARAM_STR);
- }
- $statement .= ' END WHERE `id` IN (' . $ids . ')';
-
- $query = OCP\DB::prepare($statement);
-
- $query->execute(array());
- }
-
- // set config to keep the Shared folder as the default location for new shares
- \OCA\Files_Sharing\Helper::setShareFolder('/Shared');
-
- }
-}
diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version
index be14282b7ff..7d8568351b4 100644
--- a/apps/files_sharing/appinfo/version
+++ b/apps/files_sharing/appinfo/version
@@ -1 +1 @@
-0.5.3
+0.5.4
diff --git a/apps/files_sharing/application.php b/apps/files_sharing/application.php
new file mode 100644
index 00000000000..773831d99b1
--- /dev/null
+++ b/apps/files_sharing/application.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing;
+
+use OC\AppFramework\Utility\SimpleContainer;
+use OCA\Files_Sharing\Controllers\ExternalSharesController;
+use OCA\Files_Sharing\Controllers\ShareController;
+use OCA\Files_Sharing\Middleware\SharingCheckMiddleware;
+use \OCP\AppFramework\App;
+
+/**
+ * @package OCA\Files_Sharing
+ */
+class Application extends App {
+
+
+ /**
+ * @param array $urlParams
+ */
+ public function __construct(array $urlParams=array()){
+ parent::__construct('files_sharing', $urlParams);
+
+ $container = $this->getContainer();
+
+ /**
+ * Controllers
+ */
+ $container->registerService('ShareController', function(SimpleContainer $c) {
+ return new ShareController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('UserSession'),
+ $c->query('ServerContainer')->getAppConfig(),
+ $c->query('ServerContainer')->getConfig(),
+ $c->query('URLGenerator'),
+ $c->query('ServerContainer')->getUserManager(),
+ $c->query('ServerContainer')->getLogger(),
+ $c->query('ServerContainer')->getActivityManager()
+ );
+ });
+ $container->registerService('ExternalSharesController', function(SimpleContainer $c) {
+ return new ExternalSharesController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('IsIncomingShareEnabled'),
+ $c->query('ExternalManager')
+ );
+ });
+
+ /**
+ * Core class wrappers
+ */
+ $container->registerService('UserSession', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getUserSession();
+ });
+ $container->registerService('URLGenerator', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getUrlGenerator();
+ });
+ $container->registerService('IsIncomingShareEnabled', function(SimpleContainer $c) {
+ return Helper::isIncomingServer2serverShareEnabled();
+ });
+ $container->registerService('ExternalManager', function(SimpleContainer $c) {
+ return new \OCA\Files_Sharing\External\Manager(
+ \OC::$server->getDatabaseConnection(),
+ \OC\Files\Filesystem::getMountManager(),
+ \OC\Files\Filesystem::getLoader(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getHTTPHelper()
+ );
+ });
+
+ /**
+ * Middleware
+ */
+ $container->registerService('SharingCheckMiddleware', function(SimpleContainer $c){
+ return new SharingCheckMiddleware(
+ $c->query('AppName'),
+ $c->query('ServerContainer')->getAppConfig(),
+ $c->getCoreApi()
+ );
+ });
+
+ // Execute middlewares
+ $container->registerMiddleware('SharingCheckMiddleware');
+ }
+
+}
diff --git a/apps/files_sharing/js/app.js b/apps/files_sharing/js/app.js
index 1a3bfac5b97..3168e930829 100644
--- a/apps/files_sharing/js/app.js
+++ b/apps/files_sharing/js/app.js
@@ -9,8 +9,14 @@
*/
if (!OCA.Sharing) {
+ /**
+ * @namespace OCA.Sharing
+ */
OCA.Sharing = {};
}
+/**
+ * @namespace
+ */
OCA.Sharing.App = {
_inFileList: null,
@@ -24,6 +30,7 @@ OCA.Sharing.App = {
this._inFileList = new OCA.Sharing.FileList(
$el,
{
+ id: 'shares.self',
scrollContainer: $('#app-content'),
sharedWithUser: true,
fileActions: this._createFileActions()
@@ -32,7 +39,9 @@ OCA.Sharing.App = {
this._extendFileList(this._inFileList);
this._inFileList.appName = t('files_sharing', 'Shared with you');
- this._inFileList.$el.find('#emptycontent').text(t('files_sharing', 'No files have been shared with you yet.'));
+ this._inFileList.$el.find('#emptycontent').html('<div class="icon-share"></div>' +
+ '<h2>' + t('files_sharing', 'Nothing shared with you yet') + '</h2>' +
+ '<p>' + t('files_sharing', 'Files and folders others share with you will show up here') + '</p>');
return this._inFileList;
},
@@ -43,6 +52,7 @@ OCA.Sharing.App = {
this._outFileList = new OCA.Sharing.FileList(
$el,
{
+ id: 'shares.others',
scrollContainer: $('#app-content'),
sharedWithUser: false,
fileActions: this._createFileActions()
@@ -51,7 +61,9 @@ OCA.Sharing.App = {
this._extendFileList(this._outFileList);
this._outFileList.appName = t('files_sharing', 'Shared with others');
- this._outFileList.$el.find('#emptycontent').text(t('files_sharing', 'You haven\'t shared any files yet.'));
+ this._outFileList.$el.find('#emptycontent').html('<div class="icon-share"></div>' +
+ '<h2>' + t('files_sharing', 'Nothing shared yet') + '</h2>' +
+ '<p>' + t('files_sharing', 'Files and folders you share will show up here') + '</p>');
return this._outFileList;
},
@@ -62,6 +74,7 @@ OCA.Sharing.App = {
this._linkFileList = new OCA.Sharing.FileList(
$el,
{
+ id: 'shares.link',
scrollContainer: $('#app-content'),
linksOnly: true,
fileActions: this._createFileActions()
@@ -70,7 +83,9 @@ OCA.Sharing.App = {
this._extendFileList(this._linkFileList);
this._linkFileList.appName = t('files_sharing', 'Shared by link');
- this._linkFileList.$el.find('#emptycontent').text(t('files_sharing', 'You haven\'t shared any files by link yet.'));
+ this._linkFileList.$el.find('#emptycontent').html('<div class="icon-public"></div>' +
+ '<h2>' + t('files_sharing', 'No shared links') + '</h2>' +
+ '<p>' + t('files_sharing', 'Files and folders you share by link will show up here') + '</p>');
return this._linkFileList;
},
diff --git a/apps/files_sharing/js/external.js b/apps/files_sharing/js/external.js
index 6ede2584cd9..aeb4b2461f8 100644
--- a/apps/files_sharing/js/external.js
+++ b/apps/files_sharing/js/external.js
@@ -8,16 +8,6 @@
*
*/
(function () {
- var addExternalShare = function (remote, token, owner, name, password) {
- return $.post(OC.generateUrl('apps/files_sharing/external'), {
- remote: remote,
- token: token,
- owner: owner,
- name: name,
- password: password
- });
- };
-
/**
* Shows "add external share" dialog.
*
@@ -27,20 +17,12 @@
* @param {String} token authentication token
* @param {bool} passwordProtected true if the share is password protected
*/
- OCA.Sharing.showAddExternalDialog = function (remote, token, owner, name, passwordProtected) {
+ OCA.Sharing.showAddExternalDialog = function (share, passwordProtected, callback) {
+ var remote = share.remote;
+ var owner = share.owner;
+ var name = share.name;
var remoteClean = (remote.substr(0, 8) === 'https://') ? remote.substr(8) : remote.substr(7);
- var callback = function (add, password) {
- password = password || '';
- if (add) {
- addExternalShare(remote, token, owner, name, password).then(function (result) {
- if (result.status === 'error') {
- OC.Notification.show(result.data.message);
- } else {
- FileList.reload();
- }
- });
- }
- };
+
if (!passwordProtected) {
OC.dialogs.confirm(
t(
@@ -49,7 +31,9 @@
{name: name, owner: owner, remote: remoteClean}
),
t('files_sharing','Remote share'),
- callback,
+ function (result) {
+ callback(result, share);
+ },
true
).then(this._adjustDialog);
} else {
@@ -60,7 +44,9 @@
{name: name, owner: owner, remote: remoteClean}
),
t('files_sharing','Remote share'),
- callback,
+ function (result) {
+ callback(result, share);
+ },
true,
t('files_sharing','Remote share password'),
true
@@ -82,17 +68,66 @@ $(document).ready(function () {
// FIXME: HACK: do not init when running unit tests, need a better way
if (!window.TESTING && OCA.Files) {// only run in the files app
var params = OC.Util.History.parseUrlQuery();
+
+ //manually add server-to-server share
if (params.remote && params.token && params.owner && params.name) {
+
+ var callbackAddShare = function(result, share) {
+ var password = share.password || '';
+ if (result) {
+ //$.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id});
+ $.post(OC.generateUrl('apps/files_sharing/external'), {
+ remote: share.remote,
+ token: share.token,
+ owner: share.owner,
+ name: share.name,
+ password: password}, function(result) {
+ if (result.status === 'error') {
+ OC.Notification.show(result.data.message);
+ } else {
+ FileList.reload();
+ }
+ });
+ }
+ };
+
// clear hash, it is unlikely that it contain any extra parameters
location.hash = '';
params.passwordProtected = parseInt(params.protected, 10) === 1;
OCA.Sharing.showAddExternalDialog(
- params.remote,
- params.token,
- params.owner,
- params.name,
- params.passwordProtected
+ params,
+ params.passwordProtected,
+ callbackAddShare
);
}
+
+ // check for new server-to-server shares which need to be approved
+ $.get(OC.generateUrl('/apps/files_sharing/api/externalShares'),
+ {},
+ function(shares) {
+ var index;
+ for (index = 0; index < shares.length; ++index) {
+ OCA.Sharing.showAddExternalDialog(
+ shares[index],
+ false,
+ function(result, share) {
+ if (result) {
+ // Accept
+ $.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id});
+ FileList.reload();
+ } else {
+ // Delete
+ $.ajax({
+ url: OC.generateUrl('/apps/files_sharing/api/externalShares/'+share.id),
+ type: 'DELETE'
+ });
+ }
+ }
+ );
+ }
+
+ });
+
}
+
});
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index c4b5508692e..02ecf56fa09 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -16,9 +16,17 @@ if (!OCA.Sharing) {
if (!OCA.Files) {
OCA.Files = {};
}
+/**
+ * @namespace
+ */
OCA.Sharing.PublicApp = {
_initialized: false,
+ /**
+ * Initializes the public share app.
+ *
+ * @param $el container
+ */
initialize: function ($el) {
var self = this;
var fileActions;
@@ -45,6 +53,7 @@ OCA.Sharing.PublicApp = {
this.fileList = new OCA.Files.FileList(
$el,
{
+ id: 'files.public',
scrollContainer: $(window),
dragOptions: dragOptions,
folderDropOptions: folderDropOptions,
@@ -53,6 +62,9 @@ OCA.Sharing.PublicApp = {
);
this.files = OCA.Files.Files;
this.files.initialize();
+ // TODO: move to PublicFileList.initialize() once
+ // the code was split into a separate class
+ OC.Plugins.attach('OCA.Sharing.PublicFileList', this.fileList);
}
var mimetype = $('#mimetype').val();
@@ -84,7 +96,7 @@ OCA.Sharing.PublicApp = {
scalingup: 0
};
- var img = $('<img class="publicpreview">');
+ var img = $('<img class="publicpreview" alt="">');
if (previewSupported === 'true' || mimetype.substr(0, mimetype.indexOf('/')) === 'image' && mimetype !== 'image/svg+xml') {
img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
img.appendTo('#imgframe');
@@ -101,14 +113,12 @@ OCA.Sharing.PublicApp = {
filename = JSON.stringify(filename);
}
var path = dir || FileList.getCurrentDirectory();
+ var token = $('#sharingToken').val();
var params = {
- service: 'files',
- t: $('#sharingToken').val(),
path: path,
- files: filename,
- download: null
+ files: filename
};
- return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
+ return OC.generateUrl('/s/'+token+'/download') + '?' + OC.buildQueryString(params);
};
this.fileList.getAjaxUrl = function (action, params) {
@@ -118,12 +128,11 @@ OCA.Sharing.PublicApp = {
};
this.fileList.linkTo = function (dir) {
+ var token = $('#sharingToken').val();
var params = {
- service: 'files',
- t: $('#sharingToken').val(),
dir: dir
};
- return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
+ return OC.generateUrl('/s/'+token+'') + '?' + OC.buildQueryString(params);
};
this.fileList.generatePreviewUrl = function (urlSpec) {
@@ -185,8 +194,6 @@ OCA.Sharing.PublicApp = {
_onDirectoryChanged: function (e) {
OC.Util.History.pushState({
- service: 'files',
- t: $('#sharingToken').val(),
// arghhhh, why is this not called "dir" !?
path: e.dir
});
@@ -210,7 +217,7 @@ OCA.Sharing.PublicApp = {
// this check needs to happen on the server due to the Content Security Policy directive
$.get(OC.generateUrl('apps/files_sharing/testremote'), {remote: remote}).then(function (protocol) {
if (protocol !== 'http' && protocol !== 'https') {
- OC.dialogs.alert(t('files_sharing', 'No ownCloud installation found at {remote}', {remote: remote}),
+ OC.dialogs.alert(t('files_sharing', 'No ownCloud installation (7 or higher) found at {remote}', {remote: remote}),
t('files_sharing', 'Invalid ownCloud url'));
} else {
OC.redirect(protocol + '://' + url);
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index eccd21c9248..bbd107e070e 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -12,34 +12,52 @@
if (!OCA.Sharing) {
OCA.Sharing = {};
}
+ /**
+ * @namespace
+ */
OCA.Sharing.Util = {
- initialize: function(fileActions) {
- if (OCA.Files.FileList) {
- var oldCreateRow = OCA.Files.FileList.prototype._createRow;
- OCA.Files.FileList.prototype._createRow = function(fileData) {
- var tr = oldCreateRow.apply(this, arguments);
- var sharePermissions = fileData.permissions;
- if (fileData.type === 'file') {
- // files can't be shared with delete permissions
- sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE;
- }
- tr.attr('data-share-permissions', sharePermissions);
- if (fileData.shareOwner) {
- tr.attr('data-share-owner', fileData.shareOwner);
- // user should always be able to rename a mount point
- if (fileData.isShareMountPoint) {
- tr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);
- }
- }
- if (fileData.recipientsDisplayName) {
- tr.attr('data-share-recipients', fileData.recipientsDisplayName);
- }
- return tr;
- };
+ /**
+ * Initialize the sharing plugin.
+ *
+ * Registers the "Share" file action and adds additional
+ * DOM attributes for the sharing file info.
+ *
+ * @param {OCA.Files.FileList} fileList file list to be extended
+ */
+ attach: function(fileList) {
+ if (fileList.id === 'trashbin') {
+ return;
}
+ var fileActions = fileList.fileActions;
+ var oldCreateRow = fileList._createRow;
+ fileList._createRow = function(fileData) {
+ var tr = oldCreateRow.apply(this, arguments);
+ var sharePermissions = fileData.permissions;
+ if (fileData.mountType && fileData.mountType === "external-root"){
+ // for external storages we cant use the permissions of the mountpoint
+ // instead we show all permissions and only use the share permissions from the mountpoint to handle resharing
+ sharePermissions = sharePermissions | (OC.PERMISSION_ALL & ~OC.PERMISSION_SHARE);
+ }
+ if (fileData.type === 'file') {
+ // files can't be shared with delete permissions
+ sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE;
+ }
+ tr.attr('data-share-permissions', sharePermissions);
+ if (fileData.shareOwner) {
+ tr.attr('data-share-owner', fileData.shareOwner);
+ // user should always be able to rename a mount point
+ if (fileData.isShareMountPoint) {
+ tr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);
+ }
+ }
+ if (fileData.recipientsDisplayName) {
+ tr.attr('data-share-recipients', fileData.recipientsDisplayName);
+ }
+ return tr;
+ };
// use delegate to catch the case with multiple file lists
- $('#content').delegate('#fileList', 'fileActionsReady', function(ev){
+ fileList.$el.on('fileActionsReady', function(ev){
var fileList = ev.fileList;
var $files = ev.$files;
@@ -160,9 +178,9 @@
* other ones will be shown as "+x" where "x" is the number of
* remaining recipients.
*
- * @param recipients recipients array
- * @param count optional total recipients count (in case the array was shortened)
- * @return formatted recipients display text
+ * @param {Array.<String>} recipients recipients array
+ * @param {int} count optional total recipients count (in case the array was shortened)
+ * @return {String} formatted recipients display text
*/
formatRecipients: function(recipients, count) {
var maxRecipients = 4;
@@ -181,12 +199,5 @@
};
})();
-$(document).ready(function() {
- // FIXME: HACK: do not init when running unit tests, need a better way
- if (!window.TESTING) {
- if (!_.isUndefined(OC.Share) && !_.isUndefined(OCA.Files)) {
- OCA.Sharing.Util.initialize(OCA.Files.fileActions);
- }
- }
-});
+OC.Plugins.register('OCA.Files.FileList', OCA.Sharing.Util);
diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js
index b99611f9bf0..2c7d6c7d43a 100644
--- a/apps/files_sharing/js/sharedfilelist.js
+++ b/apps/files_sharing/js/sharedfilelist.js
@@ -10,15 +10,25 @@
(function() {
/**
- * Sharing file list
+ * @class OCA.Sharing.FileList
+ * @augments OCA.Files.FileList
*
+ * @classdesc Sharing file list.
* Contains both "shared with others" and "shared with you" modes.
+ *
+ * @param $el container element with existing markup for the #controls
+ * and a table
+ * @param [options] map of options, see other parameters
+ * @param {boolean} [options.sharedWithUser] true to return files shared with
+ * the current user, false to return files that the user shared with others.
+ * Defaults to false.
+ * @param {boolean} [options.linksOnly] true to return only link shares
*/
var FileList = function($el, options) {
this.initialize($el, options);
};
-
- FileList.prototype = _.extend({}, OCA.Files.FileList.prototype, {
+ FileList.prototype = _.extend({}, OCA.Files.FileList.prototype,
+ /** @lends OCA.Sharing.FileList.prototype */ {
appName: 'Shares',
/**
@@ -27,9 +37,12 @@
*/
_sharedWithUser: false,
_linksOnly: false,
-
_clientSideSort: true,
+ _allowSelection: false,
+ /**
+ * @private
+ */
initialize: function($el, options) {
OCA.Files.FileList.prototype.initialize.apply(this, arguments);
if (this.initialized) {
@@ -43,6 +56,7 @@
if (options && options.linksOnly) {
this._linksOnly = true;
}
+ OC.Plugins.attach('OCA.Sharing.FileList', this);
},
_renderRow: function() {
@@ -91,7 +105,11 @@
},
getDirectoryPermissions: function() {
- return OC.PERMISSION_READ | OC.PERMISSION_DELETE;
+ var perms = OC.PERMISSION_READ;
+ if (this._sharedWithUser) {
+ perms |= OC.PERMISSION_DELETE;
+ }
+ return perms;
},
updateStorageStatistics: function() {
@@ -138,8 +156,8 @@
/**
* Converts the OCS API share response data to a file info
* list
- * @param OCS API share array
- * @return array of file info maps
+ * @param {Array} data OCS API share array
+ * @return {Array.<OCA.Sharing.SharedFileInfo>} array of shared file info
*/
_makeFilesFromShares: function(data) {
/* jshint camelcase: false */
@@ -191,7 +209,11 @@
}
file.name = OC.basename(share.path);
file.path = OC.dirname(share.path);
- file.permissions = OC.PERMISSION_ALL;
+ if (this._sharedWithUser) {
+ file.permissions = OC.PERMISSION_ALL;
+ } else {
+ file.permissions = OC.PERMISSION_ALL - OC.PERMISSION_DELETE;
+ }
if (file.path) {
file.extraData = share.path;
}
@@ -259,5 +281,33 @@
}
});
+ /**
+ * Share info attributes.
+ *
+ * @typedef {Object} OCA.Sharing.ShareInfo
+ *
+ * @property {int} id share ID
+ * @property {int} type share type
+ * @property {String} target share target, either user name or group name
+ * @property {int} stime share timestamp in milliseconds
+ * @property {String} [targetDisplayName] display name of the recipient
+ * (only when shared with others)
+ *
+ */
+
+ /**
+ * Shared file info attributes.
+ *
+ * @typedef {OCA.Files.FileInfo} OCA.Sharing.SharedFileInfo
+ *
+ * @property {Array.<OCA.Sharing.ShareInfo>} shares array of shares for
+ * this file
+ * @property {int} mtime most recent share time (if multiple shares)
+ * @property {String} shareOwner name of the share owner
+ * @property {Array.<String>} recipients name of the first 4 recipients
+ * (this is mostly for display purposes)
+ * @property {String} recipientsDisplayName display name
+ */
+
OCA.Sharing.FileList = FileList;
})();
diff --git a/apps/files_sharing/l10n/ast.js b/apps/files_sharing/l10n/ast.js
index 7273f0fec5b..5c935410b6f 100644
--- a/apps/files_sharing/l10n/ast.js
+++ b/apps/files_sharing/l10n/ast.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Compartíos contigo",
"Shared with others" : "Compartíos con otros",
"Shared by link" : "Compartíos per enllaz",
- "No files have been shared with you yet." : "Entá nun se compartieron ficheros contigo.",
- "You haven't shared any files yet." : "Entá nun compartiesti dengún ficheru.",
- "You haven't shared any files by link yet." : "Entá nun compartiesti nengún ficheru per enllaz.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Quies amestar compartición remota {name} de {owner}@{remote}?",
"Remote share" : "Compartición remota",
"Remote share password" : "Contraseña de compartición remota",
"Cancel" : "Encaboxar",
"Add remote share" : "Amestar compartición remota",
- "No ownCloud installation found at {remote}" : "Nun s'alcontró denguna instalación d'ownCloud en {remote}",
"Invalid ownCloud url" : "Url ownCloud inválida",
"Shared by" : "Compartíos por",
"This share is password-protected" : "Esta compartición tien contraseña protexida",
diff --git a/apps/files_sharing/l10n/ast.json b/apps/files_sharing/l10n/ast.json
index fd9d2479cc7..d776a4fefba 100644
--- a/apps/files_sharing/l10n/ast.json
+++ b/apps/files_sharing/l10n/ast.json
@@ -6,15 +6,11 @@
"Shared with you" : "Compartíos contigo",
"Shared with others" : "Compartíos con otros",
"Shared by link" : "Compartíos per enllaz",
- "No files have been shared with you yet." : "Entá nun se compartieron ficheros contigo.",
- "You haven't shared any files yet." : "Entá nun compartiesti dengún ficheru.",
- "You haven't shared any files by link yet." : "Entá nun compartiesti nengún ficheru per enllaz.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Quies amestar compartición remota {name} de {owner}@{remote}?",
"Remote share" : "Compartición remota",
"Remote share password" : "Contraseña de compartición remota",
"Cancel" : "Encaboxar",
"Add remote share" : "Amestar compartición remota",
- "No ownCloud installation found at {remote}" : "Nun s'alcontró denguna instalación d'ownCloud en {remote}",
"Invalid ownCloud url" : "Url ownCloud inválida",
"Shared by" : "Compartíos por",
"This share is password-protected" : "Esta compartición tien contraseña protexida",
diff --git a/apps/files_sharing/l10n/az.js b/apps/files_sharing/l10n/az.js
index ac29161dbd7..223fbfdef59 100644
--- a/apps/files_sharing/l10n/az.js
+++ b/apps/files_sharing/l10n/az.js
@@ -6,8 +6,6 @@ OC.L10N.register(
"Couldn't add remote share" : "Uzaqda olan yayımlanmanı əlavə etmək mümkün olmadı",
"Shared with you" : "Sizinlə yayımlanan",
"Shared with others" : "Hər kəsə yayımlanmış",
- "You haven't shared any files yet." : "Siz hələki heç bir faylı yayımlamamısnız.",
- "You haven't shared any files by link yet." : "Hələki siz bu link ilə heç bir faylı yayımlamamısıniz.",
"Remote share" : "Uzaq yayımlanma",
"Remote share password" : "Uzaq yayımlanma şifrəsi",
"Cancel" : "Dayandır",
diff --git a/apps/files_sharing/l10n/az.json b/apps/files_sharing/l10n/az.json
index 1b08e3b4e7d..3bd23948fd6 100644
--- a/apps/files_sharing/l10n/az.json
+++ b/apps/files_sharing/l10n/az.json
@@ -4,8 +4,6 @@
"Couldn't add remote share" : "Uzaqda olan yayımlanmanı əlavə etmək mümkün olmadı",
"Shared with you" : "Sizinlə yayımlanan",
"Shared with others" : "Hər kəsə yayımlanmış",
- "You haven't shared any files yet." : "Siz hələki heç bir faylı yayımlamamısnız.",
- "You haven't shared any files by link yet." : "Hələki siz bu link ilə heç bir faylı yayımlamamısıniz.",
"Remote share" : "Uzaq yayımlanma",
"Remote share password" : "Uzaq yayımlanma şifrəsi",
"Cancel" : "Dayandır",
diff --git a/apps/files_sharing/l10n/bg_BG.js b/apps/files_sharing/l10n/bg_BG.js
index 15a51e759d7..6da77164ddc 100644
--- a/apps/files_sharing/l10n/bg_BG.js
+++ b/apps/files_sharing/l10n/bg_BG.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Споделено с теб",
"Shared with others" : "Споделено с други",
"Shared by link" : "Споделено с връзка",
- "No files have been shared with you yet." : "Все още няма споделени с теб файлове.",
- "You haven't shared any files yet." : "Все още не си споделил файлове.",
- "You haven't shared any files by link yet." : "Все още не си споделил файлове с връзка.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Желаеш ли да добавиш като прикачената папка {name} от {owner}@{remote}?",
"Remote share" : "Прикачена Папка",
"Remote share password" : "Парола за прикачена папка",
"Cancel" : "Отказ",
"Add remote share" : "Добави прикачена папка",
- "No ownCloud installation found at {remote}" : "Не е открит инсталиран ownCloud на {remote}.",
"Invalid ownCloud url" : "Невалиден ownCloud интернет адрес.",
"Shared by" : "Споделено от",
"This share is password-protected" : "Тази зона е защитена с парола.",
@@ -33,6 +29,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Добави към своя ownCloud",
"Download" : "Изтегли",
"Download %s" : "Изтегли %s",
- "Direct link" : "Директна връзка"
+ "Direct link" : "Директна връзка",
+ "Server-to-Server Sharing" : "Споделяне между Сървъри",
+ "Allow users on this server to send shares to other servers" : "Позволи на потребители от този сървър да споделят папки с други сървъри",
+ "Allow users on this server to receive shares from other servers" : "Позволи на потребители на този сървър да получават споделени папки от други сървъри"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/bg_BG.json b/apps/files_sharing/l10n/bg_BG.json
index 85b2bcecbe1..f151698099b 100644
--- a/apps/files_sharing/l10n/bg_BG.json
+++ b/apps/files_sharing/l10n/bg_BG.json
@@ -6,15 +6,11 @@
"Shared with you" : "Споделено с теб",
"Shared with others" : "Споделено с други",
"Shared by link" : "Споделено с връзка",
- "No files have been shared with you yet." : "Все още няма споделени с теб файлове.",
- "You haven't shared any files yet." : "Все още не си споделил файлове.",
- "You haven't shared any files by link yet." : "Все още не си споделил файлове с връзка.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Желаеш ли да добавиш като прикачената папка {name} от {owner}@{remote}?",
"Remote share" : "Прикачена Папка",
"Remote share password" : "Парола за прикачена папка",
"Cancel" : "Отказ",
"Add remote share" : "Добави прикачена папка",
- "No ownCloud installation found at {remote}" : "Не е открит инсталиран ownCloud на {remote}.",
"Invalid ownCloud url" : "Невалиден ownCloud интернет адрес.",
"Shared by" : "Споделено от",
"This share is password-protected" : "Тази зона е защитена с парола.",
@@ -31,6 +27,9 @@
"Add to your ownCloud" : "Добави към своя ownCloud",
"Download" : "Изтегли",
"Download %s" : "Изтегли %s",
- "Direct link" : "Директна връзка"
+ "Direct link" : "Директна връзка",
+ "Server-to-Server Sharing" : "Споделяне между Сървъри",
+ "Allow users on this server to send shares to other servers" : "Позволи на потребители от този сървър да споделят папки с други сървъри",
+ "Allow users on this server to receive shares from other servers" : "Позволи на потребители на този сървър да получават споделени папки от други сървъри"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/bn_BD.js b/apps/files_sharing/l10n/bn_BD.js
index 9f345965aee..f297d1f7b18 100644
--- a/apps/files_sharing/l10n/bn_BD.js
+++ b/apps/files_sharing/l10n/bn_BD.js
@@ -8,7 +8,6 @@ OC.L10N.register(
"Shared by link" : "লিঙ্কের মাধ্যমে ভাগাভাগিকৃত",
"Remote share" : "দুরবর্তী ভাগাভাগি",
"Cancel" : "বাতিল",
- "No ownCloud installation found at {remote}" : "{remote}এ কোন ওউনক্লাউড ইনস্টলেসন পাওয়া গেলনা",
"Invalid ownCloud url" : "অবৈধ ওউনক্লাউড url",
"Shared by" : "যাদের মাঝে ভাগাভাগি করা হয়েছে",
"This share is password-protected" : "এই শেয়ারটি কূটশব্দদ্বারা সুরক্ষিত",
diff --git a/apps/files_sharing/l10n/bn_BD.json b/apps/files_sharing/l10n/bn_BD.json
index 0511dc3d939..cff7925505c 100644
--- a/apps/files_sharing/l10n/bn_BD.json
+++ b/apps/files_sharing/l10n/bn_BD.json
@@ -6,7 +6,6 @@
"Shared by link" : "লিঙ্কের মাধ্যমে ভাগাভাগিকৃত",
"Remote share" : "দুরবর্তী ভাগাভাগি",
"Cancel" : "বাতিল",
- "No ownCloud installation found at {remote}" : "{remote}এ কোন ওউনক্লাউড ইনস্টলেসন পাওয়া গেলনা",
"Invalid ownCloud url" : "অবৈধ ওউনক্লাউড url",
"Shared by" : "যাদের মাঝে ভাগাভাগি করা হয়েছে",
"This share is password-protected" : "এই শেয়ারটি কূটশব্দদ্বারা সুরক্ষিত",
diff --git a/apps/files_sharing/l10n/bs.js b/apps/files_sharing/l10n/bs.js
index 1be4f1f3fb8..9ff10d77a5b 100644
--- a/apps/files_sharing/l10n/bs.js
+++ b/apps/files_sharing/l10n/bs.js
@@ -1,7 +1,10 @@
OC.L10N.register(
"files_sharing",
{
+ "Cancel" : "Odustani",
"Shared by" : "Dijeli",
- "Name" : "Ime"
+ "Password" : "Lozinka",
+ "Name" : "Ime",
+ "Download" : "Preuzmite"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/bs.json b/apps/files_sharing/l10n/bs.json
index 48fb8d2209a..c2bfb948e8e 100644
--- a/apps/files_sharing/l10n/bs.json
+++ b/apps/files_sharing/l10n/bs.json
@@ -1,5 +1,8 @@
{ "translations": {
+ "Cancel" : "Odustani",
"Shared by" : "Dijeli",
- "Name" : "Ime"
+ "Password" : "Lozinka",
+ "Name" : "Ime",
+ "Download" : "Preuzmite"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js
index 51153252cba..e65956d5f56 100644
--- a/apps/files_sharing/l10n/ca.js
+++ b/apps/files_sharing/l10n/ca.js
@@ -4,18 +4,14 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "La compartició entre servidors no està activada en aquest servidor",
"Invalid or untrusted SSL certificate" : "El certificat SSL és invàlid o no és fiable",
"Couldn't add remote share" : "No s'ha pogut afegir una compartició remota",
- "Shared with you" : "Compartit amb vós",
- "Shared with others" : "Compartit amb altres",
+ "Shared with you" : "Us han compartit",
+ "Shared with others" : "Heu compartit",
"Shared by link" : "Compartit amb enllaç",
- "No files have been shared with you yet." : "Encara no hi ha fitxers compartits amb vós.",
- "You haven't shared any files yet." : "Encara no heu compartit cap fitxer.",
- "You haven't shared any files by link yet." : "Encara no heu compartit cap fitxer amb enllaç.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Voleu afegir la compartició remota {nom} des de {owner}@{remote}?",
"Remote share" : "Compartició remota",
"Remote share password" : "Contrasenya de compartició remota",
"Cancel" : "Cancel·la",
"Add remote share" : "Afegeix compartició remota",
- "No ownCloud installation found at {remote}" : "No s'ha trobat cap instal·lació ownCloud a {remote}",
"Invalid ownCloud url" : "La url d'ownCloud no és vàlida",
"Shared by" : "Compartit per",
"This share is password-protected" : "Aquest compartit està protegit amb contrasenya",
diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json
index 88d2fa70811..69e766582c8 100644
--- a/apps/files_sharing/l10n/ca.json
+++ b/apps/files_sharing/l10n/ca.json
@@ -2,18 +2,14 @@
"Server to server sharing is not enabled on this server" : "La compartició entre servidors no està activada en aquest servidor",
"Invalid or untrusted SSL certificate" : "El certificat SSL és invàlid o no és fiable",
"Couldn't add remote share" : "No s'ha pogut afegir una compartició remota",
- "Shared with you" : "Compartit amb vós",
- "Shared with others" : "Compartit amb altres",
+ "Shared with you" : "Us han compartit",
+ "Shared with others" : "Heu compartit",
"Shared by link" : "Compartit amb enllaç",
- "No files have been shared with you yet." : "Encara no hi ha fitxers compartits amb vós.",
- "You haven't shared any files yet." : "Encara no heu compartit cap fitxer.",
- "You haven't shared any files by link yet." : "Encara no heu compartit cap fitxer amb enllaç.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Voleu afegir la compartició remota {nom} des de {owner}@{remote}?",
"Remote share" : "Compartició remota",
"Remote share password" : "Contrasenya de compartició remota",
"Cancel" : "Cancel·la",
"Add remote share" : "Afegeix compartició remota",
- "No ownCloud installation found at {remote}" : "No s'ha trobat cap instal·lació ownCloud a {remote}",
"Invalid ownCloud url" : "La url d'ownCloud no és vàlida",
"Shared by" : "Compartit per",
"This share is password-protected" : "Aquest compartit està protegit amb contrasenya",
diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index 1d65d7032ee..ebe683ff89f 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Sdíleno s vámi",
"Shared with others" : "Sdíleno s ostatními",
"Shared by link" : "Sdíleno pomocí odkazu",
- "No files have been shared with you yet." : "Zatím s vámi nikdo žádné soubory nesdílel.",
- "You haven't shared any files yet." : "Zatím jste nesdíleli žádné soubory.",
- "You haven't shared any files by link yet." : "Zatím jste nesdíleli pomocí odkazu žádné soubory.",
+ "Nothing shared with you yet" : "Zatím s vámi nikdo nic nesdílel",
+ "Files and folders others share with you will show up here" : "Zde budou zobrazeny soubory a adresáře, které s vámi ostatní sdílí",
+ "Nothing shared yet" : "Zatím není nic sdíleno",
+ "Files and folders you share will show up here" : "Zde budou zobrazeny vámi sdílené soubory a adresáře",
+ "No shared links" : "Žádné sdílené odkazy",
+ "Files and folders you share by link will show up here" : "Zde budou zobrazeny soubory a adresáře, které sdílíte jako webové odkazy",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?",
"Remote share" : "Vzdálené úložiště",
"Remote share password" : "Heslo ke vzdálenému úložišti",
"Cancel" : "Zrušit",
"Add remote share" : "Přidat vzdálené úložiště",
- "No ownCloud installation found at {remote}" : "Nebyla nalezena instalace ownCloud na {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}",
"Invalid ownCloud url" : "Neplatná ownCloud url",
"Shared by" : "Sdílí",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
+ "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
+ "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
+ "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
+ "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
"This share is password-protected" : "Toto sdílení je chráněno heslem",
"The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.",
"Password" : "Heslo",
+ "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
"Name" : "Název",
"Share time" : "Čas sdílení",
"Sorry, this link doesn’t seem to work anymore." : "Je nám líto, ale tento odkaz již není funkční.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Přidat do svého ownCloudu",
"Download" : "Stáhnout",
"Download %s" : "Stáhnout %s",
- "Direct link" : "Přímý odkaz"
+ "Direct link" : "Přímý odkaz",
+ "Server-to-Server Sharing" : "Sdílení mezi servery",
+ "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
+ "Allow users on this server to receive shares from other servers" : "Povolit uživatelům z tohoto serveru přijímat sdílení z jiných serverů"
},
"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 a4d4bdf28e2..4b3d934132a 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -6,20 +6,32 @@
"Shared with you" : "Sdíleno s vámi",
"Shared with others" : "Sdíleno s ostatními",
"Shared by link" : "Sdíleno pomocí odkazu",
- "No files have been shared with you yet." : "Zatím s vámi nikdo žádné soubory nesdílel.",
- "You haven't shared any files yet." : "Zatím jste nesdíleli žádné soubory.",
- "You haven't shared any files by link yet." : "Zatím jste nesdíleli pomocí odkazu žádné soubory.",
+ "Nothing shared with you yet" : "Zatím s vámi nikdo nic nesdílel",
+ "Files and folders others share with you will show up here" : "Zde budou zobrazeny soubory a adresáře, které s vámi ostatní sdílí",
+ "Nothing shared yet" : "Zatím není nic sdíleno",
+ "Files and folders you share will show up here" : "Zde budou zobrazeny vámi sdílené soubory a adresáře",
+ "No shared links" : "Žádné sdílené odkazy",
+ "Files and folders you share by link will show up here" : "Zde budou zobrazeny soubory a adresáře, které sdílíte jako webové odkazy",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?",
"Remote share" : "Vzdálené úložiště",
"Remote share password" : "Heslo ke vzdálenému úložišti",
"Cancel" : "Zrušit",
"Add remote share" : "Přidat vzdálené úložiště",
- "No ownCloud installation found at {remote}" : "Nebyla nalezena instalace ownCloud na {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}",
"Invalid ownCloud url" : "Neplatná ownCloud url",
"Shared by" : "Sdílí",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
+ "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
+ "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
+ "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
+ "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
"This share is password-protected" : "Toto sdílení je chráněno heslem",
"The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.",
"Password" : "Heslo",
+ "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
"Name" : "Název",
"Share time" : "Čas sdílení",
"Sorry, this link doesn’t seem to work anymore." : "Je nám líto, ale tento odkaz již není funkční.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Přidat do svého ownCloudu",
"Download" : "Stáhnout",
"Download %s" : "Stáhnout %s",
- "Direct link" : "Přímý odkaz"
+ "Direct link" : "Přímý odkaz",
+ "Server-to-Server Sharing" : "Sdílení mezi servery",
+ "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
+ "Allow users on this server to receive shares from other servers" : "Povolit uživatelům z tohoto serveru přijímat sdílení z jiných serverů"
},"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/da.js b/apps/files_sharing/l10n/da.js
index 961252e26c6..61eb8a6eb5a 100644
--- a/apps/files_sharing/l10n/da.js
+++ b/apps/files_sharing/l10n/da.js
@@ -8,17 +8,27 @@ OC.L10N.register(
"Shared with you" : "Delt med dig",
"Shared with others" : "Delt med andre",
"Shared by link" : "Delt via link",
- "No files have been shared with you yet." : "Endnu er ingen filer delt med dig.",
- "You haven't shared any files yet." : "Du har ikke delt nogen filer endnu.",
- "You haven't shared any files by link yet." : "Du har ikke delt nogen filer endnu.",
+ "Nothing shared with you yet" : "Der deles ikke noget med dig endnu",
+ "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med dig, vil blive vist her",
+ "Nothing shared yet" : "Der deles endnu ikke noget",
+ "Files and folders you share will show up here" : "Filer og mapper som du deler, vil blive vist her",
+ "No shared links" : "Ingen delte link",
+ "Files and folders you share by link will show up here" : "Filer og mapper som du deler gennem link, vil blive vist her",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Vil du tilføje den eksterne deling {name} fra {owner}@{remote}?",
"Remote share" : "Ekstern deling",
"Remote share password" : "Adgangskode for ekstern deling",
"Cancel" : "Annuller",
"Add remote share" : "Tilføj ekstern deling",
- "No ownCloud installation found at {remote}" : "Der blev ikke fundet en ownCloud-installation på {remote}",
"Invalid ownCloud url" : "Ugyldig ownCloud-URL",
"Shared by" : "Delt af",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe blev delt fra <strong>en anden server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En offentligt delt fil eller mappe blev <strong>downloadet</strong>",
+ "You received a new remote share from %s" : "Du modtog en ny ekstern deling fra %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepterede den ekstern deling %2$s",
+ "%1$s declined remote share %2$s" : "%1$s afviste den eksterne deling %2$s",
+ "%1$s unshared %2$s from you" : "%1$s stoppede med at dele %2$s med dig",
+ "Public shared folder %1$s was downloaded" : "Den offentligt delte mappe %1$s blev downloadet",
+ "Public shared file %1$s was downloaded" : "Den offentligt delte fil %1$s blev downloadet",
"This share is password-protected" : "Delingen er beskyttet af kodeord",
"The password is wrong. Try again." : "Kodeordet er forkert. Prøv igen.",
"Password" : "Kodeord",
@@ -33,6 +43,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Tilføj til din ownCload",
"Download" : "Download",
"Download %s" : "Download %s",
- "Direct link" : "Direkte link"
+ "Direct link" : "Direkte link",
+ "Server-to-Server Sharing" : "Deling via server-til-server",
+ "Allow users on this server to send shares to other servers" : "Tillad brugere på denne server, at sende delinger til andre servere",
+ "Allow users on this server to receive shares from other servers" : "Tillad brugere på denne server, at modtage delinger fra andre servere"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json
index 19291cdd9bf..04f711b45a7 100644
--- a/apps/files_sharing/l10n/da.json
+++ b/apps/files_sharing/l10n/da.json
@@ -6,17 +6,27 @@
"Shared with you" : "Delt med dig",
"Shared with others" : "Delt med andre",
"Shared by link" : "Delt via link",
- "No files have been shared with you yet." : "Endnu er ingen filer delt med dig.",
- "You haven't shared any files yet." : "Du har ikke delt nogen filer endnu.",
- "You haven't shared any files by link yet." : "Du har ikke delt nogen filer endnu.",
+ "Nothing shared with you yet" : "Der deles ikke noget med dig endnu",
+ "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med dig, vil blive vist her",
+ "Nothing shared yet" : "Der deles endnu ikke noget",
+ "Files and folders you share will show up here" : "Filer og mapper som du deler, vil blive vist her",
+ "No shared links" : "Ingen delte link",
+ "Files and folders you share by link will show up here" : "Filer og mapper som du deler gennem link, vil blive vist her",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Vil du tilføje den eksterne deling {name} fra {owner}@{remote}?",
"Remote share" : "Ekstern deling",
"Remote share password" : "Adgangskode for ekstern deling",
"Cancel" : "Annuller",
"Add remote share" : "Tilføj ekstern deling",
- "No ownCloud installation found at {remote}" : "Der blev ikke fundet en ownCloud-installation på {remote}",
"Invalid ownCloud url" : "Ugyldig ownCloud-URL",
"Shared by" : "Delt af",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe blev delt fra <strong>en anden server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En offentligt delt fil eller mappe blev <strong>downloadet</strong>",
+ "You received a new remote share from %s" : "Du modtog en ny ekstern deling fra %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepterede den ekstern deling %2$s",
+ "%1$s declined remote share %2$s" : "%1$s afviste den eksterne deling %2$s",
+ "%1$s unshared %2$s from you" : "%1$s stoppede med at dele %2$s med dig",
+ "Public shared folder %1$s was downloaded" : "Den offentligt delte mappe %1$s blev downloadet",
+ "Public shared file %1$s was downloaded" : "Den offentligt delte fil %1$s blev downloadet",
"This share is password-protected" : "Delingen er beskyttet af kodeord",
"The password is wrong. Try again." : "Kodeordet er forkert. Prøv igen.",
"Password" : "Kodeord",
@@ -31,6 +41,9 @@
"Add to your ownCloud" : "Tilføj til din ownCload",
"Download" : "Download",
"Download %s" : "Download %s",
- "Direct link" : "Direkte link"
+ "Direct link" : "Direkte link",
+ "Server-to-Server Sharing" : "Deling via server-til-server",
+ "Allow users on this server to send shares to other servers" : "Tillad brugere på denne server, at sende delinger til andre servere",
+ "Allow users on this server to receive shares from other servers" : "Tillad brugere på denne server, at modtage delinger fra andre servere"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index 69635c8ca4c..88ccb754456 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Mit Dir geteilt",
"Shared with others" : "Von Dir geteilt",
"Shared by link" : "Geteilt über einen Link",
- "No files have been shared with you yet." : "Es wurden bis jetzt keine Dateien mit Dir geteilt.",
- "You haven't shared any files yet." : "Du hast bis jetzt keine Dateien mit anderen geteilt.",
- "You haven't shared any files by link yet." : "Du hast bis jetzt keine Dateien über einen Link mit anderen geteilt.",
+ "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Dir geteilt",
+ "Files and folders others share with you will show up here" : "Mit Dir geteilte Dateien und Ordner anderer werden hier erscheinen",
+ "Nothing shared yet" : "Noch nichts geteilt",
+ "Files and folders you share will show up here" : "Von Dir geteilte Dateien und Ordner werden hier erscheinen",
+ "No shared links" : "Keine geteilten Links",
+ "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchtest Du die entfernte Freigabe {name} von {owner}@{remote} hinzufügen?",
"Remote share" : "Entfernte Freigabe",
"Remote share password" : "Passwort für die entfernte Freigabe",
"Cancel" : "Abbrechen",
"Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-URL",
"Shared by" : "Geteilt von ",
+ "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 public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei oder Ordner wurde <strong>heruntergeladen</strong>",
+ "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",
+ "%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
+ "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Dich 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",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.",
"Password" : "Passwort",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
"Name" : "Name",
"Share time" : "Zeitpunkt der Freigabe",
"Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Zu Deiner ownCloud hinzufügen",
"Download" : "Herunterladen",
"Download %s" : "Download %s",
- "Direct link" : "Direkter Link"
+ "Direct link" : "Direkter Link",
+ "Server-to-Server Sharing" : "Server-zu-Server Datenaustausch",
+ "Allow users on this server to send shares to other servers" : "Nutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
+ "Allow users on this server to receive shares from other servers" : "Nutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index f444c486956..11557269547 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -6,20 +6,32 @@
"Shared with you" : "Mit Dir geteilt",
"Shared with others" : "Von Dir geteilt",
"Shared by link" : "Geteilt über einen Link",
- "No files have been shared with you yet." : "Es wurden bis jetzt keine Dateien mit Dir geteilt.",
- "You haven't shared any files yet." : "Du hast bis jetzt keine Dateien mit anderen geteilt.",
- "You haven't shared any files by link yet." : "Du hast bis jetzt keine Dateien über einen Link mit anderen geteilt.",
+ "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Dir geteilt",
+ "Files and folders others share with you will show up here" : "Mit Dir geteilte Dateien und Ordner anderer werden hier erscheinen",
+ "Nothing shared yet" : "Noch nichts geteilt",
+ "Files and folders you share will show up here" : "Von Dir geteilte Dateien und Ordner werden hier erscheinen",
+ "No shared links" : "Keine geteilten Links",
+ "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchtest Du die entfernte Freigabe {name} von {owner}@{remote} hinzufügen?",
"Remote share" : "Entfernte Freigabe",
"Remote share password" : "Passwort für die entfernte Freigabe",
"Cancel" : "Abbrechen",
"Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-URL",
"Shared by" : "Geteilt von ",
+ "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 public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei oder Ordner wurde <strong>heruntergeladen</strong>",
+ "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",
+ "%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
+ "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Dich 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",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.",
"Password" : "Passwort",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
"Name" : "Name",
"Share time" : "Zeitpunkt der Freigabe",
"Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Zu Deiner ownCloud hinzufügen",
"Download" : "Herunterladen",
"Download %s" : "Download %s",
- "Direct link" : "Direkter Link"
+ "Direct link" : "Direkter Link",
+ "Server-to-Server Sharing" : "Server-zu-Server Datenaustausch",
+ "Allow users on this server to send shares to other servers" : "Nutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
+ "Allow users on this server to receive shares from other servers" : "Nutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben"
},"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 23ad9ffb91f..baf7b182c47 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Mit Ihnen geteilt",
"Shared with others" : "Von Ihnen geteilt",
"Shared by link" : "Geteilt über einen Link",
- "No files have been shared with you yet." : "Es wurden bis jetzt keine Dateien mit Ihnen geteilt.",
- "You haven't shared any files yet." : "Sie haben bis jetzt keine Dateien mit anderen geteilt.",
- "You haven't shared any files by link yet." : "Sie haben bis jetzt keine Dateien über einen Link mit anderen geteilt.",
+ "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Ihnen geteilt",
+ "Files and folders others share with you will show up here" : "Mit Ihnen geteilte Dateien und Ordner anderer werden hier erscheinen",
+ "Nothing shared yet" : "Noch nichts geteilt",
+ "Files and folders you share will show up here" : "Dateien und Ordner, die Sie teilen, werden hier erscheinen",
+ "No shared links" : "Keine geteilten Links",
+ "Files and folders you share by link will show up here" : "Dateien und Ordner, die Sie per Link teilen, werden hier erscheinen",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchten Sie die entfernte Freigabe {name} von {owner}@{remote} hinzufügen?",
"Remote share" : "Entfernte Freigabe",
"Remote share password" : "Passwort für die entfernte Freigabe",
"Cancel" : "Abbrechen",
"Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-Adresse",
"Shared by" : "Geteilt von",
+ "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder Ordner wurde von <strong>einem anderen Server</strong> geteilt",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei oder Ordner wurde <strong>heruntergeladen</strong>",
+ "You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten",
+ "%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
+ "%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
+ "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Sie entfernt",
+ "Public shared folder %1$s was downloaded" : "Der öffentlich geteilte Ordner %1$s wurde heruntergeladen",
+ "Public shared file %1$s was downloaded" : "Die öffentlich geteilte Datei %1$s wurde heruntergeladen",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
"Password" : "Passwort",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
"Name" : "Name",
"Share time" : "Zeitpunkt der Freigabe",
"Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Zu Ihrer ownCloud hinzufügen",
"Download" : "Herunterladen",
"Download %s" : "Download %s",
- "Direct link" : "Direkte Verlinkung"
+ "Direct link" : "Direkte Verlinkung",
+ "Server-to-Server Sharing" : "Server-zu-Server Datenaustausch",
+ "Allow users on this server to send shares to other servers" : "Nutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
+ "Allow users on this server to receive shares from other servers" : "Nutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index a693524d6c1..78859f87706 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -6,20 +6,32 @@
"Shared with you" : "Mit Ihnen geteilt",
"Shared with others" : "Von Ihnen geteilt",
"Shared by link" : "Geteilt über einen Link",
- "No files have been shared with you yet." : "Es wurden bis jetzt keine Dateien mit Ihnen geteilt.",
- "You haven't shared any files yet." : "Sie haben bis jetzt keine Dateien mit anderen geteilt.",
- "You haven't shared any files by link yet." : "Sie haben bis jetzt keine Dateien über einen Link mit anderen geteilt.",
+ "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Ihnen geteilt",
+ "Files and folders others share with you will show up here" : "Mit Ihnen geteilte Dateien und Ordner anderer werden hier erscheinen",
+ "Nothing shared yet" : "Noch nichts geteilt",
+ "Files and folders you share will show up here" : "Dateien und Ordner, die Sie teilen, werden hier erscheinen",
+ "No shared links" : "Keine geteilten Links",
+ "Files and folders you share by link will show up here" : "Dateien und Ordner, die Sie per Link teilen, werden hier erscheinen",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchten Sie die entfernte Freigabe {name} von {owner}@{remote} hinzufügen?",
"Remote share" : "Entfernte Freigabe",
"Remote share password" : "Passwort für die entfernte Freigabe",
"Cancel" : "Abbrechen",
"Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation found at {remote}" : "Keine OwnCloud-Installation auf {remote} gefunden",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
"Invalid ownCloud url" : "Ungültige OwnCloud-Adresse",
"Shared by" : "Geteilt von",
+ "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder Ordner wurde von <strong>einem anderen Server</strong> geteilt",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei oder Ordner wurde <strong>heruntergeladen</strong>",
+ "You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten",
+ "%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
+ "%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
+ "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Sie entfernt",
+ "Public shared folder %1$s was downloaded" : "Der öffentlich geteilte Ordner %1$s wurde heruntergeladen",
+ "Public shared file %1$s was downloaded" : "Die öffentlich geteilte Datei %1$s wurde heruntergeladen",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
"Password" : "Passwort",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
"Name" : "Name",
"Share time" : "Zeitpunkt der Freigabe",
"Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Zu Ihrer ownCloud hinzufügen",
"Download" : "Herunterladen",
"Download %s" : "Download %s",
- "Direct link" : "Direkte Verlinkung"
+ "Direct link" : "Direkte Verlinkung",
+ "Server-to-Server Sharing" : "Server-zu-Server Datenaustausch",
+ "Allow users on this server to send shares to other servers" : "Nutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
+ "Allow users on this server to receive shares from other servers" : "Nutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js
index e80d74b376c..a11b1f7a00f 100644
--- a/apps/files_sharing/l10n/el.js
+++ b/apps/files_sharing/l10n/el.js
@@ -8,15 +8,13 @@ OC.L10N.register(
"Shared with you" : "Διαμοιρασμένο με εσάς",
"Shared with others" : "Διαμοιρασμένο με άλλους",
"Shared by link" : "Διαμοιρασμένο μέσω συνδέσμου",
- "No files have been shared with you yet." : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.",
- "You haven't shared any files yet." : "Δεν έχετε διαμοιραστεί κανένα αρχείο ακόμα.",
- "You haven't shared any files by link yet." : "Δεν έχετε διαμοιραστεί κανένα αρχείο μέσω συνδέσμου ακόμα.",
+ "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής",
+ "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Θέλετε να προσθέσουμε τον απομακρυσμένο κοινόχρηστο φάκελο {name} από {owner}@{remote}?",
"Remote share" : "Απομακρυσμένος κοινόχρηστος φάκελος",
"Remote share password" : "Κωδικός πρόσβασης απομακρυσμένου κοινόχρηστου φακέλου",
"Cancel" : "Άκυρο",
"Add remote share" : "Προσθήκη απομακρυσμένου κοινόχρηστου φακέλου",
- "No ownCloud installation found at {remote}" : "Δεν βρέθηκε εγκατεστημένο ownCloud στο {remote}",
"Invalid ownCloud url" : "Άκυρη url ownCloud ",
"Shared by" : "Διαμοιράστηκε από",
"This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό",
@@ -33,6 +31,8 @@ OC.L10N.register(
"Add to your ownCloud" : "Προσθήκη στο ownCloud σου",
"Download" : "Λήψη",
"Download %s" : "Λήψη %s",
- "Direct link" : "Άμεσος σύνδεσμος"
+ "Direct link" : "Άμεσος σύνδεσμος",
+ "Server-to-Server Sharing" : "Διαμοιρασμός διακομιστής προς διακομιστή",
+ "Allow users on this server to receive shares from other servers" : "Να επιτρέπεται στους χρίστες του διακομιστή να λαμβάνουν διαμοιρασμένα αρχεία από άλλους διακομιστές"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json
index affe333420f..70b6d1d5ce7 100644
--- a/apps/files_sharing/l10n/el.json
+++ b/apps/files_sharing/l10n/el.json
@@ -6,15 +6,13 @@
"Shared with you" : "Διαμοιρασμένο με εσάς",
"Shared with others" : "Διαμοιρασμένο με άλλους",
"Shared by link" : "Διαμοιρασμένο μέσω συνδέσμου",
- "No files have been shared with you yet." : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.",
- "You haven't shared any files yet." : "Δεν έχετε διαμοιραστεί κανένα αρχείο ακόμα.",
- "You haven't shared any files by link yet." : "Δεν έχετε διαμοιραστεί κανένα αρχείο μέσω συνδέσμου ακόμα.",
+ "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής",
+ "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Θέλετε να προσθέσουμε τον απομακρυσμένο κοινόχρηστο φάκελο {name} από {owner}@{remote}?",
"Remote share" : "Απομακρυσμένος κοινόχρηστος φάκελος",
"Remote share password" : "Κωδικός πρόσβασης απομακρυσμένου κοινόχρηστου φακέλου",
"Cancel" : "Άκυρο",
"Add remote share" : "Προσθήκη απομακρυσμένου κοινόχρηστου φακέλου",
- "No ownCloud installation found at {remote}" : "Δεν βρέθηκε εγκατεστημένο ownCloud στο {remote}",
"Invalid ownCloud url" : "Άκυρη url ownCloud ",
"Shared by" : "Διαμοιράστηκε από",
"This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό",
@@ -31,6 +29,8 @@
"Add to your ownCloud" : "Προσθήκη στο ownCloud σου",
"Download" : "Λήψη",
"Download %s" : "Λήψη %s",
- "Direct link" : "Άμεσος σύνδεσμος"
+ "Direct link" : "Άμεσος σύνδεσμος",
+ "Server-to-Server Sharing" : "Διαμοιρασμός διακομιστής προς διακομιστή",
+ "Allow users on this server to receive shares from other servers" : "Να επιτρέπεται στους χρίστες του διακομιστή να λαμβάνουν διαμοιρασμένα αρχεία από άλλους διακομιστές"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js
index 0a86e564210..78bf0940a54 100644
--- a/apps/files_sharing/l10n/en_GB.js
+++ b/apps/files_sharing/l10n/en_GB.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Shared with you",
"Shared with others" : "Shared with others",
"Shared by link" : "Shared by link",
- "No files have been shared with you yet." : "No files have been shared with you yet.",
- "You haven't shared any files yet." : "You haven't shared any files yet.",
- "You haven't shared any files by link yet." : "You haven't shared any files by link yet.",
+ "Nothing shared with you yet" : "Nothing shared with you yet",
+ "Files and folders others share with you will show up here" : "Files and folders others share with you will show up here",
+ "Nothing shared yet" : "Nothing shared yet",
+ "Files and folders you share will show up here" : "Files and folders you share will show up here",
+ "No shared links" : "No shared links",
+ "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Do you want to add the remote share {name} from {owner}@{remote}?",
"Remote share" : "Remote share",
"Remote share password" : "Remote share password",
"Cancel" : "Cancel",
"Add remote share" : "Add remote share",
- "No ownCloud installation found at {remote}" : "No ownCloud installation found at {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "No ownCloud installation (7 or higher) found at {remote}",
"Invalid ownCloud url" : "Invalid ownCloud URL",
"Shared by" : "Shared by",
+ "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "A public shared file or folder was <strong>downloaded</strong>",
+ "You received a new remote share from %s" : "You received a new remote share from %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepted remote share %2$s",
+ "%1$s declined remote share %2$s" : "%1$s declined remote share %2$s",
+ "%1$s unshared %2$s from you" : "%1$s unshared %2$s from you",
+ "Public shared folder %1$s was downloaded" : "Public shared folder %1$s was downloaded",
+ "Public shared file %1$s was downloaded" : "Public shared file %1$s was downloaded",
"This share is password-protected" : "This share is password-protected",
"The password is wrong. Try again." : "The password is wrong. Try again.",
"Password" : "Password",
+ "No entries found in this folder" : "No entries found in this folder",
"Name" : "Name",
"Share time" : "Share time",
"Sorry, this link doesn’t seem to work anymore." : "Sorry, this link doesn’t seem to work anymore.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Add to your ownCloud",
"Download" : "Download",
"Download %s" : "Download %s",
- "Direct link" : "Direct link"
+ "Direct link" : "Direct link",
+ "Server-to-Server Sharing" : "Server-to-Server Sharing",
+ "Allow users on this server to send shares to other servers" : "Allow users on this server to send shares to other servers",
+ "Allow users on this server to receive shares from other servers" : "Allow users on this server to receive shares from other servers"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json
index c5445a407af..25a52e1e13b 100644
--- a/apps/files_sharing/l10n/en_GB.json
+++ b/apps/files_sharing/l10n/en_GB.json
@@ -6,20 +6,32 @@
"Shared with you" : "Shared with you",
"Shared with others" : "Shared with others",
"Shared by link" : "Shared by link",
- "No files have been shared with you yet." : "No files have been shared with you yet.",
- "You haven't shared any files yet." : "You haven't shared any files yet.",
- "You haven't shared any files by link yet." : "You haven't shared any files by link yet.",
+ "Nothing shared with you yet" : "Nothing shared with you yet",
+ "Files and folders others share with you will show up here" : "Files and folders others share with you will show up here",
+ "Nothing shared yet" : "Nothing shared yet",
+ "Files and folders you share will show up here" : "Files and folders you share will show up here",
+ "No shared links" : "No shared links",
+ "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Do you want to add the remote share {name} from {owner}@{remote}?",
"Remote share" : "Remote share",
"Remote share password" : "Remote share password",
"Cancel" : "Cancel",
"Add remote share" : "Add remote share",
- "No ownCloud installation found at {remote}" : "No ownCloud installation found at {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "No ownCloud installation (7 or higher) found at {remote}",
"Invalid ownCloud url" : "Invalid ownCloud URL",
"Shared by" : "Shared by",
+ "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "A public shared file or folder was <strong>downloaded</strong>",
+ "You received a new remote share from %s" : "You received a new remote share from %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepted remote share %2$s",
+ "%1$s declined remote share %2$s" : "%1$s declined remote share %2$s",
+ "%1$s unshared %2$s from you" : "%1$s unshared %2$s from you",
+ "Public shared folder %1$s was downloaded" : "Public shared folder %1$s was downloaded",
+ "Public shared file %1$s was downloaded" : "Public shared file %1$s was downloaded",
"This share is password-protected" : "This share is password-protected",
"The password is wrong. Try again." : "The password is wrong. Try again.",
"Password" : "Password",
+ "No entries found in this folder" : "No entries found in this folder",
"Name" : "Name",
"Share time" : "Share time",
"Sorry, this link doesn’t seem to work anymore." : "Sorry, this link doesn’t seem to work anymore.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Add to your ownCloud",
"Download" : "Download",
"Download %s" : "Download %s",
- "Direct link" : "Direct link"
+ "Direct link" : "Direct link",
+ "Server-to-Server Sharing" : "Server-to-Server Sharing",
+ "Allow users on this server to send shares to other servers" : "Allow users on this server to send shares to other servers",
+ "Allow users on this server to receive shares from other servers" : "Allow users on this server to receive shares from other servers"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/eo.js b/apps/files_sharing/l10n/eo.js
index 28e1c3acdbb..1053816107c 100644
--- a/apps/files_sharing/l10n/eo.js
+++ b/apps/files_sharing/l10n/eo.js
@@ -5,11 +5,7 @@ OC.L10N.register(
"Shared with you" : "Kunhavata kun vi",
"Shared with others" : "Kunhavata kun aliaj",
"Shared by link" : "Kunhavata per ligilo",
- "No files have been shared with you yet." : "Neniu dosiero kunhaviĝis kun vi ankoraŭ.",
- "You haven't shared any files yet." : "Vi kunhavigis neniun dosieron ankoraŭ.",
- "You haven't shared any files by link yet." : "Vi kunhavigis neniun dosieron per ligilo ankoraŭ.",
"Cancel" : "Nuligi",
- "No ownCloud installation found at {remote}" : "Ne troviĝis instalo de ownCloud ĉe {remote}",
"Invalid ownCloud url" : "Nevalidas URL de ownCloud",
"Shared by" : "Kunhavigita de",
"This share is password-protected" : "Ĉi tiu kunhavigo estas protektata per pasvorto",
diff --git a/apps/files_sharing/l10n/eo.json b/apps/files_sharing/l10n/eo.json
index 00d0d7de2aa..bfe17bdb896 100644
--- a/apps/files_sharing/l10n/eo.json
+++ b/apps/files_sharing/l10n/eo.json
@@ -3,11 +3,7 @@
"Shared with you" : "Kunhavata kun vi",
"Shared with others" : "Kunhavata kun aliaj",
"Shared by link" : "Kunhavata per ligilo",
- "No files have been shared with you yet." : "Neniu dosiero kunhaviĝis kun vi ankoraŭ.",
- "You haven't shared any files yet." : "Vi kunhavigis neniun dosieron ankoraŭ.",
- "You haven't shared any files by link yet." : "Vi kunhavigis neniun dosieron per ligilo ankoraŭ.",
"Cancel" : "Nuligi",
- "No ownCloud installation found at {remote}" : "Ne troviĝis instalo de ownCloud ĉe {remote}",
"Invalid ownCloud url" : "Nevalidas URL de ownCloud",
"Shared by" : "Kunhavigita de",
"This share is password-protected" : "Ĉi tiu kunhavigo estas protektata per pasvorto",
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index 79e3b6c9811..694a4198a4b 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Compartido contigo",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por medio de enlaces",
- "No files have been shared with you yet." : "Aún no han compartido contigo ningún archivo.",
- "You haven't shared any files yet." : "Aún no has compartido ningún archivo.",
- "You haven't shared any files by link yet." : "Usted todavía no ha compartido ningún archivo por medio de enlaces.",
+ "Nothing shared with you yet" : "Todavía no han compartido nada contigo",
+ "Files and folders others share with you will show up here" : "Aquí aparecerán archivos y carpetas que otros compartan contigo",
+ "Nothing shared yet" : "Aún no hay nada compartido",
+ "Files and folders you share will show up here" : "Aquí aparecerán archivos y carpetas que usted comparta con otros",
+ "No shared links" : "No hay enlaces compartidos",
+ "Files and folders you share by link will show up here" : "Aquí aparecerán archivos y carpetas que usted comparta mediante un enlace",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?",
"Remote share" : "Recurso compartido remoto",
"Remote share password" : "Contraseña del compartido remoto",
"Cancel" : "Cancelar",
"Add remote share" : "Añadir recurso compartido remoto",
- "No ownCloud installation found at {remote}" : "No se encontró una instalación de ownCloud en {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}",
"Invalid ownCloud url" : "URL de ownCloud inválido",
"Shared by" : "Compartido por",
+ "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Ha sido <strong>descargado</strong> un archivo (o carpeta) compartido públicamente",
+ "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s",
+ "%1$s accepted remote share %2$s" : "%1$s aceptó el recurso compartido remoto %2$s",
+ "%1$s declined remote share %2$s" : "%1$s ha rechazado el recurso compartido remoto %2$s",
+ "%1$s unshared %2$s from you" : "%1$s dejó de ser compartido %2$s por tí",
+ "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",
"This share is password-protected" : "Este elemento compartido esta protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
"Password" : "Contraseña",
+ "No entries found in this folder" : "No hay entradas en esta carpeta",
"Name" : "Nombre",
"Share time" : "Compartido hace",
"Sorry, this link doesn’t seem to work anymore." : "Vaya, este enlace parece que no volverá a funcionar.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Agregue su propio ownCloud",
"Download" : "Descargar",
"Download %s" : "Descargar %s",
- "Direct link" : "Enlace directo"
+ "Direct link" : "Enlace directo",
+ "Server-to-Server Sharing" : "Compartir Servidor-a-Servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir archivos de usuarios de otros servidores"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index fd552789d63..ae5c7a87cb2 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -6,20 +6,32 @@
"Shared with you" : "Compartido contigo",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por medio de enlaces",
- "No files have been shared with you yet." : "Aún no han compartido contigo ningún archivo.",
- "You haven't shared any files yet." : "Aún no has compartido ningún archivo.",
- "You haven't shared any files by link yet." : "Usted todavía no ha compartido ningún archivo por medio de enlaces.",
+ "Nothing shared with you yet" : "Todavía no han compartido nada contigo",
+ "Files and folders others share with you will show up here" : "Aquí aparecerán archivos y carpetas que otros compartan contigo",
+ "Nothing shared yet" : "Aún no hay nada compartido",
+ "Files and folders you share will show up here" : "Aquí aparecerán archivos y carpetas que usted comparta con otros",
+ "No shared links" : "No hay enlaces compartidos",
+ "Files and folders you share by link will show up here" : "Aquí aparecerán archivos y carpetas que usted comparta mediante un enlace",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?",
"Remote share" : "Recurso compartido remoto",
"Remote share password" : "Contraseña del compartido remoto",
"Cancel" : "Cancelar",
"Add remote share" : "Añadir recurso compartido remoto",
- "No ownCloud installation found at {remote}" : "No se encontró una instalación de ownCloud en {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}",
"Invalid ownCloud url" : "URL de ownCloud inválido",
"Shared by" : "Compartido por",
+ "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Ha sido <strong>descargado</strong> un archivo (o carpeta) compartido públicamente",
+ "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s",
+ "%1$s accepted remote share %2$s" : "%1$s aceptó el recurso compartido remoto %2$s",
+ "%1$s declined remote share %2$s" : "%1$s ha rechazado el recurso compartido remoto %2$s",
+ "%1$s unshared %2$s from you" : "%1$s dejó de ser compartido %2$s por tí",
+ "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",
"This share is password-protected" : "Este elemento compartido esta protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
"Password" : "Contraseña",
+ "No entries found in this folder" : "No hay entradas en esta carpeta",
"Name" : "Nombre",
"Share time" : "Compartido hace",
"Sorry, this link doesn’t seem to work anymore." : "Vaya, este enlace parece que no volverá a funcionar.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Agregue su propio ownCloud",
"Download" : "Descargar",
"Download %s" : "Descargar %s",
- "Direct link" : "Enlace directo"
+ "Direct link" : "Enlace directo",
+ "Server-to-Server Sharing" : "Compartir Servidor-a-Servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir archivos de usuarios de otros servidores"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js
index 93ac6d01000..7200a5ca3c1 100644
--- a/apps/files_sharing/l10n/et_EE.js
+++ b/apps/files_sharing/l10n/et_EE.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Sinuga jagatud",
"Shared with others" : "Teistega jagatud",
"Shared by link" : "Jagatud lingiga",
- "No files have been shared with you yet." : "Sinuga pole veel ühtegi faili jagatud.",
- "You haven't shared any files yet." : "Sa pole jaganud veel ühtegi faili.",
- "You haven't shared any files by link yet." : "Sa pole lingiga jaganud veel ühtegi faili.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisata kaugjagamise {name} asukohast {owner}@{remote}?",
"Remote share" : "Kaugjagamine",
"Remote share password" : "Kaugjagamise parool",
"Cancel" : "Loobu",
"Add remote share" : "Lisa kaugjagamine",
- "No ownCloud installation found at {remote}" : "Ei leitud ownCloud paigaldust asukohas {remote}",
"Invalid ownCloud url" : "Vigane ownCloud url",
"Shared by" : "Jagas",
"This share is password-protected" : "See jagamine on parooliga kaitstud",
@@ -33,6 +29,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Lisa oma ownCloudi",
"Download" : "Lae alla",
"Download %s" : "Laadi alla %s",
- "Direct link" : "Otsene link"
+ "Direct link" : "Otsene link",
+ "Server-to-Server Sharing" : "Serverist-serverisse jagamine",
+ "Allow users on this server to send shares to other servers" : "Luba selle serveri kasutajatel saata faile teistesse serveritesse",
+ "Allow users on this server to receive shares from other servers" : "Luba selle serveri kasutajatel võtta vastu jagamisi teistest serveritest"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json
index d5bf52aa59d..e35ea6427a7 100644
--- a/apps/files_sharing/l10n/et_EE.json
+++ b/apps/files_sharing/l10n/et_EE.json
@@ -6,15 +6,11 @@
"Shared with you" : "Sinuga jagatud",
"Shared with others" : "Teistega jagatud",
"Shared by link" : "Jagatud lingiga",
- "No files have been shared with you yet." : "Sinuga pole veel ühtegi faili jagatud.",
- "You haven't shared any files yet." : "Sa pole jaganud veel ühtegi faili.",
- "You haven't shared any files by link yet." : "Sa pole lingiga jaganud veel ühtegi faili.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisata kaugjagamise {name} asukohast {owner}@{remote}?",
"Remote share" : "Kaugjagamine",
"Remote share password" : "Kaugjagamise parool",
"Cancel" : "Loobu",
"Add remote share" : "Lisa kaugjagamine",
- "No ownCloud installation found at {remote}" : "Ei leitud ownCloud paigaldust asukohas {remote}",
"Invalid ownCloud url" : "Vigane ownCloud url",
"Shared by" : "Jagas",
"This share is password-protected" : "See jagamine on parooliga kaitstud",
@@ -31,6 +27,9 @@
"Add to your ownCloud" : "Lisa oma ownCloudi",
"Download" : "Lae alla",
"Download %s" : "Laadi alla %s",
- "Direct link" : "Otsene link"
+ "Direct link" : "Otsene link",
+ "Server-to-Server Sharing" : "Serverist-serverisse jagamine",
+ "Allow users on this server to send shares to other servers" : "Luba selle serveri kasutajatel saata faile teistesse serveritesse",
+ "Allow users on this server to receive shares from other servers" : "Luba selle serveri kasutajatel võtta vastu jagamisi teistest serveritest"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/eu.js b/apps/files_sharing/l10n/eu.js
index 9e492649eee..ff254aa50c4 100644
--- a/apps/files_sharing/l10n/eu.js
+++ b/apps/files_sharing/l10n/eu.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Zurekin elkarbanatuta",
"Shared with others" : "Beste batzuekin elkarbanatuta",
"Shared by link" : "Lotura bidez elkarbanatuta",
- "No files have been shared with you yet." : "Ez da zurekin fitxategirik elkarbanatu oraindik.",
- "You haven't shared any files yet." : "Ez duzu oraindik fitxategirik elkarbanatu.",
- "You haven't shared any files by link yet." : "Ez duzu oraindik fitxategirik lotura bidez elkarbanatu.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Nahi duzu gehitzea {name} urrutiko partekatzea honengandik {owner}@{remote}?",
"Remote share" : "Urrutiko parte hartzea",
"Remote share password" : "Urrutiko parte hartzeen pasahitza",
"Cancel" : "Ezeztatu",
"Add remote share" : "Gehitu urrutiko parte hartzea",
- "No ownCloud installation found at {remote}" : "Ez da ownClouden instalaziorik aurkitu {remote}n",
"Invalid ownCloud url" : "ownCloud url baliogabea",
"Shared by" : "Honek elkarbanatuta",
"This share is password-protected" : "Elkarbanatutako hau pasahitzarekin babestuta dago",
diff --git a/apps/files_sharing/l10n/eu.json b/apps/files_sharing/l10n/eu.json
index 0d04b0c2f9a..62955cafaf3 100644
--- a/apps/files_sharing/l10n/eu.json
+++ b/apps/files_sharing/l10n/eu.json
@@ -6,15 +6,11 @@
"Shared with you" : "Zurekin elkarbanatuta",
"Shared with others" : "Beste batzuekin elkarbanatuta",
"Shared by link" : "Lotura bidez elkarbanatuta",
- "No files have been shared with you yet." : "Ez da zurekin fitxategirik elkarbanatu oraindik.",
- "You haven't shared any files yet." : "Ez duzu oraindik fitxategirik elkarbanatu.",
- "You haven't shared any files by link yet." : "Ez duzu oraindik fitxategirik lotura bidez elkarbanatu.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Nahi duzu gehitzea {name} urrutiko partekatzea honengandik {owner}@{remote}?",
"Remote share" : "Urrutiko parte hartzea",
"Remote share password" : "Urrutiko parte hartzeen pasahitza",
"Cancel" : "Ezeztatu",
"Add remote share" : "Gehitu urrutiko parte hartzea",
- "No ownCloud installation found at {remote}" : "Ez da ownClouden instalaziorik aurkitu {remote}n",
"Invalid ownCloud url" : "ownCloud url baliogabea",
"Shared by" : "Honek elkarbanatuta",
"This share is password-protected" : "Elkarbanatutako hau pasahitzarekin babestuta dago",
diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js
index 3c78846ed44..86dc4d5468d 100644
--- a/apps/files_sharing/l10n/fa.js
+++ b/apps/files_sharing/l10n/fa.js
@@ -7,15 +7,11 @@ OC.L10N.register(
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
- "No files have been shared with you yet." : "هنوز هیچ فایلی با شما به اشتراک گذاشته نشده است.",
- "You haven't shared any files yet." : "شما هنوز هیچ فایلی را به اشتراک نگذاشته اید.",
- "You haven't shared any files by link yet." : "شما هنوز هیچ فایلی را از طریق پیوند با کسی به اشتراک نگذاشته اید.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "آیا مایل به افزودن اشتراک از راه دور {name} از {owner}@{remote} هستید.",
"Remote share" : "اشتراک از راه دور",
"Remote share password" : "رمز عبور اشتراک از راه دور",
"Cancel" : "منصرف شدن",
"Add remote share" : "افزودن اشتراک از راه دور",
- "No ownCloud installation found at {remote}" : "نمونه ای از ownCloud نصب شده در {remote} یافت نشد",
"Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است",
"Shared by" : "اشتراک گذاشته شده به وسیله",
"This share is password-protected" : "این اشتراک توسط رمز عبور محافظت می شود",
diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json
index 8e5fd724927..921c9a4bb28 100644
--- a/apps/files_sharing/l10n/fa.json
+++ b/apps/files_sharing/l10n/fa.json
@@ -5,15 +5,11 @@
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
- "No files have been shared with you yet." : "هنوز هیچ فایلی با شما به اشتراک گذاشته نشده است.",
- "You haven't shared any files yet." : "شما هنوز هیچ فایلی را به اشتراک نگذاشته اید.",
- "You haven't shared any files by link yet." : "شما هنوز هیچ فایلی را از طریق پیوند با کسی به اشتراک نگذاشته اید.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "آیا مایل به افزودن اشتراک از راه دور {name} از {owner}@{remote} هستید.",
"Remote share" : "اشتراک از راه دور",
"Remote share password" : "رمز عبور اشتراک از راه دور",
"Cancel" : "منصرف شدن",
"Add remote share" : "افزودن اشتراک از راه دور",
- "No ownCloud installation found at {remote}" : "نمونه ای از ownCloud نصب شده در {remote} یافت نشد",
"Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است",
"Shared by" : "اشتراک گذاشته شده به وسیله",
"This share is password-protected" : "این اشتراک توسط رمز عبور محافظت می شود",
diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js
new file mode 100644
index 00000000000..1f1bf5377b3
--- /dev/null
+++ b/apps/files_sharing/l10n/fi.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Cancel" : "Peruuta",
+ "Password" : "Salasana"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json
new file mode 100644
index 00000000000..a80ddde0fed
--- /dev/null
+++ b/apps/files_sharing/l10n/fi.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "Cancel" : "Peruuta",
+ "Password" : "Salasana"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js
index c4713c2be3f..398a81dba7c 100644
--- a/apps/files_sharing/l10n/fi_FI.js
+++ b/apps/files_sharing/l10n/fi_FI.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Jaettu kanssasi",
"Shared with others" : "Jaettu muiden kanssa",
"Shared by link" : "Jaettu linkin kautta",
- "No files have been shared with you yet." : "Kukaan ei ole jakanut tiedostoja kanssasi vielä.",
- "You haven't shared any files yet." : "Et ole jakanut yhtäkään tiedostoa vielä.",
- "You haven't shared any files by link yet." : "Et ole vielä jakanut yhtäkään tiedostoa linkin kautta.",
+ "Nothing shared with you yet" : "Kanssasi ei ole vielä jaettu mitään",
+ "Files and folders others share with you will show up here" : "Kanssasi jaetut tiedostot ja kansiot näkyvät täällä",
+ "Nothing shared yet" : "Ei mitään jaettua",
+ "Files and folders you share will show up here" : "Jakamasi tiedostot ja kansiot näkyvät täällä",
+ "No shared links" : "Ei jaettuja linkkejä",
+ "Files and folders you share by link will show up here" : "Linkin kautta jakamasi tiedostot ja kansiot näkyvät täällä",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Haluatko lisätä etäjaon {name} kohteesta {owner}@{remote}?",
"Remote share" : "Etäjako",
"Remote share password" : "Etäjaon salasana",
"Cancel" : "Peru",
"Add remote share" : "Lisää etäjako",
- "No ownCloud installation found at {remote}" : "ownCloud-asennusta ei löytynyt kohteesta {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "ownCloud-asennusta (versiota 7 tai uudempaa) ei löytynyt osoitteesta {remote}",
"Invalid ownCloud url" : "Virheellinen ownCloud-osoite",
"Shared by" : "Jakanut",
+ "A file or folder was shared from <strong>another server</strong>" : "Tiedosto tai kansio jaettiin <strong>toiselta palvelimelta</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Julkisesti jaettu tiedosto tai kansio <strong>ladattiin</strong>",
+ "You received a new remote share from %s" : "Vastaanotit uuden etäjaon käyttäjältä %s",
+ "%1$s accepted remote share %2$s" : "%1$s hyväksyi etäjaon %2$s",
+ "%1$s declined remote share %2$s" : "%1$s kieltäytyi etäjaosta %2$s",
+ "%1$s unshared %2$s from you" : "%1$s lopetti kohteen %2$s jakamisen kanssasi",
+ "Public shared folder %1$s was downloaded" : "Julkisesti jaettu kansio %1$s ladattiin",
+ "Public shared file %1$s was downloaded" : "Julkisesti jaettu tiedosto %1$s ladattiin",
"This share is password-protected" : "Tämä jako on suojattu salasanalla",
"The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.",
"Password" : "Salasana",
+ "No entries found in this folder" : "Ei kohteita tässä kansiossa",
"Name" : "Nimi",
"Share time" : "Jakamisen ajankohta",
"Sorry, this link doesn’t seem to work anymore." : "Valitettavasti linkki ei vaikuta enää toimivan.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Lisää ownCloudiisi",
"Download" : "Lataa",
"Download %s" : "Lataa %s",
- "Direct link" : "Suora linkki"
+ "Direct link" : "Suora linkki",
+ "Server-to-Server Sharing" : "Palvelimelta palvelimelle -jakaminen",
+ "Allow users on this server to send shares to other servers" : "Salli tämän palvelimen käyttäjien lähettää jakoja muille palvelimille",
+ "Allow users on this server to receive shares from other servers" : "Salli tämän palvelimen käyttäjien vastaanottaa jakoja muilta palvelimilta"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json
index ec29c214b45..73d6cd4c9c4 100644
--- a/apps/files_sharing/l10n/fi_FI.json
+++ b/apps/files_sharing/l10n/fi_FI.json
@@ -6,20 +6,32 @@
"Shared with you" : "Jaettu kanssasi",
"Shared with others" : "Jaettu muiden kanssa",
"Shared by link" : "Jaettu linkin kautta",
- "No files have been shared with you yet." : "Kukaan ei ole jakanut tiedostoja kanssasi vielä.",
- "You haven't shared any files yet." : "Et ole jakanut yhtäkään tiedostoa vielä.",
- "You haven't shared any files by link yet." : "Et ole vielä jakanut yhtäkään tiedostoa linkin kautta.",
+ "Nothing shared with you yet" : "Kanssasi ei ole vielä jaettu mitään",
+ "Files and folders others share with you will show up here" : "Kanssasi jaetut tiedostot ja kansiot näkyvät täällä",
+ "Nothing shared yet" : "Ei mitään jaettua",
+ "Files and folders you share will show up here" : "Jakamasi tiedostot ja kansiot näkyvät täällä",
+ "No shared links" : "Ei jaettuja linkkejä",
+ "Files and folders you share by link will show up here" : "Linkin kautta jakamasi tiedostot ja kansiot näkyvät täällä",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Haluatko lisätä etäjaon {name} kohteesta {owner}@{remote}?",
"Remote share" : "Etäjako",
"Remote share password" : "Etäjaon salasana",
"Cancel" : "Peru",
"Add remote share" : "Lisää etäjako",
- "No ownCloud installation found at {remote}" : "ownCloud-asennusta ei löytynyt kohteesta {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "ownCloud-asennusta (versiota 7 tai uudempaa) ei löytynyt osoitteesta {remote}",
"Invalid ownCloud url" : "Virheellinen ownCloud-osoite",
"Shared by" : "Jakanut",
+ "A file or folder was shared from <strong>another server</strong>" : "Tiedosto tai kansio jaettiin <strong>toiselta palvelimelta</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Julkisesti jaettu tiedosto tai kansio <strong>ladattiin</strong>",
+ "You received a new remote share from %s" : "Vastaanotit uuden etäjaon käyttäjältä %s",
+ "%1$s accepted remote share %2$s" : "%1$s hyväksyi etäjaon %2$s",
+ "%1$s declined remote share %2$s" : "%1$s kieltäytyi etäjaosta %2$s",
+ "%1$s unshared %2$s from you" : "%1$s lopetti kohteen %2$s jakamisen kanssasi",
+ "Public shared folder %1$s was downloaded" : "Julkisesti jaettu kansio %1$s ladattiin",
+ "Public shared file %1$s was downloaded" : "Julkisesti jaettu tiedosto %1$s ladattiin",
"This share is password-protected" : "Tämä jako on suojattu salasanalla",
"The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.",
"Password" : "Salasana",
+ "No entries found in this folder" : "Ei kohteita tässä kansiossa",
"Name" : "Nimi",
"Share time" : "Jakamisen ajankohta",
"Sorry, this link doesn’t seem to work anymore." : "Valitettavasti linkki ei vaikuta enää toimivan.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Lisää ownCloudiisi",
"Download" : "Lataa",
"Download %s" : "Lataa %s",
- "Direct link" : "Suora linkki"
+ "Direct link" : "Suora linkki",
+ "Server-to-Server Sharing" : "Palvelimelta palvelimelle -jakaminen",
+ "Allow users on this server to send shares to other servers" : "Salli tämän palvelimen käyttäjien lähettää jakoja muille palvelimille",
+ "Allow users on this server to receive shares from other servers" : "Salli tämän palvelimen käyttäjien vastaanottaa jakoja muilta palvelimilta"
},"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 1db7a59f3d5..f82c5d154c2 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -3,22 +3,32 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur",
"The mountpoint name contains invalid characters." : "Le nom du point de montage contient des caractères invalides.",
- "Invalid or untrusted SSL certificate" : "Certificat SSL invalide ou non-fiable",
- "Couldn't add remote share" : "Impossible d'ajouter un partage distant",
+ "Invalid or untrusted SSL certificate" : "Certificat SSL non valable ou non fiable",
+ "Couldn't add remote share" : "Impossible d'ajouter le partage distant",
"Shared with you" : "Partagés avec vous",
"Shared with others" : "Partagés avec d'autres",
"Shared by link" : "Partagés par lien",
- "No files have been shared with you yet." : "Aucun fichier n'est partagé avec vous pour l'instant.",
- "You haven't shared any files yet." : "Vous ne partagez pas de fichier pour l'instant.",
- "You haven't shared any files by link yet." : "Vous ne partagez pas de fichier par lien pour l'instant.",
+ "Nothing shared with you yet" : "Aucun fichier n'est partagé avec vous pour l'instant",
+ "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici",
+ "Nothing shared yet" : "Rien n'est partagé pour l'instant",
+ "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagerez apparaîtront ici",
+ "No shared links" : "Aucun lien partagé",
+ "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagerez par lien apparaîtront ici",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Voulez-vous ajouter le partage distant {name} de {owner}@{remote} ?",
"Remote share" : "Partage distant",
"Remote share password" : "Mot de passe du partage distant",
"Cancel" : "Annuler",
"Add remote share" : "Ajouter un partage distant",
- "No ownCloud installation found at {remote}" : "Aucune installation ownCloud n'a été trouvée sur {remote}",
"Invalid ownCloud url" : "URL ownCloud invalide",
"Shared by" : "Partagé par",
+ "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>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé a été <strong>téléchargé</strong>",
+ "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s",
+ "%1$s accepted remote share %2$s" : "%1$s a accepté le partage distant %2$s",
+ "%1$s declined remote share %2$s" : "%1$s a refusé le partage distant %2$s",
+ "%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é",
"This share is password-protected" : "Ce partage est protégé par un mot de passe",
"The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.",
"Password" : "Mot de passe",
@@ -33,6 +43,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Ajouter à votre ownCloud",
"Download" : "Télécharger",
"Download %s" : "Télécharger %s",
- "Direct link" : "Lien direct"
+ "Direct link" : "Lien direct",
+ "Server-to-Server Sharing" : "Partage de serveur à serveur",
+ "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
+ "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index 6981cd74937..119d436ddec 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -1,22 +1,32 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur",
"The mountpoint name contains invalid characters." : "Le nom du point de montage contient des caractères invalides.",
- "Invalid or untrusted SSL certificate" : "Certificat SSL invalide ou non-fiable",
- "Couldn't add remote share" : "Impossible d'ajouter un partage distant",
+ "Invalid or untrusted SSL certificate" : "Certificat SSL non valable ou non fiable",
+ "Couldn't add remote share" : "Impossible d'ajouter le partage distant",
"Shared with you" : "Partagés avec vous",
"Shared with others" : "Partagés avec d'autres",
"Shared by link" : "Partagés par lien",
- "No files have been shared with you yet." : "Aucun fichier n'est partagé avec vous pour l'instant.",
- "You haven't shared any files yet." : "Vous ne partagez pas de fichier pour l'instant.",
- "You haven't shared any files by link yet." : "Vous ne partagez pas de fichier par lien pour l'instant.",
+ "Nothing shared with you yet" : "Aucun fichier n'est partagé avec vous pour l'instant",
+ "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici",
+ "Nothing shared yet" : "Rien n'est partagé pour l'instant",
+ "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagerez apparaîtront ici",
+ "No shared links" : "Aucun lien partagé",
+ "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagerez par lien apparaîtront ici",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Voulez-vous ajouter le partage distant {name} de {owner}@{remote} ?",
"Remote share" : "Partage distant",
"Remote share password" : "Mot de passe du partage distant",
"Cancel" : "Annuler",
"Add remote share" : "Ajouter un partage distant",
- "No ownCloud installation found at {remote}" : "Aucune installation ownCloud n'a été trouvée sur {remote}",
"Invalid ownCloud url" : "URL ownCloud invalide",
"Shared by" : "Partagé par",
+ "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>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé a été <strong>téléchargé</strong>",
+ "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s",
+ "%1$s accepted remote share %2$s" : "%1$s a accepté le partage distant %2$s",
+ "%1$s declined remote share %2$s" : "%1$s a refusé le partage distant %2$s",
+ "%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é",
"This share is password-protected" : "Ce partage est protégé par un mot de passe",
"The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.",
"Password" : "Mot de passe",
@@ -31,6 +41,9 @@
"Add to your ownCloud" : "Ajouter à votre ownCloud",
"Download" : "Télécharger",
"Download %s" : "Télécharger %s",
- "Direct link" : "Lien direct"
+ "Direct link" : "Lien direct",
+ "Server-to-Server Sharing" : "Partage de serveur à serveur",
+ "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
+ "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js
index 45d20914ee8..642d2776135 100644
--- a/apps/files_sharing/l10n/gl.js
+++ b/apps/files_sharing/l10n/gl.js
@@ -2,25 +2,38 @@ OC.L10N.register(
"files_sharing",
{
"Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor",
+ "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres inválidos.",
"Invalid or untrusted SSL certificate" : "Certificado SSL incorrecto ou non fiábel",
"Couldn't add remote share" : "Non foi posíbel engadir a compartición remota",
"Shared with you" : "Compartido con vostede",
"Shared with others" : "Compartido con outros",
"Shared by link" : "Compartido por ligazón",
- "No files have been shared with you yet." : "Aínda non hai ficheiros compartidos con vostede.",
- "You haven't shared any files yet." : "Aínda non compartiu ningún ficheiro.",
- "You haven't shared any files by link yet." : "Aínda non compartiu ningún ficheiro por ligazón.",
+ "Nothing shared with you yet" : "Aínda non hai nada compartido con vostede.",
+ "Files and folders others share with you will show up here" : "Os ficheiros e cartafoles que outros compartan con vostede amosaranse aquí",
+ "Nothing shared yet" : "Aínda non hay nada compartido",
+ "Files and folders you share will show up here" : "Os ficheiros e cartafoles que comparta amosaranse aquí",
+ "No shared links" : "Non hai ligazóns compartidas",
+ "Files and folders you share by link will show up here" : "Os ficheiros e cartafoles que comparta por ligazón amosaranse aquí",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Quere engadir a compartición remota {name} desde {owner}@{remote}?",
"Remote share" : "Compartición remota",
"Remote share password" : "Contrasinal da compartición remota",
"Cancel" : "Cancelar",
"Add remote share" : "Engadir unha compartición remota",
- "No ownCloud installation found at {remote}" : "Non se atopou unha instalación do ownCloud en {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Non se atopa unha instalación de ownCloud (7 ou superior) en {remote}",
"Invalid ownCloud url" : "URL incorrecta do ownCloud",
"Shared by" : "Compartido por",
+ "A file or folder was shared from <strong>another server</strong>" : "Compartiuse un ficheiro ou cartafol desde <strong>outro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Foi <strong>descargado</strong> un ficheiro ou cartafol público",
+ "You received a new remote share from %s" : "Recibiu unha compartición remota de %s",
+ "%1$s accepted remote share %2$s" : "%1$s comparticións remotas aceptadas %2$s",
+ "%1$s declined remote share %2$s" : "%1$s comparticións remotas declinadas %2$s",
+ "%1$s unshared %2$s from you" : "%1$s deixou de compartir %2$s con vostede",
+ "Public shared folder %1$s was downloaded" : "Foi descargado o cartafol público %1$s",
+ "Public shared file %1$s was downloaded" : "Foi descargado o ficheiro público %1$s",
"This share is password-protected" : "Esta compartición está protexida con contrasinal",
"The password is wrong. Try again." : "O contrasinal é incorrecto. Ténteo de novo.",
"Password" : "Contrasinal",
+ "No entries found in this folder" : "Non se atoparon entradas neste cartafol",
"Name" : "Nome",
"Share time" : "Compartir o tempo",
"Sorry, this link doesn’t seem to work anymore." : "Semella que esta ligazón non funciona.",
@@ -32,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Engadir ao seu ownCloud",
"Download" : "Descargar",
"Download %s" : "Descargar %s",
- "Direct link" : "Ligazón directa"
+ "Direct link" : "Ligazón directa",
+ "Server-to-Server Sharing" : "Compartición Servidor-a-Servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir aos ususarios de este servidor enviar comparticións a outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios de este servidor recibir comparticións de outros servidores"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json
index 5ddd5b02155..6bbe011871b 100644
--- a/apps/files_sharing/l10n/gl.json
+++ b/apps/files_sharing/l10n/gl.json
@@ -1,24 +1,37 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor",
+ "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres inválidos.",
"Invalid or untrusted SSL certificate" : "Certificado SSL incorrecto ou non fiábel",
"Couldn't add remote share" : "Non foi posíbel engadir a compartición remota",
"Shared with you" : "Compartido con vostede",
"Shared with others" : "Compartido con outros",
"Shared by link" : "Compartido por ligazón",
- "No files have been shared with you yet." : "Aínda non hai ficheiros compartidos con vostede.",
- "You haven't shared any files yet." : "Aínda non compartiu ningún ficheiro.",
- "You haven't shared any files by link yet." : "Aínda non compartiu ningún ficheiro por ligazón.",
+ "Nothing shared with you yet" : "Aínda non hai nada compartido con vostede.",
+ "Files and folders others share with you will show up here" : "Os ficheiros e cartafoles que outros compartan con vostede amosaranse aquí",
+ "Nothing shared yet" : "Aínda non hay nada compartido",
+ "Files and folders you share will show up here" : "Os ficheiros e cartafoles que comparta amosaranse aquí",
+ "No shared links" : "Non hai ligazóns compartidas",
+ "Files and folders you share by link will show up here" : "Os ficheiros e cartafoles que comparta por ligazón amosaranse aquí",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Quere engadir a compartición remota {name} desde {owner}@{remote}?",
"Remote share" : "Compartición remota",
"Remote share password" : "Contrasinal da compartición remota",
"Cancel" : "Cancelar",
"Add remote share" : "Engadir unha compartición remota",
- "No ownCloud installation found at {remote}" : "Non se atopou unha instalación do ownCloud en {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Non se atopa unha instalación de ownCloud (7 ou superior) en {remote}",
"Invalid ownCloud url" : "URL incorrecta do ownCloud",
"Shared by" : "Compartido por",
+ "A file or folder was shared from <strong>another server</strong>" : "Compartiuse un ficheiro ou cartafol desde <strong>outro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Foi <strong>descargado</strong> un ficheiro ou cartafol público",
+ "You received a new remote share from %s" : "Recibiu unha compartición remota de %s",
+ "%1$s accepted remote share %2$s" : "%1$s comparticións remotas aceptadas %2$s",
+ "%1$s declined remote share %2$s" : "%1$s comparticións remotas declinadas %2$s",
+ "%1$s unshared %2$s from you" : "%1$s deixou de compartir %2$s con vostede",
+ "Public shared folder %1$s was downloaded" : "Foi descargado o cartafol público %1$s",
+ "Public shared file %1$s was downloaded" : "Foi descargado o ficheiro público %1$s",
"This share is password-protected" : "Esta compartición está protexida con contrasinal",
"The password is wrong. Try again." : "O contrasinal é incorrecto. Ténteo de novo.",
"Password" : "Contrasinal",
+ "No entries found in this folder" : "Non se atoparon entradas neste cartafol",
"Name" : "Nome",
"Share time" : "Compartir o tempo",
"Sorry, this link doesn’t seem to work anymore." : "Semella que esta ligazón non funciona.",
@@ -30,6 +43,9 @@
"Add to your ownCloud" : "Engadir ao seu ownCloud",
"Download" : "Descargar",
"Download %s" : "Descargar %s",
- "Direct link" : "Ligazón directa"
+ "Direct link" : "Ligazón directa",
+ "Server-to-Server Sharing" : "Compartición Servidor-a-Servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir aos ususarios de este servidor enviar comparticións a outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios de este servidor recibir comparticións de outros servidores"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/hr.js b/apps/files_sharing/l10n/hr.js
index 3c409ea159c..e0f17faaa59 100644
--- a/apps/files_sharing/l10n/hr.js
+++ b/apps/files_sharing/l10n/hr.js
@@ -7,15 +7,11 @@ OC.L10N.register(
"Shared with you" : "Podijeljeno s vama",
"Shared with others" : "Podijeljeno s ostalima",
"Shared by link" : "POdijeljeno putem veze",
- "No files have been shared with you yet." : "S vama dosad još nisu podijeljene nikakve datoteke.",
- "You haven't shared any files yet." : "Vi dosad još niste podijelili nikakve datoteke.",
- "You haven't shared any files by link yet." : "Vi dosad još niste putem veze podijelili nikakve datoteke.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Želite li dodati udaljeni zajednički resurs {name} od {owner}@{remote}?",
"Remote share" : "Udaljeni zajednički resurs (za raspodjelu)",
"Remote share password" : "Lozinka za udaljeni zajednički resurs",
"Cancel" : "Odustanite",
"Add remote share" : "Dodajte udaljeni zajednički resurs",
- "No ownCloud installation found at {remote}" : "Nijedna ownCloud instalacija nije nađena na {remote}",
"Invalid ownCloud url" : "Neispravan ownCloud URL",
"Shared by" : "Podijeljeno od strane",
"This share is password-protected" : "Ovaj zajednički resurs je zaštićen lozinkom",
diff --git a/apps/files_sharing/l10n/hr.json b/apps/files_sharing/l10n/hr.json
index cb37f803501..bad140eb242 100644
--- a/apps/files_sharing/l10n/hr.json
+++ b/apps/files_sharing/l10n/hr.json
@@ -5,15 +5,11 @@
"Shared with you" : "Podijeljeno s vama",
"Shared with others" : "Podijeljeno s ostalima",
"Shared by link" : "POdijeljeno putem veze",
- "No files have been shared with you yet." : "S vama dosad još nisu podijeljene nikakve datoteke.",
- "You haven't shared any files yet." : "Vi dosad još niste podijelili nikakve datoteke.",
- "You haven't shared any files by link yet." : "Vi dosad još niste putem veze podijelili nikakve datoteke.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Želite li dodati udaljeni zajednički resurs {name} od {owner}@{remote}?",
"Remote share" : "Udaljeni zajednički resurs (za raspodjelu)",
"Remote share password" : "Lozinka za udaljeni zajednički resurs",
"Cancel" : "Odustanite",
"Add remote share" : "Dodajte udaljeni zajednički resurs",
- "No ownCloud installation found at {remote}" : "Nijedna ownCloud instalacija nije nađena na {remote}",
"Invalid ownCloud url" : "Neispravan ownCloud URL",
"Shared by" : "Podijeljeno od strane",
"This share is password-protected" : "Ovaj zajednički resurs je zaštićen lozinkom",
diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js
index 9472f88a992..a48c6b71a05 100644
--- a/apps/files_sharing/l10n/hu_HU.js
+++ b/apps/files_sharing/l10n/hu_HU.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Velem osztották meg",
"Shared with others" : "Én osztottam meg másokkal",
"Shared by link" : "Linkkel osztottam meg",
- "No files have been shared with you yet." : "Még nem osztottak meg Önnel semmit.",
- "You haven't shared any files yet." : "Még nem osztott meg másokkal semmit",
- "You haven't shared any files by link yet." : "Még nem osztott meg link segítségével semmit.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Használatba kívánja venni a {name} távoli megosztást, amit a {owner}@{remote} címről kapott?",
"Remote share" : "Távoli megosztás",
"Remote share password" : "Jelszó a távoli megosztáshoz",
"Cancel" : "Mégsem",
"Add remote share" : "Távoli megosztás létrehozása",
- "No ownCloud installation found at {remote}" : "Nem található ownCloud telepítés ezen a címen {remote}",
"Invalid ownCloud url" : "Érvénytelen ownCloud webcím",
"Shared by" : "Megosztotta Önnel",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json
index 735228feaac..d700541ad28 100644
--- a/apps/files_sharing/l10n/hu_HU.json
+++ b/apps/files_sharing/l10n/hu_HU.json
@@ -6,15 +6,11 @@
"Shared with you" : "Velem osztották meg",
"Shared with others" : "Én osztottam meg másokkal",
"Shared by link" : "Linkkel osztottam meg",
- "No files have been shared with you yet." : "Még nem osztottak meg Önnel semmit.",
- "You haven't shared any files yet." : "Még nem osztott meg másokkal semmit",
- "You haven't shared any files by link yet." : "Még nem osztott meg link segítségével semmit.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Használatba kívánja venni a {name} távoli megosztást, amit a {owner}@{remote} címről kapott?",
"Remote share" : "Távoli megosztás",
"Remote share password" : "Jelszó a távoli megosztáshoz",
"Cancel" : "Mégsem",
"Add remote share" : "Távoli megosztás létrehozása",
- "No ownCloud installation found at {remote}" : "Nem található ownCloud telepítés ezen a címen {remote}",
"Invalid ownCloud url" : "Érvénytelen ownCloud webcím",
"Shared by" : "Megosztotta Önnel",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js
index bc61073311b..633195cc99f 100644
--- a/apps/files_sharing/l10n/id.js
+++ b/apps/files_sharing/l10n/id.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Dibagikan dengan Anda",
"Shared with others" : "Dibagikan dengan lainnya",
"Shared by link" : "Dibagikan dengan tautan",
- "No files have been shared with you yet." : "Tidak ada berkas yang dibagikan kepada Anda.",
- "You haven't shared any files yet." : "Anda belum berbagi berkas apapun.",
- "You haven't shared any files by link yet." : "Anda belum berbagi berkas dengan tautan satupun.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan berbagi remote {name} dari {owner}@{remote}?",
"Remote share" : "Berbagi remote",
"Remote share password" : "Sandi berbagi remote",
"Cancel" : "Batal",
"Add remote share" : "Tambah berbagi remote",
- "No ownCloud installation found at {remote}" : "Tidak ada instalasi ownCloud yang ditemukan di {remote}",
"Invalid ownCloud url" : "URL ownCloud tidak sah",
"Shared by" : "Dibagikan oleh",
"This share is password-protected" : "Berbagi ini dilindungi sandi",
diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json
index a4b0a984969..51a45a575c6 100644
--- a/apps/files_sharing/l10n/id.json
+++ b/apps/files_sharing/l10n/id.json
@@ -6,15 +6,11 @@
"Shared with you" : "Dibagikan dengan Anda",
"Shared with others" : "Dibagikan dengan lainnya",
"Shared by link" : "Dibagikan dengan tautan",
- "No files have been shared with you yet." : "Tidak ada berkas yang dibagikan kepada Anda.",
- "You haven't shared any files yet." : "Anda belum berbagi berkas apapun.",
- "You haven't shared any files by link yet." : "Anda belum berbagi berkas dengan tautan satupun.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan berbagi remote {name} dari {owner}@{remote}?",
"Remote share" : "Berbagi remote",
"Remote share password" : "Sandi berbagi remote",
"Cancel" : "Batal",
"Add remote share" : "Tambah berbagi remote",
- "No ownCloud installation found at {remote}" : "Tidak ada instalasi ownCloud yang ditemukan di {remote}",
"Invalid ownCloud url" : "URL ownCloud tidak sah",
"Shared by" : "Dibagikan oleh",
"This share is password-protected" : "Berbagi ini dilindungi sandi",
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 814e1a35f49..14ed429be85 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Condiviso con te",
"Shared with others" : "Condiviso con altri",
"Shared by link" : "Condiviso tramite collegamento",
- "No files have been shared with you yet." : "Non è stato ancora condiviso alcun file con te.",
- "You haven't shared any files yet." : "Non hai ancora condiviso alcun file.",
- "You haven't shared any files by link yet." : "Non hai ancora condiviso alcun file tramite collegamento.",
+ "Nothing shared with you yet" : "Non è stato condiviso ancora niente con te",
+ "Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui",
+ "Nothing shared yet" : "Ancora nessuna condivisione",
+ "Files and folders you share will show up here" : "I file e le cartelle che condividi saranno mostrati qui",
+ "No shared links" : "Nessun collegamento condiviso",
+ "Files and folders you share by link will show up here" : "I file e le cartelle che condividi tramite collegamento saranno mostrati qui",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Vuoi aggiungere la condivisione remota {name} da {owner}@{remote}?",
"Remote share" : "Condivisione remota",
"Remote share password" : "Password della condivisione remota",
"Cancel" : "Annulla",
"Add remote share" : "Aggiungi condivisione remota",
- "No ownCloud installation found at {remote}" : "Nessuna installazione di ownCloud trovata su {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}",
"Invalid ownCloud url" : "URL di ownCloud non valido",
"Shared by" : "Condiviso da",
+ "A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Un file condiviso pubblicamente o una cartella è stato <strong>scaricato</strong>",
+ "You received a new remote share from %s" : "Hai ricevuto una nuova condivisione remota da %s",
+ "%1$s accepted remote share %2$s" : "%1$s ha accettato la condivisione remota %2$s",
+ "%1$s declined remote share %2$s" : "%1$s ha rifiutato la condivisione remota %2$s",
+ "%1$s unshared %2$s from you" : "%1$s ha rimosso la condivisione %2$s da 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",
"This share is password-protected" : "Questa condivione è protetta da password",
"The password is wrong. Try again." : "La password è errata. Prova ancora.",
"Password" : "Password",
+ "No entries found in this folder" : "Nessuna voce trovata in questa cartella",
"Name" : "Nome",
"Share time" : "Tempo di condivisione",
"Sorry, this link doesn’t seem to work anymore." : "Spiacenti, questo collegamento sembra non essere più attivo.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Aggiungi al tuo ownCloud",
"Download" : "Scarica",
"Download %s" : "Scarica %s",
- "Direct link" : "Collegamento diretto"
+ "Direct link" : "Collegamento diretto",
+ "Server-to-Server Sharing" : "Condivisione server-a-server",
+ "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
+ "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index 4b070fe12c0..f98994a0a4b 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -6,20 +6,32 @@
"Shared with you" : "Condiviso con te",
"Shared with others" : "Condiviso con altri",
"Shared by link" : "Condiviso tramite collegamento",
- "No files have been shared with you yet." : "Non è stato ancora condiviso alcun file con te.",
- "You haven't shared any files yet." : "Non hai ancora condiviso alcun file.",
- "You haven't shared any files by link yet." : "Non hai ancora condiviso alcun file tramite collegamento.",
+ "Nothing shared with you yet" : "Non è stato condiviso ancora niente con te",
+ "Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui",
+ "Nothing shared yet" : "Ancora nessuna condivisione",
+ "Files and folders you share will show up here" : "I file e le cartelle che condividi saranno mostrati qui",
+ "No shared links" : "Nessun collegamento condiviso",
+ "Files and folders you share by link will show up here" : "I file e le cartelle che condividi tramite collegamento saranno mostrati qui",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Vuoi aggiungere la condivisione remota {name} da {owner}@{remote}?",
"Remote share" : "Condivisione remota",
"Remote share password" : "Password della condivisione remota",
"Cancel" : "Annulla",
"Add remote share" : "Aggiungi condivisione remota",
- "No ownCloud installation found at {remote}" : "Nessuna installazione di ownCloud trovata su {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}",
"Invalid ownCloud url" : "URL di ownCloud non valido",
"Shared by" : "Condiviso da",
+ "A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Un file condiviso pubblicamente o una cartella è stato <strong>scaricato</strong>",
+ "You received a new remote share from %s" : "Hai ricevuto una nuova condivisione remota da %s",
+ "%1$s accepted remote share %2$s" : "%1$s ha accettato la condivisione remota %2$s",
+ "%1$s declined remote share %2$s" : "%1$s ha rifiutato la condivisione remota %2$s",
+ "%1$s unshared %2$s from you" : "%1$s ha rimosso la condivisione %2$s da 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",
"This share is password-protected" : "Questa condivione è protetta da password",
"The password is wrong. Try again." : "La password è errata. Prova ancora.",
"Password" : "Password",
+ "No entries found in this folder" : "Nessuna voce trovata in questa cartella",
"Name" : "Nome",
"Share time" : "Tempo di condivisione",
"Sorry, this link doesn’t seem to work anymore." : "Spiacenti, questo collegamento sembra non essere più attivo.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Aggiungi al tuo ownCloud",
"Download" : "Scarica",
"Download %s" : "Scarica %s",
- "Direct link" : "Collegamento diretto"
+ "Direct link" : "Collegamento diretto",
+ "Server-to-Server Sharing" : "Condivisione server-a-server",
+ "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
+ "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index c21273c2d79..c7943c2a6d6 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -8,17 +8,21 @@ OC.L10N.register(
"Shared with you" : "他ユーザーがあなたと共有中",
"Shared with others" : "他ユーザーと共有中",
"Shared by link" : "URLリンクで共有中",
- "No files have been shared with you yet." : "他のユーザーがあなたと共有しているファイルはありません。",
- "You haven't shared any files yet." : "他のユーザーと共有しているファイルはありません。",
- "You haven't shared any files by link yet." : "URLリンクで共有しているファイルはありません。",
+ "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" : "リンクで共有したファイルやフォルダは、ここに表示されます。",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} からリモート共有 {name} を追加してもよろしいですか?",
"Remote share" : "リモート共有",
"Remote share password" : "リモート共有のパスワード",
"Cancel" : "キャンセル",
"Add remote share" : "リモート共有を追加",
- "No ownCloud installation found at {remote}" : "{remote} にはownCloudがインストールされていません",
"Invalid ownCloud url" : "無効なownCloud URL です",
"Shared by" : "共有者:",
+ "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーは <strong>他のサーバー</strong>から共有されました",
+ "You received a new remote share from %s" : "%sからリモート共有のリクエストは\n届きました。",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
"Password" : "パスワード",
@@ -33,6 +37,9 @@ OC.L10N.register(
"Add to your ownCloud" : "ownCloud に追加",
"Download" : "ダウンロード",
"Download %s" : "%s をダウンロード",
- "Direct link" : "リンク"
+ "Direct link" : "リンク",
+ "Server-to-Server Sharing" : "サーバー間共有",
+ "Allow users on this server to send shares to other servers" : "ユーザーがこのサーバーから他のサーバーに共有することを許可する",
+ "Allow users on this server to receive shares from other servers" : "ユーザーが他のサーバーからこのサーバーに共有することを許可する"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index da34e81cf66..fb12f1fb9ec 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -6,17 +6,21 @@
"Shared with you" : "他ユーザーがあなたと共有中",
"Shared with others" : "他ユーザーと共有中",
"Shared by link" : "URLリンクで共有中",
- "No files have been shared with you yet." : "他のユーザーがあなたと共有しているファイルはありません。",
- "You haven't shared any files yet." : "他のユーザーと共有しているファイルはありません。",
- "You haven't shared any files by link yet." : "URLリンクで共有しているファイルはありません。",
+ "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" : "リンクで共有したファイルやフォルダは、ここに表示されます。",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} からリモート共有 {name} を追加してもよろしいですか?",
"Remote share" : "リモート共有",
"Remote share password" : "リモート共有のパスワード",
"Cancel" : "キャンセル",
"Add remote share" : "リモート共有を追加",
- "No ownCloud installation found at {remote}" : "{remote} にはownCloudがインストールされていません",
"Invalid ownCloud url" : "無効なownCloud URL です",
"Shared by" : "共有者:",
+ "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーは <strong>他のサーバー</strong>から共有されました",
+ "You received a new remote share from %s" : "%sからリモート共有のリクエストは\n届きました。",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
"Password" : "パスワード",
@@ -31,6 +35,9 @@
"Add to your ownCloud" : "ownCloud に追加",
"Download" : "ダウンロード",
"Download %s" : "%s をダウンロード",
- "Direct link" : "リンク"
+ "Direct link" : "リンク",
+ "Server-to-Server Sharing" : "サーバー間共有",
+ "Allow users on this server to send shares to other servers" : "ユーザーがこのサーバーから他のサーバーに共有することを許可する",
+ "Allow users on this server to receive shares from other servers" : "ユーザーが他のサーバーからこのサーバーに共有することを許可する"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/kn.js b/apps/files_sharing/l10n/kn.js
new file mode 100644
index 00000000000..61a3e58aa96
--- /dev/null
+++ b/apps/files_sharing/l10n/kn.js
@@ -0,0 +1,9 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Cancel" : "ರದ್ದು",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Name" : "ಹೆಸರು",
+ "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/kn.json b/apps/files_sharing/l10n/kn.json
new file mode 100644
index 00000000000..1b16ed072cb
--- /dev/null
+++ b/apps/files_sharing/l10n/kn.json
@@ -0,0 +1,7 @@
+{ "translations": {
+ "Cancel" : "ರದ್ದು",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Name" : "ಹೆಸರು",
+ "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js
index 028c2f7ee0f..890980b2e73 100644
--- a/apps/files_sharing/l10n/mk.js
+++ b/apps/files_sharing/l10n/mk.js
@@ -4,9 +4,6 @@ OC.L10N.register(
"Shared with you" : "Споделено со тебе",
"Shared with others" : "Сподели со останатите",
"Shared by link" : "Споделено со врска",
- "No files have been shared with you yet." : "Ниту една датотека сеуште не била споделена со вас.",
- "You haven't shared any files yet." : "Вие досега немате споделено ниту една датотека.",
- "You haven't shared any files by link yet." : "Сеуште немате споделено датотека со врска.",
"Cancel" : "Откажи",
"Shared by" : "Споделено од",
"This share is password-protected" : "Ова споделување е заштитено со лозинка",
diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json
index 9e51f668eb0..3a1b748d4fc 100644
--- a/apps/files_sharing/l10n/mk.json
+++ b/apps/files_sharing/l10n/mk.json
@@ -2,9 +2,6 @@
"Shared with you" : "Споделено со тебе",
"Shared with others" : "Сподели со останатите",
"Shared by link" : "Споделено со врска",
- "No files have been shared with you yet." : "Ниту една датотека сеуште не била споделена со вас.",
- "You haven't shared any files yet." : "Вие досега немате споделено ниту една датотека.",
- "You haven't shared any files by link yet." : "Сеуште немате споделено датотека со врска.",
"Cancel" : "Откажи",
"Shared by" : "Споделено од",
"This share is password-protected" : "Ова споделување е заштитено со лозинка",
diff --git a/apps/files_sharing/l10n/mn.js b/apps/files_sharing/l10n/mn.js
new file mode 100644
index 00000000000..6769fc38ccd
--- /dev/null
+++ b/apps/files_sharing/l10n/mn.js
@@ -0,0 +1,6 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Password" : "Нууц үг"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/mn.json b/apps/files_sharing/l10n/mn.json
new file mode 100644
index 00000000000..13788221f43
--- /dev/null
+++ b/apps/files_sharing/l10n/mn.json
@@ -0,0 +1,4 @@
+{ "translations": {
+ "Password" : "Нууц үг"
+},"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 cd98a9c396d..d9b15d37460 100644
--- a/apps/files_sharing/l10n/nb_NO.js
+++ b/apps/files_sharing/l10n/nb_NO.js
@@ -8,17 +8,27 @@ OC.L10N.register(
"Shared with you" : "Delt med deg",
"Shared with others" : "Delt med andre",
"Shared by link" : "Delt med lenke",
- "No files have been shared with you yet." : "Ingen filer er delt med deg ennå.",
- "You haven't shared any files yet." : "Du har ikke delt noen filer ennå.",
- "You haven't shared any files by link yet." : "Du har ikke delt noen filer med lenke ennå.",
+ "Nothing shared with you yet" : "Ingenting er delt med deg ennå",
+ "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med deg vil bli vist her",
+ "Nothing shared yet" : "Ingenting er delt ennå",
+ "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her",
+ "No shared links" : "Ingen delte lenker",
+ "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Ønsker du å legge til ekstern deling {name} fra {owner}@{remote}?",
"Remote share" : "Ekstern deling",
"Remote share password" : "Passord for ekstern deling",
"Cancel" : "Avbryt",
"Add remote share" : "Legg til ekstern deling",
- "No ownCloud installation found at {remote}" : "Ingen ownCloud-installasjon funnet på {remote}",
"Invalid ownCloud url" : "Ugyldig ownCloud-url",
"Shared by" : "Delt av",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>",
+ "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
+ "%1$s accepted remote share %2$s" : "%1$s aksepterte ekstern deling %2$s",
+ "%1$s declined remote share %2$s" : "%1$s avviste ekstern deling %2$s",
+ "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg",
+ "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned",
+ "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned",
"This share is password-protected" : "Denne delingen er passordbeskyttet",
"The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.",
"Password" : "Passord",
@@ -33,6 +43,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Legg til i din ownCloud",
"Download" : "Last ned",
"Download %s" : "Last ned %s",
- "Direct link" : "Direkte lenke"
+ "Direct link" : "Direkte lenke",
+ "Server-to-Server Sharing" : "Server-til-server-deling",
+ "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne serveren sender delinger til andre servere",
+ "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne serveren mottar delinger fra andre servere"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nb_NO.json b/apps/files_sharing/l10n/nb_NO.json
index fe2df9e9307..ecc19f99f93 100644
--- a/apps/files_sharing/l10n/nb_NO.json
+++ b/apps/files_sharing/l10n/nb_NO.json
@@ -6,17 +6,27 @@
"Shared with you" : "Delt med deg",
"Shared with others" : "Delt med andre",
"Shared by link" : "Delt med lenke",
- "No files have been shared with you yet." : "Ingen filer er delt med deg ennå.",
- "You haven't shared any files yet." : "Du har ikke delt noen filer ennå.",
- "You haven't shared any files by link yet." : "Du har ikke delt noen filer med lenke ennå.",
+ "Nothing shared with you yet" : "Ingenting er delt med deg ennå",
+ "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med deg vil bli vist her",
+ "Nothing shared yet" : "Ingenting er delt ennå",
+ "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her",
+ "No shared links" : "Ingen delte lenker",
+ "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Ønsker du å legge til ekstern deling {name} fra {owner}@{remote}?",
"Remote share" : "Ekstern deling",
"Remote share password" : "Passord for ekstern deling",
"Cancel" : "Avbryt",
"Add remote share" : "Legg til ekstern deling",
- "No ownCloud installation found at {remote}" : "Ingen ownCloud-installasjon funnet på {remote}",
"Invalid ownCloud url" : "Ugyldig ownCloud-url",
"Shared by" : "Delt av",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>",
+ "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
+ "%1$s accepted remote share %2$s" : "%1$s aksepterte ekstern deling %2$s",
+ "%1$s declined remote share %2$s" : "%1$s avviste ekstern deling %2$s",
+ "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg",
+ "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned",
+ "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned",
"This share is password-protected" : "Denne delingen er passordbeskyttet",
"The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.",
"Password" : "Passord",
@@ -31,6 +41,9 @@
"Add to your ownCloud" : "Legg til i din ownCloud",
"Download" : "Last ned",
"Download %s" : "Last ned %s",
- "Direct link" : "Direkte lenke"
+ "Direct link" : "Direkte lenke",
+ "Server-to-Server Sharing" : "Server-til-server-deling",
+ "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne serveren sender delinger til andre servere",
+ "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne serveren mottar delinger fra andre servere"
},"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 87ddec611a8..45ddda94630 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Gedeeld met u",
"Shared with others" : "Gedeeld door u",
"Shared by link" : "Gedeeld via een link",
- "No files have been shared with you yet." : "Er zijn nog geen bestanden met u gedeeld.",
- "You haven't shared any files yet." : "U hebt nog geen bestanden gedeeld.",
- "You haven't shared any files by link yet." : "U hebt nog geen bestanden via een link gedeeld.",
+ "Nothing shared with you yet" : "Nog niets met u gedeeld",
+ "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met u delen, worden hier getoond",
+ "Nothing shared yet" : "Nog niets gedeeld",
+ "Files and folders you share will show up here" : "Bestanden en mappen die u deelt, worden hier getoond",
+ "No shared links" : "Geen gedeelde links",
+ "Files and folders you share by link will show up here" : "Bestanden en mappen die u via links deelt, worden hier getoond",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Wilt u de externe share {name} van {owner}@{remote} toevoegen?",
"Remote share" : "Externe share",
"Remote share password" : "Wachtwoord externe share",
"Cancel" : "Annuleren",
"Add remote share" : "Toevoegen externe share",
- "No ownCloud installation found at {remote}" : "Geen ownCloud installatie gevonden op {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Geen recente ownCloud installatie (7 of hoger) gevonden op {remote}",
"Invalid ownCloud url" : "Ongeldige ownCloud url",
"Shared by" : "Gedeeld door",
+ "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Een openbaar gedeeld bestand of map werd <strong>gedownloaded</strong>",
+ "You received a new remote share from %s" : "U ontving een nieuwe externe share van %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepteerde externe share %2$s",
+ "%1$s declined remote share %2$s" : "%1$s weigerde externe share %2$s",
+ "%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",
"This share is password-protected" : "Deze share is met een wachtwoord beveiligd",
"The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.",
"Password" : "Wachtwoord",
+ "No entries found in this folder" : "Niets gevonden in deze map",
"Name" : "Naam",
"Share time" : "Deel tijd",
"Sorry, this link doesn’t seem to work anymore." : "Sorry, deze link lijkt niet meer in gebruik te zijn.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Toevoegen aan uw ownCloud",
"Download" : "Downloaden",
"Download %s" : "Download %s",
- "Direct link" : "Directe link"
+ "Direct link" : "Directe link",
+ "Server-to-Server Sharing" : "Server-naar-Server delen",
+ "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers",
+ "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index 2cdbf4eb953..363a5d1ab78 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -6,20 +6,32 @@
"Shared with you" : "Gedeeld met u",
"Shared with others" : "Gedeeld door u",
"Shared by link" : "Gedeeld via een link",
- "No files have been shared with you yet." : "Er zijn nog geen bestanden met u gedeeld.",
- "You haven't shared any files yet." : "U hebt nog geen bestanden gedeeld.",
- "You haven't shared any files by link yet." : "U hebt nog geen bestanden via een link gedeeld.",
+ "Nothing shared with you yet" : "Nog niets met u gedeeld",
+ "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met u delen, worden hier getoond",
+ "Nothing shared yet" : "Nog niets gedeeld",
+ "Files and folders you share will show up here" : "Bestanden en mappen die u deelt, worden hier getoond",
+ "No shared links" : "Geen gedeelde links",
+ "Files and folders you share by link will show up here" : "Bestanden en mappen die u via links deelt, worden hier getoond",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Wilt u de externe share {name} van {owner}@{remote} toevoegen?",
"Remote share" : "Externe share",
"Remote share password" : "Wachtwoord externe share",
"Cancel" : "Annuleren",
"Add remote share" : "Toevoegen externe share",
- "No ownCloud installation found at {remote}" : "Geen ownCloud installatie gevonden op {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Geen recente ownCloud installatie (7 of hoger) gevonden op {remote}",
"Invalid ownCloud url" : "Ongeldige ownCloud url",
"Shared by" : "Gedeeld door",
+ "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Een openbaar gedeeld bestand of map werd <strong>gedownloaded</strong>",
+ "You received a new remote share from %s" : "U ontving een nieuwe externe share van %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepteerde externe share %2$s",
+ "%1$s declined remote share %2$s" : "%1$s weigerde externe share %2$s",
+ "%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",
"This share is password-protected" : "Deze share is met een wachtwoord beveiligd",
"The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.",
"Password" : "Wachtwoord",
+ "No entries found in this folder" : "Niets gevonden in deze map",
"Name" : "Naam",
"Share time" : "Deel tijd",
"Sorry, this link doesn’t seem to work anymore." : "Sorry, deze link lijkt niet meer in gebruik te zijn.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Toevoegen aan uw ownCloud",
"Download" : "Downloaden",
"Download %s" : "Download %s",
- "Direct link" : "Directe link"
+ "Direct link" : "Directe link",
+ "Server-to-Server Sharing" : "Server-naar-Server delen",
+ "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers",
+ "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers"
},"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 9fc08f64bbc..df728604f8e 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
- "No files have been shared with you yet." : "Nie ma jeszcze żadnych plików współdzielonych z Tobą",
- "You haven't shared any files yet." : "Nie współdzielisz jeszcze żadnych plików.",
- "You haven't shared any files by link yet." : "Nie współdzielisz jeszcze żadnych plików linkiem",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
"Remote share" : "Zdalny zasób",
"Remote share password" : "Hasło do zdalnego zasobu",
"Cancel" : "Anuluj",
"Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation found at {remote}" : "Nie znaleziono instalacji ownCloud na {remote}",
"Invalid ownCloud url" : "Błędny adres URL",
"Shared by" : "Udostępniane przez",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index a6c06ef01fc..1f65cc3104f 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -6,15 +6,11 @@
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
- "No files have been shared with you yet." : "Nie ma jeszcze żadnych plików współdzielonych z Tobą",
- "You haven't shared any files yet." : "Nie współdzielisz jeszcze żadnych plików.",
- "You haven't shared any files by link yet." : "Nie współdzielisz jeszcze żadnych plików linkiem",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
"Remote share" : "Zdalny zasób",
"Remote share password" : "Hasło do zdalnego zasobu",
"Cancel" : "Anuluj",
"Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation found at {remote}" : "Nie znaleziono instalacji ownCloud na {remote}",
"Invalid ownCloud url" : "Błędny adres URL",
"Shared by" : "Udostępniane przez",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index cb961362f4d..7203e3c1ecd 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -8,20 +8,32 @@ OC.L10N.register(
"Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado por link",
- "No files have been shared with you yet." : "Nenhum arquivo ainda foi compartilhado com você.",
- "You haven't shared any files yet." : "Você ainda não compartilhou nenhum arquivo.",
- "You haven't shared any files by link yet." : "Você ainda não compartilhou nenhum arquivo por link.",
+ "Nothing shared with you yet" : "Nada compartilhado com você até agora",
+ "Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você são mostrados aqui",
+ "Nothing shared yet" : "Nada compartilhado até agora",
+ "Files and folders you share will show up here" : "Arquivos e pastas que você compartilha são mostrados aqui",
+ "No shared links" : "Nenhum link compartilhado",
+ "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha com link são mostrados aqui",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Você quer adicionar o compartilhamento remoto {name} de {owner}@{remote}?",
"Remote share" : "Compartilhamento remoto",
"Remote share password" : "Senha do compartilhamento remoto",
"Cancel" : "Cancelar",
"Add remote share" : "Adicionar compartilhamento remoto",
- "No ownCloud installation found at {remote}" : "Nenhuma instalação ownCloud encontrada em {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação ownCloud (7 ou superior) foi encontrada em {remote}",
"Invalid ownCloud url" : "Url invalida para ownCloud",
"Shared by" : "Compartilhado por",
+ "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhada publicamente foi <strong>baixado</strong>",
+ "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s",
+ "%1$s accepted remote share %2$s" : "%1$s aceitou o compartilhamento remoto %2$s",
+ "%1$s declined remote share %2$s" : "%1$s declinou o compartilhamento remoto %2$s",
+ "%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",
"This share is password-protected" : "Este compartilhamento esta protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
+ "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Name" : "Nome",
"Share time" : "Tempo de compartilhamento",
"Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
@@ -33,6 +45,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Adiconar ao seu ownCloud",
"Download" : "Baixar",
"Download %s" : "Baixar %s",
- "Direct link" : "Link direto"
+ "Direct link" : "Link direto",
+ "Server-to-Server Sharing" : "Compartilhamento Servidor-a-servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir que os usuários nesse servidor recebam compartilhamentos de outros servidores"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index 3ca7602a171..8314e75d9fc 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -6,20 +6,32 @@
"Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado por link",
- "No files have been shared with you yet." : "Nenhum arquivo ainda foi compartilhado com você.",
- "You haven't shared any files yet." : "Você ainda não compartilhou nenhum arquivo.",
- "You haven't shared any files by link yet." : "Você ainda não compartilhou nenhum arquivo por link.",
+ "Nothing shared with you yet" : "Nada compartilhado com você até agora",
+ "Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você são mostrados aqui",
+ "Nothing shared yet" : "Nada compartilhado até agora",
+ "Files and folders you share will show up here" : "Arquivos e pastas que você compartilha são mostrados aqui",
+ "No shared links" : "Nenhum link compartilhado",
+ "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha com link são mostrados aqui",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Você quer adicionar o compartilhamento remoto {name} de {owner}@{remote}?",
"Remote share" : "Compartilhamento remoto",
"Remote share password" : "Senha do compartilhamento remoto",
"Cancel" : "Cancelar",
"Add remote share" : "Adicionar compartilhamento remoto",
- "No ownCloud installation found at {remote}" : "Nenhuma instalação ownCloud encontrada em {remote}",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação ownCloud (7 ou superior) foi encontrada em {remote}",
"Invalid ownCloud url" : "Url invalida para ownCloud",
"Shared by" : "Compartilhado por",
+ "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhada publicamente foi <strong>baixado</strong>",
+ "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s",
+ "%1$s accepted remote share %2$s" : "%1$s aceitou o compartilhamento remoto %2$s",
+ "%1$s declined remote share %2$s" : "%1$s declinou o compartilhamento remoto %2$s",
+ "%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",
"This share is password-protected" : "Este compartilhamento esta protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
+ "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Name" : "Nome",
"Share time" : "Tempo de compartilhamento",
"Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
@@ -31,6 +43,9 @@
"Add to your ownCloud" : "Adiconar ao seu ownCloud",
"Download" : "Baixar",
"Download %s" : "Baixar %s",
- "Direct link" : "Link direto"
+ "Direct link" : "Link direto",
+ "Server-to-Server Sharing" : "Compartilhamento Servidor-a-servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir que os usuários nesse servidor recebam compartilhamentos de outros servidores"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js
index b85bd00014c..f0f6221ce30 100644
--- a/apps/files_sharing/l10n/pt_PT.js
+++ b/apps/files_sharing/l10n/pt_PT.js
@@ -1,23 +1,19 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível",
- "The mountpoint name contains invalid characters." : "O nome de mountpoint contém caracteres inválidos.",
+ "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível neste servidor",
+ "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém carateres inválidos.",
"Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável",
- "Couldn't add remote share" : "Ocorreu um erro ao adicionar a partilha remota",
+ "Couldn't add remote share" : "Não foi possível adicionar a partilha remota",
"Shared with you" : "Partilhado consigo ",
"Shared with others" : "Partilhado com outros",
"Shared by link" : "Partilhado pela hiperligação",
- "No files have been shared with you yet." : "Ainda não partilhados quaisquer ficheuiros consigo.",
- "You haven't shared any files yet." : "Ainda não partilhou quaisquer ficheiros.",
- "You haven't shared any files by link yet." : "Ainda não partilhou quaisquer ficheiros por hiperligação.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?",
"Remote share" : "Partilha remota",
- "Remote share password" : "Password da partilha remota",
+ "Remote share password" : "Senha da partilha remota",
"Cancel" : "Cancelar",
"Add remote share" : "Adicionar partilha remota",
- "No ownCloud installation found at {remote}" : "Não foi encontrada uma instalação em {remote}",
- "Invalid ownCloud url" : "Endereço errado",
+ "Invalid ownCloud url" : "Url ownCloud inválido",
"Shared by" : "Partilhado por",
"This share is password-protected" : "Esta partilha está protegida por senha",
"The password is wrong. Try again." : "A senha está errada. Por favor, tente de novo.",
@@ -30,9 +26,12 @@ OC.L10N.register(
"the link expired" : "A hiperligação expirou",
"sharing is disabled" : "a partilha está desativada",
"For more info, please ask the person who sent this link." : "Para mais informação, por favor, pergunte à pessoa que lhe enviou esta hiperligação.",
- "Add to your ownCloud" : "Adicionar á sua ownCloud",
+ "Add to your ownCloud" : "Adicionar à sua ownCloud",
"Download" : "Transferir",
"Download %s" : "Transferir %s",
- "Direct link" : "Hiperligação direta"
+ "Direct link" : "Hiperligação direta",
+ "Server-to-Server Sharing" : "Servidor-para-Servidor de Partilha",
+ "Allow users on this server to send shares to other servers" : "Permitir utilizadores neste servidor para enviar as partilhas para outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir utilizadores neste servidor para receber as partilhas de outros servidores"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json
index 228d59d2b9c..400c24b326c 100644
--- a/apps/files_sharing/l10n/pt_PT.json
+++ b/apps/files_sharing/l10n/pt_PT.json
@@ -1,21 +1,17 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível",
- "The mountpoint name contains invalid characters." : "O nome de mountpoint contém caracteres inválidos.",
+ "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível neste servidor",
+ "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém carateres inválidos.",
"Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável",
- "Couldn't add remote share" : "Ocorreu um erro ao adicionar a partilha remota",
+ "Couldn't add remote share" : "Não foi possível adicionar a partilha remota",
"Shared with you" : "Partilhado consigo ",
"Shared with others" : "Partilhado com outros",
"Shared by link" : "Partilhado pela hiperligação",
- "No files have been shared with you yet." : "Ainda não partilhados quaisquer ficheuiros consigo.",
- "You haven't shared any files yet." : "Ainda não partilhou quaisquer ficheiros.",
- "You haven't shared any files by link yet." : "Ainda não partilhou quaisquer ficheiros por hiperligação.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?",
"Remote share" : "Partilha remota",
- "Remote share password" : "Password da partilha remota",
+ "Remote share password" : "Senha da partilha remota",
"Cancel" : "Cancelar",
"Add remote share" : "Adicionar partilha remota",
- "No ownCloud installation found at {remote}" : "Não foi encontrada uma instalação em {remote}",
- "Invalid ownCloud url" : "Endereço errado",
+ "Invalid ownCloud url" : "Url ownCloud inválido",
"Shared by" : "Partilhado por",
"This share is password-protected" : "Esta partilha está protegida por senha",
"The password is wrong. Try again." : "A senha está errada. Por favor, tente de novo.",
@@ -28,9 +24,12 @@
"the link expired" : "A hiperligação expirou",
"sharing is disabled" : "a partilha está desativada",
"For more info, please ask the person who sent this link." : "Para mais informação, por favor, pergunte à pessoa que lhe enviou esta hiperligação.",
- "Add to your ownCloud" : "Adicionar á sua ownCloud",
+ "Add to your ownCloud" : "Adicionar à sua ownCloud",
"Download" : "Transferir",
"Download %s" : "Transferir %s",
- "Direct link" : "Hiperligação direta"
+ "Direct link" : "Hiperligação direta",
+ "Server-to-Server Sharing" : "Servidor-para-Servidor de Partilha",
+ "Allow users on this server to send shares to other servers" : "Permitir utilizadores neste servidor para enviar as partilhas para outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir utilizadores neste servidor para receber as partilhas de outros servidores"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ro.js b/apps/files_sharing/l10n/ro.js
index 48957ec9fbc..69a4d263545 100644
--- a/apps/files_sharing/l10n/ro.js
+++ b/apps/files_sharing/l10n/ro.js
@@ -4,8 +4,6 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "Partajarea server-server nu este activată pe acest server",
"Shared with you" : "Partajat cu tine",
"Shared with others" : "Partajat cu alții",
- "No files have been shared with you yet." : "Nu sunt încă fișiere partajate cu tine.",
- "You haven't shared any files yet." : "Nu ai partajat încă nici un fișier.",
"Cancel" : "Anulare",
"Shared by" : "impartite in ",
"This share is password-protected" : "Această partajare este protejată cu parolă",
diff --git a/apps/files_sharing/l10n/ro.json b/apps/files_sharing/l10n/ro.json
index c0ab9e366e2..73501a9acd0 100644
--- a/apps/files_sharing/l10n/ro.json
+++ b/apps/files_sharing/l10n/ro.json
@@ -2,8 +2,6 @@
"Server to server sharing is not enabled on this server" : "Partajarea server-server nu este activată pe acest server",
"Shared with you" : "Partajat cu tine",
"Shared with others" : "Partajat cu alții",
- "No files have been shared with you yet." : "Nu sunt încă fișiere partajate cu tine.",
- "You haven't shared any files yet." : "Nu ai partajat încă nici un fișier.",
"Cancel" : "Anulare",
"Shared by" : "impartite in ",
"This share is password-protected" : "Această partajare este protejată cu parolă",
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index f6a24253590..0212726e204 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -1,38 +1,53 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общих папок",
+ "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа",
"The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.",
"Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL",
- "Couldn't add remote share" : "Невозможно добавить удалённую общую папку",
- "Shared with you" : "Доступные для Вас",
+ "Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс",
+ "Shared with you" : "Поделились с вами",
"Shared with others" : "Доступные для других",
"Shared by link" : "Доступные по ссылке",
- "No files have been shared with you yet." : "Отсутствуют доступные для вас файлы.",
- "You haven't shared any files yet." : "У вас нет общедоступных файлов",
- "You haven't shared any files by link 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" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Добавить удалённую общую папку {name} из {owner}@{remote}?",
- "Remote share" : "Удалённая общая папка",
- "Remote share password" : "Пароль для удалённой общей папки",
+ "Remote share" : "Удаленный общий ресурс",
+ "Remote share password" : "Пароль для удаленного общего ресурса",
"Cancel" : "Отменить",
- "Add remote share" : "Добавить удалённую общую папку",
- "No ownCloud installation found at {remote}" : "Не найдено ownCloud на {remote}",
+ "Add remote share" : "Добавить удалённый общий ресурс",
+ "No ownCloud installation (7 or higher) found at {remote}" : "На удаленном ресурсе {remote} не установлен ownCloud версии 7 или выше",
"Invalid ownCloud url" : "Неверный адрес ownCloud",
- "Shared by" : "Опубликовано",
- "This share is password-protected" : "Для доступа к информации необходимо ввести пароль",
+ "Shared by" : "Поделился",
+ "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Общий файл или каталог был <strong>скачан</strong>",
+ "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
+ "%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
+ "%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
+ "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ",
+ "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан",
+ "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
+ "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 item was removed" : "элемент был удалён",
"the link expired" : "срок действия ссылки истёк",
"sharing is disabled" : "общий доступ отключён",
- "For more info, please ask the person who sent this link." : "Для получения дополнительной информации, пожалуйста, свяжитесь с тем, кто отправил Вам эту ссылку.",
+ "For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.",
"Add to your ownCloud" : "Добавить в свой ownCloud",
"Download" : "Скачать",
"Download %s" : "Скачать %s",
- "Direct link" : "Прямая ссылка"
+ "Direct link" : "Прямая ссылка",
+ "Server-to-Server Sharing" : "Межсерверное предоставление доступа",
+ "Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
+ "Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 9eaf51586d4..d14ffa43101 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -1,36 +1,51 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общих папок",
+ "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа",
"The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.",
"Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL",
- "Couldn't add remote share" : "Невозможно добавить удалённую общую папку",
- "Shared with you" : "Доступные для Вас",
+ "Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс",
+ "Shared with you" : "Поделились с вами",
"Shared with others" : "Доступные для других",
"Shared by link" : "Доступные по ссылке",
- "No files have been shared with you yet." : "Отсутствуют доступные для вас файлы.",
- "You haven't shared any files yet." : "У вас нет общедоступных файлов",
- "You haven't shared any files by link 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" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Добавить удалённую общую папку {name} из {owner}@{remote}?",
- "Remote share" : "Удалённая общая папка",
- "Remote share password" : "Пароль для удалённой общей папки",
+ "Remote share" : "Удаленный общий ресурс",
+ "Remote share password" : "Пароль для удаленного общего ресурса",
"Cancel" : "Отменить",
- "Add remote share" : "Добавить удалённую общую папку",
- "No ownCloud installation found at {remote}" : "Не найдено ownCloud на {remote}",
+ "Add remote share" : "Добавить удалённый общий ресурс",
+ "No ownCloud installation (7 or higher) found at {remote}" : "На удаленном ресурсе {remote} не установлен ownCloud версии 7 или выше",
"Invalid ownCloud url" : "Неверный адрес ownCloud",
- "Shared by" : "Опубликовано",
- "This share is password-protected" : "Для доступа к информации необходимо ввести пароль",
+ "Shared by" : "Поделился",
+ "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Общий файл или каталог был <strong>скачан</strong>",
+ "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
+ "%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
+ "%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
+ "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ",
+ "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан",
+ "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
+ "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 item was removed" : "элемент был удалён",
"the link expired" : "срок действия ссылки истёк",
"sharing is disabled" : "общий доступ отключён",
- "For more info, please ask the person who sent this link." : "Для получения дополнительной информации, пожалуйста, свяжитесь с тем, кто отправил Вам эту ссылку.",
+ "For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.",
"Add to your ownCloud" : "Добавить в свой ownCloud",
"Download" : "Скачать",
"Download %s" : "Скачать %s",
- "Direct link" : "Прямая ссылка"
+ "Direct link" : "Прямая ссылка",
+ "Server-to-Server Sharing" : "Межсерверное предоставление доступа",
+ "Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
+ "Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sk.php b/apps/files_sharing/l10n/sk.php
deleted file mode 100644
index bc251c7fd59..00000000000
--- a/apps/files_sharing/l10n/sk.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Cancel" => "Zrušiť",
-"Download" => "Stiahnuť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_sharing/l10n/sk_SK.js b/apps/files_sharing/l10n/sk_SK.js
index a68ce01a721..5467f33eba1 100644
--- a/apps/files_sharing/l10n/sk_SK.js
+++ b/apps/files_sharing/l10n/sk_SK.js
@@ -7,15 +7,11 @@ OC.L10N.register(
"Shared with you" : "Zdieľané s vami",
"Shared with others" : "Zdieľané s ostanými",
"Shared by link" : "Zdieľané pomocou odkazu",
- "No files have been shared with you yet." : "Zatiaľ s vami nikto žiadne súbory nezdieľal.",
- "You haven't shared any files yet." : "Zatiaľ ste nezdieľali žiadne súbory.",
- "You haven't shared any files by link yet." : "Zatiaľ ste pomocou odkazu nezdieľali žiaden súbor.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
"Remote share" : "Vzdialené úložisko",
"Remote share password" : "Heslo k vzdialenému úložisku",
"Cancel" : "Zrušiť",
"Add remote share" : "Pridať vzdialené úložisko",
- "No ownCloud installation found at {remote}" : "Žiadna ownCloud inštancia na {remote}",
"Invalid ownCloud url" : "Chybná ownCloud url",
"Shared by" : "Zdieľa",
"This share is password-protected" : "Toto zdieľanie je chránené heslom",
diff --git a/apps/files_sharing/l10n/sk_SK.json b/apps/files_sharing/l10n/sk_SK.json
index 29470388f0f..811e9182db2 100644
--- a/apps/files_sharing/l10n/sk_SK.json
+++ b/apps/files_sharing/l10n/sk_SK.json
@@ -5,15 +5,11 @@
"Shared with you" : "Zdieľané s vami",
"Shared with others" : "Zdieľané s ostanými",
"Shared by link" : "Zdieľané pomocou odkazu",
- "No files have been shared with you yet." : "Zatiaľ s vami nikto žiadne súbory nezdieľal.",
- "You haven't shared any files yet." : "Zatiaľ ste nezdieľali žiadne súbory.",
- "You haven't shared any files by link yet." : "Zatiaľ ste pomocou odkazu nezdieľali žiaden súbor.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
"Remote share" : "Vzdialené úložisko",
"Remote share password" : "Heslo k vzdialenému úložisku",
"Cancel" : "Zrušiť",
"Add remote share" : "Pridať vzdialené úložisko",
- "No ownCloud installation found at {remote}" : "Žiadna ownCloud inštancia na {remote}",
"Invalid ownCloud url" : "Chybná ownCloud url",
"Shared by" : "Zdieľa",
"This share is password-protected" : "Toto zdieľanie je chránené heslom",
diff --git a/apps/files_sharing/l10n/sl.js b/apps/files_sharing/l10n/sl.js
index d685f6cc501..d13ecd5c14b 100644
--- a/apps/files_sharing/l10n/sl.js
+++ b/apps/files_sharing/l10n/sl.js
@@ -8,17 +8,28 @@ OC.L10N.register(
"Shared with you" : "V souporabi z vami",
"Shared with others" : "V souporabi z drugimi",
"Shared by link" : "Souporaba s povezavo",
- "No files have been shared with you yet." : "Ni datotek, ki bi jih drugi omogočili za souporabo z vami.",
- "You haven't shared any files yet." : "Ni datotek, ki bi jih omogočili za souporabo.",
- "You haven't shared any files by link yet." : "Ni datotek, ki bi jih omogočili za souporabo s povezavo.",
+ "Nothing shared with you yet" : "Datotek drugih uporabnikov še ni v souporabi",
+ "Files and folders others share with you will show up here" : "Datoteke in mape, katerih souporabo z vami dovolijo drugi, bodo izpisane na tem mestu",
+ "Nothing shared yet" : "Souporabe datotek še niste omogočili",
+ "Files and folders you share will show up here" : "Datoteke in mape, katerih souporabo z drugimi dovolite vi, bodo izpisane na tem mestu",
+ "No shared links" : "Ni povezav za souporabo",
+ "Files and folders you share by link will show up here" : "Datoteke in mape, katerih souporabo preko povezave z drugimi dovolite vi, bodo izpisane na tem mestu",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Ali želite dodati oddaljeno mesto souporabe {name} na {owner}@{remote}?",
"Remote share" : "Oddaljeno mesto za souporabo",
"Remote share password" : "Geslo za mesto za oddaljeno souporabo",
"Cancel" : "Prekliči",
"Add remote share" : "Dodaj oddaljeno mesto za souporabo",
- "No ownCloud installation found at {remote}" : "Na mestu {remote} ni namestitve ownCloud",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Na mestu {remote} ni nameščenega okolja ownCloud (različice 7 ali višje)",
"Invalid ownCloud url" : "Naveden je neveljaven naslov URL strežnika ownCloud",
"Shared by" : "V souporabi z",
+ "A file or folder was shared from <strong>another server</strong>" : "Souporaba datoteke ali mape <strong>z drugega strežnika</strong> je odobrena.",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Mapa ali datoteka v souporabi je bila <strong>prejeta</strong>.",
+ "You received a new remote share from %s" : "Prejeli ste mapo za oddaljeno souporabo z %s",
+ "%1$s accepted remote share %2$s" : "Uporabnik %1$s je prejel oddaljeno souporabo %2$s",
+ "%1$s declined remote share %2$s" : "Uporabnik %1$s je zavrnil souporabo %2$s",
+ "%1$s unshared %2$s from you" : "Uporabnik %1$s je onemogoči souporabo %2$s z vami",
+ "Public shared folder %1$s was downloaded" : "Mapa v souporabi %1$s je bila prejeta",
+ "Public shared file %1$s was downloaded" : "Datoteka v souporabi %1$s je bila prejeta",
"This share is password-protected" : "To mesto je zaščiteno z geslom.",
"The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.",
"Password" : "Geslo",
@@ -33,6 +44,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Dodaj v svoj oblak ownCloud",
"Download" : "Prejmi",
"Download %s" : "Prejmi %s",
- "Direct link" : "Neposredna povezava"
+ "Direct link" : "Neposredna povezava",
+ "Server-to-Server Sharing" : "Souporaba strežnik-na-strežnik",
+ "Allow users on this server to send shares to other servers" : "Dovoli uporabnikom tega strežnika pošiljanje map za souporabo na druge strežnike.",
+ "Allow users on this server to receive shares from other servers" : "Dovoli uporabnikom tega strežnika sprejemanje map za souporabo z drugih strežnikov."
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/files_sharing/l10n/sl.json b/apps/files_sharing/l10n/sl.json
index 0b45262f95f..124d8f3c9b8 100644
--- a/apps/files_sharing/l10n/sl.json
+++ b/apps/files_sharing/l10n/sl.json
@@ -6,17 +6,28 @@
"Shared with you" : "V souporabi z vami",
"Shared with others" : "V souporabi z drugimi",
"Shared by link" : "Souporaba s povezavo",
- "No files have been shared with you yet." : "Ni datotek, ki bi jih drugi omogočili za souporabo z vami.",
- "You haven't shared any files yet." : "Ni datotek, ki bi jih omogočili za souporabo.",
- "You haven't shared any files by link yet." : "Ni datotek, ki bi jih omogočili za souporabo s povezavo.",
+ "Nothing shared with you yet" : "Datotek drugih uporabnikov še ni v souporabi",
+ "Files and folders others share with you will show up here" : "Datoteke in mape, katerih souporabo z vami dovolijo drugi, bodo izpisane na tem mestu",
+ "Nothing shared yet" : "Souporabe datotek še niste omogočili",
+ "Files and folders you share will show up here" : "Datoteke in mape, katerih souporabo z drugimi dovolite vi, bodo izpisane na tem mestu",
+ "No shared links" : "Ni povezav za souporabo",
+ "Files and folders you share by link will show up here" : "Datoteke in mape, katerih souporabo preko povezave z drugimi dovolite vi, bodo izpisane na tem mestu",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Ali želite dodati oddaljeno mesto souporabe {name} na {owner}@{remote}?",
"Remote share" : "Oddaljeno mesto za souporabo",
"Remote share password" : "Geslo za mesto za oddaljeno souporabo",
"Cancel" : "Prekliči",
"Add remote share" : "Dodaj oddaljeno mesto za souporabo",
- "No ownCloud installation found at {remote}" : "Na mestu {remote} ni namestitve ownCloud",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Na mestu {remote} ni nameščenega okolja ownCloud (različice 7 ali višje)",
"Invalid ownCloud url" : "Naveden je neveljaven naslov URL strežnika ownCloud",
"Shared by" : "V souporabi z",
+ "A file or folder was shared from <strong>another server</strong>" : "Souporaba datoteke ali mape <strong>z drugega strežnika</strong> je odobrena.",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Mapa ali datoteka v souporabi je bila <strong>prejeta</strong>.",
+ "You received a new remote share from %s" : "Prejeli ste mapo za oddaljeno souporabo z %s",
+ "%1$s accepted remote share %2$s" : "Uporabnik %1$s je prejel oddaljeno souporabo %2$s",
+ "%1$s declined remote share %2$s" : "Uporabnik %1$s je zavrnil souporabo %2$s",
+ "%1$s unshared %2$s from you" : "Uporabnik %1$s je onemogoči souporabo %2$s z vami",
+ "Public shared folder %1$s was downloaded" : "Mapa v souporabi %1$s je bila prejeta",
+ "Public shared file %1$s was downloaded" : "Datoteka v souporabi %1$s je bila prejeta",
"This share is password-protected" : "To mesto je zaščiteno z geslom.",
"The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.",
"Password" : "Geslo",
@@ -31,6 +42,9 @@
"Add to your ownCloud" : "Dodaj v svoj oblak ownCloud",
"Download" : "Prejmi",
"Download %s" : "Prejmi %s",
- "Direct link" : "Neposredna povezava"
+ "Direct link" : "Neposredna povezava",
+ "Server-to-Server Sharing" : "Souporaba strežnik-na-strežnik",
+ "Allow users on this server to send shares to other servers" : "Dovoli uporabnikom tega strežnika pošiljanje map za souporabo na druge strežnike.",
+ "Allow users on this server to receive shares from other servers" : "Dovoli uporabnikom tega strežnika sprejemanje map za souporabo z drugih strežnikov."
},"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_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js
index ba1ecda864f..bab77a7431e 100644
--- a/apps/files_sharing/l10n/sv.js
+++ b/apps/files_sharing/l10n/sv.js
@@ -2,17 +2,33 @@ OC.L10N.register(
"files_sharing",
{
"Server to server sharing is not enabled on this server" : "Server-till-server-delning är inte aktiverat på denna server",
+ "The mountpoint name contains invalid characters." : "Monteringspunktens namn innehåller ogiltiga tecken.",
+ "Invalid or untrusted SSL certificate" : "Ogiltigt eller ej betrott SSL-certifikat",
"Couldn't add remote share" : "Kunde inte lägga till fjärrutdelning",
"Shared with you" : "Delat med dig",
"Shared with others" : "Delat med andra",
"Shared by link" : "Delad som länk",
- "No files have been shared with you yet." : "Inga filer har ännu delats med dig.",
- "You haven't shared any files yet." : "Du har inte delat några filer ännu.",
- "You haven't shared any files by link yet." : "Du har inte delat några filer som länk ännu.",
+ "Nothing shared with you yet" : "Inget delat med dig ännu",
+ "Files and folders others share with you will show up here" : "Filer och mappar andra delar med dig kommer visas här",
+ "Nothing shared yet" : "Inget delat ännu",
+ "Files and folders you share will show up here" : "Filer och mappar du delar kommer visas här",
+ "No shared links" : "Inga delade länkar",
+ "Files and folders you share by link will show up here" : "Filer och mappar du delar som länkar kommer visas här",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vill du lägga till fjärrdelning {name} från {owner}@{remote}?",
+ "Remote share" : "Fjärrdelning",
+ "Remote share password" : "Lösenord för fjärrdelning",
"Cancel" : "Avbryt",
- "No ownCloud installation found at {remote}" : "Ingen ownCloudinstallation funnen på {remote}",
+ "Add remote share" : "Lägg till fjärrdelning",
"Invalid ownCloud url" : "Felaktig ownCloud url",
"Shared by" : "Delad av",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mapp delades från <strong>en annan server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En publikt delad fil eller mapp blev <strong>nerladdad</strong>",
+ "You received a new remote share from %s" : "Du mottog en ny fjärrdelning från %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepterade fjärrdelning %2$s",
+ "%1$s declined remote share %2$s" : "%1$s nekade fjärrdelning %2$s",
+ "%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig",
+ "Public shared folder %1$s was downloaded" : "Publikt delad mapp %1$s blev nerladdad",
+ "Public shared file %1$s was downloaded" : "Publikt delad fil %1$s blev nerladdad",
"This share is password-protected" : "Den här delningen är lösenordsskyddad",
"The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
"Password" : "Lösenord",
@@ -27,6 +43,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Lägg till i din ownCloud",
"Download" : "Ladda ner",
"Download %s" : "Ladda ner %s",
- "Direct link" : "Direkt länk"
+ "Direct link" : "Direkt länk",
+ "Server-to-Server Sharing" : "Server-till-Server delning",
+ "Allow users on this server to send shares to other servers" : "Tillåt användare på denna server att skicka utdelningar till andra servrar",
+ "Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json
index fecdfd2bed8..a7334a15685 100644
--- a/apps/files_sharing/l10n/sv.json
+++ b/apps/files_sharing/l10n/sv.json
@@ -1,16 +1,32 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Server-till-server-delning är inte aktiverat på denna server",
+ "The mountpoint name contains invalid characters." : "Monteringspunktens namn innehåller ogiltiga tecken.",
+ "Invalid or untrusted SSL certificate" : "Ogiltigt eller ej betrott SSL-certifikat",
"Couldn't add remote share" : "Kunde inte lägga till fjärrutdelning",
"Shared with you" : "Delat med dig",
"Shared with others" : "Delat med andra",
"Shared by link" : "Delad som länk",
- "No files have been shared with you yet." : "Inga filer har ännu delats med dig.",
- "You haven't shared any files yet." : "Du har inte delat några filer ännu.",
- "You haven't shared any files by link yet." : "Du har inte delat några filer som länk ännu.",
+ "Nothing shared with you yet" : "Inget delat med dig ännu",
+ "Files and folders others share with you will show up here" : "Filer och mappar andra delar med dig kommer visas här",
+ "Nothing shared yet" : "Inget delat ännu",
+ "Files and folders you share will show up here" : "Filer och mappar du delar kommer visas här",
+ "No shared links" : "Inga delade länkar",
+ "Files and folders you share by link will show up here" : "Filer och mappar du delar som länkar kommer visas här",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vill du lägga till fjärrdelning {name} från {owner}@{remote}?",
+ "Remote share" : "Fjärrdelning",
+ "Remote share password" : "Lösenord för fjärrdelning",
"Cancel" : "Avbryt",
- "No ownCloud installation found at {remote}" : "Ingen ownCloudinstallation funnen på {remote}",
+ "Add remote share" : "Lägg till fjärrdelning",
"Invalid ownCloud url" : "Felaktig ownCloud url",
"Shared by" : "Delad av",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mapp delades från <strong>en annan server</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En publikt delad fil eller mapp blev <strong>nerladdad</strong>",
+ "You received a new remote share from %s" : "Du mottog en ny fjärrdelning från %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepterade fjärrdelning %2$s",
+ "%1$s declined remote share %2$s" : "%1$s nekade fjärrdelning %2$s",
+ "%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig",
+ "Public shared folder %1$s was downloaded" : "Publikt delad mapp %1$s blev nerladdad",
+ "Public shared file %1$s was downloaded" : "Publikt delad fil %1$s blev nerladdad",
"This share is password-protected" : "Den här delningen är lösenordsskyddad",
"The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
"Password" : "Lösenord",
@@ -25,6 +41,9 @@
"Add to your ownCloud" : "Lägg till i din ownCloud",
"Download" : "Ladda ner",
"Download %s" : "Ladda ner %s",
- "Direct link" : "Direkt länk"
+ "Direct link" : "Direkt länk",
+ "Server-to-Server Sharing" : "Server-till-Server delning",
+ "Allow users on this server to send shares to other servers" : "Tillåt användare på denna server att skicka utdelningar till andra servrar",
+ "Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js
index ae6217cab93..8f5b4391b70 100644
--- a/apps/files_sharing/l10n/tr.js
+++ b/apps/files_sharing/l10n/tr.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Sizinle paylaşılmış",
"Shared with others" : "Diğerleri ile paylaşılmış",
"Shared by link" : "Bağlantı ile paylaşılmış",
- "No files have been shared with you yet." : "Henüz sizinle paylaşılan bir dosya yok.",
- "You haven't shared any files yet." : "Henüz hiçbir dosya paylaşmadınız.",
- "You haven't shared any files by link yet." : "Bağlantı ile henüz hiçbir dosya paylaşmadınız.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} konumundan {name} uzak paylaşımını eklemek istiyor musunuz?",
"Remote share" : "Uzak paylaşım",
"Remote share password" : "Uzak paylaşım parolası",
"Cancel" : "İptal",
"Add remote share" : "Uzak paylaşım ekle",
- "No ownCloud installation found at {remote}" : "{remote} üzerinde ownCloud kurulumu bulunamadı",
"Invalid ownCloud url" : "Geçersiz ownCloud adresi",
"Shared by" : "Paylaşan",
"This share is password-protected" : "Bu paylaşım parola korumalı",
@@ -33,6 +29,9 @@ OC.L10N.register(
"Add to your ownCloud" : "ownCloud'ınıza Ekleyin",
"Download" : "İndir",
"Download %s" : "İndir: %s",
- "Direct link" : "Doğrudan bağlantı"
+ "Direct link" : "Doğrudan bağlantı",
+ "Server-to-Server Sharing" : "Sunucu-Sunucu Paylaşımı",
+ "Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcıların diğer sunuculara paylaşım göndermelerine izin ver",
+ "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcıların diğer sunuculardan paylaşım almalarına izin ver"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json
index 90d206ac3ed..7072e84d8c9 100644
--- a/apps/files_sharing/l10n/tr.json
+++ b/apps/files_sharing/l10n/tr.json
@@ -6,15 +6,11 @@
"Shared with you" : "Sizinle paylaşılmış",
"Shared with others" : "Diğerleri ile paylaşılmış",
"Shared by link" : "Bağlantı ile paylaşılmış",
- "No files have been shared with you yet." : "Henüz sizinle paylaşılan bir dosya yok.",
- "You haven't shared any files yet." : "Henüz hiçbir dosya paylaşmadınız.",
- "You haven't shared any files by link yet." : "Bağlantı ile henüz hiçbir dosya paylaşmadınız.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} konumundan {name} uzak paylaşımını eklemek istiyor musunuz?",
"Remote share" : "Uzak paylaşım",
"Remote share password" : "Uzak paylaşım parolası",
"Cancel" : "İptal",
"Add remote share" : "Uzak paylaşım ekle",
- "No ownCloud installation found at {remote}" : "{remote} üzerinde ownCloud kurulumu bulunamadı",
"Invalid ownCloud url" : "Geçersiz ownCloud adresi",
"Shared by" : "Paylaşan",
"This share is password-protected" : "Bu paylaşım parola korumalı",
@@ -31,6 +27,9 @@
"Add to your ownCloud" : "ownCloud'ınıza Ekleyin",
"Download" : "İndir",
"Download %s" : "İndir: %s",
- "Direct link" : "Doğrudan bağlantı"
+ "Direct link" : "Doğrudan bağlantı",
+ "Server-to-Server Sharing" : "Sunucu-Sunucu Paylaşımı",
+ "Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcıların diğer sunuculara paylaşım göndermelerine izin ver",
+ "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcıların diğer sunuculardan paylaşım almalarına izin ver"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js
index a41afdceb71..47ae87389f0 100644
--- a/apps/files_sharing/l10n/uk.js
+++ b/apps/files_sharing/l10n/uk.js
@@ -8,15 +8,11 @@ OC.L10N.register(
"Shared with you" : "Доступне для вас",
"Shared with others" : "Доступне для інших",
"Shared by link" : "Доступне за посиланням",
- "No files have been shared with you yet." : "Доступні для вас файли відсутні.",
- "You haven't shared any files yet." : "Ви не маєте загальнодоступних файлів.",
- "You haven't shared any files by link yet." : "Ви ще не відкрили доступ за посиланням для жодного з файлів.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Додати віддалену загальну теку {name} з {owner}@{remote}?",
"Remote share" : "Віддалена загальна тека",
"Remote share password" : "Пароль для віддаленої загальної теки",
"Cancel" : "Відмінити",
"Add remote share" : "Додати віддалену загальну теку",
- "No ownCloud installation found at {remote}" : "Не знайдено ownCloud на {remote}",
"Invalid ownCloud url" : "Невірний ownCloud URL",
"Shared by" : "Опубліковано",
"This share is password-protected" : "Цей ресурс обміну захищений паролем",
@@ -33,6 +29,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Додати до вашого ownCloud",
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
- "Direct link" : "Пряме посилання"
+ "Direct link" : "Пряме посилання",
+ "Server-to-Server Sharing" : "Публікація між серверами",
+ "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
+ "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json
index a8d66aae2e9..1a0bd7c7b11 100644
--- a/apps/files_sharing/l10n/uk.json
+++ b/apps/files_sharing/l10n/uk.json
@@ -6,15 +6,11 @@
"Shared with you" : "Доступне для вас",
"Shared with others" : "Доступне для інших",
"Shared by link" : "Доступне за посиланням",
- "No files have been shared with you yet." : "Доступні для вас файли відсутні.",
- "You haven't shared any files yet." : "Ви не маєте загальнодоступних файлів.",
- "You haven't shared any files by link yet." : "Ви ще не відкрили доступ за посиланням для жодного з файлів.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Додати віддалену загальну теку {name} з {owner}@{remote}?",
"Remote share" : "Віддалена загальна тека",
"Remote share password" : "Пароль для віддаленої загальної теки",
"Cancel" : "Відмінити",
"Add remote share" : "Додати віддалену загальну теку",
- "No ownCloud installation found at {remote}" : "Не знайдено ownCloud на {remote}",
"Invalid ownCloud url" : "Невірний ownCloud URL",
"Shared by" : "Опубліковано",
"This share is password-protected" : "Цей ресурс обміну захищений паролем",
@@ -31,6 +27,9 @@
"Add to your ownCloud" : "Додати до вашого ownCloud",
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
- "Direct link" : "Пряме посилання"
+ "Direct link" : "Пряме посилання",
+ "Server-to-Server Sharing" : "Публікація між серверами",
+ "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
+ "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js
index 66c400d0cf0..c97aa805ca7 100644
--- a/apps/files_sharing/l10n/zh_CN.js
+++ b/apps/files_sharing/l10n/zh_CN.js
@@ -6,15 +6,11 @@ OC.L10N.register(
"Shared with you" : "分享给您的文件",
"Shared with others" : "您分享的文件",
"Shared by link" : "分享链接的文件",
- "No files have been shared with you yet." : "目前没有文件向您分享。",
- "You haven't shared any files yet." : "您还未分享过文件。",
- "You haven't shared any files by link yet." : "您还没通过链接分享文件。",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "您要添加 {name} 来自 {owner}@{remote} 的远程分享吗?",
"Remote share" : "远程分享",
"Remote share password" : "远程分享密码",
"Cancel" : "取消",
"Add remote share" : "添加远程分享",
- "No ownCloud installation found at {remote}" : "未能在 {remote} 找到 ownCloud 服务",
"Invalid ownCloud url" : "无效的 ownCloud 网址",
"Shared by" : "共享人",
"This share is password-protected" : "这是一个密码保护的共享",
diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json
index 9169b33998b..a06835a7f1f 100644
--- a/apps/files_sharing/l10n/zh_CN.json
+++ b/apps/files_sharing/l10n/zh_CN.json
@@ -4,15 +4,11 @@
"Shared with you" : "分享给您的文件",
"Shared with others" : "您分享的文件",
"Shared by link" : "分享链接的文件",
- "No files have been shared with you yet." : "目前没有文件向您分享。",
- "You haven't shared any files yet." : "您还未分享过文件。",
- "You haven't shared any files by link yet." : "您还没通过链接分享文件。",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "您要添加 {name} 来自 {owner}@{remote} 的远程分享吗?",
"Remote share" : "远程分享",
"Remote share password" : "远程分享密码",
"Cancel" : "取消",
"Add remote share" : "添加远程分享",
- "No ownCloud installation found at {remote}" : "未能在 {remote} 找到 ownCloud 服务",
"Invalid ownCloud url" : "无效的 ownCloud 网址",
"Shared by" : "共享人",
"This share is password-protected" : "这是一个密码保护的共享",
diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js
index 9512b0ab87e..d379da10ca9 100644
--- a/apps/files_sharing/l10n/zh_TW.js
+++ b/apps/files_sharing/l10n/zh_TW.js
@@ -6,15 +6,11 @@ OC.L10N.register(
"Shared with you" : "與你分享",
"Shared with others" : "與其他人分享",
"Shared by link" : "由連結分享",
- "No files have been shared with you yet." : "目前沒有任何與你分享的檔案",
- "You haven't shared any files yet." : "你尚未分享任何檔案",
- "You haven't shared any files by link yet." : "你尚未使用連結分享任何檔案",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "是否要加入來自 {owner}@{remote} 的遠端分享 {name} ?",
"Remote share" : "遠端分享",
"Remote share password" : "遠端分享密碼",
"Cancel" : "取消",
"Add remote share" : "加入遠端分享",
- "No ownCloud installation found at {remote}" : "沒有在 {remote} 找到 ownCloud",
"Invalid ownCloud url" : "無效的 ownCloud URL",
"Shared by" : "由...分享",
"This share is password-protected" : "這個分享有密碼保護",
diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json
index 2065c00ff6d..a4fc1ae2ea2 100644
--- a/apps/files_sharing/l10n/zh_TW.json
+++ b/apps/files_sharing/l10n/zh_TW.json
@@ -4,15 +4,11 @@
"Shared with you" : "與你分享",
"Shared with others" : "與其他人分享",
"Shared by link" : "由連結分享",
- "No files have been shared with you yet." : "目前沒有任何與你分享的檔案",
- "You haven't shared any files yet." : "你尚未分享任何檔案",
- "You haven't shared any files by link yet." : "你尚未使用連結分享任何檔案",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "是否要加入來自 {owner}@{remote} 的遠端分享 {name} ?",
"Remote share" : "遠端分享",
"Remote share password" : "遠端分享密碼",
"Cancel" : "取消",
"Add remote share" : "加入遠端分享",
- "No ownCloud installation found at {remote}" : "沒有在 {remote} 找到 ownCloud",
"Invalid ownCloud url" : "無效的 ownCloud URL",
"Shared by" : "由...分享",
"This share is password-protected" : "這個分享有密碼保護",
diff --git a/apps/files_sharing/lib/activity.php b/apps/files_sharing/lib/activity.php
new file mode 100644
index 00000000000..23f548474d3
--- /dev/null
+++ b/apps/files_sharing/lib/activity.php
@@ -0,0 +1,216 @@
+<?php
+/**
+ * ownCloud - publish activities
+ *
+ * @copyright (c) 2014, ownCloud Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OCA\Files_Sharing;
+
+class Activity implements \OCP\Activity\IExtension {
+
+ const TYPE_REMOTE_SHARE = 'remote_share';
+ const TYPE_PUBLIC_LINKS = 'public_links';
+ const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received';
+ const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted';
+ const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined';
+ const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared';
+ const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded';
+ const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded';
+
+ /**
+ * The extension can return an array of additional notification types.
+ * If no additional types are to be added false is to be returned
+ *
+ * @param string $languageCode
+ * @return array|false
+ */
+ public function getNotificationTypes($languageCode) {
+ $l = \OC::$server->getL10N('files_sharing', $languageCode);
+ return array(
+ self::TYPE_REMOTE_SHARE => $l->t('A file or folder was shared from <strong>another server</strong>'),
+ self::TYPE_PUBLIC_LINKS => $l->t('A public shared file or folder was <strong>downloaded</strong>'),
+ );
+ }
+
+ /**
+ * The extension can filter the types based on the filter if required.
+ * In case no filter is to be applied false is to be returned unchanged.
+ *
+ * @param array $types
+ * @param string $filter
+ * @return array|false
+ */
+ public function filterNotificationTypes($types, $filter) {
+ return $types;
+ }
+
+ /**
+ * For a given method additional types to be displayed in the settings can be returned.
+ * In case no additional types are to be added false is to be returned.
+ *
+ * @param string $method
+ * @return array|false
+ */
+ public function getDefaultTypes($method) {
+ if ($method === 'stream') {
+ return array(self::TYPE_REMOTE_SHARE, self::TYPE_PUBLIC_LINKS);
+ }
+
+ return false;
+ }
+
+ /**
+ * The extension can translate a given message to the requested languages.
+ * If no translation is available false is to be returned.
+ *
+ * @param string $app
+ * @param string $text
+ * @param array $params
+ * @param boolean $stripPath
+ * @param boolean $highlightParams
+ * @param string $languageCode
+ * @return string|false
+ */
+ public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
+
+ $l = \OC::$server->getL10N('files_sharing', $languageCode);
+
+ if ($app === 'files_sharing') {
+ switch ($text) {
+ case self::SUBJECT_REMOTE_SHARE_RECEIVED:
+ return $l->t('You received a new remote share from %s', $params)->__toString();
+ case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
+ return $l->t('%1$s accepted remote share %2$s', $params)->__toString();
+ case self::SUBJECT_REMOTE_SHARE_DECLINED:
+ return $l->t('%1$s declined remote share %2$s', $params)->__toString();
+ case self::SUBJECT_REMOTE_SHARE_UNSHARED:
+ return $l->t('%1$s unshared %2$s from you', $params)->__toString();
+ case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
+ return $l->t('Public shared folder %1$s was downloaded', $params)->__toString();
+ case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
+ return $l->t('Public shared file %1$s was downloaded', $params)->__toString();
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * The extension can define the type of parameters for translation
+ *
+ * Currently known types are:
+ * * file => will strip away the path of the file and add a tooltip with it
+ * * username => will add the avatar of the user
+ *
+ * @param string $app
+ * @param string $text
+ * @return array|false
+ */
+ public function getSpecialParameterList($app, $text) {
+ if ($app === 'files_sharing') {
+ switch ($text) {
+ case self::SUBJECT_REMOTE_SHARE_RECEIVED:
+ return array(
+ 0 => '',// We can not use 'username' since the user is in a different ownCloud
+ );
+ case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
+ case self::SUBJECT_REMOTE_SHARE_DECLINED:
+ case self::SUBJECT_REMOTE_SHARE_UNSHARED:
+ return array(
+ 0 => '',// We can not use 'username' since the user is in a different ownCloud
+ 1 => 'file',
+ );
+ case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
+ case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
+ return array(
+ 0 => 'file',
+ );
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * A string naming the css class for the icon to be used can be returned.
+ * If no icon is known for the given type false is to be returned.
+ *
+ * @param string $type
+ * @return string|false
+ */
+ public function getTypeIcon($type) {
+ switch ($type) {
+ case self::TYPE_REMOTE_SHARE:
+ return 'icon-share';
+ case self::TYPE_PUBLIC_LINKS:
+ return 'icon-download';
+ }
+
+ return false;
+ }
+
+ /**
+ * The extension can define the parameter grouping by returning the index as integer.
+ * In case no grouping is required false is to be returned.
+ *
+ * @param array $activity
+ * @return integer|false
+ */
+ public function getGroupParameter($activity) {
+ return false;
+ }
+
+ /**
+ * The extension can define additional navigation entries. The array returned has to contain two keys 'top'
+ * and 'apps' which hold arrays with the relevant entries.
+ * If no further entries are to be added false is no be returned.
+ *
+ * @return array|false
+ */
+ public function getNavigation() {
+ return false;
+ }
+
+ /**
+ * The extension can check if a customer filter (given by a query string like filter=abc) is valid or not.
+ *
+ * @param string $filterValue
+ * @return boolean
+ */
+ public function isFilterValid($filterValue) {
+ return false;
+ }
+
+ /**
+ * For a given filter the extension can specify the sql query conditions including parameters for that query.
+ * In case the extension does not know the filter false is to be returned.
+ * The query condition and the parameters are to be returned as array with two elements.
+ * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%'));
+ *
+ * @param string $filter
+ * @return array|false
+ */
+ public function getQueryForFilter($filter) {
+ if ($filter === 'shares') {
+ return array('`app` = ? and `type` = ?', array('files_sharing', self::TYPE_REMOTE_SHARE));
+ }
+ return false;
+ }
+
+}
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 270ed704bbd..21f807f3533 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -89,16 +89,18 @@ class Shared_Cache extends Cache {
$cache = $this->getSourceCache($file);
if ($cache) {
$data = $cache->get($this->files[$file]);
- $data['displayname_owner'] = \OC_User::getDisplayName($this->storage->getSharedFrom());
- $data['path'] = $file;
- if ($file === '') {
- $data['is_share_mount_point'] = true;
- }
- $data['uid_owner'] = $this->storage->getOwner($file);
- if (isset($data['permissions'])) {
- $data['permissions'] &= $this->storage->getPermissions($file);
- } else {
- $data['permissions'] = $this->storage->getPermissions($file);
+ if ($data) {
+ $data['displayname_owner'] = \OC_User::getDisplayName($this->storage->getSharedFrom());
+ $data['path'] = $file;
+ if ($file === '') {
+ $data['is_share_mount_point'] = true;
+ }
+ $data['uid_owner'] = $this->storage->getOwner($file);
+ if (isset($data['permissions'])) {
+ $data['permissions'] &= $this->storage->getPermissions($file);
+ } else {
+ $data['permissions'] = $this->storage->getPermissions($file);
+ }
}
return $data;
}
@@ -343,6 +345,56 @@ class Shared_Cache extends Cache {
}
/**
+ * Checks whether the given file has the given tag.
+ *
+ * @param \OCP\ITags $tagger
+ * @param array $fileData file data
+ * @param string $tag tag to check for
+ * @return boolean true if the given file has the expected tag,
+ * false otherwise
+ */
+ private function hasTag($tagger, $fileData, $tag) {
+ $tags = $tagger->getTagsForObjects(array((int)$fileData['fileid']));
+ return (!empty($tags) && in_array($tag, current($tags)));
+ }
+
+ /**
+ * search for files by tag
+ *
+ * @param string|int $tag tag to search for
+ * @param string $userId owner of the tags
+ * @return array file data
+ */
+ public function searchByTag($tag, $userId) {
+ // TODO: inject this
+ $tagger = \OC::$server->getTagManager()->load('files', null, null, $userId);
+ $result = array();
+ $exploreDirs = array('');
+ // check if root is tagged
+ $file = $this->get('');
+ if ($this->hasTag($tagger, $file, $tag)) {
+ $result[] = $file;
+ }
+ // FIXME: this is so wrong and unefficient, need to replace with actual DB queries
+ while (count($exploreDirs) > 0) {
+ $dir = array_pop($exploreDirs);
+ $files = $this->getFolderContents($dir);
+ if (!$files) {
+ continue;
+ }
+ foreach ($files as $file) {
+ if ($this->hasTag($tagger, $file, $tag)) {
+ $result[] = $file;
+ }
+ if ($file['mimetype'] === 'httpd/unix-directory') {
+ $exploreDirs[] = ltrim($dir . '/' . $file['name'], '/');
+ }
+ }
+ }
+ return $result;
+ }
+
+ /**
* get the size of a folder and set it in the cache
*
* @param string $path
diff --git a/apps/files_sharing/lib/connector/publicauth.php b/apps/files_sharing/lib/connector/publicauth.php
index c9d545180b3..a630d091fd4 100644
--- a/apps/files_sharing/lib/connector/publicauth.php
+++ b/apps/files_sharing/lib/connector/publicauth.php
@@ -48,13 +48,29 @@ class PublicAuth extends \Sabre\DAV\Auth\Backend\AbstractBasic {
if (isset($linkItem['share_with'])) {
if ($linkItem['share_type'] == \OCP\Share::SHARE_TYPE_LINK) {
// Check Password
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new \PasswordHash(8, $forcePortable);
- if (!$hasher->CheckPassword($password . $this->config->getSystemValue('passwordsalt', ''), $linkItem['share_with'])) {
- return false;
- } else {
+ $newHash = '';
+ if(\OC::$server->getHasher()->verify($password, $linkItem['share_with'], $newHash)) {
+ /**
+ * FIXME: Migrate old hashes to new hash format
+ * Due to the fact that there is no reasonable functionality to update the password
+ * of an existing share no migration is yet performed there.
+ * The only possibility is to update the existing share which will result in a new
+ * share ID and is a major hack.
+ *
+ * In the future the migration should be performed once there is a proper method
+ * to update the share's password. (for example `$share->updatePassword($password)`
+ *
+ * @link https://github.com/owncloud/core/issues/10671
+ */
+ if(!empty($newHash)) {
+
+ }
return true;
+ } else {
+ return false;
}
+ } elseif ($linkItem['share_type'] == \OCP\Share::SHARE_TYPE_REMOTE) {
+ return true;
} else {
return false;
}
diff --git a/apps/files_sharing/lib/controllers/externalsharescontroller.php b/apps/files_sharing/lib/controllers/externalsharescontroller.php
new file mode 100644
index 00000000000..773ff8ce981
--- /dev/null
+++ b/apps/files_sharing/lib/controllers/externalsharescontroller.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @copyright 2014 Lukas Reschke
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Controllers;
+
+use OC;
+use OCP;
+use OCP\AppFramework\Controller;
+use OCP\IRequest;
+use OCP\AppFramework\Http\JSONResponse;
+
+/**
+ * Class ExternalSharesController
+ *
+ * @package OCA\Files_Sharing\Controllers
+ */
+class ExternalSharesController extends Controller {
+
+ /** @var bool */
+ private $incomingShareEnabled;
+ /** @var \OCA\Files_Sharing\External\Manager */
+ private $externalManager;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param \OCA\Files_Sharing\External\Manager $externalManager
+ */
+ public function __construct($appName,
+ IRequest $request,
+ $incomingShareEnabled,
+ \OCA\Files_Sharing\External\Manager $externalManager) {
+ parent::__construct($appName, $request);
+ $this->incomingShareEnabled = $incomingShareEnabled;
+ $this->externalManager = $externalManager;
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @return JSONResponse
+ */
+ public function index() {
+ $shares = [];
+ if ($this->incomingShareEnabled) {
+ $shares = $this->externalManager->getOpenShares();
+ }
+ return new JSONResponse($shares);
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @param int $id
+ * @return JSONResponse
+ */
+ public function create($id) {
+ if ($this->incomingShareEnabled) {
+ $this->externalManager->acceptShare($id);
+ }
+
+ return new JSONResponse();
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @param $id
+ * @return JSONResponse
+ */
+ public function destroy($id) {
+ if ($this->incomingShareEnabled) {
+ $this->externalManager->declineShare($id);
+ }
+
+ return new JSONResponse();
+ }
+
+}
diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php
new file mode 100644
index 00000000000..69de717611c
--- /dev/null
+++ b/apps/files_sharing/lib/controllers/sharecontroller.php
@@ -0,0 +1,282 @@
+<?php
+/**
+ * @author Clark Tomlinson <clark@owncloud.com>
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @copyright 2014 Clark Tomlinson & Lukas Reschke
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Controllers;
+
+use OC;
+use OC\Files\Filesystem;
+use OC_Files;
+use OC_Util;
+use OCP;
+use OCP\Template;
+use OCP\JSON;
+use OCP\Share;
+use OCP\AppFramework\Controller;
+use OCP\IRequest;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Http\RedirectResponse;
+use OC\URLGenerator;
+use OC\AppConfig;
+use OCP\ILogger;
+use OCA\Files_Sharing\Helper;
+use OCP\User;
+use OCP\Util;
+use OCA\Files_Sharing\Activity;
+
+/**
+ * Class ShareController
+ *
+ * @package OCA\Files_Sharing\Controllers
+ */
+class ShareController extends Controller {
+
+ /** @var \OC\User\Session */
+ protected $userSession;
+ /** @var \OC\AppConfig */
+ protected $appConfig;
+ /** @var \OCP\IConfig */
+ protected $config;
+ /** @var \OC\URLGenerator */
+ protected $urlGenerator;
+ /** @var \OC\User\Manager */
+ protected $userManager;
+ /** @var \OCP\ILogger */
+ protected $logger;
+ /** @var OCP\Activity\IManager */
+ protected $activityManager;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param OC\User\Session $userSession
+ * @param AppConfig $appConfig
+ * @param OCP\IConfig $config
+ * @param URLGenerator $urlGenerator
+ * @param OC\User\Manager $userManager
+ * @param ILogger $logger
+ * @param OCP\Activity\IManager $activityManager
+ */
+ public function __construct($appName,
+ IRequest $request,
+ OC\User\Session $userSession,
+ AppConfig $appConfig,
+ OCP\IConfig $config,
+ URLGenerator $urlGenerator,
+ OC\User\Manager $userManager,
+ ILogger $logger,
+ OCP\Activity\IManager $activityManager) {
+ parent::__construct($appName, $request);
+
+ $this->userSession = $userSession;
+ $this->appConfig = $appConfig;
+ $this->config = $config;
+ $this->urlGenerator = $urlGenerator;
+ $this->userManager = $userManager;
+ $this->logger = $logger;
+ $this->activityManager = $activityManager;
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $token
+ * @return TemplateResponse|RedirectResponse
+ */
+ public function showAuthenticate($token) {
+ $linkItem = Share::getShareByToken($token, false);
+
+ if(Helper::authenticate($linkItem)) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $token)));
+ }
+
+ return new TemplateResponse($this->appName, 'authenticate', array(), 'guest');
+ }
+
+ /**
+ * @PublicPage
+ * @UseSession
+ *
+ * Authenticates against password-protected shares
+ * @param $token
+ * @param string $password
+ * @return RedirectResponse|TemplateResponse
+ */
+ public function authenticate($token, $password = '') {
+ $linkItem = Share::getShareByToken($token, false);
+ if($linkItem === false) {
+ return new TemplateResponse('core', '404', array(), 'guest');
+ }
+
+ $authenticate = Helper::authenticate($linkItem, $password);
+
+ if($authenticate === true) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $token)));
+ }
+
+ return new TemplateResponse($this->appName, 'authenticate', array('wrongpw' => true), 'guest');
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $token
+ * @param string $path
+ * @return TemplateResponse
+ */
+ public function showShare($token, $path = '') {
+ \OC_User::setIncognitoMode(true);
+
+ // Check whether share exists
+ $linkItem = Share::getShareByToken($token, false);
+ if($linkItem === false) {
+ return new TemplateResponse('core', '404', array(), 'guest');
+ }
+
+ $linkItem = OCP\Share::getShareByToken($token, false);
+ $shareOwner = $linkItem['uid_owner'];
+ $originalSharePath = null;
+ $rootLinkItem = OCP\Share::resolveReShare($linkItem);
+ if (isset($rootLinkItem['uid_owner'])) {
+ OCP\JSON::checkUserExists($rootLinkItem['uid_owner']);
+ OC_Util::tearDownFS();
+ OC_Util::setupFS($rootLinkItem['uid_owner']);
+ $originalSharePath = Filesystem::getPath($linkItem['file_source']);
+ }
+
+ // Share is password protected - check whether the user is permitted to access the share
+ if (isset($linkItem['share_with']) && !Helper::authenticate($linkItem)) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate',
+ array('token' => $token)));
+ }
+
+ if (Filesystem::isReadable($originalSharePath . $path)) {
+ $getPath = Filesystem::normalizePath($path);
+ $originalSharePath .= $path;
+ }
+
+ $file = basename($originalSharePath);
+
+ $shareTmpl = array();
+ $shareTmpl['displayName'] = User::getDisplayName($shareOwner);
+ $shareTmpl['filename'] = $file;
+ $shareTmpl['directory_path'] = $linkItem['file_target'];
+ $shareTmpl['mimetype'] = Filesystem::getMimeType($originalSharePath);
+ $shareTmpl['dirToken'] = $linkItem['token'];
+ $shareTmpl['sharingToken'] = $token;
+ $shareTmpl['server2serversharing'] = Helper::isOutgoingServer2serverShareEnabled();
+ $shareTmpl['protected'] = isset($linkItem['share_with']) ? 'true' : 'false';
+ $shareTmpl['dir'] = '';
+ $shareTmpl['fileSize'] = \OCP\Util::humanFileSize(\OC\Files\Filesystem::filesize($originalSharePath));
+
+ // Show file list
+ if (Filesystem::is_dir($originalSharePath)) {
+ $shareTmpl['dir'] = $getPath;
+ $files = array();
+ $maxUploadFilesize = Util::maxUploadFilesize($originalSharePath);
+ $freeSpace = Util::freeSpace($originalSharePath);
+ $uploadLimit = Util::uploadLimit();
+ $folder = new Template('files', 'list', '');
+ $folder->assign('dir', $getPath);
+ $folder->assign('dirToken', $linkItem['token']);
+ $folder->assign('permissions', \OCP\Constants::PERMISSION_READ);
+ $folder->assign('isPublic', true);
+ $folder->assign('publicUploadEnabled', 'no');
+ $folder->assign('files', $files);
+ $folder->assign('uploadMaxFilesize', $maxUploadFilesize);
+ $folder->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
+ $folder->assign('freeSpace', $freeSpace);
+ $folder->assign('uploadLimit', $uploadLimit); // PHP upload limit
+ $folder->assign('usedSpacePercent', 0);
+ $folder->assign('trash', false);
+ $shareTmpl['folder'] = $folder->fetchPage();
+ }
+
+ $shareTmpl['downloadURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.downloadShare', array('token' => $token));
+
+ return new TemplateResponse($this->appName, 'public', $shareTmpl, 'base');
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $token
+ * @param string $files
+ * @param string $path
+ * @return void|RedirectResponse
+ */
+ public function downloadShare($token, $files = null, $path = '') {
+ \OC_User::setIncognitoMode(true);
+
+ $linkItem = OCP\Share::getShareByToken($token, false);
+
+ // Share is password protected - check whether the user is permitted to access the share
+ if (isset($linkItem['share_with'])) {
+ if(!Helper::authenticate($linkItem)) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate',
+ array('token' => $token)));
+ }
+ }
+
+ $originalSharePath = self::getPath($token);
+
+ if (isset($originalSharePath) && Filesystem::isReadable($originalSharePath . $path)) {
+ $originalSharePath = Filesystem::normalizePath($originalSharePath . $path);
+ $type = \OC\Files\Filesystem::is_dir($originalSharePath) ? 'folder' : 'file';
+ $args = $type === 'folder' ? array('dir' => $originalSharePath) : array('dir' => dirname($originalSharePath), 'scrollto' => basename($originalSharePath));
+ $linkToFile = \OCP\Util::linkToAbsolute('files', 'index.php', $args);
+ $subject = $type === 'folder' ? Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED : Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
+ $this->activityManager->publishActivity(
+ 'files_sharing', $subject, array($originalSharePath), '', array(), $originalSharePath,
+ $linkToFile, $linkItem['uid_owner'], Activity::TYPE_PUBLIC_LINKS, Activity::PRIORITY_MEDIUM);
+ }
+
+ if (!is_null($files)) { // download selected files
+ $files_list = json_decode($files);
+ // in case we get only a single file
+ if ($files_list === NULL) {
+ $files_list = array($files);
+ }
+
+ // FIXME: The exit is required here because otherwise the AppFramework is trying to add headers as well
+ // after dispatching the request which results in a "Cannot modify header information" notice.
+ OC_Files::get($originalSharePath, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');
+ exit();
+ } else {
+ // FIXME: The exit is required here because otherwise the AppFramework is trying to add headers as well
+ // after dispatching the request which results in a "Cannot modify header information" notice.
+ OC_Files::get(dirname($originalSharePath), basename($originalSharePath), $_SERVER['REQUEST_METHOD'] == 'HEAD');
+ exit();
+ }
+ }
+
+ /**
+ * @param $token
+ * @return null|string
+ */
+ private function getPath($token) {
+ $linkItem = Share::getShareByToken($token, false);
+ $path = null;
+ if (is_array($linkItem) && isset($linkItem['uid_owner'])) {
+ // seems to be a valid share
+ $rootLinkItem = Share::resolveReShare($linkItem);
+ if (isset($rootLinkItem['uid_owner'])) {
+ JSON::checkUserExists($rootLinkItem['uid_owner']);
+ OC_Util::tearDownFS();
+ OC_Util::setupFS($rootLinkItem['uid_owner']);
+ $path = Filesystem::getPath($linkItem['file_source']);
+ }
+ }
+ return $path;
+ }
+}
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 8176302a86a..665e47c0fe9 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -24,7 +24,7 @@ class Manager {
private $mountManager;
/**
- * @var \OC\Files\Storage\Loader
+ * @var \OC\Files\Storage\StorageFactory
*/
private $storageLoader;
@@ -34,31 +34,41 @@ class Manager {
private $userSession;
/**
+ * @var \OC\HTTPHelper
+ */
+ private $httpHelper;
+
+ /**
* @param \OCP\IDBConnection $connection
* @param \OC\Files\Mount\Manager $mountManager
* @param \OC\User\Session $userSession
- * @param \OC\Files\Storage\Loader $storageLoader
+ * @param \OC\Files\Storage\StorageFactory $storageLoader
*/
public function __construct(\OCP\IDBConnection $connection, \OC\Files\Mount\Manager $mountManager,
- \OC\Files\Storage\Loader $storageLoader, \OC\User\Session $userSession) {
+ \OC\Files\Storage\StorageFactory $storageLoader, \OC\User\Session $userSession, \OC\HTTPHelper $httpHelper) {
$this->connection = $connection;
$this->mountManager = $mountManager;
$this->userSession = $userSession;
$this->storageLoader = $storageLoader;
+ $this->httpHelper = $httpHelper;
}
- public function addShare($remote, $token, $password, $name, $owner) {
- $user = $this->userSession->getUser();
- if ($user) {
- $query = $this->connection->prepare('
+ public function addShare($remote, $token, $password, $name, $owner, $accepted=false, $user = null, $remoteId = -1) {
+
+ $user = $user ? $user: $this->userSession->getUser()->getUID();
+ $accepted = $accepted ? 1 : 0;
+
+ $mountPoint = Filesystem::normalizePath('/' . $name);
+
+ $query = $this->connection->prepare('
INSERT INTO `*PREFIX*share_external`
- (`remote`, `share_token`, `password`, `name`, `owner`, `user`, `mountpoint`, `mountpoint_hash`)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+ (`remote`, `share_token`, `password`, `name`, `owner`, `user`, `mountpoint`, `mountpoint_hash`, `accepted`, `remote_id`)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
');
- $mountPoint = Filesystem::normalizePath('/' . $name);
- $hash = md5($mountPoint);
- $query->execute(array($remote, $token, $password, $name, $owner, $user->getUID(), $mountPoint, $hash));
+ $hash = md5($mountPoint);
+ $query->execute(array($remote, $token, $password, $name, $owner, $user, $mountPoint, $hash, $accepted, $remoteId));
+ if ($accepted) {
$options = array(
'remote' => $remote,
'token' => $token,
@@ -81,9 +91,9 @@ class Manager {
$query = $this->connection->prepare('
SELECT `remote`, `share_token`, `password`, `mountpoint`, `owner`
FROM `*PREFIX*share_external`
- WHERE `user` = ?
+ WHERE `user` = ? AND `accepted` = ?
');
- $query->execute(array($user->getUID()));
+ $query->execute(array($user->getUID(), 1));
while ($row = $query->fetch()) {
$row['manager'] = $this;
@@ -93,12 +103,85 @@ class Manager {
}
}
+ /**
+ * get share
+ *
+ * @param int $id share id
+ * @return mixed share of false
+ */
+ private function getShare($id) {
+ $getShare = $this->connection->prepare('
+ SELECT `remote`, `share_token`
+ FROM `*PREFIX*share_external`
+ WHERE `id` = ? AND `user` = ?');
+ $result = $getShare->execute(array($id, $this->userSession->getUser()->getUID()));
+
+ return $result ? $getShare->fetch() : false;
+ }
+
+ /**
+ * accept server-to-server share
+ *
+ * @param int $id
+ */
+ public function acceptShare($id) {
+
+ $share = $this->getShare($id);
+
+ if ($share) {
+ $acceptShare = $this->connection->prepare('
+ UPDATE `*PREFIX*share_external`
+ SET `accepted` = ?
+ WHERE `id` = ? AND `user` = ?');
+ $acceptShare->execute(array(1, $id, $this->userSession->getUser()->getUID()));
+ $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $id, 'accept');
+ }
+ }
+
+ /**
+ * decline server-to-server share
+ *
+ * @param int $id
+ */
+ public function declineShare($id) {
+
+ $share = $this->getShare($id);
+
+ if ($share) {
+ $removeShare = $this->connection->prepare('
+ DELETE FROM `*PREFIX*share_external` WHERE `id` = ? AND `user` = ?');
+ $removeShare->execute(array($id, $this->userSession->getUser()->getUID()));
+ $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $id, 'decline');
+ }
+ }
+
+ /**
+ * inform remote server whether server-to-server share was accepted/declined
+ *
+ * @param string $remote
+ * @param string $token
+ * @param int $id
+ * @param string $feedback
+ * @return boolean
+ */
+ private function sendFeedbackToRemote($remote, $token, $id, $feedback) {
+
+ $url = $remote . \OCP\Share::BASE_PATH_TO_SHARE_API . '/' . $id . '/' . $feedback . '?format=' . \OCP\Share::RESPONSE_FORMAT;
+ $fields = array('token' => $token);
+
+ $result = $this->httpHelper->post($url, $fields);
+ $status = json_decode($result['result'], true);
+
+ return ($result['success'] && $status['ocs']['meta']['statuscode'] === 100);
+ }
+
public static function setup() {
$externalManager = new \OCA\Files_Sharing\External\Manager(
- \OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
- \OC::$server->getUserSession()
+ \OC::$server->getDatabaseConnection(),
+ \OC\Files\Filesystem::getMountManager(),
+ \OC\Files\Filesystem::getLoader(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getHTTPHelper()
);
$externalManager->setupMounts();
}
@@ -157,6 +240,18 @@ class Manager {
$user = $this->userSession->getUser();
$mountPoint = $this->stripPath($mountPoint);
$hash = md5($mountPoint);
+
+ $getShare = $this->connection->prepare('
+ SELECT `remote`, `share_token`, `remote_id`
+ FROM `*PREFIX*share_external`
+ WHERE `mountpoint_hash` = ? AND `user` = ?');
+ $result = $getShare->execute(array($hash, $user->getUID()));
+
+ if ($result) {
+ $share = $getShare->fetch();
+ $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $share['remote_id'], 'decline');
+ }
+
$query = $this->connection->prepare('
DELETE FROM `*PREFIX*share_external`
WHERE `mountpoint_hash` = ?
@@ -164,4 +259,17 @@ class Manager {
');
return (bool)$query->execute(array($hash, $user->getUID()));
}
-}
+
+ /**
+ * return a list of shares which are not yet accepted by the user
+ *
+ * @return array list of open server-to-server shares
+ */
+ public function getOpenShares() {
+ $openShares = $this->connection->prepare('SELECT * FROM `*PREFIX*share_external` WHERE `accepted` = ? AND `user` = ?');
+ $result = $openShares->execute(array(0, $this->userSession->getUser()->getUID()));
+
+ return $result ? $openShares->fetchAll() : array();
+
+ }
+} \ No newline at end of file
diff --git a/apps/files_sharing/lib/external/mount.php b/apps/files_sharing/lib/external/mount.php
index e564dded69a..6fd9882cb2a 100644
--- a/apps/files_sharing/lib/external/mount.php
+++ b/apps/files_sharing/lib/external/mount.php
@@ -8,9 +8,10 @@
namespace OCA\Files_Sharing\External;
+use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
-class Mount extends \OC\Files\Mount\Mount implements MoveableMount {
+class Mount extends MountPoint implements MoveableMount {
/**
* @var \OCA\Files_Sharing\External\Manager
@@ -22,7 +23,7 @@ class Mount extends \OC\Files\Mount\Mount implements MoveableMount {
* @param string $mountpoint
* @param array $options
* @param \OCA\Files_Sharing\External\Manager $manager
- * @param \OC\Files\Storage\Loader $loader
+ * @param \OC\Files\Storage\StorageFactory $loader
*/
public function __construct($storage, $mountpoint, $options, $manager, $loader = null) {
parent::__construct($storage, $mountpoint, $options, $loader);
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 3f1d631a35f..306a7b8db8a 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -167,6 +167,14 @@ class Storage extends DAV implements ISharedStorage {
}
}
+ public function file_exists($path) {
+ if ($path === '') {
+ return true;
+ } else {
+ return parent::file_exists($path);
+ }
+ }
+
/**
* check if the configured remote is a valid ownCloud instance
*
diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php
index e7ca4fcccd4..001d0387fa4 100644
--- a/apps/files_sharing/lib/helper.php
+++ b/apps/files_sharing/lib/helper.php
@@ -2,9 +2,6 @@
namespace OCA\Files_Sharing;
-use OC_Config;
-use PasswordHash;
-
class Helper {
public static function registerHooks() {
@@ -66,7 +63,7 @@ class Helper {
exit();
}
- if (isset($linkItem['share_with'])) {
+ if (isset($linkItem['share_with']) && (int)$linkItem['share_type'] === \OCP\Share::SHARE_TYPE_LINK) {
if (!self::authenticate($linkItem, $password)) {
\OC_Response::setStatus(403);
\OCP\JSON::error(array('success' => false));
@@ -95,18 +92,32 @@ class Helper {
*
* @return boolean true if authorized, false otherwise
*/
- public static function authenticate($linkItem, $password) {
+ public static function authenticate($linkItem, $password = null) {
if ($password !== null) {
if ($linkItem['share_type'] == \OCP\Share::SHARE_TYPE_LINK) {
// Check Password
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new PasswordHash(8, $forcePortable);
- if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''),
- $linkItem['share_with']))) {
- return false;
- } else {
+ $newHash = '';
+ if(\OC::$server->getHasher()->verify($password, $linkItem['share_with'], $newHash)) {
// Save item id in session for future requests
\OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+
+ /**
+ * FIXME: Migrate old hashes to new hash format
+ * Due to the fact that there is no reasonable functionality to update the password
+ * of an existing share no migration is yet performed there.
+ * The only possibility is to update the existing share which will result in a new
+ * share ID and is a major hack.
+ *
+ * In the future the migration should be performed once there is a proper method
+ * to update the share's password. (for example `$share->updatePassword($password)`
+ *
+ * @link https://github.com/owncloud/core/issues/10671
+ */
+ if(!empty($newHash)) {
+
+ }
+ } else {
+ return false;
}
} else {
\OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type']
@@ -243,7 +254,7 @@ class Helper {
* @return string
*/
public static function getShareFolder() {
- $shareFolder = \OCP\Config::getSystemValue('share_folder', '/');
+ $shareFolder = \OC::$server->getConfig()->getSystemValue('share_folder', '/');
return \OC\Files\Filesystem::normalizePath($shareFolder);
}
@@ -254,7 +265,7 @@ class Helper {
* @param string $shareFolder
*/
public static function setShareFolder($shareFolder) {
- \OCP\Config::setSystemValue('share_folder', $shareFolder);
+ \OC::$server->getConfig()->setSystemValue('share_folder', $shareFolder);
}
}
diff --git a/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php b/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php
new file mode 100644
index 00000000000..af79cd9e94a
--- /dev/null
+++ b/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Middleware;
+
+use OCP\AppFramework\IApi;
+use \OCP\AppFramework\Middleware;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IAppConfig;
+
+/**
+ * Checks whether the "sharing check" is enabled
+ *
+ * @package OCA\Files_Sharing\Middleware
+ */
+class SharingCheckMiddleware extends Middleware {
+
+ /** @var string */
+ protected $appName;
+ /** @var IAppConfig */
+ protected $appConfig;
+ /** @var IApi */
+ protected $api;
+
+ /***
+ * @param string $appName
+ * @param IAppConfig $appConfig
+ * @param IApi $api
+ */
+ public function __construct($appName,
+ IAppConfig $appConfig,
+ IApi $api) {
+ $this->appName = $appName;
+ $this->appConfig = $appConfig;
+ $this->api = $api;
+ }
+
+ /**
+ * Check if sharing is enabled before the controllers is executed
+ */
+ public function beforeController($controller, $methodName) {
+ if(!$this->isSharingEnabled()) {
+ throw new \Exception('Sharing is disabled.');
+ }
+ }
+
+ /**
+ * Return 404 page in case of an exception
+ * @param \OCP\AppFramework\Controller $controller
+ * @param string $methodName
+ * @param \Exception $exception
+ * @return TemplateResponse
+ */
+ public function afterException($controller, $methodName, \Exception $exception){
+ return new TemplateResponse('core', '404', array(), 'guest');
+ }
+
+ /**
+ * Check whether sharing is enabled
+ * @return bool
+ */
+ private function isSharingEnabled() {
+ // FIXME: This check is done here since the route is globally defined and not inside the files_sharing app
+ // Check whether the sharing application is enabled
+ if(!$this->api->isAppEnabled($this->appName)) {
+ return false;
+ }
+
+ // Check whether public sharing is enabled
+ if($this->appConfig->getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') {
+ return false;
+ }
+
+ return true;
+ }
+
+}
diff --git a/apps/files_sharing/lib/readonlycache.php b/apps/files_sharing/lib/readonlycache.php
index f129ca49433..6dd3b9cf61d 100644
--- a/apps/files_sharing/lib/readonlycache.php
+++ b/apps/files_sharing/lib/readonlycache.php
@@ -13,14 +13,14 @@ use OC\Files\Cache\Cache;
class ReadOnlyCache extends Cache {
public function get($path) {
$data = parent::get($path);
- $data['permissions'] &= (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE);
+ $data['permissions'] &= (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE);
return $data;
}
public function getFolderContents($path) {
$content = parent::getFolderContents($path);
foreach ($content as &$data) {
- $data['permissions'] &= (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE);
+ $data['permissions'] &= (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE);
}
return $content;
}
diff --git a/apps/files_sharing/lib/readonlywrapper.php b/apps/files_sharing/lib/readonlywrapper.php
index 45ed3fd68bb..58a5695aff8 100644
--- a/apps/files_sharing/lib/readonlywrapper.php
+++ b/apps/files_sharing/lib/readonlywrapper.php
@@ -24,7 +24,7 @@ class ReadOnlyWrapper extends Wrapper {
}
public function getPermissions($path) {
- return $this->storage->getPermissions($path) & (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE);
+ return $this->storage->getPermissions($path) & (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE);
}
public function rename($path1, $path2) {
diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php
index a5b4e75bceb..1d7eb77f7cf 100644
--- a/apps/files_sharing/lib/share/file.php
+++ b/apps/files_sharing/lib/share/file.php
@@ -160,6 +160,20 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
}
/**
+ * check if server2server share is enabled
+ *
+ * @param int $shareType
+ * @return boolean
+ */
+ public function isShareTypeAllowed($shareType) {
+ if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) {
+ return \OCA\Files_Sharing\Helper::isOutgoingServer2serverShareEnabled();
+ }
+
+ return true;
+ }
+
+ /**
* resolve reshares to return the correct source item
* @param array $source
* @return array source item
@@ -199,7 +213,9 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
if ($itemType === 'folder') {
$source = \OCP\Share::getItemSharedWith('folder', $mountPoint, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
if ($source && $target !== '') {
- $source['path'] = $source['path'].'/'.$target;
+ // note: in case of ext storage mount points the path might be empty
+ // which would cause a leading slash to appear
+ $source['path'] = ltrim($source['path'] . '/' . $target, '/');
}
} else {
$source = \OCP\Share::getItemSharedWith('file', $mountPoint, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php
index 2671f5738b7..f86e9624432 100644
--- a/apps/files_sharing/lib/share/folder.php
+++ b/apps/files_sharing/lib/share/folder.php
@@ -26,13 +26,14 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share
*
* @param int $itemSource item source ID
* @param string $shareWith with whom should the item be shared
+ * @param string $owner owner of the item
* @return array with shares
*/
- public function getParents($itemSource, $shareWith = null) {
+ public function getParents($itemSource, $shareWith = null, $owner = null) {
$result = array();
$parent = $this->getParentId($itemSource);
while ($parent) {
- $shares = \OCP\Share::getItemSharedWithUser('folder', $parent, $shareWith);
+ $shares = \OCP\Share::getItemSharedWithUser('folder', $parent, $shareWith, $owner);
if ($shares) {
foreach ($shares as $share) {
$name = substr($share['path'], strrpos($share['path'], '/') + 1);
diff --git a/apps/files_sharing/lib/sharedmount.php b/apps/files_sharing/lib/sharedmount.php
index 4ad2d4e6b3e..d16dbf89ccf 100644
--- a/apps/files_sharing/lib/sharedmount.php
+++ b/apps/files_sharing/lib/sharedmount.php
@@ -8,13 +8,13 @@
namespace OCA\Files_Sharing;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
/**
* Shared mount points can be moved by the user
*/
-class SharedMount extends Mount implements MoveableMount {
+class SharedMount extends MountPoint implements MoveableMount {
/**
* @var \OC\Files\Storage\Shared $storage
*/
@@ -22,15 +22,15 @@ class SharedMount extends Mount implements MoveableMount {
public function __construct($storage, $mountpoint, $arguments = null, $loader = null) {
// first update the mount point before creating the parent
- $newMountPoint = self::verifyMountPoint($arguments['share']);
- $absMountPoint = '/' . \OCP\User::getUser() . '/files' . $newMountPoint;
+ $newMountPoint = $this->verifyMountPoint($arguments['share'], $arguments['user']);
+ $absMountPoint = '/' . $arguments['user'] . '/files' . $newMountPoint;
parent::__construct($storage, $absMountPoint, $arguments, $loader);
}
/**
* check if the parent folder exists otherwise move the mount point up
*/
- private static function verifyMountPoint(&$share) {
+ private function verifyMountPoint(&$share, $user) {
$mountPoint = basename($share['file_target']);
$parent = dirname($share['file_target']);
@@ -42,7 +42,7 @@ class SharedMount extends Mount implements MoveableMount {
$newMountPoint = \OCA\Files_Sharing\Helper::generateUniqueTarget(
\OC\Files\Filesystem::normalizePath($parent . '/' . $mountPoint),
array(),
- new \OC\Files\View('/' . \OCP\User::getUser() . '/files')
+ new \OC\Files\View('/' . $user . '/files')
);
if($newMountPoint !== $share['file_target']) {
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 5ce15d9a012..1ac57053e25 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -67,7 +67,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
if ($source) {
$source['path'] .= '.part';
// All partial files have delete permission
- $source['permissions'] |= \OCP\PERMISSION_DELETE;
+ $source['permissions'] |= \OCP\Constants::PERMISSION_DELETE;
}
} else {
$source = \OC_Share_Backend_File::getSource($target, $this->getMountPoint(), $this->getItemType());
@@ -109,11 +109,11 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
$permissions = $this->share['permissions'];
// part files and the mount point always have delete permissions
if ($target === '' || pathinfo($target, PATHINFO_EXTENSION) === 'part') {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
if (\OC_Util::isSharingDisabledForUser()) {
- $permissions &= ~\OCP\PERMISSION_SHARE;
+ $permissions &= ~\OCP\Constants::PERMISSION_SHARE;
}
return $permissions;
@@ -197,7 +197,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public function isCreatable($path) {
- return ($this->getPermissions($path) & \OCP\PERMISSION_CREATE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_CREATE);
}
public function isReadable($path) {
@@ -205,18 +205,18 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public function isUpdatable($path) {
- return ($this->getPermissions($path) & \OCP\PERMISSION_UPDATE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_UPDATE);
}
public function isDeletable($path) {
- return ($this->getPermissions($path) & \OCP\PERMISSION_DELETE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_DELETE);
}
public function isSharable($path) {
if (\OCP\Util::isSharingDisabledForUser()) {
return false;
}
- return ($this->getPermissions($path) & \OCP\PERMISSION_SHARE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE);
}
public function file_exists($path) {
@@ -397,7 +397,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public static function setup($options) {
- $shares = \OCP\Share::getItemsSharedWith('file');
+ $shares = \OCP\Share::getItemsSharedWithUser('file', $options['user']);
$manager = Filesystem::getMountManager();
$loader = Filesystem::getLoader();
if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user']
@@ -411,7 +411,8 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
$options['user_dir'] . '/' . $share['file_target'],
array(
'share' => $share,
- ),
+ 'user' => $options['user']
+ ),
$loader
);
$manager->addMount($mount);
diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
index a34140f5a35..9d8ae7cbb4f 100644
--- a/apps/files_sharing/lib/updater.php
+++ b/apps/files_sharing/lib/updater.php
@@ -161,7 +161,10 @@ class Shared_Updater {
*/
static public function postUnshareHook($params) {
- if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {
+ // only update etags for file/folders shared to local users/groups
+ if (($params['itemType'] === 'file' || $params['itemType'] === 'folder') &&
+ $params['shareType'] !== \OCP\Share::SHARE_TYPE_LINK &&
+ $params['shareType'] !== \OCP\Share::SHARE_TYPE_REMOTE) {
$deletedShares = isset($params['deletedShares']) ? $params['deletedShares'] : array();
@@ -212,7 +215,7 @@ class Shared_Updater {
/**
* rename mount point from the children if the parent was renamed
- *
+ *
* @param string $oldPath old path relative to data/user/files
* @param string $newPath new path relative to data/user/files
*/
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 4320c105103..d9d14f67c33 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -1,205 +1,17 @@
<?php
-// Load other apps for file previews
-use OCA\Files_Sharing\Helper;
-
-OC_App::loadApps();
-
-$appConfig = \OC::$server->getAppConfig();
-
-if ($appConfig->getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') {
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
-}
-
-// Legacy sharing links via public.php have the token in $GET['t']
-if (isset($_GET['t'])) {
- $token = $_GET['t'];
-}
-
-if (isset($token)) {
- $linkItem = OCP\Share::getShareByToken($token, false);
- if (is_array($linkItem) && isset($linkItem['uid_owner'])) {
- // seems to be a valid share
- $type = $linkItem['item_type'];
- $fileSource = $linkItem['file_source'];
- $shareOwner = $linkItem['uid_owner'];
- $path = null;
- $rootLinkItem = OCP\Share::resolveReShare($linkItem);
- if (isset($rootLinkItem['uid_owner'])) {
- OCP\JSON::checkUserExists($rootLinkItem['uid_owner']);
- OC_Util::tearDownFS();
- OC_Util::setupFS($rootLinkItem['uid_owner']);
- $path = \OC\Files\Filesystem::getPath($linkItem['file_source']);
- }
- }
-}
-if (isset($path)) {
- if (!isset($linkItem['item_type'])) {
- OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR);
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
- }
- if (isset($linkItem['share_with'])) {
- // Authenticate share_with
- $url = OCP\Util::linkToPublic('files') . '&t=' . $token;
- if (isset($_GET['file'])) {
- $url .= '&file=' . urlencode($_GET['file']);
- } else {
- if (isset($_GET['dir'])) {
- $url .= '&dir=' . urlencode($_GET['dir']);
- }
- }
- if (isset($_POST['password'])) {
- $password = $_POST['password'];
- if ($linkItem['share_type'] == OCP\Share::SHARE_TYPE_LINK) {
- // Check Password
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new PasswordHash(8, $forcePortable);
- if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''),
- $linkItem['share_with']))) {
- OCP\Util::addStyle('files_sharing', 'authenticate');
- $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
- $tmpl->assign('URL', $url);
- $tmpl->assign('wrongpw', true);
- $tmpl->printPage();
- exit();
- } else {
- // Save item id in session for future requests
- \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
- }
- } else {
- OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type']
- .' for share id '.$linkItem['id'], \OCP\Util::ERROR);
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
- }
-
- } else {
- // Check if item id is set in session
- if ( ! \OC::$server->getSession()->exists('public_link_authenticated')
- || \OC::$server->getSession()->get('public_link_authenticated') !== $linkItem['id']
- ) {
- // Prompt for password
- OCP\Util::addStyle('files_sharing', 'authenticate');
- $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
- $tmpl->assign('URL', $url);
- $tmpl->printPage();
- exit();
- }
- }
- }
- $basePath = $path;
- $rootName = \OC_Util::basename($path);
- if (isset($_GET['path']) && \OC\Files\Filesystem::isReadable($basePath . $_GET['path'])) {
- $getPath = \OC\Files\Filesystem::normalizePath($_GET['path']);
- $path .= $getPath;
- } else {
- $getPath = '';
- }
- $dir = dirname($path);
- $file = basename($path);
- // Download the file
- if (isset($_GET['download'])) {
- if (!\OCP\App::isEnabled('files_encryption')) {
- // encryption app requires the session to store the keys in
- \OC::$server->getSession()->close();
- }
- if (isset($_GET['files'])) { // download selected files
- $files = $_GET['files'];
- $files_list = json_decode($files);
- // in case we get only a single file
- if (!is_array($files_list)) {
- $files_list = array($files);
- }
- OC_Files::get($path, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');
- } else {
- OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD');
- }
- exit();
- } else {
- OCP\Util::addScript('files', 'file-upload');
- OCP\Util::addStyle('files_sharing', 'public');
- OCP\Util::addStyle('files_sharing', 'mobile');
- OCP\Util::addScript('files_sharing', 'public');
- OCP\Util::addScript('files', 'fileactions');
- OCP\Util::addScript('files', 'jquery.iframe-transport');
- OCP\Util::addScript('files', 'jquery.fileupload');
- $maxUploadFilesize=OCP\Util::maxUploadFilesize($path);
- $tmpl = new OCP\Template('files_sharing', 'public', 'base');
- $tmpl->assign('displayName', \OCP\User::getDisplayName($shareOwner));
- $tmpl->assign('filename', $file);
- $tmpl->assign('directory_path', $linkItem['file_target']);
- $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
- $tmpl->assign('dirToken', $linkItem['token']);
- $tmpl->assign('sharingToken', $token);
- $tmpl->assign('server2serversharing', Helper::isOutgoingServer2serverShareEnabled());
- $tmpl->assign('protected', isset($linkItem['share_with']) ? 'true' : 'false');
-
- $urlLinkIdentifiers= (isset($token)?'&t='.$token:'')
- .(isset($_GET['dir'])?'&dir='.$_GET['dir']:'')
- .(isset($_GET['file'])?'&file='.$_GET['file']:'');
- // Show file list
- if (\OC\Files\Filesystem::is_dir($path)) {
- $tmpl->assign('dir', $getPath);
-
- OCP\Util::addStyle('files', 'files');
- OCP\Util::addStyle('files', 'upload');
- OCP\Util::addScript('files', 'filesummary');
- OCP\Util::addScript('files', 'breadcrumb');
- OCP\Util::addScript('files', 'files');
- OCP\Util::addScript('files', 'filelist');
- OCP\Util::addscript('files', 'keyboardshortcuts');
- $files = array();
- $rootLength = strlen($basePath) + 1;
- $maxUploadFilesize=OCP\Util::maxUploadFilesize($path);
-
- $freeSpace=OCP\Util::freeSpace($path);
- $uploadLimit=OCP\Util::uploadLimit();
- $folder = new OCP\Template('files', 'list', '');
- $folder->assign('dir', $getPath);
- $folder->assign('dirToken', $linkItem['token']);
- $folder->assign('permissions', OCP\PERMISSION_READ);
- $folder->assign('isPublic', true);
- $folder->assign('publicUploadEnabled', 'no');
- $folder->assign('files', $files);
- $folder->assign('uploadMaxFilesize', $maxUploadFilesize);
- $folder->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
- $folder->assign('freeSpace', $freeSpace);
- $folder->assign('uploadLimit', $uploadLimit); // PHP upload limit
- $folder->assign('usedSpacePercent', 0);
- $folder->assign('trash', false);
- $tmpl->assign('folder', $folder->fetchPage());
- $tmpl->assign('downloadURL',
- OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath));
- } else {
- $tmpl->assign('dir', $dir);
-
- // Show file preview if viewer is available
- if ($type == 'file') {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download');
- } else {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
- .$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
- }
- }
- $tmpl->printPage();
- }
- exit();
-} else {
- OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG);
-}
-
-$errorTemplate = new OCP\Template('files_sharing', 'part.404', '');
-$errorContent = $errorTemplate->fetchPage();
-
-header('HTTP/1.0 404 Not Found');
-OCP\Util::addStyle('files_sharing', '404');
-$tmpl = new OCP\Template('', '404', 'guest');
-$tmpl->assign('content', $errorContent);
-$tmpl->printPage();
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// This file is just used to redirect the legacy sharing URLs (< ownCloud 8) to the new ones
+
+$urlGenerator = new \OC\URLGenerator(\OC::$server->getConfig());
+$token = isset($_GET['t']) ? $_GET['t'] : '';
+$route = isset($_GET['download']) ? 'files_sharing.sharecontroller.downloadShare' : 'files_sharing.sharecontroller.showShare';
+
+OC_Response::redirect($urlGenerator->linkToRoute($route, array('token' => $token)));
diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php
index 03e43967a40..240891ffef6 100644
--- a/apps/files_sharing/publicwebdav.php
+++ b/apps/files_sharing/publicwebdav.php
@@ -41,7 +41,7 @@ $server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav'));
$server->subscribeEvent('beforeMethod', function () use ($server, $objectTree, $authBackend) {
$share = $authBackend->getShare();
$owner = $share['uid_owner'];
- $isWritable = $share['permissions'] & (\OCP\PERMISSION_UPDATE | \OCP\PERMISSION_CREATE);
+ $isWritable = $share['permissions'] & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE);
$fileId = $share['file_source'];
if (!$isWritable) {
@@ -54,7 +54,6 @@ $server->subscribeEvent('beforeMethod', function () use ($server, $objectTree, $
$ownerView = \OC\Files\Filesystem::getView();
$path = $ownerView->getPath($fileId);
-
$view = new \OC\Files\View($ownerView->getAbsolutePath($path));
$rootInfo = $view->getFileInfo('');
diff --git a/apps/files_sharing/templates/authenticate.php b/apps/files_sharing/templates/authenticate.php
index 0c4ac6ca445..e3aa62b9ece 100644
--- a/apps/files_sharing/templates/authenticate.php
+++ b/apps/files_sharing/templates/authenticate.php
@@ -1,4 +1,9 @@
-<form action="<?php p($_['URL']); ?>" method="post">
+<?php
+ /** @var $_ array */
+ /** @var $l OC_L10N */
+ style('files_sharing', 'authenticate');
+?>
+<form method="post">
<fieldset>
<?php if (!isset($_['wrongpw'])): ?>
<div class="warning-info"><?php p($l->t('This share is password-protected')); ?></div>
@@ -8,6 +13,7 @@
<?php endif; ?>
<p>
<label for="password" class="infield"><?php p($l->t('Password')); ?></label>
+ <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" />
<input type="password" name="password" id="password"
placeholder="<?php p($l->t('Password')); ?>" value=""
autocomplete="off" autocapitalize="off" autocorrect="off"
diff --git a/apps/files_sharing/templates/list.php b/apps/files_sharing/templates/list.php
index a1d95ebc1f1..55ad55a0a4f 100644
--- a/apps/files_sharing/templates/list.php
+++ b/apps/files_sharing/templates/list.php
@@ -8,6 +8,12 @@
<input type="hidden" name="dir" value="" id="dir">
+<div class="nofilterresults hidden">
+ <div class="icon-search"></div>
+ <h2><?php p($l->t('No entries found in this folder')); ?></h2>
+ <p></p>
+</div>
+
<table id="filestable">
<thead>
<tr>
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 46bf90b1b41..0384d9a60aa 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -1,8 +1,28 @@
-<?php /** @var $l OC_L10N */ ?>
<?php
+/** @var $l OC_L10N */
+/** @var $_ array */
+
+OCP\Util::addScript('files', 'file-upload');
+OCP\Util::addStyle('files_sharing', 'public');
+OCP\Util::addStyle('files_sharing', 'mobile');
+OCP\Util::addScript('files_sharing', 'public');
+OCP\Util::addScript('files', 'fileactions');
+OCP\Util::addScript('files', 'jquery.iframe-transport');
+OCP\Util::addScript('files', 'jquery.fileupload');
+
+// JS required for folders
+OCP\Util::addStyle('files', 'files');
+OCP\Util::addStyle('files', 'upload');
+OCP\Util::addScript('files', 'filesummary');
+OCP\Util::addScript('files', 'breadcrumb');
+OCP\Util::addScript('files', 'files');
+OCP\Util::addScript('files', 'filelist');
+OCP\Util::addscript('files', 'keyboardshortcuts');
+
$thumbSize=1024;
$previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'false';
?>
+
<?php if ( \OC\Preview::isMimeSupported($_['mimetype'])): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?>
<link rel="image_src" href="<?php p(OCP\Util::linkToRoute( 'core_ajax_public_preview', array('x' => $thumbSize, 'y' => $thumbSize, 'file' => $_['directory_path'], 't' => $_['dirToken']))); ?>" />
<?php endif; ?>
@@ -24,8 +44,12 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
<header><div id="header" class="<?php p((isset($_['folder']) ? 'share-folder' : 'share-file')) ?>">
<a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
- title="" id="owncloud">
- <div class="logo-wide svg"></div>
+ title="" id="owncloud">
+ <div class="logo-wide svg">
+ <h1 class="hidden-visually">
+ <?php p($theme->getName()); ?>
+ </h1>
+ </div>
</a>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
<div class="header-right">
@@ -48,7 +72,7 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
</a>
</span>
</div>
-</div></header>
+ </div></header>
<div id="content">
<div id="preview">
<?php if (isset($_['folder'])): ?>
@@ -67,7 +91,7 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
<div class="directDownload">
<a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
<img class="svg" alt="" src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>"/>
- <?php p($l->t('Download %s', array($_['filename'])))?>
+ <?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>)
</a>
</div>
<div class="directLink">
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php
index 88acbd8e775..278e7130199 100644
--- a/apps/files_sharing/tests/api.php
+++ b/apps/files_sharing/tests/api.php
@@ -32,9 +32,12 @@ class Test_Files_Sharing_Api extends TestCase {
private static $tempStorage;
- function setUp() {
+ protected function setUp() {
parent::setUp();
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_expire_after_n_days', '7');
+
$this->folder = self::TEST_FOLDER_NAME;
$this->subfolder = '/subfolder_share_api_test';
$this->subsubfolder = '/subsubfolder_share_api_test';
@@ -50,7 +53,7 @@ class Test_Files_Sharing_Api extends TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
if($this->view instanceof \OC\Files\View) {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
@@ -73,7 +76,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -90,7 +93,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['path'] = $this->folder;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
// check if API call was successful
$this->assertTrue($result->succeeded());
@@ -126,7 +129,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertFalse($result->succeeded());
@@ -135,7 +138,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
$_POST['password'] = '';
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertFalse($result->succeeded());
// share with password should succeed
@@ -143,7 +146,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
$_POST['password'] = 'foo';
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -154,7 +157,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['password'] = 'bar';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
// removing password should fail
@@ -163,7 +166,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['password'] = '';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertFalse($result->succeeded());
// cleanup
@@ -184,7 +187,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -210,7 +213,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertTrue($result->succeeded());
$data = $result->getData();
@@ -235,7 +238,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
- $result = Share\Api::createShare(array());
+ $result = \OCA\Files_Sharing\API\Local::createShare(array());
$this->assertFalse($result->succeeded());
@@ -256,7 +259,7 @@ class Test_Files_Sharing_Api extends TestCase {
\OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, 31);
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -283,7 +286,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $this->filename;
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -320,7 +323,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $this->filename;
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -330,7 +333,7 @@ class Test_Files_Sharing_Api extends TestCase {
// now also ask for the reshares
$_GET['reshares'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -375,7 +378,7 @@ class Test_Files_Sharing_Api extends TestCase {
// call getShare() with share ID
$params = array('id' => $share['id']);
- $result = Share\Api::getShare($params);
+ $result = \OCA\Files_Sharing\API\Local::getShare($params);
$this->assertTrue($result->succeeded());
@@ -410,7 +413,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $this->folder;
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -467,7 +470,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = $value['query'];
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -518,7 +521,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = '/';
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -580,7 +583,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = '/';
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -649,7 +652,7 @@ class Test_Files_Sharing_Api extends TestCase {
$expectedPath1 = $this->subfolder;
$_GET['path'] = $expectedPath1;
- $result1 = Share\Api::getAllShares(array());
+ $result1 = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result1->succeeded());
@@ -661,7 +664,7 @@ class Test_Files_Sharing_Api extends TestCase {
$expectedPath2 = $this->folder . $this->subfolder;
$_GET['path'] = $expectedPath2;
- $result2 = Share\Api::getAllShares(array());
+ $result2 = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result2->succeeded());
@@ -731,7 +734,7 @@ class Test_Files_Sharing_Api extends TestCase {
$_GET['path'] = '/';
$_GET['subfiles'] = 'true';
- $result = Share\Api::getAllShares(array());
+ $result = \OCA\Files_Sharing\API\Local::getAllShares(array());
$this->assertTrue($result->succeeded());
@@ -768,7 +771,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params = array('id' => 0);
- $result = Share\Api::getShare($params);
+ $result = \OCA\Files_Sharing\API\Local::getShare($params);
$this->assertEquals(404, $result->getStatusCode());
$meta = $result->getMeta();
@@ -785,7 +788,7 @@ class Test_Files_Sharing_Api extends TestCase {
$fileInfo = $this->view->getFileInfo($this->filename);
$result = \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
// share was successful?
$this->assertTrue($result);
@@ -819,7 +822,7 @@ class Test_Files_Sharing_Api extends TestCase {
// check if share have expected permissions, single shared files never have
// delete permissions
- $this->assertEquals(\OCP\PERMISSION_ALL & ~\OCP\PERMISSION_DELETE, $userShare['permissions']);
+ $this->assertEquals(\OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_DELETE, $userShare['permissions']);
// update permissions
@@ -828,7 +831,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['permissions'] = 1;
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$meta = $result->getMeta();
$this->assertTrue($result->succeeded(), $meta['message']);
@@ -856,7 +859,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['password'] = 'foo';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
@@ -916,7 +919,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['publicUpload'] = 'true';
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
@@ -945,10 +948,11 @@ class Test_Files_Sharing_Api extends TestCase {
function testUpdateShareExpireDate() {
$fileInfo = $this->view->getFileInfo($this->folder);
+ $config = \OC::$server->getConfig();
// enforce expire date, by default 7 days after the file was shared
- \OCP\Config::setAppValue('core', 'shareapi_default_expire_date', 'yes');
- \OCP\Config::setAppValue('core', 'shareapi_enforce_expire_date', 'yes');
+ $config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
+ $config->setAppValue('core', 'shareapi_enforce_expire_date', 'yes');
$dateWithinRange = new \DateTime();
$dateWithinRange->add(new \DateInterval('P5D'));
@@ -974,7 +978,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['expireDate'] = $dateWithinRange->format('Y-m-d');
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertTrue($result->succeeded());
@@ -992,7 +996,7 @@ class Test_Files_Sharing_Api extends TestCase {
$params['_put'] = array();
$params['_put']['expireDate'] = $dateOutOfRange->format('Y-m-d');
- $result = Share\Api::updateShare($params);
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
$this->assertFalse($result->succeeded());
@@ -1005,8 +1009,8 @@ class Test_Files_Sharing_Api extends TestCase {
$this->assertEquals($dateWithinRange->format('Y-m-d') . ' 00:00:00', $updatedLinkShare['expiration']);
// cleanup
- \OCP\Config::setAppValue('core', 'shareapi_default_expire_date', 'no');
- \OCP\Config::setAppValue('core', 'shareapi_enforce_expire_date', 'no');
+ $config->setAppValue('core', 'shareapi_default_expire_date', 'no');
+ $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
\OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null);
}
@@ -1030,7 +1034,7 @@ class Test_Files_Sharing_Api extends TestCase {
$this->assertEquals(2, count($items));
foreach ($items as $item) {
- $result = Share\Api::deleteShare(array('id' => $item['id']));
+ $result = \OCA\Files_Sharing\API\Local::deleteShare(array('id' => $item['id']));
$this->assertTrue($result->succeeded());
}
@@ -1069,7 +1073,7 @@ class Test_Files_Sharing_Api extends TestCase {
$this->assertEquals(1, count($items));
$item = reset($items);
- $result3 = Share\Api::deleteShare(array('id' => $item['id']));
+ $result3 = \OCA\Files_Sharing\API\Local::deleteShare(array('id' => $item['id']));
$this->assertTrue($result3->succeeded());
@@ -1225,7 +1229,7 @@ class Test_Files_Sharing_Api extends TestCase {
$info = OC\Files\Filesystem::getFileInfo($this->filename);
$this->assertTrue($info instanceof \OC\Files\FileInfo);
- $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, null, \OCP\PERMISSION_READ);
+ $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertTrue(is_string($result));
$result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, 31);
diff --git a/apps/files_sharing/tests/backend.php b/apps/files_sharing/tests/backend.php
index e113c940678..5cf2a22c792 100644
--- a/apps/files_sharing/tests/backend.php
+++ b/apps/files_sharing/tests/backend.php
@@ -34,7 +34,7 @@ class Test_Files_Sharing_Backend extends TestCase {
public $subfolder;
public $subsubfolder;
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = self::TEST_FOLDER_NAME;
@@ -53,7 +53,7 @@ class Test_Files_Sharing_Backend extends TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->subsubfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
diff --git a/apps/files_sharing/tests/cache.php b/apps/files_sharing/tests/cache.php
index 2c9790ce66d..f3f8f924b44 100644
--- a/apps/files_sharing/tests/cache.php
+++ b/apps/files_sharing/tests/cache.php
@@ -22,7 +22,6 @@ use OCA\Files_sharing\Tests\TestCase;
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-
class Test_Files_Sharing_Cache extends TestCase {
/**
@@ -30,7 +29,19 @@ class Test_Files_Sharing_Cache extends TestCase {
*/
public $user2View;
- function setUp() {
+ /** @var \OC\Files\Cache\Cache */
+ protected $ownerCache;
+
+ /** @var \OC\Files\Cache\Cache */
+ protected $sharedCache;
+
+ /** @var \OC\Files\Storage\Storage */
+ protected $ownerStorage;
+
+ /** @var \OC\Files\Storage\Storage */
+ protected $sharedStorage;
+
+ protected function setUp() {
parent::setUp();
\OC_User::setDisplayName(self::TEST_FILES_SHARING_API_USER1, 'User One');
@@ -54,7 +65,7 @@ class Test_Files_Sharing_Cache extends TestCase {
$this->view->file_put_contents('container/shareddir/subdir/another too.txt', $textData);
$this->view->file_put_contents('container/shareddir/subdir/not a text file.xml', '<xml></xml>');
- list($this->ownerStorage, $internalPath) = $this->view->resolvePath('');
+ list($this->ownerStorage,) = $this->view->resolvePath('');
$this->ownerCache = $this->ownerStorage->getCache();
$this->ownerStorage->getScanner()->scan('');
@@ -72,11 +83,11 @@ class Test_Files_Sharing_Cache extends TestCase {
// retrieve the shared storage
$secondView = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2);
- list($this->sharedStorage, $internalPath) = $secondView->resolvePath('files/shareddir');
+ list($this->sharedStorage,) = $secondView->resolvePath('files/shareddir');
$this->sharedCache = $this->sharedStorage->getCache();
}
- function tearDown() {
+ protected function tearDown() {
$this->sharedCache->clear();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -192,6 +203,96 @@ class Test_Files_Sharing_Cache extends TestCase {
$this->verifyFiles($check, $results);
}
+ /**
+ * Test searching by tag
+ */
+ function testSearchByTag() {
+ $userId = \OC::$server->getUserSession()->getUser()->getUId();
+ $id1 = $this->sharedCache->get('bar.txt')['fileid'];
+ $id2 = $this->sharedCache->get('subdir/another too.txt')['fileid'];
+ $id3 = $this->sharedCache->get('subdir/not a text file.xml')['fileid'];
+ $id4 = $this->sharedCache->get('subdir/another.txt')['fileid'];
+ $tagManager = \OC::$server->getTagManager()->load('files', null, null, $userId);
+ $tagManager->tagAs($id1, 'tag1');
+ $tagManager->tagAs($id1, 'tag2');
+ $tagManager->tagAs($id2, 'tag1');
+ $tagManager->tagAs($id3, 'tag1');
+ $tagManager->tagAs($id4, 'tag2');
+ $results = $this->sharedStorage->getCache()->searchByTag('tag1', $userId);
+ $check = array(
+ array(
+ 'name' => 'bar.txt',
+ 'path' => 'bar.txt'
+ ),
+ array(
+ 'name' => 'another too.txt',
+ 'path' => 'subdir/another too.txt'
+ ),
+ array(
+ 'name' => 'not a text file.xml',
+ 'path' => 'subdir/not a text file.xml'
+ ),
+ );
+ $this->verifyFiles($check, $results);
+ $tagManager->delete(array('tag1', 'tag2'));
+ }
+
+ /**
+ * Test searching by tag for multiple sections of the tree
+ */
+ function testSearchByTagTree() {
+ $userId = \OC::$server->getUserSession()->getUser()->getUId();
+ $this->sharedStorage->mkdir('subdir/emptydir');
+ $this->sharedStorage->mkdir('subdir/emptydir2');
+ $this->ownerStorage->getScanner()->scan('');
+ $allIds = array(
+ $this->sharedCache->get('')['fileid'],
+ $this->sharedCache->get('bar.txt')['fileid'],
+ $this->sharedCache->get('subdir/another too.txt')['fileid'],
+ $this->sharedCache->get('subdir/not a text file.xml')['fileid'],
+ $this->sharedCache->get('subdir/another.txt')['fileid'],
+ $this->sharedCache->get('subdir/emptydir')['fileid'],
+ $this->sharedCache->get('subdir/emptydir2')['fileid'],
+ );
+ $tagManager = \OC::$server->getTagManager()->load('files', null, null, $userId);
+ foreach ($allIds as $id) {
+ $tagManager->tagAs($id, 'tag1');
+ }
+ $results = $this->sharedStorage->getCache()->searchByTag('tag1', $userId);
+ $check = array(
+ array(
+ 'name' => 'shareddir',
+ 'path' => ''
+ ),
+ array(
+ 'name' => 'bar.txt',
+ 'path' => 'bar.txt'
+ ),
+ array(
+ 'name' => 'another.txt',
+ 'path' => 'subdir/another.txt'
+ ),
+ array(
+ 'name' => 'another too.txt',
+ 'path' => 'subdir/another too.txt'
+ ),
+ array(
+ 'name' => 'emptydir',
+ 'path' => 'subdir/emptydir'
+ ),
+ array(
+ 'name' => 'emptydir2',
+ 'path' => 'subdir/emptydir2'
+ ),
+ array(
+ 'name' => 'not a text file.xml',
+ 'path' => 'subdir/not a text file.xml'
+ ),
+ );
+ $this->verifyFiles($check, $results);
+ $tagManager->delete(array('tag1'));
+ }
+
function testGetFolderContentsInRoot() {
$results = $this->user2View->getDirectoryContent('/');
@@ -336,7 +437,7 @@ class Test_Files_Sharing_Cache extends TestCase {
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
\OC\Files\Filesystem::file_put_contents('test.txt', 'foo');
$info = \OC\Files\Filesystem::getFileInfo('test.txt');
- \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
\OC_Util::tearDownFS();
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
@@ -354,10 +455,10 @@ class Test_Files_Sharing_Cache extends TestCase {
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
\OC\Files\Filesystem::mkdir('foo');
\OC\Files\Filesystem::mkdir('foo/bar');
- \OC\Files\Filesystem::touch('foo/bar/test.txt', 'bar');
+ \OC\Files\Filesystem::touch('foo/bar/test.txt');
$folderInfo = \OC\Files\Filesystem::getFileInfo('foo');
$fileInfo = \OC\Files\Filesystem::getFileInfo('foo/bar/test.txt');
- \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
\OC_Util::tearDownFS();
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
diff --git a/apps/files_sharing/tests/controller/sharecontroller.php b/apps/files_sharing/tests/controller/sharecontroller.php
new file mode 100644
index 00000000000..f13e5b2e497
--- /dev/null
+++ b/apps/files_sharing/tests/controller/sharecontroller.php
@@ -0,0 +1,171 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @copyright 2014 Lukas Reschke
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Controllers;
+
+use OC\Files\Filesystem;
+use OCA\Files_Sharing\Application;
+use OCP\AppFramework\IAppContainer;
+use OCP\Files;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Security\ISecureRandom;
+use OC\Files\View;
+use OCP\Share;
+use OC\URLGenerator;
+
+/**
+ * @package OCA\Files_Sharing\Controllers
+ */
+class ShareControllerTest extends \PHPUnit_Framework_TestCase {
+
+ /** @var IAppContainer */
+ private $container;
+ /** @var string */
+ private $user;
+ /** @var string */
+ private $token;
+ /** @var string */
+ private $oldUser;
+ /** @var ShareController */
+ private $shareController;
+ /** @var URLGenerator */
+ private $urlGenerator;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['AppName'] = 'files_sharing';
+ $this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['URLGenerator'] = $this->getMockBuilder('\OC\URLGenerator')
+ ->disableOriginalConstructor()->getMock();
+ $this->urlGenerator = $this->container['URLGenerator'];
+ $this->shareController = $this->container['ShareController'];
+
+ // Store current user
+ $this->oldUser = \OC_User::getUser();
+
+ // Create a dummy user
+ $this->user = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(12, ISecureRandom::CHAR_LOWER);
+
+ \OC_User::createUser($this->user, $this->user);
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ Filesystem::tearDown();
+ \OC_User::setUserId($this->user);
+ \OC_Util::setupFS($this->user);
+
+ // Create a dummy shared file
+ $view = new View('/'. $this->user . '/files');
+ $view->file_put_contents('file1.txt', 'I am such an awesome shared file!');
+ $this->token = \OCP\Share::shareItem(
+ Filesystem::getFileInfo('file1.txt')->getType(),
+ Filesystem::getFileInfo('file1.txt')->getId(),
+ \OCP\Share::SHARE_TYPE_LINK,
+ 'IAmPasswordProtected!',
+ 1
+ );
+ }
+
+ protected function tearDown() {
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ Filesystem::tearDown();
+ \OC_User::deleteUser($this->user);
+ \OC_User::setIncognitoMode(false);
+
+ \OC::$server->getSession()->set('public_link_authenticated', '');
+
+ // Set old user
+ \OC_User::setUserId($this->oldUser);
+ \OC_Util::setupFS($this->oldUser);
+ }
+
+ public function testShowAuthenticate() {
+ $linkItem = \OCP\Share::getShareByToken($this->token, false);
+
+ // Test without being authenticated
+ $response = $this->shareController->showAuthenticate($this->token);
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'authenticate', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with being authenticated for another file
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']-1);
+ $response = $this->shareController->showAuthenticate($this->token);
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'authenticate', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with being authenticated for the correct file
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+ $response = $this->shareController->showAuthenticate($this->token);
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testAuthenticate() {
+ // Test without a not existing token
+ $response = $this->shareController->authenticate('ThisTokenShouldHopefullyNeverExistSoThatTheUnitTestWillAlwaysPass :)');
+ $expectedResponse = new TemplateResponse('core', '404', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with a valid password
+ $response = $this->shareController->authenticate($this->token, 'IAmPasswordProtected!');
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with a invalid password
+ $response = $this->shareController->authenticate($this->token, 'WrongPw!');
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'authenticate', array('wrongpw' => true), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testShowShare() {
+ // Test without a not existing token
+ $response = $this->shareController->showShare('ThisTokenShouldHopefullyNeverExistSoThatTheUnitTestWillAlwaysPass :)');
+ $expectedResponse = new TemplateResponse('core', '404', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with a password protected share and no authentication
+ $response = $this->shareController->showShare($this->token);
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate', array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with password protected share and authentication
+ $linkItem = Share::getShareByToken($this->token, false);
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+ $response = $this->shareController->showShare($this->token);
+ $sharedTmplParams = array(
+ 'displayName' => $this->user,
+ 'filename' => 'file1.txt',
+ 'directory_path' => '/file1.txt',
+ 'mimetype' => 'text/plain',
+ 'dirToken' => $this->token,
+ 'sharingToken' => $this->token,
+ 'server2serversharing' => true,
+ 'protected' => 'true',
+ 'dir' => '',
+ 'downloadURL' => null,
+ 'fileSize' => '33 B'
+ );
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'public', $sharedTmplParams, 'base');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testDownloadShare() {
+ // Test with a password protected share and no authentication
+ $response = $this->shareController->downloadShare($this->token);
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate',
+ array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+ }
+}
diff --git a/apps/files_sharing/tests/externalstorage.php b/apps/files_sharing/tests/externalstorage.php
index 0c741bb8199..cf82fcfc555 100644
--- a/apps/files_sharing/tests/externalstorage.php
+++ b/apps/files_sharing/tests/externalstorage.php
@@ -23,7 +23,7 @@
/**
* Tests for the external Storage class for remote shares.
*/
-class Test_Files_Sharing_External_Storage extends \PHPUnit_Framework_TestCase {
+class Test_Files_Sharing_External_Storage extends \Test\TestCase {
function optionsProvider() {
return array(
diff --git a/apps/files_sharing/tests/helper.php b/apps/files_sharing/tests/helper.php
index 1a27739ec34..a9245ddafe5 100644
--- a/apps/files_sharing/tests/helper.php
+++ b/apps/files_sharing/tests/helper.php
@@ -35,7 +35,7 @@ class Test_Files_Sharing_Helper extends TestCase {
$this->assertSame('/Shared', \OCA\Files_Sharing\Helper::getShareFolder());
// cleanup
- \OCP\Config::deleteSystemValue('share_folder');
+ \OC::$server->getConfig()->deleteSystemValue('share_folder');
}
diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js
index 2cf5dc47b63..e5b5de314d7 100644
--- a/apps/files_sharing/tests/js/shareSpec.js
+++ b/apps/files_sharing/tests/js/shareSpec.js
@@ -9,7 +9,6 @@
*/
describe('OCA.Sharing.Util tests', function() {
- var oldFileListPrototype;
var fileList;
var testFiles;
@@ -24,10 +23,6 @@ describe('OCA.Sharing.Util tests', function() {
}
beforeEach(function() {
- // back up prototype, as it will be extended by
- // the sharing code
- oldFileListPrototype = _.extend({}, OCA.Files.FileList.prototype);
-
var $content = $('<div id="content"></div>');
$('#testArea').append($content);
// dummy file list
@@ -41,12 +36,12 @@ describe('OCA.Sharing.Util tests', function() {
$('#content').append($div);
var fileActions = new OCA.Files.FileActions();
- OCA.Sharing.Util.initialize(fileActions);
fileList = new OCA.Files.FileList(
$div, {
fileActions : fileActions
}
);
+ OCA.Sharing.Util.attach(fileList);
testFiles = [{
id: 1,
@@ -67,7 +62,6 @@ describe('OCA.Sharing.Util tests', function() {
};
});
afterEach(function() {
- OCA.Files.FileList.prototype = oldFileListPrototype;
delete OCA.Sharing.sharesLoaded;
delete OC.Share.droppedDown;
fileList.destroy();
@@ -105,7 +99,7 @@ describe('OCA.Sharing.Util tests', function() {
$action = $tr.find('.action-share');
expect($action.hasClass('permanent')).toEqual(false);
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows simple share text with share icon', function() {
@@ -125,7 +119,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('Shared');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows simple share text with public icon when shared with link', function() {
@@ -146,7 +140,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('Shared');
expect(OC.basename($action.find('img').attr('src'))).toEqual('public.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-public.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-public.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows owner name when owner is available', function() {
@@ -167,7 +161,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('User One');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
});
it('shows recipients when recipients are available', function() {
var $action, $tr;
@@ -187,7 +181,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text()).toEqual('Shared with User One, User Two');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
expect($action.find('img').length).toEqual(1);
});
it('shows static share text when file shared with user that has no share permission', function() {
@@ -209,7 +203,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($action.hasClass('permanent')).toEqual(true);
expect($action.find('>span').text().trim()).toEqual('User One');
expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg');
- expect(OC.basename(getImageUrl($tr.find('.filename')))).toEqual('folder-shared.svg');
+ expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
expect($action.find('img').length).toEqual(1);
});
});
diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js
index 41c8a1f05d8..7fdc6345e38 100644
--- a/apps/files_sharing/tests/js/sharedfilelistSpec.js
+++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js
@@ -9,8 +9,7 @@
*/
describe('OCA.Sharing.FileList tests', function() {
- var testFiles, alertStub, notificationStub, fileList, fileActions;
- var oldFileListPrototype;
+ var testFiles, alertStub, notificationStub, fileList;
beforeEach(function() {
alertStub = sinon.stub(OC.dialogs, 'alert');
@@ -46,18 +45,11 @@ describe('OCA.Sharing.FileList tests', function() {
'<div id="emptycontent">Empty content message</div>' +
'</div>'
);
- // back up prototype, as it will be extended by
- // the sharing code
- oldFileListPrototype = _.extend({}, OCA.Files.FileList.prototype);
- fileActions = new OCA.Files.FileActions();
- OCA.Sharing.Util.initialize(fileActions);
});
afterEach(function() {
- OCA.Files.FileList.prototype = oldFileListPrototype;
testFiles = undefined;
fileList.destroy();
fileList = undefined;
- fileActions = undefined;
notificationStub.restore();
alertStub.restore();
@@ -72,6 +64,7 @@ describe('OCA.Sharing.FileList tests', function() {
sharedWithUser: true
}
);
+ OCA.Sharing.Util.attach(fileList);
fileList.reload();
@@ -91,7 +84,7 @@ describe('OCA.Sharing.FileList tests', function() {
file_source: 49,
file_target: '/local path/local name.txt',
path: 'files/something shared.txt',
- permissions: 31,
+ permissions: OC.PERMISSION_ALL,
stime: 11111,
share_type: OC.Share.SHARE_TYPE_USER,
share_with: 'user1',
@@ -127,7 +120,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL); // read and delete
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).toEqual('User Two');
@@ -169,7 +163,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL); // read and delete
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).toEqual('User Two');
@@ -191,6 +186,7 @@ describe('OCA.Sharing.FileList tests', function() {
sharedWithUser: false
}
);
+ OCA.Sharing.Util.attach(fileList);
fileList.reload();
@@ -244,7 +240,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).not.toBeDefined();
@@ -285,7 +282,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).not.toBeDefined();
@@ -336,7 +334,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).not.toBeDefined();
@@ -404,7 +403,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
// always use the most recent stime
expect($tr.attr('data-mtime')).toEqual('22222000');
@@ -427,9 +427,11 @@ describe('OCA.Sharing.FileList tests', function() {
linksOnly: true
}
);
+ OCA.Sharing.Util.attach(fileList);
fileList.reload();
+ /* jshint camelcase: false */
ocsResponse = {
ocs: {
meta: {
@@ -496,7 +498,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-recipients')).not.toBeDefined();
@@ -537,7 +540,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-recipients')).not.toBeDefined();
@@ -551,4 +555,87 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.find('.nametext').text().trim()).toEqual('local name.txt');
});
});
+ describe('setting share permissions for files', function () {
+ beforeEach(function () {
+
+ var $content = $('<div id="content"></div>');
+ $('#testArea').append($content);
+ // dummy file list
+ var $div = $(
+ '<div>' +
+ '<table id="filestable">' +
+ '<thead></thead>' +
+ '<tbody id="fileList"></tbody>' +
+ '</table>' +
+ '</div>');
+ $('#content').append($div);
+
+ fileList = new OCA.Files.FileList($div);
+ OCA.Sharing.Util.attach(fileList);
+ });
+
+ it('external storage root folder', function () {
+ var $tr;
+ OC.Share.statuses = {1: {link: false, path: '/subdir'}};
+ fileList.setFiles([{
+ id: 1,
+ type: 'dir',
+ name: 'One.txt',
+ path: '/subdir',
+ mimetype: 'text/plain',
+ size: 12,
+ permissions: OC.PERMISSION_READ,
+ etag: 'abc',
+ shareOwner: 'User One',
+ recipients: 'User Two',
+ mountType: 'external-root'
+ }]);
+ $tr = fileList.$el.find('tr:first');
+
+ expect(parseInt($tr.attr('data-share-permissions'), 10)).toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE);
+ });
+
+ it('external storage root folder reshare', function () {
+ var $tr;
+ OC.Share.statuses = {1: {link: false, path: '/subdir'}};
+ fileList.setFiles([{
+ id: 1,
+ type: 'dir',
+ name: 'One.txt',
+ path: '/subdir',
+ mimetype: 'text/plain',
+ size: 12,
+ permissions: OC.PERMISSION_READ + OC.PERMISSION_SHARE,
+ etag: 'abc',
+ shareOwner: 'User One',
+ recipients: 'User Two',
+ mountType: 'external-root'
+ }]);
+ $tr = fileList.$el.find('tr:first');
+
+ expect(parseInt($tr.attr('data-share-permissions'), 10)).toEqual(OC.PERMISSION_ALL);
+ });
+
+ it('external storage root folder file', function () {
+ var $tr;
+ OC.Share.statuses = {1: {link: false, path: '/subdir'}};
+ fileList.setFiles([{
+ id: 1,
+ type: 'file',
+ name: 'One.txt',
+ path: '/subdir',
+ mimetype: 'text/plain',
+ size: 12,
+ permissions: OC.PERMISSION_READ,
+ etag: 'abc',
+ shareOwner: 'User One',
+ recipients: 'User Two',
+ mountType: 'external-root'
+ }]);
+ $tr = fileList.$el.find('tr:first');
+
+ expect(parseInt($tr.attr('data-share-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE - OC.PERMISSION_DELETE);
+ });
+ });
});
diff --git a/apps/files_sharing/tests/middleware/sharingcheckmiddleware.php b/apps/files_sharing/tests/middleware/sharingcheckmiddleware.php
new file mode 100644
index 00000000000..90c9a7bba10
--- /dev/null
+++ b/apps/files_sharing/tests/middleware/sharingcheckmiddleware.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @copyright 2014 Lukas Reschke
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Middleware;
+
+
+/**
+ * @package OCA\Files_Sharing\Middleware\SharingCheckMiddleware
+ */
+class SharingCheckMiddlewareTest extends \PHPUnit_Framework_TestCase {
+
+ /** @var \OCP\IAppConfig */
+ private $appConfig;
+ /** @var \OCP\AppFramework\IApi */
+ private $api;
+ /** @var SharingCheckMiddleware */
+ private $sharingCheckMiddleware;
+
+ protected function setUp() {
+ $this->appConfig = $this->getMockBuilder('\OCP\IAppConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->api = $this->getMockBuilder('\OCP\AppFramework\IApi')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->sharingCheckMiddleware = new SharingCheckMiddleware('files_sharing', $this->appConfig, $this->api);
+ }
+
+ public function testIsSharingEnabledWithEverythingEnabled() {
+ $this->api
+ ->expects($this->once())
+ ->method('isAppEnabled')
+ ->with('files_sharing')
+ ->will($this->returnValue(true));
+
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->will($this->returnValue('yes'));
+
+ $this->assertTrue(\Test_Helper::invokePrivate($this->sharingCheckMiddleware, 'isSharingEnabled'));
+ }
+
+ public function testIsSharingEnabledWithAppDisabled() {
+ $this->api
+ ->expects($this->once())
+ ->method('isAppEnabled')
+ ->with('files_sharing')
+ ->will($this->returnValue(false));
+
+ $this->assertFalse(\Test_Helper::invokePrivate($this->sharingCheckMiddleware, 'isSharingEnabled'));
+ }
+
+ public function testIsSharingEnabledWithSharingDisabled() {
+ $this->api
+ ->expects($this->once())
+ ->method('isAppEnabled')
+ ->with('files_sharing')
+ ->will($this->returnValue(true));
+
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->will($this->returnValue('no'));
+
+ $this->assertFalse(\Test_Helper::invokePrivate($this->sharingCheckMiddleware, 'isSharingEnabled'));
+ }
+}
diff --git a/apps/files_sharing/tests/permissions.php b/apps/files_sharing/tests/permissions.php
index 639ebfb5936..f72d724c6fe 100644
--- a/apps/files_sharing/tests/permissions.php
+++ b/apps/files_sharing/tests/permissions.php
@@ -61,7 +61,7 @@ class Test_Files_Sharing_Permissions extends OCA\Files_sharing\Tests\TestCase {
*/
private $ownerCache;
- function setUp() {
+ protected function setUp() {
parent::setUp();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -99,7 +99,7 @@ class Test_Files_Sharing_Permissions extends OCA\Files_sharing\Tests\TestCase {
$this->sharedCacheRestrictedShare = $this->sharedStorageRestrictedShare->getCache();
}
- function tearDown() {
+ protected function tearDown() {
$this->sharedCache->clear();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
diff --git a/apps/files_sharing/tests/proxy.php b/apps/files_sharing/tests/proxy.php
index 68cd81f963a..31acf9b27de 100644
--- a/apps/files_sharing/tests/proxy.php
+++ b/apps/files_sharing/tests/proxy.php
@@ -32,7 +32,7 @@ class Test_Files_Sharing_Proxy extends OCA\Files_sharing\Tests\TestCase {
private static $tempStorage;
- function setUp() {
+ protected function setUp() {
parent::setUp();
// load proxies
@@ -53,7 +53,7 @@ class Test_Files_Sharing_Proxy extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->deleteAll($this->folder);
self::$tempStorage = null;
diff --git a/apps/files_sharing/tests/server2server.php b/apps/files_sharing/tests/server2server.php
new file mode 100644
index 00000000000..0400d357b82
--- /dev/null
+++ b/apps/files_sharing/tests/server2server.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * ownCloud - test server-to-server OCS API
+ *
+ * @copyright (c) ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+use OCA\Files_Sharing\Tests\TestCase;
+
+/**
+ * Class Test_Files_Sharing_Api
+ */
+class Test_Files_Sharing_S2S_OCS_API extends TestCase {
+
+ const TEST_FOLDER_NAME = '/folder_share_api_test';
+
+ private $s2s;
+
+ protected function setUp() {
+ parent::setUp();
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ \OCP\Share::registerBackend('test', 'Test_Share_Backend');
+
+ $config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $certificateManager = $this->getMock('\OCP\ICertificateManager');
+ $httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper')
+ ->setConstructorArgs(array($config, $certificateManager))
+ ->getMock();
+ $httpHelperMock->expects($this->any())->method('post')->with($this->anything())->will($this->returnValue(true));
+
+ $this->registerHttpHelper($httpHelperMock);
+
+ $this->s2s = new \OCA\Files_Sharing\API\Server2Server();
+ }
+
+ protected function tearDown() {
+ $query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share_external`');
+ $query->execute();
+
+ $this->restoreHttpHelper();
+
+ parent::tearDown();
+ }
+
+ /**
+ * Register an http helper mock for testing purposes.
+ * @param $httpHelper http helper mock
+ */
+ private function registerHttpHelper($httpHelper) {
+ $this->oldHttpHelper = \OC::$server->query('HTTPHelper');
+ \OC::$server->registerService('HTTPHelper', function ($c) use ($httpHelper) {
+ return $httpHelper;
+ });
+ }
+
+ /**
+ * Restore the original http helper
+ */
+ private function restoreHttpHelper() {
+ $oldHttpHelper = $this->oldHttpHelper;
+ \OC::$server->registerService('HTTPHelper', function ($c) use ($oldHttpHelper) {
+ return $oldHttpHelper;
+ });
+ }
+
+ /**
+ * @medium
+ */
+ function testCreateShare() {
+ // simulate a post request
+ $_POST['remote'] = 'localhost';
+ $_POST['token'] = 'token';
+ $_POST['name'] = 'name';
+ $_POST['owner'] = 'owner';
+ $_POST['shareWith'] = self::TEST_FILES_SHARING_API_USER2;
+ $_POST['remoteId'] = 1;
+
+ $result = $this->s2s->createShare(null);
+
+ $this->assertTrue($result->succeeded());
+
+ $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share_external` WHERE `remote_id` = ?');
+ $result = $query->execute(array('1'));
+ $data = $result->fetchRow();
+
+ $this->assertSame('localhost', $data['remote']);
+ $this->assertSame('token', $data['share_token']);
+ $this->assertSame('/name', $data['name']);
+ $this->assertSame('owner', $data['owner']);
+ $this->assertSame(self::TEST_FILES_SHARING_API_USER2, $data['user']);
+ $this->assertSame(1, (int)$data['remote_id']);
+ $this->assertSame(0, (int)$data['accepted']);
+ }
+
+
+ function testDeclineShare() {
+ $dummy = \OCP\DB::prepare('
+ INSERT INTO `*PREFIX*share`
+ (`share_type`, `uid_owner`, `item_type`, `item_source`, `item_target`, `file_source`, `file_target`, `permissions`, `stime`, `token`, `share_with`)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ ');
+ $dummy->execute(array(\OCP\Share::SHARE_TYPE_REMOTE, self::TEST_FILES_SHARING_API_USER1, 'test', '1', '/1', '1', '/test.txt', '1', time(), 'token', 'foo@bar'));
+
+ $verify = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share`');
+ $result = $verify->execute();
+ $data = $result->fetchAll();
+ $this->assertSame(1, count($data));
+
+ $_POST['token'] = 'token';
+ $this->s2s->declineShare(array('id' => $data[0]['id']));
+
+ $verify = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share`');
+ $result = $verify->execute();
+ $data = $result->fetchAll();
+ $this->assertEmpty($data);
+ }
+}
diff --git a/apps/files_sharing/tests/share.php b/apps/files_sharing/tests/share.php
index 2b5978f8e57..b8c8b70bd1f 100644
--- a/apps/files_sharing/tests/share.php
+++ b/apps/files_sharing/tests/share.php
@@ -31,7 +31,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
private static $tempStorage;
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = self::TEST_FOLDER_NAME;
@@ -49,7 +49,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
@@ -105,12 +105,12 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$fileinfo = $this->view->getFileInfo($this->filename);
$result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP,
- \Test_Files_Sharing::TEST_FILES_SHARING_API_GROUP1, \OCP\PERMISSION_READ);
+ \Test_Files_Sharing::TEST_FILES_SHARING_API_GROUP1, \OCP\Constants::PERMISSION_READ);
$this->assertTrue($result);
$result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_UPDATE);
+ \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_UPDATE);
$this->assertTrue($result);
@@ -124,7 +124,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->assertSame(1, count($result));
$share = reset($result);
- $this->assertSame(\OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, $share['permissions']);
+ $this->assertSame(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, $share['permissions']);
\OC\Files\Filesystem::rename($this->filename, $this->filename . '-renamed');
@@ -136,7 +136,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->assertSame(1, count($result));
$share = reset($result);
- $this->assertSame(\OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, $share['permissions']);
+ $this->assertSame(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, $share['permissions']);
$this->assertSame($this->filename . '-renamed', $share['file_target']);
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -157,7 +157,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$share = reset($result);
// only the group share permissions should be available now
- $this->assertSame(\OCP\PERMISSION_READ, $share['permissions']);
+ $this->assertSame(\OCP\Constants::PERMISSION_READ, $share['permissions']);
$this->assertSame($this->filename . '-renamed', $share['file_target']);
}
@@ -172,8 +172,8 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$fileinfo = $this->view->getFileInfo($this->filename);
// share the file to group1 (user2 is a member of this group) and explicitely to user2
- \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1, \OCP\PERMISSION_ALL);
- \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1, \OCP\Constants::PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
// user1 should have to shared files
$shares = \OCP\Share::getItemsShared('file');
@@ -203,7 +203,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->assertSame(1, count($shares));
// user1 shares a gain the file directly to user2
- \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
// user2 should see again welcome.txt and the shared file
\Test_Files_Sharing::loginHelper(self::TEST_FILES_SHARING_API_USER2);
@@ -243,7 +243,39 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->assertTrue(\OC\Files\Filesystem::file_exists('/Shared/subfolder/' . $this->folder));
//cleanup
- \OCP\Config::deleteSystemValue('share_folder');
+ \OC::$server->getConfig()->deleteSystemValue('share_folder');
+ }
+
+ function testShareWithGroupUniqueName() {
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ \OC\Files\Filesystem::file_put_contents('test.txt', 'test');
+
+ $fileInfo = \OC\Files\Filesystem::getFileInfo('test.txt');
+
+ $this->assertTrue(
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1, 23)
+ );
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $items = \OCP\Share::getItemsSharedWith('file');
+ $this->assertSame('/test.txt' ,$items[0]['file_target']);
+ $this->assertSame(23, $items[0]['permissions']);
+
+ \OC\Files\Filesystem::rename('test.txt', 'new test.txt');
+
+ $items = \OCP\Share::getItemsSharedWith('file');
+ $this->assertSame('/new test.txt' ,$items[0]['file_target']);
+ $this->assertSame(23, $items[0]['permissions']);
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ \OCP\Share::setPermissions('file', $items[0]['item_source'], $items[0]['share_type'], $items[0]['share_with'], 3);
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $items = \OCP\Share::getItemsSharedWith('file');
+
+ $this->assertSame('/new test.txt' ,$items[0]['file_target']);
+ $this->assertSame(3, $items[0]['permissions']);
}
/**
@@ -271,14 +303,14 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
}
function DataProviderTestFileSharePermissions() {
- $permission1 = \OCP\PERMISSION_ALL;
- $permission3 = \OCP\PERMISSION_READ;
- $permission4 = \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE;
- $permission5 = \OCP\PERMISSION_READ | \OCP\PERMISSION_DELETE;
- $permission6 = \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE | \OCP\PERMISSION_DELETE;
+ $permission1 = \OCP\Constants::PERMISSION_ALL;
+ $permission3 = \OCP\Constants::PERMISSION_READ;
+ $permission4 = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE;
+ $permission5 = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE;
+ $permission6 = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE;
return array(
- array($permission1, \OCP\PERMISSION_ALL & ~\OCP\PERMISSION_DELETE),
+ array($permission1, \OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_DELETE),
array($permission3, $permission3),
array($permission4, $permission4),
array($permission5, $permission3),
diff --git a/apps/files_sharing/tests/sharedmount.php b/apps/files_sharing/tests/sharedmount.php
index e991d381e14..dd66ca05d38 100644
--- a/apps/files_sharing/tests/sharedmount.php
+++ b/apps/files_sharing/tests/sharedmount.php
@@ -25,7 +25,7 @@
*/
class Test_Files_Sharing_Mount extends OCA\Files_sharing\Tests\TestCase {
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = '/folder_share_storage_test';
@@ -40,7 +40,7 @@ class Test_Files_Sharing_Mount extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->filename, "file in subfolder");
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->folder);
$this->view->unlink($this->filename);
@@ -226,6 +226,10 @@ class Test_Files_Sharing_Mount extends OCA\Files_sharing\Tests\TestCase {
}
class DummyTestClassSharedMount extends \OCA\Files_Sharing\SharedMount {
+ public function __construct($storage, $mountpoint, $arguments = null, $loader = null){
+ // noop
+ }
+
public function stripUserFilesPathDummy($path) {
return $this->stripUserFilesPath($path);
}
diff --git a/apps/files_sharing/tests/sharedstorage.php b/apps/files_sharing/tests/sharedstorage.php
index b106add1300..75373244508 100644
--- a/apps/files_sharing/tests/sharedstorage.php
+++ b/apps/files_sharing/tests/sharedstorage.php
@@ -27,7 +27,7 @@ use OCA\Files\Share;
*/
class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = '/folder_share_storage_test';
@@ -42,7 +42,7 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->filename, "file in subfolder");
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->folder);
$this->view->unlink($this->filename);
@@ -197,4 +197,30 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
$this->assertTrue($result);
}
+ function testMountSharesOtherUser() {
+ $folderInfo = $this->view->getFileInfo($this->folder);
+ $fileInfo = $this->view->getFileInfo($this->filename);
+ $rootView = new \OC\Files\View('');
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ // share 2 different files with 2 different users
+ \OCP\Share::shareItem('folder', $folderInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER2, 31);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER3, 31);
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $this->assertTrue($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/' . $this->folder));
+ OC_Hook::emit('OC_Filesystem', 'setup', array('user' => self::TEST_FILES_SHARING_API_USER3, 'user_dir' => \OC_User::getHome(self::TEST_FILES_SHARING_API_USER3)));
+
+ $this->assertTrue($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER3 . '/files/' . $this->filename));
+
+ // make sure we didn't double setup shares for user 2 or mounted the shares for user 3 in user's 2 home
+ $this->assertFalse($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/' . $this->folder .' (2)'));
+ $this->assertFalse($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/' . $this->filename));
+
+ //cleanup
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $this->view->unlink($this->folder);
+ }
}
diff --git a/apps/files_sharing/tests/testcase.php b/apps/files_sharing/tests/testcase.php
index a098feb550d..65fbfac7d1d 100644
--- a/apps/files_sharing/tests/testcase.php
+++ b/apps/files_sharing/tests/testcase.php
@@ -22,6 +22,7 @@
namespace OCA\Files_Sharing\Tests;
+use OC\Files\Filesystem;
use OCA\Files\Share;
/**
@@ -29,7 +30,7 @@ use OCA\Files\Share;
*
* Base class for sharing tests.
*/
-abstract class TestCase extends \PHPUnit_Framework_TestCase {
+abstract class TestCase extends \Test\TestCase {
const TEST_FILES_SHARING_API_USER1 = "test-share-user1";
const TEST_FILES_SHARING_API_USER2 = "test-share-user2";
@@ -48,6 +49,7 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
public $subfolder;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
// remember files_encryption state
self::$stateFilesEncryption = \OC_App::isEnabled('files_encryption');
@@ -65,17 +67,26 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
// create users
- self::loginHelper(self::TEST_FILES_SHARING_API_USER1, true);
- self::loginHelper(self::TEST_FILES_SHARING_API_USER2, true);
- self::loginHelper(self::TEST_FILES_SHARING_API_USER3, true);
+ $backend = new \OC_User_Dummy();
+ \OC_User::useBackend($backend);
+ $backend->createUser(self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER1);
+ $backend->createUser(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER2);
+ $backend->createUser(self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER3);
// create group
- \OC_Group::createGroup(self::TEST_FILES_SHARING_API_GROUP1);
- \OC_Group::addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1);
+ $groupBackend = new \OC_Group_Dummy();
+ $groupBackend->createGroup(self::TEST_FILES_SHARING_API_GROUP1);
+ $groupBackend->createGroup('group');
+ $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER1, 'group');
+ $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group');
+ $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group');
+ $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1);
+ \OC_Group::useBackend($groupBackend);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->assertFalse(\OC_App::isEnabled('files_encryption'));
@@ -86,13 +97,14 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
$this->view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
}
- function tearDown() {
+ protected function tearDown() {
$query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share`');
$query->execute();
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
-
// cleanup users
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER1);
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER2);
@@ -107,6 +119,12 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
} else {
\OC_App::disable('files_encryption');
}
+
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ Filesystem::tearDown();
+
+ parent::tearDownAfterClass();
}
/**
diff --git a/apps/files_sharing/tests/update.php b/apps/files_sharing/tests/update.php
deleted file mode 100644
index 583f607d9cb..00000000000
--- a/apps/files_sharing/tests/update.php
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Morris Jobke, Bjoern Schiessle
- * @copyright 2014 Morris Jobke <morris.jobke@gmail.com>
- * 2014 Bjoern Schiessle <schiessle@ownlcoud.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-require_once __DIR__ . '/../appinfo/update.php';
-
-/**
- * Class Test_Files_Sharing_Update
- */
-class Test_Files_Sharing_Update_Routine extends OCA\Files_Sharing\Tests\TestCase {
-
- const TEST_FOLDER_NAME = '/folder_share_api_test';
-
- function setUp() {
- parent::setUp();
-
- $this->folder = self::TEST_FOLDER_NAME;
-
- $this->filename = '/share-api-test.txt';
-
- // save file with content
- $this->view->file_put_contents($this->filename, $this->data);
- $this->view->mkdir($this->folder);
- $this->view->file_put_contents($this->folder . '/' . $this->filename, $this->data);
- }
-
- function tearDown() {
- $this->view->unlink($this->filename);
- $this->view->deleteAll($this->folder);
-
- $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share`');
- $removeShares->execute();
- $removeItems = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache`');
- $removeItems->execute();
-
- parent::tearDown();
- }
-
- /**
- * test update of file permission. The update should remove from all shared
- * files the delete permission
- */
- function testUpdateFilePermissions() {
-
- self::prepareDBUpdateFilePermissions();
- // run the update routine to update the share permission
- updateFilePermissions(2);
-
- // verify results
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share`');
- $result = $query->execute(array());
-
- while ($row = $result->fetchRow()) {
- if ($row['item_type'] === 'file') {
- // for all files the delete permission should be removed
- $this->assertSame(0, (int)$row['permissions'] & \OCP\PERMISSION_DELETE);
- } else {
- // for all other the permission shouldn't change
- $this->assertSame(31, (int)$row['permissions'] & \OCP\PERMISSION_ALL);
- }
- }
-
- // cleanup
- $this->cleanupSharedTable();
- }
-
- /**
- * @medium
- */
- function testRemoveBrokenFileShares() {
-
- $this->prepareFileCache();
-
- // check if there are just 4 shares (see setUp - precondition: empty table)
- $countAllShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share`');
- $result = $countAllShares->execute()->fetchOne();
- $this->assertEquals(4, $result);
-
- // check if there are just 3 file shares (see setUp - precondition: empty table)
- $countFileShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\')');
- $result = $countFileShares->execute()->fetchOne();
- $this->assertEquals(3, $result);
-
- // check if there are just 2 items (see setUp - precondition: empty table)
- $countItems = \OC_DB::prepare('SELECT COUNT(`fileid`) FROM `*PREFIX*filecache`');
- $result = $countItems->execute()->fetchOne();
- $this->assertEquals(2, $result);
-
- // execute actual code which should be tested
- \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate();
-
- // check if there are just 2 shares (one gets killed by the code as there is no filecache entry for this)
- $result = $countFileShares->execute()->fetchOne();
- $this->assertEquals(2, $result);
-
- // check if the share of file '200' is removed as there is no entry for this in filecache table
- $countFileShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `file_source` = 200');
- $result = $countFileShares->execute()->fetchOne();
- $this->assertEquals(0, $result);
-
- // check if there are just 2 items
- $countItems = \OC_DB::prepare('SELECT COUNT(`fileid`) FROM `*PREFIX*filecache`');
- $result = $countItems->execute()->fetchOne();
- $this->assertEquals(2, $result);
-
- // the calendar share survived
- $countOtherShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `item_source` = \'999\'');
- $result = $countOtherShares->execute()->fetchOne();
- $this->assertEquals(1, $result);
- }
-
- /**
- * test update for the removal of the logical "Shared" folder. It should update
- * the file_target for every share and create a physical "Shared" folder for each user
- */
- function testRemoveSharedFolder() {
- self::prepareDB();
- // run the update routine to remove the shared folder and replace it with a real folder
- removeSharedFolder(false, 2);
-
- // verify results
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share`');
- $result = $query->execute(array());
-
- $newDBContent = $result->fetchAll();
-
- foreach ($newDBContent as $row) {
- if ((int)$row['share_type'] === \OCP\Share::SHARE_TYPE_USER) {
- $this->assertSame('/Shared', substr($row['file_target'], 0, strlen('/Shared')));
- } else {
- $this->assertSame('/ShouldNotChange', $row['file_target']);
- }
- }
-
- $shareFolder = \OCP\Config::getSystemValue('share_folder', '/');
-
- $this->assertSame('/Shared', $shareFolder);
-
- // cleanup
- $this->cleanupSharedTable();
- \OCP\Config::deleteSystemValue('share_folder');
-
- }
-
- private function cleanupSharedTable() {
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share`');
- $query->execute();
- }
-
- /**
- * prepare sharing table for testRemoveSharedFolder()
- */
- private function prepareDB() {
- $this->cleanupSharedTable();
- // add items except one - because this is the test case for the broken share table
- $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`share_type`, `item_type`, ' .
- '`share_with`, `uid_owner` , `file_target`) ' .
- 'VALUES (?, ?, ?, ?, ?)');
- $items = array(
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo'),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user2', 'admin', '/foo2'),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user3', 'admin', '/foo3'),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user4', 'admin', '/foo4'),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user4', 'admin', "/foo'4"),
- array(\OCP\Share::SHARE_TYPE_LINK, 'file', 'user1', 'admin', '/ShouldNotChange'),
- array(\OCP\Share::SHARE_TYPE_CONTACT, 'contact', 'admin', 'user1', '/ShouldNotChange'),
-
- );
- foreach($items as $item) {
- // the number is used as path_hash
- $addItems->execute($item);
- }
- }
-
- /**
- * prepare sharing table for testUpdateFilePermissions()
- */
- private function prepareDBUpdateFilePermissions() {
- $this->cleanupSharedTable();
- // add items except one - because this is the test case for the broken share table
- $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`share_type`, `item_type`, ' .
- '`share_with`, `uid_owner` , `file_target`, `permissions`) ' .
- 'VALUES (?, ?, ?, ?, ?, ?)');
- $items = array(
- array(\OCP\Share::SHARE_TYPE_LINK, 'file', 'user1', 'admin', '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_CONTACT, 'contact', 'admin', 'user1', '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user4', 'admin', '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user3', 'admin', '/foo3', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_DELETE),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_READ & \OCP\PERMISSION_DELETE),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_SHARE & \OCP\PERMISSION_UPDATE),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_SHARE & \OCP\PERMISSION_READ & \OCP\PERMISSION_DELETE),
- );
- foreach($items as $item) {
- // the number is used as path_hash
- $addItems->execute($item);
- }
- }
-
- /**
- * prepare file cache for testRemoveBrokenShares()
- */
- private function prepareFileCache() {
- // some previous tests didn't clean up and therefore this has to be done here
- // FIXME: DIRTY HACK - TODO: find tests, that don't clean up and fix it there
- $this->tearDown();
-
- // add items except one - because this is the test case for the broken share table
- $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (`storage`, `path_hash`, ' .
- '`parent`, `mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`) ' .
- 'VALUES (1, ?, 1, 1, 1, 1, 1, 1)');
- $items = array(1, 3);
- $fileIds = array();
- foreach($items as $item) {
- // the number is used as path_hash
- $addItems->execute(array($item));
- $fileIds[] = \OC_DB::insertId('*PREFIX*filecache');
- }
-
- $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`file_source`, `item_type`, `uid_owner`) VALUES (?, \'file\', 1)');
- // the number is used as item_source
- $addShares->execute(array($fileIds[0]));
- $addShares->execute(array(200)); // id of "deleted" file
- $addShares->execute(array($fileIds[1]));
-
- // add a few unrelated shares, calendar share that must be left untouched
- $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_source`, `item_type`, `uid_owner`) VALUES (?, \'calendar\', 1)');
- // the number is used as item_source
- $addShares->execute(array(999));
- }
-
-}
diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php
index 07349c1334d..bc8deaf19b0 100644
--- a/apps/files_sharing/tests/updater.php
+++ b/apps/files_sharing/tests/updater.php
@@ -20,7 +20,6 @@
*
*/
-require_once __DIR__ . '/../appinfo/update.php';
/**
* Class Test_Files_Sharing_Updater
@@ -34,7 +33,7 @@ class Test_Files_Sharing_Updater extends OCA\Files_sharing\Tests\TestCase {
\OCA\Files_Sharing\Helper::registerHooks();
}
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = self::TEST_FOLDER_NAME;
@@ -47,7 +46,7 @@ class Test_Files_Sharing_Updater extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . '/' . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
diff --git a/apps/files_sharing/tests/watcher.php b/apps/files_sharing/tests/watcher.php
index 67f55394ae8..254b30c6470 100644
--- a/apps/files_sharing/tests/watcher.php
+++ b/apps/files_sharing/tests/watcher.php
@@ -42,7 +42,7 @@ class Test_Files_Sharing_Watcher extends OCA\Files_sharing\Tests\TestCase {
*/
private $sharedCache;
- function setUp() {
+ protected function setUp() {
parent::setUp();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -71,7 +71,7 @@ class Test_Files_Sharing_Watcher extends OCA\Files_sharing\Tests\TestCase {
$this->sharedCache = $this->sharedStorage->getCache();
}
- function tearDown() {
+ protected function tearDown() {
$this->sharedCache->clear();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php
index 7df52da6314..0e2cbaa529f 100644
--- a/apps/files_trashbin/appinfo/app.php
+++ b/apps/files_trashbin/appinfo/app.php
@@ -3,8 +3,6 @@ $l = \OC::$server->getL10N('files_trashbin');
OCP\Util::addTranslations('files_trashbin');
-OC::$CLASSPATH['OCA\Files_Trashbin\Exceptions\CopyRecursiveException'] = 'files_trashbin/lib/exceptions.php';
-
// register hooks
\OCA\Files_Trashbin\Trashbin::registerHooks();
diff --git a/apps/files_trashbin/appinfo/routes.php b/apps/files_trashbin/appinfo/routes.php
index da268f4fdfd..56dbf382735 100644
--- a/apps/files_trashbin/appinfo/routes.php
+++ b/apps/files_trashbin/appinfo/routes.php
@@ -13,3 +13,7 @@ $this->create('files_trashbin_ajax_list', 'ajax/list.php')
->actionInclude('files_trashbin/ajax/list.php');
$this->create('files_trashbin_ajax_undelete', 'ajax/undelete.php')
->actionInclude('files_trashbin/ajax/undelete.php');
+
+
+// Register with the capabilities API
+\OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Trashbin\Capabilities', 'getCapabilities'), 'files_trashbin', \OC_API::USER_AUTH);
diff --git a/apps/files_trashbin/js/app.js b/apps/files_trashbin/js/app.js
index 376ee7b01ca..c5de08d5922 100644
--- a/apps/files_trashbin/js/app.js
+++ b/apps/files_trashbin/js/app.js
@@ -8,7 +8,13 @@
*
*/
+/**
+ * @namespace OCA.Trashbin
+ */
OCA.Trashbin = {};
+/**
+ * @namespace OCA.Trashbin.App
+ */
OCA.Trashbin.App = {
_initialized: false,
@@ -51,21 +57,35 @@ OCA.Trashbin.App = {
);
}, t('files_trashbin', 'Restore'));
- fileActions.register('all', 'Delete', OC.PERMISSION_READ, function() {
- return OC.imagePath('core', 'actions/delete');
- }, function(filename, context) {
- var fileList = context.fileList;
- $('.tipsy').remove();
- var tr = fileList.findFileEl(filename);
- var deleteAction = tr.children("td.date").children(".action.delete");
- deleteAction.removeClass('icon-delete').addClass('icon-loading-small');
- fileList.disableActions();
- $.post(OC.filePath('files_trashbin', 'ajax', 'delete.php'), {
- files: JSON.stringify([filename]),
- dir: fileList.getCurrentDirectory()
- },
- _.bind(fileList._removeCallback, fileList)
- );
+ fileActions.registerAction({
+ name: 'Delete',
+ displayName: '',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ icon: function() {
+ return OC.imagePath('core', 'actions/delete');
+ },
+ render: function(actionSpec, isDefault, context) {
+ var $actionLink = fileActions._makeActionLink(actionSpec, context);
+ $actionLink.attr('original-title', t('files', 'Delete permanently'));
+ $actionLink.children('img').attr('alt', t('files', 'Delete permanently'));
+ context.$file.find('td:last').append($actionLink);
+ return $actionLink;
+ },
+ actionHandler: function(filename, context) {
+ var fileList = context.fileList;
+ $('.tipsy').remove();
+ var tr = fileList.findFileEl(filename);
+ var deleteAction = tr.children("td.date").children(".action.delete");
+ deleteAction.removeClass('icon-delete').addClass('icon-loading-small');
+ fileList.disableActions();
+ $.post(OC.filePath('files_trashbin', 'ajax', 'delete.php'), {
+ files: JSON.stringify([filename]),
+ dir: fileList.getCurrentDirectory()
+ },
+ _.bind(fileList._removeCallback, fileList)
+ );
+ }
});
return fileActions;
}
diff --git a/apps/files_trashbin/js/filelist.js b/apps/files_trashbin/js/filelist.js
index b8688d89765..71b63721897 100644
--- a/apps/files_trashbin/js/filelist.js
+++ b/apps/files_trashbin/js/filelist.js
@@ -14,8 +14,8 @@
* Convert a file name in the format filename.d12345 to the real file name.
* This will use basename.
* The name will not be changed if it has no ".d12345" suffix.
- * @param name file name
- * @return converted file name
+ * @param {String} name file name
+ * @return {String} converted file name
*/
function getDeletedFileName(name) {
name = OC.basename(name);
@@ -26,13 +26,26 @@
return name;
}
+ /**
+ * @class OCA.Trashbin.FileList
+ * @augments OCA.Files.FileList
+ * @classdesc List of deleted files
+ *
+ * @param $el container element with existing markup for the #controls
+ * and a table
+ * @param [options] map of options
+ */
var FileList = function($el, options) {
this.initialize($el, options);
};
- FileList.prototype = _.extend({}, OCA.Files.FileList.prototype, {
+ FileList.prototype = _.extend({}, OCA.Files.FileList.prototype,
+ /** @lends OCA.Trashbin.FileList.prototype */ {
id: 'trashbin',
appName: t('files_trashbin', 'Deleted files'),
+ /**
+ * @private
+ */
initialize: function() {
var result = OCA.Files.FileList.prototype.initialize.apply(this, arguments);
this.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this));
@@ -51,6 +64,7 @@
return parts;
};
+ OC.Plugins.attach('OCA.Trashbin.FileList', this);
return result;
},
@@ -255,6 +269,10 @@
updateStorageStatistics: function() {
// no op because the trashbin doesn't have
// storage info like free space / used space
+ },
+
+ isSelectedDeletable: function() {
+ return true;
}
});
diff --git a/apps/files_trashbin/l10n/af_ZA.js b/apps/files_trashbin/l10n/af_ZA.js
new file mode 100644
index 00000000000..bde70775250
--- /dev/null
+++ b/apps/files_trashbin/l10n/af_ZA.js
@@ -0,0 +1,6 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Error" : "Fout"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/af_ZA.json b/apps/files_trashbin/l10n/af_ZA.json
new file mode 100644
index 00000000000..0ed511058ba
--- /dev/null
+++ b/apps/files_trashbin/l10n/af_ZA.json
@@ -0,0 +1,4 @@
+{ "translations": {
+ "Error" : "Fout"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/ar.js b/apps/files_trashbin/l10n/ar.js
index 549cac51433..bd6a6ef89d9 100644
--- a/apps/files_trashbin/l10n/ar.js
+++ b/apps/files_trashbin/l10n/ar.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "تعذّر استرجاع %s ",
"Deleted files" : "حذف الملفات",
"Restore" : "استعيد",
+ "Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"restored" : "تمت الاستعادة",
- "Nothing in here. Your trash bin is empty!" : "لا يوجد شيء هنا. سلة المهملات خاليه.",
"Name" : "اسم",
"Deleted" : "تم الحذف",
"Delete" : "إلغاء"
diff --git a/apps/files_trashbin/l10n/ar.json b/apps/files_trashbin/l10n/ar.json
index 2c34afb3781..4df828c0843 100644
--- a/apps/files_trashbin/l10n/ar.json
+++ b/apps/files_trashbin/l10n/ar.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "تعذّر استرجاع %s ",
"Deleted files" : "حذف الملفات",
"Restore" : "استعيد",
+ "Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"restored" : "تمت الاستعادة",
- "Nothing in here. Your trash bin is empty!" : "لا يوجد شيء هنا. سلة المهملات خاليه.",
"Name" : "اسم",
"Deleted" : "تم الحذف",
"Delete" : "إلغاء"
diff --git a/apps/files_trashbin/l10n/ast.js b/apps/files_trashbin/l10n/ast.js
index 647602bf46b..804814b5892 100644
--- a/apps/files_trashbin/l10n/ast.js
+++ b/apps/files_trashbin/l10n/ast.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Nun pudo restaurase %s",
"Deleted files" : "Ficheros desaniciaos",
"Restore" : "Restaurar",
+ "Delete permanently" : "Desaniciar dafechu",
"Error" : "Fallu",
"restored" : "recuperóse",
- "Nothing in here. Your trash bin is empty!" : "Nun hai un res equí. La papelera ta balera!",
"Name" : "Nome",
"Deleted" : "Desaniciáu",
"Delete" : "Desaniciar"
diff --git a/apps/files_trashbin/l10n/ast.json b/apps/files_trashbin/l10n/ast.json
index 9530d37871e..47b21cdec4d 100644
--- a/apps/files_trashbin/l10n/ast.json
+++ b/apps/files_trashbin/l10n/ast.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Nun pudo restaurase %s",
"Deleted files" : "Ficheros desaniciaos",
"Restore" : "Restaurar",
+ "Delete permanently" : "Desaniciar dafechu",
"Error" : "Fallu",
"restored" : "recuperóse",
- "Nothing in here. Your trash bin is empty!" : "Nun hai un res equí. La papelera ta balera!",
"Name" : "Nome",
"Deleted" : "Desaniciáu",
"Delete" : "Desaniciar"
diff --git a/apps/files_trashbin/l10n/az.js b/apps/files_trashbin/l10n/az.js
index 515abea51c2..3a3f779a9f5 100644
--- a/apps/files_trashbin/l10n/az.js
+++ b/apps/files_trashbin/l10n/az.js
@@ -7,7 +7,6 @@ OC.L10N.register(
"Restore" : "Geri qaytar",
"Error" : "Səhv",
"restored" : "geriqaytarılıb",
- "Nothing in here. Your trash bin is empty!" : "Burda heçnə yoxdur. Sizin zibil qutusu boşdur!",
"Name" : "Ad",
"Deleted" : "Silinib",
"Delete" : "Sil"
diff --git a/apps/files_trashbin/l10n/az.json b/apps/files_trashbin/l10n/az.json
index 4c7f63028e2..4400b23d39a 100644
--- a/apps/files_trashbin/l10n/az.json
+++ b/apps/files_trashbin/l10n/az.json
@@ -5,7 +5,6 @@
"Restore" : "Geri qaytar",
"Error" : "Səhv",
"restored" : "geriqaytarılıb",
- "Nothing in here. Your trash bin is empty!" : "Burda heçnə yoxdur. Sizin zibil qutusu boşdur!",
"Name" : "Ad",
"Deleted" : "Silinib",
"Delete" : "Sil"
diff --git a/apps/files_trashbin/l10n/bg_BG.js b/apps/files_trashbin/l10n/bg_BG.js
index f910190faf1..eae24b14a1b 100644
--- a/apps/files_trashbin/l10n/bg_BG.js
+++ b/apps/files_trashbin/l10n/bg_BG.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Неуспешно възтановяване на %s.",
"Deleted files" : "Изтрити файлове",
"Restore" : "Възстановяви",
+ "Delete permanently" : "Изтрий завинаги",
"Error" : "Грешка",
"restored" : "възстановено",
- "Nothing in here. Your trash bin is empty!" : "Няма нищо. Кошчето е празно!",
"Name" : "Име",
"Deleted" : "Изтрито",
"Delete" : "Изтрий"
diff --git a/apps/files_trashbin/l10n/bg_BG.json b/apps/files_trashbin/l10n/bg_BG.json
index 1d8cb72dc2a..2e83d97304c 100644
--- a/apps/files_trashbin/l10n/bg_BG.json
+++ b/apps/files_trashbin/l10n/bg_BG.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Неуспешно възтановяване на %s.",
"Deleted files" : "Изтрити файлове",
"Restore" : "Възстановяви",
+ "Delete permanently" : "Изтрий завинаги",
"Error" : "Грешка",
"restored" : "възстановено",
- "Nothing in here. Your trash bin is empty!" : "Няма нищо. Кошчето е празно!",
"Name" : "Име",
"Deleted" : "Изтрито",
"Delete" : "Изтрий"
diff --git a/apps/files_trashbin/l10n/bn_BD.js b/apps/files_trashbin/l10n/bn_BD.js
index 632b387d3b6..6f6626b71cc 100644
--- a/apps/files_trashbin/l10n/bn_BD.js
+++ b/apps/files_trashbin/l10n/bn_BD.js
@@ -7,7 +7,6 @@ OC.L10N.register(
"Restore" : "ফিরিয়ে দাও",
"Error" : "সমস্যা",
"restored" : "পূণঃসংরক্ষিত",
- "Nothing in here. Your trash bin is empty!" : "এখানে কিছু নেই। আপনার ট্র্যাসবিন শুন্য",
"Name" : "নাম",
"Deleted" : "মুছে ফেলা",
"Delete" : "মুছে"
diff --git a/apps/files_trashbin/l10n/bn_BD.json b/apps/files_trashbin/l10n/bn_BD.json
index 9d0575766a9..affc277fcda 100644
--- a/apps/files_trashbin/l10n/bn_BD.json
+++ b/apps/files_trashbin/l10n/bn_BD.json
@@ -5,7 +5,6 @@
"Restore" : "ফিরিয়ে দাও",
"Error" : "সমস্যা",
"restored" : "পূণঃসংরক্ষিত",
- "Nothing in here. Your trash bin is empty!" : "এখানে কিছু নেই। আপনার ট্র্যাসবিন শুন্য",
"Name" : "নাম",
"Deleted" : "মুছে ফেলা",
"Delete" : "মুছে"
diff --git a/apps/files_trashbin/l10n/bn_IN.js b/apps/files_trashbin/l10n/bn_IN.js
index eacbbbc76d6..5943177a923 100644
--- a/apps/files_trashbin/l10n/bn_IN.js
+++ b/apps/files_trashbin/l10n/bn_IN.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "%s পুনরুদ্ধার করা যায়নি",
"Deleted files" : "ফাইলস মুছে ফেলা হয়েছে",
"Restore" : "পুনরুদ্ধার",
+ "Delete permanently" : "স্থায়ীভাবে মুছে দিন",
"Error" : "ভুল",
"restored" : "পুনরুদ্ধার করা হয়েছে",
- "Nothing in here. Your trash bin is empty!" : "কিছুই নেই এখানে।আপনার ট্র্যাশ বিন খালি!",
"Name" : "নাম",
"Deleted" : "মুছে ফেলা হয়েছে",
"Delete" : "মুছে ফেলা"
diff --git a/apps/files_trashbin/l10n/bn_IN.json b/apps/files_trashbin/l10n/bn_IN.json
index 74a8ca13388..45a24ee7675 100644
--- a/apps/files_trashbin/l10n/bn_IN.json
+++ b/apps/files_trashbin/l10n/bn_IN.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "%s পুনরুদ্ধার করা যায়নি",
"Deleted files" : "ফাইলস মুছে ফেলা হয়েছে",
"Restore" : "পুনরুদ্ধার",
+ "Delete permanently" : "স্থায়ীভাবে মুছে দিন",
"Error" : "ভুল",
"restored" : "পুনরুদ্ধার করা হয়েছে",
- "Nothing in here. Your trash bin is empty!" : "কিছুই নেই এখানে।আপনার ট্র্যাশ বিন খালি!",
"Name" : "নাম",
"Deleted" : "মুছে ফেলা হয়েছে",
"Delete" : "মুছে ফেলা"
diff --git a/apps/files_trashbin/l10n/bs.js b/apps/files_trashbin/l10n/bs.js
index 70b584f2951..0378a76f855 100644
--- a/apps/files_trashbin/l10n/bs.js
+++ b/apps/files_trashbin/l10n/bs.js
@@ -1,6 +1,10 @@
OC.L10N.register(
"files_trashbin",
{
- "Name" : "Ime"
+ "Restore" : "Obnovi",
+ "Error" : "Greška",
+ "Select all" : "Označi sve",
+ "Name" : "Ime",
+ "Delete" : "Izbriši"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_trashbin/l10n/bs.json b/apps/files_trashbin/l10n/bs.json
index b91bf025992..6f222ca37af 100644
--- a/apps/files_trashbin/l10n/bs.json
+++ b/apps/files_trashbin/l10n/bs.json
@@ -1,4 +1,8 @@
{ "translations": {
- "Name" : "Ime"
+ "Restore" : "Obnovi",
+ "Error" : "Greška",
+ "Select all" : "Označi sve",
+ "Name" : "Ime",
+ "Delete" : "Izbriši"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/ca.js b/apps/files_trashbin/l10n/ca.js
index 7a31c5c2d9d..450358c851f 100644
--- a/apps/files_trashbin/l10n/ca.js
+++ b/apps/files_trashbin/l10n/ca.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "No s'ha pogut restaurar %s",
"Deleted files" : "Fitxers esborrats",
"Restore" : "Recupera",
+ "Delete permanently" : "Esborra permanentment",
"Error" : "Error",
"restored" : "restaurat",
- "Nothing in here. Your trash bin is empty!" : "La paperera està buida!",
"Name" : "Nom",
"Deleted" : "Eliminat",
"Delete" : "Esborra"
diff --git a/apps/files_trashbin/l10n/ca.json b/apps/files_trashbin/l10n/ca.json
index 586b14d0c57..eb11197b630 100644
--- a/apps/files_trashbin/l10n/ca.json
+++ b/apps/files_trashbin/l10n/ca.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "No s'ha pogut restaurar %s",
"Deleted files" : "Fitxers esborrats",
"Restore" : "Recupera",
+ "Delete permanently" : "Esborra permanentment",
"Error" : "Error",
"restored" : "restaurat",
- "Nothing in here. Your trash bin is empty!" : "La paperera està buida!",
"Name" : "Nom",
"Deleted" : "Eliminat",
"Delete" : "Esborra"
diff --git a/apps/files_trashbin/l10n/cs_CZ.js b/apps/files_trashbin/l10n/cs_CZ.js
index 3f8ddfc2235..68aa7789d75 100644
--- a/apps/files_trashbin/l10n/cs_CZ.js
+++ b/apps/files_trashbin/l10n/cs_CZ.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Nelze obnovit %s",
"Deleted files" : "Odstraněné soubory",
"Restore" : "Obnovit",
+ "Delete permanently" : "Trvale odstranit",
"Error" : "Chyba",
"restored" : "obnoveno",
- "Nothing in here. Your trash bin is empty!" : "Žádný obsah. Váš koš je prázdný.",
+ "No deleted files" : "Žádné smazané soubory",
+ "You will be able to recover deleted files from here" : "Odtud budete moci obnovovat odstraněné soubory",
+ "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
+ "Select all" : "Vybrat vše",
"Name" : "Název",
"Deleted" : "Smazáno",
"Delete" : "Smazat"
diff --git a/apps/files_trashbin/l10n/cs_CZ.json b/apps/files_trashbin/l10n/cs_CZ.json
index 628ab047ba8..1af12b47b66 100644
--- a/apps/files_trashbin/l10n/cs_CZ.json
+++ b/apps/files_trashbin/l10n/cs_CZ.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Nelze obnovit %s",
"Deleted files" : "Odstraněné soubory",
"Restore" : "Obnovit",
+ "Delete permanently" : "Trvale odstranit",
"Error" : "Chyba",
"restored" : "obnoveno",
- "Nothing in here. Your trash bin is empty!" : "Žádný obsah. Váš koš je prázdný.",
+ "No deleted files" : "Žádné smazané soubory",
+ "You will be able to recover deleted files from here" : "Odtud budete moci obnovovat odstraněné soubory",
+ "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
+ "Select all" : "Vybrat vše",
"Name" : "Název",
"Deleted" : "Smazáno",
"Delete" : "Smazat"
diff --git a/apps/files_trashbin/l10n/cy_GB.js b/apps/files_trashbin/l10n/cy_GB.js
index d5ccb0f7415..cd20621625f 100644
--- a/apps/files_trashbin/l10n/cy_GB.js
+++ b/apps/files_trashbin/l10n/cy_GB.js
@@ -5,8 +5,8 @@ OC.L10N.register(
"Couldn't restore %s" : "Methwyd adfer %s",
"Deleted files" : "Ffeiliau ddilewyd",
"Restore" : "Adfer",
+ "Delete permanently" : "Dileu'n barhaol",
"Error" : "Gwall",
- "Nothing in here. Your trash bin is empty!" : "Does dim byd yma. Mae eich bin sbwriel yn wag!",
"Name" : "Enw",
"Deleted" : "Wedi dileu",
"Delete" : "Dileu"
diff --git a/apps/files_trashbin/l10n/cy_GB.json b/apps/files_trashbin/l10n/cy_GB.json
index d82ea580325..0f21da0c56d 100644
--- a/apps/files_trashbin/l10n/cy_GB.json
+++ b/apps/files_trashbin/l10n/cy_GB.json
@@ -3,8 +3,8 @@
"Couldn't restore %s" : "Methwyd adfer %s",
"Deleted files" : "Ffeiliau ddilewyd",
"Restore" : "Adfer",
+ "Delete permanently" : "Dileu'n barhaol",
"Error" : "Gwall",
- "Nothing in here. Your trash bin is empty!" : "Does dim byd yma. Mae eich bin sbwriel yn wag!",
"Name" : "Enw",
"Deleted" : "Wedi dileu",
"Delete" : "Dileu"
diff --git a/apps/files_trashbin/l10n/da.js b/apps/files_trashbin/l10n/da.js
index 2d24f3749f6..151ff2bb56a 100644
--- a/apps/files_trashbin/l10n/da.js
+++ b/apps/files_trashbin/l10n/da.js
@@ -5,9 +5,12 @@ OC.L10N.register(
"Couldn't restore %s" : "Kunne ikke gendanne %s",
"Deleted files" : "Slettede filer",
"Restore" : "Gendan",
+ "Delete permanently" : "Slet permanent",
"Error" : "Fejl",
"restored" : "Gendannet",
- "Nothing in here. Your trash bin is empty!" : "Intet at se her. Din papirkurv er tom!",
+ "No deleted files" : "Ingen slettede filer",
+ "You will be able to recover deleted files from here" : "Du vil kunne gendanne slettede filer herfra",
+ "Select all" : "Vælg alle",
"Name" : "Navn",
"Deleted" : "Slettet",
"Delete" : "Slet"
diff --git a/apps/files_trashbin/l10n/da.json b/apps/files_trashbin/l10n/da.json
index 4fbed5049a9..d3d7d89bd91 100644
--- a/apps/files_trashbin/l10n/da.json
+++ b/apps/files_trashbin/l10n/da.json
@@ -3,9 +3,12 @@
"Couldn't restore %s" : "Kunne ikke gendanne %s",
"Deleted files" : "Slettede filer",
"Restore" : "Gendan",
+ "Delete permanently" : "Slet permanent",
"Error" : "Fejl",
"restored" : "Gendannet",
- "Nothing in here. Your trash bin is empty!" : "Intet at se her. Din papirkurv er tom!",
+ "No deleted files" : "Ingen slettede filer",
+ "You will be able to recover deleted files from here" : "Du vil kunne gendanne slettede filer herfra",
+ "Select all" : "Vælg alle",
"Name" : "Navn",
"Deleted" : "Slettet",
"Delete" : "Slet"
diff --git a/apps/files_trashbin/l10n/de.js b/apps/files_trashbin/l10n/de.js
index 85274258143..96addde03b2 100644
--- a/apps/files_trashbin/l10n/de.js
+++ b/apps/files_trashbin/l10n/de.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Konnte %s nicht wiederherstellen",
"Deleted files" : "Gelöschte Dateien",
"Restore" : "Wiederherstellen",
+ "Delete permanently" : "Endgültig löschen",
"Error" : "Fehler",
"restored" : "Wiederhergestellt",
- "Nothing in here. Your trash bin is empty!" : "Nichts zu löschen, der Papierkorb ist leer!",
+ "No deleted files" : "Keine gelöschten Dateien",
+ "You will be able to recover deleted files from here" : "Du kannst hier gelöschte Dateien wiederherstellen",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
+ "Select all" : "Alle auswählen",
"Name" : "Name",
"Deleted" : "gelöscht",
"Delete" : "Löschen"
diff --git a/apps/files_trashbin/l10n/de.json b/apps/files_trashbin/l10n/de.json
index 16e3cb2ae79..d7b9b07b87e 100644
--- a/apps/files_trashbin/l10n/de.json
+++ b/apps/files_trashbin/l10n/de.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Konnte %s nicht wiederherstellen",
"Deleted files" : "Gelöschte Dateien",
"Restore" : "Wiederherstellen",
+ "Delete permanently" : "Endgültig löschen",
"Error" : "Fehler",
"restored" : "Wiederhergestellt",
- "Nothing in here. Your trash bin is empty!" : "Nichts zu löschen, der Papierkorb ist leer!",
+ "No deleted files" : "Keine gelöschten Dateien",
+ "You will be able to recover deleted files from here" : "Du kannst hier gelöschte Dateien wiederherstellen",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
+ "Select all" : "Alle auswählen",
"Name" : "Name",
"Deleted" : "gelöscht",
"Delete" : "Löschen"
diff --git a/apps/files_trashbin/l10n/de_DE.js b/apps/files_trashbin/l10n/de_DE.js
index 70a428d4c93..c25166efc80 100644
--- a/apps/files_trashbin/l10n/de_DE.js
+++ b/apps/files_trashbin/l10n/de_DE.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Konnte %s nicht wiederherstellen",
"Deleted files" : "Gelöschte Dateien",
"Restore" : "Wiederherstellen",
+ "Delete permanently" : "Endgültig löschen",
"Error" : "Fehler",
"restored" : "Wiederhergestellt",
- "Nothing in here. Your trash bin is empty!" : "Nichts zu löschen, Ihr Papierkorb ist leer!",
+ "No deleted files" : "Keine gelöschten Dateien",
+ "You will be able to recover deleted files from here" : "Sie können hier gelöschte Dateien wiederherstellen",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
+ "Select all" : "Alle auswählen",
"Name" : "Name",
"Deleted" : "Gelöscht",
"Delete" : "Löschen"
diff --git a/apps/files_trashbin/l10n/de_DE.json b/apps/files_trashbin/l10n/de_DE.json
index 497b6c35d55..9f4a895fa16 100644
--- a/apps/files_trashbin/l10n/de_DE.json
+++ b/apps/files_trashbin/l10n/de_DE.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Konnte %s nicht wiederherstellen",
"Deleted files" : "Gelöschte Dateien",
"Restore" : "Wiederherstellen",
+ "Delete permanently" : "Endgültig löschen",
"Error" : "Fehler",
"restored" : "Wiederhergestellt",
- "Nothing in here. Your trash bin is empty!" : "Nichts zu löschen, Ihr Papierkorb ist leer!",
+ "No deleted files" : "Keine gelöschten Dateien",
+ "You will be able to recover deleted files from here" : "Sie können hier gelöschte Dateien wiederherstellen",
+ "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
+ "Select all" : "Alle auswählen",
"Name" : "Name",
"Deleted" : "Gelöscht",
"Delete" : "Löschen"
diff --git a/apps/files_trashbin/l10n/el.js b/apps/files_trashbin/l10n/el.js
index d9902dc8636..f41ab173604 100644
--- a/apps/files_trashbin/l10n/el.js
+++ b/apps/files_trashbin/l10n/el.js
@@ -5,9 +5,11 @@ OC.L10N.register(
"Couldn't restore %s" : "Αδυναμία επαναφοράς %s",
"Deleted files" : "Διεγραμμένα αρχεία",
"Restore" : "Επαναφορά",
+ "Delete permanently" : "Μόνιμη διαγραφή",
"Error" : "Σφάλμα",
"restored" : "επαναφέρθηκαν",
- "Nothing in here. Your trash bin is empty!" : "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!",
+ "No deleted files" : "Κανένα διαγεγραμμένο αρχείο",
+ "Select all" : "Επιλογή όλων",
"Name" : "Όνομα",
"Deleted" : "Διαγραμμένα",
"Delete" : "Διαγραφή"
diff --git a/apps/files_trashbin/l10n/el.json b/apps/files_trashbin/l10n/el.json
index 0004fd7242d..31fcde922b1 100644
--- a/apps/files_trashbin/l10n/el.json
+++ b/apps/files_trashbin/l10n/el.json
@@ -3,9 +3,11 @@
"Couldn't restore %s" : "Αδυναμία επαναφοράς %s",
"Deleted files" : "Διεγραμμένα αρχεία",
"Restore" : "Επαναφορά",
+ "Delete permanently" : "Μόνιμη διαγραφή",
"Error" : "Σφάλμα",
"restored" : "επαναφέρθηκαν",
- "Nothing in here. Your trash bin is empty!" : "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!",
+ "No deleted files" : "Κανένα διαγεγραμμένο αρχείο",
+ "Select all" : "Επιλογή όλων",
"Name" : "Όνομα",
"Deleted" : "Διαγραμμένα",
"Delete" : "Διαγραφή"
diff --git a/apps/files_trashbin/l10n/en_GB.js b/apps/files_trashbin/l10n/en_GB.js
index 7bd7a49b301..e2ff4ac73fb 100644
--- a/apps/files_trashbin/l10n/en_GB.js
+++ b/apps/files_trashbin/l10n/en_GB.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Couldn't restore %s",
"Deleted files" : "Deleted files",
"Restore" : "Restore",
+ "Delete permanently" : "Delete permanently",
"Error" : "Error",
"restored" : "restored",
- "Nothing in here. Your trash bin is empty!" : "Nothing in here. Your recycle bin is empty!",
+ "No deleted files" : "No deleted files",
+ "You will be able to recover deleted files from here" : "You will be able to recover deleted files from here",
+ "No entries found in this folder" : "No entries found in this folder",
+ "Select all" : "Select all",
"Name" : "Name",
"Deleted" : "Deleted",
"Delete" : "Delete"
diff --git a/apps/files_trashbin/l10n/en_GB.json b/apps/files_trashbin/l10n/en_GB.json
index 62603ea26ea..078bca97a49 100644
--- a/apps/files_trashbin/l10n/en_GB.json
+++ b/apps/files_trashbin/l10n/en_GB.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Couldn't restore %s",
"Deleted files" : "Deleted files",
"Restore" : "Restore",
+ "Delete permanently" : "Delete permanently",
"Error" : "Error",
"restored" : "restored",
- "Nothing in here. Your trash bin is empty!" : "Nothing in here. Your recycle bin is empty!",
+ "No deleted files" : "No deleted files",
+ "You will be able to recover deleted files from here" : "You will be able to recover deleted files from here",
+ "No entries found in this folder" : "No entries found in this folder",
+ "Select all" : "Select all",
"Name" : "Name",
"Deleted" : "Deleted",
"Delete" : "Delete"
diff --git a/apps/files_trashbin/l10n/eo.js b/apps/files_trashbin/l10n/eo.js
index ad4d45a98e0..e13281d20eb 100644
--- a/apps/files_trashbin/l10n/eo.js
+++ b/apps/files_trashbin/l10n/eo.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Ne povis restaŭriĝi %s",
"Deleted files" : "Forigitaj dosieroj",
"Restore" : "Restaŭri",
+ "Delete permanently" : "Forigi por ĉiam",
"Error" : "Eraro",
"restored" : "restaŭrita",
- "Nothing in here. Your trash bin is empty!" : "Nenio estas ĉi tie. Via rubujo malplenas!",
"Name" : "Nomo",
"Deleted" : "Forigita",
"Delete" : "Forigi"
diff --git a/apps/files_trashbin/l10n/eo.json b/apps/files_trashbin/l10n/eo.json
index 3faebfb80d6..7c60e595444 100644
--- a/apps/files_trashbin/l10n/eo.json
+++ b/apps/files_trashbin/l10n/eo.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Ne povis restaŭriĝi %s",
"Deleted files" : "Forigitaj dosieroj",
"Restore" : "Restaŭri",
+ "Delete permanently" : "Forigi por ĉiam",
"Error" : "Eraro",
"restored" : "restaŭrita",
- "Nothing in here. Your trash bin is empty!" : "Nenio estas ĉi tie. Via rubujo malplenas!",
"Name" : "Nomo",
"Deleted" : "Forigita",
"Delete" : "Forigi"
diff --git a/apps/files_trashbin/l10n/es.js b/apps/files_trashbin/l10n/es.js
index 2df71c43b31..89fcf338118 100644
--- a/apps/files_trashbin/l10n/es.js
+++ b/apps/files_trashbin/l10n/es.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "No se puede restaurar %s",
"Deleted files" : "Archivos eliminados",
"Restore" : "Recuperar",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Error",
"restored" : "recuperado",
- "Nothing in here. Your trash bin is empty!" : "No hay nada aquí. ¡Tu papelera esta vacía!",
+ "No deleted files" : "No hay archivos eliminados",
+ "You will be able to recover deleted files from here" : "Será posible recuperar archivos eliminados desde aquí",
+ "No entries found in this folder" : "No hay entradas en esta carpeta",
+ "Select all" : "Seleccionar todo",
"Name" : "Nombre",
"Deleted" : "Eliminado",
"Delete" : "Eliminar"
diff --git a/apps/files_trashbin/l10n/es.json b/apps/files_trashbin/l10n/es.json
index b37ab9647c8..ff957bf7064 100644
--- a/apps/files_trashbin/l10n/es.json
+++ b/apps/files_trashbin/l10n/es.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "No se puede restaurar %s",
"Deleted files" : "Archivos eliminados",
"Restore" : "Recuperar",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Error",
"restored" : "recuperado",
- "Nothing in here. Your trash bin is empty!" : "No hay nada aquí. ¡Tu papelera esta vacía!",
+ "No deleted files" : "No hay archivos eliminados",
+ "You will be able to recover deleted files from here" : "Será posible recuperar archivos eliminados desde aquí",
+ "No entries found in this folder" : "No hay entradas en esta carpeta",
+ "Select all" : "Seleccionar todo",
"Name" : "Nombre",
"Deleted" : "Eliminado",
"Delete" : "Eliminar"
diff --git a/apps/files_trashbin/l10n/es_AR.js b/apps/files_trashbin/l10n/es_AR.js
index e49dae4688a..b9566c17f1f 100644
--- a/apps/files_trashbin/l10n/es_AR.js
+++ b/apps/files_trashbin/l10n/es_AR.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "No se pudo restaurar %s",
"Deleted files" : "Archivos borrados",
"Restore" : "Recuperar",
+ "Delete permanently" : "Borrar permanentemente",
"Error" : "Error",
"restored" : "recuperado",
- "Nothing in here. Your trash bin is empty!" : "No hay nada acá. ¡La papelera está vacía!",
"Name" : "Nombre",
"Deleted" : "Borrado",
"Delete" : "Borrar"
diff --git a/apps/files_trashbin/l10n/es_AR.json b/apps/files_trashbin/l10n/es_AR.json
index 793a1e8b172..c3de7177ef6 100644
--- a/apps/files_trashbin/l10n/es_AR.json
+++ b/apps/files_trashbin/l10n/es_AR.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "No se pudo restaurar %s",
"Deleted files" : "Archivos borrados",
"Restore" : "Recuperar",
+ "Delete permanently" : "Borrar permanentemente",
"Error" : "Error",
"restored" : "recuperado",
- "Nothing in here. Your trash bin is empty!" : "No hay nada acá. ¡La papelera está vacía!",
"Name" : "Nombre",
"Deleted" : "Borrado",
"Delete" : "Borrar"
diff --git a/apps/files_trashbin/l10n/es_MX.js b/apps/files_trashbin/l10n/es_MX.js
index 2df71c43b31..0a53f9cffdf 100644
--- a/apps/files_trashbin/l10n/es_MX.js
+++ b/apps/files_trashbin/l10n/es_MX.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "No se puede restaurar %s",
"Deleted files" : "Archivos eliminados",
"Restore" : "Recuperar",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Error",
"restored" : "recuperado",
- "Nothing in here. Your trash bin is empty!" : "No hay nada aquí. ¡Tu papelera esta vacía!",
"Name" : "Nombre",
"Deleted" : "Eliminado",
"Delete" : "Eliminar"
diff --git a/apps/files_trashbin/l10n/es_MX.json b/apps/files_trashbin/l10n/es_MX.json
index b37ab9647c8..56dce90e07d 100644
--- a/apps/files_trashbin/l10n/es_MX.json
+++ b/apps/files_trashbin/l10n/es_MX.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "No se puede restaurar %s",
"Deleted files" : "Archivos eliminados",
"Restore" : "Recuperar",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Error",
"restored" : "recuperado",
- "Nothing in here. Your trash bin is empty!" : "No hay nada aquí. ¡Tu papelera esta vacía!",
"Name" : "Nombre",
"Deleted" : "Eliminado",
"Delete" : "Eliminar"
diff --git a/apps/files_trashbin/l10n/et_EE.js b/apps/files_trashbin/l10n/et_EE.js
index 3067589bd9b..58da11098a7 100644
--- a/apps/files_trashbin/l10n/et_EE.js
+++ b/apps/files_trashbin/l10n/et_EE.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "%s ei saa taastada",
"Deleted files" : "Kustutatud failid",
"Restore" : "Taasta",
+ "Delete permanently" : "Kustuta jäädavalt",
"Error" : "Viga",
"restored" : "taastatud",
- "Nothing in here. Your trash bin is empty!" : "Siin pole midagi. Sinu prügikast on tühi!",
"Name" : "Nimi",
"Deleted" : "Kustutatud",
"Delete" : "Kustuta"
diff --git a/apps/files_trashbin/l10n/et_EE.json b/apps/files_trashbin/l10n/et_EE.json
index 2e6d239f421..6f5a83792b7 100644
--- a/apps/files_trashbin/l10n/et_EE.json
+++ b/apps/files_trashbin/l10n/et_EE.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "%s ei saa taastada",
"Deleted files" : "Kustutatud failid",
"Restore" : "Taasta",
+ "Delete permanently" : "Kustuta jäädavalt",
"Error" : "Viga",
"restored" : "taastatud",
- "Nothing in here. Your trash bin is empty!" : "Siin pole midagi. Sinu prügikast on tühi!",
"Name" : "Nimi",
"Deleted" : "Kustutatud",
"Delete" : "Kustuta"
diff --git a/apps/files_trashbin/l10n/eu.js b/apps/files_trashbin/l10n/eu.js
index 747175d830c..9371bddcd88 100644
--- a/apps/files_trashbin/l10n/eu.js
+++ b/apps/files_trashbin/l10n/eu.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Ezin izan da %s berreskuratu",
"Deleted files" : "Ezabatutako fitxategiak",
"Restore" : "Berrezarri",
+ "Delete permanently" : "Ezabatu betirako",
"Error" : "Errorea",
"restored" : "Berrezarrita",
- "Nothing in here. Your trash bin is empty!" : "Ez dago ezer ez. Zure zakarrontzia hutsik dago!",
"Name" : "Izena",
"Deleted" : "Ezabatuta",
"Delete" : "Ezabatu"
diff --git a/apps/files_trashbin/l10n/eu.json b/apps/files_trashbin/l10n/eu.json
index f86ba4230ab..46378327f42 100644
--- a/apps/files_trashbin/l10n/eu.json
+++ b/apps/files_trashbin/l10n/eu.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Ezin izan da %s berreskuratu",
"Deleted files" : "Ezabatutako fitxategiak",
"Restore" : "Berrezarri",
+ "Delete permanently" : "Ezabatu betirako",
"Error" : "Errorea",
"restored" : "Berrezarrita",
- "Nothing in here. Your trash bin is empty!" : "Ez dago ezer ez. Zure zakarrontzia hutsik dago!",
"Name" : "Izena",
"Deleted" : "Ezabatuta",
"Delete" : "Ezabatu"
diff --git a/apps/files_trashbin/l10n/fa.js b/apps/files_trashbin/l10n/fa.js
index a87d9a5c113..8dc5f70fd68 100644
--- a/apps/files_trashbin/l10n/fa.js
+++ b/apps/files_trashbin/l10n/fa.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "%s را نمی توان بازگرداند",
"Deleted files" : "فایل های حذف شده",
"Restore" : "بازیابی",
+ "Delete permanently" : "حذف قطعی",
"Error" : "خطا",
"restored" : "بازیابی شد",
- "Nothing in here. Your trash bin is empty!" : "هیچ چیزی اینجا نیست. سطل زباله ی شما خالی است.",
"Name" : "نام",
"Deleted" : "حذف شده",
"Delete" : "حذف"
diff --git a/apps/files_trashbin/l10n/fa.json b/apps/files_trashbin/l10n/fa.json
index 94748c98899..befa84ab15e 100644
--- a/apps/files_trashbin/l10n/fa.json
+++ b/apps/files_trashbin/l10n/fa.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "%s را نمی توان بازگرداند",
"Deleted files" : "فایل های حذف شده",
"Restore" : "بازیابی",
+ "Delete permanently" : "حذف قطعی",
"Error" : "خطا",
"restored" : "بازیابی شد",
- "Nothing in here. Your trash bin is empty!" : "هیچ چیزی اینجا نیست. سطل زباله ی شما خالی است.",
"Name" : "نام",
"Deleted" : "حذف شده",
"Delete" : "حذف"
diff --git a/apps/files_trashbin/l10n/fi.js b/apps/files_trashbin/l10n/fi.js
new file mode 100644
index 00000000000..e3b5a93ead8
--- /dev/null
+++ b/apps/files_trashbin/l10n/fi.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Error" : "Virhe",
+ "Delete" : "Poista"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/fi.json b/apps/files_trashbin/l10n/fi.json
new file mode 100644
index 00000000000..639a5749f28
--- /dev/null
+++ b/apps/files_trashbin/l10n/fi.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "Error" : "Virhe",
+ "Delete" : "Poista"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/fi_FI.js b/apps/files_trashbin/l10n/fi_FI.js
index 1b69bf5c75f..be3fbad301f 100644
--- a/apps/files_trashbin/l10n/fi_FI.js
+++ b/apps/files_trashbin/l10n/fi_FI.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Kohteen %s palautus epäonnistui",
"Deleted files" : "Poistetut tiedostot",
"Restore" : "Palauta",
+ "Delete permanently" : "Poista pysyvästi",
"Error" : "Virhe",
"restored" : "palautettu",
- "Nothing in here. Your trash bin is empty!" : "Tyhjää täynnä! Roskakorissa ei ole mitään.",
+ "No deleted files" : "Ei poistettuja tiedostoja",
+ "You will be able to recover deleted files from here" : "Voit palauttaa poistettuja tiedostoja tätä kautta",
+ "No entries found in this folder" : "Ei kohteita tässä kansiossa",
+ "Select all" : "Valitse kaikki",
"Name" : "Nimi",
"Deleted" : "Poistettu",
"Delete" : "Poista"
diff --git a/apps/files_trashbin/l10n/fi_FI.json b/apps/files_trashbin/l10n/fi_FI.json
index 25b3d71dced..3e22acdf2c9 100644
--- a/apps/files_trashbin/l10n/fi_FI.json
+++ b/apps/files_trashbin/l10n/fi_FI.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Kohteen %s palautus epäonnistui",
"Deleted files" : "Poistetut tiedostot",
"Restore" : "Palauta",
+ "Delete permanently" : "Poista pysyvästi",
"Error" : "Virhe",
"restored" : "palautettu",
- "Nothing in here. Your trash bin is empty!" : "Tyhjää täynnä! Roskakorissa ei ole mitään.",
+ "No deleted files" : "Ei poistettuja tiedostoja",
+ "You will be able to recover deleted files from here" : "Voit palauttaa poistettuja tiedostoja tätä kautta",
+ "No entries found in this folder" : "Ei kohteita tässä kansiossa",
+ "Select all" : "Valitse kaikki",
"Name" : "Nimi",
"Deleted" : "Poistettu",
"Delete" : "Poista"
diff --git a/apps/files_trashbin/l10n/fr.js b/apps/files_trashbin/l10n/fr.js
index ddcdc495de5..ccda19fb69c 100644
--- a/apps/files_trashbin/l10n/fr.js
+++ b/apps/files_trashbin/l10n/fr.js
@@ -5,9 +5,12 @@ OC.L10N.register(
"Couldn't restore %s" : "Impossible de restaurer %s",
"Deleted files" : "Fichiers supprimés",
"Restore" : "Restaurer",
+ "Delete permanently" : "Supprimer de façon définitive",
"Error" : "Erreur",
"restored" : "restauré",
- "Nothing in here. Your trash bin is empty!" : "Il n'y a rien ici. Votre corbeille est vide !",
+ "No deleted files" : "Aucun fichier supprimé",
+ "You will be able to recover deleted files from here" : "Vous pourrez restaurer vos fichiers supprimés ici",
+ "Select all" : "Tout sélectionner",
"Name" : "Nom",
"Deleted" : "Effacé",
"Delete" : "Supprimer"
diff --git a/apps/files_trashbin/l10n/fr.json b/apps/files_trashbin/l10n/fr.json
index bc6cda70713..523e575a958 100644
--- a/apps/files_trashbin/l10n/fr.json
+++ b/apps/files_trashbin/l10n/fr.json
@@ -3,9 +3,12 @@
"Couldn't restore %s" : "Impossible de restaurer %s",
"Deleted files" : "Fichiers supprimés",
"Restore" : "Restaurer",
+ "Delete permanently" : "Supprimer de façon définitive",
"Error" : "Erreur",
"restored" : "restauré",
- "Nothing in here. Your trash bin is empty!" : "Il n'y a rien ici. Votre corbeille est vide !",
+ "No deleted files" : "Aucun fichier supprimé",
+ "You will be able to recover deleted files from here" : "Vous pourrez restaurer vos fichiers supprimés ici",
+ "Select all" : "Tout sélectionner",
"Name" : "Nom",
"Deleted" : "Effacé",
"Delete" : "Supprimer"
diff --git a/apps/files_trashbin/l10n/gl.js b/apps/files_trashbin/l10n/gl.js
index 701c1354dfd..a6ea37031a0 100644
--- a/apps/files_trashbin/l10n/gl.js
+++ b/apps/files_trashbin/l10n/gl.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Non foi posíbel restaurar %s",
"Deleted files" : "Ficheiros eliminados",
"Restore" : "Restabelecer",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Erro",
"restored" : "restaurado",
- "Nothing in here. Your trash bin is empty!" : "Aquí non hai nada. O cesto do lixo está baleiro!",
+ "No deleted files" : "Non hai ficheiros eliminados",
+ "You will be able to recover deleted files from here" : "Poderá recuperar ficheiros borrados de aquí",
+ "No entries found in this folder" : "Non se atoparon entradas neste cartafol",
+ "Select all" : "Seleccionar todo",
"Name" : "Nome",
"Deleted" : "Eliminado",
"Delete" : "Eliminar"
diff --git a/apps/files_trashbin/l10n/gl.json b/apps/files_trashbin/l10n/gl.json
index 74ac40c4f32..da3aa55fa3f 100644
--- a/apps/files_trashbin/l10n/gl.json
+++ b/apps/files_trashbin/l10n/gl.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Non foi posíbel restaurar %s",
"Deleted files" : "Ficheiros eliminados",
"Restore" : "Restabelecer",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Erro",
"restored" : "restaurado",
- "Nothing in here. Your trash bin is empty!" : "Aquí non hai nada. O cesto do lixo está baleiro!",
+ "No deleted files" : "Non hai ficheiros eliminados",
+ "You will be able to recover deleted files from here" : "Poderá recuperar ficheiros borrados de aquí",
+ "No entries found in this folder" : "Non se atoparon entradas neste cartafol",
+ "Select all" : "Seleccionar todo",
"Name" : "Nome",
"Deleted" : "Eliminado",
"Delete" : "Eliminar"
diff --git a/apps/files_trashbin/l10n/he.js b/apps/files_trashbin/l10n/he.js
index ea5d131a9e4..95e5f391151 100644
--- a/apps/files_trashbin/l10n/he.js
+++ b/apps/files_trashbin/l10n/he.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "לא ניתן לשחזר את %s",
"Deleted files" : "קבצים שנמחקו",
"Restore" : "שחזור",
+ "Delete permanently" : "מחיקה לצמיתות",
"Error" : "שגיאה",
"restored" : "שוחזר",
- "Nothing in here. Your trash bin is empty!" : "אין כאן שום דבר. סל המיחזור שלך ריק!",
"Name" : "שם",
"Deleted" : "נמחק",
"Delete" : "מחיקה"
diff --git a/apps/files_trashbin/l10n/he.json b/apps/files_trashbin/l10n/he.json
index d0db85c41b9..68f38e819ff 100644
--- a/apps/files_trashbin/l10n/he.json
+++ b/apps/files_trashbin/l10n/he.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "לא ניתן לשחזר את %s",
"Deleted files" : "קבצים שנמחקו",
"Restore" : "שחזור",
+ "Delete permanently" : "מחיקה לצמיתות",
"Error" : "שגיאה",
"restored" : "שוחזר",
- "Nothing in here. Your trash bin is empty!" : "אין כאן שום דבר. סל המיחזור שלך ריק!",
"Name" : "שם",
"Deleted" : "נמחק",
"Delete" : "מחיקה"
diff --git a/apps/files_trashbin/l10n/hr.js b/apps/files_trashbin/l10n/hr.js
index e05fde1c8a6..de4e0d6a403 100644
--- a/apps/files_trashbin/l10n/hr.js
+++ b/apps/files_trashbin/l10n/hr.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Nije moguće obnoviti %s",
"Deleted files" : "Izbrisane datoteke",
"Restore" : "Obnovite",
+ "Delete permanently" : "Trajno izbrišite",
"Error" : "Pogreška",
"restored" : "Obnovljeno",
- "Nothing in here. Your trash bin is empty!" : "Ovdje nema ničega. Vaša kantica je prazna!",
"Name" : "Naziv",
"Deleted" : "Izbrisano",
"Delete" : "Izbrišite"
diff --git a/apps/files_trashbin/l10n/hr.json b/apps/files_trashbin/l10n/hr.json
index 7ce4749b133..3b1f0c0eaf9 100644
--- a/apps/files_trashbin/l10n/hr.json
+++ b/apps/files_trashbin/l10n/hr.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Nije moguće obnoviti %s",
"Deleted files" : "Izbrisane datoteke",
"Restore" : "Obnovite",
+ "Delete permanently" : "Trajno izbrišite",
"Error" : "Pogreška",
"restored" : "Obnovljeno",
- "Nothing in here. Your trash bin is empty!" : "Ovdje nema ničega. Vaša kantica je prazna!",
"Name" : "Naziv",
"Deleted" : "Izbrisano",
"Delete" : "Izbrišite"
diff --git a/apps/files_trashbin/l10n/hu_HU.js b/apps/files_trashbin/l10n/hu_HU.js
index cd057777275..86fbd169640 100644
--- a/apps/files_trashbin/l10n/hu_HU.js
+++ b/apps/files_trashbin/l10n/hu_HU.js
@@ -5,9 +5,10 @@ OC.L10N.register(
"Couldn't restore %s" : "Nem sikerült %s visszaállítása",
"Deleted files" : "Törölt fájlok",
"Restore" : "Visszaállítás",
+ "Delete permanently" : "Végleges törlés",
"Error" : "Hiba",
"restored" : "visszaállítva",
- "Nothing in here. Your trash bin is empty!" : "Itt nincs semmi. Az Ön szemetes mappája üres!",
+ "Select all" : "Összes kijelölése",
"Name" : "Név",
"Deleted" : "Törölve",
"Delete" : "Törlés"
diff --git a/apps/files_trashbin/l10n/hu_HU.json b/apps/files_trashbin/l10n/hu_HU.json
index f989f402328..e445b3a4728 100644
--- a/apps/files_trashbin/l10n/hu_HU.json
+++ b/apps/files_trashbin/l10n/hu_HU.json
@@ -3,9 +3,10 @@
"Couldn't restore %s" : "Nem sikerült %s visszaállítása",
"Deleted files" : "Törölt fájlok",
"Restore" : "Visszaállítás",
+ "Delete permanently" : "Végleges törlés",
"Error" : "Hiba",
"restored" : "visszaállítva",
- "Nothing in here. Your trash bin is empty!" : "Itt nincs semmi. Az Ön szemetes mappája üres!",
+ "Select all" : "Összes kijelölése",
"Name" : "Név",
"Deleted" : "Törölve",
"Delete" : "Törlés"
diff --git a/apps/files_trashbin/l10n/id.js b/apps/files_trashbin/l10n/id.js
index 6e13e455591..52183a9cbef 100644
--- a/apps/files_trashbin/l10n/id.js
+++ b/apps/files_trashbin/l10n/id.js
@@ -5,8 +5,8 @@ OC.L10N.register(
"Couldn't restore %s" : "Tidak dapat memulihkan %s",
"Deleted files" : "Berkas yang dihapus",
"Restore" : "Pulihkan",
+ "Delete permanently" : "Hapus secara permanen",
"Error" : "Galat",
- "Nothing in here. Your trash bin is empty!" : "Tempat sampah anda kosong!",
"Name" : "Nama",
"Deleted" : "Dihapus",
"Delete" : "Hapus"
diff --git a/apps/files_trashbin/l10n/id.json b/apps/files_trashbin/l10n/id.json
index f29df5cd07e..55384503601 100644
--- a/apps/files_trashbin/l10n/id.json
+++ b/apps/files_trashbin/l10n/id.json
@@ -3,8 +3,8 @@
"Couldn't restore %s" : "Tidak dapat memulihkan %s",
"Deleted files" : "Berkas yang dihapus",
"Restore" : "Pulihkan",
+ "Delete permanently" : "Hapus secara permanen",
"Error" : "Galat",
- "Nothing in here. Your trash bin is empty!" : "Tempat sampah anda kosong!",
"Name" : "Nama",
"Deleted" : "Dihapus",
"Delete" : "Hapus"
diff --git a/apps/files_trashbin/l10n/it.js b/apps/files_trashbin/l10n/it.js
index 5e57848c479..01840a9907c 100644
--- a/apps/files_trashbin/l10n/it.js
+++ b/apps/files_trashbin/l10n/it.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Impossibile ripristinare %s",
"Deleted files" : "File eliminati",
"Restore" : "Ripristina",
+ "Delete permanently" : "Elimina definitivamente",
"Error" : "Errore",
"restored" : "ripristinati",
- "Nothing in here. Your trash bin is empty!" : "Qui non c'è niente. Il tuo cestino è vuoto.",
+ "No deleted files" : "Nessun file eliminato",
+ "You will be able to recover deleted files from here" : "Potrai ripristinare i file eliminati da qui",
+ "No entries found in this folder" : "Nessuna voce trovata in questa cartella",
+ "Select all" : "Seleziona tutto",
"Name" : "Nome",
"Deleted" : "Eliminati",
"Delete" : "Elimina"
diff --git a/apps/files_trashbin/l10n/it.json b/apps/files_trashbin/l10n/it.json
index 25efb47a65a..89ee8efad16 100644
--- a/apps/files_trashbin/l10n/it.json
+++ b/apps/files_trashbin/l10n/it.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Impossibile ripristinare %s",
"Deleted files" : "File eliminati",
"Restore" : "Ripristina",
+ "Delete permanently" : "Elimina definitivamente",
"Error" : "Errore",
"restored" : "ripristinati",
- "Nothing in here. Your trash bin is empty!" : "Qui non c'è niente. Il tuo cestino è vuoto.",
+ "No deleted files" : "Nessun file eliminato",
+ "You will be able to recover deleted files from here" : "Potrai ripristinare i file eliminati da qui",
+ "No entries found in this folder" : "Nessuna voce trovata in questa cartella",
+ "Select all" : "Seleziona tutto",
"Name" : "Nome",
"Deleted" : "Eliminati",
"Delete" : "Elimina"
diff --git a/apps/files_trashbin/l10n/ja.js b/apps/files_trashbin/l10n/ja.js
index dba8442c5d4..1ec56e8d2fa 100644
--- a/apps/files_trashbin/l10n/ja.js
+++ b/apps/files_trashbin/l10n/ja.js
@@ -5,9 +5,12 @@ OC.L10N.register(
"Couldn't restore %s" : "%s を復元できませんでした",
"Deleted files" : "ゴミ箱",
"Restore" : "復元",
+ "Delete permanently" : "完全に削除する",
"Error" : "エラー",
"restored" : "復元済",
- "Nothing in here. Your trash bin is empty!" : "ここには何もありません。ゴミ箱は空です!",
+ "No deleted files" : "削除されたファイルはありません",
+ "You will be able to recover deleted files from here" : "ここから削除されたファイルを元に戻すことができます。",
+ "Select all" : "すべて選択",
"Name" : "名前",
"Deleted" : "削除日時",
"Delete" : "削除"
diff --git a/apps/files_trashbin/l10n/ja.json b/apps/files_trashbin/l10n/ja.json
index cd6f6c37e12..2da8c5af5ba 100644
--- a/apps/files_trashbin/l10n/ja.json
+++ b/apps/files_trashbin/l10n/ja.json
@@ -3,9 +3,12 @@
"Couldn't restore %s" : "%s を復元できませんでした",
"Deleted files" : "ゴミ箱",
"Restore" : "復元",
+ "Delete permanently" : "完全に削除する",
"Error" : "エラー",
"restored" : "復元済",
- "Nothing in here. Your trash bin is empty!" : "ここには何もありません。ゴミ箱は空です!",
+ "No deleted files" : "削除されたファイルはありません",
+ "You will be able to recover deleted files from here" : "ここから削除されたファイルを元に戻すことができます。",
+ "Select all" : "すべて選択",
"Name" : "名前",
"Deleted" : "削除日時",
"Delete" : "削除"
diff --git a/apps/files_trashbin/l10n/ka_GE.js b/apps/files_trashbin/l10n/ka_GE.js
index 49f9fd4b0b0..cd578d4117a 100644
--- a/apps/files_trashbin/l10n/ka_GE.js
+++ b/apps/files_trashbin/l10n/ka_GE.js
@@ -5,8 +5,8 @@ OC.L10N.register(
"Couldn't restore %s" : "%s–ის აღდგენა ვერ მოხერხდა",
"Deleted files" : "წაშლილი ფაილები",
"Restore" : "აღდგენა",
+ "Delete permanently" : "სრულად წაშლა",
"Error" : "შეცდომა",
- "Nothing in here. Your trash bin is empty!" : "აქ არაფერი არ არის. სანაგვე ყუთი ცარიელია!",
"Name" : "სახელი",
"Deleted" : "წაშლილი",
"Delete" : "წაშლა"
diff --git a/apps/files_trashbin/l10n/ka_GE.json b/apps/files_trashbin/l10n/ka_GE.json
index 98b165a02dd..11fc08b1255 100644
--- a/apps/files_trashbin/l10n/ka_GE.json
+++ b/apps/files_trashbin/l10n/ka_GE.json
@@ -3,8 +3,8 @@
"Couldn't restore %s" : "%s–ის აღდგენა ვერ მოხერხდა",
"Deleted files" : "წაშლილი ფაილები",
"Restore" : "აღდგენა",
+ "Delete permanently" : "სრულად წაშლა",
"Error" : "შეცდომა",
- "Nothing in here. Your trash bin is empty!" : "აქ არაფერი არ არის. სანაგვე ყუთი ცარიელია!",
"Name" : "სახელი",
"Deleted" : "წაშლილი",
"Delete" : "წაშლა"
diff --git a/apps/files_trashbin/l10n/km.js b/apps/files_trashbin/l10n/km.js
index a5bac8c2bd6..fafbff1e665 100644
--- a/apps/files_trashbin/l10n/km.js
+++ b/apps/files_trashbin/l10n/km.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "មិន​អាច​ស្ដារ %s ឡើង​វិញ​បាន​ទេ",
"Deleted files" : "ឯកសារ​ដែល​បាន​លុប",
"Restore" : "ស្ដារ​មក​វិញ",
+ "Delete permanently" : "លុប​ជា​អចិន្ត្រៃយ៍",
"Error" : "កំហុស",
"restored" : "បាន​ស្ដារ​វិញ",
- "Nothing in here. Your trash bin is empty!" : "គ្មាន​អ្វី​នៅ​ទីនេះ​ទេ។ ធុង​សំរាម​របស់​អ្នក​គឺ​ទទេ!",
"Name" : "ឈ្មោះ",
"Deleted" : "បាន​លុប",
"Delete" : "លុប"
diff --git a/apps/files_trashbin/l10n/km.json b/apps/files_trashbin/l10n/km.json
index bda740966e8..0b291a61eb2 100644
--- a/apps/files_trashbin/l10n/km.json
+++ b/apps/files_trashbin/l10n/km.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "មិន​អាច​ស្ដារ %s ឡើង​វិញ​បាន​ទេ",
"Deleted files" : "ឯកសារ​ដែល​បាន​លុប",
"Restore" : "ស្ដារ​មក​វិញ",
+ "Delete permanently" : "លុប​ជា​អចិន្ត្រៃយ៍",
"Error" : "កំហុស",
"restored" : "បាន​ស្ដារ​វិញ",
- "Nothing in here. Your trash bin is empty!" : "គ្មាន​អ្វី​នៅ​ទីនេះ​ទេ។ ធុង​សំរាម​របស់​អ្នក​គឺ​ទទេ!",
"Name" : "ឈ្មោះ",
"Deleted" : "បាន​លុប",
"Delete" : "លុប"
diff --git a/apps/files_trashbin/l10n/kn.js b/apps/files_trashbin/l10n/kn.js
new file mode 100644
index 00000000000..4e918b5f06f
--- /dev/null
+++ b/apps/files_trashbin/l10n/kn.js
@@ -0,0 +1,10 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Restore" : "ಮರುಸ್ಥಾಪಿಸು",
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
+ "Select all" : "ಎಲ್ಲಾ ಆಯ್ಕೆ ಮಾಡಿ",
+ "Name" : "ಹೆಸರು",
+ "Delete" : "ಅಳಿಸಿ"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/files_trashbin/l10n/kn.json b/apps/files_trashbin/l10n/kn.json
new file mode 100644
index 00000000000..174306ce04a
--- /dev/null
+++ b/apps/files_trashbin/l10n/kn.json
@@ -0,0 +1,8 @@
+{ "translations": {
+ "Restore" : "ಮರುಸ್ಥಾಪಿಸು",
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
+ "Select all" : "ಎಲ್ಲಾ ಆಯ್ಕೆ ಮಾಡಿ",
+ "Name" : "ಹೆಸರು",
+ "Delete" : "ಅಳಿಸಿ"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/ko.js b/apps/files_trashbin/l10n/ko.js
index 6f3f68cc666..83c57f8914a 100644
--- a/apps/files_trashbin/l10n/ko.js
+++ b/apps/files_trashbin/l10n/ko.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "%s을(를) 복원할 수 없습니다",
"Deleted files" : "삭제된 파일",
"Restore" : "복원",
+ "Delete permanently" : "영구히 삭제",
"Error" : "오류",
"restored" : "복원됨",
- "Nothing in here. Your trash bin is empty!" : "휴지통이 비어 있습니다!",
"Name" : "이름",
"Deleted" : "삭제됨",
"Delete" : "삭제"
diff --git a/apps/files_trashbin/l10n/ko.json b/apps/files_trashbin/l10n/ko.json
index 834c798fb7f..d9820ba8ffe 100644
--- a/apps/files_trashbin/l10n/ko.json
+++ b/apps/files_trashbin/l10n/ko.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "%s을(를) 복원할 수 없습니다",
"Deleted files" : "삭제된 파일",
"Restore" : "복원",
+ "Delete permanently" : "영구히 삭제",
"Error" : "오류",
"restored" : "복원됨",
- "Nothing in here. Your trash bin is empty!" : "휴지통이 비어 있습니다!",
"Name" : "이름",
"Deleted" : "삭제됨",
"Delete" : "삭제"
diff --git a/apps/files_trashbin/l10n/lt_LT.js b/apps/files_trashbin/l10n/lt_LT.js
index b7a43703e83..3c075536079 100644
--- a/apps/files_trashbin/l10n/lt_LT.js
+++ b/apps/files_trashbin/l10n/lt_LT.js
@@ -5,9 +5,12 @@ OC.L10N.register(
"Couldn't restore %s" : "Nepavyko atkurti %s",
"Deleted files" : "Ištrinti failai",
"Restore" : "Atstatyti",
+ "Delete permanently" : "Ištrinti negrįžtamai",
"Error" : "Klaida",
"restored" : "atstatyta",
- "Nothing in here. Your trash bin is empty!" : "Nieko nėra. Jūsų šiukšliadėžė tuščia!",
+ "No deleted files" : "Nėra ištrintų failų",
+ "You will be able to recover deleted files from here" : "Jūs galėsite atkurti ištrintus failus iš čia",
+ "Select all" : "Pažymėti viską",
"Name" : "Pavadinimas",
"Deleted" : "Ištrinti",
"Delete" : "Ištrinti"
diff --git a/apps/files_trashbin/l10n/lt_LT.json b/apps/files_trashbin/l10n/lt_LT.json
index 7c572ddc20d..0be508aeb21 100644
--- a/apps/files_trashbin/l10n/lt_LT.json
+++ b/apps/files_trashbin/l10n/lt_LT.json
@@ -3,9 +3,12 @@
"Couldn't restore %s" : "Nepavyko atkurti %s",
"Deleted files" : "Ištrinti failai",
"Restore" : "Atstatyti",
+ "Delete permanently" : "Ištrinti negrįžtamai",
"Error" : "Klaida",
"restored" : "atstatyta",
- "Nothing in here. Your trash bin is empty!" : "Nieko nėra. Jūsų šiukšliadėžė tuščia!",
+ "No deleted files" : "Nėra ištrintų failų",
+ "You will be able to recover deleted files from here" : "Jūs galėsite atkurti ištrintus failus iš čia",
+ "Select all" : "Pažymėti viską",
"Name" : "Pavadinimas",
"Deleted" : "Ištrinti",
"Delete" : "Ištrinti"
diff --git a/apps/files_trashbin/l10n/lv.js b/apps/files_trashbin/l10n/lv.js
index 463be504d54..4e6fb3ea3a2 100644
--- a/apps/files_trashbin/l10n/lv.js
+++ b/apps/files_trashbin/l10n/lv.js
@@ -5,9 +5,10 @@ OC.L10N.register(
"Couldn't restore %s" : "Nevarēja atjaunot %s",
"Deleted files" : "Dzēstās datnes",
"Restore" : "Atjaunot",
+ "Delete permanently" : "Dzēst pavisam",
"Error" : "Kļūda",
"restored" : "atjaunots",
- "Nothing in here. Your trash bin is empty!" : "Šeit nekā nav. Jūsu miskaste ir tukša!",
+ "Select all" : "Atzīmēt visu",
"Name" : "Nosaukums",
"Deleted" : "Dzēsts",
"Delete" : "Dzēst"
diff --git a/apps/files_trashbin/l10n/lv.json b/apps/files_trashbin/l10n/lv.json
index ad0e2aa9842..1c798fb7f59 100644
--- a/apps/files_trashbin/l10n/lv.json
+++ b/apps/files_trashbin/l10n/lv.json
@@ -3,9 +3,10 @@
"Couldn't restore %s" : "Nevarēja atjaunot %s",
"Deleted files" : "Dzēstās datnes",
"Restore" : "Atjaunot",
+ "Delete permanently" : "Dzēst pavisam",
"Error" : "Kļūda",
"restored" : "atjaunots",
- "Nothing in here. Your trash bin is empty!" : "Šeit nekā nav. Jūsu miskaste ir tukša!",
+ "Select all" : "Atzīmēt visu",
"Name" : "Nosaukums",
"Deleted" : "Dzēsts",
"Delete" : "Dzēst"
diff --git a/apps/files_trashbin/l10n/mk.js b/apps/files_trashbin/l10n/mk.js
index 6d74f64e37c..f5286eac043 100644
--- a/apps/files_trashbin/l10n/mk.js
+++ b/apps/files_trashbin/l10n/mk.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Не можеше да се поврати %s",
"Deleted files" : "Избришани датотеки",
"Restore" : "Поврати",
+ "Delete permanently" : "Трајно избришани",
"Error" : "Грешка",
"restored" : "повратени",
- "Nothing in here. Your trash bin is empty!" : "Тука нема ништо. Вашата корпа за отпадоци е празна!",
"Name" : "Име",
"Deleted" : "Избришан",
"Delete" : "Избриши"
diff --git a/apps/files_trashbin/l10n/mk.json b/apps/files_trashbin/l10n/mk.json
index 45eef9bfd61..119a6c4f954 100644
--- a/apps/files_trashbin/l10n/mk.json
+++ b/apps/files_trashbin/l10n/mk.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Не можеше да се поврати %s",
"Deleted files" : "Избришани датотеки",
"Restore" : "Поврати",
+ "Delete permanently" : "Трајно избришани",
"Error" : "Грешка",
"restored" : "повратени",
- "Nothing in here. Your trash bin is empty!" : "Тука нема ништо. Вашата корпа за отпадоци е празна!",
"Name" : "Име",
"Deleted" : "Избришан",
"Delete" : "Избриши"
diff --git a/apps/files_trashbin/l10n/ms_MY.js b/apps/files_trashbin/l10n/ms_MY.js
index 6e7028832e6..1441ab03bf9 100644
--- a/apps/files_trashbin/l10n/ms_MY.js
+++ b/apps/files_trashbin/l10n/ms_MY.js
@@ -7,7 +7,6 @@ OC.L10N.register(
"Restore" : "Pulihkan",
"Error" : "Ralat",
"restored" : "dipulihkan",
- "Nothing in here. Your trash bin is empty!" : "Tiada apa disini. Tong sampah anda kosong!",
"Name" : "Nama",
"Deleted" : "Dipadam",
"Delete" : "Padam"
diff --git a/apps/files_trashbin/l10n/ms_MY.json b/apps/files_trashbin/l10n/ms_MY.json
index 5bb1e815ffd..a2b674d23d5 100644
--- a/apps/files_trashbin/l10n/ms_MY.json
+++ b/apps/files_trashbin/l10n/ms_MY.json
@@ -5,7 +5,6 @@
"Restore" : "Pulihkan",
"Error" : "Ralat",
"restored" : "dipulihkan",
- "Nothing in here. Your trash bin is empty!" : "Tiada apa disini. Tong sampah anda kosong!",
"Name" : "Nama",
"Deleted" : "Dipadam",
"Delete" : "Padam"
diff --git a/apps/files_trashbin/l10n/nb_NO.js b/apps/files_trashbin/l10n/nb_NO.js
index b5c2821a305..2fcd4b93c9c 100644
--- a/apps/files_trashbin/l10n/nb_NO.js
+++ b/apps/files_trashbin/l10n/nb_NO.js
@@ -5,9 +5,12 @@ OC.L10N.register(
"Couldn't restore %s" : "Kunne ikke gjenopprette %s",
"Deleted files" : "Slettede filer",
"Restore" : "Gjenopprett",
+ "Delete permanently" : "Slett permanent",
"Error" : "Feil",
"restored" : "gjenopprettet",
- "Nothing in here. Your trash bin is empty!" : "Ingenting her. Søppelkassen din er tom!",
+ "No deleted files" : "Ingen slettede filer",
+ "You will be able to recover deleted files from here" : "Du vil kunne gjenopprette slettede filer herfra",
+ "Select all" : "Velg alle",
"Name" : "Navn",
"Deleted" : "Slettet",
"Delete" : "Slett"
diff --git a/apps/files_trashbin/l10n/nb_NO.json b/apps/files_trashbin/l10n/nb_NO.json
index a671f461155..4fd9d677575 100644
--- a/apps/files_trashbin/l10n/nb_NO.json
+++ b/apps/files_trashbin/l10n/nb_NO.json
@@ -3,9 +3,12 @@
"Couldn't restore %s" : "Kunne ikke gjenopprette %s",
"Deleted files" : "Slettede filer",
"Restore" : "Gjenopprett",
+ "Delete permanently" : "Slett permanent",
"Error" : "Feil",
"restored" : "gjenopprettet",
- "Nothing in here. Your trash bin is empty!" : "Ingenting her. Søppelkassen din er tom!",
+ "No deleted files" : "Ingen slettede filer",
+ "You will be able to recover deleted files from here" : "Du vil kunne gjenopprette slettede filer herfra",
+ "Select all" : "Velg alle",
"Name" : "Navn",
"Deleted" : "Slettet",
"Delete" : "Slett"
diff --git a/apps/files_trashbin/l10n/nl.js b/apps/files_trashbin/l10n/nl.js
index 3bd48a07eff..4b9227b563f 100644
--- a/apps/files_trashbin/l10n/nl.js
+++ b/apps/files_trashbin/l10n/nl.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Kon %s niet herstellen",
"Deleted files" : "Verwijderde bestanden",
"Restore" : "Herstellen",
+ "Delete permanently" : "Definitief verwijderen",
"Error" : "Fout",
"restored" : "hersteld",
- "Nothing in here. Your trash bin is empty!" : "Niets te vinden. Uw prullenbak is leeg!",
+ "No deleted files" : "Geen verwijderde bestanden",
+ "You will be able to recover deleted files from here" : "U kunt verwijderde bestanden hier vandaan weer terugzetten",
+ "No entries found in this folder" : "Niets gevonden in deze map",
+ "Select all" : "Alles selecteren",
"Name" : "Naam",
"Deleted" : "Verwijderd",
"Delete" : "Verwijder"
diff --git a/apps/files_trashbin/l10n/nl.json b/apps/files_trashbin/l10n/nl.json
index 5d4134ed1ce..7e78dde9baa 100644
--- a/apps/files_trashbin/l10n/nl.json
+++ b/apps/files_trashbin/l10n/nl.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Kon %s niet herstellen",
"Deleted files" : "Verwijderde bestanden",
"Restore" : "Herstellen",
+ "Delete permanently" : "Definitief verwijderen",
"Error" : "Fout",
"restored" : "hersteld",
- "Nothing in here. Your trash bin is empty!" : "Niets te vinden. Uw prullenbak is leeg!",
+ "No deleted files" : "Geen verwijderde bestanden",
+ "You will be able to recover deleted files from here" : "U kunt verwijderde bestanden hier vandaan weer terugzetten",
+ "No entries found in this folder" : "Niets gevonden in deze map",
+ "Select all" : "Alles selecteren",
"Name" : "Naam",
"Deleted" : "Verwijderd",
"Delete" : "Verwijder"
diff --git a/apps/files_trashbin/l10n/nn_NO.js b/apps/files_trashbin/l10n/nn_NO.js
index 2c42392757d..fc4a6a5cc37 100644
--- a/apps/files_trashbin/l10n/nn_NO.js
+++ b/apps/files_trashbin/l10n/nn_NO.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Klarte ikkje gjenoppretta %s",
"Deleted files" : "Sletta filer",
"Restore" : "Gjenopprett",
+ "Delete permanently" : "Slett for godt",
"Error" : "Feil",
"restored" : "gjenoppretta",
- "Nothing in here. Your trash bin is empty!" : "Ingenting her. Papirkorga di er tom!",
"Name" : "Namn",
"Deleted" : "Sletta",
"Delete" : "Slett"
diff --git a/apps/files_trashbin/l10n/nn_NO.json b/apps/files_trashbin/l10n/nn_NO.json
index f5fe09fa06e..f8cf76ca3f4 100644
--- a/apps/files_trashbin/l10n/nn_NO.json
+++ b/apps/files_trashbin/l10n/nn_NO.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Klarte ikkje gjenoppretta %s",
"Deleted files" : "Sletta filer",
"Restore" : "Gjenopprett",
+ "Delete permanently" : "Slett for godt",
"Error" : "Feil",
"restored" : "gjenoppretta",
- "Nothing in here. Your trash bin is empty!" : "Ingenting her. Papirkorga di er tom!",
"Name" : "Namn",
"Deleted" : "Sletta",
"Delete" : "Slett"
diff --git a/apps/files_trashbin/l10n/pl.js b/apps/files_trashbin/l10n/pl.js
index 13053c3bae4..941e768e304 100644
--- a/apps/files_trashbin/l10n/pl.js
+++ b/apps/files_trashbin/l10n/pl.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Nie można przywrócić %s",
"Deleted files" : "Usunięte pliki",
"Restore" : "Przywróć",
+ "Delete permanently" : "Trwale usuń",
"Error" : "Błąd",
"restored" : "przywrócony",
- "Nothing in here. Your trash bin is empty!" : "Nic tu nie ma. Twój kosz jest pusty!",
"Name" : "Nazwa",
"Deleted" : "Usunięte",
"Delete" : "Usuń"
diff --git a/apps/files_trashbin/l10n/pl.json b/apps/files_trashbin/l10n/pl.json
index edb0a2daafa..01308bd763f 100644
--- a/apps/files_trashbin/l10n/pl.json
+++ b/apps/files_trashbin/l10n/pl.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Nie można przywrócić %s",
"Deleted files" : "Usunięte pliki",
"Restore" : "Przywróć",
+ "Delete permanently" : "Trwale usuń",
"Error" : "Błąd",
"restored" : "przywrócony",
- "Nothing in here. Your trash bin is empty!" : "Nic tu nie ma. Twój kosz jest pusty!",
"Name" : "Nazwa",
"Deleted" : "Usunięte",
"Delete" : "Usuń"
diff --git a/apps/files_trashbin/l10n/pt_BR.js b/apps/files_trashbin/l10n/pt_BR.js
index f1b7e447381..737a522eea1 100644
--- a/apps/files_trashbin/l10n/pt_BR.js
+++ b/apps/files_trashbin/l10n/pt_BR.js
@@ -5,9 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Não foi possível restaurar %s",
"Deleted files" : "Arquivos apagados",
"Restore" : "Restaurar",
+ "Delete permanently" : "Excluir permanentemente",
"Error" : "Erro",
"restored" : "restaurado",
- "Nothing in here. Your trash bin is empty!" : "Nada aqui. Sua lixeira está vazia!",
+ "No deleted files" : "Aquivos não removidos",
+ "You will be able to recover deleted files from here" : "Você pode recuperar arquivos removidos daqui",
+ "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
+ "Select all" : "Selecionar tudo",
"Name" : "Nome",
"Deleted" : "Excluído",
"Delete" : "Excluir"
diff --git a/apps/files_trashbin/l10n/pt_BR.json b/apps/files_trashbin/l10n/pt_BR.json
index 801f91f18bd..25ee0439d67 100644
--- a/apps/files_trashbin/l10n/pt_BR.json
+++ b/apps/files_trashbin/l10n/pt_BR.json
@@ -3,9 +3,13 @@
"Couldn't restore %s" : "Não foi possível restaurar %s",
"Deleted files" : "Arquivos apagados",
"Restore" : "Restaurar",
+ "Delete permanently" : "Excluir permanentemente",
"Error" : "Erro",
"restored" : "restaurado",
- "Nothing in here. Your trash bin is empty!" : "Nada aqui. Sua lixeira está vazia!",
+ "No deleted files" : "Aquivos não removidos",
+ "You will be able to recover deleted files from here" : "Você pode recuperar arquivos removidos daqui",
+ "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
+ "Select all" : "Selecionar tudo",
"Name" : "Nome",
"Deleted" : "Excluído",
"Delete" : "Excluir"
diff --git a/apps/files_trashbin/l10n/pt_PT.js b/apps/files_trashbin/l10n/pt_PT.js
index 5d22e3bca21..7427cebfca5 100644
--- a/apps/files_trashbin/l10n/pt_PT.js
+++ b/apps/files_trashbin/l10n/pt_PT.js
@@ -5,11 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "Não foi possível restaurar %s",
"Deleted files" : "Ficheiros eliminados",
"Restore" : "Restaurar",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Erro",
"restored" : "Restaurado",
- "Nothing in here. Your trash bin is empty!" : "Não hà ficheiros. O lixo está vazio!",
+ "No deleted files" : "Sem ficheiros eliminados",
+ "Select all" : "Seleccionar todos",
"Name" : "Nome",
- "Deleted" : "Apagado",
+ "Deleted" : "Eliminado",
"Delete" : "Eliminar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/pt_PT.json b/apps/files_trashbin/l10n/pt_PT.json
index 4feb75abd9a..97fe7ac33aa 100644
--- a/apps/files_trashbin/l10n/pt_PT.json
+++ b/apps/files_trashbin/l10n/pt_PT.json
@@ -3,11 +3,13 @@
"Couldn't restore %s" : "Não foi possível restaurar %s",
"Deleted files" : "Ficheiros eliminados",
"Restore" : "Restaurar",
+ "Delete permanently" : "Eliminar permanentemente",
"Error" : "Erro",
"restored" : "Restaurado",
- "Nothing in here. Your trash bin is empty!" : "Não hà ficheiros. O lixo está vazio!",
+ "No deleted files" : "Sem ficheiros eliminados",
+ "Select all" : "Seleccionar todos",
"Name" : "Nome",
- "Deleted" : "Apagado",
+ "Deleted" : "Eliminado",
"Delete" : "Eliminar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/ro.js b/apps/files_trashbin/l10n/ro.js
index c0ba5741695..0feb1e8e721 100644
--- a/apps/files_trashbin/l10n/ro.js
+++ b/apps/files_trashbin/l10n/ro.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Deleted files" : "Sterge fisierele",
"Restore" : "Restabilire",
+ "Delete permanently" : "Șterge permanent",
"Error" : "Eroare",
"Name" : "Nume",
"Delete" : "Șterge"
diff --git a/apps/files_trashbin/l10n/ro.json b/apps/files_trashbin/l10n/ro.json
index d0c02197e46..758dc748460 100644
--- a/apps/files_trashbin/l10n/ro.json
+++ b/apps/files_trashbin/l10n/ro.json
@@ -1,6 +1,7 @@
{ "translations": {
"Deleted files" : "Sterge fisierele",
"Restore" : "Restabilire",
+ "Delete permanently" : "Șterge permanent",
"Error" : "Eroare",
"Name" : "Nume",
"Delete" : "Șterge"
diff --git a/apps/files_trashbin/l10n/ru.js b/apps/files_trashbin/l10n/ru.js
index dbb2df1f704..39a47584221 100644
--- a/apps/files_trashbin/l10n/ru.js
+++ b/apps/files_trashbin/l10n/ru.js
@@ -1,13 +1,17 @@
OC.L10N.register(
"files_trashbin",
{
- "Couldn't delete %s permanently" : "%s не может быть удалён навсегда",
+ "Couldn't delete %s permanently" : "%s не может быть удалён окончательно",
"Couldn't restore %s" : "%s не может быть восстановлен",
"Deleted files" : "Удалённые файлы",
"Restore" : "Восстановить",
+ "Delete permanently" : "Удалить окончательно",
"Error" : "Ошибка",
"restored" : "восстановлен",
- "Nothing in here. Your trash bin is empty!" : "Здесь ничего нет. Ваша корзина пуста!",
+ "No deleted files" : "Нет удалённых файлов",
+ "You will be able to recover deleted files from here" : "Здесь вы сможете восстановить удалённые файлы",
+ "No entries found in this folder" : "Каталог пуст",
+ "Select all" : "Выделить все",
"Name" : "Имя",
"Deleted" : "Удалён",
"Delete" : "Удалить"
diff --git a/apps/files_trashbin/l10n/ru.json b/apps/files_trashbin/l10n/ru.json
index 3e67045967d..171c0aa2325 100644
--- a/apps/files_trashbin/l10n/ru.json
+++ b/apps/files_trashbin/l10n/ru.json
@@ -1,11 +1,15 @@
{ "translations": {
- "Couldn't delete %s permanently" : "%s не может быть удалён навсегда",
+ "Couldn't delete %s permanently" : "%s не может быть удалён окончательно",
"Couldn't restore %s" : "%s не может быть восстановлен",
"Deleted files" : "Удалённые файлы",
"Restore" : "Восстановить",
+ "Delete permanently" : "Удалить окончательно",
"Error" : "Ошибка",
"restored" : "восстановлен",
- "Nothing in here. Your trash bin is empty!" : "Здесь ничего нет. Ваша корзина пуста!",
+ "No deleted files" : "Нет удалённых файлов",
+ "You will be able to recover deleted files from here" : "Здесь вы сможете восстановить удалённые файлы",
+ "No entries found in this folder" : "Каталог пуст",
+ "Select all" : "Выделить все",
"Name" : "Имя",
"Deleted" : "Удалён",
"Delete" : "Удалить"
diff --git a/apps/files_trashbin/l10n/sk.php b/apps/files_trashbin/l10n/sk.php
deleted file mode 100644
index 3129cf5c411..00000000000
--- a/apps/files_trashbin/l10n/sk.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Delete" => "Odstrániť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_trashbin/l10n/sk_SK.js b/apps/files_trashbin/l10n/sk_SK.js
index 9069b4ea509..4cca753fc79 100644
--- a/apps/files_trashbin/l10n/sk_SK.js
+++ b/apps/files_trashbin/l10n/sk_SK.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Nemožno obnoviť %s",
"Deleted files" : "Zmazané súbory",
"Restore" : "Obnoviť",
+ "Delete permanently" : "Zmazať trvalo",
"Error" : "Chyba",
"restored" : "obnovené",
- "Nothing in here. Your trash bin is empty!" : "Žiadny obsah. Kôš je prázdny!",
"Name" : "Názov",
"Deleted" : "Zmazané",
"Delete" : "Zmazať"
diff --git a/apps/files_trashbin/l10n/sk_SK.json b/apps/files_trashbin/l10n/sk_SK.json
index e3b95e1d591..a014537a968 100644
--- a/apps/files_trashbin/l10n/sk_SK.json
+++ b/apps/files_trashbin/l10n/sk_SK.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Nemožno obnoviť %s",
"Deleted files" : "Zmazané súbory",
"Restore" : "Obnoviť",
+ "Delete permanently" : "Zmazať trvalo",
"Error" : "Chyba",
"restored" : "obnovené",
- "Nothing in here. Your trash bin is empty!" : "Žiadny obsah. Kôš je prázdny!",
"Name" : "Názov",
"Deleted" : "Zmazané",
"Delete" : "Zmazať"
diff --git a/apps/files_trashbin/l10n/sl.js b/apps/files_trashbin/l10n/sl.js
index 60cecde1cb8..1e92dafb9d0 100644
--- a/apps/files_trashbin/l10n/sl.js
+++ b/apps/files_trashbin/l10n/sl.js
@@ -5,9 +5,12 @@ OC.L10N.register(
"Couldn't restore %s" : "Ni mogoče obnoviti %s",
"Deleted files" : "Izbrisane datoteke",
"Restore" : "Obnovi",
+ "Delete permanently" : "Izbriši dokončno",
"Error" : "Napaka",
"restored" : "obnovljeno",
- "Nothing in here. Your trash bin is empty!" : "Mapa smeti je prazna.",
+ "No deleted files" : "Ni izbrisanih datotek",
+ "You will be able to recover deleted files from here" : "Izbrisane datoteke je mogoče povrniti na tem mestu",
+ "Select all" : "izberi vse",
"Name" : "Ime",
"Deleted" : "Izbrisano",
"Delete" : "Izbriši"
diff --git a/apps/files_trashbin/l10n/sl.json b/apps/files_trashbin/l10n/sl.json
index 0431bb30997..456c36793b3 100644
--- a/apps/files_trashbin/l10n/sl.json
+++ b/apps/files_trashbin/l10n/sl.json
@@ -3,9 +3,12 @@
"Couldn't restore %s" : "Ni mogoče obnoviti %s",
"Deleted files" : "Izbrisane datoteke",
"Restore" : "Obnovi",
+ "Delete permanently" : "Izbriši dokončno",
"Error" : "Napaka",
"restored" : "obnovljeno",
- "Nothing in here. Your trash bin is empty!" : "Mapa smeti je prazna.",
+ "No deleted files" : "Ni izbrisanih datotek",
+ "You will be able to recover deleted files from here" : "Izbrisane datoteke je mogoče povrniti na tem mestu",
+ "Select all" : "izberi vse",
"Name" : "Ime",
"Deleted" : "Izbrisano",
"Delete" : "Izbriši"
diff --git a/apps/files_trashbin/l10n/sq.js b/apps/files_trashbin/l10n/sq.js
index 6c4e2b4461f..be6182a94dd 100644
--- a/apps/files_trashbin/l10n/sq.js
+++ b/apps/files_trashbin/l10n/sq.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Nuk munda ta rivendos %s",
"Deleted files" : "Skedarë të fshirë ",
"Restore" : "Rivendos",
+ "Delete permanently" : "Fshi përfundimisht",
"Error" : "Veprim i gabuar",
"restored" : "rivendosur",
- "Nothing in here. Your trash bin is empty!" : "Këtu nuk ka asgjë. Koshi juaj është bosh!",
"Name" : "Emri",
"Deleted" : "Eliminuar",
"Delete" : "Elimino"
diff --git a/apps/files_trashbin/l10n/sq.json b/apps/files_trashbin/l10n/sq.json
index fc766582d5f..735fd8c86b1 100644
--- a/apps/files_trashbin/l10n/sq.json
+++ b/apps/files_trashbin/l10n/sq.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Nuk munda ta rivendos %s",
"Deleted files" : "Skedarë të fshirë ",
"Restore" : "Rivendos",
+ "Delete permanently" : "Fshi përfundimisht",
"Error" : "Veprim i gabuar",
"restored" : "rivendosur",
- "Nothing in here. Your trash bin is empty!" : "Këtu nuk ka asgjë. Koshi juaj është bosh!",
"Name" : "Emri",
"Deleted" : "Eliminuar",
"Delete" : "Elimino"
diff --git a/apps/files_trashbin/l10n/sr.js b/apps/files_trashbin/l10n/sr.js
index fdaae6185ad..a3ba991eb1c 100644
--- a/apps/files_trashbin/l10n/sr.js
+++ b/apps/files_trashbin/l10n/sr.js
@@ -3,8 +3,8 @@ OC.L10N.register(
{
"Deleted files" : "Обрисане датотеке",
"Restore" : "Врати",
+ "Delete permanently" : "Обриши за стално",
"Error" : "Грешка",
- "Nothing in here. Your trash bin is empty!" : "Овде нема ништа. Корпа за отпатке је празна.",
"Name" : "Име",
"Deleted" : "Обрисано",
"Delete" : "Обриши"
diff --git a/apps/files_trashbin/l10n/sr.json b/apps/files_trashbin/l10n/sr.json
index d4d8c91bf17..ef05d8fe159 100644
--- a/apps/files_trashbin/l10n/sr.json
+++ b/apps/files_trashbin/l10n/sr.json
@@ -1,8 +1,8 @@
{ "translations": {
"Deleted files" : "Обрисане датотеке",
"Restore" : "Врати",
+ "Delete permanently" : "Обриши за стално",
"Error" : "Грешка",
- "Nothing in here. Your trash bin is empty!" : "Овде нема ништа. Корпа за отпатке је празна.",
"Name" : "Име",
"Deleted" : "Обрисано",
"Delete" : "Обриши"
diff --git a/apps/files_trashbin/l10n/sv.js b/apps/files_trashbin/l10n/sv.js
index eb7ad2dcd41..5a432945260 100644
--- a/apps/files_trashbin/l10n/sv.js
+++ b/apps/files_trashbin/l10n/sv.js
@@ -5,9 +5,12 @@ OC.L10N.register(
"Couldn't restore %s" : "Kunde inte återställa %s",
"Deleted files" : "Raderade filer",
"Restore" : "Återskapa",
+ "Delete permanently" : "Radera permanent",
"Error" : "Fel",
"restored" : "återställd",
- "Nothing in here. Your trash bin is empty!" : "Ingenting här. Din papperskorg är tom!",
+ "No deleted files" : "Inga borttagna filer",
+ "You will be able to recover deleted files from here" : "Du kommer kunna återfå raderade filer härifrån",
+ "Select all" : "Välj allt",
"Name" : "Namn",
"Deleted" : "Raderad",
"Delete" : "Radera"
diff --git a/apps/files_trashbin/l10n/sv.json b/apps/files_trashbin/l10n/sv.json
index 114b5f7738b..f1fd0cdf5de 100644
--- a/apps/files_trashbin/l10n/sv.json
+++ b/apps/files_trashbin/l10n/sv.json
@@ -3,9 +3,12 @@
"Couldn't restore %s" : "Kunde inte återställa %s",
"Deleted files" : "Raderade filer",
"Restore" : "Återskapa",
+ "Delete permanently" : "Radera permanent",
"Error" : "Fel",
"restored" : "återställd",
- "Nothing in here. Your trash bin is empty!" : "Ingenting här. Din papperskorg är tom!",
+ "No deleted files" : "Inga borttagna filer",
+ "You will be able to recover deleted files from here" : "Du kommer kunna återfå raderade filer härifrån",
+ "Select all" : "Välj allt",
"Name" : "Namn",
"Deleted" : "Raderad",
"Delete" : "Radera"
diff --git a/apps/files_trashbin/l10n/te.js b/apps/files_trashbin/l10n/te.js
index 505aced8869..e851ec86421 100644
--- a/apps/files_trashbin/l10n/te.js
+++ b/apps/files_trashbin/l10n/te.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"files_trashbin",
{
+ "Delete permanently" : "శాశ్వతంగా తొలగించు",
"Error" : "పొరపాటు",
"Name" : "పేరు",
"Delete" : "తొలగించు"
diff --git a/apps/files_trashbin/l10n/te.json b/apps/files_trashbin/l10n/te.json
index 37f365e370d..4df06631a0c 100644
--- a/apps/files_trashbin/l10n/te.json
+++ b/apps/files_trashbin/l10n/te.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Delete permanently" : "శాశ్వతంగా తొలగించు",
"Error" : "పొరపాటు",
"Name" : "పేరు",
"Delete" : "తొలగించు"
diff --git a/apps/files_trashbin/l10n/th_TH.js b/apps/files_trashbin/l10n/th_TH.js
index 77ccd12dd44..c1c80b191bb 100644
--- a/apps/files_trashbin/l10n/th_TH.js
+++ b/apps/files_trashbin/l10n/th_TH.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Restore" : "คืนค่า",
"Error" : "ข้อผิดพลาด",
- "Nothing in here. Your trash bin is empty!" : "ไม่มีอะไรอยู่ในนี้ ถังขยะของคุณยังว่างอยู่",
"Name" : "ชื่อ",
"Deleted" : "ลบแล้ว",
"Delete" : "ลบ"
diff --git a/apps/files_trashbin/l10n/th_TH.json b/apps/files_trashbin/l10n/th_TH.json
index 550ff568061..eb3c405beaf 100644
--- a/apps/files_trashbin/l10n/th_TH.json
+++ b/apps/files_trashbin/l10n/th_TH.json
@@ -1,7 +1,6 @@
{ "translations": {
"Restore" : "คืนค่า",
"Error" : "ข้อผิดพลาด",
- "Nothing in here. Your trash bin is empty!" : "ไม่มีอะไรอยู่ในนี้ ถังขยะของคุณยังว่างอยู่",
"Name" : "ชื่อ",
"Deleted" : "ลบแล้ว",
"Delete" : "ลบ"
diff --git a/apps/files_trashbin/l10n/tr.js b/apps/files_trashbin/l10n/tr.js
index f8e8b4daff1..c71cee9b34a 100644
--- a/apps/files_trashbin/l10n/tr.js
+++ b/apps/files_trashbin/l10n/tr.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "%s geri yüklenemedi",
"Deleted files" : "Silinmiş dosyalar",
"Restore" : "Geri yükle",
+ "Delete permanently" : "Kalıcı olarak sil",
"Error" : "Hata",
"restored" : "geri yüklendi",
- "Nothing in here. Your trash bin is empty!" : "Burada hiçbir şey yok. Çöp kutunuz tamamen boş!",
"Name" : "İsim",
"Deleted" : "Silinme",
"Delete" : "Sil"
diff --git a/apps/files_trashbin/l10n/tr.json b/apps/files_trashbin/l10n/tr.json
index d000f31a743..f10180a0922 100644
--- a/apps/files_trashbin/l10n/tr.json
+++ b/apps/files_trashbin/l10n/tr.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "%s geri yüklenemedi",
"Deleted files" : "Silinmiş dosyalar",
"Restore" : "Geri yükle",
+ "Delete permanently" : "Kalıcı olarak sil",
"Error" : "Hata",
"restored" : "geri yüklendi",
- "Nothing in here. Your trash bin is empty!" : "Burada hiçbir şey yok. Çöp kutunuz tamamen boş!",
"Name" : "İsim",
"Deleted" : "Silinme",
"Delete" : "Sil"
diff --git a/apps/files_trashbin/l10n/ug.js b/apps/files_trashbin/l10n/ug.js
index e67cbf85809..329a04416c2 100644
--- a/apps/files_trashbin/l10n/ug.js
+++ b/apps/files_trashbin/l10n/ug.js
@@ -2,8 +2,8 @@ OC.L10N.register(
"files_trashbin",
{
"Deleted files" : "ئۆچۈرۈلگەن ھۆججەتلەر",
+ "Delete permanently" : "مەڭگۈلۈك ئۆچۈر",
"Error" : "خاتالىق",
- "Nothing in here. Your trash bin is empty!" : "بۇ جايدا ھېچنېمە يوق. Your trash bin is empty!",
"Name" : "ئاتى",
"Deleted" : "ئۆچۈرۈلدى",
"Delete" : "ئۆچۈر"
diff --git a/apps/files_trashbin/l10n/ug.json b/apps/files_trashbin/l10n/ug.json
index 8ed6b5cdd80..60a915b2ee5 100644
--- a/apps/files_trashbin/l10n/ug.json
+++ b/apps/files_trashbin/l10n/ug.json
@@ -1,7 +1,7 @@
{ "translations": {
"Deleted files" : "ئۆچۈرۈلگەن ھۆججەتلەر",
+ "Delete permanently" : "مەڭگۈلۈك ئۆچۈر",
"Error" : "خاتالىق",
- "Nothing in here. Your trash bin is empty!" : "بۇ جايدا ھېچنېمە يوق. Your trash bin is empty!",
"Name" : "ئاتى",
"Deleted" : "ئۆچۈرۈلدى",
"Delete" : "ئۆچۈر"
diff --git a/apps/files_trashbin/l10n/uk.js b/apps/files_trashbin/l10n/uk.js
index 0d778f21ad9..a3272ac313f 100644
--- a/apps/files_trashbin/l10n/uk.js
+++ b/apps/files_trashbin/l10n/uk.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Неможливо відновити %s",
"Deleted files" : "Видалені файли",
"Restore" : "Відновити",
+ "Delete permanently" : "Видалити назавжди",
"Error" : "Помилка",
"restored" : "відновлено",
- "Nothing in here. Your trash bin is empty!" : "Нічого немає. Ваший кошик для сміття пустий!",
"Name" : "Ім'я",
"Deleted" : "Видалено",
"Delete" : "Видалити"
diff --git a/apps/files_trashbin/l10n/uk.json b/apps/files_trashbin/l10n/uk.json
index 77e9b53896c..a711236cd0a 100644
--- a/apps/files_trashbin/l10n/uk.json
+++ b/apps/files_trashbin/l10n/uk.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Неможливо відновити %s",
"Deleted files" : "Видалені файли",
"Restore" : "Відновити",
+ "Delete permanently" : "Видалити назавжди",
"Error" : "Помилка",
"restored" : "відновлено",
- "Nothing in here. Your trash bin is empty!" : "Нічого немає. Ваший кошик для сміття пустий!",
"Name" : "Ім'я",
"Deleted" : "Видалено",
"Delete" : "Видалити"
diff --git a/apps/files_trashbin/l10n/ur.php b/apps/files_trashbin/l10n/ur.php
deleted file mode 100644
index 1b41db1d679..00000000000
--- a/apps/files_trashbin/l10n/ur.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Error" => "خرابی"
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/ur_PK.js b/apps/files_trashbin/l10n/ur_PK.js
index 4235475115c..2dbe75b304e 100644
--- a/apps/files_trashbin/l10n/ur_PK.js
+++ b/apps/files_trashbin/l10n/ur_PK.js
@@ -7,7 +7,6 @@ OC.L10N.register(
"Restore" : "بحال",
"Error" : "ایرر",
"restored" : "بحال شدہ",
- "Nothing in here. Your trash bin is empty!" : " یہاں کچھ بھی نہیں .آپکی ردی کی ٹوکری خالی ہے.",
"Name" : "اسم",
"Deleted" : "حذف شدہ ",
"Delete" : "حذف کریں"
diff --git a/apps/files_trashbin/l10n/ur_PK.json b/apps/files_trashbin/l10n/ur_PK.json
index 609b83e75c3..d7ec3662998 100644
--- a/apps/files_trashbin/l10n/ur_PK.json
+++ b/apps/files_trashbin/l10n/ur_PK.json
@@ -5,7 +5,6 @@
"Restore" : "بحال",
"Error" : "ایرر",
"restored" : "بحال شدہ",
- "Nothing in here. Your trash bin is empty!" : " یہاں کچھ بھی نہیں .آپکی ردی کی ٹوکری خالی ہے.",
"Name" : "اسم",
"Deleted" : "حذف شدہ ",
"Delete" : "حذف کریں"
diff --git a/apps/files_trashbin/l10n/vi.js b/apps/files_trashbin/l10n/vi.js
index 113fae4c2da..29338f3327e 100644
--- a/apps/files_trashbin/l10n/vi.js
+++ b/apps/files_trashbin/l10n/vi.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "Không thể khôi phục %s",
"Deleted files" : "File đã bị xóa",
"Restore" : "Khôi phục",
+ "Delete permanently" : "Xóa vĩnh vễn",
"Error" : "Lỗi",
"restored" : "khôi phục",
- "Nothing in here. Your trash bin is empty!" : "Không có gì ở đây. Thùng rác của bạn rỗng!",
"Name" : "Tên",
"Deleted" : "Đã xóa",
"Delete" : "Xóa"
diff --git a/apps/files_trashbin/l10n/vi.json b/apps/files_trashbin/l10n/vi.json
index 7323889de6f..35739aa3c14 100644
--- a/apps/files_trashbin/l10n/vi.json
+++ b/apps/files_trashbin/l10n/vi.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "Không thể khôi phục %s",
"Deleted files" : "File đã bị xóa",
"Restore" : "Khôi phục",
+ "Delete permanently" : "Xóa vĩnh vễn",
"Error" : "Lỗi",
"restored" : "khôi phục",
- "Nothing in here. Your trash bin is empty!" : "Không có gì ở đây. Thùng rác của bạn rỗng!",
"Name" : "Tên",
"Deleted" : "Đã xóa",
"Delete" : "Xóa"
diff --git a/apps/files_trashbin/l10n/zh_CN.js b/apps/files_trashbin/l10n/zh_CN.js
index 6c421ab55b9..8c9512b1d66 100644
--- a/apps/files_trashbin/l10n/zh_CN.js
+++ b/apps/files_trashbin/l10n/zh_CN.js
@@ -5,9 +5,10 @@ OC.L10N.register(
"Couldn't restore %s" : "无法恢复%s",
"Deleted files" : "已删除文件",
"Restore" : "恢复",
+ "Delete permanently" : "永久删除",
"Error" : "错误",
"restored" : "已恢复",
- "Nothing in here. Your trash bin is empty!" : "这里没有东西. 你的回收站是空的!",
+ "Select all" : "全部选择",
"Name" : "名称",
"Deleted" : "已删除",
"Delete" : "删除"
diff --git a/apps/files_trashbin/l10n/zh_CN.json b/apps/files_trashbin/l10n/zh_CN.json
index 88665113d1b..895d235aadb 100644
--- a/apps/files_trashbin/l10n/zh_CN.json
+++ b/apps/files_trashbin/l10n/zh_CN.json
@@ -3,9 +3,10 @@
"Couldn't restore %s" : "无法恢复%s",
"Deleted files" : "已删除文件",
"Restore" : "恢复",
+ "Delete permanently" : "永久删除",
"Error" : "错误",
"restored" : "已恢复",
- "Nothing in here. Your trash bin is empty!" : "这里没有东西. 你的回收站是空的!",
+ "Select all" : "全部选择",
"Name" : "名称",
"Deleted" : "已删除",
"Delete" : "删除"
diff --git a/apps/files_trashbin/l10n/zh_TW.js b/apps/files_trashbin/l10n/zh_TW.js
index 9a0ff0bdb8f..974c38d09a6 100644
--- a/apps/files_trashbin/l10n/zh_TW.js
+++ b/apps/files_trashbin/l10n/zh_TW.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"Couldn't restore %s" : "無法還原 %s",
"Deleted files" : "回收桶",
"Restore" : "還原",
+ "Delete permanently" : "永久刪除",
"Error" : "錯誤",
"restored" : "已還原",
- "Nothing in here. Your trash bin is empty!" : "您的回收桶是空的!",
"Name" : "名稱",
"Deleted" : "已刪除",
"Delete" : "刪除"
diff --git a/apps/files_trashbin/l10n/zh_TW.json b/apps/files_trashbin/l10n/zh_TW.json
index 61d7daaf1f4..f944a8db39e 100644
--- a/apps/files_trashbin/l10n/zh_TW.json
+++ b/apps/files_trashbin/l10n/zh_TW.json
@@ -3,9 +3,9 @@
"Couldn't restore %s" : "無法還原 %s",
"Deleted files" : "回收桶",
"Restore" : "還原",
+ "Delete permanently" : "永久刪除",
"Error" : "錯誤",
"restored" : "已還原",
- "Nothing in here. Your trash bin is empty!" : "您的回收桶是空的!",
"Name" : "名稱",
"Deleted" : "已刪除",
"Delete" : "刪除"
diff --git a/apps/files_trashbin/lib/capabilities.php b/apps/files_trashbin/lib/capabilities.php
new file mode 100644
index 00000000000..3f137d22b6f
--- /dev/null
+++ b/apps/files_trashbin/lib/capabilities.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright (c) Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Trashbin;
+
+
+/**
+ * Class Capabilities
+ *
+ * @package OCA\Files_Trashbin
+ */
+class Capabilities {
+
+ /**
+ * @return \OC_OCS_Result
+ */
+ public static function getCapabilities() {
+ return new \OC_OCS_Result(array(
+ 'capabilities' => array(
+ 'files' => array(
+ 'undelete' => true,
+ ),
+ ),
+ ));
+ }
+
+}
diff --git a/apps/files_trashbin/lib/exceptions.php b/apps/files_trashbin/lib/exceptions/copyrecursiveexception.php
index 23e50293b77..23e50293b77 100644
--- a/apps/files_trashbin/lib/exceptions.php
+++ b/apps/files_trashbin/lib/exceptions/copyrecursiveexception.php
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
index c2b81e3dbc8..d9e69b71aa0 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -31,8 +31,10 @@ class Helper
return $result;
}
- list($storage, $internalPath) = $view->resolvePath($dir);
+ $mount = $view->getMount($dir);
+ $storage = $mount->getStorage();
$absoluteDir = $view->getAbsolutePath($dir);
+ $internalPath = $mount->getInternalPath($absoluteDir);
if (is_resource($dirContent)) {
$originalLocations = \OCA\Files_Trashbin\Trashbin::getLocations($user);
@@ -65,7 +67,7 @@ class Helper
if ($originalPath) {
$i['extraData'] = $originalPath.'/'.$id;
}
- $result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i);
+ $result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i, $mount);
}
}
closedir($dirContent);
@@ -88,7 +90,7 @@ class Helper
$entry = \OCA\Files\Helper::formatFileInfo($i);
$entry['id'] = $id++;
$entry['etag'] = $entry['mtime']; // add fake etag, it is only needed to identify the preview image
- $entry['permissions'] = \OCP\PERMISSION_READ;
+ $entry['permissions'] = \OCP\Constants::PERMISSION_READ;
if (\OCP\App::isEnabled('files_encryption')) {
$entry['isPreviewAvailable'] = false;
}
diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 52d24143902..26257bd3817 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -22,6 +22,8 @@
namespace OCA\Files_Trashbin;
+use OC\Files\Filesystem;
+
class Trashbin {
// how long do we keep files in the trash bin if no other value is defined in the config file (unit: days)
@@ -92,11 +94,8 @@ class Trashbin {
if (!$view->is_dir('files_trashbin/versions')) {
$view->mkdir('files_trashbin/versions');
}
- if (!$view->is_dir('files_trashbin/keyfiles')) {
- $view->mkdir('files_trashbin/keyfiles');
- }
- if (!$view->is_dir('files_trashbin/share-keys')) {
- $view->mkdir('files_trashbin/share-keys');
+ if (!$view->is_dir('files_trashbin/keys')) {
+ $view->mkdir('files_trashbin/keys');
}
}
@@ -139,7 +138,9 @@ class Trashbin {
* @param string $file_path path to the deleted file/directory relative to the files root directory
*/
public static function move2trash($file_path) {
- $user = \OCP\User::getUser();
+ // get the user for which the filesystem is setup
+ $root = Filesystem::getRoot();
+ list(, $user) = explode('/', $root);
$size = 0;
list($owner, $ownerPath) = self::getUidAndFilename($file_path);
@@ -277,78 +278,23 @@ class Trashbin {
return 0;
}
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $user);
-
- // disable proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if ($util->isSystemWideMountPoint($ownerPath)) {
- $baseDir = '/files_encryption/';
- } else {
- $baseDir = $owner . '/files_encryption/';
- }
-
- $keyfile = \OC\Files\Filesystem::normalizePath($baseDir . '/keyfiles/' . $ownerPath);
+ $util = new \OCA\Files_Encryption\Util($rootView, $user);
- if ($rootView->is_dir($keyfile) || $rootView->file_exists($keyfile . '.key')) {
- // move keyfiles
- if ($rootView->is_dir($keyfile)) {
- $size += self::calculateSize(new \OC\Files\View($keyfile));
- if ($owner !== $user) {
- self::copy_recursive($keyfile, $owner . '/files_trashbin/keyfiles/' . basename($ownerPath) . '.d' . $timestamp, $rootView);
- }
- $rootView->rename($keyfile, $user . '/files_trashbin/keyfiles/' . $filename . '.d' . $timestamp);
- } else {
- $size += $rootView->filesize($keyfile . '.key');
- if ($owner !== $user) {
- $rootView->copy($keyfile . '.key', $owner . '/files_trashbin/keyfiles/' . basename($ownerPath) . '.key.d' . $timestamp);
- }
- $rootView->rename($keyfile . '.key', $user . '/files_trashbin/keyfiles/' . $filename . '.key.d' . $timestamp);
- }
+ $baseDir = '/files_encryption/';
+ if (!$util->isSystemWideMountPoint($ownerPath)) {
+ $baseDir = $owner . $baseDir;
}
- // retain share keys
- $sharekeys = \OC\Files\Filesystem::normalizePath($baseDir . '/share-keys/' . $ownerPath);
+ $keyfiles = \OC\Files\Filesystem::normalizePath($baseDir . '/keys/' . $ownerPath);
- if ($rootView->is_dir($sharekeys)) {
- $size += self::calculateSize(new \OC\Files\View($sharekeys));
+ if ($rootView->is_dir($keyfiles)) {
+ $size += self::calculateSize(new \OC\Files\View($keyfiles));
if ($owner !== $user) {
- self::copy_recursive($sharekeys, $owner . '/files_trashbin/share-keys/' . basename($ownerPath) . '.d' . $timestamp, $rootView);
- }
- $rootView->rename($sharekeys, $user . '/files_trashbin/share-keys/' . $filename . '.d' . $timestamp);
- } else {
- // handle share-keys
- $matches = \OCA\Encryption\Helper::findShareKeys($ownerPath, $sharekeys, $rootView);
- foreach ($matches as $src) {
- // get source file parts
- $pathinfo = pathinfo($src);
-
- // we only want to keep the users key so we can access the private key
- $userShareKey = $filename . '.' . $user . '.shareKey';
-
- // if we found the share-key for the owner, we need to move it to files_trashbin
- if ($pathinfo['basename'] == $userShareKey) {
-
- // calculate size
- $size += $rootView->filesize($sharekeys . '.' . $user . '.shareKey');
-
- // move file
- $rootView->rename($sharekeys . '.' . $user . '.shareKey', $user . '/files_trashbin/share-keys/' . $userShareKey . '.d' . $timestamp);
- } elseif ($owner !== $user) {
- $ownerShareKey = basename($ownerPath) . '.' . $owner . '.shareKey';
- if ($pathinfo['basename'] == $ownerShareKey) {
- $rootView->rename($sharekeys . '.' . $owner . '.shareKey', $owner . '/files_trashbin/share-keys/' . $ownerShareKey . '.d' . $timestamp);
- }
- } else {
- // don't keep other share-keys
- unlink($src);
- }
+ self::copy_recursive($keyfiles, $owner . '/files_trashbin/keys/' . basename($ownerPath) . '.d' . $timestamp, $rootView);
}
+ $rootView->rename($keyfiles, $user . '/files_trashbin/keys/' . $filename . '.d' . $timestamp);
}
- // enable proxy
- \OC_FileProxy::$enabled = $proxyStatus;
}
return $size;
}
@@ -492,7 +438,7 @@ class Trashbin {
* @return bool
*/
private static function restoreEncryptionKeys(\OC\Files\View $view, $file, $filename, $uniqueFilename, $location, $timestamp) {
- // Take care of encryption keys TODO! Get '.key' in file between file name and delete date (also for permanent delete!)
+
if (\OCP\App::isEnabled('files_encryption')) {
$user = \OCP\User::getUser();
$rootView = new \OC\Files\View('/');
@@ -506,84 +452,31 @@ class Trashbin {
return false;
}
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $user);
+ $util = new \OCA\Files_Encryption\Util($rootView, $user);
- if ($util->isSystemWideMountPoint($ownerPath)) {
- $baseDir = '/files_encryption/';
- } else {
- $baseDir = $owner . '/files_encryption/';
+ $baseDir = '/files_encryption/';
+ if (!$util->isSystemWideMountPoint($ownerPath)) {
+ $baseDir = $owner . $baseDir;
}
- $path_parts = pathinfo($file);
- $source_location = $path_parts['dirname'];
+ $source_location = dirname($file);
- if ($view->is_dir('/files_trashbin/keyfiles/' . $file)) {
+ if ($view->is_dir('/files_trashbin/keys/' . $file)) {
if ($source_location != '.') {
- $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keyfiles/' . $source_location . '/' . $filename);
- $sharekey = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/share-keys/' . $source_location . '/' . $filename);
+ $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keys/' . $source_location . '/' . $filename);
} else {
- $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keyfiles/' . $filename);
- $sharekey = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/share-keys/' . $filename);
+ $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keys/' . $filename);
}
- } else {
- $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keyfiles/' . $source_location . '/' . $filename . '.key');
}
if ($timestamp) {
$keyfile .= '.d' . $timestamp;
}
- // disable proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if ($rootView->file_exists($keyfile)) {
- // handle directory
- if ($rootView->is_dir($keyfile)) {
-
- // handle keyfiles
- $rootView->rename($keyfile, $baseDir . '/keyfiles/' . $ownerPath);
-
- // handle share-keys
- if ($timestamp) {
- $sharekey .= '.d' . $timestamp;
- }
- $rootView->rename($sharekey, $baseDir . '/share-keys/' . $ownerPath);
- } else {
- // handle keyfiles
- $rootView->rename($keyfile, $baseDir . '/keyfiles/' . $ownerPath . '.key');
-
- // handle share-keys
- $ownerShareKey = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/share-keys/' . $source_location . '/' . $filename . '.' . $user . '.shareKey');
- if ($timestamp) {
- $ownerShareKey .= '.d' . $timestamp;
- }
-
- // move only owners key
- $rootView->rename($ownerShareKey, $baseDir . '/share-keys/' . $ownerPath . '.' . $user . '.shareKey');
-
- // try to re-share if file is shared
- $filesystemView = new \OC\Files\View('/');
- $session = new \OCA\Encryption\Session($filesystemView);
- $util = new \OCA\Encryption\Util($filesystemView, $user);
-
- // fix the file size
- $absolutePath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files/' . $ownerPath);
- $util->fixFileSize($absolutePath);
-
- // get current sharing state
- $sharingEnabled = \OCP\Share::isEnabled();
-
- // get users sharing this file
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $target);
-
- // Attempt to set shareKey
- $util->setSharedFileKeyfiles($session, $usersSharing, $target);
- }
+ if ($rootView->is_dir($keyfile)) {
+ $rootView->rename($keyfile, $baseDir . '/keys/' . $ownerPath);
}
- // enable proxy
- \OC_FileProxy::$enabled = $proxyStatus;
}
}
@@ -678,27 +571,15 @@ class Trashbin {
if (\OCP\App::isEnabled('files_encryption')) {
$user = \OCP\User::getUser();
- if ($view->is_dir('/files_trashbin/files/' . $file)) {
- $keyfile = \OC\Files\Filesystem::normalizePath('files_trashbin/keyfiles/' . $filename);
- $sharekeys = \OC\Files\Filesystem::normalizePath('files_trashbin/share-keys/' . $filename);
- } else {
- $keyfile = \OC\Files\Filesystem::normalizePath('files_trashbin/keyfiles/' . $filename . '.key');
- $sharekeys = \OC\Files\Filesystem::normalizePath('files_trashbin/share-keys/' . $filename . '.' . $user . '.shareKey');
- }
+ $keyfiles = \OC\Files\Filesystem::normalizePath('files_trashbin/keys/' . $filename);
+
if ($timestamp) {
- $keyfile .= '.d' . $timestamp;
- $sharekeys .= '.d' . $timestamp;
+ $keyfiles .= '.d' . $timestamp;
}
- if ($view->file_exists($keyfile)) {
- if ($view->is_dir($keyfile)) {
- $size += self::calculateSize(new \OC\Files\View('/' . $user . '/' . $keyfile));
- $size += self::calculateSize(new \OC\Files\View('/' . $user . '/' . $sharekeys));
- } else {
- $size += $view->filesize($keyfile);
- $size += $view->filesize($sharekeys);
- }
- $view->unlink($keyfile);
- $view->unlink($sharekeys);
+ if ($view->is_dir($keyfiles)) {
+ $size += self::calculateSize(new \OC\Files\View('/' . $user . '/' . $keyfiles));
+ $view->deleteAll($keyfiles);
+
}
}
return $size;
@@ -744,11 +625,13 @@ class Trashbin {
* @return int available free space for trash bin
*/
private static function calculateFreeSpace($trashbinSize, $user) {
+ $config = \OC::$server->getConfig();
+
$softQuota = true;
- $quota = \OC_Preferences::getValue($user, 'files', 'quota');
+ $quota = $config->getUserValue($user, 'files', 'quota', null);
$view = new \OC\Files\View('/' . $user);
if ($quota === null || $quota === 'default') {
- $quota = \OC::$server->getAppConfig()->getValue('files', 'default_quota');
+ $quota = $config->getAppValue('files', 'default_quota', null);
}
if ($quota === null || $quota === 'none') {
$quota = \OC\Files\Filesystem::free_space('/');
@@ -995,7 +878,7 @@ class Trashbin {
* @return integer size of the folder
*/
private static function calculateSize($view) {
- $root = \OCP\Config::getSystemValue('datadirectory') . $view->getAbsolutePath('');
+ $root = \OC::$server->getConfig()->getSystemValue('datadirectory') . $view->getAbsolutePath('');
if (!file_exists($root)) {
return 0;
}
diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php
index fc18e88c41e..0c0f955cf40 100644
--- a/apps/files_trashbin/templates/index.php
+++ b/apps/files_trashbin/templates/index.php
@@ -4,21 +4,33 @@
</div>
<div id='notification'></div>
-<div id="emptycontent" class="hidden"><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div>
+<div id="emptycontent" class="hidden">
+ <div class="icon-delete"></div>
+ <h2><?php p($l->t('No deleted files')); ?></h2>
+ <p><?php p($l->t('You will be able to recover deleted files from here')); ?></p>
+</div>
<input type="hidden" name="dir" value="" id="dir">
+<div class="nofilterresults hidden">
+ <div class="icon-search"></div>
+ <h2><?php p($l->t('No entries found in this folder')); ?></h2>
+ <p></p>
+</div>
+
<table id="filestable">
<thead>
<tr>
<th id='headerName' class="hidden column-name">
<div id="headerName-container">
<input type="checkbox" id="select_all_trash" class="select-all"/>
- <label for="select_all_trash"></label>
+ <label for="select_all_trash">
+ <span class="hidden-visually"><?php p($l->t('Select all'))?></span>
+ </label>
<a class="name sort columntitle" data-sort="name"><span><?php p($l->t( 'Name' )); ?></span><span class="sort-indicator"></span></a>
<span id="selectedActionsList" class='selectedActions'>
<a href="" class="undelete">
- <img class="svg" alt="<?php p($l->t( 'Restore' )); ?>"
+ <img class="svg" alt=""
src="<?php print_unescaped(OCP\image_path("core", "actions/history.svg")); ?>" />
<?php p($l->t('Restore'))?>
</a>
@@ -30,7 +42,7 @@
<span class="selectedActions">
<a href="" class="delete-selected">
<?php p($l->t('Delete'))?>
- <img class="svg" alt="<?php p($l->t('Delete'))?>"
+ <img class="svg" alt=""
src="<?php print_unescaped(OCP\image_path("core", "actions/delete.svg")); ?>" />
</a>
</span>
diff --git a/apps/files_trashbin/tests/trashbin.php b/apps/files_trashbin/tests/trashbin.php
index 6fdb53f7271..f572e22623e 100644
--- a/apps/files_trashbin/tests/trashbin.php
+++ b/apps/files_trashbin/tests/trashbin.php
@@ -25,7 +25,7 @@ use OCA\Files_Trashbin;
/**
* Class Test_Encryption_Crypt
*/
-class Test_Trashbin extends \PHPUnit_Framework_TestCase {
+class Test_Trashbin extends \Test\TestCase {
const TEST_TRASHBIN_USER1 = "test-trashbin-user1";
const TEST_TRASHBIN_USER2 = "test-trashbin-user2";
@@ -43,6 +43,8 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase {
private $rootView;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
// reset backend
\OC_User::clearBackends();
\OC_User::useBackend('database');
@@ -85,18 +87,24 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase {
\OC_Config::setValue('trashbin_auto_expire', self::$rememberAutoExpire);
\OC_Hook::clear();
+
+ parent::tearDownAfterClass();
}
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->trashRoot1 = '/' . self::TEST_TRASHBIN_USER1 . '/files_trashbin';
$this->trashRoot2 = '/' . self::TEST_TRASHBIN_USER2 . '/files_trashbin';
$this->rootView = new \OC\Files\View();
self::loginHelper(self::TEST_TRASHBIN_USER1);
}
- public function tearDown() {
+ protected function tearDown() {
$this->rootView->deleteAll($this->trashRoot1);
$this->rootView->deleteAll($this->trashRoot2);
+
+ parent::tearDown();
}
/**
diff --git a/apps/files_versions/appinfo/api.php b/apps/files_versions/appinfo/api.php
deleted file mode 100644
index 3c45ff52457..00000000000
--- a/apps/files_versions/appinfo/api.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-return array(
- 'list' => array('method' => 'GET', 'class' => 'Storage', 'function' => 'getVersions',
- 'parameters' => array(
- 'file' => array('required' => true, 'type' => 'string')
- )
- ),
- 'revert' => array('method' => 'POST', 'class' => 'Storage', 'function' => 'rollback',
- 'parameters' => array(
- 'file' => array('required' => true, 'type' => 'string'),
- 'time' => array('required' => true, 'type' => 'int')
- )
- )
-);
diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php
index 78de1528f32..ae29bceb37c 100644
--- a/apps/files_versions/appinfo/app.php
+++ b/apps/files_versions/appinfo/app.php
@@ -1,10 +1,5 @@
<?php
-//require_once 'files_versions/versions.php';
-OC::$CLASSPATH['OCA\Files_Versions\Storage'] = 'files_versions/lib/versions.php';
-OC::$CLASSPATH['OCA\Files_Versions\Hooks'] = 'files_versions/lib/hooks.php';
-OC::$CLASSPATH['OCA\Files_Versions\Capabilities'] = 'files_versions/lib/capabilities.php';
-
OCP\Util::addTranslations('files_versions');
OCP\Util::addscript('files_versions', 'versions');
OCP\Util::addStyle('files_versions', 'versions');
diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php
index 057834213e4..83c7746d1e7 100644
--- a/apps/files_versions/appinfo/routes.php
+++ b/apps/files_versions/appinfo/routes.php
@@ -11,6 +11,8 @@ function() {
require_once __DIR__ . '/../ajax/preview.php';
});
+$this->create('files_versions_download', 'download.php')
+ ->actionInclude('files_versions/download.php');
$this->create('files_versions_ajax_getVersions', 'ajax/getVersions.php')
->actionInclude('files_versions/ajax/getVersions.php');
$this->create('files_versions_ajax_rollbackVersion', 'ajax/rollbackVersion.php')
diff --git a/apps/files_versions/download.php b/apps/files_versions/download.php
index 2fe56d2e638..e5139450f5e 100644
--- a/apps/files_versions/download.php
+++ b/apps/files_versions/download.php
@@ -22,7 +22,7 @@
*/
OCP\JSON::checkAppEnabled('files_versions');
-//OCP\JSON::callCheck();
+OCP\JSON::checkLoggedIn();
$file = $_GET['file'];
$revision=(int)$_GET['revision'];
diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js
index 64e0df76490..1a47c1749f9 100644
--- a/apps/files_versions/js/versions.js
+++ b/apps/files_versions/js/versions.js
@@ -11,6 +11,8 @@
/* global scanFiles, escapeHTML, formatDate */
$(document).ready(function(){
+ // TODO: namespace all this as OCA.FileVersions
+
if ($('#isPublic').val()){
// no versions actions in public mode
// beware of https://github.com/owncloud/core/issues/4545
diff --git a/apps/files_versions/l10n/bs.js b/apps/files_versions/l10n/bs.js
new file mode 100644
index 00000000000..21e9851b64c
--- /dev/null
+++ b/apps/files_versions/l10n/bs.js
@@ -0,0 +1,11 @@
+OC.L10N.register(
+ "files_versions",
+ {
+ "Could not revert: %s" : "Nije moguće vratiti: %s",
+ "Versions" : "Verzije",
+ "Failed to revert {file} to revision {timestamp}." : "Nije uspelo vraćanje {file} na reviziju {timestamp}.",
+ "More versions..." : "Više verzija...",
+ "No other versions available" : "Druge verzije su nedostupne",
+ "Restore" : "Obnovi"
+},
+"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_versions/l10n/bs.json b/apps/files_versions/l10n/bs.json
new file mode 100644
index 00000000000..1bc885614ed
--- /dev/null
+++ b/apps/files_versions/l10n/bs.json
@@ -0,0 +1,9 @@
+{ "translations": {
+ "Could not revert: %s" : "Nije moguće vratiti: %s",
+ "Versions" : "Verzije",
+ "Failed to revert {file} to revision {timestamp}." : "Nije uspelo vraćanje {file} na reviziju {timestamp}.",
+ "More versions..." : "Više verzija...",
+ "No other versions available" : "Druge verzije su nedostupne",
+ "Restore" : "Obnovi"
+},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
+} \ No newline at end of file
diff --git a/apps/files_versions/l10n/kn.js b/apps/files_versions/l10n/kn.js
new file mode 100644
index 00000000000..b394094989a
--- /dev/null
+++ b/apps/files_versions/l10n/kn.js
@@ -0,0 +1,11 @@
+OC.L10N.register(
+ "files_versions",
+ {
+ "Could not revert: %s" : "ಹಿಂತಿರುಗಲಾಗಲಿಲ್ಲ: %s",
+ "Versions" : "ಆವೃತ್ತಿಗಳು",
+ "Failed to revert {file} to revision {timestamp}." : "{timestamp} ದ ಪರಿಷ್ಕರಣೆ ಇಂದ {file} ಕಡತವನ್ನು ಹಿಂದಿರುಗಿಸಲು ವಿಫಲವಾಗಿದೆ.",
+ "More versions..." : "ಇನ್ನಷ್ಟು ಆವೃತ್ತಿಗಳು ...",
+ "No other versions available" : "ಇನ್ನಿತರೆ ಯಾವುದೇ ಆವೃತ್ತಿಗಳು ಲಭ್ಯವಿಲ್ಲ",
+ "Restore" : "ಮರುಸ್ಥಾಪಿಸು"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/files_versions/l10n/kn.json b/apps/files_versions/l10n/kn.json
new file mode 100644
index 00000000000..17b61dd6bac
--- /dev/null
+++ b/apps/files_versions/l10n/kn.json
@@ -0,0 +1,9 @@
+{ "translations": {
+ "Could not revert: %s" : "ಹಿಂತಿರುಗಲಾಗಲಿಲ್ಲ: %s",
+ "Versions" : "ಆವೃತ್ತಿಗಳು",
+ "Failed to revert {file} to revision {timestamp}." : "{timestamp} ದ ಪರಿಷ್ಕರಣೆ ಇಂದ {file} ಕಡತವನ್ನು ಹಿಂದಿರುಗಿಸಲು ವಿಫಲವಾಗಿದೆ.",
+ "More versions..." : "ಇನ್ನಷ್ಟು ಆವೃತ್ತಿಗಳು ...",
+ "No other versions available" : "ಇನ್ನಿತರೆ ಯಾವುದೇ ಆವೃತ್ತಿಗಳು ಲಭ್ಯವಿಲ್ಲ",
+ "Restore" : "ಮರುಸ್ಥಾಪಿಸು"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/files_versions/l10n/ru.js b/apps/files_versions/l10n/ru.js
index 2dc12f9ff2a..74ad347804b 100644
--- a/apps/files_versions/l10n/ru.js
+++ b/apps/files_versions/l10n/ru.js
@@ -1,11 +1,11 @@
OC.L10N.register(
"files_versions",
{
- "Could not revert: %s" : "Не может быть возвращён: %s",
+ "Could not revert: %s" : "Невозможно откатить: %s",
"Versions" : "Версии",
- "Failed to revert {file} to revision {timestamp}." : "Не удалось возвратить {file} к ревизии {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
"More versions..." : "Ещё версии...",
"No other versions available" : "Других версий не доступно",
- "Restore" : "Восстановить"
+ "Restore" : "Откатить"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_versions/l10n/ru.json b/apps/files_versions/l10n/ru.json
index fe1906bf467..b21bd54331f 100644
--- a/apps/files_versions/l10n/ru.json
+++ b/apps/files_versions/l10n/ru.json
@@ -1,9 +1,9 @@
{ "translations": {
- "Could not revert: %s" : "Не может быть возвращён: %s",
+ "Could not revert: %s" : "Невозможно откатить: %s",
"Versions" : "Версии",
- "Failed to revert {file} to revision {timestamp}." : "Не удалось возвратить {file} к ревизии {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
"More versions..." : "Ещё версии...",
"No other versions available" : "Других версий не доступно",
- "Restore" : "Восстановить"
+ "Restore" : "Откатить"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/storage.php
index 82e0ecc3e2f..3d30ada863a 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/storage.php
@@ -479,15 +479,16 @@ class Storage {
* Erase a file's versions which exceed the set quota
*/
private static function expire($filename, $versionsSize = null, $offset = 0) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+ $config = \OC::$server->getConfig();
+ if($config->getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
$versionsFileview = new \OC\Files\View('/'.$uid.'/files_versions');
// get available disk space for user
$softQuota = true;
- $quota = \OC_Preferences::getValue($uid, 'files', 'quota');
+ $quota = $config->getUserValue($uid, 'files', 'quota', null);
if ( $quota === null || $quota === 'default') {
- $quota = \OC::$server->getAppConfig()->getValue('files', 'default_quota');
+ $quota = $config->getAppValue('files', 'default_quota', null);
}
if ( $quota === null || $quota === 'none' ) {
$quota = \OC\Files\Filesystem::free_space('/');
diff --git a/apps/files_versions/tests/versions.php b/apps/files_versions/tests/versions.php
index a3b8595a34b..cf0ffb320e2 100644
--- a/apps/files_versions/tests/versions.php
+++ b/apps/files_versions/tests/versions.php
@@ -21,13 +21,12 @@
*/
require_once __DIR__ . '/../appinfo/app.php';
-require_once __DIR__ . '/../lib/versions.php';
/**
* Class Test_Files_versions
* this class provide basic files versions test
*/
-class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
+class Test_Files_Versioning extends \Test\TestCase {
const TEST_VERSIONS_USER = 'test-versions-user';
const TEST_VERSIONS_USER2 = 'test-versions-user2';
@@ -39,6 +38,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
private $rootView;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
// clear share hooks
\OC_Hook::clear('OCP\\Share');
@@ -55,9 +55,13 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
// cleanup test user
\OC_User::deleteUser(self::TEST_VERSIONS_USER);
\OC_User::deleteUser(self::TEST_VERSIONS_USER2);
+
+ parent::tearDownAfterClass();
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
self::loginHelper(self::TEST_VERSIONS_USER);
$this->rootView = new \OC\Files\View();
if (!$this->rootView->file_exists(self::USERS_VERSIONS_ROOT)) {
@@ -65,8 +69,10 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
}
}
- function tearDown() {
+ protected function tearDown() {
$this->rootView->deleteAll(self::USERS_VERSIONS_ROOT);
+
+ parent::tearDown();
}
/**
@@ -74,7 +80,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
* test expire logic
* @dataProvider versionsProvider
*/
- function testGetExpireList($versions, $sizeOfAllDeletedFiles) {
+ public function testGetExpireList($versions, $sizeOfAllDeletedFiles) {
// last interval end at 2592000
$startTime = 5000000;
@@ -216,7 +222,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
);
}
- function testRename() {
+ public function testRename() {
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");
@@ -247,7 +253,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
\OC\Files\Filesystem::unlink('test2.txt');
}
- function testRenameInSharedFolder() {
+ public function testRenameInSharedFolder() {
\OC\Files\Filesystem::mkdir('folder1');
\OC\Files\Filesystem::mkdir('folder1/folder2');
@@ -270,7 +276,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
$this->rootView->file_put_contents($v1, 'version1');
$this->rootView->file_put_contents($v2, 'version2');
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, \OCP\Constants::PERMISSION_ALL);
self::loginHelper(self::TEST_VERSIONS_USER2);
@@ -291,7 +297,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
\OC\Files\Filesystem::unlink('/folder1/folder2/test.txt');
}
- function testRenameSharedFile() {
+ public function testRenameSharedFile() {
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");
@@ -313,7 +319,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
$this->rootView->file_put_contents($v1, 'version1');
$this->rootView->file_put_contents($v2, 'version2');
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, \OCP\Constants::PERMISSION_ALL);
self::loginHelper(self::TEST_VERSIONS_USER2);
@@ -334,7 +340,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
\OC\Files\Filesystem::unlink('/test.txt');
}
- function testCopy() {
+ public function testCopy() {
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");
diff --git a/apps/provisioning_api/appinfo/app.php b/apps/provisioning_api/appinfo/app.php
new file mode 100644
index 00000000000..671d668bfac
--- /dev/null
+++ b/apps/provisioning_api/appinfo/app.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */ \ No newline at end of file
diff --git a/apps/provisioning_api/appinfo/info.xml b/apps/provisioning_api/appinfo/info.xml
new file mode 100644
index 00000000000..3f1fa745cf5
--- /dev/null
+++ b/apps/provisioning_api/appinfo/info.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<info>
+ <id>provisioning_api</id>
+ <name>Provisioning API</name>
+ <description>
+ This application enables a set of APIs that external systems can use to create, edit, delete and query user
+ attributes, query, set and remove groups, set quota and query total storage used in ownCloud. Group admin users
+ can also query ownCloud and perform the same functions as an admin for groups they manage. The API also enables
+ an admin to query for active ownCloud applications, application info, and to enable or disable an app remotely.
+ Once the app is enabled, http requests can be used via a Basic Auth header to perform any of the functions
+ listed above. More information is available in the Provisioning API documentation, including example calls
+ and server responses.
+ </description>
+ <licence>AGPL</licence>
+ <author>Tom Needham</author>
+ <requiremin>8</requiremin>
+ <shipped>true</shipped>
+ <default_enable/>
+ <documentation>
+ <admin>admin-provisioning-api</admin>
+ </documentation>
+</info>
diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php
new file mode 100644
index 00000000000..7c626501d18
--- /dev/null
+++ b/apps/provisioning_api/appinfo/routes.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Jörn Friedrich Dreyer <jfd@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Users
+OCP\API::register('get', '/cloud/users', array('OCA\Provisioning_API\Users', 'getUsers'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('post', '/cloud/users', array('OCA\Provisioning_API\Users', 'addUser'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('get', '/cloud/users/{userid}', array('OCA\Provisioning_API\Users', 'getUser'), 'provisioning_api', OC_API::USER_AUTH);
+OCP\API::register('put', '/cloud/users/{userid}', array('OCA\Provisioning_API\Users', 'editUser'), 'provisioning_api', OC_API::USER_AUTH);
+OCP\API::register('delete', '/cloud/users/{userid}', array('OCA\Provisioning_API\Users', 'deleteUser'), 'provisioning_api', OC_API::SUBADMIN_AUTH);
+OCP\API::register('get', '/cloud/users/{userid}/groups', array('OCA\Provisioning_API\Users', 'getUsersGroups'), 'provisioning_api', OC_API::USER_AUTH);
+OCP\API::register('post', '/cloud/users/{userid}/groups', array('OCA\Provisioning_API\Users', 'addToGroup'), 'provisioning_api', OC_API::SUBADMIN_AUTH);
+OCP\API::register('delete', '/cloud/users/{userid}/groups', array('OCA\Provisioning_API\Users', 'removeFromGroup'), 'provisioning_api', OC_API::SUBADMIN_AUTH);
+OCP\API::register('post', '/cloud/users/{userid}/subadmins', array('OCA\Provisioning_API\Users', 'addSubAdmin'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('delete', '/cloud/users/{userid}/subadmins', array('OCA\Provisioning_API\Users', 'removeSubAdmin'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('get', '/cloud/users/{userid}/subadmins', array('OCA\Provisioning_API\Users', 'getUserSubAdminGroups'), 'provisioning_api', OC_API::ADMIN_AUTH);
+
+// Groups
+OCP\API::register('get', '/cloud/groups', array('OCA\Provisioning_API\Groups', 'getGroups'), 'provisioning_api', OC_API::SUBADMIN_AUTH);
+OCP\API::register('post', '/cloud/groups', array('OCA\Provisioning_API\Groups', 'addGroup'), 'provisioning_api', OC_API::SUBADMIN_AUTH);
+OCP\API::register('get', '/cloud/groups/{groupid}', array('OCA\Provisioning_API\Groups', 'getGroup'), 'provisioning_api', OC_API::SUBADMIN_AUTH);
+OCP\API::register('delete', '/cloud/groups/{groupid}', array('OCA\Provisioning_API\Groups', 'deleteGroup'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('get', '/cloud/groups/{groupid}/subadmins', array('OCA\Provisioning_API\Groups', 'getSubAdminsOfGroup'), 'provisioning_api', OC_API::ADMIN_AUTH);
+
+// Apps
+OCP\API::register('get', '/cloud/apps', array('OCA\Provisioning_API\Apps', 'getApps'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('get', '/cloud/apps/{appid}', array('OCA\Provisioning_API\Apps', 'getAppInfo'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('post', '/cloud/apps/{appid}', array('OCA\Provisioning_API\Apps', 'enable'), 'provisioning_api', OC_API::ADMIN_AUTH);
+OCP\API::register('delete', '/cloud/apps/{appid}', array('OCA\Provisioning_API\Apps', 'disable'), 'provisioning_api', OC_API::ADMIN_AUTH);
diff --git a/apps/provisioning_api/appinfo/version b/apps/provisioning_api/appinfo/version
new file mode 100644
index 00000000000..3b04cfb60da
--- /dev/null
+++ b/apps/provisioning_api/appinfo/version
@@ -0,0 +1 @@
+0.2
diff --git a/apps/provisioning_api/lib/apps.php b/apps/provisioning_api/lib/apps.php
new file mode 100644
index 00000000000..f44ccd86a13
--- /dev/null
+++ b/apps/provisioning_api/lib/apps.php
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API;
+
+use \OC_OCS_Result;
+use \OC_App;
+
+class Apps {
+
+ public static function getApps($parameters){
+ $apps = OC_App::listAllApps();
+ $list = array();
+ foreach($apps as $app) {
+ $list[] = $app['id'];
+ }
+ $filter = isset($_GET['filter']) ? $_GET['filter'] : false;
+ if($filter){
+ switch($filter){
+ case 'enabled':
+ return new OC_OCS_Result(array('apps' => \OC_App::getEnabledApps()));
+ break;
+ case 'disabled':
+ $enabled = OC_App::getEnabledApps();
+ return new OC_OCS_Result(array('apps' => array_diff($list, $enabled)));
+ break;
+ default:
+ // Invalid filter variable
+ return new OC_OCS_Result(null, 101);
+ break;
+ }
+
+ } else {
+ return new OC_OCS_Result(array('apps' => $list));
+ }
+ }
+
+ public static function getAppInfo($parameters){
+ $app = $parameters['appid'];
+ $info = OC_App::getAppInfo($app);
+ if(!is_null($info)) {
+ return new OC_OCS_Result(OC_App::getAppInfo($app));
+ } else {
+ return new OC_OCS_Result(null, \OC_API::RESPOND_NOT_FOUND, 'The request app was not found');
+ }
+ }
+
+ public static function enable($parameters){
+ $app = $parameters['appid'];
+ OC_App::enable($app);
+ return new OC_OCS_Result(null, 100);
+ }
+
+ public static function disable($parameters){
+ $app = $parameters['appid'];
+ OC_App::disable($app);
+ return new OC_OCS_Result(null, 100);
+ }
+
+}
diff --git a/apps/provisioning_api/lib/groups.php b/apps/provisioning_api/lib/groups.php
new file mode 100644
index 00000000000..4440c5bf509
--- /dev/null
+++ b/apps/provisioning_api/lib/groups.php
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Bart Visscher
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API;
+
+use \OC_OCS_Result;
+use \OC_Group;
+use \OC_SubAdmin;
+
+class Groups{
+
+ /**
+ * returns a list of groups
+ */
+ public static function getGroups($parameters){
+ $search = !empty($_GET['search']) ? $_GET['search'] : '';
+ $limit = !empty($_GET['limit']) ? $_GET['limit'] : null;
+ $offset = !empty($_GET['offset']) ? $_GET['offset'] : null;
+ return new OC_OCS_Result(array('groups' => OC_Group::getGroups($search, $limit, $offset)));
+ }
+
+ /**
+ * returns an array of users in the group specified
+ */
+ public static function getGroup($parameters){
+ // Check the group exists
+ if(!OC_Group::groupExists($parameters['groupid'])){
+ return new OC_OCS_Result(null, \OC_API::RESPOND_NOT_FOUND, 'The requested group could not be found');
+ }
+ // Check subadmin has access to this group
+ if(\OC_User::isAdminUser(\OC_User::getUser())
+ || in_array($parameters['groupid'], \OC_SubAdmin::getSubAdminsGroups(\OC_User::getUser()))){
+ return new OC_OCS_Result(array('users' => OC_Group::usersInGroup($parameters['groupid'])));
+ } else {
+ return new OC_OCS_Result(null, \OC_API::RESPOND_UNAUTHORISED, 'User does not have access to specified group');
+ }
+ }
+
+ /**
+ * creates a new group
+ */
+ public static function addGroup($parameters){
+ // Validate name
+ $groupid = isset($_POST['groupid']) ? $_POST['groupid'] : '';
+ if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $groupid ) || empty($groupid)){
+ \OC_Log::write('provisioning_api', 'Attempt made to create group using invalid characters.', \OC_Log::ERROR);
+ return new OC_OCS_Result(null, 101, 'Invalid group name');
+ }
+ // Check if it exists
+ if(OC_Group::groupExists($groupid)){
+ return new OC_OCS_Result(null, 102);
+ }
+ if(OC_Group::createGroup($groupid)){
+ return new OC_OCS_Result(null, 100);
+ } else {
+ return new OC_OCS_Result(null, 103);
+ }
+ }
+
+ public static function deleteGroup($parameters){
+ // Check it exists
+ if(!OC_Group::groupExists($parameters['groupid'])){
+ return new OC_OCS_Result(null, 101);
+ } else if($parameters['groupid'] == 'admin' || !OC_Group::deleteGroup($parameters['groupid'])){
+ // Cannot delete admin group
+ return new OC_OCS_Result(null, 102);
+ } else {
+ return new OC_OCS_Result(null, 100);
+ }
+ }
+
+ public static function getSubAdminsOfGroup($parameters) {
+ $group = $parameters['groupid'];
+ // Check group exists
+ if(!OC_Group::groupExists($group)) {
+ return new OC_OCS_Result(null, 101, 'Group does not exist');
+ }
+ // Go
+ if(!$subadmins = OC_Subadmin::getGroupsSubAdmins($group)) {
+ return new OC_OCS_Result(null, 102, 'Unknown error occured');
+ } else {
+ return new OC_OCS_Result($subadmins);
+ }
+ }
+
+}
diff --git a/apps/provisioning_api/lib/users.php b/apps/provisioning_api/lib/users.php
new file mode 100644
index 00000000000..4262dff7a6c
--- /dev/null
+++ b/apps/provisioning_api/lib/users.php
@@ -0,0 +1,346 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ * @author Bart Visscher
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API;
+
+use \OC_OCS_Result;
+use \OC_SubAdmin;
+use \OC_User;
+use \OC_Group;
+use \OC_Helper;
+
+class Users {
+
+ /**
+ * returns a list of users
+ */
+ public static function getUsers(){
+ $search = !empty($_GET['search']) ? $_GET['search'] : '';
+ $limit = !empty($_GET['limit']) ? $_GET['limit'] : null;
+ $offset = !empty($_GET['offset']) ? $_GET['offset'] : null;
+ return new OC_OCS_Result(array('users' => OC_User::getUsers($search, $limit, $offset)));
+ }
+
+ public static function addUser(){
+ $userId = isset($_POST['userid']) ? $_POST['userid'] : null;
+ $password = isset($_POST['password']) ? $_POST['password'] : null;
+ if(OC_User::userExists($userId)) {
+ \OC_Log::write('ocs_api', 'Failed addUser attempt: User already exists.', \OC_Log::ERROR);
+ return new OC_OCS_Result(null, 102, 'User already exists');
+ } else {
+ try {
+ OC_User::createUser($userId, $password);
+ \OC_Log::write('ocs_api', 'Successful addUser call with userid: '.$_POST['userid'], \OC_Log::INFO);
+ return new OC_OCS_Result(null, 100);
+ } catch (\Exception $e) {
+ \OC_Log::write('ocs_api', 'Failed addUser attempt with exception: '.$e->getMessage(), \OC_Log::ERROR);
+ return new OC_OCS_Result(null, 101, 'Bad request');
+ }
+ }
+ }
+
+ /**
+ * gets user info
+ */
+ public static function getUser($parameters){
+ $userId = $parameters['userid'];
+ // Admin? Or SubAdmin?
+ if(OC_User::isAdminUser(OC_User::getUser()) || OC_SubAdmin::isUserAccessible(OC_User::getUser(), $userId)) {
+ // Check they exist
+ if(!OC_User::userExists($userId)) {
+ return new OC_OCS_Result(null, \OC_API::RESPOND_NOT_FOUND, 'The requested user could not be found');
+ }
+ // Show all
+ $return = array(
+ 'email',
+ 'enabled',
+ );
+ if(OC_User::getUser() != $userId) {
+ $return[] = 'quota';
+ }
+ } else {
+ // Check they are looking up themselves
+ if(OC_User::getUser() != $userId) {
+ return new OC_OCS_Result(null, \OC_API::RESPOND_UNAUTHORISED);
+ }
+ // Return some additional information compared to the core route
+ $return = array(
+ 'email',
+ 'displayname',
+ );
+ }
+
+ $config = \OC::$server->getConfig();
+
+ // Find the data
+ $data = array();
+ \OC_Util::tearDownFS();
+ \OC_Util::setupFS($userId);
+ $storage = OC_Helper::getStorageInfo('/');
+ $data['quota'] = array(
+ 'free' => $storage['free'],
+ 'used' => $storage['used'],
+ 'total' => $storage['total'],
+ 'relative' => $storage['relative'],
+ );
+ $data['enabled'] = $config->getUserValue($userId, 'core', 'enabled', 'true');
+ $data['email'] = $config->getUserValue($userId, 'settings', 'email');
+ $data['displayname'] = OC_User::getDisplayName($parameters['userid']);
+
+ // Return the appropriate data
+ $responseData = array();
+ foreach($return as $key) {
+ $responseData[$key] = $data[$key];
+ }
+
+ return new OC_OCS_Result($responseData);
+ }
+
+ /**
+ * edit users
+ */
+ public static function editUser($parameters){
+ $userId = $parameters['userid'];
+ if($userId === OC_User::getUser()) {
+ // Editing self (display, email)
+ $permittedFields[] = 'display';
+ $permittedFields[] = 'email';
+ $permittedFields[] = 'password';
+ // If admin they can edit their own quota
+ if(OC_User::isAdminUser(OC_User::getUser())) {
+ $permittedFields[] = 'quota';
+ }
+ } else {
+ // Check if admin / subadmin
+ if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $userId)
+ || OC_User::isAdminUser(OC_User::getUser())) {
+ // They have permissions over the user
+ $permittedFields[] = 'display';
+ $permittedFields[] = 'quota';
+ $permittedFields[] = 'password';
+ $permittedFields[] = 'email';
+ } else {
+ // No rights
+ return new OC_OCS_Result(null, 997);
+ }
+ }
+ // Check if permitted to edit this field
+ if(!in_array($parameters['_put']['key'], $permittedFields)) {
+ return new OC_OCS_Result(null, 997);
+ }
+ // Process the edit
+ switch($parameters['_put']['key']){
+ case 'display':
+ OC_User::setDisplayName($userId, $parameters['_put']['value']);
+ break;
+ case 'quota':
+ $quota = $parameters['_put']['value'];
+ if($quota !== 'none' and $quota !== 'default') {
+ $quota = OC_Helper::computerFileSize($quota);
+ if($quota == 0) {
+ $quota = 'default';
+ }else if($quota == -1){
+ $quota = 'none';
+ } else {
+ $quota = OC_Helper::humanFileSize($quota);
+ }
+ }
+ \OC::$server->getConfig()->setUserValue($userId, 'files', 'quota', $quota);
+ break;
+ case 'password':
+ OC_User::setPassword($userId, $parameters['_put']['value']);
+ break;
+ case 'email':
+ if(filter_var($parameters['_put']['value'], FILTER_VALIDATE_EMAIL)) {
+ \OC::$server->getConfig()->setUserValue($userId, 'settings', 'email', $parameters['_put']['value']);
+ } else {
+ return new OC_OCS_Result(null, 102);
+ }
+ break;
+ default:
+ return new OC_OCS_Result(null, 103);
+ break;
+ }
+ return new OC_OCS_Result(null, 100);
+ }
+
+ public static function deleteUser($parameters){
+ if(!OC_User::userExists($parameters['userid'])
+ || $parameters['userid'] === OC_User::getUser()) {
+ return new OC_OCS_Result(null, 101);
+ }
+ // If not permitted
+ if(!OC_User::isAdminUser(OC_User::getUser()) && !OC_SubAdmin::isUserAccessible(OC_User::getUser(), $parameters['userid'])) {
+ return new OC_OCS_Result(null, 997);
+ }
+ // Go ahead with the delete
+ if(OC_User::deleteUser($parameters['userid'])) {
+ return new OC_OCS_Result(null, 100);
+ } else {
+ return new OC_OCS_Result(null, 101);
+ }
+ }
+
+ public static function getUsersGroups($parameters){
+ if($parameters['userid'] === OC_User::getUser() || OC_User::isAdminUser(OC_User::getUser())) {
+ // Self lookup or admin lookup
+ return new OC_OCS_Result(array('groups' => OC_Group::getUserGroups($parameters['userid'])));
+ } else {
+ // Looking up someone else
+ if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $parameters['userid'])) {
+ // Return the group that the method caller is subadmin of for the user in question
+ $groups = array_intersect(OC_SubAdmin::getSubAdminsGroups(OC_User::getUser()), OC_Group::getUserGroups($parameters['userid']));
+ return new OC_OCS_Result(array('groups' => $groups));
+ } else {
+ // Not permitted
+ return new OC_OCS_Result(null, 997);
+ }
+ }
+
+ }
+
+ public static function addToGroup($parameters){
+ $group = !empty($_POST['groupid']) ? $_POST['groupid'] : null;
+ if(is_null($group)){
+ return new OC_OCS_Result(null, 101);
+ }
+ // Check they're an admin
+ if(!OC_Group::inGroup(OC_User::getUser(), 'admin')){
+ // This user doesn't have rights to add a user to this group
+ return new OC_OCS_Result(null, \OC_API::RESPOND_UNAUTHORISED);
+ }
+ // Check if the group exists
+ if(!OC_Group::groupExists($group)){
+ return new OC_OCS_Result(null, 102);
+ }
+ // Check if the user exists
+ if(!OC_User::userExists($parameters['userid'])){
+ return new OC_OCS_Result(null, 103);
+ }
+ // Add user to group
+ return OC_Group::addToGroup($parameters['userid'], $group) ? new OC_OCS_Result(null, 100) : new OC_OCS_Result(null, 105);
+ }
+
+ public static function removeFromGroup($parameters){
+ $group = !empty($parameters['_delete']['groupid']) ? $parameters['_delete']['groupid'] : null;
+ if(is_null($group)){
+ return new OC_OCS_Result(null, 101);
+ }
+ // If they're not an admin, check they are a subadmin of the group in question
+ if(!OC_Group::inGroup(OC_User::getUser(), 'admin') && !OC_SubAdmin::isSubAdminofGroup(OC_User::getUser(), $group)){
+ return new OC_OCS_Result(null, 104);
+ }
+ // Check they aren't removing themselves from 'admin' or their 'subadmin; group
+ if($parameters['userid'] === OC_User::getUser()){
+ if(OC_Group::inGroup(OC_User::getUser(), 'admin')){
+ if($group === 'admin'){
+ return new OC_OCS_Result(null, 105, 'Cannot remove yourself from the admin group');
+ }
+ } else {
+ // Not an admin, check they are not removing themself from their subadmin group
+ if(in_array($group, OC_SubAdmin::getSubAdminsGroups(OC_User::getUser()))){
+ return new OC_OCS_Result(null, 105, 'Cannot remove yourself from this group as you are a SubAdmin');
+ }
+ }
+ }
+ // Check if the group exists
+ if(!OC_Group::groupExists($group)){
+ return new OC_OCS_Result(null, 102);
+ }
+ // Check if the user exists
+ if(!OC_User::userExists($parameters['userid'])){
+ return new OC_OCS_Result(null, 103);
+ }
+ // Remove user from group
+ return OC_Group::removeFromGroup($parameters['userid'], $group) ? new OC_OCS_Result(null, 100) : new OC_OCS_Result(null, 105);
+ }
+
+ /**
+ * Creates a subadmin
+ */
+ public static function addSubAdmin($parameters) {
+ $group = $_POST['groupid'];
+ $user = $parameters['userid'];
+ // Check if the user exists
+ if(!OC_User::userExists($user)) {
+ return new OC_OCS_Result(null, 101, 'User does not exist');
+ }
+ // Check if group exists
+ if(!OC_Group::groupExists($group)) {
+ return new OC_OCS_Result(null, 102, 'Group:'.$group.' does not exist');
+ }
+ // Check if trying to make subadmin of admin group
+ if(strtolower($group) == 'admin') {
+ return new OC_OCS_Result(null, 103, 'Cannot create subadmins for admin group');
+ }
+ // Go
+ if(OC_Subadmin::createSubAdmin($user, $group)) {
+ return new OC_OCS_Result(null, 100);
+ } else {
+ return new OC_OCS_Result(null, 103, 'Unknown error occured');
+ }
+
+ }
+
+ /**
+ * Removes a subadmin from a group
+ */
+ public static function removeSubAdmin($parameters) {
+ $group = $parameters['_delete']['groupid'];
+ $user = $parameters['userid'];
+ // Check if the user exists
+ if(!OC_User::userExists($user)) {
+ return new OC_OCS_Result(null, 101, 'User does not exist');
+ }
+ // Check if they are a subadmin of this said group
+ if(!OC_SubAdmin::isSubAdminofGroup($user, $group)) {
+ return new OC_OCS_Result(null, 102, 'User is not a subadmin of this group');
+ }
+ // Go
+ if(OC_Subadmin::deleteSubAdmin($user, $group)) {
+ return new OC_OCS_Result(null, 100);
+ } else {
+ return new OC_OCS_Result(null, 103, 'Unknown error occurred');
+ }
+ }
+
+ /**
+ * @Get the groups a user is a subadmin of
+ */
+ public static function getUserSubAdminGroups($parameters) {
+ $user = $parameters['userid'];
+ // Check if the user exists
+ if(!OC_User::userExists($user)) {
+ return new OC_OCS_Result(null, 101, 'User does not exist');
+ }
+ // Get the subadmin groups
+ if(!$groups = OC_SubAdmin::getSubAdminsGroups($user)) {
+ return new OC_OCS_Result(null, 102, 'Unknown error occurred');
+ } else {
+ return new OC_OCS_Result($groups);
+ }
+ }
+}
diff --git a/apps/provisioning_api/tests/appstest.php b/apps/provisioning_api/tests/appstest.php
new file mode 100644
index 00000000000..1d5642b6302
--- /dev/null
+++ b/apps/provisioning_api/tests/appstest.php
@@ -0,0 +1,84 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+class AppsTest extends TestCase {
+ public function testGetAppInfo() {
+ $result = \OCA\provisioning_API\Apps::getAppInfo(array('appid' => 'provisioning_api'));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+
+ }
+
+ public function testGetAppInfoOnBadAppID() {
+
+ $result = \OCA\provisioning_API\Apps::getAppInfo(array('appid' => 'not_provisioning_api'));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(\OC_API::RESPOND_NOT_FOUND, $result->getStatusCode());
+
+ }
+
+ public function testGetApps() {
+
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ \OC_User::setUserId($user);
+
+ $result = \OCA\provisioning_API\Apps::getApps(array());
+
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals(count(\OC_App::listAllApps()), count($data['apps']));
+
+ }
+
+ public function testGetAppsEnabled() {
+
+ $_GET['filter'] = 'enabled';
+ $result = \OCA\provisioning_API\Apps::getApps(array('filter' => 'enabled'));
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps']));
+
+ }
+
+ public function testGetAppsDisabled() {
+
+ $_GET['filter'] = 'disabled';
+ $result = \OCA\provisioning_API\Apps::getApps(array('filter' => 'disabled'));
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $apps = \OC_App::listAllApps();
+ $list = array();
+ foreach($apps as $app) {
+ $list[] = $app['id'];
+ }
+ $disabled = array_diff($list, \OC_App::getEnabledApps());
+ $this->assertEquals(count($disabled), count($data['apps']));
+
+ }
+}
diff --git a/apps/provisioning_api/tests/groupstest.php b/apps/provisioning_api/tests/groupstest.php
new file mode 100644
index 00000000000..a25ebfbacfe
--- /dev/null
+++ b/apps/provisioning_api/tests/groupstest.php
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+class GroupsTest extends TestCase {
+ public function testGetGroupAsUser() {
+
+ $users = $this->generateUsers(2);
+ \OC_User::setUserId($users[0]);
+
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_Group::addToGroup($users[1], $group);
+
+ $result = \OCA\provisioning_api\Groups::getGroup(array(
+ 'groupid' => $group,
+ ));
+
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(\OC_API::RESPOND_UNAUTHORISED, $result->getStatusCode());
+
+ }
+
+ public function testGetGroupAsSubadmin() {
+
+ $users = $this->generateUsers(2);
+ \OC_User::setUserId($users[0]);
+
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_Group::addToGroup($users[0], $group);
+ \OC_Group::addToGroup($users[1], $group);
+
+ \OC_SubAdmin::createSubAdmin($users[0], $group);
+
+ $result = \OCA\provisioning_api\Groups::getGroup(array(
+ 'groupid' => $group,
+ ));
+
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertEquals(array('users' => $users), $result->getData());
+
+ }
+
+ public function testGetGroupAsIrrelevantSubadmin() {
+
+ $users = $this->generateUsers(2);
+ \OC_User::setUserId($users[0]);
+
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ $group2 = $this->getUniqueID();
+ \OC_Group::createGroup($group2);
+ \OC_Group::addToGroup($users[1], $group);
+ \OC_Group::addToGroup($users[0], $group2);
+
+ \OC_SubAdmin::createSubAdmin($users[0], $group2);
+
+ $result = \OCA\provisioning_api\Groups::getGroup(array(
+ 'groupid' => $group,
+ ));
+
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(\OC_API::RESPOND_UNAUTHORISED, $result->getStatusCode());
+
+ }
+
+ public function testGetGroupAsAdmin() {
+
+ $users = $this->generateUsers(2);
+ \OC_User::setUserId($users[0]);
+
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+
+ \OC_Group::addToGroup($users[1], $group);
+ \OC_Group::addToGroup($users[0], 'admin');
+
+ $result = \OCA\provisioning_api\Groups::getGroup(array(
+ 'groupid' => $group,
+ ));
+
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertEquals(array('users' => array($users[1])), $result->getData());
+
+ }
+
+ public function testGetSubAdminsOfGroup() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_SubAdmin::createSubAdmin($user2, $group1);
+ $result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
+ 'groupid' => $group1,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals($user2, reset($data));
+ \OC_Group::deleteGroup($group1);
+
+ $user1 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
+ 'groupid' => $this->getUniqueID(),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(101, $result->getStatusCode());
+ }
+}
diff --git a/apps/provisioning_api/tests/testcase.php b/apps/provisioning_api/tests/testcase.php
new file mode 100644
index 00000000000..d6e196bcdcf
--- /dev/null
+++ b/apps/provisioning_api/tests/testcase.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+abstract class TestCase extends \Test\TestCase {
+ protected $users = array();
+
+ protected function setUp() {
+ parent::setUp();
+ \OC_Group::createGroup('admin');
+ }
+
+ /**
+ * Generates a temp user
+ * @param int $num number of users to generate
+ * @return array
+ */
+ protected function generateUsers($num = 1) {
+ $users = array();
+ for ($i = 0; $i < $num; $i++) {
+ $user = $this->getUniqueID();
+ \OC_User::createUser($user, 'password');
+ $this->users[] = $user;
+ $users[] = $user;
+ }
+ return count($users) == 1 ? reset($users) : $users;
+ }
+
+ protected function tearDown() {
+ foreach($this->users as $user) {
+ \OC_User::deleteUser($user);
+ }
+
+ \OC_Group::deleteGroup('admin');
+
+ parent::tearDown();
+ }
+}
diff --git a/apps/provisioning_api/tests/userstest.php b/apps/provisioning_api/tests/userstest.php
new file mode 100644
index 00000000000..917d06a8348
--- /dev/null
+++ b/apps/provisioning_api/tests/userstest.php
@@ -0,0 +1,770 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+class UsersTest extends TestCase {
+ protected function resetParams() {
+ $_GET = null;
+ $_POST = null;
+ }
+
+ // Test getting the list of users
+ public function testGetUsers() {
+ $result = \OCA\provisioning_API\Users::getUsers(array());
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $count = $result->getData();
+ $count = count($count['users']);
+ $this->assertEquals(count(\OC_User::getUsers()), $count);
+
+ $user = $this->generateUsers();
+ $_GET['search'] = $user;
+ $result = \OCA\provisioning_API\Users::getUsers(array());
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals($user, reset($data['users']));
+
+ // Add several users
+ $this->generateUsers(10);
+ $this->resetParams();
+ $_GET['limit'] = 2;
+ $result = \OCA\provisioning_API\Users::getUsers(array());
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $count = $result->getData();
+ $count = count($count['users']);
+ $this->assertEquals(2, $count);
+
+ $this->resetParams();
+ $_GET['limit'] = 1;
+ $_GET['offset'] = 1;
+ $result = \OCA\provisioning_API\Users::getUsers(array());
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals(\OC_User::getUsers('', 1, 1), $data['users']);
+ }
+
+ public function testAddUser() {
+ $this->resetParams();
+ $_POST['userid'] = $this->getUniqueID();
+ $_POST['password'] = 'password';
+ $result = \OCA\provisioning_API\Users::addUser(array());
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertTrue(\OC_User::userExists($_POST['userid']));
+ $this->assertEquals($_POST['userid'], \OC_User::checkPassword($_POST['userid'], $_POST['password']));
+ $this->users[] = $_POST['userid'];
+ }
+
+ public function testGetUserOnSelf() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $params['userid'] = $user;
+ $result = \OCA\provisioning_API\Users::getUser($params);
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ }
+
+ public function testGetUserOnNonExistingUser() {
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ \OC_User::setUserId($user);
+ $params = array();
+ $params['userid'] = $this->getUniqueID();
+ while(\OC_User::userExists($params['userid'])) {
+ $params['userid'] = $this->getUniqueID();
+ }
+ $result = \OCA\provisioning_API\Users::getUser($params);
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(\OC_API::RESPOND_NOT_FOUND, $result->getStatusCode());
+
+ }
+
+ public function testGetUserOnOtherUser() {
+ $users = $this->generateUsers(2);
+ $params['userid'] = $users[0];
+ \OC_User::setUserId($users[1]);
+ $result = \OCA\provisioning_API\Users::getUser($params);
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+
+ // Now as as admin
+ $users = $this->generateUsers(2);
+ $params['userid'] = $users[0];
+ \OC_Group::addToGroup($users[1], 'admin');
+ \OC_User::setUserId($users[1]);
+ $result = \OCA\provisioning_API\Users::getUser($params);
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals(\OC::$server->getConfig()->getUserValue($users[0], 'core', 'enabled', 'true'), $data['enabled']);
+ }
+
+ public function testEditOwnDisplayName() {
+
+ // Test editing own name
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user,
+ '_put' => array(
+ 'key' => 'display',
+ 'value' => 'newname',
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertEquals('newname', \OC_User::getDisplayName($user));
+
+ }
+
+ public function testAdminEditDisplayNameOfUser() {
+
+ // Test admin editing users name
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user2,
+ '_put' => array(
+ 'key' => 'display',
+ 'value' => 'newname',
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertEquals('newname', \OC_User::getDisplayName($user2));
+
+ }
+
+ public function testUserEditOtherUserDisplayName() {
+
+ // Test editing other users name
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user2,
+ '_put' => array(
+ 'key' => 'display',
+ 'value' => 'newname',
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+
+ }
+
+ public function testEditOwnQuota() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user,
+ '_put' => array(
+ 'key' => 'quota',
+ 'value' => '20G',
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ }
+
+ public function testAdminEditOwnQuota() {
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ \OC_User::setUserId($user);
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user,
+ '_put' => array(
+ 'key' => 'quota',
+ 'value' => '20G',
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ }
+
+ public function testAdminEditOtherUserQuota() {
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user2,
+ '_put' => array(
+ 'key' => 'quota',
+ 'value' => '20G',
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ }
+
+ public function testUserEditOtherUserQuota() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user2,
+ '_put' => array(
+ 'key' => 'quota',
+ 'value' => '20G',
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ }
+
+ public function testUserEditOwnEmail() {
+ $user = $this->generateUsers();
+ $email = 'test@example.com';
+ \OC_User::setUserId($user);
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $user,
+ '_put' => array(
+ 'key' => 'email',
+ 'value' => $email,
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertEquals($email, \OC::$server->getConfig()->getUserValue($user, 'settings', 'email', null));
+ }
+
+ public function testUserEditOtherUserEmailAsUser() {
+ $users = $this->generateUsers(2);
+ $email = 'test@example.com';
+ \OC_User::setUserId($users[0]);
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $users[1],
+ '_put' => array(
+ 'key' => 'email',
+ 'value' => $email,
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ }
+
+ public function testUserEditOtherUserEmailAsAdmin() {
+ $users = $this->generateUsers(2);
+ $email = 'test@example.com';
+ \OC_User::setUserId($users[0]);
+ \OC_Group::addToGroup($users[0], 'admin');
+ $result = \OCA\provisioning_API\Users::editUser(
+ array(
+ 'userid' => $users[1],
+ '_put' => array(
+ 'key' => 'email',
+ 'value' => $email,
+ ),
+ )
+ );
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertEquals($email, \OC::$server->getConfig()->getUserValue($users[1], 'settings', 'email', null));
+ }
+
+ public function testDeleteSelf() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $result = \OCA\provisioning_API\Users::deleteUser(array(
+ 'userid' => $user,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ }
+
+ public function testDeleteOtherAsUser() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $result = \OCA\provisioning_API\Users::deleteUser(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ }
+
+ public function testDeleteOtherAsSubAdmin() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_Group::addToGroup($user, $group);
+ \OC_Group::addToGroup($user2, $group);
+ \OC_SubAdmin::createSubAdmin($user, $group);
+ $result = \OCA\provisioning_API\Users::deleteUser(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ \OC_Group::deleteGroup($group);
+ }
+
+ public function testDeleteOtherAsIrelevantSubAdmin() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $group = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_Group::createGroup($group2);
+ \OC_Group::addToGroup($user, $group);
+ \OC_Group::addToGroup($user2, $group2);
+ \OC_SubAdmin::createSubAdmin($user, $group);
+ $result = \OCA\provisioning_API\Users::deleteUser(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ \OC_Group::deleteGroup($group);
+ \OC_Group::deleteGroup($group2);
+ }
+
+ public function testDeleteOtherAsAdmin() {
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ \OC_User::setUserId($user);
+ $user2 = $this->generateUsers();
+ $result = \OCA\provisioning_API\Users::deleteUser(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ }
+
+ public function testDeleteSelfAsAdmin() {
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ \OC_User::setUserId($user);
+ $result = \OCA\provisioning_API\Users::deleteUser(array(
+ 'userid' => $user,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ }
+
+ public function testGetUsersGroupsOnSelf() {
+ $user = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_Group::addToGroup($user, $group);
+ $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+ 'userid' => $user,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals($group, reset($data['groups']));
+ $this->assertEquals(1, count($data['groups']));
+ \OC_Group::deleteGroup($group);
+ }
+
+ public function testGetUsersGroupOnOther() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_Group::addToGroup($user2, $group);
+ $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ \OC_Group::deleteGroup($group);
+ }
+
+ public function testGetUsersGroupOnOtherAsAdmin() {
+ $user1 = $this->generateUsers();
+ \OC_Group::addToGroup($user1, 'admin');
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_Group::addToGroup($user2, $group);
+ $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals($group, reset($data['groups']));
+ $this->assertEquals(1, count($data['groups']));
+ \OC_Group::deleteGroup($group);
+ }
+
+ public function testGetUsersGroupsOnOtherAsSubAdmin() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_Group::createGroup($group2);
+ \OC_Group::addToGroup($user2, $group1);
+ \OC_Group::addToGroup($user2, $group2);
+ \OC_Group::addToGroup($user1, $group1);
+ \OC_SubAdmin::createSubAdmin($user1, $group1);
+ $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals($group1, reset($data['groups']));
+ $this->assertEquals(1, count($data['groups']));
+ \OC_Group::deleteGroup($group1);
+ \OC_Group::deleteGroup($group2);
+ }
+
+ public function testGetUsersGroupsOnOtherAsIrelevantSubAdmin() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_Group::createGroup($group2);
+ \OC_Group::addToGroup($user2, $group2);
+ \OC_Group::addToGroup($user1, $group1);
+ \OC_SubAdmin::createSubAdmin($user1, $group1);
+ $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ \OC_Group::deleteGroup($group1);
+ \OC_Group::deleteGroup($group2);
+ }
+
+ public function testAddToGroup() {
+ $user = $this->generateUsers();
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ \OC_User::setUserId($user);
+ $_POST['groupid'] = $group;
+ $result = \OCA\provisioning_API\Users::addToGroup(array(
+ 'userid' => $user,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertFalse(\OC_Group::inGroup($user, $group));
+ \OC_Group::deleteGroup($group);
+ }
+
+ public function testAddToGroupAsAdmin() {
+ $user = $this->generateUsers();
+ \OC_Group::addToGroup($user, 'admin');
+ $group = $this->getUniqueID();
+ \OC_Group::createGroup($group);
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user);
+ $_POST['groupid'] = $group;
+ $result = \OCA\provisioning_API\Users::addToGroup(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertTrue(\OC_Group::inGroup($user2, $group));
+ \OC_Group::deleteGroup($group);
+ }
+
+ public function testAddToGroupAsSubAdmin() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_SubAdmin::createSubAdmin($user1, $group1);
+ $_POST['groupid'] = $group1;
+ $result = \OCA\provisioning_API\Users::addToGroup(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertFalse(\OC_Group::inGroup($user2, $group1));
+ \OC_Group::deleteGroup($group1);
+ }
+
+ public function testAddToGroupAsIrelevantSubAdmin() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_Group::createGroup($group2);
+ \OC_SubAdmin::createSubAdmin($user1, $group1);
+ $_POST['groupid'] = $group2;
+ $result = \OCA\provisioning_API\Users::addToGroup(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertFalse(\OC_Group::inGroup($user2, $group2));
+ \OC_Group::deleteGroup($group1);
+ \OC_Group::deleteGroup($group2);
+ }
+
+ // test delete /cloud/users/{userid}/groups
+ public function testRemoveFromGroupAsSelf() {
+ $user1 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_Group::addToGroup($user1, $group1);
+ $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+ 'userid' => $user1,
+ '_delete' => array(
+ 'groupid' => $group1,
+ ),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertTrue(\OC_Group::inGroup($user1, $group1));
+ \OC_Group::deleteGroup($group1);
+ }
+
+ public function testRemoveFromGroupAsAdmin() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_Group::addToGroup($user2, $group1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+ 'userid' => $user2,
+ '_delete' => array(
+ 'groupid' => $group1,
+ ),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertFalse(\OC_Group::inGroup($user2, $group1));
+ \OC_Group::deleteGroup($group1);
+ }
+
+ public function testRemoveFromGroupAsSubAdmin() {
+ $user1 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $user2 = $this->generateUsers();
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_Group::addToGroup($user1, $group1);
+ \OC_Group::addToGroup($user2, $group1);
+ \OC_SubAdmin::createSubAdmin($user1, $group1);
+ $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+ 'userid' => $user2,
+ '_delete' => array(
+ 'groupid' => $group1,
+ ),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertFalse(\OC_Group::inGroup($user2, $group1));
+ \OC_Group::deleteGroup($group1);
+ }
+
+ public function testRemoveFromGroupAsIrelevantSubAdmin() {
+ $user1 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ $user2 = $this->generateUsers();
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_Group::createGroup($group2);
+ \OC_Group::addToGroup($user1, $group1);
+ \OC_Group::addToGroup($user2, $group2);
+ \OC_SubAdmin::createSubAdmin($user1, $group1);
+ $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+ 'userid' => $user2,
+ '_delete' => array(
+ 'groupid' => $group2,
+ ),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertTrue(\OC_Group::inGroup($user2, $group2));
+ \OC_Group::deleteGroup($group1);
+ \OC_Group::deleteGroup($group2);
+ }
+
+ public function testCreateSubAdmin() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ $_POST['groupid'] = $group1;
+ $result = \OCA\provisioning_api\Users::addSubAdmin(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertTrue(\OC_SubAdmin::isSubAdminofGroup($user2, $group1));
+ \OC_Group::deleteGroup($group1);
+
+ $this->resetParams();
+
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $_POST['groupid'] = 'admin';
+ $result = \OCA\provisioning_api\Users::addSubAdmin(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertEquals(103, $result->getStatusCode());
+ $this->assertFalse($result->succeeded());
+
+ $this->resetParams();
+
+ $user1 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ $_POST['groupid'] = $group1;
+ $result = \OCA\provisioning_api\Users::addSubAdmin(array(
+ 'userid' => $this->getUniqueID(),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(101, $result->getStatusCode());
+ \OC_Group::deleteGroup($group1);
+ }
+
+ public function testRemoveSubAdmin() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_SubAdmin::createSubAdmin($user2, $group1);
+ $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
+ 'userid' => $user2,
+ '_delete' => array(
+ 'groupid' => $group1,
+ ),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $this->assertTrue(!\OC_SubAdmin::isSubAdminofGroup($user2, $group1));
+ \OC_Group::deleteGroup($group1);
+
+ $user1 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
+ 'userid' => $this->getUniqueID(),
+ '_delete' => array(
+ 'groupid' => $group1,
+ ),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertEquals(101, $result->getStatusCode());
+ $this->assertFalse($result->succeeded());
+
+ $this->resetParams();
+
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ $_POST['groupid'] = $group1;
+ $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
+ 'userid' => $user2,
+ '_delete' => array(
+ 'groupid' => $group1,
+ ),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(102, $result->getStatusCode());
+ \OC_Group::deleteGroup($group1);
+ }
+
+ public function testGetSubAdminGroups() {
+ $user1 = $this->generateUsers();
+ $user2 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $group1 = $this->getUniqueID();
+ \OC_Group::createGroup($group1);
+ \OC_SubAdmin::createSubAdmin($user2, $group1);
+ $result = \OCA\provisioning_api\Users::getUserSubAdminGroups(array(
+ 'userid' => $user2,
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertTrue($result->succeeded());
+ $data = $result->getData();
+ $this->assertEquals($group1, reset($data));
+ \OC_Group::deleteGroup($group1);
+
+ $user1 = $this->generateUsers();
+ \OC_User::setUserId($user1);
+ \OC_Group::addToGroup($user1, 'admin');
+ $group1 = $this->getUniqueID();
+ $result = \OCA\provisioning_api\Users::getUserSubAdminGroups(array(
+ 'userid' => $this->getUniqueID(),
+ ));
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ $this->assertFalse($result->succeeded());
+ $this->assertEquals(101, $result->getStatusCode());
+ }
+}
diff --git a/apps/user_ldap/ajax/clearMappings.php b/apps/user_ldap/ajax/clearMappings.php
index 4e713c59f96..e6f3d32e84f 100644
--- a/apps/user_ldap/ajax/clearMappings.php
+++ b/apps/user_ldap/ajax/clearMappings.php
@@ -21,15 +21,27 @@
*
*/
+use OCA\User_LDAP\Mapping\UserMapping;
+use OCA\User_LDAP\Mapping\GroupMapping;
+
// Check user and app status
OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
$subject = $_POST['ldap_clear_mapping'];
-if(\OCA\user_ldap\lib\Helper::clearMapping($subject)) {
+$mapping = null;
+if($subject === 'user') {
+ $mapping = new UserMapping(\OC::$server->getDatabaseConnection());
+} else if($subject === 'group') {
+ $mapping = new GroupMapping(\OC::$server->getDatabaseConnection());
+}
+try {
+ if(is_null($mapping) || !$mapping->clear()) {
+ $l = \OC::$server->getL10N('user_ldap');
+ throw new \Exception($l->t('Failed to clear the mappings.'));
+ }
OCP\JSON::success();
-} else {
- $l = \OC::$server->getL10N('user_ldap');
- OCP\JSON::error(array('message' => $l->t('Failed to clear the mappings.')));
+} catch (\Exception $e) {
+ OCP\JSON::error(array('message' => $e->getMessage()));
}
diff --git a/apps/user_ldap/ajax/deleteConfiguration.php b/apps/user_ldap/ajax/deleteConfiguration.php
index bca687c81ab..d409d891f61 100644
--- a/apps/user_ldap/ajax/deleteConfiguration.php
+++ b/apps/user_ldap/ajax/deleteConfiguration.php
@@ -27,7 +27,8 @@ OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
$prefix = $_POST['ldap_serverconfig_chooser'];
-if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)) {
+$helper = new \OCA\user_ldap\lib\Helper();
+if($helper->deleteServerConfiguration($prefix)) {
OCP\JSON::success();
} else {
$l = \OC::$server->getL10N('user_ldap');
diff --git a/apps/user_ldap/ajax/getNewServerConfigPrefix.php b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
index 1c68b2e9a76..ce6c5ae76e8 100644
--- a/apps/user_ldap/ajax/getNewServerConfigPrefix.php
+++ b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
@@ -26,7 +26,8 @@ OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
-$serverConnections = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
+$helper = new \OCA\user_ldap\lib\Helper();
+$serverConnections = $helper->getServerConfigurationPrefixes();
sort($serverConnections);
$lk = array_pop($serverConnections);
$ln = intval(str_replace('s', '', $lk));
diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php
index ef1241b9147..48bfb56311c 100644
--- a/apps/user_ldap/ajax/wizard.php
+++ b/apps/user_ldap/ajax/wizard.php
@@ -52,7 +52,8 @@ $userManager = new \OCA\user_ldap\lib\user\Manager(
new \OCA\user_ldap\lib\FilesystemHelper(),
new \OCA\user_ldap\lib\LogWrapper(),
\OC::$server->getAvatarManager(),
- new \OCP\Image());
+ new \OCP\Image(),
+ \OC::$server->getDatabaseConnection());
$access = new \OCA\user_ldap\lib\Access($con, $ldapWrapper, $userManager);
@@ -62,6 +63,7 @@ switch($action) {
case 'guessPortAndTLS':
case 'guessBaseDN':
case 'detectEmailAttribute':
+ case 'detectUserDisplayNameAttribute':
case 'determineGroupMemberAssoc':
case 'determineUserObjectClasses':
case 'determineGroupObjectClasses':
@@ -115,4 +117,3 @@ switch($action) {
//TODO: return 4xx error
break;
}
-
diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php
index 8f9fbc5129b..911688a5c20 100644
--- a/apps/user_ldap/appinfo/app.php
+++ b/apps/user_ldap/appinfo/app.php
@@ -5,6 +5,7 @@
*
* @author Dominik Schmidt
* @copyright 2011 Dominik Schmidt dev@dominik-schmidt.de
+* @copyright 2014 Arthur Schiwon <blizzz@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -23,21 +24,30 @@
OCP\App::registerAdmin('user_ldap', 'settings');
-$configPrefixes = OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes(true);
+$helper = new \OCA\user_ldap\lib\Helper();
+$configPrefixes = $helper->getServerConfigurationPrefixes(true);
$ldapWrapper = new OCA\user_ldap\lib\LDAP();
+$ocConfig = \OC::$server->getConfig();
if(count($configPrefixes) === 1) {
- $ocConfig = \OC::$server->getConfig();
+ $dbc = \OC::$server->getDatabaseConnection();
$userManager = new OCA\user_ldap\lib\user\Manager($ocConfig,
new OCA\user_ldap\lib\FilesystemHelper(),
new OCA\user_ldap\lib\LogWrapper(),
\OC::$server->getAvatarManager(),
- new \OCP\Image());
+ new \OCP\Image(),
+ $dbc
+ );
$connector = new OCA\user_ldap\lib\Connection($ldapWrapper, $configPrefixes[0]);
$ldapAccess = new OCA\user_ldap\lib\Access($connector, $ldapWrapper, $userManager);
- $userBackend = new OCA\user_ldap\USER_LDAP($ldapAccess);
+
+ $ldapAccess->setUserMapper(new OCA\User_LDAP\Mapping\UserMapping($dbc));
+ $ldapAccess->setGroupMapper(new OCA\User_LDAP\Mapping\GroupMapping($dbc));
+ $userBackend = new OCA\user_ldap\USER_LDAP($ldapAccess, $ocConfig);
$groupBackend = new OCA\user_ldap\GROUP_LDAP($ldapAccess);
} else if(count($configPrefixes) > 1) {
- $userBackend = new OCA\user_ldap\User_Proxy($configPrefixes, $ldapWrapper);
+ $userBackend = new OCA\user_ldap\User_Proxy(
+ $configPrefixes, $ldapWrapper, $ocConfig
+ );
$groupBackend = new OCA\user_ldap\Group_Proxy($configPrefixes, $ldapWrapper);
}
@@ -47,16 +57,10 @@ if(count($configPrefixes) > 0) {
OC_Group::useBackend($groupBackend);
}
-// add settings page to navigation
-$entry = array(
- 'id' => 'user_ldap_settings',
- 'order'=>1,
- 'href' => OCP\Util::linkTo( 'user_ldap', 'settings.php' ),
- 'name' => 'LDAP'
-);
OCP\Util::addTranslations('user_ldap');
-
OCP\Backgroundjob::registerJob('OCA\user_ldap\lib\Jobs');
+OCP\Backgroundjob::registerJob('\OCA\User_LDAP\Jobs\CleanUp');
+
if(OCP\App::isEnabled('user_webdavauth')) {
OCP\Util::writeLog('user_ldap',
'user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour',
diff --git a/apps/user_ldap/appinfo/register_command.php b/apps/user_ldap/appinfo/register_command.php
index f65b9773388..651e6a564e1 100644
--- a/apps/user_ldap/appinfo/register_command.php
+++ b/apps/user_ldap/appinfo/register_command.php
@@ -6,8 +6,34 @@
* See the COPYING-README file.
*/
+use OCA\user_ldap\lib\Helper;
+use OCA\user_ldap\lib\LDAP;
+use OCA\user_ldap\User_Proxy;
+use OCA\User_LDAP\Mapping\UserMapping;
+use OCA\User_LDAP\lib\User\DeletedUsersIndex;
+
+$dbConnection = \OC::$server->getDatabaseConnection();
+$userMapping = new UserMapping($dbConnection);
+$helper = new Helper();
+$ocConfig = \OC::$server->getConfig();
+$uBackend = new User_Proxy(
+ $helper->getServerConfigurationPrefixes(true),
+ new LDAP(),
+ $ocConfig
+);
+$deletedUsersIndex = new DeletedUsersIndex(
+ $ocConfig, $dbConnection, $userMapping
+);
+
$application->add(new OCA\user_ldap\Command\ShowConfig());
$application->add(new OCA\user_ldap\Command\SetConfig());
$application->add(new OCA\user_ldap\Command\TestConfig());
$application->add(new OCA\user_ldap\Command\CreateEmptyConfig());
$application->add(new OCA\user_ldap\Command\DeleteConfig());
+$application->add(new OCA\user_ldap\Command\Search($ocConfig));
+$application->add(new OCA\user_ldap\Command\ShowRemnants(
+ $deletedUsersIndex, \OC::$server->getDateTimeFormatter())
+);
+$application->add(new OCA\user_ldap\Command\CheckUser(
+ $uBackend, $helper, $deletedUsersIndex, $userMapping)
+);
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index 5fad23de4f6..b4121b19852 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -1,45 +1,48 @@
<?php
+$configInstance = \OC::$server->getConfig();
+
//detect if we can switch on naming guidelines. We won't do it on conflicts.
//it's a bit spaghetti, but hey.
-$state = OCP\Config::getSystemValue('ldapIgnoreNamingRules', 'unset');
+$state = $configInstance->getSystemValue('ldapIgnoreNamingRules', 'unset');
if($state === 'unset') {
- OCP\Config::setSystemValue('ldapIgnoreNamingRules', false);
+ $configInstance->setSystemValue('ldapIgnoreNamingRules', false);
}
-$installedVersion = OCP\Config::getAppValue('user_ldap', 'installed_version');
+$installedVersion = $configInstance->getAppValue('user_ldap', 'installed_version');
$enableRawMode = version_compare($installedVersion, '0.4.1', '<');
-$configPrefixes = OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes(true);
+$helper = new \OCA\user_ldap\lib\Helper();
+$configPrefixes = $helper->getServerConfigurationPrefixes(true);
$ldap = new OCA\user_ldap\lib\LDAP();
foreach($configPrefixes as $config) {
$connection = new OCA\user_ldap\lib\Connection($ldap, $config);
- $state = \OCP\Config::getAppValue(
+ $state = $configInstance->getAppValue(
'user_ldap', $config.'ldap_uuid_user_attribute', 'not existing');
if($state === 'non existing') {
- $value = \OCP\Config::getAppValue(
+ $value = $configInstance->getAppValue(
'user_ldap', $config.'ldap_uuid_attribute', '');
- \OCP\Config::setAppValue(
+ $configInstance->setAppValue(
'user_ldap', $config.'ldap_uuid_user_attribute', $value);
- \OCP\Config::setAppValue(
+ $configInstance->setAppValue(
'user_ldap', $config.'ldap_uuid_group_attribute', $value);
}
- $state = \OCP\Config::getAppValue(
+ $state = $configInstance->getAppValue(
'user_ldap', $config.'ldap_expert_uuid_user_attr', 'not existing');
if($state === 'non existing') {
- $value = \OCP\Config::getAppValue(
+ $value = $configInstance->getAppValue(
'user_ldap', $config.'ldap_expert_uuid_attr', '');
- \OCP\Config::setAppValue(
+ $configInstance->setAppValue(
'user_ldap', $config.'ldap_expert_uuid_user_attr', $value);
- \OCP\Config::setAppValue(
+ $configInstance->setAppValue(
'user_ldap', $config.'ldap_expert_uuid_group_attr', $value);
}
if($enableRawMode) {
- \OCP\Config::setAppValue('user_ldap', $config.'ldap_user_filter_mode', 1);
- \OCP\Config::setAppValue('user_ldap', $config.'ldap_login_filter_mode', 1);
- \OCP\Config::setAppValue('user_ldap', $config.'ldap_group_filter_mode', 1);
+ $configInstance->setAppValue('user_ldap', $config.'ldap_user_filter_mode', 1);
+ $configInstance->setAppValue('user_ldap', $config.'ldap_login_filter_mode', 1);
+ $configInstance->setAppValue('user_ldap', $config.'ldap_group_filter_mode', 1);
}
}
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index 6f2743d65dc..0bfccb08040 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.4.4
+0.4.5
diff --git a/apps/user_ldap/command/checkuser.php b/apps/user_ldap/command/checkuser.php
new file mode 100644
index 00000000000..202855e4853
--- /dev/null
+++ b/apps/user_ldap/command/checkuser.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\user_ldap\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+use OCA\user_ldap\lib\user\User;
+use OCA\User_LDAP\lib\User\DeletedUsersIndex;
+use OCA\User_LDAP\Mapping\UserMapping;
+use OCA\user_ldap\lib\Helper as LDAPHelper;
+use OCA\user_ldap\User_Proxy;
+
+class CheckUser extends Command {
+ /** @var \OCA\user_ldap\User_Proxy */
+ protected $backend;
+
+ /** @var \OCA\User_LDAP\lib\Helper */
+ protected $helper;
+
+ /** @var \OCA\User_LDAP\lib\User\DeletedUsersIndex */
+ protected $dui;
+
+ /** @var \OCA\User_LDAP\Mapping\UserMapping */
+ protected $mapping;
+
+ /**
+ * @param OCA\user_ldap\User_Proxy $uBackend
+ * @param OCA\user_ldap\lib\Helper $helper
+ * @param OCA\User_LDAP\lib\User\DeletedUsersIndex $dui
+ * @param OCA\User_LDAP\Mapping\UserMapping $mapping
+ */
+ public function __construct(User_Proxy $uBackend, LDAPHelper $helper, DeletedUsersIndex $dui, UserMapping $mapping) {
+ $this->backend = $uBackend;
+ $this->helper = $helper;
+ $this->dui = $dui;
+ $this->mapping = $mapping;
+ parent::__construct();
+ }
+
+ protected function configure() {
+ $this
+ ->setName('ldap:check-user')
+ ->setDescription('checks whether a user exists on LDAP.')
+ ->addArgument(
+ 'ocName',
+ InputArgument::REQUIRED,
+ 'the user name as used in ownCloud'
+ )
+ ->addOption(
+ 'force',
+ null,
+ InputOption::VALUE_NONE,
+ 'ignores disabled LDAP configuration'
+ )
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ try {
+ $uid = $input->getArgument('ocName');
+ $this->isAllowed($input->getOption('force'));
+ $this->confirmUserIsMapped($uid);
+ $exists = $this->backend->userExistsOnLDAP($uid);
+ if($exists === true) {
+ $output->writeln('The user is still available on LDAP.');
+ return;
+ }
+
+ $this->dui->markUser($uid);
+ $output->writeln('The user does not exists on LDAP anymore.');
+ $output->writeln('Clean up the user\'s remnants by: ./occ user:delete "'
+ . $uid . '"');
+ } catch (\Exception $e) {
+ $output->writeln('<error>' . $e->getMessage(). '</error>');
+ }
+ }
+
+ /**
+ * checks whether a user is actually mapped
+ * @param string $ocName the username as used in ownCloud
+ * @throws \Exception
+ * @return true
+ */
+ protected function confirmUserIsMapped($ocName) {
+ $dn = $this->mapping->getDNByName($ocName);
+ if ($dn === false) {
+ throw new \Exception('The given user is not a recognized LDAP user.');
+ }
+
+ return true;
+ }
+
+ /**
+ * checks whether the setup allows reliable checking of LDAP user existence
+ * @throws \Exception
+ * @return true
+ */
+ protected function isAllowed($force) {
+ if($this->helper->haveDisabledConfigurations() && !$force) {
+ throw new \Exception('Cannot check user existence, because '
+ . 'disabled LDAP configurations are present.');
+ }
+
+ // we don't check ldapUserCleanupInterval from config.php because this
+ // action is triggered manually, while the setting only controls the
+ // background job.
+
+ return true;
+ }
+
+}
diff --git a/apps/user_ldap/command/search.php b/apps/user_ldap/command/search.php
new file mode 100644
index 00000000000..ba87982d167
--- /dev/null
+++ b/apps/user_ldap/command/search.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\user_ldap\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+use OCA\user_ldap\User_Proxy;
+use OCA\user_ldap\Group_Proxy;
+use OCA\user_ldap\lib\Helper;
+use OCA\user_ldap\lib\LDAP;
+use OCP\IConfig;
+
+class Search extends Command {
+ /** @var \OCP\IConfig */
+ protected $ocConfig;
+
+ /**
+ * @param \OCP\IConfig $ocConfig
+ */
+ public function __construct(IConfig $ocConfig) {
+ $this->ocConfig = $ocConfig;
+ parent::__construct();
+ }
+
+ protected function configure() {
+ $this
+ ->setName('ldap:search')
+ ->setDescription('executes a user or group search')
+ ->addArgument(
+ 'search',
+ InputArgument::REQUIRED,
+ 'the search string (can be empty)'
+ )
+ ->addOption(
+ 'group',
+ null,
+ InputOption::VALUE_NONE,
+ 'searches groups instead of users'
+ )
+ ->addOption(
+ 'offset',
+ null,
+ InputOption::VALUE_REQUIRED,
+ 'The offset of the result set. Needs to be a multiple of limit. defaults to 0.',
+ 0
+ )
+ ->addOption(
+ 'limit',
+ null,
+ InputOption::VALUE_REQUIRED,
+ 'limit the results. 0 means no limit, defaults to 15',
+ 15
+ )
+ ;
+ }
+
+ /**
+ * Tests whether the offset and limit options are valid
+ * @param int $offset
+ * @param int $limit
+ * @throws \InvalidArgumentException
+ */
+ protected function validateOffsetAndLimit($offset, $limit) {
+ if($limit < 0) {
+ throw new \InvalidArgumentException('limit must be 0 or greater');
+ }
+ if($offset < 0) {
+ throw new \InvalidArgumentException('offset must be 0 or greater');
+ }
+ if($limit === 0 && $offset !== 0) {
+ throw new \InvalidArgumentException('offset must be 0 if limit is also set to 0');
+ }
+ if($offset > 0 && ($offset % $limit !== 0)) {
+ throw new \InvalidArgumentException('offset must be a multiple of limit');
+ }
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $helper = new Helper();
+ $configPrefixes = $helper->getServerConfigurationPrefixes(true);
+ $ldapWrapper = new LDAP();
+
+ $offset = intval($input->getOption('offset'));
+ $limit = intval($input->getOption('limit'));
+ $this->validateOffsetAndLimit($offset, $limit);
+
+ if($input->getOption('group')) {
+ $proxy = new Group_Proxy($configPrefixes, $ldapWrapper);
+ $getMethod = 'getGroups';
+ $printID = false;
+ } else {
+ $proxy = new User_Proxy($configPrefixes, $ldapWrapper, $this->ocConfig);
+ $getMethod = 'getDisplayNames';
+ $printID = true;
+ }
+
+ $result = $proxy->$getMethod($input->getArgument('search'), $limit, $offset);
+ foreach($result as $id => $name) {
+ $line = $name . ($printID ? ' ('.$id.')' : '');
+ $output->writeln($line);
+ }
+ }
+}
diff --git a/apps/user_ldap/command/setconfig.php b/apps/user_ldap/command/setconfig.php
index ab1c8d39ead..9128fcf04fc 100644
--- a/apps/user_ldap/command/setconfig.php
+++ b/apps/user_ldap/command/setconfig.php
@@ -41,7 +41,8 @@ class SetConfig extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $availableConfigs = Helper::getServerConfigurationPrefixes();
+ $helper = new Helper();
+ $availableConfigs = $helper->getServerConfigurationPrefixes();
$configID = $input->getArgument('configID');
if(!in_array($configID, $availableConfigs)) {
$output->writeln("Invalid configID");
diff --git a/apps/user_ldap/command/showconfig.php b/apps/user_ldap/command/showconfig.php
index f51d641beec..ddbc45243ff 100644
--- a/apps/user_ldap/command/showconfig.php
+++ b/apps/user_ldap/command/showconfig.php
@@ -31,7 +31,8 @@ class ShowConfig extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $availableConfigs = Helper::getServerConfigurationPrefixes();
+ $helper = new Helper();
+ $availableConfigs = $helper->getServerConfigurationPrefixes();
$configID = $input->getArgument('configID');
if(!is_null($configID)) {
$configIDs[] = $configID;
diff --git a/apps/user_ldap/command/showremnants.php b/apps/user_ldap/command/showremnants.php
new file mode 100644
index 00000000000..5cfab34ef95
--- /dev/null
+++ b/apps/user_ldap/command/showremnants.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\user_ldap\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+use OCA\user_ldap\lib\user\DeletedUsersIndex;
+use OCP\IDateTimeFormatter;
+
+class ShowRemnants extends Command {
+ /** @var \OCA\User_LDAP\lib\User\DeletedUsersIndex */
+ protected $dui;
+
+ /** @var \OCP\IDateTimeFormatter */
+ protected $dateFormatter;
+
+ /**
+ * @param OCA\user_ldap\lib\user\DeletedUsersIndex $dui
+ * @param OCP\IDateTimeFormatter $dateFormatter
+ */
+ public function __construct(DeletedUsersIndex $dui, IDateTimeFormatter $dateFormatter) {
+ $this->dui = $dui;
+ $this->dateFormatter = $dateFormatter;
+ parent::__construct();
+ }
+
+ protected function configure() {
+ $this
+ ->setName('ldap:show-remnants')
+ ->setDescription('shows which users are not available on LDAP anymore, but have remnants in ownCloud.')
+ ;
+ }
+
+ /**
+ * executes the command, i.e. creeates and outputs a table of LDAP users marked as deleted
+ *
+ * {@inheritdoc}
+ */
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ /** @var \Symfony\Component\Console\Helper\Table $table */
+ $table = $this->getHelperSet()->get('table');
+ $table->setHeaders(array(
+ 'ownCloud name', 'Display Name', 'LDAP UID', 'LDAP DN', 'Last Login',
+ 'Dir', 'Sharer'));
+ $rows = array();
+ $resultSet = $this->dui->getUsers();
+ foreach($resultSet as $user) {
+ $hAS = $user->getHasActiveShares() ? 'Y' : 'N';
+ $lastLogin = ($user->getLastLogin() > 0) ?
+ $this->dateFormatter->formatDate($user->getLastLogin()) : '-';
+ $rows[] = array(
+ $user->getOCName(),
+ $user->getDisplayName(),
+ $user->getUid(),
+ $user->getDN(),
+ $lastLogin,
+ $user->getHomePath(),
+ $hAS
+ );
+ }
+
+ $table->setRows($rows);
+ $table->render($output);
+ }
+}
diff --git a/apps/user_ldap/command/testconfig.php b/apps/user_ldap/command/testconfig.php
index 00b4acf2f66..a44e22415e9 100644
--- a/apps/user_ldap/command/testconfig.php
+++ b/apps/user_ldap/command/testconfig.php
@@ -31,7 +31,8 @@ class TestConfig extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $availableConfigs = Helper::getServerConfigurationPrefixes();
+ $helper = new Helper();
+ $availableConfigs = $helper->getServerConfigurationPrefixes();
$configID = $input->getArgument('configID');
if(!in_array($configID, $availableConfigs)) {
$output->writeln("Invalid configID");
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index bb66c1df2ee..0f7d240adac 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -8,6 +8,7 @@ function LdapFilter(target, determineModeCallback) {
this.determineModeCallback = determineModeCallback;
this.foundFeatures = false;
this.activated = false;
+ this.countPending = false;
if( target === 'User' ||
target === 'Login' ||
@@ -25,9 +26,13 @@ LdapFilter.prototype.activate = function() {
this.determineMode();
};
-LdapFilter.prototype.compose = function(callback) {
+LdapFilter.prototype.compose = function(updateCount) {
var action;
+ if(updateCount === true) {
+ this.countPending = updateCount;
+ }
+
if(this.locked) {
this.lazyRunCompose = true;
return false;
@@ -54,22 +59,36 @@ LdapFilter.prototype.compose = function(callback) {
LdapWizard.ajax(param,
function(result) {
- LdapWizard.applyChanges(result);
- filter.updateCount();
- if(filter.target === 'Group') {
- LdapWizard.detectGroupMemberAssoc();
- }
- if(typeof callback !== 'undefined') {
- callback();
- }
+ filter.afterComposeSuccess(result);
},
function () {
+ filter.countPending = false;
console.log('LDAP Wizard: could not compose filter. '+
'Please check owncloud.log');
}
);
};
+/**
+ * this function is triggered after attribute detectors have completed in
+ * LdapWizard
+ */
+LdapFilter.prototype.afterDetectorsRan = function() {
+ this.updateCount();
+};
+
+/**
+ * this function is triggered after LDAP filters have been composed successfully
+ * @param {object} result returned by the ajax call
+ */
+LdapFilter.prototype.afterComposeSuccess = function(result) {
+ LdapWizard.applyChanges(result);
+ if(this.countPending) {
+ this.countPending = false;
+ this.updateCount();
+ }
+};
+
LdapFilter.prototype.determineMode = function() {
var param = 'action=get'+encodeURIComponent(this.target)+'FilterMode'+
'&ldap_serverconfig_chooser='+
@@ -145,10 +164,26 @@ LdapFilter.prototype.findFeatures = function() {
}
};
+/**
+ * this function is triggered before user and group counts are executed
+ * resolving the passed status variable will fire up counting
+ * @param {object} status an instance of $.Deferred
+ */
+LdapFilter.prototype.beforeUpdateCount = function() {
+ var status = $.Deferred();
+ LdapWizard.runDetectors(this.target, function() {
+ status.resolve();
+ });
+ return status;
+};
+
LdapFilter.prototype.updateCount = function(doneCallback) {
- if(this.target === 'User') {
- LdapWizard.countUsers(doneCallback);
- } else if (this.target === 'Group') {
- LdapWizard.countGroups(doneCallback);
- }
+ var filter = this;
+ $.when(this.beforeUpdateCount()).done(function() {
+ if(filter.target === 'User') {
+ LdapWizard.countUsers(doneCallback);
+ } else if (filter.target === 'Group') {
+ LdapWizard.countGroups(doneCallback);
+ }
+ });
};
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index fa40aba73b4..6db210fe435 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -151,8 +151,10 @@ var LdapWizard = {
ajaxRequests: {},
ajax: function(param, fnOnSuccess, fnOnError, reqID) {
- if(reqID !== undefined) {
+ if(!_.isUndefined(reqID)) {
if(LdapWizard.ajaxRequests.hasOwnProperty(reqID)) {
+ console.log('aborting ' + reqID);
+ console.log(param);
LdapWizard.ajaxRequests[reqID].abort();
}
}
@@ -167,9 +169,10 @@ var LdapWizard = {
}
}
);
- if(reqID !== undefined) {
+ if(!_.isUndefined(reqID)) {
LdapWizard.ajaxRequests[reqID] = request;
}
+ return request;
},
applyChanges: function (result) {
@@ -342,7 +345,7 @@ var LdapWizard = {
},
_countThings: function(method, spinnerID, doneCallback) {
- param = 'action='+method+
+ var param = 'action='+method+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
@@ -351,14 +354,14 @@ var LdapWizard = {
function(result) {
LdapWizard.applyChanges(result);
LdapWizard.hideSpinner(spinnerID);
- if(doneCallback !== undefined) {
+ if(!_.isUndefined(doneCallback)) {
doneCallback(method);
}
},
function (result) {
OC.Notification.show('Counting the entries failed with, ' + result.message);
LdapWizard.hideSpinner(spinnerID);
- if(doneCallback !== undefined) {
+ if(!_.isUndefined(doneCallback)) {
doneCallback(method);
}
},
@@ -374,12 +377,54 @@ var LdapWizard = {
LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback);
},
+ /**
+ * called after detectors have run
+ * @callback runDetectorsCallback
+ */
+
+ /**
+ * runs detectors to determine appropriate attributes, e.g. displayName
+ * @param {string} type either "User" or "Group"
+ * @param {runDetectorsCallback} triggered after all detectors have completed
+ */
+ runDetectors: function(type, callback) {
+ if(type === 'Group') {
+ $.when(LdapWizard.detectGroupMemberAssoc())
+ .then(callback, callback);
+ if( LdapWizard.admin.isExperienced
+ && !(LdapWizard.detectorsRunInXPMode & LdapWizard.groupDetectors)) {
+ LdapWizard.detectorsRunInXPMode += LdapWizard.groupDetectors;
+ }
+ } else if(type === 'User') {
+ var req1 = LdapWizard.detectUserDisplayNameAttribute();
+ var req2 = LdapWizard.detectEmailAttribute();
+ $.when(req1, req2)
+ .then(callback, callback);
+ if( LdapWizard.admin.isExperienced
+ && !(LdapWizard.detectorsRunInXPMode & LdapWizard.userDetectors)) {
+ LdapWizard.detectorsRunInXPMode += LdapWizard.userDetectors;
+ }
+ }
+ },
+
+ /**
+ * runs detector to find out a fitting user display name attribute
+ */
+ detectUserDisplayNameAttribute: function() {
+ var param = 'action=detectUserDisplayNameAttribute' +
+ '&ldap_serverconfig_chooser='+
+ encodeURIComponent($('#ldap_serverconfig_chooser').val());
+
+ //runs in the background, no callbacks necessary
+ return LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectUserDisplayNameAttribute');
+ },
+
detectEmailAttribute: function() {
- param = 'action=detectEmailAttribute'+
+ var param = 'action=detectEmailAttribute'+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
//runs in the background, no callbacks necessary
- LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute');
+ return LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute');
},
detectGroupMemberAssoc: function() {
@@ -387,7 +432,7 @@ var LdapWizard = {
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
- LdapWizard.ajax(param,
+ return LdapWizard.ajax(param,
function(result) {
//pure background story
},
@@ -409,7 +454,7 @@ var LdapWizard = {
$('#ldap_loginfilter_attributes').find('option').remove();
for (var i in result.options['ldap_loginfilter_attributes']) {
//FIXME: move HTML into template
- attr = result.options['ldap_loginfilter_attributes'][i];
+ var attr = result.options['ldap_loginfilter_attributes'][i];
$('#ldap_loginfilter_attributes').append(
"<option value='"+attr+"'>"+attr+"</option>");
}
@@ -566,8 +611,12 @@ var LdapWizard = {
},
isConfigurationActiveControlLocked: true,
+ detectorsRunInXPMode: 0,
+ userDetectors: 1,
+ groupDetectors: 2,
init: function() {
+ LdapWizard.detectorsRunInXPMode = 0;
LdapWizard.instantiateFilters();
LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked'));
LdapWizard.basicStatusCheck();
@@ -620,8 +669,9 @@ var LdapWizard = {
instantiateFilters: function() {
delete LdapWizard.userFilter;
LdapWizard.userFilter = new LdapFilter('User', function(mode) {
- if(mode === LdapWizard.filterModeAssisted) {
- LdapWizard.groupFilter.updateCount();
+ if( !LdapWizard.admin.isExperienced()
+ || mode === LdapWizard.filterModeAssisted) {
+ LdapWizard.userFilter.updateCount();
}
LdapWizard.userFilter.findFeatures();
});
@@ -630,7 +680,6 @@ var LdapWizard = {
$('#ldap_user_count').text('');
LdapWizard.showSpinner('#rawUserFilterContainer .ldapGetEntryCount');
LdapWizard.userFilter.updateCount(LdapWizard.hideTestSpinner);
- LdapWizard.detectEmailAttribute();
$('#ldap_user_count').removeClass('hidden');
});
@@ -641,7 +690,8 @@ var LdapWizard = {
delete LdapWizard.groupFilter;
LdapWizard.groupFilter = new LdapFilter('Group', function(mode) {
- if(mode === LdapWizard.filterModeAssisted) {
+ if( !LdapWizard.admin.isExperienced()
+ || mode === LdapWizard.filterModeAssisted) {
LdapWizard.groupFilter.updateCount();
}
LdapWizard.groupFilter.findFeatures();
@@ -651,7 +701,6 @@ var LdapWizard = {
$('#ldap_group_count').text('');
LdapWizard.showSpinner('#rawGroupFilterContainer .ldapGetEntryCount');
LdapWizard.groupFilter.updateCount(LdapWizard.hideTestSpinner);
- LdapWizard.detectGroupMemberAssoc();
$('#ldap_group_count').removeClass('hidden');
});
},
@@ -668,7 +717,7 @@ var LdapWizard = {
postInitUserFilter: function() {
if(LdapWizard.userFilterObjectClassesHasRun &&
LdapWizard.userFilterAvailableGroupsHasRun) {
- LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
+ LdapWizard.userFilter.compose();
}
},
@@ -679,7 +728,7 @@ var LdapWizard = {
//do not allow to switch tabs as long as a save process is active
return false;
}
- newTabIndex = 0;
+ var newTabIndex = 0;
if(ui.newTab[0].id === '#ldapWizard2') {
LdapWizard.initUserFilter();
newTabIndex = 1;
@@ -691,9 +740,23 @@ var LdapWizard = {
newTabIndex = 3;
}
- curTabIndex = $('#ldapSettings').tabs('option', 'active');
+ var curTabIndex = $('#ldapSettings').tabs('option', 'active');
if(curTabIndex >= 0 && curTabIndex <= 3) {
LdapWizard.controlUpdate(newTabIndex);
+ //run detectors in XP mode, when "Test Filter" button has not been
+ //clicked in order to make sure that email, displayname, member-
+ //group association attributes are properly set.
+ if( curTabIndex === 1
+ && LdapWizard.admin.isExperienced
+ && !(LdapWizard.detecorsRunInXPMode & LdapWizard.userDetectors)
+ ) {
+ LdapWizard.runDetectors('User', function(){});
+ } else if( curTabIndex === 3
+ && LdapWizard.admin.isExperienced
+ && !(LdapWizard.detecorsRunInXPMode & LdapWizard.groupDetectors)
+ ) {
+ LdapWizard.runDetectors('Group', function(){});
+ }
}
},
@@ -711,15 +774,15 @@ var LdapWizard = {
}
}
- if(triggerObj.id === 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
- LdapWizard.detectEmailAttribute();
- } else if(triggerObj.id === 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
- LdapWizard.detectGroupMemberAssoc();
- }
-
if(triggerObj.id === 'ldap_loginfilter_username'
|| triggerObj.id === 'ldap_loginfilter_email') {
LdapWizard.loginFilter.compose();
+ } else if (!LdapWizard.admin.isExperienced()) {
+ if(triggerObj.id === 'ldap_userlist_filter') {
+ LdapWizard.userFilter.updateCount();
+ } else if (triggerObj.id === 'ldap_group_filter') {
+ LdapWizard.groupFilter.updateCount();
+ }
}
if($('#ldapSettings').tabs('option', 'active') == 0) {
@@ -749,7 +812,7 @@ var LdapWizard = {
LdapWizard._save($('#'+originalObj)[0], $.trim(values));
if(originalObj === 'ldap_userfilter_objectclass'
|| originalObj === 'ldap_userfilter_groups') {
- LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
+ LdapWizard.userFilter.compose(true);
//when user filter is changed afterwards, login filter needs to
//be adjusted, too
if(!LdapWizard.loginFilter) {
@@ -760,7 +823,7 @@ var LdapWizard = {
LdapWizard.loginFilter.compose();
} else if(originalObj === 'ldap_groupfilter_objectclass'
|| originalObj === 'ldap_groupfilter_groups') {
- LdapWizard.groupFilter.compose();
+ LdapWizard.groupFilter.compose(true);
}
},
@@ -830,10 +893,10 @@ var LdapWizard = {
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted);
if(isUser) {
LdapWizard.blacklistRemove('ldap_userlist_filter');
- LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
+ LdapWizard.userFilter.compose(true);
} else {
LdapWizard.blacklistRemove('ldap_group_filter');
- LdapWizard.groupFilter.compose();
+ LdapWizard.groupFilter.compose(true);
}
}
},
diff --git a/apps/user_ldap/l10n/af_ZA.js b/apps/user_ldap/l10n/af_ZA.js
index fc00b542daa..610359a094c 100644
--- a/apps/user_ldap/l10n/af_ZA.js
+++ b/apps/user_ldap/l10n/af_ZA.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"user_ldap",
{
+ "Error" : "Fout",
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""],
"Help" : "Hulp",
diff --git a/apps/user_ldap/l10n/af_ZA.json b/apps/user_ldap/l10n/af_ZA.json
index ec83ea0849a..05463be095e 100644
--- a/apps/user_ldap/l10n/af_ZA.json
+++ b/apps/user_ldap/l10n/af_ZA.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Error" : "Fout",
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""],
"Help" : "Hulp",
diff --git a/apps/user_ldap/l10n/ar.js b/apps/user_ldap/l10n/ar.js
index c28875d7cdd..6b5cdf33d48 100644
--- a/apps/user_ldap/l10n/ar.js
+++ b/apps/user_ldap/l10n/ar.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "تأكيد الحذف",
"_%s group found_::_%s groups found_" : ["لا توجد مجموعات: %s","تم إيجاد %s مجموعة واحدة","تم إيجاد %s مجموعتين","تم إيجاد %s مجموعات","تم إيجاد %s مجموعة","تم إيجاد %s مجموعة/مجموعات"],
"_%s user found_::_%s users found_" : ["","","","","",""],
+ "Server" : "خادم",
"Save" : "حفظ",
"Help" : "المساعدة",
"Host" : "المضيف",
diff --git a/apps/user_ldap/l10n/ar.json b/apps/user_ldap/l10n/ar.json
index b546eb3a5dc..4bf07f625d5 100644
--- a/apps/user_ldap/l10n/ar.json
+++ b/apps/user_ldap/l10n/ar.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "تأكيد الحذف",
"_%s group found_::_%s groups found_" : ["لا توجد مجموعات: %s","تم إيجاد %s مجموعة واحدة","تم إيجاد %s مجموعتين","تم إيجاد %s مجموعات","تم إيجاد %s مجموعة","تم إيجاد %s مجموعة/مجموعات"],
"_%s user found_::_%s users found_" : ["","","","","",""],
+ "Server" : "خادم",
"Save" : "حفظ",
"Help" : "المساعدة",
"Host" : "المضيف",
diff --git a/apps/user_ldap/l10n/bg_BG.js b/apps/user_ldap/l10n/bg_BG.js
index e6f45803985..91e48905138 100644
--- a/apps/user_ldap/l10n/bg_BG.js
+++ b/apps/user_ldap/l10n/bg_BG.js
@@ -76,6 +76,7 @@ OC.L10N.register(
"Saving" : "Записване",
"Back" : "Назад",
"Continue" : "Продължи",
+ "LDAP" : "LDAP",
"Expert" : "Експерт",
"Advanced" : "Допълнителни",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Предупреждение:</b> Приложенията user_ldap и user_webdavauth са несъвместими. Може да изпитате неочквано поведение. Моля, поискайте системния администратор да изключи едното приложение.",
diff --git a/apps/user_ldap/l10n/bg_BG.json b/apps/user_ldap/l10n/bg_BG.json
index f29aff72266..19ee8da4b33 100644
--- a/apps/user_ldap/l10n/bg_BG.json
+++ b/apps/user_ldap/l10n/bg_BG.json
@@ -74,6 +74,7 @@
"Saving" : "Записване",
"Back" : "Назад",
"Continue" : "Продължи",
+ "LDAP" : "LDAP",
"Expert" : "Експерт",
"Advanced" : "Допълнителни",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Предупреждение:</b> Приложенията user_ldap и user_webdavauth са несъвместими. Може да изпитате неочквано поведение. Моля, поискайте системния администратор да изключи едното приложение.",
diff --git a/apps/user_ldap/l10n/bs.js b/apps/user_ldap/l10n/bs.js
index feccd314874..6f1651beb74 100644
--- a/apps/user_ldap/l10n/bs.js
+++ b/apps/user_ldap/l10n/bs.js
@@ -1,8 +1,15 @@
OC.L10N.register(
"user_ldap",
{
+ "Deletion failed" : "Brisanje nije uspjelo",
+ "Error" : "Greška",
"_%s group found_::_%s groups found_" : ["","",""],
"_%s user found_::_%s users found_" : ["","",""],
- "Save" : "Spasi"
+ "Save" : "Spasi",
+ "Help" : "Pomoć",
+ "Port" : "Priključak",
+ "Password" : "Lozinka",
+ "Continue" : "Nastavi",
+ "Advanced" : "Napredno"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/user_ldap/l10n/bs.json b/apps/user_ldap/l10n/bs.json
index 42f5ec1bffc..b624292102c 100644
--- a/apps/user_ldap/l10n/bs.json
+++ b/apps/user_ldap/l10n/bs.json
@@ -1,6 +1,13 @@
{ "translations": {
+ "Deletion failed" : "Brisanje nije uspjelo",
+ "Error" : "Greška",
"_%s group found_::_%s groups found_" : ["","",""],
"_%s user found_::_%s users found_" : ["","",""],
- "Save" : "Spasi"
+ "Save" : "Spasi",
+ "Help" : "Pomoć",
+ "Port" : "Priključak",
+ "Password" : "Lozinka",
+ "Continue" : "Nastavi",
+ "Advanced" : "Napredno"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js
index 793fd61c4b3..058f99d69ab 100644
--- a/apps/user_ldap/l10n/cs_CZ.js
+++ b/apps/user_ldap/l10n/cs_CZ.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Potvrdit smazání",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.",
"Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost",
"Invalid Host" : "Neplatný hostitel",
"Server" : "Server",
@@ -52,7 +53,7 @@ OC.L10N.register(
"groups found" : "nalezené skupiny",
"Users login with this attribute:" : "Uživatelé se přihlašují s tímto atributem:",
"LDAP Username:" : "LDAP uživatelské jméno:",
- "LDAP Email Address:" : "LDAP e-mailová adresa:",
+ "LDAP Email Address:" : "LDAP emailová adresa:",
"Other Attributes:" : "Další atributy:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filtr při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení. Příklad: \"uid=%%uid\"",
"1. Server" : "1. Server",
@@ -69,7 +70,7 @@ OC.L10N.register(
"One Base DN per line" : "Jedna základní DN na řádku",
"You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.",
- "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučené pro obsáhlé adresáře)",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)",
"Limit %s access to users meeting these criteria:" : "Omezit přístup %s uživatelům splňujícím tyto podmínky:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.",
"users found" : "nalezení uživatelé",
@@ -79,7 +80,7 @@ OC.L10N.register(
"LDAP" : "LDAP",
"Expert" : "Expertní",
"Advanced" : "Pokročilé",
- "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím vašeho systémového administrátora o zakázání jednoho z nich.",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému, aby jej nainstaloval.",
"Connection Settings" : "Nastavení spojení",
"Configuration Active" : "Nastavení aktivní",
@@ -115,7 +116,7 @@ OC.L10N.register(
"Quota Field" : "Pole pro kvótu",
"Quota Default" : "Výchozí kvóta",
"in bytes" : "v bajtech",
- "Email Field" : "Pole e-mailu",
+ "Email Field" : "Pole emailu",
"User Home Folder Naming Rule" : "Pravidlo pojmenování domovské složky uživatele",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveďte LDAP/AD parametr.",
"Internal Username" : "Interní uživatelské jméno",
diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json
index fb906cb7d9c..640d1cf44c4 100644
--- a/apps/user_ldap/l10n/cs_CZ.json
+++ b/apps/user_ldap/l10n/cs_CZ.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Potvrdit smazání",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.",
"Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost",
"Invalid Host" : "Neplatný hostitel",
"Server" : "Server",
@@ -50,7 +51,7 @@
"groups found" : "nalezené skupiny",
"Users login with this attribute:" : "Uživatelé se přihlašují s tímto atributem:",
"LDAP Username:" : "LDAP uživatelské jméno:",
- "LDAP Email Address:" : "LDAP e-mailová adresa:",
+ "LDAP Email Address:" : "LDAP emailová adresa:",
"Other Attributes:" : "Další atributy:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filtr při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení. Příklad: \"uid=%%uid\"",
"1. Server" : "1. Server",
@@ -67,7 +68,7 @@
"One Base DN per line" : "Jedna základní DN na řádku",
"You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.",
- "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučené pro obsáhlé adresáře)",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)",
"Limit %s access to users meeting these criteria:" : "Omezit přístup %s uživatelům splňujícím tyto podmínky:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.",
"users found" : "nalezení uživatelé",
@@ -77,7 +78,7 @@
"LDAP" : "LDAP",
"Expert" : "Expertní",
"Advanced" : "Pokročilé",
- "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím vašeho systémového administrátora o zakázání jednoho z nich.",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému, aby jej nainstaloval.",
"Connection Settings" : "Nastavení spojení",
"Configuration Active" : "Nastavení aktivní",
@@ -113,7 +114,7 @@
"Quota Field" : "Pole pro kvótu",
"Quota Default" : "Výchozí kvóta",
"in bytes" : "v bajtech",
- "Email Field" : "Pole e-mailu",
+ "Email Field" : "Pole emailu",
"User Home Folder Naming Rule" : "Pravidlo pojmenování domovské složky uživatele",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveďte LDAP/AD parametr.",
"Internal Username" : "Interní uživatelské jméno",
diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js
index 91bce8c777e..fb6feccc4b6 100644
--- a/apps/user_ldap/l10n/da.js
+++ b/apps/user_ldap/l10n/da.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Bekræft Sletning",
"_%s group found_::_%s groups found_" : ["Der blev fundet %s gruppe","Der blev fundet %s grupper"],
"_%s user found_::_%s users found_" : ["Der blev fundet %s bruger","Der blev fundet %s brugere"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede ldap-indstillinger.",
"Could not find the desired feature" : "Fandt ikke den ønskede funktion",
"Invalid Host" : "Ugyldig vært",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json
index 97d0c0ca403..0332afc101d 100644
--- a/apps/user_ldap/l10n/da.json
+++ b/apps/user_ldap/l10n/da.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Bekræft Sletning",
"_%s group found_::_%s groups found_" : ["Der blev fundet %s gruppe","Der blev fundet %s grupper"],
"_%s user found_::_%s users found_" : ["Der blev fundet %s bruger","Der blev fundet %s brugere"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede ldap-indstillinger.",
"Could not find the desired feature" : "Fandt ikke den ønskede funktion",
"Invalid Host" : "Ugyldig vært",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index 94f388b0df4..545fb9c194f 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte gib es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index f3524664fc1..df0f777536a 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte gib es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 3cefc2ec625..c89d7793a4a 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte geben Sie es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index cf823ca29d4..7b047cbcd2f 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte geben Sie es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js
index 8018ea00766..098fc25fa6f 100644
--- a/apps/user_ldap/l10n/el.js
+++ b/apps/user_ldap/l10n/el.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Επιβεβαίωση Διαγραφής",
"_%s group found_::_%s groups found_" : ["%s ομάδα βρέθηκε","%s ομάδες βρέθηκαν"],
"_%s user found_::_%s users found_" : ["%s χρήστης βρέθηκε","%s χρήστες βρέθηκαν"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Δεν ήταν δυνατή η ανίχνευση της ιδιότητας του εμφανιζόμενου ονόματος χρήστη . Παρακαλείστε να το προσδιορίσετε στις προηγμένες ρυθμίσεις LDAP",
"Could not find the desired feature" : "Αδυναμία εύρεσης επιθυμητου χαρακτηριστικού",
"Invalid Host" : "Άκυρος εξυπηρετητής",
"Server" : "Διακομιστής",
@@ -76,6 +77,7 @@ OC.L10N.register(
"Saving" : "Αποθήκευση",
"Back" : "Επιστροφή",
"Continue" : "Συνέχεια",
+ "LDAP" : "LDAP",
"Expert" : "Ειδικός",
"Advanced" : "Για προχωρημένους",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Προσοχή:</b> Οι εφαρμογές user_ldap και user_webdavauth είναι ασύμβατες. Μπορεί να αντιμετωπίσετε απρόβλεπτη συμπεριφορά. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να απενεργοποιήσει μία από αυτές.",
diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json
index bd8b6aa6170..44119559c08 100644
--- a/apps/user_ldap/l10n/el.json
+++ b/apps/user_ldap/l10n/el.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Επιβεβαίωση Διαγραφής",
"_%s group found_::_%s groups found_" : ["%s ομάδα βρέθηκε","%s ομάδες βρέθηκαν"],
"_%s user found_::_%s users found_" : ["%s χρήστης βρέθηκε","%s χρήστες βρέθηκαν"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Δεν ήταν δυνατή η ανίχνευση της ιδιότητας του εμφανιζόμενου ονόματος χρήστη . Παρακαλείστε να το προσδιορίσετε στις προηγμένες ρυθμίσεις LDAP",
"Could not find the desired feature" : "Αδυναμία εύρεσης επιθυμητου χαρακτηριστικού",
"Invalid Host" : "Άκυρος εξυπηρετητής",
"Server" : "Διακομιστής",
@@ -74,6 +75,7 @@
"Saving" : "Αποθήκευση",
"Back" : "Επιστροφή",
"Continue" : "Συνέχεια",
+ "LDAP" : "LDAP",
"Expert" : "Ειδικός",
"Advanced" : "Για προχωρημένους",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Προσοχή:</b> Οι εφαρμογές user_ldap και user_webdavauth είναι ασύμβατες. Μπορεί να αντιμετωπίσετε απρόβλεπτη συμπεριφορά. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να απενεργοποιήσει μία από αυτές.",
diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js
index d87ce836807..9476b44dde0 100644
--- a/apps/user_ldap/l10n/en_GB.js
+++ b/apps/user_ldap/l10n/en_GB.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirm Deletion",
"_%s group found_::_%s groups found_" : ["%s group found","%s groups found"],
"_%s user found_::_%s users found_" : ["%s user found","%s users found"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.",
"Could not find the desired feature" : "Could not find the desired feature",
"Invalid Host" : "Invalid Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json
index 8fd6ed30d4f..fd6861a5184 100644
--- a/apps/user_ldap/l10n/en_GB.json
+++ b/apps/user_ldap/l10n/en_GB.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirm Deletion",
"_%s group found_::_%s groups found_" : ["%s group found","%s groups found"],
"_%s user found_::_%s users found_" : ["%s user found","%s users found"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.",
"Could not find the desired feature" : "Could not find the desired feature",
"Invalid Host" : "Invalid Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js
index 172d32c9092..731213be81c 100644
--- a/apps/user_ldap/l10n/es.js
+++ b/apps/user_ldap/l10n/es.js
@@ -33,11 +33,12 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmar eliminación",
"_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
"_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No se pudo detectar el atributo de nombre de usuario pantalla. Por favor especifique lo mismo en ajustes avanzados ldap.",
"Could not find the desired feature" : "No se puede encontrar la función deseada.",
"Invalid Host" : "Host inválido",
"Server" : "Servidor",
"User Filter" : "Filtro de usuario",
- "Login Filter" : "Filtro de Login",
+ "Login Filter" : "Filtro de login",
"Group Filter" : "Filtro de grupo",
"Save" : "Guardar",
"Test Configuration" : "Configuración de prueba",
@@ -58,7 +59,7 @@ OC.L10N.register(
"1. Server" : "1. Servidor",
"%s. Server:" : "%s. Servidor:",
"Add Server Configuration" : "Agregar configuracion del servidor",
- "Delete Configuration" : "Borrar Configuración",
+ "Delete Configuration" : "Borrar configuración",
"Host" : "Servidor",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://",
"Port" : "Puerto",
@@ -68,7 +69,7 @@ OC.L10N.register(
"For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deje DN y contraseña vacíos.",
"One Base DN per line" : "Un DN Base por línea",
"You can specify Base DN for users and groups in the Advanced tab" : "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado",
- "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automaticas al LDAP. Mejor para grandes configuraciones, pero requiere algun conocimiento de LDAP",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automáticas al LDAP. Mejor para grandes configuraciones, pero requiere cierto conocimiento de LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ingrese manualmente los filtros LDAP (Recomendado para grandes directorios)",
"Limit %s access to users meeting these criteria:" : "Limitar el acceso a %s a los usuarios que cumplan estos criterios:",
"The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.",
@@ -108,7 +109,7 @@ OC.L10N.register(
"Group Search Attributes" : "Atributos de busqueda de grupo",
"Group-Member association" : "Asociación Grupo-Miembro",
"Nested Groups" : "Grupos anidados",
- "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contenga otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contengan otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).",
"Paging chunksize" : "Tamaño de los fragmentos de paginación",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño de los fragmentos usado para búsquedas LDAP paginadas que pueden devolver resultados voluminosos, como enumeración de usuarios o de grupos. (Si se establece en 0, se deshabilitan las búsquedas LDAP paginadas en esas situaciones.)",
"Special Attributes" : "Atributos especiales",
diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json
index b0308c4cbaf..b5a07d210a4 100644
--- a/apps/user_ldap/l10n/es.json
+++ b/apps/user_ldap/l10n/es.json
@@ -31,11 +31,12 @@
"Confirm Deletion" : "Confirmar eliminación",
"_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
"_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No se pudo detectar el atributo de nombre de usuario pantalla. Por favor especifique lo mismo en ajustes avanzados ldap.",
"Could not find the desired feature" : "No se puede encontrar la función deseada.",
"Invalid Host" : "Host inválido",
"Server" : "Servidor",
"User Filter" : "Filtro de usuario",
- "Login Filter" : "Filtro de Login",
+ "Login Filter" : "Filtro de login",
"Group Filter" : "Filtro de grupo",
"Save" : "Guardar",
"Test Configuration" : "Configuración de prueba",
@@ -56,7 +57,7 @@
"1. Server" : "1. Servidor",
"%s. Server:" : "%s. Servidor:",
"Add Server Configuration" : "Agregar configuracion del servidor",
- "Delete Configuration" : "Borrar Configuración",
+ "Delete Configuration" : "Borrar configuración",
"Host" : "Servidor",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://",
"Port" : "Puerto",
@@ -66,7 +67,7 @@
"For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deje DN y contraseña vacíos.",
"One Base DN per line" : "Un DN Base por línea",
"You can specify Base DN for users and groups in the Advanced tab" : "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado",
- "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automaticas al LDAP. Mejor para grandes configuraciones, pero requiere algun conocimiento de LDAP",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automáticas al LDAP. Mejor para grandes configuraciones, pero requiere cierto conocimiento de LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ingrese manualmente los filtros LDAP (Recomendado para grandes directorios)",
"Limit %s access to users meeting these criteria:" : "Limitar el acceso a %s a los usuarios que cumplan estos criterios:",
"The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.",
@@ -106,7 +107,7 @@
"Group Search Attributes" : "Atributos de busqueda de grupo",
"Group-Member association" : "Asociación Grupo-Miembro",
"Nested Groups" : "Grupos anidados",
- "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contenga otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contengan otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).",
"Paging chunksize" : "Tamaño de los fragmentos de paginación",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Tamaño de los fragmentos usado para búsquedas LDAP paginadas que pueden devolver resultados voluminosos, como enumeración de usuarios o de grupos. (Si se establece en 0, se deshabilitan las búsquedas LDAP paginadas en esas situaciones.)",
"Special Attributes" : "Atributos especiales",
diff --git a/apps/user_ldap/l10n/fi.js b/apps/user_ldap/l10n/fi.js
new file mode 100644
index 00000000000..909c5227514
--- /dev/null
+++ b/apps/user_ldap/l10n/fi.js
@@ -0,0 +1,13 @@
+OC.L10N.register(
+ "user_ldap",
+ {
+ "Error" : "Virhe",
+ "_%s group found_::_%s groups found_" : ["",""],
+ "_%s user found_::_%s users found_" : ["",""],
+ "Server" : "Palvelin",
+ "Save" : "Tallenna",
+ "Help" : "Apua",
+ "Password" : "Salasana",
+ "Back" : "Takaisin"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/fi.json b/apps/user_ldap/l10n/fi.json
new file mode 100644
index 00000000000..053bb453f7f
--- /dev/null
+++ b/apps/user_ldap/l10n/fi.json
@@ -0,0 +1,11 @@
+{ "translations": {
+ "Error" : "Virhe",
+ "_%s group found_::_%s groups found_" : ["",""],
+ "_%s user found_::_%s users found_" : ["",""],
+ "Server" : "Palvelin",
+ "Save" : "Tallenna",
+ "Help" : "Apua",
+ "Password" : "Salasana",
+ "Back" : "Takaisin"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index 74bc9533eb4..cd7ef4d0005 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -4,8 +4,8 @@ OC.L10N.register(
"Failed to clear the mappings." : "Erreur lors de la suppression des associations.",
"Failed to delete the server configuration" : "Échec de la suppression de la configuration du serveur",
"The configuration is valid and the connection could be established!" : "La configuration est valide et la connexion peut être établie !",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valide, mais le lien ne peut être établi. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
- "The configuration is invalid. Please have a look at the logs for further details." : "La configuration est invalide. Veuillez consulter les logs pour plus de détails.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "La configuration n'est pas valable. Veuillez consulter les logs pour plus de détails.",
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmer la suppression",
"_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"],
"_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres ldap avancés.",
"Could not find the desired feature" : "Impossible de trouver la fonction souhaitée",
"Invalid Host" : "Hôte invalide",
"Server" : "Serveur",
@@ -56,7 +57,7 @@ OC.L10N.register(
"Other Attributes:" : "Autres attributs :",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur lors de la connexion. Exemple : \"uid=%%uid\"",
"1. Server" : "1. Serveur",
- "%s. Server:" : "%s. Serveur:",
+ "%s. Server:" : "%s. Serveur :",
"Add Server Configuration" : "Ajouter une configuration du serveur",
"Delete Configuration" : "Suppression de la configuration",
"Host" : "Hôte",
@@ -90,25 +91,25 @@ OC.L10N.register(
"Disable Main Server" : "Désactiver le serveur principal",
"Only connect to the replica server." : "Se connecter uniquement au serveur de replica.",
"Case insensitive LDAP server (Windows)" : "Serveur LDAP insensible à la casse (Windows)",
- "Turn off SSL certificate validation." : "Désactiver la validation du certificat SSL.",
+ "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL.",
"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",
+ "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",
"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'utilisateur affiché.",
+ "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.",
"Base User Tree" : "DN racine de l'arbre utilisateurs",
"One User Base DN per line" : "Un DN racine utilisateur par ligne",
"User Search Attributes" : "Recherche des attributs utilisateur",
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
- "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom de groupe affiché.",
+ "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
"Base Group Tree" : "DN racine de l'arbre groupes",
"One Group Base DN per line" : "Un DN racine groupe par ligne",
"Group Search Attributes" : "Recherche des attributs du groupe",
"Group-Member association" : "Association groupe-membre",
"Nested Groups" : "Groupes imbriqués",
- "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont supportés (fonctionne uniquement si l'attribut membre du groupe contient des DNs).",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DNs).",
"Paging chunksize" : "Dimensionnement des paginations",
"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.)" : "La taille d'une part (chunksize) est utilisée pour les recherches paginées de LDAP qui peuvent retourner des résultats par lots comme une énumération d'utilisateurs ou groupes. (Configurer à 0 pour désactiver les recherches paginées de LDAP.)",
"Special Attributes" : "Attributs spéciaux",
@@ -119,8 +120,8 @@ OC.L10N.register(
"User Home Folder Naming Rule" : "Convention de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide ",
"Internal Username" : "Nom d'utilisateur interne",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est incrémenté/décrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. C'est aussi le port d'URLs distants, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
- "Internal Username Attribute:" : "Nom d'utilisateur interne:",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
+ "Internal Username Attribute:" : "Nom d'utilisateur interne :",
"Override UUID detection" : "Surcharger la détection d'UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.",
"UUID Attribute for Users:" : "Attribut UUID pour les utilisateurs :",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index 777376eced0..c092fb0f02d 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -2,8 +2,8 @@
"Failed to clear the mappings." : "Erreur lors de la suppression des associations.",
"Failed to delete the server configuration" : "Échec de la suppression de la configuration du serveur",
"The configuration is valid and the connection could be established!" : "La configuration est valide et la connexion peut être établie !",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valide, mais le lien ne peut être établi. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
- "The configuration is invalid. Please have a look at the logs for further details." : "La configuration est invalide. Veuillez consulter les logs pour plus de détails.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "La configuration n'est pas valable. Veuillez consulter les logs pour plus de détails.",
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirmer la suppression",
"_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"],
"_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres ldap avancés.",
"Could not find the desired feature" : "Impossible de trouver la fonction souhaitée",
"Invalid Host" : "Hôte invalide",
"Server" : "Serveur",
@@ -54,7 +55,7 @@
"Other Attributes:" : "Autres attributs :",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur lors de la connexion. Exemple : \"uid=%%uid\"",
"1. Server" : "1. Serveur",
- "%s. Server:" : "%s. Serveur:",
+ "%s. Server:" : "%s. Serveur :",
"Add Server Configuration" : "Ajouter une configuration du serveur",
"Delete Configuration" : "Suppression de la configuration",
"Host" : "Hôte",
@@ -88,25 +89,25 @@
"Disable Main Server" : "Désactiver le serveur principal",
"Only connect to the replica server." : "Se connecter uniquement au serveur de replica.",
"Case insensitive LDAP server (Windows)" : "Serveur LDAP insensible à la casse (Windows)",
- "Turn off SSL certificate validation." : "Désactiver la validation du certificat SSL.",
+ "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL.",
"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",
+ "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",
"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'utilisateur affiché.",
+ "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.",
"Base User Tree" : "DN racine de l'arbre utilisateurs",
"One User Base DN per line" : "Un DN racine utilisateur par ligne",
"User Search Attributes" : "Recherche des attributs utilisateur",
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
- "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom de groupe affiché.",
+ "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
"Base Group Tree" : "DN racine de l'arbre groupes",
"One Group Base DN per line" : "Un DN racine groupe par ligne",
"Group Search Attributes" : "Recherche des attributs du groupe",
"Group-Member association" : "Association groupe-membre",
"Nested Groups" : "Groupes imbriqués",
- "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont supportés (fonctionne uniquement si l'attribut membre du groupe contient des DNs).",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DNs).",
"Paging chunksize" : "Dimensionnement des paginations",
"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.)" : "La taille d'une part (chunksize) est utilisée pour les recherches paginées de LDAP qui peuvent retourner des résultats par lots comme une énumération d'utilisateurs ou groupes. (Configurer à 0 pour désactiver les recherches paginées de LDAP.)",
"Special Attributes" : "Attributs spéciaux",
@@ -117,8 +118,8 @@
"User Home Folder Naming Rule" : "Convention de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide ",
"Internal Username" : "Nom d'utilisateur interne",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est incrémenté/décrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. C'est aussi le port d'URLs distants, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
- "Internal Username Attribute:" : "Nom d'utilisateur interne:",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
+ "Internal Username Attribute:" : "Nom d'utilisateur interne :",
"Override UUID detection" : "Surcharger la détection d'UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.",
"UUID Attribute for Users:" : "Attribut UUID pour les utilisateurs :",
diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js
index ef75c8df65c..a2359d41ebc 100644
--- a/apps/user_ldap/l10n/gl.js
+++ b/apps/user_ldap/l10n/gl.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmar a eliminación",
"_%s group found_::_%s groups found_" : ["Atopouse %s grupo","Atopáronse %s grupos"],
"_%s user found_::_%s users found_" : ["Atopouse %s usuario","Atopáronse %s usuarios"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Non foi posíbel detectar o atributo nome de usuario que mostrar. Especifiqueo vostede mesmo nos axustes avanzados de LDAP.",
"Could not find the desired feature" : "Non foi posíbel atopar a función desexada",
"Invalid Host" : "Máquina incorrecta",
"Server" : "Servidor",
@@ -48,6 +49,7 @@ OC.L10N.register(
"Edit raw filter instead" : "Editar, no seu canto, o filtro en bruto",
"Raw LDAP filter" : "Filtro LDAP en bruto",
"The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica que grupos LDAP teñen acceso á instancia %s.",
+ "Test Filter" : "Filtro de probas",
"groups found" : "atopáronse grupos",
"Users login with this attribute:" : "Os usuarios inician sesión con este atributo:",
"LDAP Username:" : "Nome de usuario LDAP:",
@@ -67,11 +69,15 @@ OC.L10N.register(
"For anonymous access, leave DN and Password empty." : "Para o acceso anónimo deixe o DN e o contrasinal baleiros.",
"One Base DN per line" : "Un DN base por liña",
"You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar a DN base para usuarios e grupos na lapela de «Avanzado»",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as peticións LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)",
"Limit %s access to users meeting these criteria:" : "Limitar o acceso a %s para os usuarios que cumpren con estes criterios:",
"The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica que usuarios LDAP teñen acceso á instancia %s.",
"users found" : "atopáronse usuarios",
+ "Saving" : "Gardando",
"Back" : "Atrás",
"Continue" : "Continuar",
+ "LDAP" : "LDAP",
"Expert" : "Experto",
"Advanced" : "Avanzado",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Aviso:</b> As aplicacións user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar unha delas.",
diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json
index 99b0807ef54..0f6d4e00cdf 100644
--- a/apps/user_ldap/l10n/gl.json
+++ b/apps/user_ldap/l10n/gl.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirmar a eliminación",
"_%s group found_::_%s groups found_" : ["Atopouse %s grupo","Atopáronse %s grupos"],
"_%s user found_::_%s users found_" : ["Atopouse %s usuario","Atopáronse %s usuarios"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Non foi posíbel detectar o atributo nome de usuario que mostrar. Especifiqueo vostede mesmo nos axustes avanzados de LDAP.",
"Could not find the desired feature" : "Non foi posíbel atopar a función desexada",
"Invalid Host" : "Máquina incorrecta",
"Server" : "Servidor",
@@ -46,6 +47,7 @@
"Edit raw filter instead" : "Editar, no seu canto, o filtro en bruto",
"Raw LDAP filter" : "Filtro LDAP en bruto",
"The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica que grupos LDAP teñen acceso á instancia %s.",
+ "Test Filter" : "Filtro de probas",
"groups found" : "atopáronse grupos",
"Users login with this attribute:" : "Os usuarios inician sesión con este atributo:",
"LDAP Username:" : "Nome de usuario LDAP:",
@@ -65,11 +67,15 @@
"For anonymous access, leave DN and Password empty." : "Para o acceso anónimo deixe o DN e o contrasinal baleiros.",
"One Base DN per line" : "Un DN base por liña",
"You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar a DN base para usuarios e grupos na lapela de «Avanzado»",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as peticións LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)",
"Limit %s access to users meeting these criteria:" : "Limitar o acceso a %s para os usuarios que cumpren con estes criterios:",
"The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica que usuarios LDAP teñen acceso á instancia %s.",
"users found" : "atopáronse usuarios",
+ "Saving" : "Gardando",
"Back" : "Atrás",
"Continue" : "Continuar",
+ "LDAP" : "LDAP",
"Expert" : "Experto",
"Advanced" : "Avanzado",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Aviso:</b> As aplicacións user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar unha delas.",
diff --git a/apps/user_ldap/l10n/hi_IN.php b/apps/user_ldap/l10n/hi_IN.php
deleted file mode 100644
index 3a1e002311c..00000000000
--- a/apps/user_ldap/l10n/hi_IN.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%s group found_::_%s groups found_" => array("",""),
-"_%s user found_::_%s users found_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js
index cf5f37c5efb..26ca061c71a 100644
--- a/apps/user_ldap/l10n/id.js
+++ b/apps/user_ldap/l10n/id.js
@@ -72,6 +72,7 @@ OC.L10N.register(
"Saving" : "Menyimpan",
"Back" : "Kembali",
"Continue" : "Lanjutkan",
+ "LDAP" : "LDAP",
"Expert" : "Lanjutan",
"Advanced" : "Lanjutan",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Peringatan:</b> Modul LDAP PHP tidak terpasang, perangkat tidak akan bekerja. Silakan minta administrator sistem untuk memasangnya.",
@@ -87,11 +88,13 @@ OC.L10N.register(
"in seconds. A change empties the cache." : "dalam detik. perubahan mengosongkan cache",
"Directory Settings" : "Pengaturan Direktori",
"User Display Name Field" : "Bidang Tampilan Nama Pengguna",
+ "The LDAP attribute to use to generate the user's display name." : "Atribut LDAP digunakan untuk menghasilkan nama tampilan pengguna.",
"Base User Tree" : "Pohon Pengguna Dasar",
"One User Base DN per line" : "Satu Pengguna Base DN per baris",
"User Search Attributes" : "Atribut Pencarian Pengguna",
"Optional; one attribute per line" : "Pilihan; satu atribut per baris",
"Group Display Name Field" : "Bidang Tampilan Nama Grup",
+ "The LDAP attribute to use to generate the groups's display name." : "Atribut LDAP digunakan untuk menghasilkan nama tampilan grup.",
"Base Group Tree" : "Pohon Grup Dasar",
"One Group Base DN per line" : "Satu Grup Base DN per baris",
"Group Search Attributes" : "Atribut Pencarian Grup",
@@ -102,6 +105,11 @@ OC.L10N.register(
"in bytes" : "dalam bytes",
"Email Field" : "Bidang Email",
"User Home Folder Naming Rule" : "Aturan Penamaan Folder Home Pengguna",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD."
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD.",
+ "Internal Username" : "Nama Pengguna Internal",
+ "Internal Username Attribute:" : "Atribut Nama Pengguna Internal:",
+ "Override UUID detection" : "Timpa deteksi UUID",
+ "UUID Attribute for Users:" : "Atribut UUID untuk Pengguna:",
+ "UUID Attribute for Groups:" : "Atribut UUID untuk Grup:"
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json
index 2395e7f2a55..ad650fc0fb9 100644
--- a/apps/user_ldap/l10n/id.json
+++ b/apps/user_ldap/l10n/id.json
@@ -70,6 +70,7 @@
"Saving" : "Menyimpan",
"Back" : "Kembali",
"Continue" : "Lanjutkan",
+ "LDAP" : "LDAP",
"Expert" : "Lanjutan",
"Advanced" : "Lanjutan",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Peringatan:</b> Modul LDAP PHP tidak terpasang, perangkat tidak akan bekerja. Silakan minta administrator sistem untuk memasangnya.",
@@ -85,11 +86,13 @@
"in seconds. A change empties the cache." : "dalam detik. perubahan mengosongkan cache",
"Directory Settings" : "Pengaturan Direktori",
"User Display Name Field" : "Bidang Tampilan Nama Pengguna",
+ "The LDAP attribute to use to generate the user's display name." : "Atribut LDAP digunakan untuk menghasilkan nama tampilan pengguna.",
"Base User Tree" : "Pohon Pengguna Dasar",
"One User Base DN per line" : "Satu Pengguna Base DN per baris",
"User Search Attributes" : "Atribut Pencarian Pengguna",
"Optional; one attribute per line" : "Pilihan; satu atribut per baris",
"Group Display Name Field" : "Bidang Tampilan Nama Grup",
+ "The LDAP attribute to use to generate the groups's display name." : "Atribut LDAP digunakan untuk menghasilkan nama tampilan grup.",
"Base Group Tree" : "Pohon Grup Dasar",
"One Group Base DN per line" : "Satu Grup Base DN per baris",
"Group Search Attributes" : "Atribut Pencarian Grup",
@@ -100,6 +103,11 @@
"in bytes" : "dalam bytes",
"Email Field" : "Bidang Email",
"User Home Folder Naming Rule" : "Aturan Penamaan Folder Home Pengguna",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD."
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD.",
+ "Internal Username" : "Nama Pengguna Internal",
+ "Internal Username Attribute:" : "Atribut Nama Pengguna Internal:",
+ "Override UUID detection" : "Timpa deteksi UUID",
+ "UUID Attribute for Users:" : "Atribut UUID untuk Pengguna:",
+ "UUID Attribute for Groups:" : "Atribut UUID untuk Grup:"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js
index 92bab544984..30b9a39f0ea 100644
--- a/apps/user_ldap/l10n/it.js
+++ b/apps/user_ldap/l10n/it.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Conferma l'eliminazione",
"_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"],
"_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di ldap.",
"Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata",
"Invalid Host" : "Host non valido",
"Server" : "Server",
@@ -63,7 +64,7 @@ OC.L10N.register(
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "È possibile omettere il protocollo, ad eccezione se è necessario SSL. Quindi inizia con ldaps://",
"Port" : "Porta",
"User DN" : "DN utente",
- "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agent,dc=example,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agente,dc=esempio,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"Password" : "Password",
"For anonymous access, leave DN and Password empty." : "Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"One Base DN per line" : "Un DN base per riga",
diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json
index 31a694a4b1c..58b405730a4 100644
--- a/apps/user_ldap/l10n/it.json
+++ b/apps/user_ldap/l10n/it.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Conferma l'eliminazione",
"_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"],
"_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di ldap.",
"Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata",
"Invalid Host" : "Host non valido",
"Server" : "Server",
@@ -61,7 +62,7 @@
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "È possibile omettere il protocollo, ad eccezione se è necessario SSL. Quindi inizia con ldaps://",
"Port" : "Porta",
"User DN" : "DN utente",
- "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agent,dc=example,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agente,dc=esempio,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"Password" : "Password",
"For anonymous access, leave DN and Password empty." : "Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"One Base DN per line" : "Un DN base per riga",
diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js
index 6494fbb5142..b139c5b3fb4 100644
--- a/apps/user_ldap/l10n/ja.js
+++ b/apps/user_ldap/l10n/ja.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "削除の確認",
"_%s group found_::_%s groups found_" : ["%s グループが見つかりました"],
"_%s user found_::_%s users found_" : ["%s ユーザーが見つかりました"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ユーザー表示名の属性を検出できませんでした。詳細設定で対応する属性を指定してください。",
"Could not find the desired feature" : "望ましい機能は見つかりませんでした",
"Invalid Host" : "無効なホスト",
"Server" : "サーバー",
diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json
index 2e714112f19..25ad7f73bd8 100644
--- a/apps/user_ldap/l10n/ja.json
+++ b/apps/user_ldap/l10n/ja.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "削除の確認",
"_%s group found_::_%s groups found_" : ["%s グループが見つかりました"],
"_%s user found_::_%s users found_" : ["%s ユーザーが見つかりました"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ユーザー表示名の属性を検出できませんでした。詳細設定で対応する属性を指定してください。",
"Could not find the desired feature" : "望ましい機能は見つかりませんでした",
"Invalid Host" : "無効なホスト",
"Server" : "サーバー",
diff --git a/apps/user_ldap/l10n/kn.js b/apps/user_ldap/l10n/kn.js
index 5494dcae62e..28d1debe940 100644
--- a/apps/user_ldap/l10n/kn.js
+++ b/apps/user_ldap/l10n/kn.js
@@ -1,7 +1,14 @@
OC.L10N.register(
"user_ldap",
{
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
"_%s group found_::_%s groups found_" : [""],
- "_%s user found_::_%s users found_" : [""]
+ "_%s user found_::_%s users found_" : [""],
+ "Save" : "ಉಳಿಸಿ",
+ "Help" : "ಸಹಾಯ",
+ "Host" : "ಅತಿಥೆಯ-ಗಣಕ",
+ "Port" : "ರೇವು",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Continue" : "ಮುಂದುವರಿಸಿ"
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/kn.json b/apps/user_ldap/l10n/kn.json
index 75f0f056cc4..72700ee607f 100644
--- a/apps/user_ldap/l10n/kn.json
+++ b/apps/user_ldap/l10n/kn.json
@@ -1,5 +1,12 @@
{ "translations": {
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
"_%s group found_::_%s groups found_" : [""],
- "_%s user found_::_%s users found_" : [""]
+ "_%s user found_::_%s users found_" : [""],
+ "Save" : "ಉಳಿಸಿ",
+ "Help" : "ಸಹಾಯ",
+ "Host" : "ಅತಿಥೆಯ-ಗಣಕ",
+ "Port" : "ರೇವು",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Continue" : "ಮುಂದುವರಿಸಿ"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/lo.js b/apps/user_ldap/l10n/lo.js
new file mode 100644
index 00000000000..5494dcae62e
--- /dev/null
+++ b/apps/user_ldap/l10n/lo.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "user_ldap",
+ {
+ "_%s group found_::_%s groups found_" : [""],
+ "_%s user found_::_%s users found_" : [""]
+},
+"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/lo.json b/apps/user_ldap/l10n/lo.json
new file mode 100644
index 00000000000..75f0f056cc4
--- /dev/null
+++ b/apps/user_ldap/l10n/lo.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "_%s group found_::_%s groups found_" : [""],
+ "_%s user found_::_%s users found_" : [""]
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/mn.js b/apps/user_ldap/l10n/mn.js
index 37042a4f412..e0a08885f93 100644
--- a/apps/user_ldap/l10n/mn.js
+++ b/apps/user_ldap/l10n/mn.js
@@ -2,6 +2,8 @@ OC.L10N.register(
"user_ldap",
{
"_%s group found_::_%s groups found_" : ["",""],
- "_%s user found_::_%s users found_" : ["",""]
+ "_%s user found_::_%s users found_" : ["",""],
+ "Save" : "Хадгалах",
+ "Password" : "Нууц үг"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/mn.json b/apps/user_ldap/l10n/mn.json
index 521de7ba1a8..530b3bd9f58 100644
--- a/apps/user_ldap/l10n/mn.json
+++ b/apps/user_ldap/l10n/mn.json
@@ -1,5 +1,7 @@
{ "translations": {
"_%s group found_::_%s groups found_" : ["",""],
- "_%s user found_::_%s users found_" : ["",""]
+ "_%s user found_::_%s users found_" : ["",""],
+ "Save" : "Хадгалах",
+ "Password" : "Нууц үг"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/nb_NO.js b/apps/user_ldap/l10n/nb_NO.js
index 9074ee926d6..3d3839398a9 100644
--- a/apps/user_ldap/l10n/nb_NO.js
+++ b/apps/user_ldap/l10n/nb_NO.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Bekreft sletting",
"_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"],
"_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.",
"Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten",
"Invalid Host" : "Ugyldig tjener",
"Server" : "Server",
@@ -48,6 +49,7 @@ OC.L10N.register(
"Edit raw filter instead" : "Rediger ubearbeidet filter i stedet",
"Raw LDAP filter" : "Ubearbeidet LDAP-filter",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.",
+ "Test Filter" : "Test filter",
"groups found" : "grupper funnet",
"Users login with this attribute:" : "Brukere logger inn med denne attributten:",
"LDAP Username:" : "LDAP-brukernavn:",
@@ -67,11 +69,15 @@ OC.L10N.register(
"For anonymous access, leave DN and Password empty." : "For anonym tilgang, la DN- og passord-feltet stå tomt.",
"One Base DN per line" : "En hoved-DN pr. linje",
"You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere hoved-DN for brukere og grupper under Avansert fanen",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)",
"Limit %s access to users meeting these criteria:" : "Begrens %s-tilgang til brukere som tilfredsstiller disse kriteriene:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.",
"users found" : "brukere funnet",
+ "Saving" : "Lagrer",
"Back" : "Tilbake",
"Continue" : "Fortsett",
+ "LDAP" : "LDAP",
"Expert" : "Ekspert",
"Advanced" : "Avansert",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.",
diff --git a/apps/user_ldap/l10n/nb_NO.json b/apps/user_ldap/l10n/nb_NO.json
index d89d8377dab..cb3c28f8531 100644
--- a/apps/user_ldap/l10n/nb_NO.json
+++ b/apps/user_ldap/l10n/nb_NO.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Bekreft sletting",
"_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"],
"_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.",
"Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten",
"Invalid Host" : "Ugyldig tjener",
"Server" : "Server",
@@ -46,6 +47,7 @@
"Edit raw filter instead" : "Rediger ubearbeidet filter i stedet",
"Raw LDAP filter" : "Ubearbeidet LDAP-filter",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.",
+ "Test Filter" : "Test filter",
"groups found" : "grupper funnet",
"Users login with this attribute:" : "Brukere logger inn med denne attributten:",
"LDAP Username:" : "LDAP-brukernavn:",
@@ -65,11 +67,15 @@
"For anonymous access, leave DN and Password empty." : "For anonym tilgang, la DN- og passord-feltet stå tomt.",
"One Base DN per line" : "En hoved-DN pr. linje",
"You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere hoved-DN for brukere og grupper under Avansert fanen",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)",
"Limit %s access to users meeting these criteria:" : "Begrens %s-tilgang til brukere som tilfredsstiller disse kriteriene:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.",
"users found" : "brukere funnet",
+ "Saving" : "Lagrer",
"Back" : "Tilbake",
"Continue" : "Fortsett",
+ "LDAP" : "LDAP",
"Expert" : "Ekspert",
"Advanced" : "Avansert",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.",
diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js
index 77646a90a88..ae280e1a05e 100644
--- a/apps/user_ldap/l10n/nl.js
+++ b/apps/user_ldap/l10n/nl.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Bevestig verwijderen",
"_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"],
"_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.",
"Could not find the desired feature" : "Kon de gewenste functie niet vinden",
"Invalid Host" : "Ongeldige server",
"Server" : "Server",
@@ -95,7 +96,7 @@ OC.L10N.register(
"Cache Time-To-Live" : "Cache time-to-live",
"in seconds. A change empties the cache." : "in seconden. Een verandering maakt de cache leeg.",
"Directory Settings" : "Mapinstellingen",
- "User Display Name Field" : "Gebruikers Schermnaam Veld",
+ "User Display Name Field" : "Veld gebruikers weergavenaam",
"The LDAP attribute to use to generate the user's display name." : "Het te gebruiken LDAP attribuut voor het genereren van de weergavenaam voor de gebruiker.",
"Base User Tree" : "Basis Gebruikers Structuur",
"One User Base DN per line" : "Een User Base DN per regel",
@@ -103,7 +104,7 @@ OC.L10N.register(
"Optional; one attribute per line" : "Optioneel; één attribuut per regel",
"Group Display Name Field" : "Groep Schermnaam Veld",
"The LDAP attribute to use to generate the groups's display name." : "Het te gebruiken LDAP attribuut voor het genereren van de weergavenaam voor de groepen.",
- "Base Group Tree" : "Basis Groupen Structuur",
+ "Base Group Tree" : "Basis groepsstructuur",
"One Group Base DN per line" : "Een Group Base DN per regel",
"Group Search Attributes" : "Attributen voor groepszoekopdrachten",
"Group-Member association" : "Groepslid associatie",
diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json
index 6f0a9ec1c01..ed0ce08501a 100644
--- a/apps/user_ldap/l10n/nl.json
+++ b/apps/user_ldap/l10n/nl.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Bevestig verwijderen",
"_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"],
"_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.",
"Could not find the desired feature" : "Kon de gewenste functie niet vinden",
"Invalid Host" : "Ongeldige server",
"Server" : "Server",
@@ -93,7 +94,7 @@
"Cache Time-To-Live" : "Cache time-to-live",
"in seconds. A change empties the cache." : "in seconden. Een verandering maakt de cache leeg.",
"Directory Settings" : "Mapinstellingen",
- "User Display Name Field" : "Gebruikers Schermnaam Veld",
+ "User Display Name Field" : "Veld gebruikers weergavenaam",
"The LDAP attribute to use to generate the user's display name." : "Het te gebruiken LDAP attribuut voor het genereren van de weergavenaam voor de gebruiker.",
"Base User Tree" : "Basis Gebruikers Structuur",
"One User Base DN per line" : "Een User Base DN per regel",
@@ -101,7 +102,7 @@
"Optional; one attribute per line" : "Optioneel; één attribuut per regel",
"Group Display Name Field" : "Groep Schermnaam Veld",
"The LDAP attribute to use to generate the groups's display name." : "Het te gebruiken LDAP attribuut voor het genereren van de weergavenaam voor de groepen.",
- "Base Group Tree" : "Basis Groupen Structuur",
+ "Base Group Tree" : "Basis groepsstructuur",
"One Group Base DN per line" : "Een Group Base DN per regel",
"Group Search Attributes" : "Attributen voor groepszoekopdrachten",
"Group-Member association" : "Groepslid associatie",
diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js
index 345d4986e4b..a00fa0f2306 100644
--- a/apps/user_ldap/l10n/pl.js
+++ b/apps/user_ldap/l10n/pl.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Potwierdź usunięcie",
"_%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"],
+ "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",
"Server" : "Serwer",
@@ -67,11 +68,15 @@ 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",
+ "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)",
"Limit %s access to users meeting these criteria:" : "Limit %s dostępu do podłączania użytkowników z tymi ustawieniami:",
"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.",
"users found" : "użytkownicy znalezieni",
+ "Saving" : "Zapisuję",
"Back" : "Wróć",
"Continue" : "Kontynuuj ",
+ "LDAP" : "LDAP",
"Expert" : "Ekspert",
"Advanced" : "Zaawansowane",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Ostrzeżenie:</b> Aplikacje user_ldap i user_webdavauth nie są kompatybilne. Mogą powodować nieoczekiwane zachowanie. Poproś administratora o wyłączenie jednej z nich.",
diff --git a/apps/user_ldap/l10n/pl.json b/apps/user_ldap/l10n/pl.json
index 49adb2abb51..178d47afbfe 100644
--- a/apps/user_ldap/l10n/pl.json
+++ b/apps/user_ldap/l10n/pl.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Potwierdź usunięcie",
"_%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"],
+ "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",
"Server" : "Serwer",
@@ -65,11 +66,15 @@
"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",
+ "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)",
"Limit %s access to users meeting these criteria:" : "Limit %s dostępu do podłączania użytkowników z tymi ustawieniami:",
"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.",
"users found" : "użytkownicy znalezieni",
+ "Saving" : "Zapisuję",
"Back" : "Wróć",
"Continue" : "Kontynuuj ",
+ "LDAP" : "LDAP",
"Expert" : "Ekspert",
"Advanced" : "Zaawansowane",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Ostrzeżenie:</b> Aplikacje user_ldap i user_webdavauth nie są kompatybilne. Mogą powodować nieoczekiwane zachowanie. Poproś administratora o wyłączenie jednej z nich.",
diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js
index 32b7697df3e..a4a481524ba 100644
--- a/apps/user_ldap/l10n/pt_BR.js
+++ b/apps/user_ldap/l10n/pt_BR.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmar Exclusão",
"_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"],
"_%s user found_::_%s users found_" : ["usuário %s encontrado","usuários %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detectar o nome de exibição do atributo do usuário. Por favor, indique-o você mesmo em configurações avançadas do LDAP.",
"Could not find the desired feature" : "Não foi possível encontrar a função desejada",
"Invalid Host" : "Host Inválido",
"Server" : "Servidor",
diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json
index ea59ed7b4d8..4dd9088b727 100644
--- a/apps/user_ldap/l10n/pt_BR.json
+++ b/apps/user_ldap/l10n/pt_BR.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirmar Exclusão",
"_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"],
"_%s user found_::_%s users found_" : ["usuário %s encontrado","usuários %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detectar o nome de exibição do atributo do usuário. Por favor, indique-o você mesmo em configurações avançadas do LDAP.",
"Could not find the desired feature" : "Não foi possível encontrar a função desejada",
"Invalid Host" : "Host Inválido",
"Server" : "Servidor",
diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js
index e6a7b32d003..016ef747a2c 100644
--- a/apps/user_ldap/l10n/ru.js
+++ b/apps/user_ldap/l10n/ru.js
@@ -4,8 +4,8 @@ OC.L10N.register(
"Failed to clear the mappings." : "Не удалось очистить соответствия.",
"Failed to delete the server configuration" : "Не удалось удалить конфигурацию сервера",
"The configuration is valid and the connection could be established!" : "Конфигурация правильная и подключение может быть установлено!",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация верна, но операция подключения завершилась неудачно. Пожалуйста, проверьте настройки сервера и учетные данные.",
- "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация недействительна. Пожалуйста, просмотрите логи для уточнения деталей.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация верна, но операция подключения завершилась неудачно. Проверьте настройки сервера и учетные данные.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация недействительна. Проверьте журналы для уточнения деталей.",
"No action specified" : "Действие не указано",
"No configuration specified" : "Конфигурация не создана",
"No data specified" : "Нет данных",
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Подтверждение удаления",
"_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено"],
"_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Не удалось автоматически определить атрибут содержащий отображаемое имя пользователя. Зайдите в расширенные настройки ldap и укажите его вручную.",
"Could not find the desired feature" : "Не могу найти требуемой функциональности",
"Invalid Host" : "Неверный сервер",
"Server" : "Сервер",
@@ -116,10 +117,10 @@ OC.L10N.register(
"Quota Default" : "Квота по умолчанию",
"in bytes" : "в байтах",
"Email Field" : "Поле адреса электронной почты",
- "User Home Folder Naming Rule" : "Правило именования домашней папки пользователя",
+ "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.",
"Internal Username" : "Внутреннее имя пользователя",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для папки пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для каталога пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.",
"Internal Username Attribute:" : "Атрибут для внутреннего имени:",
"Override UUID detection" : "Переопределить нахождение UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно идентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.",
diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json
index fe160aa035d..e20baa90401 100644
--- a/apps/user_ldap/l10n/ru.json
+++ b/apps/user_ldap/l10n/ru.json
@@ -2,8 +2,8 @@
"Failed to clear the mappings." : "Не удалось очистить соответствия.",
"Failed to delete the server configuration" : "Не удалось удалить конфигурацию сервера",
"The configuration is valid and the connection could be established!" : "Конфигурация правильная и подключение может быть установлено!",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация верна, но операция подключения завершилась неудачно. Пожалуйста, проверьте настройки сервера и учетные данные.",
- "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация недействительна. Пожалуйста, просмотрите логи для уточнения деталей.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация верна, но операция подключения завершилась неудачно. Проверьте настройки сервера и учетные данные.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация недействительна. Проверьте журналы для уточнения деталей.",
"No action specified" : "Действие не указано",
"No configuration specified" : "Конфигурация не создана",
"No data specified" : "Нет данных",
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Подтверждение удаления",
"_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено"],
"_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Не удалось автоматически определить атрибут содержащий отображаемое имя пользователя. Зайдите в расширенные настройки ldap и укажите его вручную.",
"Could not find the desired feature" : "Не могу найти требуемой функциональности",
"Invalid Host" : "Неверный сервер",
"Server" : "Сервер",
@@ -114,10 +115,10 @@
"Quota Default" : "Квота по умолчанию",
"in bytes" : "в байтах",
"Email Field" : "Поле адреса электронной почты",
- "User Home Folder Naming Rule" : "Правило именования домашней папки пользователя",
+ "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.",
"Internal Username" : "Внутреннее имя пользователя",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для папки пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для каталога пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.",
"Internal Username Attribute:" : "Атрибут для внутреннего имени:",
"Override UUID detection" : "Переопределить нахождение UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно идентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.",
diff --git a/apps/user_ldap/l10n/sk.php b/apps/user_ldap/l10n/sk.php
deleted file mode 100644
index e258ffac223..00000000000
--- a/apps/user_ldap/l10n/sk.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%s group found_::_%s groups found_" => array("","",""),
-"_%s user found_::_%s users found_" => array("","",""),
-"Save" => "Uložiť",
-"Advanced" => "Pokročilé"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js
index f7fd2772fe8..04ea48e11ec 100644
--- a/apps/user_ldap/l10n/sl.js
+++ b/apps/user_ldap/l10n/sl.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Potrdi brisanje",
"_%s group found_::_%s groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"],
"_%s user found_::_%s users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Ni mogoče prebrati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.",
"Could not find the desired feature" : "Želene zmožnosti ni mogoče najti",
"Invalid Host" : "Neveljaven gostitelj",
"Server" : "Strežnik",
@@ -76,6 +77,7 @@ OC.L10N.register(
"Saving" : "Poteka shranjevanje ...",
"Back" : "Nazaj",
"Continue" : "Nadaljuj",
+ "LDAP" : "LDAP",
"Expert" : "Napredno",
"Advanced" : "Napredne možnosti",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Opozorilo:</b> določili user_ldap in user_webdavauth sta neskladni, kar lahko vpliva na delovanje sistema. O napaki pošljite poročilo skrbniku sistema in opozorite, da je treba eno izmed možnosti onemogočiti.",
diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json
index aa1c9444651..ef7bdd1ce32 100644
--- a/apps/user_ldap/l10n/sl.json
+++ b/apps/user_ldap/l10n/sl.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Potrdi brisanje",
"_%s group found_::_%s groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"],
"_%s user found_::_%s users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Ni mogoče prebrati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.",
"Could not find the desired feature" : "Želene zmožnosti ni mogoče najti",
"Invalid Host" : "Neveljaven gostitelj",
"Server" : "Strežnik",
@@ -74,6 +75,7 @@
"Saving" : "Poteka shranjevanje ...",
"Back" : "Nazaj",
"Continue" : "Nadaljuj",
+ "LDAP" : "LDAP",
"Expert" : "Napredno",
"Advanced" : "Napredne možnosti",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Opozorilo:</b> določili user_ldap in user_webdavauth sta neskladni, kar lahko vpliva na delovanje sistema. O napaki pošljite poročilo skrbniku sistema in opozorite, da je treba eno izmed možnosti onemogočiti.",
diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js
index 056458c24b6..b436bef7bf2 100644
--- a/apps/user_ldap/l10n/sq.js
+++ b/apps/user_ldap/l10n/sq.js
@@ -32,6 +32,7 @@ OC.L10N.register(
"For anonymous access, leave DN and Password empty." : "Për tu lidhur në mënyre anonime, lini bosh hapsirat e DN dhe fjalëkalim",
"One Base DN per line" : "Një baze DN për rrjesht",
"You can specify Base DN for users and groups in the Advanced tab" : "Ju mund të specifikoni Bazen DN për përdorues dhe grupe në butonin 'Të Përparuara'",
+ "Continue" : "Vazhdo",
"Advanced" : "E përparuar",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Njoftim:</b> moduli PHP LDAP nuk është instaluar, motori nuk do të funksionojë.Kontaktoni me administratorin e sistemit.",
"Connection Settings" : "Të dhënat e lidhjes",
diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json
index a3e87869355..5b81af7100d 100644
--- a/apps/user_ldap/l10n/sq.json
+++ b/apps/user_ldap/l10n/sq.json
@@ -30,6 +30,7 @@
"For anonymous access, leave DN and Password empty." : "Për tu lidhur në mënyre anonime, lini bosh hapsirat e DN dhe fjalëkalim",
"One Base DN per line" : "Një baze DN për rrjesht",
"You can specify Base DN for users and groups in the Advanced tab" : "Ju mund të specifikoni Bazen DN për përdorues dhe grupe në butonin 'Të Përparuara'",
+ "Continue" : "Vazhdo",
"Advanced" : "E përparuar",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Njoftim:</b> moduli PHP LDAP nuk është instaluar, motori nuk do të funksionojë.Kontaktoni me administratorin e sistemit.",
"Connection Settings" : "Të dhënat e lidhjes",
diff --git a/apps/user_ldap/l10n/sr@latin.js b/apps/user_ldap/l10n/sr@latin.js
index aae5907b37e..38f5ade9f84 100644
--- a/apps/user_ldap/l10n/sr@latin.js
+++ b/apps/user_ldap/l10n/sr@latin.js
@@ -1,11 +1,14 @@
OC.L10N.register(
"user_ldap",
{
+ "Deletion failed" : "Brisanje neuspelo",
"Error" : "Greška",
"_%s group found_::_%s groups found_" : ["","",""],
"_%s user found_::_%s users found_" : ["","",""],
"Save" : "Snimi",
"Help" : "Pomoć",
+ "Host" : "Računar",
+ "Port" : "Port",
"Password" : "Lozinka",
"Continue" : "Nastavi",
"Advanced" : "Napredno"
diff --git a/apps/user_ldap/l10n/sr@latin.json b/apps/user_ldap/l10n/sr@latin.json
index 421de1a4e2e..b8371649c2b 100644
--- a/apps/user_ldap/l10n/sr@latin.json
+++ b/apps/user_ldap/l10n/sr@latin.json
@@ -1,9 +1,12 @@
{ "translations": {
+ "Deletion failed" : "Brisanje neuspelo",
"Error" : "Greška",
"_%s group found_::_%s groups found_" : ["","",""],
"_%s user found_::_%s users found_" : ["","",""],
"Save" : "Snimi",
"Help" : "Pomoć",
+ "Host" : "Računar",
+ "Port" : "Port",
"Password" : "Lozinka",
"Continue" : "Nastavi",
"Advanced" : "Napredno"
diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js
index 7d4ebe4962a..78fe328944a 100644
--- a/apps/user_ldap/l10n/sv.js
+++ b/apps/user_ldap/l10n/sv.js
@@ -25,7 +25,7 @@ OC.L10N.register(
"Configuration incorrect" : "Felaktig konfiguration",
"Configuration incomplete" : "Konfigurationen är ej komplett",
"Select groups" : "Välj grupper",
- "Select object classes" : "Välj Objekt-klasser",
+ "Select object classes" : "Välj objekt-klasser",
"Select attributes" : "Välj attribut",
"Connection test succeeded" : "Anslutningstestet lyckades",
"Connection test failed" : "Anslutningstestet misslyckades",
@@ -33,11 +33,12 @@ OC.L10N.register(
"Confirm Deletion" : "Bekräfta radering",
"_%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.",
"Could not find the desired feature" : "Det gick inte hitta den önskade funktionen",
- "Invalid Host" : "Felaktig Host",
+ "Invalid Host" : "Felaktig värd",
"Server" : "Server",
- "User Filter" : "Användar filter",
- "Login Filter" : "Login Filtrer",
+ "User Filter" : "Användarfilter",
+ "Login Filter" : "Inloggningsfilter",
"Group Filter" : "Gruppfilter",
"Save" : "Spara",
"Test Configuration" : "Testa konfigurationen",
@@ -48,33 +49,38 @@ OC.L10N.register(
"Edit raw filter instead" : "Redigera rått filter istället",
"Raw LDAP filter" : "Rått LDAP-filter",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtret specifierar vilka LDAD-grupper som ska ha åtkomst till %s instans",
+ "Test Filter" : "Testfilter",
"groups found" : "grupper hittade",
"Users login with this attribute:" : "Användare loggar in med detta attribut:",
"LDAP Username:" : "LDAP användarnamn:",
"LDAP Email Address:" : "LDAP e-postadress:",
"Other Attributes:" : "Övriga attribut:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definierar filter som tillämpas vid inloggning. %%uid ersätter användarnamn vid inloggningen. Exempel: \"uid=%%uid\"",
- "1. Server" : "1.Server",
+ "1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
"Add Server Configuration" : "Lägg till serverinställning",
- "Delete Configuration" : "Radera Konfiguration",
+ "Delete Configuration" : "Radera konfiguration",
"Host" : "Server",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du behöver inte ange protokoll förutom om du använder SSL. Starta då med ldaps://",
"Port" : "Port",
- "User DN" : "Användare DN",
+ "User DN" : "Användar-DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN för användaren som skall användas, t.ex. uid=agent, dc=example, dc=com. För anonym åtkomst, lämna DN och lösenord tomt.",
"Password" : "Lösenord",
"For anonymous access, leave DN and Password empty." : "För anonym åtkomst, lämna DN och lösenord tomt.",
- "One Base DN per line" : "Ett Start DN per rad",
- "You can specify Base DN for users and groups in the Advanced tab" : "Du kan ange start DN för användare och grupper under fliken Avancerat",
+ "One Base DN per line" : "Ett start-DN per rad",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Du kan ange start-DN för användare och grupper under fliken Avancerat",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undviker automatiska LDAP-förfrågningar. Bättre för större installationer, men kräver en del LDAP-kunskap.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ange LDAP-filter manuellt (rekommenderat för stora kataloger)",
"Limit %s access to users meeting these criteria:" : "Begränsa %s tillgång till användare som uppfyller dessa kriterier:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtret specifierar vilka LDAP-användare som skall ha åtkomst till %s instans",
"users found" : "användare funna",
+ "Saving" : "Sparar",
"Back" : "Tillbaka",
"Continue" : "Fortsätt",
+ "LDAP" : "LDAP",
"Expert" : "Expert",
"Advanced" : "Avancerad",
- "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. Oväntade problem kan uppstå. Be din systemadministratör att inaktivera en av dom.",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. Oväntade problem kan uppstå. Be din systemadministratör att inaktivera en av dem.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varning:</b> PHP LDAP - modulen är inte installerad, serversidan kommer inte att fungera. Kontakta din systemadministratör för installation.",
"Connection Settings" : "Uppkopplingsinställningar",
"Configuration Active" : "Konfiguration aktiv",
@@ -93,17 +99,17 @@ OC.L10N.register(
"User Display Name Field" : "Attribut för användarnamn",
"The LDAP attribute to use to generate the user's display name." : "LDAP-attributet som ska användas för att generera användarens visningsnamn.",
"Base User Tree" : "Bas för användare i katalogtjänst",
- "One User Base DN per line" : "En Användare start DN per rad",
+ "One User Base DN per line" : "En användarstart-DN per rad",
"User Search Attributes" : "Användarsökningsattribut",
"Optional; one attribute per line" : "Valfritt; ett attribut per rad",
"Group Display Name Field" : "Attribut för gruppnamn",
"The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.",
"Base Group Tree" : "Bas för grupper i katalogtjänst",
- "One Group Base DN per line" : "En Grupp start DN per rad",
+ "One Group Base DN per line" : "En gruppstart-DN per rad",
"Group Search Attributes" : "Gruppsökningsattribut",
"Group-Member association" : "Attribut för gruppmedlemmar",
"Nested Groups" : "Undergrupper",
- "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DNs.)",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DN.)",
"Paging chunksize" : "Paging klusterstorlek",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Klusterstorlek som används för paged LDAP sökningar som kan komma att returnera skrymmande resultat som uppräknande av användare eller grupper. (Inställning av denna till 0 inaktiverar paged LDAP sökningar i de situationerna)",
"Special Attributes" : "Specialattribut",
@@ -112,17 +118,17 @@ OC.L10N.register(
"in bytes" : "i bytes",
"Email Field" : "E-postfält",
"User Home Folder Naming Rule" : "Namnregel för hemkatalog",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP/AD-attribut.",
- "Internal Username" : "Internt Användarnamn",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP-/AD-attribut.",
+ "Internal Username" : "Internt användarnamn",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som standard skapas det interna användarnamnet från UUID-attributet. Det säkerställer att användarnamnet är unikt och tecken inte behöver konverteras. Det interna användarnamnet har restriktionerna att endast följande tecken är tillåtna: [ a-zA-Z0-9_.@- ]. Andra tecken blir ersatta av deras motsvarighet i ASCII eller utelämnas helt. En siffra kommer att läggas till eller ökas på vid en kollision. Det interna användarnamnet används för att identifiera användaren internt. Det är även förvalt som användarens användarnamn i ownCloud. Det är även en port för fjärråtkomst, t.ex. för alla *DAV-tjänster. Med denna inställning kan det förvalda beteendet åsidosättas. För att uppnå ett liknande beteende som innan ownCloud 5, ange attributet för användarens visningsnamn i detta fält. Lämna det tomt för förvalt beteende. Ändringarna kommer endast att påverka nyligen mappade (tillagda) LDAP-användare",
- "Internal Username Attribute:" : "Internt Användarnamn Attribut:",
- "Override UUID detection" : "Åsidosätt UUID detektion",
+ "Internal Username Attribute:" : "Internt användarnamnsattribut:",
+ "Override UUID detection" : "Åsidosätt UUID-detektion",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som standard upptäcker ownCloud automatiskt UUID-attributet. Det UUID-attributet används för att utan tvivel identifiera LDAP-användare och grupper. Dessutom kommer interna användarnamn skapas baserat på detta UUID, om inte annat anges ovan. Du kan åsidosätta inställningen och passera ett attribut som du själv väljer. Du måste se till att attributet som du väljer kan hämtas för både användare och grupper och att det är unikt. Lämna det tomt för standard beteende. Förändringar kommer endast att påverka nyligen mappade (tillagda) LDAP-användare och grupper.",
- "UUID Attribute for Users:" : "UUID Attribut för Användare:",
- "UUID Attribute for Groups:" : "UUID Attribut för Grupper:",
- "Username-LDAP User Mapping" : "Användarnamn-LDAP User Mapping",
- "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud använder sig av användarnamn för att lagra och tilldela (meta) data. För att exakt kunna identifiera och känna igen användare, kommer varje LDAP-användare ha ett internt användarnamn. Detta kräver en mappning från ownCloud-användarnamn till LDAP-användare. Det skapade användarnamnet mappas till UUID för LDAP-användaren. Dessutom cachas DN samt minska LDAP-interaktionen, men den används inte för identifiering. Om DN förändras, kommer förändringarna hittas av ownCloud. Det interna ownCloud-namnet används överallt i ownCloud. Om du rensar/raderar mappningarna kommer att lämna referenser överallt i systemet. Men den är inte konfigurationskänslig, den påverkar alla LDAP-konfigurationer! Rensa/radera aldrig mappningarna i en produktionsmiljö. Utan gör detta endast på i testmiljö!",
- "Clear Username-LDAP User Mapping" : "Rensa Användarnamn-LDAP User Mapping",
- "Clear Groupname-LDAP Group Mapping" : "Rensa Gruppnamn-LDAP Group Mapping"
+ "UUID Attribute for Users:" : "UUID-attribut för användare:",
+ "UUID Attribute for Groups:" : "UUID-attribut för grupper:",
+ "Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud använder sig av användarnamn för att lagra och tilldela (meta) data. För att exakt kunna identifiera och känna igen användare, kommer varje LDAP-användare ha ett internt användarnamn. Detta kräver en mappning från ownCloud-användarnamn till LDAP-användare. Det skapade användarnamnet mappas till UUID för LDAP-användaren. Dessutom cachas DN samt minskar LDAP-interaktionen, men den används inte för identifiering. Om DN förändras, kommer förändringarna hittas av ownCloud. Det interna ownCloud-namnet används överallt i ownCloud. Om du rensar/raderar mappningarna kommer att lämna referenser överallt i systemet. Men den är inte konfigurationskänslig, den påverkar alla LDAP-konfigurationer! Rensa/radera aldrig mappningarna i en produktionsmiljö, utan gör detta endast i testmiljö!",
+ "Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning",
+ "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json
index 5f2949c2d00..41d6c1d7492 100644
--- a/apps/user_ldap/l10n/sv.json
+++ b/apps/user_ldap/l10n/sv.json
@@ -23,7 +23,7 @@
"Configuration incorrect" : "Felaktig konfiguration",
"Configuration incomplete" : "Konfigurationen är ej komplett",
"Select groups" : "Välj grupper",
- "Select object classes" : "Välj Objekt-klasser",
+ "Select object classes" : "Välj objekt-klasser",
"Select attributes" : "Välj attribut",
"Connection test succeeded" : "Anslutningstestet lyckades",
"Connection test failed" : "Anslutningstestet misslyckades",
@@ -31,11 +31,12 @@
"Confirm Deletion" : "Bekräfta radering",
"_%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.",
"Could not find the desired feature" : "Det gick inte hitta den önskade funktionen",
- "Invalid Host" : "Felaktig Host",
+ "Invalid Host" : "Felaktig värd",
"Server" : "Server",
- "User Filter" : "Användar filter",
- "Login Filter" : "Login Filtrer",
+ "User Filter" : "Användarfilter",
+ "Login Filter" : "Inloggningsfilter",
"Group Filter" : "Gruppfilter",
"Save" : "Spara",
"Test Configuration" : "Testa konfigurationen",
@@ -46,33 +47,38 @@
"Edit raw filter instead" : "Redigera rått filter istället",
"Raw LDAP filter" : "Rått LDAP-filter",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtret specifierar vilka LDAD-grupper som ska ha åtkomst till %s instans",
+ "Test Filter" : "Testfilter",
"groups found" : "grupper hittade",
"Users login with this attribute:" : "Användare loggar in med detta attribut:",
"LDAP Username:" : "LDAP användarnamn:",
"LDAP Email Address:" : "LDAP e-postadress:",
"Other Attributes:" : "Övriga attribut:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definierar filter som tillämpas vid inloggning. %%uid ersätter användarnamn vid inloggningen. Exempel: \"uid=%%uid\"",
- "1. Server" : "1.Server",
+ "1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
"Add Server Configuration" : "Lägg till serverinställning",
- "Delete Configuration" : "Radera Konfiguration",
+ "Delete Configuration" : "Radera konfiguration",
"Host" : "Server",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du behöver inte ange protokoll förutom om du använder SSL. Starta då med ldaps://",
"Port" : "Port",
- "User DN" : "Användare DN",
+ "User DN" : "Användar-DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN för användaren som skall användas, t.ex. uid=agent, dc=example, dc=com. För anonym åtkomst, lämna DN och lösenord tomt.",
"Password" : "Lösenord",
"For anonymous access, leave DN and Password empty." : "För anonym åtkomst, lämna DN och lösenord tomt.",
- "One Base DN per line" : "Ett Start DN per rad",
- "You can specify Base DN for users and groups in the Advanced tab" : "Du kan ange start DN för användare och grupper under fliken Avancerat",
+ "One Base DN per line" : "Ett start-DN per rad",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Du kan ange start-DN för användare och grupper under fliken Avancerat",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undviker automatiska LDAP-förfrågningar. Bättre för större installationer, men kräver en del LDAP-kunskap.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ange LDAP-filter manuellt (rekommenderat för stora kataloger)",
"Limit %s access to users meeting these criteria:" : "Begränsa %s tillgång till användare som uppfyller dessa kriterier:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtret specifierar vilka LDAP-användare som skall ha åtkomst till %s instans",
"users found" : "användare funna",
+ "Saving" : "Sparar",
"Back" : "Tillbaka",
"Continue" : "Fortsätt",
+ "LDAP" : "LDAP",
"Expert" : "Expert",
"Advanced" : "Avancerad",
- "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. Oväntade problem kan uppstå. Be din systemadministratör att inaktivera en av dom.",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. Oväntade problem kan uppstå. Be din systemadministratör att inaktivera en av dem.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varning:</b> PHP LDAP - modulen är inte installerad, serversidan kommer inte att fungera. Kontakta din systemadministratör för installation.",
"Connection Settings" : "Uppkopplingsinställningar",
"Configuration Active" : "Konfiguration aktiv",
@@ -91,17 +97,17 @@
"User Display Name Field" : "Attribut för användarnamn",
"The LDAP attribute to use to generate the user's display name." : "LDAP-attributet som ska användas för att generera användarens visningsnamn.",
"Base User Tree" : "Bas för användare i katalogtjänst",
- "One User Base DN per line" : "En Användare start DN per rad",
+ "One User Base DN per line" : "En användarstart-DN per rad",
"User Search Attributes" : "Användarsökningsattribut",
"Optional; one attribute per line" : "Valfritt; ett attribut per rad",
"Group Display Name Field" : "Attribut för gruppnamn",
"The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.",
"Base Group Tree" : "Bas för grupper i katalogtjänst",
- "One Group Base DN per line" : "En Grupp start DN per rad",
+ "One Group Base DN per line" : "En gruppstart-DN per rad",
"Group Search Attributes" : "Gruppsökningsattribut",
"Group-Member association" : "Attribut för gruppmedlemmar",
"Nested Groups" : "Undergrupper",
- "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DNs.)",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DN.)",
"Paging chunksize" : "Paging klusterstorlek",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Klusterstorlek som används för paged LDAP sökningar som kan komma att returnera skrymmande resultat som uppräknande av användare eller grupper. (Inställning av denna till 0 inaktiverar paged LDAP sökningar i de situationerna)",
"Special Attributes" : "Specialattribut",
@@ -110,17 +116,17 @@
"in bytes" : "i bytes",
"Email Field" : "E-postfält",
"User Home Folder Naming Rule" : "Namnregel för hemkatalog",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP/AD-attribut.",
- "Internal Username" : "Internt Användarnamn",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP-/AD-attribut.",
+ "Internal Username" : "Internt användarnamn",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som standard skapas det interna användarnamnet från UUID-attributet. Det säkerställer att användarnamnet är unikt och tecken inte behöver konverteras. Det interna användarnamnet har restriktionerna att endast följande tecken är tillåtna: [ a-zA-Z0-9_.@- ]. Andra tecken blir ersatta av deras motsvarighet i ASCII eller utelämnas helt. En siffra kommer att läggas till eller ökas på vid en kollision. Det interna användarnamnet används för att identifiera användaren internt. Det är även förvalt som användarens användarnamn i ownCloud. Det är även en port för fjärråtkomst, t.ex. för alla *DAV-tjänster. Med denna inställning kan det förvalda beteendet åsidosättas. För att uppnå ett liknande beteende som innan ownCloud 5, ange attributet för användarens visningsnamn i detta fält. Lämna det tomt för förvalt beteende. Ändringarna kommer endast att påverka nyligen mappade (tillagda) LDAP-användare",
- "Internal Username Attribute:" : "Internt Användarnamn Attribut:",
- "Override UUID detection" : "Åsidosätt UUID detektion",
+ "Internal Username Attribute:" : "Internt användarnamnsattribut:",
+ "Override UUID detection" : "Åsidosätt UUID-detektion",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som standard upptäcker ownCloud automatiskt UUID-attributet. Det UUID-attributet används för att utan tvivel identifiera LDAP-användare och grupper. Dessutom kommer interna användarnamn skapas baserat på detta UUID, om inte annat anges ovan. Du kan åsidosätta inställningen och passera ett attribut som du själv väljer. Du måste se till att attributet som du väljer kan hämtas för både användare och grupper och att det är unikt. Lämna det tomt för standard beteende. Förändringar kommer endast att påverka nyligen mappade (tillagda) LDAP-användare och grupper.",
- "UUID Attribute for Users:" : "UUID Attribut för Användare:",
- "UUID Attribute for Groups:" : "UUID Attribut för Grupper:",
- "Username-LDAP User Mapping" : "Användarnamn-LDAP User Mapping",
- "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud använder sig av användarnamn för att lagra och tilldela (meta) data. För att exakt kunna identifiera och känna igen användare, kommer varje LDAP-användare ha ett internt användarnamn. Detta kräver en mappning från ownCloud-användarnamn till LDAP-användare. Det skapade användarnamnet mappas till UUID för LDAP-användaren. Dessutom cachas DN samt minska LDAP-interaktionen, men den används inte för identifiering. Om DN förändras, kommer förändringarna hittas av ownCloud. Det interna ownCloud-namnet används överallt i ownCloud. Om du rensar/raderar mappningarna kommer att lämna referenser överallt i systemet. Men den är inte konfigurationskänslig, den påverkar alla LDAP-konfigurationer! Rensa/radera aldrig mappningarna i en produktionsmiljö. Utan gör detta endast på i testmiljö!",
- "Clear Username-LDAP User Mapping" : "Rensa Användarnamn-LDAP User Mapping",
- "Clear Groupname-LDAP Group Mapping" : "Rensa Gruppnamn-LDAP Group Mapping"
+ "UUID Attribute for Users:" : "UUID-attribut för användare:",
+ "UUID Attribute for Groups:" : "UUID-attribut för grupper:",
+ "Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud använder sig av användarnamn för att lagra och tilldela (meta) data. För att exakt kunna identifiera och känna igen användare, kommer varje LDAP-användare ha ett internt användarnamn. Detta kräver en mappning från ownCloud-användarnamn till LDAP-användare. Det skapade användarnamnet mappas till UUID för LDAP-användaren. Dessutom cachas DN samt minskar LDAP-interaktionen, men den används inte för identifiering. Om DN förändras, kommer förändringarna hittas av ownCloud. Det interna ownCloud-namnet används överallt i ownCloud. Om du rensar/raderar mappningarna kommer att lämna referenser överallt i systemet. Men den är inte konfigurationskänslig, den påverkar alla LDAP-konfigurationer! Rensa/radera aldrig mappningarna i en produktionsmiljö, utan gör detta endast i testmiljö!",
+ "Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning",
+ "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js
index 75f3678fdd9..a4c308e5354 100644
--- a/apps/user_ldap/l10n/tr.js
+++ b/apps/user_ldap/l10n/tr.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Silmeyi onayla",
"_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"],
"_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.",
"Could not find the desired feature" : "İstenen özellik bulunamadı",
"Invalid Host" : "Geçersiz Makine",
"Server" : "Sunucu",
diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json
index 9b6f3a37ade..dbd4a9b7406 100644
--- a/apps/user_ldap/l10n/tr.json
+++ b/apps/user_ldap/l10n/tr.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Silmeyi onayla",
"_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"],
"_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.",
"Could not find the desired feature" : "İstenen özellik bulunamadı",
"Invalid Host" : "Geçersiz Makine",
"Server" : "Sunucu",
diff --git a/apps/user_ldap/l10n/uk.js b/apps/user_ldap/l10n/uk.js
index 538061db520..0b8e8946e0f 100644
--- a/apps/user_ldap/l10n/uk.js
+++ b/apps/user_ldap/l10n/uk.js
@@ -76,6 +76,7 @@ OC.L10N.register(
"Saving" : "Збереження",
"Back" : "Назад",
"Continue" : "Продовжити",
+ "LDAP" : "LDAP",
"Expert" : "Експерт",
"Advanced" : "Додатково",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Попередження:</b> Застосунки user_ldap та user_webdavauth не сумісні. Ви можете зіткнутися з несподіваною поведінкою. Будь ласка, зверніться до системного адміністратора, щоб відключити одну з них.",
diff --git a/apps/user_ldap/l10n/uk.json b/apps/user_ldap/l10n/uk.json
index f0b439ac979..9fb1ce119fb 100644
--- a/apps/user_ldap/l10n/uk.json
+++ b/apps/user_ldap/l10n/uk.json
@@ -74,6 +74,7 @@
"Saving" : "Збереження",
"Back" : "Назад",
"Continue" : "Продовжити",
+ "LDAP" : "LDAP",
"Expert" : "Експерт",
"Advanced" : "Додатково",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Попередження:</b> Застосунки user_ldap та user_webdavauth не сумісні. Ви можете зіткнутися з несподіваною поведінкою. Будь ласка, зверніться до системного адміністратора, щоб відключити одну з них.",
diff --git a/apps/user_ldap/l10n/ur.php b/apps/user_ldap/l10n/ur.php
deleted file mode 100644
index c29e4dba209..00000000000
--- a/apps/user_ldap/l10n/ur.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Error" => "خرابی",
-"_%s group found_::_%s groups found_" => array("",""),
-"_%s user found_::_%s users found_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/zh_HK.js b/apps/user_ldap/l10n/zh_HK.js
index 27ecbc63e53..2bd0061ab7a 100644
--- a/apps/user_ldap/l10n/zh_HK.js
+++ b/apps/user_ldap/l10n/zh_HK.js
@@ -1,14 +1,26 @@
OC.L10N.register(
"user_ldap",
{
+ "Keep settings?" : "儲存設定?",
+ "{nthServer}. Server" : "{nthServer}. 伺服器",
"Success" : "成功",
"Error" : "錯誤",
- "_%s group found_::_%s groups found_" : [""],
- "_%s user found_::_%s users found_" : [""],
+ "Select groups" : "選擇群組",
+ "_%s group found_::_%s groups found_" : ["找到 %s 群組"],
+ "_%s user found_::_%s users found_" : ["找到 %s 用戶"],
+ "Server" : "伺服器",
"Save" : "儲存",
+ "Test Configuration" : "測試配置",
"Help" : "幫助",
+ "1. Server" : "1. 伺服器",
+ "%s. Server:" : "%s. 伺服器:",
+ "Host" : "主機",
"Port" : "連接埠",
"Password" : "密碼",
+ "Saving" : "儲存中",
+ "Back" : "返回",
+ "Continue" : "繼續",
+ "LDAP" : "LDAP",
"Advanced" : "進階"
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/zh_HK.json b/apps/user_ldap/l10n/zh_HK.json
index d75229ec90e..5e350517a36 100644
--- a/apps/user_ldap/l10n/zh_HK.json
+++ b/apps/user_ldap/l10n/zh_HK.json
@@ -1,12 +1,24 @@
{ "translations": {
+ "Keep settings?" : "儲存設定?",
+ "{nthServer}. Server" : "{nthServer}. 伺服器",
"Success" : "成功",
"Error" : "錯誤",
- "_%s group found_::_%s groups found_" : [""],
- "_%s user found_::_%s users found_" : [""],
+ "Select groups" : "選擇群組",
+ "_%s group found_::_%s groups found_" : ["找到 %s 群組"],
+ "_%s user found_::_%s users found_" : ["找到 %s 用戶"],
+ "Server" : "伺服器",
"Save" : "儲存",
+ "Test Configuration" : "測試配置",
"Help" : "幫助",
+ "1. Server" : "1. 伺服器",
+ "%s. Server:" : "%s. 伺服器:",
+ "Host" : "主機",
"Port" : "連接埠",
"Password" : "密碼",
+ "Saving" : "儲存中",
+ "Back" : "返回",
+ "Continue" : "繼續",
+ "LDAP" : "LDAP",
"Advanced" : "進階"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 12c6f8118d3..f3657176f70 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -23,6 +23,8 @@
namespace OCA\user_ldap\lib;
+use OCA\User_LDAP\Mapping\AbstractMapping;
+
/**
* Class Access
* @package OCA\user_ldap\lib
@@ -47,6 +49,16 @@ class Access extends LDAPUtility implements user\IUserTools {
*/
protected $lastCookie = '';
+ /**
+ * @var AbstractMapping $userMapper
+ */
+ protected $userMapper;
+
+ /**
+ * @var AbstractMapping $userMapper
+ */
+ protected $groupMapper;
+
public function __construct(Connection $connection, ILDAPWrapper $ldap,
user\Manager $userManager) {
parent::__construct($ldap);
@@ -56,6 +68,46 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * sets the User Mapper
+ * @param AbstractMapping $mapper
+ */
+ public function setUserMapper(AbstractMapping $mapper) {
+ $this->userMapper = $mapper;
+ }
+
+ /**
+ * returns the User Mapper
+ * @throws \Exception
+ * @return AbstractMapping
+ */
+ public function getUserMapper() {
+ if(is_null($this->userMapper)) {
+ throw new \Exception('UserMapper was not assigned to this Access instance.');
+ }
+ return $this->userMapper;
+ }
+
+ /**
+ * sets the Group Mapper
+ * @param AbstractMapping $mapper
+ */
+ public function setGroupMapper(AbstractMapping $mapper) {
+ $this->groupMapper = $mapper;
+ }
+
+ /**
+ * returns the Group Mapper
+ * @throws \Exception
+ * @return AbstractMapping
+ */
+ public function getGroupMapper() {
+ if(is_null($this->groupMapper)) {
+ throw new \Exception('GroupMapper was not assigned to this Access instance.');
+ }
+ return $this->groupMapper;
+ }
+
+ /**
* @return bool
*/
private function checkConnection() {
@@ -236,31 +288,12 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
- * gives back the database table for the query
- * @param bool $isUser
- * @return string
- */
- private function getMapTable($isUser) {
- if($isUser) {
- return '*PREFIX*ldap_user_mapping';
- } else {
- return '*PREFIX*ldap_group_mapping';
- }
- }
-
- /**
* returns the LDAP DN for the given internal ownCloud name of the group
* @param string $name the ownCloud name in question
- * @return string with the LDAP DN on success, otherwise false
+ * @return string|false LDAP DN on success, otherwise false
*/
public function groupname2dn($name) {
- $dn = $this->ocname2dn($name, false);
-
- if($dn) {
- return $dn;
- }
-
- return false;
+ return $this->groupMapper->getDNbyName($name);
}
/**
@@ -269,50 +302,33 @@ class Access extends LDAPUtility implements user\IUserTools {
* @return string with the LDAP DN on success, otherwise false
*/
public function username2dn($name) {
- $dn = $this->ocname2dn($name, true);
+ $fdn = $this->userMapper->getDNbyName($name);
+
//Check whether the DN belongs to the Base, to avoid issues on multi-
//server setups
- if($dn && $this->isDNPartOfBase($dn, $this->connection->ldapBaseUsers)) {
- return $dn;
+ if(is_string($fdn) && $this->isDNPartOfBase($fdn, $this->connection->ldapBaseUsers)) {
+ return $fdn;
}
return false;
}
/**
- * returns the LDAP DN for the given internal ownCloud name
- * @param string $name the ownCloud name in question
- * @param boolean $isUser is it a user? otherwise group
- * @return string with the LDAP DN on success, otherwise false
- */
- private function ocname2dn($name, $isUser) {
- $table = $this->getMapTable($isUser);
-
- $query = \OCP\DB::prepare('
- SELECT `ldap_dn`
- FROM `'.$table.'`
- WHERE `owncloud_name` = ?
- ');
-
- $record = $query->execute(array($name))->fetchOne();
- return $record;
- }
-
- /**
+ public function ocname2dn($name, $isUser) {
* returns the internal ownCloud name for the given LDAP DN of the group, false on DN outside of search DN or failure
- * @param string $dn the dn of the group object
+ * @param string $fdn the dn of the group object
* @param string $ldapName optional, the display name of the object
* @return string with the name to use in ownCloud, false on DN outside of search DN
*/
- public function dn2groupname($dn, $ldapName = null) {
+ public function dn2groupname($fdn, $ldapName = null) {
//To avoid bypassing the base DN settings under certain circumstances
//with the group support, check whether the provided DN matches one of
//the given Bases
- if(!$this->isDNPartOfBase($dn, $this->connection->ldapBaseGroups)) {
+ if(!$this->isDNPartOfBase($fdn, $this->connection->ldapBaseGroups)) {
return false;
}
- return $this->dn2ocname($dn, $ldapName, false);
+ return $this->dn2ocname($fdn, $ldapName, false);
}
/**
@@ -321,15 +337,15 @@ class Access extends LDAPUtility implements user\IUserTools {
* @param string $ldapName optional, the display name of the object
* @return string with with the name to use in ownCloud
*/
- public function dn2username($dn, $ldapName = null) {
+ public function dn2username($fdn, $ldapName = null) {
//To avoid bypassing the base DN settings under certain circumstances
//with the group support, check whether the provided DN matches one of
//the given Bases
- if(!$this->isDNPartOfBase($dn, $this->connection->ldapBaseUsers)) {
+ if(!$this->isDNPartOfBase($fdn, $this->connection->ldapBaseUsers)) {
return false;
}
- return $this->dn2ocname($dn, $ldapName, true);
+ return $this->dn2ocname($fdn, $ldapName, true);
}
/**
@@ -339,50 +355,39 @@ class Access extends LDAPUtility implements user\IUserTools {
* @param bool $isUser optional, whether it is a user object (otherwise group assumed)
* @return string with with the name to use in ownCloud
*/
- public function dn2ocname($dn, $ldapName = null, $isUser = true) {
- $table = $this->getMapTable($isUser);
+ public function dn2ocname($fdn, $ldapName = null, $isUser = true) {
if($isUser) {
- $fncFindMappedName = 'findMappedUser';
+ $mapper = $this->getUserMapper();
$nameAttribute = $this->connection->ldapUserDisplayName;
} else {
- $fncFindMappedName = 'findMappedGroup';
+ $mapper = $this->getGroupMapper();
$nameAttribute = $this->connection->ldapGroupDisplayName;
}
//let's try to retrieve the ownCloud name from the mappings table
- $ocName = $this->$fncFindMappedName($dn);
- if($ocName) {
+ $ocName = $mapper->getNameByDN($fdn);
+ if(is_string($ocName)) {
return $ocName;
}
//second try: get the UUID and check if it is known. Then, update the DN and return the name.
- $uuid = $this->getUUID($dn, $isUser);
- if($uuid) {
- $query = \OCP\DB::prepare('
- SELECT `owncloud_name`
- FROM `'.$table.'`
- WHERE `directory_uuid` = ?
- ');
- $component = $query->execute(array($uuid))->fetchOne();
- if($component) {
- $query = \OCP\DB::prepare('
- UPDATE `'.$table.'`
- SET `ldap_dn` = ?
- WHERE `directory_uuid` = ?
- ');
- $query->execute(array($dn, $uuid));
- return $component;
+ $uuid = $this->getUUID($fdn, $isUser);
+ if(is_string($uuid)) {
+ $ocName = $mapper->getNameByUUID($uuid);
+ if(is_string($ocName)) {
+ $mapper->setDNbyUUID($fdn, $uuid);
+ return $ocName;
}
} else {
//If the UUID can't be detected something is foul.
- \OCP\Util::writeLog('user_ldap', 'Cannot determine UUID for '.$dn.'. Skipping.', \OCP\Util::INFO);
+ \OCP\Util::writeLog('user_ldap', 'Cannot determine UUID for '.$fdn.'. Skipping.', \OCP\Util::INFO);
return false;
}
if(is_null($ldapName)) {
- $ldapName = $this->readAttribute($dn, $nameAttribute);
+ $ldapName = $this->readAttribute($fdn, $nameAttribute);
if(!isset($ldapName[0]) && empty($ldapName[0])) {
- \OCP\Util::writeLog('user_ldap', 'No or empty name for '.$dn.'.', \OCP\Util::INFO);
+ \OCP\Util::writeLog('user_ldap', 'No or empty name for '.$fdn.'.', \OCP\Util::INFO);
return false;
}
$ldapName = $ldapName[0];
@@ -390,8 +395,8 @@ class Access extends LDAPUtility implements user\IUserTools {
if($isUser) {
$usernameAttribute = $this->connection->ldapExpertUsernameAttr;
- if(!emptY($usernameAttribute)) {
- $username = $this->readAttribute($dn, $usernameAttribute);
+ if(!empty($usernameAttribute)) {
+ $username = $this->readAttribute($fdn, $usernameAttribute);
$username = $username[0];
} else {
$username = $uuid;
@@ -403,11 +408,13 @@ class Access extends LDAPUtility implements user\IUserTools {
//a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups
//disabling Cache is required to avoid that the new user is cached as not-existing in fooExists check
+ //NOTE: mind, disabling cache affects only this instance! Using it
+ // outside of core user management will still cache the user as non-existing.
$originalTTL = $this->connection->ldapCacheTTL;
$this->connection->setConfiguration(array('ldapCacheTTL' => 0));
if(($isUser && !\OCP\User::userExists($intName))
|| (!$isUser && !\OC_Group::groupExists($intName))) {
- if($this->mapComponent($dn, $intName, $isUser)) {
+ if($mapper->map($fdn, $intName, $uuid)) {
$this->connection->setConfiguration(array('ldapCacheTTL' => $originalTTL));
return $intName;
}
@@ -415,12 +422,12 @@ class Access extends LDAPUtility implements user\IUserTools {
$this->connection->setConfiguration(array('ldapCacheTTL' => $originalTTL));
$altName = $this->createAltInternalOwnCloudName($intName, $isUser);
- if($this->mapComponent($dn, $altName, $isUser)) {
+ if(is_string($altName) && $mapper->map($fdn, $altName, $uuid)) {
return $altName;
}
//if everything else did not help..
- \OCP\Util::writeLog('user_ldap', 'Could not create unique name for '.$dn.'.', \OCP\Util::INFO);
+ \OCP\Util::writeLog('user_ldap', 'Could not create unique name for '.$fdn.'.', \OCP\Util::INFO);
return false;
}
@@ -447,46 +454,6 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
- * @param string $dn
- * @return bool|string
- */
- private function findMappedUser($dn) {
- static $query = null;
- if(is_null($query)) {
- $query = \OCP\DB::prepare('
- SELECT `owncloud_name`
- FROM `'.$this->getMapTable(true).'`
- WHERE `ldap_dn` = ?'
- );
- }
- $res = $query->execute(array($dn))->fetchOne();
- if($res) {
- return $res;
- }
- return false;
- }
-
- /**
- * @param string $dn
- * @return bool|string
- */
- private function findMappedGroup($dn) {
- static $query = null;
- if(is_null($query)) {
- $query = \OCP\DB::prepare('
- SELECT `owncloud_name`
- FROM `'.$this->getMapTable(false).'`
- WHERE `ldap_dn` = ?'
- );
- }
- $res = $query->execute(array($dn))->fetchOne();
- if($res) {
- return $res;
- }
- return false;
- }
-
- /**
* @param array $ldapObjects
* @param bool $isUsers
* @return array
@@ -507,6 +474,7 @@ class Access extends LDAPUtility implements user\IUserTools {
if($isUsers) {
//cache the user names so it does not need to be retrieved
//again later (e.g. sharing dialogue).
+ $this->cacheUserExists($ocName);
$this->cacheUserDisplayName($ocName, $nameByLDAP);
}
}
@@ -516,6 +484,14 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * caches a user as existing
+ * @param string $ocName the internal ownCloud username
+ */
+ public function cacheUserExists($ocName) {
+ $this->connection->writeToCache('userExists'.$ocName, true);
+ }
+
+ /**
* caches the user display name
* @param string $ocName the internal ownCloud username
* @param string $displayName the display name
@@ -560,17 +536,7 @@ class Access extends LDAPUtility implements user\IUserTools {
* "Developers"
*/
private function _createAltInternalOwnCloudNameForGroups($name) {
- $query = \OCP\DB::prepare('
- SELECT `owncloud_name`
- FROM `'.$this->getMapTable(false).'`
- WHERE `owncloud_name` LIKE ?
- ');
-
- $usedNames = array();
- $res = $query->execute(array($name.'_%'));
- while($row = $res->fetchRow()) {
- $usedNames[] = $row['owncloud_name'];
- }
+ $usedNames = $this->groupMapper->getNamesBySearch($name.'_%');
if(!($usedNames) || count($usedNames) === 0) {
$lastNo = 1; //will become name_2
} else {
@@ -615,92 +581,6 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
- * retrieves all known groups from the mappings table
- * @return array with the results
- *
- * retrieves all known groups from the mappings table
- */
- private function mappedGroups() {
- return $this->mappedComponents(false);
- }
-
- /**
- * retrieves all known users from the mappings table
- * @return array with the results
- *
- * retrieves all known users from the mappings table
- */
- private function mappedUsers() {
- return $this->mappedComponents(true);
- }
-
- /**
- * @param boolean $isUsers
- * @return array
- */
- private function mappedComponents($isUsers) {
- $table = $this->getMapTable($isUsers);
-
- $query = \OCP\DB::prepare('
- SELECT `ldap_dn`, `owncloud_name`
- FROM `'. $table . '`'
- );
-
- return $query->execute()->fetchAll();
- }
-
- /**
- * inserts a new user or group into the mappings table
- * @param string $dn the record in question
- * @param string $ocName the name to use in ownCloud
- * @param bool $isUser is it a user or a group?
- * @return bool true on success, false otherwise
- *
- * inserts a new user or group into the mappings table
- */
- private function mapComponent($dn, $ocName, $isUser = true) {
- $table = $this->getMapTable($isUser);
-
- $sqlAdjustment = '';
- $dbType = \OCP\Config::getSystemValue('dbtype');
- if($dbType === 'mysql' || $dbType == 'oci') {
- $sqlAdjustment = 'FROM DUAL';
- }
-
- $insert = \OCP\DB::prepare('
- INSERT INTO `'.$table.'` (`ldap_dn`, `owncloud_name`, `directory_uuid`)
- SELECT ?,?,?
- '.$sqlAdjustment.'
- WHERE NOT EXISTS (
- SELECT 1
- FROM `'.$table.'`
- WHERE `ldap_dn` = ?
- OR `owncloud_name` = ?)
- ');
-
- //feed the DB
- $insRows = $insert->execute(array($dn, $ocName,
- $this->getUUID($dn, $isUser), $dn,
- $ocName));
-
- if(\OCP\DB::isError($insRows)) {
- return false;
- }
-
- if($insRows === 0) {
- return false;
- }
-
- if($isUser) {
- //make sure that email address is retrieved prior to login, so user
- //will be notified when something is shared with him
- $this->userManager->get($ocName)->update();
- }
-
- return true;
- }
-
- /**
* @param string $filter
* @param string|string[] $attr
* @param int $limit
@@ -813,7 +693,7 @@ class Access extends LDAPUtility implements user\IUserTools {
}
//check whether paged search should be attempted
- $pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, $limit, $offset);
+ $pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, intval($limit), $offset);
$linkResources = array_pad(array(), count($base), $cr);
$sr = $this->ldap->search($linkResources, $base, $filter, $attr);
@@ -887,8 +767,9 @@ class Access extends LDAPUtility implements user\IUserTools {
private function count($filter, $base, $attr = null, $limit = null, $offset = null, $skipHandling = false) {
\OCP\Util::writeLog('user_ldap', 'Count filter: '.print_r($filter, true), \OCP\Util::DEBUG);
- if(is_null($limit) || $limit <= 0) {
- $limit = intval($this->connection->ldapPagingSize);
+ $limitPerPage = intval($this->connection->ldapPagingSize);
+ if(!is_null($limit) && $limit < $limitPerPage && $limit > 0) {
+ $limitPerPage = $limit;
}
$counter = 0;
@@ -898,19 +779,19 @@ class Access extends LDAPUtility implements user\IUserTools {
do {
$continue = false;
$search = $this->executeSearch($filter, $base, $attr,
- $limit, $offset);
+ $limitPerPage, $offset);
if($search === false) {
return $counter > 0 ? $counter : false;
}
list($sr, $pagedSearchOK) = $search;
- $count = $this->countEntriesInSearchResults($sr, $limit, $continue);
+ $count = $this->countEntriesInSearchResults($sr, $limitPerPage, $continue);
$counter += $count;
- $this->processPagedSearchStatus($sr, $filter, $base, $count, $limit,
+ $this->processPagedSearchStatus($sr, $filter, $base, $count, $limitPerPage,
$offset, $pagedSearchOK, $skipHandling);
- $offset += $limit;
- } while($continue);
+ $offset += $limitPerPage;
+ } while($continue && (is_null($limit) || $limit <= 0 || $limit > $counter));
return $counter;
}
@@ -928,7 +809,7 @@ class Access extends LDAPUtility implements user\IUserTools {
foreach($searchResults as $res) {
$count = intval($this->ldap->countEntries($cr, $res));
$counter += $count;
- if($count === $limit) {
+ if($count > 0 && $count === $limit) {
$hasHitLimit = true;
}
}
@@ -1073,12 +954,18 @@ class Access extends LDAPUtility implements user\IUserTools {
/**
* escapes (user provided) parts for LDAP filter
* @param string $input, the provided value
+ * @param bool $allowAsterisk wether in * at the beginning should be preserved
* @return string the escaped string
*/
- public function escapeFilterPart($input) {
+ public function escapeFilterPart($input, $allowAsterisk = false) {
+ $asterisk = '';
+ if($allowAsterisk && strlen($input) > 0 && $input[0] === '*') {
+ $asterisk = '*';
+ $input = mb_substr($input, 1, null, 'UTF-8');
+ }
$search = array('*', '\\', '(', ')');
$replace = array('\\*', '\\\\', '\\(', '\\)');
- return str_replace($search, $replace, $input);
+ return $asterisk . str_replace($search, $replace, $input);
}
/**
@@ -1141,6 +1028,33 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * creates a filter part for searches by splitting up the given search
+ * string into single words
+ * @param string $search the search term
+ * @param string[] $searchAttributes needs to have at least two attributes,
+ * otherwise it does not make sense :)
+ * @return string the final filter part to use in LDAP searches
+ * @throws \Exception
+ */
+ private function getAdvancedFilterPartForSearch($search, $searchAttributes) {
+ if(!is_array($searchAttributes) || count($searchAttributes) < 2) {
+ throw new \Exception('searchAttributes must be an array with at least two string');
+ }
+ $searchWords = explode(' ', trim($search));
+ $wordFilters = array();
+ foreach($searchWords as $word) {
+ $word .= '*';
+ //every word needs to appear at least once
+ $wordMatchOneAttrFilters = array();
+ foreach($searchAttributes as $attr) {
+ $wordMatchOneAttrFilters[] = $attr . '=' . $word;
+ }
+ $wordFilters[] = $this->combineFilterWithOr($wordMatchOneAttrFilters);
+ }
+ return $this->combineFilterWithAnd($wordFilters);
+ }
+
+ /**
* creates a filter part for searches
* @param string $search the search term
* @param string[]|null $searchAttributes
@@ -1150,7 +1064,19 @@ class Access extends LDAPUtility implements user\IUserTools {
*/
private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) {
$filter = array();
- $search = empty($search) ? '*' : '*'.$search.'*';
+ $haveMultiSearchAttributes = (is_array($searchAttributes) && count($searchAttributes) > 0);
+ if($haveMultiSearchAttributes && strpos(trim($search), ' ') !== false) {
+ try {
+ return $this->getAdvancedFilterPartForSearch($search, $searchAttributes);
+ } catch(\Exception $e) {
+ \OCP\Util::writeLog(
+ 'user_ldap',
+ 'Creating advanced filter for search failed, falling back to simple method.',
+ \OCP\Util::INFO
+ );
+ }
+ }
+ $search = empty($search) ? '*' : $search.'*';
if(!is_array($searchAttributes) || count($searchAttributes) === 0) {
if(empty($fallbackAttribute)) {
return '';
@@ -1168,6 +1094,19 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * returns the filter used for counting users
+ * @return string
+ */
+ public function getFilterForUserCount() {
+ $filter = $this->combineFilterWithAnd(array(
+ $this->connection->ldapUserFilter,
+ $this->connection->ldapUserDisplayName . '=*'
+ ));
+
+ return $filter;
+ }
+
+ /**
* @param string $name
* @param string $password
* @return bool
@@ -1235,7 +1174,7 @@ class Access extends LDAPUtility implements user\IUserTools {
/**
* @param string $dn
* @param bool $isUser
- * @return array|bool|false
+ * @return string|bool
*/
public function getUUID($dn, $isUser = true) {
if($isUser) {
@@ -1457,7 +1396,7 @@ class Access extends LDAPUtility implements user\IUserTools {
*/
private function initPagedSearch($filter, $bases, $attr, $limit, $offset) {
$pagedSearchOK = false;
- if($this->connection->hasPagedResultSupport && !is_null($limit)) {
+ if($this->connection->hasPagedResultSupport && ($limit !== 0)) {
$offset = intval($offset); //can be null
\OCP\Util::writeLog('user_ldap',
'initializing paged search for Filter '.$filter.' base '.print_r($bases, true)
@@ -1492,7 +1431,7 @@ class Access extends LDAPUtility implements user\IUserTools {
if(!$pagedSearchOK) {
return false;
}
- \OCP\Util::writeLog('user_ldap', 'Ready for a paged search', \OCP\Util::INFO);
+ \OCP\Util::writeLog('user_ldap', 'Ready for a paged search', \OCP\Util::DEBUG);
} else {
\OCP\Util::writeLog('user_ldap',
'No paged search for us, Cpt., Limit '.$limit.' Offset '.$offset,
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index 336ea7b3bbc..c9b4fded9f9 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -29,6 +29,7 @@ namespace OCA\user_ldap\lib;
* @property string ldapUserFilter
* @property string ldapUserDisplayName
* @property boolean hasPagedResultSupport
+ * @property string[] ldapBaseUsers
*/
class Connection extends LDAPUtility {
private $ldapConnectionRes = null;
@@ -70,8 +71,9 @@ class Connection extends LDAPUtility {
}
$this->hasPagedResultSupport =
$this->ldap->hasPagedResultSupport();
+ $helper = new Helper();
$this->doNotValidate = !in_array($this->configPrefix,
- Helper::getServerConfigurationPrefixes());
+ $helper->getServerConfigurationPrefixes());
}
public function __destruct() {
@@ -505,7 +507,7 @@ class Connection extends LDAPUtility {
if(putenv('LDAPTLS_REQCERT=never')) {
\OCP\Util::writeLog('user_ldap',
'Turned off SSL certificate validation successfully.',
- \OCP\Util::WARN);
+ \OCP\Util::DEBUG);
} else {
\OCP\Util::writeLog('user_ldap',
'Could not turn off SSL certificate validation.',
diff --git a/apps/user_ldap/lib/helper.php b/apps/user_ldap/lib/helper.php
index 282f4549e3b..7a96cfa36c4 100644
--- a/apps/user_ldap/lib/helper.php
+++ b/apps/user_ldap/lib/helper.php
@@ -45,7 +45,7 @@ class Helper {
* except the default (first) server shall be connected to.
*
*/
- static public function getServerConfigurationPrefixes($activeConfigurations = false) {
+ public function getServerConfigurationPrefixes($activeConfigurations = false) {
$referenceConfigkey = 'ldap_configuration_active';
$sql = '
@@ -83,7 +83,7 @@ class Helper {
* @return array an array with configprefix as keys
*
*/
- static public function getServerConfigurationHosts() {
+ public function getServerConfigurationHosts() {
$referenceConfigkey = 'ldap_host';
$query = '
@@ -110,7 +110,7 @@ class Helper {
* @param string $prefix the configuration prefix of the config to delete
* @return bool true on success, false otherwise
*/
- static public function deleteServerConfiguration($prefix) {
+ public function deleteServerConfiguration($prefix) {
if(!in_array($prefix, self::getServerConfigurationPrefixes())) {
return false;
}
@@ -142,30 +142,19 @@ class Helper {
}
/**
- * Truncate's the given mapping table
- *
- * @param string $mapping either 'user' or 'group'
- * @return bool true on success, false otherwise
+ * checks whether there is one or more disabled LDAP configurations
+ * @throws \Exception
+ * @return bool
*/
- static public function clearMapping($mapping) {
- if($mapping === 'user') {
- $table = '`*PREFIX*ldap_user_mapping`';
- } else if ($mapping === 'group') {
- $table = '`*PREFIX*ldap_group_mapping`';
- } else {
- return false;
- }
+ public function haveDisabledConfigurations() {
+ $all = $this->getServerConfigurationPrefixes(false);
+ $active = $this->getServerConfigurationPrefixes(true);
- $connection = \OC_DB::getConnection();
- $sql = $connection->getDatabasePlatform()->getTruncateTableSQL($table);
- $query = \OCP\DB::prepare($sql);
- $res = $query->execute();
-
- if(\OCP\DB::isError($res)) {
- return false;
+ if(!is_array($all) || !is_array($active)) {
+ throw new \Exception('Unexpected Return Value');
}
- return true;
+ return count($all) !== count($active) || count($all) === 0;
}
/**
@@ -173,7 +162,7 @@ class Helper {
* @param string $url the URL
* @return string|false domain as string on success, false otherwise
*/
- static public function getDomainFromURL($url) {
+ public function getDomainFromURL($url) {
$uinfo = parse_url($url);
if(!is_array($uinfo)) {
return false;
diff --git a/apps/user_ldap/lib/jobs.php b/apps/user_ldap/lib/jobs.php
index 47e536f8f64..a887b65251c 100644
--- a/apps/user_ldap/lib/jobs.php
+++ b/apps/user_ldap/lib/jobs.php
@@ -23,6 +23,9 @@
namespace OCA\user_ldap\lib;
+use OCA\User_LDAP\Mapping\GroupMapping;
+use OCA\User_LDAP\Mapping\UserMapping;
+
class Jobs extends \OC\BackgroundJob\TimedJob {
static private $groupsFromDB;
@@ -156,18 +159,25 @@ class Jobs extends \OC\BackgroundJob\TimedJob {
if(!is_null(self::$groupBE)) {
return self::$groupBE;
}
- $configPrefixes = Helper::getServerConfigurationPrefixes(true);
+ $helper = new Helper();
+ $configPrefixes = $helper->getServerConfigurationPrefixes(true);
$ldapWrapper = new LDAP();
if(count($configPrefixes) === 1) {
//avoid the proxy when there is only one LDAP server configured
+ $dbc = \OC::$server->getDatabaseConnection();
$userManager = new user\Manager(
\OC::$server->getConfig(),
new FilesystemHelper(),
new LogWrapper(),
\OC::$server->getAvatarManager(),
- new \OCP\Image());
+ new \OCP\Image(),
+ $dbc);
$connector = new Connection($ldapWrapper, $configPrefixes[0]);
$ldapAccess = new Access($connector, $ldapWrapper, $userManager);
+ $groupMapper = new GroupMapping($dbc);
+ $userMapper = new UserMapping($dbc);
+ $ldapAccess->setGroupMapper($groupMapper);
+ $ldapAccess->setUserMapper($userMapper);
self::$groupBE = new \OCA\user_ldap\GROUP_LDAP($ldapAccess);
} else {
self::$groupBE = new \OCA\user_ldap\Group_Proxy($configPrefixes, $ldapWrapper);
diff --git a/apps/user_ldap/lib/jobs/cleanup.php b/apps/user_ldap/lib/jobs/cleanup.php
new file mode 100644
index 00000000000..caf31f89820
--- /dev/null
+++ b/apps/user_ldap/lib/jobs/cleanup.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\User_LDAP\Jobs;
+
+use \OC\BackgroundJob\TimedJob;
+use \OCA\user_ldap\User_LDAP;
+use \OCA\user_ldap\User_Proxy;
+use \OCA\user_ldap\lib\Helper;
+use \OCA\user_ldap\lib\LDAP;
+use \OCA\user_ldap\lib\user\DeletedUsersIndex;
+use \OCA\User_LDAP\Mapping\UserMapping;
+
+/**
+ * Class CleanUp
+ *
+ * a Background job to clean up deleted users
+ *
+ * @package OCA\user_ldap\lib;
+ */
+class CleanUp extends TimedJob {
+ /** @var int $limit amount of users that should be checked per run */
+ protected $limit = 50;
+
+ /** @var int $defaultIntervalMin default interval in minutes */
+ protected $defaultIntervalMin = 51;
+
+ /** @var User_LDAP|User_Proxy $userBackend */
+ protected $userBackend;
+
+ /** @var \OCP\IConfig $ocConfig */
+ protected $ocConfig;
+
+ /** @var \OCP\IDBConnection $db */
+ protected $db;
+
+ /** @var Helper $ldapHelper */
+ protected $ldapHelper;
+
+ /** @var \OCA\User_LDAP\Mapping\UserMapping */
+ protected $mapping;
+
+ /** @var \OCA\User_LDAP\lib\User\DeletedUsersIndex */
+ protected $dui;
+
+ public function __construct() {
+ $minutes = \OC::$server->getConfig()->getSystemValue(
+ 'ldapUserCleanupInterval', strval($this->defaultIntervalMin));
+ $this->setInterval(intval($minutes) * 60);
+ }
+
+ /**
+ * assigns the instances passed to run() to the class properties
+ * @param array $arguments
+ */
+ public function setArguments($arguments) {
+ //Dependency Injection is not possible, because the constructor will
+ //only get values that are serialized to JSON. I.e. whatever we would
+ //pass in app.php we do add here, except something else is passed e.g.
+ //in tests.
+
+ if(isset($arguments['helper'])) {
+ $this->ldapHelper = $arguments['helper'];
+ } else {
+ $this->ldapHelper = new Helper();
+ }
+
+ if(isset($arguments['ocConfig'])) {
+ $this->ocConfig = $arguments['ocConfig'];
+ } else {
+ $this->ocConfig = \OC::$server->getConfig();
+ }
+
+ if(isset($arguments['userBackend'])) {
+ $this->userBackend = $arguments['userBackend'];
+ } else {
+ $this->userBackend = new User_Proxy(
+ $this->ldapHelper->getServerConfigurationPrefixes(true),
+ new LDAP(),
+ $this->ocConfig
+ );
+ }
+
+ if(isset($arguments['db'])) {
+ $this->db = $arguments['db'];
+ } else {
+ $this->db = \OC::$server->getDatabaseConnection();
+ }
+
+ if(isset($arguments['mapping'])) {
+ $this->mapping = $arguments['mapping'];
+ } else {
+ $this->mapping = new UserMapping($this->db);
+ }
+
+ if(isset($arguments['deletedUsersIndex'])) {
+ $this->dui = $arguments['deletedUsersIndex'];
+ } else {
+ $this->dui = new DeletedUsersIndex(
+ $this->ocConfig, $this->db, $this->mapping);
+ }
+ }
+
+ /**
+ * makes the background job do its work
+ * @param array $argument
+ */
+ public function run($argument) {
+ $this->setArguments($argument);
+
+ if(!$this->isCleanUpAllowed()) {
+ return;
+ }
+ $users = $this->mapping->getList($this->getOffset(), $this->limit);
+ if(!is_array($users)) {
+ //something wrong? Let's start from the beginning next time and
+ //abort
+ $this->setOffset(true);
+ return;
+ }
+ $resetOffset = $this->isOffsetResetNecessary(count($users));
+ $this->checkUsers($users);
+ $this->setOffset($resetOffset);
+ }
+
+ /**
+ * checks whether next run should start at 0 again
+ * @param int $resultCount
+ * @return bool
+ */
+ public function isOffsetResetNecessary($resultCount) {
+ return ($resultCount < $this->limit) ? true : false;
+ }
+
+ /**
+ * checks whether cleaning up LDAP users is allowed
+ * @return bool
+ */
+ public function isCleanUpAllowed() {
+ try {
+ if($this->ldapHelper->haveDisabledConfigurations()) {
+ return false;
+ }
+ } catch (\Exception $e) {
+ return false;
+ }
+
+ $enabled = $this->isCleanUpEnabled();
+
+ return $enabled;
+ }
+
+ /**
+ * checks whether clean up is enabled by configuration
+ * @return bool
+ */
+ private function isCleanUpEnabled() {
+ return (bool)$this->ocConfig->getSystemValue(
+ 'ldapUserCleanupInterval', strval($this->defaultIntervalMin));
+ }
+
+ /**
+ * checks users whether they are still existing
+ * @param array $users result from getMappedUsers()
+ */
+ private function checkUsers(array $users) {
+ foreach($users as $user) {
+ $this->checkUser($user);
+ }
+ }
+
+ /**
+ * checks whether a user is still existing in LDAP
+ * @param string[] $user
+ */
+ private function checkUser(array $user) {
+ if($this->userBackend->userExistsOnLDAP($user['name'])) {
+ //still available, all good
+
+ return;
+ }
+
+ $this->dui->markUser($user['name']);
+ }
+
+ /**
+ * gets the offset to fetch users from the mappings table
+ * @return int
+ */
+ private function getOffset() {
+ return intval($this->ocConfig->getAppValue('user_ldap', 'cleanUpJobOffset', 0));
+ }
+
+ /**
+ * sets the new offset for the next run
+ * @param bool $reset whether the offset should be set to 0
+ */
+ public function setOffset($reset = false) {
+ $newOffset = $reset ? 0 :
+ $this->getOffset() + $this->limit;
+ $this->ocConfig->setAppValue('user_ldap', 'cleanUpJobOffset', $newOffset);
+ }
+
+ /**
+ * returns the chunk size (limit in DB speak)
+ * @return int
+ */
+ public function getChunkSize() {
+ return $this->limit;
+ }
+
+}
diff --git a/apps/user_ldap/lib/mapping/abstractmapping.php b/apps/user_ldap/lib/mapping/abstractmapping.php
new file mode 100644
index 00000000000..cb9db83f683
--- /dev/null
+++ b/apps/user_ldap/lib/mapping/abstractmapping.php
@@ -0,0 +1,222 @@
+<?php
+/**
+* Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+* This file is licensed under the Affero General Public License version 3 or
+* later.
+* See the COPYING-README file.
+*/
+
+namespace OCA\User_LDAP\Mapping;
+
+/**
+* Class AbstractMapping
+* @package OCA\User_LDAP\Mapping
+*/
+abstract class AbstractMapping {
+ /**
+ * @var \OCP\IDBConnection $dbc
+ */
+ protected $dbc;
+
+ /**
+ * returns the DB table name which holds the mappings
+ * @return string
+ */
+ abstract protected function getTableName();
+
+ /**
+ * @param \OCP\IDBConnection $dbc
+ */
+ public function __construct(\OCP\IDBConnection $dbc) {
+ $this->dbc = $dbc;
+ }
+
+ /**
+ * checks whether a provided string represents an existing table col
+ * @param string $col
+ * @return bool
+ */
+ public function isColNameValid($col) {
+ switch($col) {
+ case 'ldap_dn':
+ case 'owncloud_name':
+ case 'directory_uuid':
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Gets the value of one column based on a provided value of another column
+ * @param string $fetchCol
+ * @param string $compareCol
+ * @param string $search
+ * @throws \Exception
+ * @return string|false
+ */
+ protected function getXbyY($fetchCol, $compareCol, $search) {
+ if(!$this->isColNameValid($fetchCol)) {
+ //this is used internally only, but we don't want to risk
+ //having SQL injection at all.
+ throw new \Exception('Invalid Column Name');
+ }
+ $query = $this->dbc->prepare('
+ SELECT `' . $fetchCol . '`
+ FROM `'. $this->getTableName() .'`
+ WHERE `' . $compareCol . '` = ?
+ ');
+
+ $res = $query->execute(array($search));
+ if($res !== false) {
+ return $query->fetchColumn();
+ }
+
+ return false;
+ }
+
+ /**
+ * Performs a DELETE or UPDATE query to the database.
+ * @param \Doctrine\DBAL\Driver\Statement $query
+ * @param array $parameters
+ * @return bool true if at least one row was modified, false otherwise
+ */
+ protected function modify($query, $parameters) {
+ $result = $query->execute($parameters);
+ return ($result === true && $query->rowCount() > 0);
+ }
+
+ /**
+ * Gets the LDAP DN based on the provided name.
+ * Replaces Access::ocname2dn
+ * @param string $name
+ * @return string|false
+ */
+ public function getDNByName($name) {
+ return $this->getXbyY('ldap_dn', 'owncloud_name', $name);
+ }
+
+ /**
+ * Updates the DN based on the given UUID
+ * @param string $fdn
+ * @param string $uuid
+ * @return bool
+ */
+ public function setDNbyUUID($fdn, $uuid) {
+ $query = $this->dbc->prepare('
+ UPDATE `' . $this->getTableName() . '`
+ SET `ldap_dn` = ?
+ WHERE `directory_uuid` = ?
+ ');
+
+ return $this->modify($query, array($fdn, $uuid));
+ }
+
+ /**
+ * Gets the name based on the provided LDAP DN.
+ * @param string $fdn
+ * @return string|false
+ */
+ public function getNameByDN($fdn) {
+ return $this->getXbyY('owncloud_name', 'ldap_dn', $fdn);
+ }
+
+ /**
+ * Searches mapped names by the giving string in the name column
+ * @param string $search
+ * @return string[]
+ */
+ public function getNamesBySearch($search) {
+ $query = $this->dbc->prepare('
+ SELECT `owncloud_name`
+ FROM `'. $this->getTableName() .'`
+ WHERE `owncloud_name` LIKE ?
+ ');
+
+ $res = $query->execute(array($search));
+ $names = array();
+ if($res !== false) {
+ while($row = $query->fetch()) {
+ $names[] = $row['owncloud_name'];
+ }
+ }
+ return $names;
+ }
+
+ /**
+ * Gets the name based on the provided LDAP DN.
+ * @param string $uuid
+ * @return string|false
+ */
+ public function getNameByUUID($uuid) {
+ return $this->getXbyY('owncloud_name', 'directory_uuid', $uuid);
+ }
+
+ /**
+ * gets a piece of the mapping list
+ * @param int $offset
+ * @param int $limit
+ * @return array
+ */
+ public function getList($offset = null, $limit = null) {
+ $query = $this->dbc->prepare('
+ SELECT
+ `ldap_dn` AS `dn`,
+ `owncloud_name` AS `name`,
+ `directory_uuid` AS `uuid`
+ FROM `' . $this->getTableName() . '`',
+ $limit,
+ $offset
+ );
+
+ $query->execute();
+ return $query->fetchAll();
+ }
+
+ /**
+ * attempts to map the given entry
+ * @param string $fdn fully distinguished name (from LDAP)
+ * @param string $name
+ * @param string $uuid a unique identifier as used in LDAP
+ * @return bool
+ */
+ public function map($fdn, $name, $uuid) {
+ $row = array(
+ 'ldap_dn' => $fdn,
+ 'owncloud_name' => $name,
+ 'directory_uuid' => $uuid
+ );
+
+ try {
+ $result = $this->dbc->insertIfNotExist($this->getTableName(), $row);
+ // insertIfNotExist returns values as int
+ return (bool)$result;
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * removes a mapping based on the owncloud_name of the entry
+ * @param string $name
+ * @return bool
+ */
+ public function unmap($name) {
+ $query = $this->dbc->prepare('
+ DELETE FROM `'. $this->getTableName() .'`
+ WHERE `owncloud_name` = ?');
+
+ return $this->modify($query, array($name));
+ }
+
+ /**
+ * Truncate's the mapping table
+ * @return bool
+ */
+ public function clear() {
+ $sql = $this->dbc
+ ->getDatabasePlatform()
+ ->getTruncateTableSQL('`' . $this->getTableName() . '`');
+ return $this->dbc->prepare($sql)->execute();
+ }
+}
diff --git a/apps/user_ldap/lib/mapping/groupmapping.php b/apps/user_ldap/lib/mapping/groupmapping.php
new file mode 100644
index 00000000000..af8a4bb4623
--- /dev/null
+++ b/apps/user_ldap/lib/mapping/groupmapping.php
@@ -0,0 +1,25 @@
+<?php
+/**
+* Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+* This file is licensed under the Affero General Public License version 3 or
+* later.
+* See the COPYING-README file.
+*/
+
+namespace OCA\User_LDAP\Mapping;
+
+/**
+* Class UserMapping
+* @package OCA\User_LDAP\Mapping
+*/
+class GroupMapping extends AbstractMapping {
+
+ /**
+ * returns the DB table name which holds the mappings
+ * @return string
+ */
+ protected function getTableName() {
+ return '*PREFIX*ldap_group_mapping';
+ }
+
+}
diff --git a/apps/user_ldap/lib/mapping/usermapping.php b/apps/user_ldap/lib/mapping/usermapping.php
new file mode 100644
index 00000000000..dd24f338b96
--- /dev/null
+++ b/apps/user_ldap/lib/mapping/usermapping.php
@@ -0,0 +1,25 @@
+<?php
+/**
+* Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+* This file is licensed under the Affero General Public License version 3 or
+* later.
+* See the COPYING-README file.
+*/
+
+namespace OCA\User_LDAP\Mapping;
+
+/**
+* Class UserMapping
+* @package OCA\User_LDAP\Mapping
+*/
+class UserMapping extends AbstractMapping {
+
+ /**
+ * returns the DB table name which holds the mappings
+ * @return string
+ */
+ protected function getTableName() {
+ return '*PREFIX*ldap_user_mapping';
+ }
+
+}
diff --git a/apps/user_ldap/lib/proxy.php b/apps/user_ldap/lib/proxy.php
index 73a52a7ddd9..b4e6e33c1f4 100644
--- a/apps/user_ldap/lib/proxy.php
+++ b/apps/user_ldap/lib/proxy.php
@@ -24,6 +24,8 @@
namespace OCA\user_ldap\lib;
use OCA\user_ldap\lib\Access;
+use OCA\User_LDAP\Mapping\UserMapping;
+use OCA\User_LDAP\Mapping\GroupMapping;
abstract class Proxy {
static private $accesses = array();
@@ -45,17 +47,25 @@ abstract class Proxy {
static $fs;
static $log;
static $avatarM;
+ static $userMap;
+ static $groupMap;
+ static $db;
if(is_null($fs)) {
$ocConfig = \OC::$server->getConfig();
$fs = new FilesystemHelper();
$log = new LogWrapper();
$avatarM = \OC::$server->getAvatarManager();
+ $db = \OC::$server->getDatabaseConnection();
+ $userMap = new UserMapping($db);
+ $groupMap = new GroupMapping($db);
}
$userManager =
- new user\Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image());
+ new user\Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image(), $db);
$connector = new Connection($this->ldap, $configPrefix);
- self::$accesses[$configPrefix] =
- new Access($connector, $this->ldap, $userManager);
+ $access = new Access($connector, $this->ldap, $userManager);
+ $access->setUserMapper($userMap);
+ $access->setGroupMapper($groupMap);
+ self::$accesses[$configPrefix] = $access;
}
/**
diff --git a/apps/user_ldap/lib/user/deletedusersindex.php b/apps/user_ldap/lib/user/deletedusersindex.php
new file mode 100644
index 00000000000..e17ed3384da
--- /dev/null
+++ b/apps/user_ldap/lib/user/deletedusersindex.php
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * ownCloud – LDAP Helper
+ *
+ * @author Arthur Schiwon
+ * @copyright 2014 Arthur Schiwon <blizzz@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\user_ldap\lib\user;
+
+use OCA\user_ldap\lib\user\OfflineUser;
+use OCA\User_LDAP\Mapping\UserMapping;
+
+/**
+ * Class DeletedUsersIndex
+ * @package OCA\User_LDAP
+ */
+class DeletedUsersIndex {
+ /**
+ * @var \OCP\IConfig $config
+ */
+ protected $config;
+
+ /**
+ * @var \OCP\IDBConnection $db
+ */
+ protected $db;
+
+ /**
+ * @var \OCA\User_LDAP\Mapping\UserMapping $mapping
+ */
+ protected $mapping;
+
+ /**
+ * @var array $deletedUsers
+ */
+ protected $deletedUsers;
+
+ /**
+ * @param OCP\IConfig $config
+ * @param OCP\IDBConnection $db
+ * @param OCA\User_LDAP\Mapping\UserMapping $mapping
+ */
+ public function __construct(\OCP\IConfig $config, \OCP\IDBConnection $db, UserMapping $mapping) {
+ $this->config = $config;
+ $this->db = $db;
+ $this->mapping = $mapping;
+ }
+
+ /**
+ * reads LDAP users marked as deleted from the database
+ * @return OCA\user_ldap\lib\user\OfflineUser[]
+ */
+ private function fetchDeletedUsers() {
+ $deletedUsers = $this->config->getUsersForUserValue(
+ 'user_ldap', 'isDeleted', '1');
+
+ $userObjects = array();
+ foreach($deletedUsers as $user) {
+ $userObjects[] = new OfflineUser($user, $this->config, $this->db, $this->mapping);
+ }
+ $this->deletedUsers = $userObjects;
+
+ return $this->deletedUsers;
+ }
+
+ /**
+ * returns all LDAP users that are marked as deleted
+ * @return OCA\user_ldap\lib\user\OfflineUser[]
+ */
+ public function getUsers() {
+ if(is_array($this->deletedUsers)) {
+ return $this->deletedUsers;
+ }
+ return $this->fetchDeletedUsers();
+ }
+
+ /**
+ * whether at least one user was detected as deleted
+ * @return bool
+ */
+ public function hasUsers() {
+ if($this->deletedUsers === false) {
+ $this->fetchDeletedUsers();
+ }
+ if(is_array($this->deletedUsers) && count($this->deletedUsers) > 0) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * marks a user as deleted
+ * @param string ocName
+ */
+ public function markUser($ocName) {
+ $this->config->setUserValue($ocName, 'user_ldap', 'isDeleted', '1');
+ }
+}
diff --git a/apps/user_ldap/lib/user/iusertools.php b/apps/user_ldap/lib/user/iusertools.php
index bbc678153de..fcb00d2f746 100644
--- a/apps/user_ldap/lib/user/iusertools.php
+++ b/apps/user_ldap/lib/user/iusertools.php
@@ -38,5 +38,4 @@ interface IUserTools {
public function dn2username($dn, $ldapname = null);
public function username2dn($name);
-
}
diff --git a/apps/user_ldap/lib/user/manager.php b/apps/user_ldap/lib/user/manager.php
index 0ed3d09c48f..ec50e031281 100644
--- a/apps/user_ldap/lib/user/manager.php
+++ b/apps/user_ldap/lib/user/manager.php
@@ -27,6 +27,7 @@ use OCA\user_ldap\lib\user\IUserTools;
use OCA\user_ldap\lib\user\User;
use OCA\user_ldap\lib\LogWrapper;
use OCA\user_ldap\lib\FilesystemHelper;
+use OCA\user_ldap\lib\user\OfflineUser;
/**
* Manager
@@ -35,32 +36,31 @@ use OCA\user_ldap\lib\FilesystemHelper;
* cache
*/
class Manager {
- /**
- * @var IUserTools
- */
+ /** @var IUserTools */
protected $access;
- /**
- * @var \OCP\IConfig
- */
+
+ /** @var \OCP\IConfig */
protected $ocConfig;
- /**
- * @var FilesystemHelper
- */
+
+ /** @var \OCP\IDBConnection */
+ protected $db;
+
+ /** @var FilesystemHelper */
protected $ocFilesystem;
- /**
- * @var LogWrapper
- */
+
+ /** @var LogWrapper */
protected $ocLog;
- /**
- * @var \OCP\Image
- */
+
+ /** @var \OCP\Image */
protected $image;
- /**
- * @param \OCP\IAvatarManager
- */
+
+ /** @param \OCP\IAvatarManager */
protected $avatarManager;
+
/**
- * @var string[][]
+ * array['byDN'] \OCA\user_ldap\lib\User[]
+ * ['byUid'] \OCA\user_ldap\lib\User[]
+ * @var array $users
*/
protected $users = array(
'byDN' => array(),
@@ -68,29 +68,25 @@ class Manager {
);
/**
- * @brief Constructor
- * @param \OCP\IConfig respectively an instance that provides the methods
- * setUserValue and getUserValue as implemented in \OCP\Config
- * @param \OCA\user_ldap\lib\FilesystemHelper object that gives access to
- * necessary functions from the OC filesystem
- * @param \OCA\user_ldap\lib\LogWrapper
- * @param \OCP\IAvatarManager
- * @param \OCP\Image an empty image instance
+ * @param \OCP\IConfig $ocConfig
+ * @param \OCA\user_ldap\lib\FilesystemHelper $ocFilesystem object that
+ * gives access to necessary functions from the OC filesystem
+ * @param \OCA\user_ldap\lib\LogWrapper $ocLog
+ * @param \OCP\IAvatarManager $avatarManager
+ * @param \OCP\Image $image an empty image instance
+ * @param \OCP\IDBConnection $db
* @throws Exception when the methods mentioned above do not exist
*/
public function __construct(\OCP\IConfig $ocConfig,
FilesystemHelper $ocFilesystem, LogWrapper $ocLog,
- \OCP\IAvatarManager $avatarManager, \OCP\Image $image) {
+ \OCP\IAvatarManager $avatarManager, \OCP\Image $image, \OCP\IDBConnection $db) {
- if(!method_exists($ocConfig, 'setUserValue')
- || !method_exists($ocConfig, 'getUserValue')) {
- throw new \Exception('Invalid ownCloud User Config object');
- }
$this->ocConfig = $ocConfig;
$this->ocFilesystem = $ocFilesystem;
$this->ocLog = $ocLog;
$this->avatarManager = $avatarManager;
$this->image = $image;
+ $this->db = $db;
}
/**
@@ -131,9 +127,45 @@ class Manager {
}
/**
+ * Checks whether the specified user is marked as deleted
+ * @param string $id the ownCloud user name
+ * @return bool
+ */
+ public function isDeletedUser($id) {
+ $isDeleted = $this->ocConfig->getUserValue(
+ $id, 'user_ldap', 'isDeleted', 0);
+ return intval($isDeleted) === 1;
+ }
+
+ /**
+ * creates and returns an instance of OfflineUser for the specified user
+ * @param string $id
+ * @return \OCA\user_ldap\lib\user\OfflineUser
+ */
+ public function getDeletedUser($id) {
+ return new OfflineUser(
+ $id,
+ $this->ocConfig,
+ $this->db,
+ $this->access->getUserMapper());
+ }
+
+ protected function createInstancyByUserName($id) {
+ //most likely a uid. Check whether it is a deleted user
+ if($this->isDeletedUser($id)) {
+ return $this->getDeletedUser($id);
+ }
+ $dn = $this->access->username2dn($id);
+ if($dn !== false) {
+ return $this->createAndCache($dn, $id);
+ }
+ throw new \Exception('Could not create User instance');
+ }
+
+ /**
* @brief returns a User object by it's DN or ownCloud username
* @param string the DN or username of the user
- * @return \OCA\user_ldap\lib\User | null
+ * @return \OCA\user_ldap\lib\user\User|\OCA\user_ldap\lib\user\OfflineUser|null
*/
public function get($id) {
$this->checkAccess();
@@ -143,25 +175,19 @@ class Manager {
return $this->users['byUid'][$id];
}
- if(!$this->access->stringResemblesDN($id) ) {
- //most likely a uid
- $dn = $this->access->username2dn($id);
- if($dn !== false) {
- return $this->createAndCache($dn, $id);
- }
- } else {
- //so it's a DN
+ if($this->access->stringResemblesDN($id) ) {
$uid = $this->access->dn2username($id);
if($uid !== false) {
return $this->createAndCache($id, $uid);
}
}
- //either funny uid or invalid. Assume funny to be on the safe side.
- $dn = $this->access->username2dn($id);
- if($dn !== false) {
- return $this->createAndCache($dn, $id);
+
+ try {
+ $user = $this->createInstancyByUserName($id);
+ return $user;
+ } catch (\Exception $e) {
+ return null;
}
- return null;
}
}
diff --git a/apps/user_ldap/lib/user/offlineuser.php b/apps/user_ldap/lib/user/offlineuser.php
new file mode 100644
index 00000000000..1833f4be968
--- /dev/null
+++ b/apps/user_ldap/lib/user/offlineuser.php
@@ -0,0 +1,223 @@
+<?php
+
+/**
+ * ownCloud – LDAP User
+ *
+ * @author Arthur Schiwon
+ * @copyright 2014 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\user_ldap\lib\user;
+
+use OCA\User_LDAP\Mapping\UserMapping;
+
+class OfflineUser {
+ /**
+ * @var string $ocName
+ */
+ protected $ocName;
+ /**
+ * @var string $dn
+ */
+ protected $dn;
+ /**
+ * @var string $uid the UID as provided by LDAP
+ */
+ protected $uid;
+ /**
+ * @var string $displayName
+ */
+ protected $displayName;
+ /**
+ * @var string $homePath
+ */
+ protected $homePath;
+ /**
+ * @var string $lastLogin the timestamp of the last login
+ */
+ protected $lastLogin;
+ /**
+ * @var string $email
+ */
+ protected $email;
+ /**
+ * @var bool $hasActiveShares
+ */
+ protected $hasActiveShares;
+ /**
+ * @var \OCP\IConfig $config
+ */
+ protected $config;
+ /**
+ * @var \OCP\IDBConnection $db
+ */
+ protected $db;
+ /**
+ * @var \OCA\User_LDAP\Mapping\UserMapping
+ */
+ protected $mapping;
+
+ /**
+ * @param string $ocName
+ * @param OCP\IConfig $config
+ * @param OCP\IDBConnection $db
+ * @param OCA\User_LDAP\Mapping\UserMapping $mapping
+ */
+ public function __construct($ocName, \OCP\IConfig $config, \OCP\IDBConnection $db, UserMapping $mapping) {
+ $this->ocName = $ocName;
+ $this->config = $config;
+ $this->db = $db;
+ $this->mapping = $mapping;
+ $this->fetchDetails();
+ }
+
+ /**
+ * exports the user details in an assoc array
+ * @return array
+ */
+ public function export() {
+ $data = array();
+ $data['ocName'] = $this->getOCName();
+ $data['dn'] = $this->getDN();
+ $data['uid'] = $this->getUID();
+ $data['displayName'] = $this->getDisplayName();
+ $data['homePath'] = $this->getHomePath();
+ $data['lastLogin'] = $this->getLastLogin();
+ $data['email'] = $this->getEmail();
+ $data['hasActiveShares'] = $this->getHasActiveShares();
+
+ return $data;
+ }
+
+ /**
+ * getter for ownCloud internal name
+ * @return string
+ */
+ public function getOCName() {
+ return $this->ocName;
+ }
+
+ /**
+ * getter for LDAP uid
+ * @return string
+ */
+ public function getUID() {
+ return $this->uid;
+ }
+
+ /**
+ * getter for LDAP DN
+ * @return string
+ */
+ public function getDN() {
+ return $this->dn;
+ }
+
+ /**
+ * getter for display name
+ * @return string
+ */
+ public function getDisplayName() {
+ return $this->displayName;
+ }
+
+ /**
+ * getter for email
+ * @return string
+ */
+ public function getEmail() {
+ return $this->email;
+ }
+
+ /**
+ * getter for home directory path
+ * @return string
+ */
+ public function getHomePath() {
+ return $this->homePath;
+ }
+
+ /**
+ * getter for the last login timestamp
+ * @return int
+ */
+ public function getLastLogin() {
+ return intval($this->lastLogin);
+ }
+
+ /**
+ * getter for having active shares
+ * @return bool
+ */
+ public function getHasActiveShares() {
+ return $this->hasActiveShares;
+ }
+
+ /**
+ * reads the user details
+ */
+ protected function fetchDetails() {
+ $properties = array (
+ 'displayName' => 'user_ldap',
+ 'uid' => 'user_ldap',
+ 'homePath' => 'user_ldap',
+ 'email' => 'settings',
+ 'lastLogin' => 'login'
+ );
+ foreach($properties as $property => $app) {
+ $this->$property = $this->config->getUserValue($this->ocName, $app, $property, '');
+ }
+
+ $dn = $this->mapping->getDNByName($this->ocName);
+ $this->dn = ($dn !== false) ? $dn : '';
+
+ $this->determineShares();
+ }
+
+
+ /**
+ * finds out whether the user has active shares. The result is stored in
+ * $this->hasActiveShares
+ */
+ protected function determineShares() {
+ $query = $this->db->prepare('
+ SELECT COUNT(`uid_owner`)
+ FROM `*PREFIX*share`
+ WHERE `uid_owner` = ?
+ ', 1);
+ $query->execute(array($this->ocName));
+ $sResult = $query->fetchColumn(0);
+ if(intval($sResult) === 1) {
+ $this->hasActiveShares = true;
+ return;
+ }
+
+ $query = $this->db->prepare('
+ SELECT COUNT(`owner`)
+ FROM `*PREFIX*share_external`
+ WHERE `owner` = ?
+ ', 1);
+ $query->execute(array($this->ocName));
+ $sResult = $query->fetchColumn(0);
+ if(intval($sResult) === 1) {
+ $this->hasActiveShares = true;
+ return;
+ }
+
+ $this->hasActiveShares = false;
+ }
+}
diff --git a/apps/user_ldap/lib/user/user.php b/apps/user_ldap/lib/user/user.php
index d4d2294307d..7f67ebca39b 100644
--- a/apps/user_ldap/lib/user/user.php
+++ b/apps/user_ldap/lib/user/user.php
@@ -92,7 +92,7 @@ class User {
* @param string the LDAP DN
* @param IUserTools $access an instance that implements IUserTools for
* LDAP interaction
- * @param \OCP\Config
+ * @param \OCP\IConfig
* @param FilesystemHelper
* @param \OCP\Image any empty instance
* @param LogWrapper
@@ -213,6 +213,31 @@ class User {
}
/**
+ * Stores a key-value pair in relation to this user
+ * @param string $key
+ * @param string $value
+ */
+ private function store($key, $value) {
+ $this->config->setUserValue($this->uid, 'user_ldap', $key, $value);
+ }
+
+ /**
+ * Stores the display name in the databae
+ * @param string $displayName
+ */
+ public function storeDisplayName($displayName) {
+ $this->store('displayName', $displayName);
+ }
+
+ /**
+ * Stores the LDAP Username in the Database
+ * @param string $userName
+ */
+ public function storeLDAPUserName($userName) {
+ $this->store('uid', $userName);
+ }
+
+ /**
* @brief checks whether an update method specified by feature was run
* already. If not, it will marked like this, because it is expected that
* the method will be run, when false is returned.
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index 1d7701440e9..2e4507a2585 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -56,7 +56,7 @@ class Wizard extends LDAPUtility {
Wizard::$l = \OC::$server->getL10N('user_ldap');
}
$this->access = $access;
- $this->result = new WizardResult;
+ $this->result = new WizardResult();
}
public function __destruct() {
@@ -120,7 +120,7 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function countUsers() {
- $filter = $this->configuration->ldapUserFilter;
+ $filter = $this->access->getFilterForUserCount();
$usersTotal = $this->countEntries($filter, 'users');
$usersTotal = ($usersTotal !== false) ? $usersTotal : 0;
@@ -132,9 +132,10 @@ class Wizard extends LDAPUtility {
/**
* counts users with a specified attribute
* @param string $attr
+ * @param bool $existsCheck
* @return int|bool
*/
- public function countUsersWithAttribute($attr) {
+ public function countUsersWithAttribute($attr, $existsCheck = false) {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapBase',
@@ -148,7 +149,51 @@ class Wizard extends LDAPUtility {
$attr . '=*'
));
- return $this->access->countUsers($filter);
+ $limit = ($existsCheck === false) ? null : 1;
+
+ return $this->access->countUsers($filter, array('dn'), $limit);
+ }
+
+ /**
+ * detects the display name attribute. If a setting is already present that
+ * returns at least one hit, the detection will be canceled.
+ * @return WizardResult|bool
+ * @throws \Exception
+ */
+ public function detectUserDisplayNameAttribute() {
+ if(!$this->checkRequirements(array('ldapHost',
+ 'ldapPort',
+ 'ldapBase',
+ 'ldapUserFilter',
+ ))) {
+ return false;
+ }
+
+ $attr = $this->configuration->ldapUserDisplayName;
+ if($attr !== 'displayName' && !empty($attr)) {
+ // most likely not the default value with upper case N,
+ // verify it still produces a result
+ $count = intval($this->countUsersWithAttribute($attr, true));
+ if($count > 0) {
+ //no change, but we sent it back to make sure the user interface
+ //is still correct, even if the ajax call was cancelled inbetween
+ $this->result->addChange('ldap_display_name', $attr);
+ return $this->result;
+ }
+ }
+
+ // first attribute that has at least one result wins
+ $displayNameAttrs = array('displayname', 'cn');
+ foreach ($displayNameAttrs as $attr) {
+ $count = intval($this->countUsersWithAttribute($attr, true));
+
+ if($count > 0) {
+ $this->applyFind('ldap_display_name', $attr);
+ return $this->result;
+ }
+ };
+
+ throw new \Exception(self::$l->t('Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.'));
}
/**
@@ -168,7 +213,7 @@ class Wizard extends LDAPUtility {
$attr = $this->configuration->ldapEmailAttribute;
if(!empty($attr)) {
- $count = intval($this->countUsersWithAttribute($attr));
+ $count = intval($this->countUsersWithAttribute($attr, true));
if($count > 0) {
return false;
}
@@ -189,7 +234,7 @@ class Wizard extends LDAPUtility {
}
if($winner !== '') {
- $this->result->addChange('ldap_email_attr', $winner);
+ $this->applyFind('ldap_email_attr', $winner);
if($writeLog) {
\OCP\Util::writeLog('user_ldap', 'The mail attribute has ' .
'automatically been reset, because the original value ' .
@@ -614,7 +659,8 @@ class Wizard extends LDAPUtility {
//this did not help :(
//Let's see whether we can parse the Host URL and convert the domain to
//a base DN
- $domain = Helper::getDomainFromURL($this->configuration->ldapHost);
+ $helper = new Helper();
+ $domain = $helper->getDomainFromURL($this->configuration->ldapHost);
if(!$domain) {
return false;
}
diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php
index ca61a53b196..a19ec0bda6f 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -28,16 +28,16 @@ OC_Util::checkAdminUser();
OCP\Util::addScript('user_ldap', 'ldapFilter');
OCP\Util::addScript('user_ldap', 'experiencedAdmin');
OCP\Util::addScript('user_ldap', 'settings');
-OCP\Util::addScript('core', 'jquery.multiselect');
+\OC_Util::addVendorScript('user_ldap', 'ui-multiselect/src/jquery.multiselect');
OCP\Util::addStyle('user_ldap', 'settings');
-OCP\Util::addStyle('core', 'jquery.multiselect');
-OCP\Util::addStyle('core', 'jquery-ui-1.10.0.custom');
+\OC_Util::addVendorStyle('user_ldap', 'ui-multiselect/jquery.multiselect');
// fill template
$tmpl = new OCP\Template('user_ldap', 'settings');
-$prefixes = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
-$hosts = \OCA\user_ldap\lib\Helper::getServerConfigurationHosts();
+$helper = new \OCA\user_ldap\lib\Helper();
+$prefixes = $helper->getServerConfigurationPrefixes();
+$hosts = $helper->getServerConfigurationHosts();
$wizardHtml = '';
$toc = array();
diff --git a/apps/user_ldap/tests/access.php b/apps/user_ldap/tests/access.php
index 8ff39800808..5c502f288eb 100644
--- a/apps/user_ldap/tests/access.php
+++ b/apps/user_ldap/tests/access.php
@@ -26,7 +26,7 @@ use \OCA\user_ldap\lib\Access;
use \OCA\user_ldap\lib\Connection;
use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_Access extends \PHPUnit_Framework_TestCase {
+class Test_Access extends \Test\TestCase {
private function getConnecterAndLdapMock() {
static $conMethods;
static $accMethods;
@@ -47,7 +47,8 @@ class Test_Access extends \PHPUnit_Framework_TestCase {
$this->getMock('\OCA\user_ldap\lib\FilesystemHelper'),
$this->getMock('\OCA\user_ldap\lib\LogWrapper'),
$this->getMock('\OCP\IAvatarManager'),
- $this->getMock('\OCP\Image')));
+ $this->getMock('\OCP\Image'),
+ $this->getMock('\OCP\IDBConnection')));
return array($lw, $connector, $um);
}
diff --git a/apps/user_ldap/tests/connection.php b/apps/user_ldap/tests/connection.php
index f51b0c83017..e3f29cec982 100644
--- a/apps/user_ldap/tests/connection.php
+++ b/apps/user_ldap/tests/connection.php
@@ -22,7 +22,7 @@
namespace OCA\user_ldap\tests;
-class Test_Connection extends \PHPUnit_Framework_TestCase {
+class Test_Connection extends \Test\TestCase {
public function testOriginalAgentUnchangedOnClone() {
//background: upon login a bind is done with the user credentials
diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php
index d1262e4f5b8..efd7f803f3b 100644
--- a/apps/user_ldap/tests/group_ldap.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -22,14 +22,12 @@
namespace OCA\user_ldap\tests;
-namespace OCA\user_ldap\tests;
-
use \OCA\user_ldap\GROUP_LDAP as GroupLDAP;
use \OCA\user_ldap\lib\Access;
use \OCA\user_ldap\lib\Connection;
use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_Group_Ldap extends \PHPUnit_Framework_TestCase {
+class Test_Group_Ldap extends \Test\TestCase {
private function getAccessMock() {
static $conMethods;
static $accMethods;
@@ -47,7 +45,8 @@ class Test_Group_Ldap extends \PHPUnit_Framework_TestCase {
$this->getMock('\OCA\user_ldap\lib\FilesystemHelper'),
$this->getMock('\OCA\user_ldap\lib\LogWrapper'),
$this->getMock('\OCP\IAvatarManager'),
- $this->getMock('\OCP\Image')
+ $this->getMock('\OCP\Image'),
+ $this->getMock('\OCP\IDBConnection')
);
$access = $this->getMock('\OCA\user_ldap\lib\Access',
$accMethods,
diff --git a/apps/user_ldap/tests/helper.php b/apps/user_ldap/tests/helper.php
deleted file mode 100644
index 07c24d64499..00000000000
--- a/apps/user_ldap/tests/helper.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/**
-* ownCloud
-*
-* @author Thomas Müller
-* @copyright 2014 Thomas Müller deepdiver@owncloud.com
-*
-*/
-
-namespace OCA\user_ldap\tests;
-
-use OCA\user_ldap\lib\Helper;
-
-class Test_Helper extends \PHPUnit_Framework_TestCase {
-
- public function testTableTruncate() {
-
- $statement = \OCP\DB::prepare('INSERT INTO `*PREFIX*ldap_user_mapping` (`ldap_dn`, `owncloud_name`, `directory_uuid`) VALUES (?, ?, ?)');
- $statement->execute(array('db01', 'oc1', '000-0000-0000'));
- $statement->execute(array('db02', 'oc2', '000-0000-0001'));
-
- $statement = \OCP\DB::prepare('SELECT count(*) FROM `*PREFIX*ldap_user_mapping`');
- $result = $statement->execute();
- $this->assertEquals(2, $result->fetchOne());
-
- Helper::clearMapping('user');
-
- $result = $statement->execute();
- $this->assertEquals(0, $result->fetchOne());
- }
-}
diff --git a/apps/user_ldap/tests/jobs/cleanup.php b/apps/user_ldap/tests/jobs/cleanup.php
new file mode 100644
index 00000000000..78bda66c54f
--- /dev/null
+++ b/apps/user_ldap/tests/jobs/cleanup.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\user_ldap\tests;
+
+class Test_CleanUp extends \PHPUnit_Framework_TestCase {
+ public function getMocks() {
+ $mocks = array();
+ $mocks['userBackend'] =
+ $this->getMockBuilder('\OCA\user_ldap\User_Proxy')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mocks['deletedUsersIndex'] =
+ $this->getMockBuilder('\OCA\user_ldap\lib\user\deletedUsersIndex')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mocks['ocConfig'] = $this->getMock('\OCP\IConfig');
+ $mocks['db'] = $this->getMock('\OCP\IDBConnection');
+ $mocks['helper'] = $this->getMock('\OCA\user_ldap\lib\Helper');
+
+ return $mocks;
+ }
+
+ /**
+ * clean up job must not run when there are disabled configurations
+ */
+ public function test_runNotAllowedByDisabledConfigurations() {
+ $args = $this->getMocks();
+ $args['helper']->expects($this->once())
+ ->method('haveDisabledConfigurations')
+ ->will($this->returnValue(true) );
+
+ $args['ocConfig']->expects($this->never())
+ ->method('getSystemValue');
+
+ $bgJob = new \OCA\User_LDAP\Jobs\CleanUp();
+ $bgJob->setArguments($args);
+
+ $result = $bgJob->isCleanUpAllowed();
+ $this->assertSame(false, $result);
+ }
+
+ /**
+ * clean up job must not run when LDAP Helper is broken i.e.
+ * returning unexpected results
+ */
+ public function test_runNotAllowedByBrokenHelper() {
+ $args = $this->getMocks();
+ $args['helper']->expects($this->once())
+ ->method('haveDisabledConfigurations')
+ ->will($this->throwException(new \Exception()));
+
+ $args['ocConfig']->expects($this->never())
+ ->method('getSystemValue');
+
+ $bgJob = new \OCA\User_LDAP\Jobs\CleanUp();
+ $bgJob->setArguments($args);
+
+ $result = $bgJob->isCleanUpAllowed();
+ $this->assertSame(false, $result);
+ }
+
+ /**
+ * clean up job must not run when it is not enabled
+ */
+ public function test_runNotAllowedBySysConfig() {
+ $args = $this->getMocks();
+ $args['helper']->expects($this->once())
+ ->method('haveDisabledConfigurations')
+ ->will($this->returnValue(false));
+
+ $args['ocConfig']->expects($this->once())
+ ->method('getSystemValue')
+ ->will($this->returnValue(false));
+
+ $bgJob = new \OCA\User_LDAP\Jobs\CleanUp();
+ $bgJob->setArguments($args);
+
+ $result = $bgJob->isCleanUpAllowed();
+ $this->assertSame(false, $result);
+ }
+
+ /**
+ * clean up job is allowed to run
+ */
+ public function test_runIsAllowed() {
+ $args = $this->getMocks();
+ $args['helper']->expects($this->once())
+ ->method('haveDisabledConfigurations')
+ ->will($this->returnValue(false));
+
+ $args['ocConfig']->expects($this->once())
+ ->method('getSystemValue')
+ ->will($this->returnValue(true));
+
+ $bgJob = new \OCA\User_LDAP\Jobs\CleanUp();
+ $bgJob->setArguments($args);
+
+ $result = $bgJob->isCleanUpAllowed();
+ $this->assertSame(true, $result);
+ }
+
+ /**
+ * check whether offset will be reset when it needs to
+ */
+ public function test_OffsetResetIsNecessary() {
+ $args = $this->getMocks();
+
+ $bgJob = new \OCA\User_LDAP\Jobs\CleanUp();
+ $bgJob->setArguments($args);
+
+ $result = $bgJob->isOffsetResetNecessary($bgJob->getChunkSize() - 1);
+ $this->assertSame(true, $result);
+ }
+
+ /**
+ * make sure offset is not reset when it is not due
+ */
+ public function test_OffsetResetIsNotNecessary() {
+ $args = $this->getMocks();
+
+ $bgJob = new \OCA\User_LDAP\Jobs\CleanUp();
+ $bgJob->setArguments($args);
+
+ $result = $bgJob->isOffsetResetNecessary($bgJob->getChunkSize());
+ $this->assertSame(false, $result);
+ }
+
+}
+
diff --git a/apps/user_ldap/tests/mapping/abstractmappingtest.php b/apps/user_ldap/tests/mapping/abstractmappingtest.php
new file mode 100644
index 00000000000..cafa36a4edb
--- /dev/null
+++ b/apps/user_ldap/tests/mapping/abstractmappingtest.php
@@ -0,0 +1,218 @@
+<?php
+/**
+* Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+* This file is licensed under the Affero General Public License version 3 or
+* later.
+* See the COPYING-README file.
+*/
+
+namespace OCA\user_ldap\tests\mapping;
+
+abstract class AbstractMappingTest extends \Test\TestCase {
+ abstract public function getMapper(\OCP\IDBConnection $dbMock);
+
+ /**
+ * kiss test on isColNameValid
+ */
+ public function testIsColNameValid() {
+ $dbMock = $this->getMock('\OCP\IDBConnection');
+ $mapper = $this->getMapper($dbMock);
+
+ $this->assertTrue($mapper->isColNameValid('ldap_dn'));
+ $this->assertFalse($mapper->isColNameValid('foobar'));
+ }
+
+ /**
+ * returns an array of test entries with dn, name and uuid as keys
+ * @return array
+ */
+ protected function getTestData() {
+ $data = array(
+ array(
+ 'dn' => 'uid=foobar,dc=example,dc=org',
+ 'name' => 'Foobar',
+ 'uuid' => '1111-AAAA-1234-CDEF',
+ ),
+ array(
+ 'dn' => 'uid=barfoo,dc=example,dc=org',
+ 'name' => 'Barfoo',
+ 'uuid' => '2222-BBBB-1234-CDEF',
+ ),
+ array(
+ 'dn' => 'uid=barabara,dc=example,dc=org',
+ 'name' => 'BaraBara',
+ 'uuid' => '3333-CCCC-1234-CDEF',
+ )
+ );
+
+ return $data;
+ }
+
+ /**
+ * calls map() on the given mapper and asserts result for true
+ * @param \OCA\User_LDAP\Mapping\AbstractMapping $mapper
+ * @param array $data
+ */
+ protected function mapEntries($mapper, $data) {
+ foreach($data as $entry) {
+ $done = $mapper->map($entry['dn'], $entry['name'], $entry['uuid']);
+ $this->assertTrue($done);
+ }
+ }
+
+ /**
+ * initalizes environment for a test run and returns an array with
+ * test objects. Preparing environment means that all mappings are cleared
+ * first and then filled with test entries.
+ * @return array 0 = \OCA\User_LDAP\Mapping\AbstractMapping, 1 = array of
+ * users or groups
+ */
+ private function initTest() {
+ $dbc = \OC::$server->getDatabaseConnection();
+ $mapper = $this->getMapper($dbc);
+ $data = $this->getTestData();
+ // make sure DB is pristine, then fill it with test entries
+ $mapper->clear();
+ $this->mapEntries($mapper, $data);
+
+ return array($mapper, $data);
+ }
+
+ /**
+ * tests map() method with input that should result in not-mapping.
+ * Hint: successful mapping is tested inherently with mapEntries().
+ */
+ public function testMap() {
+ list($mapper, $data) = $this->initTest();
+
+ // test that mapping will not happen when it shall not
+ $paramKeys = array('', 'dn', 'name', 'uuid');
+ foreach($paramKeys as $key) {
+ $failEntry = $data[0];
+ if(!empty($key)) {
+ $failEntry[$key] = 'do-not-get-mapped';
+ }
+ $isMapped = $mapper->map($failEntry['dn'], $failEntry['name'], $failEntry['uuid']);
+ $this->assertFalse($isMapped);
+ }
+ }
+
+ /**
+ * tests unmap() for both successfuly and not successful removing of
+ * mapping entries
+ */
+ public function testUnmap() {
+ list($mapper, $data) = $this->initTest();
+
+ foreach($data as $entry) {
+ $result = $mapper->unmap($entry['name']);
+ $this->assertTrue($result);
+ }
+
+ $result = $mapper->unmap('notAnEntry');
+ $this->assertFalse($result);
+ }
+
+ /**
+ * tests getDNByName(), getNameByDN() and getNameByUUID() for successful
+ * and unsuccessful requests.
+ */
+ public function testGetMethods() {
+ list($mapper, $data) = $this->initTest();
+
+ foreach($data as $entry) {
+ $fdn = $mapper->getDNByName($entry['name']);
+ $this->assertSame($fdn, $entry['dn']);
+ }
+ $fdn = $mapper->getDNByName('nosuchname');
+ $this->assertFalse($fdn);
+
+ foreach($data as $entry) {
+ $name = $mapper->getNameByDN($entry['dn']);
+ $this->assertSame($name, $entry['name']);
+ }
+ $name = $mapper->getNameByDN('nosuchdn');
+ $this->assertFalse($name);
+
+ foreach($data as $entry) {
+ $name = $mapper->getNameByUUID($entry['uuid']);
+ $this->assertSame($name, $entry['name']);
+ }
+ $name = $mapper->getNameByUUID('nosuchuuid');
+ $this->assertFalse($name);
+ }
+
+ /**
+ * tests getNamesBySearch() for successful and unsuccessful requests.
+ */
+ public function testSearch() {
+ list($mapper,) = $this->initTest();
+
+ $names = $mapper->getNamesBySearch('%oo%');
+ $this->assertTrue(is_array($names));
+ $this->assertSame(2, count($names));
+ $this->assertTrue(in_array('Foobar', $names));
+ $this->assertTrue(in_array('Barfoo', $names));
+ $names = $mapper->getNamesBySearch('nada');
+ $this->assertTrue(is_array($names));
+ $this->assertSame(0, count($names));
+ }
+
+ /**
+ * tests setDNbyUUID() for successful and unsuccessful update.
+ */
+ public function testSetMethod() {
+ list($mapper, $data) = $this->initTest();
+
+ $newDN = 'uid=modified,dc=example,dc=org';
+ $done = $mapper->setDNbyUUID($newDN, $data[0]['uuid']);
+ $this->assertTrue($done);
+ $fdn = $mapper->getDNByName($data[0]['name']);
+ $this->assertSame($fdn, $newDN);
+
+ $newDN = 'uid=notme,dc=example,dc=org';
+ $done = $mapper->setDNbyUUID($newDN, 'iamnothere');
+ $this->assertFalse($done);
+ $name = $mapper->getNameByDN($newDN);
+ $this->assertFalse($name);
+
+ }
+
+ /**
+ * tests clear() for successful update.
+ */
+ public function testClear() {
+ list($mapper, $data) = $this->initTest();
+
+ $done = $mapper->clear();
+ $this->assertTrue($done);
+ foreach($data as $entry) {
+ $name = $mapper->getNameByUUID($entry['uuid']);
+ $this->assertFalse($name);
+ }
+ }
+
+ /**
+ * tests getList() method
+ */
+ public function testList() {
+ list($mapper, $data) = $this->initTest();
+
+ // get all entries without specifying offset or limit
+ $results = $mapper->getList();
+ $this->assertSame(3, count($results));
+
+ // get all-1 entries by specifying offset, and an high limit
+ // specifying only offset without limit will not work by underlying lib
+ $results = $mapper->getList(1, 999);
+ $this->assertSame(count($data) - 1, count($results));
+
+ // get first 2 entries by limit, but not offset
+ $results = $mapper->getList(null, 2);
+ $this->assertSame(2, count($results));
+
+ // get 2nd entry by specifying both offset and limit
+ $results = $mapper->getList(1, 1);
+ $this->assertSame(1, count($results));
+ }
+}
diff --git a/apps/user_ldap/tests/mapping/groupmapping.php b/apps/user_ldap/tests/mapping/groupmapping.php
new file mode 100644
index 00000000000..11bb3f40e3a
--- /dev/null
+++ b/apps/user_ldap/tests/mapping/groupmapping.php
@@ -0,0 +1,17 @@
+<?php
+/**
+* Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+* This file is licensed under the Affero General Public License version 3 or
+* later.
+* See the COPYING-README file.
+*/
+
+namespace OCA\user_ldap\tests\mapping;
+
+use OCA\User_LDAP\Mapping\GroupMapping;
+
+class Test_GroupMapping extends AbstractMappingTest {
+ public function getMapper(\OCP\IDBConnection $dbMock) {
+ return new GroupMapping($dbMock);
+ }
+}
diff --git a/apps/user_ldap/tests/mapping/usermapping.php b/apps/user_ldap/tests/mapping/usermapping.php
new file mode 100644
index 00000000000..2debcecf397
--- /dev/null
+++ b/apps/user_ldap/tests/mapping/usermapping.php
@@ -0,0 +1,17 @@
+<?php
+/**
+* Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+* This file is licensed under the Affero General Public License version 3 or
+* later.
+* See the COPYING-README file.
+*/
+
+namespace OCA\user_ldap\tests\mapping;
+
+use OCA\User_LDAP\Mapping\UserMapping;
+
+class Test_UserMapping extends AbstractMappingTest {
+ public function getMapper(\OCP\IDBConnection $dbMock) {
+ return new UserMapping($dbMock);
+ }
+}
diff --git a/apps/user_ldap/tests/user/manager.php b/apps/user_ldap/tests/user/manager.php
index 7d687867213..4ce504365b8 100644
--- a/apps/user_ldap/tests/user/manager.php
+++ b/apps/user_ldap/tests/user/manager.php
@@ -24,7 +24,7 @@ namespace OCA\user_ldap\tests;
use OCA\user_ldap\lib\user\Manager;
-class Test_User_Manager extends \PHPUnit_Framework_TestCase {
+class Test_User_Manager extends \Test\TestCase {
private function getTestInstances() {
$access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
@@ -33,12 +33,13 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
$log = $this->getMock('\OCA\user_ldap\lib\LogWrapper');
$avaMgr = $this->getMock('\OCP\IAvatarManager');
$image = $this->getMock('\OCP\Image');
+ $dbc = $this->getMock('\OCP\IDBConnection');
- return array($access, $config, $filesys, $image, $log, $avaMgr);
+ return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc);
}
public function testGetByDNExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
$inputDN = 'cn=foo,dc=foobar,dc=bar';
@@ -57,7 +58,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
$access->expects($this->never())
->method('username2dn');
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
$manager->setLdapAccess($access);
$user = $manager->get($inputDN);
@@ -65,7 +66,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
}
public function testGetByEDirectoryDN() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
$inputDN = 'uid=foo,o=foobar,c=bar';
@@ -84,7 +85,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
$access->expects($this->never())
->method('username2dn');
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
$manager->setLdapAccess($access);
$user = $manager->get($inputDN);
@@ -92,7 +93,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
}
public function testGetByExoticDN() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
$inputDN = 'ab=cde,f=ghei,mno=pq';
@@ -111,7 +112,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
$access->expects($this->never())
->method('username2dn');
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
$manager->setLdapAccess($access);
$user = $manager->get($inputDN);
@@ -119,7 +120,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
}
public function testGetByDNNotExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
$inputDN = 'cn=gone,dc=foobar,dc=bar';
@@ -139,7 +140,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
->with($this->equalTo($inputDN))
->will($this->returnValue(false));
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
$manager->setLdapAccess($access);
$user = $manager->get($inputDN);
@@ -147,7 +148,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
}
public function testGetByUidExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
$dn = 'cn=foo,dc=foobar,dc=bar';
@@ -166,7 +167,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
->with($this->equalTo($uid))
->will($this->returnValue(false));
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
$manager->setLdapAccess($access);
$user = $manager->get($uid);
@@ -174,7 +175,7 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
}
public function testGetByUidNotExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
$dn = 'cn=foo,dc=foobar,dc=bar';
@@ -183,12 +184,12 @@ class Test_User_Manager extends \PHPUnit_Framework_TestCase {
$access->expects($this->never())
->method('dn2username');
- $access->expects($this->exactly(2))
+ $access->expects($this->exactly(1))
->method('username2dn')
->with($this->equalTo($uid))
->will($this->returnValue(false));
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
$manager->setLdapAccess($access);
$user = $manager->get($uid);
diff --git a/apps/user_ldap/tests/user/user.php b/apps/user_ldap/tests/user/user.php
index b66a9237266..5282a9f8b6e 100644
--- a/apps/user_ldap/tests/user/user.php
+++ b/apps/user_ldap/tests/user/user.php
@@ -24,7 +24,7 @@ namespace OCA\user_ldap\tests;
use OCA\user_ldap\lib\user\User;
-class Test_User_User extends \PHPUnit_Framework_TestCase {
+class Test_User_User extends \Test\TestCase {
private function getTestInstances() {
$access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
@@ -33,11 +33,12 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
$log = $this->getMock('\OCA\user_ldap\lib\LogWrapper');
$avaMgr = $this->getMock('\OCP\IAvatarManager');
$image = $this->getMock('\OCP\Image');
+ $dbc = $this->getMock('\OCP\IDBConnection');
- return array($access, $config, $filesys, $image, $log, $avaMgr);
+ return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc);
}
- private function getAdvancedMocks($cfMock, $fsMock, $logMock, $avaMgr) {
+ private function getAdvancedMocks($cfMock, $fsMock, $logMock, $avaMgr, $dbc) {
static $conMethods;
static $accMethods;
static $umMethods;
@@ -52,7 +53,7 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
$lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper');
$im = $this->getMock('\OCP\Image');
$um = $this->getMock('\OCA\user_ldap\lib\user\Manager',
- $umMethods, array($cfMock, $fsMock, $logMock, $avaMgr, $im));
+ $umMethods, array($cfMock, $fsMock, $logMock, $avaMgr, $im, $dbc));
$connector = $this->getMock('\OCA\user_ldap\lib\Connection',
$conMethods, array($lw, null, null));
$access = $this->getMock('\OCA\user_ldap\lib\Access',
@@ -76,11 +77,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateEmailProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->once())
->method('__get')
@@ -110,11 +111,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateEmailNotProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->once())
->method('__get')
@@ -140,11 +141,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateEmailNotConfigured() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->once())
->method('__get')
@@ -167,11 +168,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateQuotaAllProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->at(0))
->method('__get')
@@ -210,11 +211,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateQuotaDefaultProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->at(0))
->method('__get')
@@ -253,11 +254,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateQuotaIndividualProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->at(0))
->method('__get')
@@ -296,11 +297,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateQuotaNoneProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->at(0))
->method('__get')
@@ -334,11 +335,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateQuotaNoneConfigured() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$connection->expects($this->at(0))
->method('__get')
@@ -370,11 +371,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
//the testUpdateAvatar series also implicitely tests getAvatarImage
public function testUpdateAvatarJpegPhotoProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$access->expects($this->once())
->method('readAttribute')
@@ -419,11 +420,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateAvatarThumbnailPhotoProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$access->expects($this->at(0))
->method('readAttribute')
@@ -477,11 +478,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateAvatarNotProvided() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$access->expects($this->at(0))
->method('readAttribute')
@@ -523,11 +524,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateBeforeFirstLogin() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$config->expects($this->at(0))
->method('getUserValue')
@@ -559,11 +560,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateAfterFirstLogin() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$config->expects($this->at(0))
->method('getUserValue')
@@ -599,11 +600,11 @@ class Test_User_User extends \PHPUnit_Framework_TestCase {
}
public function testUpdateNoRefresh() {
- list($access, $config, $filesys, $image, $log, $avaMgr) =
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
$this->getTestInstances();
list($access, $connection) =
- $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc);
$config->expects($this->at(0))
->method('getUserValue')
diff --git a/apps/user_ldap/tests/user_ldap.php b/apps/user_ldap/tests/user_ldap.php
index e51f6cb5bb9..3fa4f2bf0a1 100644
--- a/apps/user_ldap/tests/user_ldap.php
+++ b/apps/user_ldap/tests/user_ldap.php
@@ -27,11 +27,13 @@ use \OCA\user_ldap\lib\Access;
use \OCA\user_ldap\lib\Connection;
use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
+class Test_User_Ldap_Direct extends \Test\TestCase {
protected $backend;
protected $access;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
\OC_User::clearBackends();
\OC_Group::clearBackends();
}
@@ -60,7 +62,8 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
$this->getMock('\OCA\user_ldap\lib\FilesystemHelper'),
$this->getMock('\OCA\user_ldap\lib\LogWrapper'),
$this->getMock('\OCP\IAvatarManager'),
- $this->getMock('\OCP\Image')
+ $this->getMock('\OCP\Image'),
+ $this->getMock('\OCP\IDBConnection')
);
$access = $this->getMock('\OCA\user_ldap\lib\Access',
@@ -98,9 +101,10 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
/**
* Prepares the Access mock for checkPassword tests
* @param \OCA\user_ldap\lib\Access $access mock
+ * @param bool noDisplayName
* @return void
*/
- private function prepareAccessForCheckPassword(&$access) {
+ private function prepareAccessForCheckPassword(&$access, $noDisplayName = false) {
$access->expects($this->once())
->method('escapeFilterPart')
->will($this->returnCallback(function($uid) {
@@ -120,15 +124,19 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
->method('fetchListOfUsers')
->will($this->returnCallback(function($filter) {
if($filter === 'roland') {
- return array('dnOfRoland,dc=test');
+ return array(array('dn' => 'dnOfRoland,dc=test'));
}
return array();
}));
+ $retVal = 'gunslinger';
+ if($noDisplayName === true) {
+ $retVal = false;
+ }
$access->expects($this->any())
->method('dn2username')
->with($this->equalTo('dnOfRoland,dc=test'))
- ->will($this->returnValue('gunslinger'));
+ ->will($this->returnValue($retVal));
$access->expects($this->any())
->method('stringResemblesDN')
@@ -149,7 +157,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'dt19');
@@ -160,7 +168,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'wrong');
@@ -171,17 +179,32 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = $backend->checkPassword('mallory', 'evil');
$this->assertFalse($result);
}
+ public function testCheckPasswordNoDisplayName() {
+ $access = $this->getAccessMock();
+
+ $this->prepareAccessForCheckPassword($access, true);
+ $access->expects($this->once())
+ ->method('username2dn')
+ ->will($this->returnValue(false));
+
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
+ \OC_User::useBackend($backend);
+
+ $result = $backend->checkPassword('roland', 'dt19');
+ $this->assertFalse($result);
+ }
+
public function testCheckPasswordPublicAPI() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('roland', 'dt19');
@@ -191,7 +214,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testCheckPasswordPublicAPIWrongPassword() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('roland', 'wrong');
@@ -201,13 +224,43 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testCheckPasswordPublicAPIWrongUser() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('mallory', 'evil');
$this->assertFalse($result);
}
+ public function testDeleteUserCancel() {
+ $access = $this->getAccessMock();
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
+ $result = $backend->deleteUser('notme');
+ $this->assertFalse($result);
+ }
+
+ public function testDeleteUserSuccess() {
+ $access = $this->getAccessMock();
+ $mapping = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mapping->expects($this->once())
+ ->method('unmap')
+ ->will($this->returnValue(true));
+ $access->expects($this->once())
+ ->method('getUserMapper')
+ ->will($this->returnValue($mapping));
+
+ $config = $this->getMock('\OCP\IConfig');
+ $config->expects($this->exactly(2))
+ ->method('getUserValue')
+ ->will($this->returnValue(1));
+
+ $backend = new UserLDAP($access, $config);
+
+ $result = $backend->deleteUser('jeremy');
+ $this->assertTrue($result);
+ }
+
/**
* Prepares the Access mock for getUsers tests
* @param \OCA\user_ldap\lib\Access $access mock
@@ -260,7 +313,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersNoParam() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers();
$this->assertEquals(3, count($result));
@@ -269,7 +322,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersLimitOffset() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('', 1, 2);
$this->assertEquals(1, count($result));
@@ -278,7 +331,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersLimitOffset2() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('', 2, 1);
$this->assertEquals(2, count($result));
@@ -287,7 +340,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersSearchWithResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('yo');
$this->assertEquals(2, count($result));
@@ -296,7 +349,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersSearchEmptyResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('nix');
$this->assertEquals(0, count($result));
@@ -305,7 +358,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersViaAPINoParam() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers();
@@ -315,7 +368,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersViaAPILimitOffset() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('', 1, 2);
@@ -325,7 +378,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersViaAPILimitOffset2() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('', 2, 1);
@@ -335,7 +388,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersViaAPISearchWithResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('yo');
@@ -345,7 +398,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetUsersViaAPISearchEmptyResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('nix');
@@ -354,7 +407,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testUserExists() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
$access->expects($this->any())
@@ -381,7 +434,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testUserExistsPublicAPI() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
\OC_User::useBackend($backend);
@@ -409,7 +462,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testDeleteUser() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
//we do not support deleting users at all
$result = $backend->deleteUser('gunslinger');
@@ -418,7 +471,8 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetHome() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access);
+ $config = $this->getMock('\OCP\IConfig');
+ $backend = new UserLDAP($access, $config);
$this->prepareMockForUserExists($access);
$access->connection->expects($this->any())
@@ -451,14 +505,17 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
}
}));
+ $datadir = '/my/data/dir';
+ $config->expects($this->once())
+ ->method('getSystemValue')
+ ->will($this->returnValue($datadir));
+
//absolut path
$result = $backend->getHome('gunslinger');
$this->assertEquals('/tmp/rolandshome/', $result);
//datadir-relativ path
$result = $backend->getHome('ladyofshadows');
- $datadir = \OCP\Config::getSystemValue('datadirectory',
- \OC::$SERVERROOT.'/data');
$this->assertEquals($datadir.'/susannah/', $result);
//no path at all – triggers OC default behaviour
@@ -496,7 +553,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetDisplayName() {
$access = $this->getAccessMock();
$this->prepareAccessForGetDisplayName($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
//with displayName
@@ -511,7 +568,7 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testGetDisplayNamePublicAPI() {
$access = $this->getAccessMock();
$this->prepareAccessForGetDisplayName($access);
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
\OC_User::useBackend($backend);
@@ -530,25 +587,11 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testCountUsers() {
$access = $this->getAccessMock();
- $access->connection->expects($this->once())
- ->method('__get')
- ->will($this->returnCallback(function($name) {
- if($name === 'ldapLoginFilter') {
- return 'uid=%uid';
- }
- return null;
- }));
-
$access->expects($this->once())
->method('countUsers')
- ->will($this->returnCallback(function($filter, $a, $b, $c) {
- if($filter !== 'uid=*') {
- return false;
- }
- return 5;
- }));
+ ->will($this->returnValue(5));
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->countUsers();
$this->assertEquals(5, $result);
@@ -557,25 +600,11 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testCountUsersFailing() {
$access = $this->getAccessMock();
- $access->connection->expects($this->once())
- ->method('__get')
- ->will($this->returnCallback(function($name) {
- if($name === 'ldapLoginFilter') {
- return 'invalidFilter';
- }
- return null;
- }));
-
$access->expects($this->once())
->method('countUsers')
- ->will($this->returnCallback(function($filter, $a, $b, $c) {
- if($filter !== 'uid=*') {
- return false;
- }
- return 5;
- }));
+ ->will($this->returnValue(false));
- $backend = new UserLDAP($access);
+ $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->countUsers();
$this->assertFalse($result);
diff --git a/apps/user_ldap/tests/wizard.php b/apps/user_ldap/tests/wizard.php
index 1f420f9ee8a..7284e466536 100644
--- a/apps/user_ldap/tests/wizard.php
+++ b/apps/user_ldap/tests/wizard.php
@@ -29,8 +29,9 @@ use \OCA\user_ldap\lib\Wizard;
// use \OCA\user_ldap\lib\Configuration;
// use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_Wizard extends \PHPUnit_Framework_TestCase {
- public function setUp() {
+class Test_Wizard extends \Test\TestCase {
+ protected function setUp() {
+ parent::setUp();
//we need to make sure the consts are defined, otherwise tests will fail
//on systems without php5_ldap
$ldapConsts = array('LDAP_OPT_PROTOCOL_VERSION',
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index ae4dfec5118..051e760105b 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -26,8 +26,27 @@
namespace OCA\user_ldap;
use OCA\user_ldap\lib\BackendUtility;
+use OCA\user_ldap\lib\Access;
+use OCA\user_ldap\lib\user\OfflineUser;
+use OCA\User_LDAP\lib\User\User;
+use OCP\IConfig;
+
+class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface {
+ /** @var string[] $homesToKill */
+ protected $homesToKill = array();
+
+ /** @var \OCP\IConfig */
+ protected $ocConfig;
+
+ /**
+ * @param \OCA\user_ldap\lib\Access $access
+ * @param \OCP\IConfig $ocConfig
+ */
+ public function __construct(Access $access, IConfig $ocConfig) {
+ parent::__construct($access);
+ $this->ocConfig = $ocConfig;
+ }
-class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
/**
* checks whether the user is allowed to change his avatar in ownCloud
* @param string $uid the ownCloud user name
@@ -35,7 +54,7 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
*/
public function canChangeAvatar($uid) {
$user = $this->access->userManager->get($uid);
- if(is_null($user)) {
+ if(!$user instanceof User) {
return false;
}
if($user->getAvatarImage() === false) {
@@ -49,7 +68,7 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
* Check if the password is correct
* @param string $uid The username
* @param string $password The password
- * @return boolean
+ * @return false|string
*
* Check if the password is correct without logging in the user
*/
@@ -57,15 +76,23 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
$uid = $this->access->escapeFilterPart($uid);
//find out dn of the user name
+ $attrs = array($this->access->connection->ldapUserDisplayName, 'dn',
+ 'uid', 'samaccountname');
$filter = \OCP\Util::mb_str_replace(
'%uid', $uid, $this->access->connection->ldapLoginFilter, 'UTF-8');
- $ldap_users = $this->access->fetchListOfUsers($filter, 'dn');
- if(count($ldap_users) < 1) {
+ $users = $this->access->fetchListOfUsers($filter, $attrs);
+ if(count($users) < 1) {
return false;
}
- $dn = $ldap_users[0];
-
+ $dn = $users[0]['dn'];
$user = $this->access->userManager->get($dn);
+ if(!$user instanceof User) {
+ \OCP\Util::writeLog('user_ldap',
+ 'LDAP Login: Could not get user object for DN ' . $dn .
+ '. Maybe the LDAP entry has no set display name attribute?',
+ \OCP\Util::WARN);
+ return false;
+ }
if($user->getUsername() !== false) {
//are the credentials OK?
if(!$this->access->areCredentialsValid($dn, $password)) {
@@ -73,6 +100,15 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
}
$user->markLogin();
+ if(isset($users[0][$this->access->connection->ldapUserDisplayName])) {
+ $dpn = $users[0][$this->access->connection->ldapUserDisplayName];
+ $user->storeDisplayName($dpn);
+ }
+ if(isset($users[0]['uid'])) {
+ $user->storeLDAPUserName($users[0]['uid']);
+ } else if(isset($users[0]['samaccountname'])) {
+ $user->storeLDAPUserName($users[0]['samaccountname']);
+ }
return $user->getUsername();
}
@@ -87,7 +123,7 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
* Get a list of all users.
*/
public function getUsers($search = '', $limit = 10, $offset = 0) {
- $search = $this->access->escapeFilterPart($search);
+ $search = $this->access->escapeFilterPart($search, true);
$cachekey = 'getUsers-'.$search.'-'.$limit.'-'.$offset;
//check if users are cached, if so return
@@ -122,6 +158,33 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
}
/**
+ * checks whether a user is still available on LDAP
+ * @param string|\OCA\User_LDAP\lib\user\User $user either the ownCloud user
+ * name or an instance of that user
+ * @return bool
+ */
+ public function userExistsOnLDAP($user) {
+ if(is_string($user)) {
+ $user = $this->access->userManager->get($user);
+ }
+ if(!$user instanceof User) {
+ return false;
+ }
+
+ $dn = $user->getDN();
+ //check if user really still exists by reading its entry
+ if(!is_array($this->access->readAttribute($dn, ''))) {
+ $lcr = $this->access->connection->getConnectionResource();
+ if(is_null($lcr)) {
+ throw new \Exception('No LDAP Connection to server ' . $this->access->connection->ldapHost);
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
* check if a user exists
* @param string $uid the username
* @return boolean
@@ -137,36 +200,55 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
$this->access->connection->ldapHost, \OCP\Util::DEBUG);
$this->access->connection->writeToCache('userExists'.$uid, false);
return false;
+ } else if($user instanceof OfflineUser) {
+ //express check for users marked as deleted. Returning true is
+ //necessary for cleanup
+ return true;
}
- $dn = $user->getDN();
- //check if user really still exists by reading its entry
- if(!is_array($this->access->readAttribute($dn, ''))) {
- \OCP\Util::writeLog('user_ldap', 'LDAP says no user '.$dn.' on '.
- $this->access->connection->ldapHost, \OCP\Util::DEBUG);
- $this->access->connection->writeToCache('userExists'.$uid, false);
+
+ try {
+ $result = $this->userExistsOnLDAP($user);
+ $this->access->connection->writeToCache('userExists'.$uid, $result);
+ if($result === true) {
+ $user->update();
+ }
+ return $result;
+ } catch (\Exception $e) {
+ \OCP\Util::writeLog('user_ldap', $e->getMessage(), \OCP\Util::WARN);
return false;
}
-
- $this->access->connection->writeToCache('userExists'.$uid, true);
- $user->update();
- return true;
}
/**
- * delete a user
+ * returns whether a user was deleted in LDAP
+ *
* @param string $uid The username of the user to delete
* @return bool
- *
- * Deletes a user
*/
public function deleteUser($uid) {
- return false;
+ $marked = $this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0);
+ if(intval($marked) === 0) {
+ \OC::$server->getLogger()->notice(
+ 'User '.$uid . ' is not marked as deleted, not cleaning up.',
+ array('app' => 'user_ldap'));
+ return false;
+ }
+ \OC::$server->getLogger()->info('Cleaning up after user ' . $uid,
+ array('app' => 'user_ldap'));
+
+ //Get Home Directory out of user preferences so we can return it later,
+ //necessary for removing directories as done by OC_User.
+ $home = $this->ocConfig->getUserValue($uid, 'user_ldap', 'homePath', '');
+ $this->homesToKill[$uid] = $home;
+ $this->access->getUserMapper()->unmap($uid);
+
+ return true;
}
/**
* get the user's home directory
* @param string $uid the username
- * @return boolean
+ * @return string|bool
*/
public function getHome($uid) {
// user Exists check required as it is not done in user proxy!
@@ -174,6 +256,11 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
return false;
}
+ if(isset($this->homesToKill[$uid]) && !empty($this->homesToKill[$uid])) {
+ //a deleted user who needs some clean up
+ return $this->homesToKill[$uid];
+ }
+
$cacheKey = 'getHome'.$uid;
if($this->access->connection->isCached($cacheKey)) {
return $this->access->connection->getFromCache($cacheKey);
@@ -193,16 +280,23 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
) {
$homedir = $path;
} else {
- $homedir = \OCP\Config::getSystemValue('datadirectory',
+ $homedir = $this->ocConfig->getSystemValue('datadirectory',
\OC::$SERVERROOT.'/data' ) . '/' . $homedir[0];
}
$this->access->connection->writeToCache($cacheKey, $homedir);
+ //we need it to store it in the DB as well in case a user gets
+ //deleted so we can clean up afterwards
+ $this->ocConfig->setUserValue(
+ $uid, 'user_ldap', 'homePath', $homedir
+ );
+ //TODO: if home directory changes, the old one needs to be removed.
return $homedir;
}
}
//false will apply default behaviour as defined and done by OC_User
$this->access->connection->writeToCache($cacheKey, false);
+ $this->ocConfig->setUserValue($uid, 'user_ldap', 'homePath', '');
return false;
}
@@ -284,9 +378,22 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
* @return int|bool
*/
public function countUsers() {
- $filter = \OCP\Util::mb_str_replace(
- '%uid', '*', $this->access->connection->ldapLoginFilter, 'UTF-8');
+ $filter = $this->access->getFilterForUserCount();
+ $cacheKey = 'countUsers-'.$filter;
+ if(!is_null($entries = $this->access->connection->getFromCache($cacheKey))) {
+ return $entries;
+ }
$entries = $this->access->countUsers($filter);
+ $this->access->connection->writeToCache($cacheKey, $entries);
return $entries;
}
+
+ /**
+ * Backend name to be shown in user management
+ * @return string the name of the backend to be shown
+ */
+ public function getBackendName(){
+ return 'LDAP';
+ }
+
}
diff --git a/apps/user_ldap/user_proxy.php b/apps/user_ldap/user_proxy.php
index fa4d6939303..f5912fe1355 100644
--- a/apps/user_ldap/user_proxy.php
+++ b/apps/user_ldap/user_proxy.php
@@ -24,8 +24,11 @@
namespace OCA\user_ldap;
use OCA\user_ldap\lib\ILDAPWrapper;
+use OCA\User_LDAP\lib\User\User;
+use \OCA\user_ldap\User_LDAP;
+use OCP\IConfig;
-class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
+class User_Proxy extends lib\Proxy implements \OCP\IUserBackend, \OCP\UserInterface {
private $backends = array();
private $refBackend = null;
@@ -33,11 +36,11 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
* Constructor
* @param array $serverConfigPrefixes array containing the config Prefixes
*/
- public function __construct($serverConfigPrefixes, ILDAPWrapper $ldap) {
+ public function __construct(array $serverConfigPrefixes, ILDAPWrapper $ldap, IConfig $ocConfig) {
parent::__construct($ldap);
foreach($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] =
- new \OCA\user_ldap\USER_LDAP($this->getAccess($configPrefix));
+ new User_LDAP($this->getAccess($configPrefix), $ocConfig);
if(is_null($this->refBackend)) {
$this->refBackend = &$this->backends[$configPrefix];
}
@@ -118,6 +121,14 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
}
/**
+ * Backend name to be shown in user management
+ * @return string the name of the backend to be shown
+ */
+ public function getBackendName() {
+ return $this->refBackend->getBackendName();
+ }
+
+ /**
* Get a list of all users
* @return string[] with all uids
*
@@ -145,6 +156,17 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
}
/**
+ * check if a user exists on LDAP
+ * @param string|OCA\User_LDAP\lib\User\User $user either the ownCloud user
+ * name or an instance of that user
+ * @return boolean
+ */
+ public function userExistsOnLDAP($user) {
+ $id = ($user instanceof User) ? $user->getUsername() : $user;
+ return $this->handleRequest($id, 'userExistsOnLDAP', array($user));
+ }
+
+ /**
* Check if the password is correct
* @param string $uid The username
* @param string $password The password
@@ -209,7 +231,7 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
* Deletes a user
*/
public function deleteUser($uid) {
- return false;
+ return $this->handleRequest($uid, 'deleteUser', array($uid));
}
/**
diff --git a/apps/user_ldap/vendor/ui-multiselect/MIT-LICENSE b/apps/user_ldap/vendor/ui-multiselect/MIT-LICENSE
new file mode 100644
index 00000000000..2dc8e79e3ad
--- /dev/null
+++ b/apps/user_ldap/vendor/ui-multiselect/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2011 Eric Hynds
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/core/css/jquery.multiselect.css b/apps/user_ldap/vendor/ui-multiselect/jquery.multiselect.css
index 9b81c3bdcfb..9b81c3bdcfb 100644
--- a/core/css/jquery.multiselect.css
+++ b/apps/user_ldap/vendor/ui-multiselect/jquery.multiselect.css
diff --git a/core/js/jquery.multiselect.js b/apps/user_ldap/vendor/ui-multiselect/src/jquery.multiselect.js
index 16ae4264177..16ae4264177 100644
--- a/core/js/jquery.multiselect.js
+++ b/apps/user_ldap/vendor/ui-multiselect/src/jquery.multiselect.js
diff --git a/apps/user_webdavauth/l10n/bs.js b/apps/user_webdavauth/l10n/bs.js
index becf43aa7f4..5cdb03a07f1 100644
--- a/apps/user_webdavauth/l10n/bs.js
+++ b/apps/user_webdavauth/l10n/bs.js
@@ -1,6 +1,9 @@
OC.L10N.register(
"user_webdavauth",
{
- "Save" : "Spasi"
+ "WebDAV Authentication" : "WebDAV autentifikacija",
+ "Address:" : "Adresa:",
+ "Save" : "Spasi",
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Korisnikovi akreditivi biti će poslani na ovu adresu. Ovaj plugin proverava odgovor i tumači status HTTP kodova 401 i 403 kao nevažeće akreditive, i sve druge odgovore kao validne akreditive."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/user_webdavauth/l10n/bs.json b/apps/user_webdavauth/l10n/bs.json
index 18aa0254d19..823be754a41 100644
--- a/apps/user_webdavauth/l10n/bs.json
+++ b/apps/user_webdavauth/l10n/bs.json
@@ -1,4 +1,7 @@
{ "translations": {
- "Save" : "Spasi"
+ "WebDAV Authentication" : "WebDAV autentifikacija",
+ "Address:" : "Adresa:",
+ "Save" : "Spasi",
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Korisnikovi akreditivi biti će poslani na ovu adresu. Ovaj plugin proverava odgovor i tumači status HTTP kodova 401 i 403 kao nevažeće akreditive, i sve druge odgovore kao validne akreditive."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/user_webdavauth/l10n/fi.js b/apps/user_webdavauth/l10n/fi.js
new file mode 100644
index 00000000000..09bd8e55e7f
--- /dev/null
+++ b/apps/user_webdavauth/l10n/fi.js
@@ -0,0 +1,6 @@
+OC.L10N.register(
+ "user_webdavauth",
+ {
+ "Save" : "Tallenna"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_webdavauth/l10n/fi.json b/apps/user_webdavauth/l10n/fi.json
new file mode 100644
index 00000000000..f4a8647859b
--- /dev/null
+++ b/apps/user_webdavauth/l10n/fi.json
@@ -0,0 +1,4 @@
+{ "translations": {
+ "Save" : "Tallenna"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_webdavauth/l10n/fr.js b/apps/user_webdavauth/l10n/fr.js
index 5b36d5aa5b1..a53302d4a6d 100644
--- a/apps/user_webdavauth/l10n/fr.js
+++ b/apps/user_webdavauth/l10n/fr.js
@@ -4,6 +4,6 @@ OC.L10N.register(
"WebDAV Authentication" : "Authentification WebDAV",
"Address:" : "Adresse :",
"Save" : "Sauvegarder",
- "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Les informations de connexion de l'utilisateur seront envoyées à cette adresse. Ce module analyse le code de la réponse HTTP et considère les codes 401 et 403 comme une authentification invalide et tout autre valeur comme une authentification valide."
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Les informations de connexion de l'utilisateur seront envoyées à cette adresse. Ce module analyse le code de la réponse HTTP et considère les codes 401 et 403 comme une authentification non valable et toute autre valeur comme une authentification valable."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/user_webdavauth/l10n/fr.json b/apps/user_webdavauth/l10n/fr.json
index fe8c4b521ad..93d631c8ed6 100644
--- a/apps/user_webdavauth/l10n/fr.json
+++ b/apps/user_webdavauth/l10n/fr.json
@@ -2,6 +2,6 @@
"WebDAV Authentication" : "Authentification WebDAV",
"Address:" : "Adresse :",
"Save" : "Sauvegarder",
- "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Les informations de connexion de l'utilisateur seront envoyées à cette adresse. Ce module analyse le code de la réponse HTTP et considère les codes 401 et 403 comme une authentification invalide et tout autre valeur comme une authentification valide."
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Les informations de connexion de l'utilisateur seront envoyées à cette adresse. Ce module analyse le code de la réponse HTTP et considère les codes 401 et 403 comme une authentification non valable et toute autre valeur comme une authentification valable."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/user_webdavauth/l10n/id.js b/apps/user_webdavauth/l10n/id.js
index a7902dbf3b2..d71da240e27 100644
--- a/apps/user_webdavauth/l10n/id.js
+++ b/apps/user_webdavauth/l10n/id.js
@@ -2,7 +2,8 @@ OC.L10N.register(
"user_webdavauth",
{
"WebDAV Authentication" : "Otentikasi WebDAV",
+ "Address:" : "Alamat:",
"Save" : "Simpan",
- "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Kredensial pengguna akan dikirim ke alamat ini. Pengaya ini memeriksa respon dan akan menafsirkan kode status HTTP 401 dan 403 sebagai kredensial yang tidak valid, dan semua tanggapan lain akan dianggap sebagai kredensial yang valid."
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Kredensial pengguna akan dikirim ke alamat ini. Pengaya ini memeriksa respon dan akan mengartikan kode status HTTP 401 dan 403 sebagai kredensial yang tidak valid, dan semua tanggapan lain akan dianggap sebagai kredensial yang valid."
},
"nplurals=1; plural=0;");
diff --git a/apps/user_webdavauth/l10n/id.json b/apps/user_webdavauth/l10n/id.json
index 88638eb47c6..ba327c72dda 100644
--- a/apps/user_webdavauth/l10n/id.json
+++ b/apps/user_webdavauth/l10n/id.json
@@ -1,6 +1,7 @@
{ "translations": {
"WebDAV Authentication" : "Otentikasi WebDAV",
+ "Address:" : "Alamat:",
"Save" : "Simpan",
- "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Kredensial pengguna akan dikirim ke alamat ini. Pengaya ini memeriksa respon dan akan menafsirkan kode status HTTP 401 dan 403 sebagai kredensial yang tidak valid, dan semua tanggapan lain akan dianggap sebagai kredensial yang valid."
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Kredensial pengguna akan dikirim ke alamat ini. Pengaya ini memeriksa respon dan akan mengartikan kode status HTTP 401 dan 403 sebagai kredensial yang tidak valid, dan semua tanggapan lain akan dianggap sebagai kredensial yang valid."
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_webdavauth/l10n/kn.js b/apps/user_webdavauth/l10n/kn.js
new file mode 100644
index 00000000000..2c7f6526c06
--- /dev/null
+++ b/apps/user_webdavauth/l10n/kn.js
@@ -0,0 +1,6 @@
+OC.L10N.register(
+ "user_webdavauth",
+ {
+ "Save" : "ಉಳಿಸಿ"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/user_webdavauth/l10n/kn.json b/apps/user_webdavauth/l10n/kn.json
new file mode 100644
index 00000000000..5699698e22c
--- /dev/null
+++ b/apps/user_webdavauth/l10n/kn.json
@@ -0,0 +1,4 @@
+{ "translations": {
+ "Save" : "ಉಳಿಸಿ"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/user_webdavauth/l10n/mn.js b/apps/user_webdavauth/l10n/mn.js
new file mode 100644
index 00000000000..ecbe9c6693c
--- /dev/null
+++ b/apps/user_webdavauth/l10n/mn.js
@@ -0,0 +1,8 @@
+OC.L10N.register(
+ "user_webdavauth",
+ {
+ "WebDAV Authentication" : "WebDAV Нотолгоо",
+ "Address:" : "Хаяг:",
+ "Save" : "Хадгалах"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_webdavauth/l10n/mn.json b/apps/user_webdavauth/l10n/mn.json
new file mode 100644
index 00000000000..ba322132591
--- /dev/null
+++ b/apps/user_webdavauth/l10n/mn.json
@@ -0,0 +1,6 @@
+{ "translations": {
+ "WebDAV Authentication" : "WebDAV Нотолгоо",
+ "Address:" : "Хаяг:",
+ "Save" : "Хадгалах"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_webdavauth/l10n/sk.php b/apps/user_webdavauth/l10n/sk.php
deleted file mode 100644
index 9efe9fe6549..00000000000
--- a/apps/user_webdavauth/l10n/sk.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Save" => "Uložiť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/user_webdavauth/l10n/sr@latin.js b/apps/user_webdavauth/l10n/sr@latin.js
index c6b89e58319..cf03aa604dd 100644
--- a/apps/user_webdavauth/l10n/sr@latin.js
+++ b/apps/user_webdavauth/l10n/sr@latin.js
@@ -1,6 +1,9 @@
OC.L10N.register(
"user_webdavauth",
{
- "Save" : "Snimi"
+ "WebDAV Authentication" : "WebDAV provera identiteta",
+ "Address:" : "Adresa:",
+ "Save" : "Snimi",
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Korisnički podaci za proveru identiteta će biti poslati na ovu adresu. Ova komponenta proverava odgovor i protumačiće HTTP statusne kodove 401 i 403 kao neispravne podatke za proveru identiteta, a sve ostale odgovore kao ispravne."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/user_webdavauth/l10n/sr@latin.json b/apps/user_webdavauth/l10n/sr@latin.json
index 5cca2be8eec..d54f467400e 100644
--- a/apps/user_webdavauth/l10n/sr@latin.json
+++ b/apps/user_webdavauth/l10n/sr@latin.json
@@ -1,4 +1,7 @@
{ "translations": {
- "Save" : "Snimi"
+ "WebDAV Authentication" : "WebDAV provera identiteta",
+ "Address:" : "Adresa:",
+ "Save" : "Snimi",
+ "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Korisnički podaci za proveru identiteta će biti poslati na ovu adresu. Ova komponenta proverava odgovor i protumačiće HTTP statusne kodove 401 i 403 kao neispravne podatke za proveru identiteta, a sve ostale odgovore kao ispravne."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/user_webdavauth/l10n/sv.js b/apps/user_webdavauth/l10n/sv.js
index d80f3c22307..b16f60985ea 100644
--- a/apps/user_webdavauth/l10n/sv.js
+++ b/apps/user_webdavauth/l10n/sv.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"user_webdavauth",
{
- "WebDAV Authentication" : "WebDAV Autentisering",
+ "WebDAV Authentication" : "WebDAV-autentisering",
"Address:" : "Adress:",
"Save" : "Spara",
"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "ownCloud kommer skicka användaruppgifterna till denna URL. Denna plugin kontrollerar svaret och tolkar HTTP-statuskoderna 401 och 403 som felaktiga uppgifter, och alla andra svar som giltiga uppgifter."
diff --git a/apps/user_webdavauth/l10n/sv.json b/apps/user_webdavauth/l10n/sv.json
index f11a1610ec3..fa09724c784 100644
--- a/apps/user_webdavauth/l10n/sv.json
+++ b/apps/user_webdavauth/l10n/sv.json
@@ -1,5 +1,5 @@
{ "translations": {
- "WebDAV Authentication" : "WebDAV Autentisering",
+ "WebDAV Authentication" : "WebDAV-autentisering",
"Address:" : "Adress:",
"Save" : "Spara",
"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "ownCloud kommer skicka användaruppgifterna till denna URL. Denna plugin kontrollerar svaret och tolkar HTTP-statuskoderna 401 och 403 som felaktiga uppgifter, och alla andra svar som giltiga uppgifter."
diff --git a/apps/user_webdavauth/user_webdavauth.php b/apps/user_webdavauth/user_webdavauth.php
index 86e5b916f3d..1154a7865be 100644
--- a/apps/user_webdavauth/user_webdavauth.php
+++ b/apps/user_webdavauth/user_webdavauth.php
@@ -21,7 +21,7 @@
*
*/
-class OC_USER_WEBDAVAUTH extends OC_User_Backend {
+class OC_USER_WEBDAVAUTH extends OC_User_Backend implements \OCP\IUserBackend {
protected $webdavauth_url;
public function __construct() {
@@ -86,4 +86,12 @@ class OC_USER_WEBDAVAUTH extends OC_User_Backend {
return $returnArray;
}
+
+ /**
+ * Backend name to be shown in user management
+ * @return string the name of the backend to be shown
+ */
+ public function getBackendName(){
+ return 'WebDAV';
+ }
}
diff --git a/autotest-external.sh b/autotest-external.sh
new file mode 100755
index 00000000000..761477a4c97
--- /dev/null
+++ b/autotest-external.sh
@@ -0,0 +1,308 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# @author Thomas Müller
+# @author Morris Jobke
+# @copyright 2012, 2013 Thomas Müller thomas.mueller@tmit.eu
+# @copyright 2014 Morris Jobke hey@morrisjobke.de
+#
+
+#$EXECUTOR_NUMBER is set by Jenkins and allows us to run autotest in parallel
+DATABASENAME=oc_autotest$EXECUTOR_NUMBER
+DATABASEUSER=oc_autotest$EXECUTOR_NUMBER
+ADMINLOGIN=admin$EXECUTOR_NUMBER
+BASEDIR=$PWD
+
+DBCONFIGS="sqlite mysql pgsql oci"
+PHPUNIT=$(which phpunit)
+
+function print_syntax {
+ echo -e "Syntax: ./autotest-external.sh [dbconfigname] [startfile]\n" >&2
+ echo -e "\t\"dbconfigname\" can be one of: $DBCONFIGS" >&2
+ echo -e "\t\"startfile\" is the name of a start file inside the env/ folder in the files_external tests" >&2
+ echo -e "\nExample: ./autotest.sh sqlite webdav-ownCloud" >&2
+ echo "will run the external suite from \"apps/files_external/tests/env/start-webdav-ownCloud.sh\"" >&2
+ echo -e "\nIf no arguments are specified, all available external backends will be run with all database configs" >&2
+}
+
+if ! [ -x "$PHPUNIT" ]; then
+ echo "phpunit executable not found, please install phpunit version >= 3.7" >&2
+ exit 3
+fi
+
+PHPUNIT_VERSION=$("$PHPUNIT" --version | cut -d" " -f2)
+PHPUNIT_MAJOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f1)
+PHPUNIT_MINOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f2)
+
+if ! [ $PHPUNIT_MAJOR_VERSION -gt 3 -o \( $PHPUNIT_MAJOR_VERSION -eq 3 -a $PHPUNIT_MINOR_VERSION -ge 7 \) ]; then
+ echo "phpunit version >= 3.7 required. Version found: $PHPUNIT_VERSION" >&2
+ exit 4
+fi
+
+if ! [ \( -w config -a ! -f config/config.php \) -o \( -f config/config.php -a -w config/config.php \) ]; then
+ echo "Please enable write permissions on config and config/config.php" >&2
+ exit 1
+fi
+
+if [ "$1" ]; then
+ FOUND=0
+ for DBCONFIG in $DBCONFIGS; do
+ if [ "$1" = $DBCONFIG ]; then
+ FOUND=1
+ break
+ fi
+ done
+ if [ $FOUND = 0 ]; then
+ echo -e "Unknown database config name \"$1\"\n" >&2
+ print_syntax
+ exit 2
+ fi
+fi
+
+# Back up existing (dev) config if one exists
+if [ -f config/config.php ]; then
+ mv config/config.php config/config-autotest-backup.php
+fi
+
+function restore_config {
+ # Restore existing config
+ if [ -f config/config-autotest-backup.php ]; then
+ mv config/config-autotest-backup.php config/config.php
+ fi
+}
+
+# restore config on exit, even when killed
+trap restore_config SIGINT SIGTERM
+
+# use tmpfs for datadir - should speedup unit test execution
+if [ -d /dev/shm ]; then
+ DATADIR=/dev/shm/data-autotest$EXECUTOR_NUMBER
+else
+ DATADIR=$BASEDIR/data-autotest
+fi
+
+echo "Using database $DATABASENAME"
+
+# create autoconfig for sqlite, mysql and postgresql
+cat > ./tests/autoconfig-sqlite.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'sqlite',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+);
+DELIM
+
+cat > ./tests/autoconfig-mysql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'mysql',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+ 'dbuser' => '$DATABASEUSER',
+ 'dbname' => '$DATABASENAME',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+cat > ./tests/autoconfig-pgsql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'pgsql',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+ 'dbuser' => '$DATABASEUSER',
+ 'dbname' => '$DATABASENAME',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+cat > ./tests/autoconfig-oci.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'oci',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+ 'dbuser' => '$DATABASENAME',
+ 'dbname' => 'XE',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+function execute_tests {
+ echo "Setup environment for $1 testing ..."
+ # back to root folder
+ cd "$BASEDIR"
+
+ # revert changes to tests/data
+ git checkout tests/data
+
+ # reset data directory
+ rm -rf "$DATADIR"
+ mkdir "$DATADIR"
+
+ # remove the old config file
+ #rm -rf config/config.php
+ cp tests/preseed-config.php config/config.php
+
+ # drop database
+ if [ "$1" == "mysql" ] ; then
+ mysql -u $DATABASEUSER -powncloud -e "DROP DATABASE IF EXISTS $DATABASENAME" || true
+ fi
+ if [ "$1" == "pgsql" ] ; then
+ dropdb -U $DATABASEUSER $DATABASENAME || true
+ fi
+ if [ "$1" == "oci" ] ; then
+ echo "drop the database"
+ sqlplus -s -l / as sysdba <<EOF
+ drop user $DATABASENAME cascade;
+EOF
+
+ echo "create the database"
+ sqlplus -s -l / as sysdba <<EOF
+ create user $DATABASENAME identified by owncloud;
+ alter user $DATABASENAME default tablespace users
+ temporary tablespace temp
+ quota unlimited on users;
+ grant create session
+ , create table
+ , create procedure
+ , create sequence
+ , create trigger
+ , create view
+ , create synonym
+ , alter session
+ to $DATABASENAME;
+ exit;
+EOF
+ fi
+
+ # copy autoconfig
+ cp "$BASEDIR/tests/autoconfig-$1.php" "$BASEDIR/config/autoconfig.php"
+
+ # trigger installation
+ echo "INDEX"
+ php -f index.php | grep -i -C9999 error && echo "Error during setup" && exit 101
+ echo "END INDEX"
+
+ #test execution
+ echo "Testing with $1 ..."
+
+ if [ -n "$2" ]; then
+ echo "Run only $2 ..."
+ fi
+
+ cd tests
+ rm -rf "coverage-external-html-$1"
+ mkdir "coverage-external-html-$1"
+ # just enable files_external
+ php ../occ app:enable files_external
+ if [ -z "$NOCOVERAGE" ]; then
+ #"$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1.xml" --coverage-clover "autotest-external-clover-$1.xml" --coverage-html "coverage-external-html-$1"
+ RESULT=$?
+ else
+ echo "No coverage"
+ #"$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1.xml"
+ RESULT=$?
+ fi
+
+ FILES_EXTERNAL_BACKEND_PATH=../apps/files_external/tests/backends
+ FILES_EXTERNAL_BACKEND_ENV_PATH=../apps/files_external/tests/env
+
+ for startFile in `ls -1 $FILES_EXTERNAL_BACKEND_ENV_PATH | grep start`; do
+ name=`echo $startFile | replace "start-" "" | replace ".sh" ""`
+
+ if [ -n "$2" -a "$2" != "$name" ]; then
+ echo "skip: $startFile"
+ continue;
+ fi
+
+ echo "start: $startFile"
+ echo "name: $name"
+
+ # execute start file
+ ./$FILES_EXTERNAL_BACKEND_ENV_PATH/$startFile
+
+ # getting backend to test from filename
+ # it's the part between the dots startSomething.TestToRun.sh
+ testToRun=`echo $startFile | cut -d '-' -f 2`
+
+ # run the specific test
+ if [ -z "$NOCOVERAGE" ]; then
+ rm -rf "coverage-external-html-$1-$name"
+ mkdir "coverage-external-html-$1-$name"
+ "$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1-$name.xml" --coverage-clover "autotest-external-clover-$1-$name.xml" --coverage-html "coverage-external-html-$1-$name" "$FILES_EXTERNAL_BACKEND_PATH/$testToRun.php"
+ RESULT=$?
+ else
+ echo "No coverage"
+ "$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1-$name.xml" "$FILES_EXTERNAL_BACKEND_PATH/$testToRun.php"
+ RESULT=$?
+ fi
+
+ # calculate stop file
+ stopFile=`echo "$startFile" | replace start stop`
+ echo "stop: $stopFile"
+ if [ -f $FILES_EXTERNAL_BACKEND_ENV_PATH/$stopFile ]; then
+ # execute stop file if existant
+ ./$FILES_EXTERNAL_BACKEND_ENV_PATH/$stopFile
+ fi
+ done;
+}
+
+#
+# start test execution
+#
+if [ -z "$1" ]
+ then
+ # run all known database configs
+ for DBCONFIG in $DBCONFIGS; do
+ execute_tests $DBCONFIG "$2"
+ done
+else
+ execute_tests "$1" "$2"
+fi
+
+cd "$BASEDIR"
+
+restore_config
+#
+# NOTES on mysql:
+# - CREATE DATABASE oc_autotest;
+# - CREATE USER 'oc_autotest'@'localhost' IDENTIFIED BY 'owncloud';
+# - grant all on oc_autotest.* to 'oc_autotest'@'localhost';
+#
+# - for parallel executor support with EXECUTOR_NUMBER=0:
+# - CREATE DATABASE oc_autotest0;
+# - CREATE USER 'oc_autotest0'@'localhost' IDENTIFIED BY 'owncloud';
+# - grant all on oc_autotest0.* to 'oc_autotest0'@'localhost';
+#
+# NOTES on pgsql:
+# - su - postgres
+# - createuser -P oc_autotest (enter password and enable superuser)
+# - to enable dropdb I decided to add following line to pg_hba.conf (this is not the safest way but I don't care for the testing machine):
+# local all all trust
+#
+# - for parallel executor support with EXECUTOR_NUMBER=0:
+# - createuser -P oc_autotest0 (enter password and enable superuser)
+#
+# NOTES on oci:
+# - it's a pure nightmare to install Oracle on a Linux-System
+# - DON'T TRY THIS AT HOME!
+# - if you really need it: we feel sorry for you
+#
diff --git a/autotest-hhvm.sh b/autotest-hhvm.sh
new file mode 100755
index 00000000000..4d8efa5a4b8
--- /dev/null
+++ b/autotest-hhvm.sh
@@ -0,0 +1,266 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# @author Thomas Müller
+# @copyright 2012, 2013 Thomas Müller thomas.mueller@tmit.eu
+#
+
+set -e
+
+#$EXECUTOR_NUMBER is set by Jenkins and allows us to run autotest in parallel
+DATABASENAME=oc_autotest$EXECUTOR_NUMBER
+DATABASEUSER=oc_autotest$EXECUTOR_NUMBER
+ADMINLOGIN=admin$EXECUTOR_NUMBER
+BASEDIR=$PWD
+
+DBCONFIGS="sqlite mysql pgsql oci"
+PHPUNIT=$(which phpunit)
+HHVM=$(which hhvm)
+
+function print_syntax {
+ echo -e "Syntax: ./autotest-hhvm.sh [dbconfigname] [testfile]\n" >&2
+ echo -e "\t\"dbconfigname\" can be one of: $DBCONFIGS" >&2
+ echo -e "\t\"testfile\" is the name of a test file, for example lib/template.php" >&2
+ echo -e "\nExample: ./autotest.sh sqlite lib/template.php" >&2
+ echo "will run the test suite from \"tests/lib/template.php\"" >&2
+ echo -e "\nIf no arguments are specified, all tests will be run with all database configs" >&2
+}
+
+if ! [ -x "$PHPUNIT" ]; then
+ echo "phpunit executable not found, please install phpunit version >= 3.7" >&2
+ exit 3
+fi
+
+if ! [ -x "$HHVM" ]; then
+ echo "hhvm executable not found, please install hhvm" >&2
+ exit 3
+fi
+
+PHPUNIT_VERSION=$(hhvm "$PHPUNIT" --version | cut -d" " -f2)
+PHPUNIT_MAJOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f1)
+PHPUNIT_MINOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f2)
+
+if ! [ $PHPUNIT_MAJOR_VERSION -gt 3 -o \( $PHPUNIT_MAJOR_VERSION -eq 3 -a $PHPUNIT_MINOR_VERSION -ge 7 \) ]; then
+ echo "phpunit version >= 3.7 required. Version found: $PHPUNIT_VERSION" >&2
+ exit 4
+fi
+
+if ! [ -w config -a -w config/config.php ]; then
+ echo "Please enable write permissions on config and config/config.php" >&2
+ exit 1
+fi
+
+if [ "$1" ]; then
+ FOUND=0
+ for DBCONFIG in $DBCONFIGS; do
+ if [ "$1" = $DBCONFIG ]; then
+ FOUND=1
+ break
+ fi
+ done
+ if [ $FOUND = 0 ]; then
+ echo -e "Unknown database config name \"$1\"\n" >&2
+ print_syntax
+ exit 2
+ fi
+fi
+
+# Back up existing (dev) config if one exists
+if [ -f config/config.php ]; then
+ mv config/config.php config/config-autotest-backup.php
+fi
+
+function restore_config {
+ # Restore existing config
+ if [ -f config/config-autotest-backup.php ]; then
+ mv config/config-autotest-backup.php config/config.php
+ fi
+}
+
+# restore config on exit, even when killed
+trap restore_config SIGINT SIGTERM
+
+# use tmpfs for datadir - should speedup unit test execution
+if [ -d /dev/shm ]; then
+ DATADIR=/dev/shm/data-autotest$EXECUTOR_NUMBER
+else
+ DATADIR=$BASEDIR/data-autotest
+fi
+
+echo "Using database $DATABASENAME"
+
+# create autoconfig for sqlite, mysql and postgresql
+cat > ./tests/autoconfig-sqlite.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'sqlite',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+);
+DELIM
+
+cat > ./tests/autoconfig-mysql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'mysql',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+ 'dbuser' => '$DATABASEUSER',
+ 'dbname' => '$DATABASENAME',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+cat > ./tests/autoconfig-pgsql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'pgsql',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+ 'dbuser' => '$DATABASEUSER',
+ 'dbname' => '$DATABASENAME',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+cat > ./tests/autoconfig-oci.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'oci',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => '$ADMINLOGIN',
+ 'adminpass' => 'admin',
+ 'directory' => '$DATADIR',
+ 'dbuser' => '$DATABASENAME',
+ 'dbname' => 'XE',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+function execute_tests {
+ echo "Setup environment for $1 testing ..."
+ # back to root folder
+ cd "$BASEDIR"
+
+ # revert changes to tests/data
+ git checkout tests/data
+
+ # reset data directory
+ rm -rf "$DATADIR"
+ mkdir "$DATADIR"
+
+ # remove the old config file
+ #rm -rf config/config.php
+ cp tests/preseed-config.php config/config.php
+
+ # drop database
+ if [ "$1" == "mysql" ] ; then
+ mysql -u $DATABASEUSER -powncloud -e "DROP DATABASE IF EXISTS $DATABASENAME" || true
+ fi
+ if [ "$1" == "pgsql" ] ; then
+ dropdb -U $DATABASEUSER $DATABASENAME || true
+ fi
+ if [ "$1" == "oci" ] ; then
+ echo "drop the database"
+ sqlplus -s -l / as sysdba <<EOF
+ drop user $DATABASENAME cascade;
+EOF
+
+ echo "create the database"
+ sqlplus -s -l / as sysdba <<EOF
+ create user $DATABASENAME identified by owncloud;
+ alter user $DATABASENAME default tablespace users
+ temporary tablespace temp
+ quota unlimited on users;
+ grant create session
+ , create table
+ , create procedure
+ , create sequence
+ , create trigger
+ , create view
+ , create synonym
+ , alter session
+ to $DATABASENAME;
+ exit;
+EOF
+ fi
+
+ # copy autoconfig
+ cp "$BASEDIR/tests/autoconfig-$1.php" "$BASEDIR/config/autoconfig.php"
+
+ # trigger installation
+ echo "INDEX"
+ hhvm -f index.php | grep -i -C9999 error && echo "Error during setup" && exit 101
+ echo "END INDEX"
+
+ #test execution
+ echo "Testing with $1 ..."
+ cd tests
+ rm -rf "coverage-html-$1"
+ mkdir "coverage-html-$1"
+ hhvm -f enable_all.php | grep -i -C9999 error && echo "Error during setup" && exit 101
+ if [ -z "$NOCOVERAGE" ]; then
+ hhvm "$PHPUNIT" --configuration phpunit-autotest.xml --log-junit "autotest-results-$1.xml" --coverage-clover "autotest-clover-$1.xml" --coverage-html "coverage-html-$1" "$2" "$3"
+ RESULT=$?
+ else
+ echo "No coverage"
+ hhvm "$PHPUNIT" --configuration phpunit-autotest.xml --log-junit "autotest-results-$1.xml" "$2" "$3"
+ RESULT=$?
+ fi
+}
+
+#
+# start test execution
+#
+if [ -z "$1" ]
+ then
+ # run all known database configs
+ for DBCONFIG in $DBCONFIGS; do
+ execute_tests $DBCONFIG
+ done
+else
+ execute_tests "$1" "$2" "$3"
+fi
+
+cd "$BASEDIR"
+
+restore_config
+#
+# NOTES on mysql:
+# - CREATE DATABASE oc_autotest;
+# - CREATE USER 'oc_autotest'@'localhost' IDENTIFIED BY 'owncloud';
+# - grant all on oc_autotest.* to 'oc_autotest'@'localhost';
+#
+# - for parallel executor support with EXECUTOR_NUMBER=0:
+# - CREATE DATABASE oc_autotest0;
+# - CREATE USER 'oc_autotest0'@'localhost' IDENTIFIED BY 'owncloud';
+# - grant all on oc_autotest0.* to 'oc_autotest0'@'localhost';
+#
+# NOTES on pgsql:
+# - su - postgres
+# - createuser -P oc_autotest (enter password and enable superuser)
+# - to enable dropdb I decided to add following line to pg_hba.conf (this is not the safest way but I don't care for the testing machine):
+# local all all trust
+#
+# - for parallel executor support with EXECUTOR_NUMBER=0:
+# - createuser -P oc_autotest0 (enter password and enable superuser)
+#
+# NOTES on oci:
+# - it's a pure nightmare to install Oracle on a Linux-System
+# - DON'T TRY THIS AT HOME!
+# - if you really need it: we feel sorry for you
+#
diff --git a/autotest.cmd b/autotest.cmd
index 5f1b1ae3a1d..2129e2d30d6 100644
--- a/autotest.cmd
+++ b/autotest.cmd
@@ -7,8 +7,10 @@
:: @copyright 2012, 2013 Thomas Müller thomas.mueller@tmit.eu
::
-set DATADIR=data-autotest
+@echo off
+
set BASEDIR=%~dp0
+set DATADIR=%BASEDIR%data-autotest
:: create autoconfig for sqlite, mysql, postgresql and mssql
echo ^<?php > .\tests\autoconfig-sqlite.php
@@ -18,7 +20,7 @@ echo 'dbtype' ^=^> 'sqlite'^, >> .\tests\autoconfig-sqlite.ph
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-sqlite.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-sqlite.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-sqlite.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-sqlite.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-sqlite.php
echo ^)^; >> .\tests\autoconfig-sqlite.php
echo ^<?php > .\tests\autoconfig-mysql.php
@@ -28,7 +30,7 @@ echo 'dbtype' ^=^> 'mysql'^, >> .\tests\autoconfig-mysql.php
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-mysql.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-mysql.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-mysql.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-mysql.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-mysql.php
echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mysql.php
echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mysql.php
echo 'dbhost' ^=^> 'localhost'^, >> .\tests\autoconfig-mysql.php
@@ -42,7 +44,7 @@ echo 'dbtype' ^=^> 'pgsql'^, >> .\tests\autoconfig-pgsql.php
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-pgsql.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-pgsql.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-pgsql.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-pgsql.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-pgsql.php
echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-pgsql.php
echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-pgsql.php
echo 'dbhost' ^=^> 'localhost'^, >> .\tests\autoconfig-pgsql.php
@@ -56,7 +58,7 @@ echo 'dbtype' ^=^> 'mssql'^, >> .\tests\autoconfig-mssql.php
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-mssql.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-mssql.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-mssql.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-mssql.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-mssql.php
echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mssql.php
echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mssql.php
echo 'dbhost' ^=^> 'localhost\sqlexpress'^, >> .\tests\autoconfig-mssql.php
@@ -65,24 +67,40 @@ echo ^)^; >> .\tests\autoconfig-mssql.php
echo localhost:5432:*:oc_autotest:owncloud > %APPDATA%\postgresql\pgpass.conf
+@echo on
+
+:: Back up existing (dev) config if one exists
+if exist config\config.php (
+ copy /y config\config.php config\config-autotest-backup.php
+)
+
::
:: start test execution
::
if [%1] == [] (
- echo "Running on all database backends"
- call:execute_tests "sqlite"
- call:execute_tests "mysql"
- call:execute_tests "mssql"
- ::call:execute_tests "ora"
- call:execute_tests "pgsql"
+ @echo "Running on all database backends"
+ call:execute_tests "sqlite" "%2"
+ call:execute_tests "mysql" "%2"
+ call:execute_tests "mssql" "%2"
+ ::call:execute_tests "ora" "%2"
+ call:execute_tests "pgsql" "%2"
) else (
- call:execute_tests "%1"
+ call:execute_tests "%1" "%2"
)
+goto:restore_config
+
+goto:eof
+
+:restore_config
+ :: Restore existing config
+ if exist config\config-autotest-backup.php (
+ copy /y config\config-autotest-backup.php config\config.php
+ )
goto:eof
:execute_tests
- echo "Setup environment for %~1 testing ..."
+ @echo "Setup environment for %~1 testing ..."
:: back to root folder
cd %BASEDIR%
@@ -109,22 +127,25 @@ goto:eof
copy /y %BASEDIR%\tests\autoconfig-%~1.php %BASEDIR%\config\autoconfig.php
:: trigger installation
- php -f index.php
+ @echo INDEX
+ call php -f index.php
+ @echo END INDEX
::test execution
- echo "Testing with %~1 ..."
+ @echo "Testing with %~1 ..."
cd tests
rmdir /s /q coverage-html-%~1
md coverage-html-%~1
php -f enable_all.php
+
:: no external files on windows for now
cd ..
php occ app:disable files_external
cd tests
- call phpunit --bootstrap bootstrap.php --configuration phpunit-autotest.xml --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1
+ call phpunit --bootstrap bootstrap.php --configuration phpunit-autotest.xml --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1 %~2
- echo "Done with testing %~1 ..."
+ @echo "Done with testing %~1 ..."
cd %BASEDIR%
goto:eof
diff --git a/autotest.sh b/autotest.sh
index 8edb5f3915a..7bb4c80cb9b 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -40,7 +40,7 @@ if ! [ $PHPUNIT_MAJOR_VERSION -gt 3 -o \( $PHPUNIT_MAJOR_VERSION -eq 3 -a $PHPUN
exit 4
fi
-if ! [ -w config -a -w config/config.php ]; then
+if ! [ \( -w config -a ! -f config/config.php \) -o \( -f config/config.php -a -w config/config.php \) ]; then
echo "Please enable write permissions on config and config/config.php" >&2
exit 1
fi
@@ -227,7 +227,11 @@ if [ -z "$1" ]
execute_tests $DBCONFIG
done
else
- execute_tests "$1" "$2" "$3"
+ FILENAME="$2"
+ if [ ! -z "$2" ] && [ ! -f "tests/$FILENAME" ]; then
+ FILENAME="../$FILENAME"
+ fi
+ execute_tests "$1" "$FILENAME" "$3"
fi
cd "$BASEDIR"
diff --git a/bower.json b/bower.json
index 406878ca713..c6c8e9b5f0f 100644
--- a/bower.json
+++ b/bower.json
@@ -13,14 +13,17 @@
"tests"
],
"dependencies": {
- "blueimp-md5": "1.0.1",
- "handlebars": "1.3.0",
+ "blueimp-md5": "~1.0.1",
+ "handlebars": "~1.3.0",
"jcrop": "~0.9.12",
"jquery": "~1.10.0",
+ "jquery-ui": "1.10.0",
+ "jsTimezoneDetect": "~1.0.5",
"moment": "~2.8.3",
- "select2": "3.4.8",
+ "select2": "~3.4.8",
"zxcvbn": "*",
- "snapjs": "2.0.0-rc1",
- "underscore": "1.6.0"
+ "snapjs": "~2.0.0-rc1",
+ "strengthify": "0.4.1",
+ "underscore": "~1.6.0"
}
}
diff --git a/build/README.TXT b/build/README.TXT
deleted file mode 100644
index 128571058d8..00000000000
--- a/build/README.TXT
+++ /dev/null
@@ -1,28 +0,0 @@
-How to setup build.xml on your local machine?
-
-1.) Install ant
- e.g. apt-get install ant
-
-2.) Install jslint
- Get the latest distribution from http://code.google.com/p/jslint4java/ and
- place jslint4java-*.jar in your home under .ant/lib/
-
-3.) Install PHP qa tools
- Run as root:
- pear config-set auto_discover 1
- pear install pear.phpqatools.org/phpqatools pear.netpirates.net/phpDox
-
- Alternative:
- pear install pear.phpunit.de/phploc
- pear install pear.phpunit.de/phpcpd
- pear install pear.phpmd.org/PHP_PMD
- pear install pear.pdepend.org/PHP_Depend
- pear install pear.php.org/PHP_CodeSniffer
- pear install PHP_CodeSniffer
- pear install pear.phpqatools.org/PHP_CodeBrowser
-
-
-How to call this ant script?
- ant -f build/build.xml -Dbasedir=.
-
-
diff --git a/build/build.xml b/build/build.xml
index 265beb4bccf..c8c5c4efffc 100644
--- a/build/build.xml
+++ b/build/build.xml
@@ -1,31 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project name="ownCloud" default="build" xmlns:jsl="antlib:com.googlecode.jslint4java">
+<project name="ownCloud" default="build">
<!-- the target 'build' can be used by developers for command line builds -->
- <target name="build" depends="prepare,lint,jslint,phploc,pdepend,phpmd,phpcs,phpcpd,phpdoc,phpunit"/>
-
- <!-- the target 'build-ci' is used within our Jenkins CI-server http://ci.tmit.eu -->
- <target name="build-ci" depends="prepare,lint,jslint-ci,phploc,pdepend,phpmd-ci,phpcs-ci,phpcpd-ci,phpdoc,phpunit,phpcb-ci"/>
-
- <!-- the target 'build-pullrequests' is used within our Jenkins CI-server for pull request analysis -->
- <target name="build-pullrequests" depends="prepare,lint,jslint-ci"/>
-
- <target name="clean" description="Cleanup build artifacts">
- <delete dir="${basedir}/build/api"/>
- <delete dir="${basedir}/build/code-browser"/>
- <delete dir="${basedir}/build/coverage"/>
- <delete dir="${basedir}/build/logs"/>
- <delete dir="${basedir}/build/pdepend"/>
- </target>
-
- <target name="prepare" depends="clean"
- description="Prepare for build">
- <mkdir dir="${basedir}/build/api"/>
- <mkdir dir="${basedir}/build/code-browser"/>
- <mkdir dir="${basedir}/build/coverage"/>
- <mkdir dir="${basedir}/build/logs"/>
- <mkdir dir="${basedir}/build/pdepend"/>
- </target>
+ <target name="build" depends="lint"/>
<!-- php syntax analysis -->
<target name="lint">
@@ -61,135 +38,4 @@
</fail>
</target>
-
- <!-- javascript lint -->
- <target name="jslint-ci" description="Run the JSLint tool on JS files">
- <jsl:jslint options="white,sloppy,vars,bitwise,eqeq,browser" haltOnFailure="false">
- <jsl:predef>
-jQuery,$$,OC,$,oc_webroot,oc_appswebroots,oc_current_user,t,Files,FileList,FileActions,localStorage,OCCategories,EventSource,OCdialog,SVGSupport,dragOptions,dragOptions,folderDropOptions,formatDate,humanFileSize,procesSelection,relative_modified_date,scanFiles,simpleFileSize,simpleSize
-</jsl:predef>
- <!-- jsl:formatter type="plain" / -->
- <jsl:formatter type="xml" destfile="build/logs/jslint.xml" />
- <fileset dir="${basedir}" includes="**/*.js" excludes="**/*.min.js,**/3rdparty/**" />
- </jsl:jslint>
- </target>
-
- <target name="jslint" description="Run the JSLint tool on JS files">
- <jsl:jslint options="white,sloppy,vars,bitwise,eqeq,browser" haltOnFailure="false">
- <jsl:predef>
-jQuery,$$,OC,$,oc_webroot,oc_appswebroots,oc_current_user,t,Files,FileList,FileActions,localStorage,OCCategories,EventSource,OCdialog,SVGSupport,dragOptions,dragOptions,folderDropOptions,formatDate,humanFileSize,procesSelection,relative_modified_date,scanFiles,simpleFileSize,simpleSize
-</jsl:predef>
- <jsl:formatter type="plain" />
- <fileset dir="${basedir}" includes="**/*.js" excludes="**/*.min.js,**/3rdparty/**" />
- </jsl:jslint>
- </target>
-
- <target name="phploc" description="Measure project size using PHPLOC">
- <exec executable="phploc">
- <arg value="--log-csv" />
- <arg value="${basedir}/build/logs/phploc.csv" />
- <arg path="${basedir}" />
- </exec>
- </target>
-
- <target name="pdepend"
- description="Calculate software metrics using PHP_Depend">
- <exec executable="pdepend">
- <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
- <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
- <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
- <arg value="--ignore=${basedir}/3rdparty/"/>
- <arg path="${basedir}" />
- </exec>
- </target>
-
- <target name="phpmd-ci"
- description="Perform project mess detection using PHPMD creating a log file for the continuous integration server">
- <exec executable="phpmd">
- <arg path="${basedir}" />
- <arg value="xml" />
- <arg value="${basedir}/build/phpmd.xml" />
- <arg value="--reportfile" />
- <arg value="${basedir}/build/logs/pmd.xml" />
- <arg value="--exclude" />
- <arg value="${basedir}/3rdparty/" />
- </exec>
- </target>
-
- <target name="phpmd"
- description="Perform project mess detection using PHPMD creating a log file for the continuous integration server">
- <exec executable="phpmd">
- <arg path="${basedir}" />
- <arg value="xml" />
- <arg value="${basedir}/build/phpmd.xml" />
- <arg value="--exclude" />
- <arg value="${basedir}/3rdparty/" />
- </exec>
- </target>
-
- <target name="phpcs-ci"
- description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
- <exec executable="phpcs" >
- <arg value="-p" />
- <arg value="-v" />
- <arg value="--tab-width=4" />
- <arg value="--report=checkstyle" />
- <arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
- <arg value="--standard=${basedir}/build/phpcs.xml" />
- <arg path="${basedir}" />
- </exec>
- </target>
-
- <target name="phpcs"
- description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
- <exec executable="phpcs" >
- <arg value="-p" />
- <arg value="-v" />
- <arg value="--tab-width=4" />
- <arg value="--standard=${basedir}/build/phpcs.xml" />
- <arg path="${basedir}" />
- </exec>
- </target>
-
- <target name="phpcpd" description="Find duplicate code using PHPCPD">
- <exec executable="phpcpd">
- <arg value="--exclude" />
- <arg value="${basedir}/3rdparty/" />
- <arg path="${basedir}" />
- </exec>
- </target>
-
- <target name="phpcpd-ci" description="Find duplicate code using PHPCPD">
- <exec executable="phpcpd">
- <arg value="--log-pmd" />
- <arg value="${basedir}/build/logs/pmd-cpd.xml" />
- <arg value="--exclude" />
- <arg value="${basedir}/3rdparty/" />
- <arg path="${basedir}" />
- </exec>
- </target>
-
- <!-- No idea if we need this within this build file. This is part of the release which is not contained within this script. -->
- <target name="phpdoc"
- description="Generate API documentation using PHPDocumentor">
- <!-- exec executable="phpdox"/ -->
- </target>
-
- <!-- currently we use autotest.sh for executing the unit tests against 3 different database setups -->
- <target name="phpunit" description="Run unit tests with PHPUnit">
- <echo message="TODO: phpunit goes here"/>
- <!-- exec executable="phpunit" failonerror="true"/ -->
- </target>
-
- <target name="phpcb-ci"
- description="Aggregate tool output with PHP_CodeBrowser">
- <exec executable="phpcb">
- <arg value="--log" />
- <arg path="${basedir}/build/logs" />
- <arg value="--source" />
- <arg path="${basedir}" />
- <arg value="--output" />
- <arg path="${basedir}/build/code-browser" />
- </exec>
- </target>
</project>
diff --git a/build/phpcs.xml b/build/phpcs.xml
deleted file mode 100644
index d2909955ed2..00000000000
--- a/build/phpcs.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<ruleset name="PHP_CodeSniffer">
- <description>The coding standard for PHP_CodeSniffer itself.</description>
- <exclude-pattern>*/Tests/*</exclude-pattern>
- <exclude-pattern>*/lib/MDB2/*</exclude-pattern>
- <exclude-pattern>*/3rdparty/*</exclude-pattern>
- <exclude-pattern>*.min.*</exclude-pattern>
- <exclude-pattern>*/l10n/*</exclude-pattern>
- <exclude-pattern>*/files_texteditor/js/aceeditor/*</exclude-pattern>
- <exclude-pattern>*/files_pdfviewer/js/pdfjs/*</exclude-pattern>
- <exclude-pattern>*/files_odfviewer/src/*</exclude-pattern>
- <exclude-pattern>*/files_svgedit/svg-edit/*</exclude-pattern>
- <exclude-pattern>*jquery-ui-*.css</exclude-pattern>
- <extensions>php</extensions>
-
- <!-- Include the whole PEAR standard -->
- <rule ref="PEAR">
- <exclude name="PEAR.Commenting.FileComment.InvalidAuthors" />
- <exclude name="PEAR.Commenting.FileComment.TagIndent" />
- <exclude name="PEAR.Commenting.FileComment.MissingVersion" />
- <exclude name="PEAR.Commenting.FileComment.MissingTag" />
- <exclude name="PEAR.Commenting.ClassComment.TagIndent" />
- <!-- exclude name="PEAR.WhiteSpace.ScopeIndent.Incorrect" /-->
- <exclude name="PEAR.Commenting.ClassComment.WrongTagOrder" />
- <exclude name="Generic.WhiteSpace.DisallowTabIndent.TabsUsed" />
- <exclude name="PEAR.Functions.FunctionCallSignature.SpaceBeforeOpenBracket" />
- <exclude name="PEAR.Functions.FunctionCallSignature.SpaceAfterOpenBracket" />
- <exclude name="Generic.ControlStructures.InlineControlStructure.Discouraged" />
- <exclude name="PEAR.Commenting.FunctionComment.ParameterCommentsNotAligned" />
- <exclude name="PEAR.Commenting.FunctionComment.MissingParamTag" />
- <exclude name="PEAR.ControlStructures.ControlSignature" />
-
- <!-- ident and alignment stuff -->
- <!-- exclude name="PEAR.ControlStructures.MultiLineCondition.Alignment" />
- <exclude name="PEAR.WhiteSpace.ScopeClosingBrace.BreakIdent" / -->
-
- <!-- allow curly on classes and functions -->
- <exclude name="PEAR.Functions.FunctionDeclaration.BraceOnSameLine" />
- <exclude name="PEAR.Classes.ClassDeclaration.OpenBraceNewLine" />
-
- <exclude name="PEAR.NamingConventions.ValidFunctionName.PrivateNoUnderscore" />
- <exclude name="PEAR.NamingConventions.ValidVariableName.PrivateNoUnderscore" />
- <exclude name="PEAR.WhiteSpace.ScopeIndent"/>
- </rule>
-
- <rule ref="Zend.Files.ClosingTag" />
-
- <rule ref="Generic.WhiteSpace.ScopeIndent">
- <properties>
- <property name="indent" value="4"/>
- </properties>
- </rule>
-
- <rule ref="Generic.Files.LineLength">
- <properties>
- <property name="lineLimit" value="120"/>
- <property name="absoluteLineLimit" value="160"/>
- </properties>
- </rule>
-
- <!-- Include most of the Squiz standard -->
- <!-- rule ref="Squiz">
- <exclude name="Squiz.Classes.ClassFileName"/>
- <exclude name="Squiz.Classes.ValidClassName"/>
- <exclude name="Squiz.Commenting.ClassComment"/>
- <exclude name="Squiz.Commenting.FileComment"/>
- <exclude name="Squiz.Commenting.FunctionComment"/>
- <exclude name="Squiz.Commenting.VariableComment"/>
- <exclude name="Squiz.ControlStructures.SwitchDeclaration"/>
- <exclude name="Squiz.Files.FileExtension"/>
- <exclude name="Squiz.NamingConventions.ConstantCase"/>
- <exclude name="Squiz.Operators.ComparisonOperatorUsage"/>
-</rule -->
-
- <!-- We allow variables to be used inside double quoted strings -->
- <!-- rule ref="Squiz.Strings.DoubleQuoteUsage.ContainsVar">
- <severity>0</severity>
- </rule -->
-
-</ruleset>
diff --git a/build/phpmd.xml b/build/phpmd.xml
deleted file mode 100644
index 3935a5b74b5..00000000000
--- a/build/phpmd.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
- <ruleset name="My first PHPMD rule set" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:noNamespaceSchemaLocation=" http://pmd.sf.net/ruleset_xml_schema.xsd">
- <description> My custom rule set that checks my code... </description>
- <!-- Import the entire unused code rule set -->
- <rule ref="rulesets/unusedcode.xml" />
-
- <!-- Import the entire cyclomatic complexity rule -->
- <rule ref="rulesets/codesize.xml/CyclomaticComplexity" />
-</ruleset>
diff --git a/buildjsdocs.sh b/buildjsdocs.sh
new file mode 100755
index 00000000000..ef18dc8c9a9
--- /dev/null
+++ b/buildjsdocs.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# Run JS tests
+#
+# @author Vincent Petry
+# @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+#
+NPM="$(which npm 2>/dev/null)"
+PREFIX="build"
+OUTPUT_DIR="build/jsdocs"
+
+JS_FILES="core/js/*.js apps/*/js/*.js"
+
+if test -z "$NPM"
+then
+ echo 'Node JS >= 0.8 is required to build the documentation' >&2
+ exit 1
+fi
+
+# update/install test packages
+mkdir -p "$PREFIX" && $NPM install --link --prefix "$PREFIX" jsdoc || exit 3
+
+JSDOC_BIN="$(which jsdoc 2>/dev/null)"
+
+# If not installed globally, try local version
+if test -z "$JSDOC_BIN"
+then
+ JSDOC_BIN="$PREFIX/node_modules/jsdoc/jsdoc.js"
+fi
+
+if test -z "$JSDOC_BIN"
+then
+ echo 'jsdoc executable not found' >&2
+ exit 2
+fi
+
+mkdir -p "$OUTPUT_DIR"
+
+NODE_PATH="$PREFIX/node_modules" $JSDOC_BIN -d "$OUTPUT_DIR" $JS_FILES
+
diff --git a/config/config.sample.php b/config/config.sample.php
index 5d6e3cea273..d0d735ed537 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -53,11 +53,20 @@ $CONFIG = array(
* all your passwords. This example is for documentation only,
* and you should never use it.
*
+ * @deprecated This salt is deprecated and only used for legacy-compatibility, developers
+ * should *NOT* use this value for anything nowadays.
+ *
*'passwordsalt' => 'd3c944a9af095aa08f',
*/
'passwordsalt' => '',
/**
+ * The hashing cost used by hashes generated by ownCloud
+ * Using a higher value requires more time and CPU power to calculate the hashes
+ */
+'hashingCost' => 10,
+
+/**
* Your list of trusted domains that users can log into. Specifying trusted
* domains prevents host header poisoning. Do not remove this, as it performs
* necessary security checks.
@@ -65,13 +74,14 @@ $CONFIG = array(
'trusted_domains' =>
array (
'demo.example.org',
- 'otherdomain.example.org:8080',
+ 'otherdomain.example.org',
),
/**
* Where user files are stored; this defaults to ``data/`` in the ownCloud
- * directory. The SQLite database is also stored here, when you use SQLite.
+ * directory. The SQLite database is also stored here, when you use SQLite. (SQLite is
+ * available only in ownCloud Community Edition)
*/
'datadirectory' => '/var/www/owncloud/data',
@@ -82,8 +92,15 @@ $CONFIG = array(
'version' => '',
/**
- * Identifies the database used with this installation: ``sqlite``, ``mysql``,
- * ``pgsql``, ``oci``, or ``mssql``.
+ * Identifies the database used with this installation. See also config option
+ * ``supportedDatabases``
+ *
+ * Available:
+ * - sqlite (SQLite3 - Community Edition Only)
+ * - mysql (MySQL)
+ * - pgsql (PostgreSQL)
+ * - oci (Oracle - Enterprise Edition Only)
+ * - mssql (Microsoft SQL Server - Enterprise Edition Only)
*/
'dbtype' => 'sqlite',
@@ -128,6 +145,12 @@ $CONFIG = array(
),
/**
+ * sqlite3 journal mode can be specified using this config parameter - can be 'WAL' or 'DELETE'
+ * see for more details https://www.sqlite.org/wal.html
+ */
+'sqlite.journal_mode' => 'DELETE',
+
+/**
* Indicates whether the ownCloud instance was installed successfully; ``true``
* indicates a successful installation, and ``false`` indicates an unsuccessful
* installation.
@@ -428,6 +451,15 @@ $CONFIG = array(
*/
'check_for_working_htaccess' => true,
+/**
+ * In certain environments it is desired to have a read-only config file.
+ * When this switch is set to ``true`` ownCloud will not verify whether the
+ * configuration is writable. However, it will not be possible to configure
+ * all options via the web-interface. Furthermore, when updating ownCloud
+ * it is required to make the config file writable again for the update
+ * process.
+ */
+'config_is_read_only' => false,
/**
* Logging
@@ -435,8 +467,10 @@ $CONFIG = array(
/**
* By default the ownCloud logs are sent to the ``owncloud.log`` file in the
- * default ownCloud data directory. If syslogging is desired, set this parameter
- * to ``syslog``.
+ * default ownCloud data directory.
+ * If syslogging is desired, set this parameter to ``syslog``.
+ * Setting this parameter to ``errorlog`` will use the PHP error_log function
+ * for logging.
*/
'log_type' => 'owncloud',
@@ -521,6 +555,7 @@ $CONFIG = array(
/**
* When enabled, admins may install apps from the ownCloud app store.
+ * The app store is disabled by default for ownCloud Enterprise Edition
*/
'appstoreenabled' => true,
@@ -611,7 +646,7 @@ $CONFIG = array(
* concerns:
*
* - OC\Preview\Illustrator
- * - OC\Preview\Movies
+ * - OC\Preview\Movie
* - OC\Preview\MSOffice2003
* - OC\Preview\MSOffice2007
* - OC\Preview\MSOfficeDoc
@@ -630,6 +665,20 @@ $CONFIG = array(
'OC\Preview\MarkDown'
),
+/**
+ * LDAP
+ *
+ * Global settings used by LDAP User and Group Backend
+ */
+
+/**
+ * defines the interval in minutes for the background job that checks user
+ * existance and marks them as ready to be cleaned up. The number is always
+ * minutes. Setting it to 0 disables the feature.
+ * See command line (occ) methods ldap:show-remnants and user:delete
+ */
+'ldapUserCleanupInterval' => 51,
+
/**
* Maintenance
@@ -666,6 +715,12 @@ $CONFIG = array(
'forcessl' => false,
/**
+ * Change this to ``true`` to require HTTPS connections also for all subdomains.
+ * Works only together when `forcessl` is set to true.
+ */
+'forceSSLforSubdomains' => false,
+
+/**
* Extra SSL options to be used for configuration.
*/
'openssl' => array(
@@ -708,9 +763,21 @@ $CONFIG = array(
*/
'cipher' => 'AES-256-CFB',
+
+/**
+ * Connection details for redis to use for memory caching.
+ * Redis is only used if other memory cache options (xcache, apc, apcu) are
+ * not available.
+ */
+'redis' => array(
+ 'host' => 'localhost', // can also be a unix domain socket: '/tmp/redis.sock'
+ 'port' => 6379,
+ 'timeout' => 0.0
+),
+
/**
* Server details for one or more memcached servers to use for memory caching.
- * Memcache is only used if other memory cache options (xcache, apc, apcu) are
+ * Memcache is only used if other memory cache options (xcache, apc, apcu, redis) are
* not available.
*/
'memcached_servers' => array(
@@ -758,6 +825,16 @@ $CONFIG = array(
'asset-pipeline.enabled' => false,
/**
+ * The parent of the directory where css and js assets will be stored if
+ * piplelining is enabled; this defaults to the ownCloud directory. The assets
+ * will be stored in a subdirectory of this directory named 'assets'. The
+ * server *must* be configured to serve that directory as $WEBROOT/assets.
+ * You will only likely need to change this if the main ownCloud directory
+ * is not writeable by the web server in your configuration.
+ */
+'assetdirectory' => '/var/www/owncloud',
+
+/**
* Where ``mount.json`` file should be stored, defaults to ``data/mount.json``
*/
'mount_file' => 'data/mount.json',
@@ -813,11 +890,11 @@ $CONFIG = array(
* Database types that are supported for installation.
*
* Available:
- * - sqlite (SQLite3)
+ * - sqlite (SQLite3 - Community Edition Only)
* - mysql (MySQL)
* - pgsql (PostgreSQL)
- * - oci (Oracle)
- * - mssql (Microsoft SQL Server)
+ * - oci (Oracle - Enterprise Edition Only)
+ * - mssql (Microsoft SQL Server - Enterprise Edition Only)
*/
'supportedDatabases' => array(
'sqlite',
diff --git a/core/ajax/preview.php b/core/ajax/preview.php
index 56ef5ea847b..f7e24e0ec28 100644
--- a/core/ajax/preview.php
+++ b/core/ajax/preview.php
@@ -29,21 +29,17 @@ if ($maxX === 0 || $maxY === 0) {
exit;
}
-try {
- $preview = new \OC\Preview(\OC_User::getUser(), 'files');
- $info = \OC\Files\Filesystem::getFileInfo($file);
- if (!$always and !$preview->isAvailable($info)) {
- \OC_Response::setStatus(404);
- } else {
- $preview->setFile($file);
- $preview->setMaxX($maxX);
- $preview->setMaxY($maxY);
- $preview->setScalingUp($scalingUp);
- $preview->setKeepAspect($keepAspect);
- }
+$preview = new \OC\Preview(\OC_User::getUser(), 'files');
+$info = \OC\Files\Filesystem::getFileInfo($file);
+
+if (!$info instanceof OCP\Files\FileInfo || !$always && !$preview->isAvailable($info)) {
+ \OC_Response::setStatus(404);
+} else {
+ $preview->setFile($file);
+ $preview->setMaxX($maxX);
+ $preview->setMaxY($maxY);
+ $preview->setScalingUp($scalingUp);
+ $preview->setKeepAspect($keepAspect);
$preview->showPreview();
-} catch (\Exception $e) {
- \OC_Response::setStatus(500);
- \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
}
diff --git a/core/ajax/share.php b/core/ajax/share.php
index 9f758b4e44e..1a2faa75dac 100644
--- a/core/ajax/share.php
+++ b/core/ajax/share.php
@@ -36,7 +36,7 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
$shareWith = null;
}
$itemSourceName=(isset($_POST['itemSourceName'])) ? $_POST['itemSourceName']:'';
-
+
$token = OCP\Share::shareItem(
$_POST['itemType'],
$_POST['itemSource'],
@@ -73,9 +73,9 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
$return = OCP\Share::setPermissions(
$_POST['itemType'],
$_POST['itemSource'],
- $_POST['shareType'],
+ (int)$_POST['shareType'],
$_POST['shareWith'],
- $_POST['permissions']
+ (int)$_POST['permissions']
);
($return) ? OC_JSON::success() : OC_JSON::error();
}
@@ -309,6 +309,21 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
break;
}
}
+
+ // allow user to add unknown remote addresses for server-to-server share
+ $backend = \OCP\Share::getBackend($_GET['itemType']);
+ if ($backend->isShareTypeAllowed(\OCP\Share::SHARE_TYPE_REMOTE)) {
+ if (substr_count($_GET['search'], '@') === 1) {
+ $shareWith[] = array(
+ 'label' => $_GET['search'],
+ 'value' => array(
+ 'shareType' => \OCP\Share::SHARE_TYPE_REMOTE,
+ 'shareWith' => $_GET['search']
+ )
+ );
+ }
+ }
+
$sorter = new \OC\Share\SearchResultSorter($_GET['search'],
'label',
new \OC\Log());
diff --git a/core/ajax/update.php b/core/ajax/update.php
index 419992c9891..5a9288a6381 100644
--- a/core/ajax/update.php
+++ b/core/ajax/update.php
@@ -9,7 +9,11 @@ if (OC::checkUpgrade(false)) {
$l = new \OC_L10N('core');
$eventSource = \OC::$server->createEventSource();
- $updater = new \OC\Updater(\OC_Log::$object);
+ $updater = new \OC\Updater(
+ \OC::$server->getHTTPHelper(),
+ \OC::$server->getAppConfig(),
+ \OC_Log::$object
+ );
$updater->listen('\OC\Updater', 'maintenanceStart', function () use ($eventSource, $l) {
$eventSource->send('success', (string)$l->t('Turned on maintenance mode'));
});
diff --git a/core/application.php b/core/application.php
index 33801847758..c36ab559c27 100644
--- a/core/application.php
+++ b/core/application.php
@@ -10,13 +10,22 @@
namespace OC\Core;
+use OC\AppFramework\Utility\SimpleContainer;
use \OCP\AppFramework\App;
use OC\Core\LostPassword\Controller\LostController;
use OC\Core\User\UserController;
+use \OCP\Util;
+/**
+ * Class Application
+ *
+ * @package OC\Core
+ */
class Application extends App {
-
+ /**
+ * @param array $urlParams
+ */
public function __construct(array $urlParams=array()){
parent::__construct('core', $urlParams);
@@ -25,29 +34,56 @@ class Application extends App {
/**
* Controllers
*/
- $container->registerService('LostController', function($c) {
+ $container->registerService('LostController', function(SimpleContainer $c) {
return new LostController(
$c->query('AppName'),
$c->query('Request'),
- $c->query('ServerContainer')->getURLGenerator(),
- $c->query('ServerContainer')->getUserManager(),
- new \OC_Defaults(),
- $c->query('ServerContainer')->getL10N('core'),
- $c->query('ServerContainer')->getConfig(),
- $c->query('ServerContainer')->getUserSession(),
- \OCP\Util::getDefaultEmailAddress('lostpassword-noreply'),
- \OC_App::isEnabled('files_encryption')
+ $c->query('URLGenerator'),
+ $c->query('UserManager'),
+ $c->query('Defaults'),
+ $c->query('L10N'),
+ $c->query('Config'),
+ $c->query('SecureRandom'),
+ $c->query('DefaultEmailAddress'),
+ $c->query('IsEncryptionEnabled')
);
});
- $container->registerService('UserController', function($c) {
+ $container->registerService('UserController', function(SimpleContainer $c) {
return new UserController(
$c->query('AppName'),
$c->query('Request'),
- $c->query('ServerContainer')->getUserManager(),
- new \OC_Defaults()
+ $c->query('UserManager'),
+ $c->query('Defaults')
);
});
- }
+ /**
+ * Core class wrappers
+ */
+ $container->registerService('IsEncryptionEnabled', function() {
+ return \OC_App::isEnabled('files_encryption');
+ });
+ $container->registerService('URLGenerator', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getURLGenerator();
+ });
+ $container->registerService('UserManager', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getUserManager();
+ });
+ $container->registerService('Config', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getConfig();
+ });
+ $container->registerService('L10N', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getL10N('core');
+ });
+ $container->registerService('SecureRandom', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getSecureRandom();
+ });
+ $container->registerService('Defaults', function() {
+ return new \OC_Defaults;
+ });
+ $container->registerService('DefaultEmailAddress', function() {
+ return Util::getDefaultEmailAddress('lostpassword-noreply');
+ });
+ }
}
diff --git a/core/command/db/converttype.php b/core/command/db/converttype.php
index 2188b1135bb..8d1560b0511 100644
--- a/core/command/db/converttype.php
+++ b/core/command/db/converttype.php
@@ -10,7 +10,7 @@
namespace OC\Core\Command\Db;
-use OC\Config;
+use \OCP\IConfig;
use OC\DB\Connection;
use OC\DB\ConnectionFactory;
@@ -22,7 +22,7 @@ use Symfony\Component\Console\Output\OutputInterface;
class ConvertType extends Command {
/**
- * @var \OC\Config
+ * @var \OCP\IConfig
*/
protected $config;
@@ -32,10 +32,10 @@ class ConvertType extends Command {
protected $connectionFactory;
/**
- * @param \OC\Config $config
+ * @param \OCP\IConfig $config
* @param \OC\DB\ConnectionFactory $connectionFactory
*/
- public function __construct(Config $config, ConnectionFactory $connectionFactory) {
+ public function __construct(IConfig $config, ConnectionFactory $connectionFactory) {
$this->config = $config;
$this->connectionFactory = $connectionFactory;
parent::__construct();
@@ -104,7 +104,7 @@ class ConvertType extends Command {
'Converting to Microsoft SQL Server (mssql) is currently not supported.'
);
}
- if ($type === $this->config->getValue('dbtype', '')) {
+ if ($type === $this->config->getSystemValue('dbtype', '')) {
throw new \InvalidArgumentException(sprintf(
'Can not convert from %1$s to %1$s.',
$type
@@ -209,7 +209,7 @@ class ConvertType extends Command {
'user' => $input->getArgument('username'),
'password' => $input->getOption('password'),
'dbname' => $input->getArgument('database'),
- 'tablePrefix' => $this->config->getValue('dbtableprefix', 'oc_'),
+ 'tablePrefix' => $this->config->getSystemValue('dbtableprefix', 'oc_'),
);
if ($input->getOption('port')) {
$connectionParams['port'] = $input->getOption('port');
@@ -228,6 +228,8 @@ class ConvertType extends Command {
}
protected function getTables(Connection $db) {
+ $db->getConfiguration()->
+ setFilterSchemaAssetsExpression('/^'.$this->config->getSystemValue('dbtableprefix', 'oc_').'/');
return $db->getSchemaManager()->listTableNames();
}
@@ -256,7 +258,7 @@ class ConvertType extends Command {
}
protected function convertDB(Connection $fromDB, Connection $toDB, array $tables, InputInterface $input, OutputInterface $output) {
- $this->config->setValue('maintenance', true);
+ $this->config->setSystemValue('maintenance', true);
try {
// copy table rows
foreach($tables as $table) {
@@ -264,16 +266,16 @@ class ConvertType extends Command {
$this->copyTable($fromDB, $toDB, $table, $input, $output);
}
if ($input->getArgument('type') === 'pgsql') {
- $tools = new \OC\DB\PgSqlTools;
+ $tools = new \OC\DB\PgSqlTools($this->config);
$tools->resynchronizeDatabaseSequences($toDB);
}
// save new database config
$this->saveDBInfo($input);
} catch(\Exception $e) {
- $this->config->setValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', false);
throw $e;
}
- $this->config->setValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', false);
}
protected function saveDBInfo(InputInterface $input) {
@@ -286,10 +288,10 @@ class ConvertType extends Command {
$dbhost .= ':'.$input->getOption('port');
}
- $this->config->setValue('dbtype', $type);
- $this->config->setValue('dbname', $dbname);
- $this->config->setValue('dbhost', $dbhost);
- $this->config->setValue('dbuser', $username);
- $this->config->setValue('dbpassword', $password);
+ $this->config->setSystemValue('dbtype', $type);
+ $this->config->setSystemValue('dbname', $dbname);
+ $this->config->setSystemValue('dbhost', $dbhost);
+ $this->config->setSystemValue('dbuser', $username);
+ $this->config->setSystemValue('dbpassword', $password);
}
}
diff --git a/core/command/maintenance/mode.php b/core/command/maintenance/mode.php
index f26a11384a8..f48a9d012c4 100644
--- a/core/command/maintenance/mode.php
+++ b/core/command/maintenance/mode.php
@@ -9,7 +9,7 @@
namespace OC\Core\Command\Maintenance;
-use OC\Config;
+use \OCP\IConfig;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
@@ -18,9 +18,10 @@ use Symfony\Component\Console\Output\OutputInterface;
class Mode extends Command {
+ /** @var IConfig */
protected $config;
- public function __construct(Config $config) {
+ public function __construct(IConfig $config) {
$this->config = $config;
parent::__construct();
}
@@ -45,13 +46,13 @@ class Mode extends Command {
protected function execute(InputInterface $input, OutputInterface $output) {
if ($input->getOption('on')) {
- $this->config->setValue('maintenance', true);
+ $this->config->setSystemValue('maintenance', true);
$output->writeln('Maintenance mode enabled');
} elseif ($input->getOption('off')) {
- $this->config->setValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', false);
$output->writeln('Maintenance mode disabled');
} else {
- if ($this->config->getValue('maintenance', false)) {
+ if ($this->config->getSystemValue('maintenance', false)) {
$output->writeln('Maintenance mode is currently enabled');
} else {
$output->writeln('Maintenance mode is currently disabled');
diff --git a/core/command/maintenance/repair.php b/core/command/maintenance/repair.php
index 7c0cf71d3b6..bf94b2647ce 100644
--- a/core/command/maintenance/repair.php
+++ b/core/command/maintenance/repair.php
@@ -17,12 +17,14 @@ class Repair extends Command {
* @var \OC\Repair $repair
*/
protected $repair;
+ /** @var \OCP\IConfig */
+ protected $config;
/**
* @param \OC\Repair $repair
- * @param \OC\Config $config
+ * @param \OCP\IConfig $config
*/
- public function __construct(\OC\Repair $repair, \OC\Config $config) {
+ public function __construct(\OC\Repair $repair, \OCP\IConfig $config) {
$this->repair = $repair;
$this->config = $config;
parent::__construct();
@@ -35,8 +37,8 @@ class Repair extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $maintenanceMode = $this->config->getValue('maintenance', false);
- $this->config->setValue('maintenance', true);
+ $maintenanceMode = $this->config->getSystemValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', true);
$this->repair->listen('\OC\Repair', 'step', function ($description) use ($output) {
$output->writeln(' - ' . $description);
@@ -50,6 +52,6 @@ class Repair extends Command {
$this->repair->run();
- $this->config->setValue('maintenance', $maintenanceMode);
+ $this->config->setSystemValue('maintenance', $maintenanceMode);
}
}
diff --git a/core/command/upgrade.php b/core/command/upgrade.php
index aaeb63a3124..6e5ac1c5c9a 100644
--- a/core/command/upgrade.php
+++ b/core/command/upgrade.php
@@ -84,7 +84,7 @@ class Upgrade extends Command {
if(\OC::checkUpgrade(false)) {
$self = $this;
- $updater = new Updater();
+ $updater = new Updater(\OC::$server->getHTTPHelper(), \OC::$server->getAppConfig());
$updater->setSimulateStepEnabled($simulateStepEnabled);
$updater->setUpdateStepEnabled($updateStepEnabled);
diff --git a/core/command/user/delete.php b/core/command/user/delete.php
new file mode 100644
index 00000000000..d5ec3ee0bde
--- /dev/null
+++ b/core/command/user/delete.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\Command\User;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+
+class Delete extends Command {
+ /** @var \OC\User\Manager */
+ protected $userManager;
+
+ /**
+ * @param \OC\User\Manager $userManager
+ */
+ public function __construct(\OC\User\Manager $userManager) {
+ $this->userManager = $userManager;
+ parent::__construct();
+ }
+
+ protected function configure() {
+ $this
+ ->setName('user:delete')
+ ->setDescription('deletes the specified user')
+ ->addArgument(
+ 'uid',
+ InputArgument::REQUIRED,
+ 'the username'
+ );
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $wasSuccessful = $this->userManager->get($input->getArgument('uid'))->delete();
+ if($wasSuccessful === true) {
+ $output->writeln('The specified user was deleted');
+ return;
+ }
+ $output->writeln('<error>The specified could not be deleted. Please check the logs.</error>');
+ }
+}
diff --git a/core/css/apps.css b/core/css/apps.css
index ce2e15595af..08877402a4b 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -55,6 +55,8 @@
}
#app-navigation li:hover > a,
+#app-navigation li:focus > a,
+#app-navigation a:focus,
#app-navigation .selected,
#app-navigation .selected a {
background-color: #ddd;
@@ -96,10 +98,12 @@
outline: none !important;
box-shadow: none;
}
-#app-navigation .collapsible:hover > a {
+#app-navigation .collapsible:hover > a,
+#app-navigation .collapsible:focus > a {
background-image: none;
}
-#app-navigation .collapsible:hover > .collapse {
+#app-navigation .collapsible:hover > .collapse,
+#app-navigation .collapsible:focus > .collapse {
display: block;
}
@@ -139,7 +143,8 @@
background-image: -ms-linear-gradient(top, rgb(238,238,238) 0%, rgb(245,245,245) 100%);
}
-#app-navigation > ul .collapsible.open:hover {
+#app-navigation > ul .collapsible.open:hover,
+#app-navigation > ul .collapsible.open:focus {
box-shadow: inset 0 0 3px #ddd;
}
@@ -179,7 +184,8 @@
opacity: .5;
}
- #app-navigation .app-navigation-entry-deleted-button:hover {
+ #app-navigation .app-navigation-entry-deleted-button:hover,
+ #app-navigation .app-navigation-entry-deleted-button:focus {
opacity: 1;
}
diff --git a/core/css/header.css b/core/css/header.css
index 33eb7e25cc6..b4e074a5e44 100644
--- a/core/css/header.css
+++ b/core/css/header.css
@@ -7,6 +7,23 @@
-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 ------------------------------------------------------------------ */
@@ -83,9 +100,9 @@
}
.menutoggle:hover .header-appname,
.menutoggle:hover .icon-caret,
-.menutoggle:focus .header-appname
-.menutoggle:focus .icon-caret
-.menutoggle.active .header-appname
+.menutoggle:focus .header-appname,
+.menutoggle:focus .icon-caret,
+.menutoggle.active .header-appname,
.menutoggle.active .icon-caret {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: alpha(opacity=100);
@@ -270,8 +287,8 @@
z-index: 2000;
display: none;
background-color: #383c43;
- border-bottom-left-radius:7px; border-bottom:1px #333 solid; border-left:1px #333 solid;
- box-shadow:0 0 7px rgb(29,45,68);
+ border-bottom-left-radius: 7px;
+ box-shadow: 0 0 7px rgb(29,45,68);
-moz-box-sizing: border-box; box-sizing: border-box;
}
#expanddiv a {
diff --git a/core/css/icons.css b/core/css/icons.css
index 095c29b3121..ecf6b17995d 100644
--- a/core/css/icons.css
+++ b/core/css/icons.css
@@ -68,6 +68,10 @@
background-image: url('../img/actions/download.svg');
}
+.icon-external {
+ background-image: url('../img/actions/external.svg');
+}
+
.icon-history {
background-image: url('../img/actions/history.svg');
}
diff --git a/core/css/images/ui-icons_222222_256x240.png b/core/css/images/ui-icons_222222_256x240.png
deleted file mode 100644
index 82ef90aabaf..00000000000
--- a/core/css/images/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/core/css/jquery-ui-fixes.css b/core/css/jquery-ui-fixes.css
new file mode 100644
index 00000000000..0bfa9479893
--- /dev/null
+++ b/core/css/jquery-ui-fixes.css
@@ -0,0 +1,140 @@
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: "Lucida Grande", Arial, Verdana, sans-serif;
+ font-size: 1em;
+}
+.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;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #1d2d44;
+ background: #1d2d44 url(images/ui-bg_flat_35_1d2d44_40x100.png) 50% 50% repeat-x;
+ 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 {
+ 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:link,
+.ui-state-default a: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 {
+ 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:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
+ color: #333;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #1d2d44;
+ background: #f8f8f8 url(images/ui-bg_glass_100_f8f8f8_1x400.png) 50% 50% repeat-x;
+ font-weight: bold;
+ color: #1d2d44;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #1d2d44;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.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 {
+ color: #555;
+}
+.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 {
+ 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 {
+ 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 {
+ 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;
+ filter: Alpha(Opacity=50);
+}
+.ui-widget-shadow {
+ margin: -5px 0 0 -5px;
+ padding: 5px;
+ background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+ opacity: .2;
+ filter: Alpha(Opacity=20);
+ border-radius: 5px;
+}
diff --git a/core/css/styles.css b/core/css/styles.css
index 9604cb0fa4a..df4db4d745a 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -192,9 +192,10 @@ input[type="submit"]:hover, input[type="submit"]:focus,
input[type="button"]:hover, input[type="button"]:focus,
button:hover, button:focus,
.button:hover, .button:focus,
+.button a:focus,
select:hover, select:focus, select:active {
- background-color:rgba(250,250,250,.9);
- color:#333;
+ background-color: rgba(255, 255, 255, .95);
+ color: #111;
}
input[type="submit"] img, input[type="button"] img, button img, .button img { cursor:pointer; }
#header .button {
@@ -328,6 +329,20 @@ input[type="submit"].enabled {
top: 30%;
width: 100%;
}
+#emptycontent h2 {
+ font-size: 22px;
+ margin-bottom: 10px;
+}
+#emptycontent [class^="icon-"],
+#emptycontent [class*=" icon-"] {
+ background-size: 64px;
+ height: 64px;
+ width: 64px;
+ margin: 0 auto 15px;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
/* LOG IN & INSTALLATION ------------------------------------------------------------ */
@@ -353,12 +368,24 @@ input[type="submit"].enabled {
filter: alpha(opacity=60);
opacity: .6;
}
+/* overrides another !important statement that sets this to unreadable black */
+#body-login form .warning input[type="checkbox"]:hover+label,
+#body-login form .warning input[type="checkbox"]:focus+label,
+#body-login form .warning input[type="checkbox"]+label {
+ color: #fff !important;
+}
#body-login .update h2 {
font-size: 20px;
+ line-height: 130%;
margin-bottom: 30px;
}
+#body-login .update a {
+ color: #fff;
+ border-bottom: 1px solid #aaa;
+}
+
#body-login .infogroup {
margin-bottom: 15px;
}
@@ -699,7 +726,18 @@ label.infield {
/* VARIOUS REUSABLE SELECTORS */
-.hidden { display:none; }
+.hidden {
+ display: none;
+}
+.hidden-visually {
+ position: absolute;
+ left:-10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+
.bold { font-weight:bold; }
.center { text-align:center; }
.inlineblock { display: inline-block; }
@@ -731,12 +769,44 @@ label.infield {
margin-left: 1em;
}
-tr .action:not(.permanent), .selectedActions a { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; }
-tr:hover .action, tr .action.permanent, .selectedActions a { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter:alpha(opacity=50); opacity:.5; }
-tr .action { width:16px; height:16px; }
-.header-action { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
-tr:hover .action:hover, .selectedActions a:hover, .header-action:hover { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
-tbody tr:hover, tr:active { background-color:#f8f8f8; }
+tr .action:not(.permanent),
+.selectedActions a {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+tr:hover .action,
+tr:focus .action,
+tr .action.permanent,
+.selectedActions a {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+tr .action {
+ width: 16px;
+ height: 16px;
+}
+.header-action {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+ filter: alpha(opacity=80);
+ opacity: .8;
+}
+tr:hover .action:hover,
+tr:focus .action:focus,
+.selectedActions a:hover,
+.selectedActions a:focus,
+.header-action:hover,
+.header-action:focus {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: alpha(opacity=100);
+ opacity: 1;
+}
+tbody tr:hover,
+tbody tr:focus,
+tbody tr:active {
+ background-color: #f8f8f8;
+}
code { font-family:"Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; }
@@ -905,6 +975,7 @@ div.crumb a.ellipsislink {
/* some feedback for hover/tap on breadcrumbs */
div.crumb:hover,
div.crumb:focus,
+div.crumb a:focus,
div.crumb:active {
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
filter:alpha(opacity=70);
diff --git a/core/img/actions/external.png b/core/img/actions/external.png
new file mode 100644
index 00000000000..af03dbf3e05
--- /dev/null
+++ b/core/img/actions/external.png
Binary files differ
diff --git a/core/img/actions/external.svg b/core/img/actions/external.svg
new file mode 100644
index 00000000000..80eba5b9960
--- /dev/null
+++ b/core/img/actions/external.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <path d="m7.4515 1.6186 2.3806 2.2573-3.5709 3.386 2.3806 2.2573 3.5709-3.386 2.3806 2.2573v-6.7725h-7.1422zm-4.7612 1.1286c-0.65945 0-1.1903 0.5034-1.1903 1.1286v9.029c0 0.6253 0.53085 1.1286 1.1903 1.1286h9.522c0.6594 0 1.1903-0.5034 1.1903-1.1286v-3.386l-1.19-1.1287v4.5146h-9.5217v-9.029h4.761l-1.1905-1.1287h-3.5707z"/>
+</svg>
diff --git a/core/img/filetypes/image-svg+xml.png b/core/img/filetypes/image-vector.png
index a847f78fcd8..a847f78fcd8 100644
--- a/core/img/filetypes/image-svg+xml.png
+++ b/core/img/filetypes/image-vector.png
Binary files differ
diff --git a/core/img/filetypes/image-svg+xml.svg b/core/img/filetypes/image-vector.svg
index 1f0a54a21ca..1f0a54a21ca 100644
--- a/core/img/filetypes/image-svg+xml.svg
+++ b/core/img/filetypes/image-vector.svg
diff --git a/core/img/filetypes/image.png b/core/img/filetypes/image.png
index 5cdc05029af..305c3d4db27 100644
--- a/core/img/filetypes/image.png
+++ b/core/img/filetypes/image.png
Binary files differ
diff --git a/core/img/filetypes/image.svg b/core/img/filetypes/image.svg
index 86cbb633bf3..0159eed6482 100644
--- a/core/img/filetypes/image.svg
+++ b/core/img/filetypes/image.svg
@@ -1,57 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs>
- <radialGradient id="t" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.028917 0 0 .012353 26.973 38.471)" r="117.14"/>
<linearGradient id="a">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
- <radialGradient id="u" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.028917 0 0 .012353 21.027 38.471)" r="117.14"/>
- <linearGradient id="l" x1="302.86" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.084497 0 0 .012353 -6.5396 38.471)" x2="302.86" y2="609.51">
- <stop stop-opacity="0" offset="0"/>
- <stop offset=".5"/>
- <stop stop-opacity="0" offset="1"/>
- </linearGradient>
- <linearGradient id="r" x1="16.626" gradientUnits="userSpaceOnUse" y1="15.298" gradientTransform="matrix(.57894 0 0 .65062 2.0784 1.9502)" x2="20.055" y2="24.628">
+ <linearGradient id="f" y2="43" gradientUnits="userSpaceOnUse" y1="5.5641" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" x2="24" x1="24">
<stop stop-color="#fff" offset="0"/>
- <stop stop-color="#fff" stop-opacity="0" offset="1"/>
+ <stop stop-opacity=".23529" stop-color="#fff" offset=".036262"/>
+ <stop stop-opacity=".15686" stop-color="#fff" offset=".95056"/>
+ <stop stop-opacity=".39216" stop-color="#fff" offset="1"/>
</linearGradient>
- <linearGradient id="o" x1="24" gradientUnits="userSpaceOnUse" y1="5.5641" gradientTransform="matrix(.77477 0 0 .61261 -2.5946 1.2973)" x2="24" y2="43">
- <stop stop-color="#fff" offset="0"/>
- <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
- <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
- <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
- </linearGradient>
- <linearGradient id="p" x1="25.132" gradientUnits="userSpaceOnUse" y1=".98521" gradientTransform="matrix(.85714 0 0 .52148 -4.5714 2.6844)" x2="25.132" y2="47.013">
+ <linearGradient id="e" y2="47.013" gradientUnits="userSpaceOnUse" y1=".98521" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" x2="25.132" x1="25.132">
<stop stop-color="#f4f4f4" offset="0"/>
<stop stop-color="#dbdbdb" offset="1"/>
</linearGradient>
- <linearGradient id="q" x1="-51.786" gradientUnits="userSpaceOnUse" y1="50.786" gradientTransform="matrix(.69214 0 0 .48803 46.352 2.1033)" x2="-51.786" y2="2.9062">
- <stop stop-color="#a0a0a0" offset="0"/>
- <stop stop-color="#bebebe" offset="1"/>
- </linearGradient>
- <linearGradient id="m" x1="45.414" gradientUnits="userSpaceOnUse" y1="15.27" gradientTransform="matrix(.32723 0 0 .25356 -38.234 -30.559)" x2="45.567" y2="96.253">
- <stop stop-color="#262626" offset="0"/>
- <stop stop-color="#4d4d4d" offset="1"/>
- </linearGradient>
- <linearGradient id="n" x1="-24.032" gradientUnits="userSpaceOnUse" y1="-13.091" gradientTransform="matrix(.74286 0 0 .74074 1.8384 4.0069)" x2="-24.098" y2="-40.164">
- <stop stop-color="#1d1d1d" offset="0"/>
- <stop offset="1"/>
- </linearGradient>
- <linearGradient id="s" x1="149.98" gradientUnits="userSpaceOnUse" y1="-104.24" gradientTransform="matrix(.28088 0 0 .28276 -22.128 49.806)" x2="149.98" y2="-174.97">
- <stop stop-color="#272727" offset="0"/>
- <stop stop-color="#454545" offset="1"/>
+ <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+ <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+ <linearGradient id="d" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" x2="302.86" x1="302.86">
+ <stop stop-opacity="0" offset="0"/>
+ <stop offset=".5"/>
+ <stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
- <g opacity=".4" stroke-width=".0225" transform="matrix(.66667 0 0 .66667 0 -1.6667)">
- <rect y="43" width="40.8" fill="url(#l)" x="3.6" height="3"/>
- <path d="m3.6 43v2.9998c-1.4891 0.006-3.6-0.672-3.6-1.5s1.6618-1.5 3.6-1.5z" fill="url(#u)"/>
- <path d="m44.4 43v2.9998c1.4891 0.0056 3.6-0.67211 3.6-1.5001 0-0.828-1.6618-1.4997-3.6-1.4997z" fill="url(#t)"/>
+ <g>
+ <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#d)"/>
+ <path opacity=".15" fill="url(#b)" d="m4.95 29v1.9999c-0.8066 0.004-1.95-0.448-1.95-1s0.9001-1 1.95-1z"/>
+ <path opacity=".15" fill="url(#c)" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z"/>
+ <path fill="url(#e)" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z"/>
+ <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#f)" stroke-linecap="round" fill="none"/>
+ <path opacity=".3" stroke-linejoin="round" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="#000" stroke-width=".99992" fill="none"/>
+ </g>
+ <g>
+ <path opacity="0.898" d="m7.7886 21.255h16.423v-15.51h-16.423m3.628 2.8735c1.0944 0 1.981 0.8261 1.981 1.8451s-0.88656 1.8458-1.981 1.8458c-1.0938 0-1.9796-0.8261-1.9796-1.8458 0-1.019 0.88588-1.8451 1.9796-1.8451zm-2.6108 9.4533 2.9348-2.2011 1.4939 1.0904 5.9206-4.3819 2.2011 1.6359 1.4932-1.0897v4.9464z" fill-rule="evenodd" clip-rule="evenodd" fill="#5b2d8d"/>
+ <path fill="#fff" d="m10.658 12.066c-1.8593-0.82639-1.2884-3.3318 0.75961-3.3335 1.9297-0.00157 2.6205 2.394 0.93791 3.2524-0.61512 0.31381-1.1197 0.33792-1.6975 0.08111z"/>
+ <path fill="#fff" d="m10.392 16.949 1.3399-1.004 0.73508 0.52638c0.4043 0.28951 0.80332 0.48661 0.88673 0.43799 0.0834-0.04861 1.4203-1.0288 2.9709-2.1782l2.8192-2.0899 0.43502 0.32295c0.23926 0.17762 0.7424 0.5447 1.1181 0.81574l0.68306 0.49279 0.70677-0.53895 0.70677-0.53895v2.3791 2.3791h-6.8707-6.8707l1.3399-1.004z"/>
</g>
- <path stroke-linejoin="round" stroke="url(#q)" stroke-width=".0066667" d="m0.99997 4c6.8745 0 30 0.0015 30 0.0015l0.000036 23.999h-30v-24z" fill="url(#p)"/>
- <path stroke-linejoin="round" d="m30.333 27.333h-28.667v-22.667h28.667z" stroke="url(#o)" stroke-linecap="round" stroke-width=".0066667" fill="none"/>
- <rect ry="0" rx="0" transform="matrix(-.99999 .0037552 .0024409 -1 0 0)" height="19.903" width="25.952" stroke="url(#n)" stroke-linecap="round" y="-26.012" x="-29.015" stroke-width=".0066668" fill="url(#m)"/>
- <path style="color:#000000" d="m14.458 9.5417c-0.73638 0-1.3333 1.1939-1.3333 2.6667 0 0.24505 0.01072 0.48294 0.04167 0.70833-0.15826-0.15989-0.30816-0.33156-0.5-0.47917-1.1673-0.89808-2.4885-1.1461-2.9375-0.5625-0.44904 0.58363 0.14525 1.7894 1.3125 2.6875 0.22148 0.1704 0.44175 0.29391 0.66667 0.41667-0.25479 0.03257-0.52266 0.08822-0.79167 0.16667-1.4139 0.41232-2.3937 1.3347-2.1875 2.0417 0.20616 0.70693 1.5236 0.93315 2.9375 0.52083 0.2651-0.07731 0.52042-0.1633 0.75-0.27083-0.05604 0.10202-0.11595 0.20204-0.16667 0.3125-2.7782 2.4796-5.0625 7.2292-5.0625 7.2292l0.95833 0.02083c0.5207-1.25 1.8077-3.994 3.7925-6.293-0.28085 1.1684-0.0992 2.2006 0.5 2.4167 0.69271 0.24982 1.667-0.67708 2.1667-2.0625 0.04494-0.12462 0.06976-0.25209 0.10417-0.375 0.05396 0.11891 0.10152 0.23517 0.16667 0.35417 0.70727 1.2918 1.8124 2.062 2.4583 1.7083 0.64591-0.35364 0.58227-1.6874-0.125-2.9792-0.04035-0.07369-0.08227-0.13821-0.125-0.20833 0.07835 0.02437 0.14794 0.04131 0.22917 0.0625 1.4251 0.37181 2.7308 0.10836 2.9167-0.60417 0.18591-0.71253-0.82495-1.5865-2.25-1.9583-0.02183-0.0057-0.04073-0.01544-0.0625-0.02083 0.01921-0.01078 0.04331-0.0098 0.0625-0.02083 1.2754-0.73638 2.014-1.8623 1.6458-2.5-0.36819-0.63772-1.7037-0.54888-2.9792 0.1875-0.40854 0.23587-0.74162 0.50638-1.0208 0.79167 0.10589-0.38234 0.16667-0.82364 0.16667-1.2917 0-1.4728-0.59695-2.6667-1.3333-2.6667zm0.042 4.4583c0.92048 0 1.6667 0.74619 1.6667 1.6667 0 0.92047-0.74619 1.6667-1.6667 1.6667-0.92048 0-1.6667-0.74619-1.6667-1.6667 0-0.921 0.747-1.667 1.667-1.667z" fill="url(#s)"/>
- <path d="m14.458 10.188c-0.73638 0-1.3333 1.1939-1.3333 2.6667 0 0.24504 0.01072 0.48294 0.04167 0.70833-0.15826-0.15989-0.30816-0.33156-0.5-0.47917-1.1673-0.89808-2.4885-1.1461-2.9375-0.5625-0.44904 0.58363 0.14525 1.7894 1.3125 2.6875 0.22148 0.1704 0.44175 0.29391 0.66667 0.41667-0.25479 0.03257-0.52266 0.08822-0.79167 0.16667-1.4139 0.41232-2.3937 1.3347-2.1875 2.0417 0.20616 0.70693 1.5236 0.93315 2.9375 0.52083 0.2651-0.07731 0.52042-0.1633 0.75-0.27083-0.05604 0.10202-0.11595 0.20204-0.16667 0.3125-2.7782 2.479-5.0625 7.229-5.0625 7.229l0.95833 0.02083c0.52039-1.2493 1.8073-3.9927 3.7917-6.2917-0.28085 1.1684-0.0992 2.2006 0.5 2.4167 0.69271 0.24982 1.667-0.67708 2.1667-2.0625 0.04494-0.12462 0.06976-0.25209 0.10417-0.375 0.05396 0.11891 0.10152 0.23517 0.16667 0.35417 0.70727 1.2918 1.8124 2.062 2.4583 1.7083 0.64591-0.35364 0.58227-1.6874-0.125-2.9792-0.04035-0.07369-0.08227-0.13821-0.125-0.20833 0.07835 0.02437 0.14794 0.04131 0.22917 0.0625 1.4251 0.37181 2.7308 0.10836 2.9167-0.60417 0.18591-0.71253-0.82495-1.5865-2.25-1.9583-0.02183-0.0057-0.04073-0.01544-0.0625-0.02083 0.01921-0.01078 0.04331-0.0098 0.0625-0.02083 1.2754-0.73638 2.014-1.8623 1.6458-2.5-0.36819-0.63772-1.7037-0.54888-2.9792 0.1875-0.40854 0.23587-0.74162 0.50638-1.0208 0.79167 0.10589-0.38234 0.16667-0.82364 0.16667-1.2917 0-1.4728-0.59695-2.6667-1.3333-2.6667zm0.042 4.458c0.92048 0 1.6667 0.74619 1.6667 1.6667 0 0.92048-0.74619 1.6667-1.6667 1.6667-0.92048 0-1.6667-0.74619-1.6667-1.6667 0-0.92048 0.74619-1.6667 1.6667-1.6667z" fill="#d2d2d2"/>
- <path opacity=".15" fill="url(#r)" d="m2.6667 5.6667 0.0087 12c0.7672-0.012 26.076-4.424 26.658-4.636l-0.000092-7.3644z" fill-rule="evenodd"/>
</svg>
diff --git a/core/js/config.js b/core/js/config.js
index 52d1c3aee25..b034b7e8cd3 100644
--- a/core/js/config.js
+++ b/core/js/config.js
@@ -4,6 +4,9 @@
* See the COPYING-README file.
*/
+/**
+ * @namespace
+ */
OC.AppConfig={
url:OC.filePath('core','ajax','appconfig.php'),
getCall:function(action,data,callback){
diff --git a/core/js/core.json b/core/js/core.json
index ea79724dcc6..101a88cd4f0 100644
--- a/core/js/core.json
+++ b/core/js/core.json
@@ -2,11 +2,12 @@
"vendor": [
"jquery/jquery.min.js",
"jquery/jquery-migrate.min.js",
+ "jquery-ui/ui/jquery-ui.custom.js",
"underscore/underscore.js",
- "moment/min/moment-with-locales.js"
+ "moment/min/moment-with-locales.js",
+ "handlebars/handlebars.js"
],
"libraries": [
- "jquery-ui-1.10.0.custom.js",
"jquery-showpassword.js",
"jquery-tipsy.js"
],
@@ -21,6 +22,7 @@
"eventsource.js",
"config.js",
"multiselect.js",
- "oc-requesttoken.js"
+ "oc-requesttoken.js",
+ "../../search/js/search.js"
]
}
diff --git a/core/js/eventsource.js b/core/js/eventsource.js
index 46bd9f60bb5..6f23cebb685 100644
--- a/core/js/eventsource.js
+++ b/core/js/eventsource.js
@@ -34,6 +34,8 @@
* Create a new event source
* @param {string} src
* @param {object} [data] to be send as GET
+ *
+ * @constructs OC.EventSource
*/
OC.EventSource=function(src,data){
var dataStr='';
@@ -92,6 +94,16 @@ OC.EventSource.prototype={
iframe:null,
listeners:{},//only for fallback
useFallBack:false,
+ /**
+ * Fallback callback for browsers that don't have the
+ * native EventSource object.
+ *
+ * Calls the registered listeners.
+ *
+ * @private
+ * @param {String} type event type
+ * @param {Object} data received data
+ */
fallBackCallBack:function(type,data){
var i;
// ignore messages that might appear after closing
@@ -111,6 +123,12 @@ OC.EventSource.prototype={
}
},
lastLength:0,//for fallback
+ /**
+ * Listen to a given type of events.
+ *
+ * @param {String} type event type
+ * @param {Function} callback event callback
+ */
listen:function(type,callback){
if(callback && callback.call){
@@ -134,6 +152,9 @@ OC.EventSource.prototype={
}
}
},
+ /**
+ * Closes this event source.
+ */
close:function(){
this.closed = true;
if (typeof this.source !== 'undefined') {
diff --git a/core/js/installation.js b/core/js/installation.js
new file mode 100644
index 00000000000..20ff346215f
--- /dev/null
+++ b/core/js/installation.js
@@ -0,0 +1,5 @@
+
+$(document).ready(function() {
+ $('#adminpass').showPassword().keyup();
+ $('#dbpass').showPassword().keyup();
+});
diff --git a/core/js/js.js b/core/js/js.js
index b1a61ddf502..579bf09b2e4 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -5,6 +5,7 @@
* To the end of config/config.php to enable debug mode.
* The undefined checks fix the broken ie8 console
*/
+
var oc_debug;
var oc_webroot;
@@ -57,6 +58,7 @@ function fileDownloadPath(dir, file) {
return OC.filePath('files', 'ajax', 'download.php')+'?files='+encodeURIComponent(file)+'&dir='+encodeURIComponent(dir);
}
+/** @namespace */
var OC={
PERMISSION_CREATE:4,
PERMISSION_READ:1,
@@ -64,6 +66,7 @@ var OC={
PERMISSION_DELETE:8,
PERMISSION_SHARE:16,
PERMISSION_ALL:31,
+ TAG_FAVORITE: '_$!<Favorite>!$_',
/* jshint camelcase: false */
webroot:oc_webroot,
appswebroots:(typeof oc_appswebroots !== 'undefined') ? oc_appswebroots:false,
@@ -210,6 +213,24 @@ var OC={
},
/**
+ * URI-Encodes a file path but keep the path slashes.
+ *
+ * @param path path
+ * @return encoded path
+ */
+ encodePath: function(path) {
+ if (!path) {
+ return path;
+ }
+ var parts = path.split('/');
+ var result = [];
+ for (var i = 0; i < parts.length; i++) {
+ result.push(encodeURIComponent(parts[i]));
+ }
+ return result.join('/');
+ },
+
+ /**
* Load a script for the server and load it. If the script is already loaded,
* the event handler will be called directly
* @param {string} app the app id to which the script belongs
@@ -251,14 +272,33 @@ var OC={
},
/**
- * @todo Write the documentation
+ * Loads translations for the given app asynchronously.
+ *
+ * @param {String} app app name
+ * @param {Function} callback callback to call after loading
+ * @return {Promise}
+ */
+ addTranslations: function(app, callback) {
+ return OC.L10N.load(app, callback);
+ },
+
+ /**
+ * Returns the base name of the given path.
+ * For example for "/abc/somefile.txt" it will return "somefile.txt"
+ *
+ * @param {String} path
+ * @return {String} base name
*/
basename: function(path) {
return path.replace(/\\/g,'/').replace( /.*\//, '' );
},
/**
- * @todo Write the documentation
+ * Returns the dir name of the given path.
+ * For example for "/abc/somefile.txt" it will return "/abc"
+ *
+ * @param {String} path
+ * @return {String} dir name
*/
dirname: function(path) {
return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
@@ -268,21 +308,19 @@ var OC={
* Do a search query and display the results
* @param {string} query the search query
*/
- search: _.debounce(function(query){
- if(query){
- OC.addStyle('search','results');
- $.getJSON(OC.filePath('search','ajax','search.php')+'?query='+encodeURIComponent(query), function(results){
- OC.search.lastResults=results;
- OC.search.showResults(results);
- });
- }
- }, 500),
+ search: function (query) {
+ OC.Search.search(query, null, 0, 30);
+ },
+ /**
+ * Dialog helper for jquery dialogs.
+ *
+ * @namespace OC.dialogs
+ */
dialogs:OCdialogs,
-
/**
* Parses a URL query string into a JS map
* @param {string} queryString query string in the format param1=1234&param2=abcde&param3=xyz
- * @return map containing key/values matching the URL parameters
+ * @return {Object.<string, string>} map containing key/values matching the URL parameters
*/
parseQueryString:function(queryString){
var parts,
@@ -334,7 +372,7 @@ var OC={
/**
* Builds a URL query from a JS map.
- * @param params parameter map
+ * @param {Object.<string, string>} params map containing key/values matching the URL parameters
* @return {string} String containing a URL query (without question) mark
*/
buildQueryString: function(params) {
@@ -454,20 +492,115 @@ var OC={
*
* This is makes it possible for unit tests to
* stub matchMedia (which doesn't work in PhantomJS)
- * @todo Write documentation
+ * @private
*/
_matchMedia: function(media) {
if (window.matchMedia) {
return window.matchMedia(media);
}
return false;
+ },
+
+ /**
+ * Returns the user's locale
+ *
+ * @return {String} locale string
+ */
+ getLocale: function() {
+ return $('html').prop('lang');
}
};
-OC.search.customResults={};
-OC.search.currentResult=-1;
-OC.search.lastQuery='';
-OC.search.lastResults={};
+/**
+ * @namespace OC.Plugins
+ */
+OC.Plugins = {
+ /**
+ * @type Array.<OC.Plugin>
+ */
+ _plugins: {},
+
+ /**
+ * Register plugin
+ *
+ * @param {String} targetName app name / class name to hook into
+ * @param {OC.Plugin} plugin
+ */
+ register: function(targetName, plugin) {
+ var plugins = this._plugins[targetName];
+ if (!plugins) {
+ plugins = this._plugins[targetName] = [];
+ }
+ plugins.push(plugin);
+ },
+
+ /**
+ * Returns all plugin registered to the given target
+ * name / app name / class name.
+ *
+ * @param {String} targetName app name / class name to hook into
+ * @return {Array.<OC.Plugin>} array of plugins
+ */
+ getPlugins: function(targetName) {
+ return this._plugins[targetName] || [];
+ },
+
+ /**
+ * Call attach() on all plugins registered to the given target name.
+ *
+ * @param {String} targetName app name / class name
+ * @param {Object} object to be extended
+ * @param {Object} [options] options
+ */
+ attach: function(targetName, targetObject, options) {
+ var plugins = this.getPlugins(targetName);
+ for (var i = 0; i < plugins.length; i++) {
+ if (plugins[i].attach) {
+ plugins[i].attach(targetObject, options);
+ }
+ }
+ },
+
+ /**
+ * Call detach() on all plugins registered to the given target name.
+ *
+ * @param {String} targetName app name / class name
+ * @param {Object} object to be extended
+ * @param {Object} [options] options
+ */
+ detach: function(targetName, targetObject, options) {
+ var plugins = this.getPlugins(targetName);
+ for (var i = 0; i < plugins.length; i++) {
+ if (plugins[i].detach) {
+ plugins[i].detach(targetObject, options);
+ }
+ }
+ },
+
+ /**
+ * Plugin
+ *
+ * @todo make this a real class in the future
+ * @typedef {Object} OC.Plugin
+ *
+ * @property {String} name plugin name
+ * @property {Function} attach function that will be called when the
+ * plugin is attached
+ * @property {Function} [detach] function that will be called when the
+ * plugin is detached
+ */
+
+};
+
+/**
+ * @namespace OC.search
+ */
+OC.search.customResults = {};
+/**
+ * @deprecated use get/setFormatter() instead
+ */
+OC.search.resultTypes = {};
+
OC.addStyle.loaded=[];
OC.addScript.loaded=[];
@@ -531,10 +664,12 @@ OC.msg={
/**
* @todo Write documentation
+ * @namespace
*/
OC.Notification={
queuedNotifications: [],
getDefaultNotificationFunction: null,
+ notificationTimer: 0,
/**
* @param callback
@@ -597,6 +732,42 @@ OC.Notification={
}
},
+
+ /**
+ * Shows a notification that disappears after x seconds, default is
+ * 7 seconds
+ * @param {string} text Message to show
+ * @param {array} [options] options array
+ * @param {int} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently
+ * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)
+ */
+ showTemporary: function(text, options) {
+ var defaults = {
+ isHTML: false,
+ timeout: 7
+ },
+ options = options || {};
+ // merge defaults with passed in options
+ _.defaults(options, defaults);
+
+ // clear previous notifications
+ OC.Notification.hide();
+ if(OC.Notification.notificationTimer) {
+ clearTimeout(OC.Notification.notificationTimer);
+ }
+
+ if(options.isHTML) {
+ OC.Notification.showHtml(text);
+ } else {
+ OC.Notification.show(text);
+ }
+
+ if(options.timeout > 0) {
+ // register timeout to vanish notification
+ OC.Notification.notificationTimer = setTimeout(OC.Notification.hide, (options.timeout * 1000));
+ }
+ },
+
/**
* Returns whether a notification is hidden.
* @return {boolean}
@@ -607,7 +778,12 @@ OC.Notification={
};
/**
- * @todo Write documentation
+ * Breadcrumb class
+ *
+ * @namespace
+ *
+ * @deprecated will be replaced by the breadcrumb implementation
+ * of the files app in the future
*/
OC.Breadcrumb={
container:null,
@@ -721,6 +897,7 @@ OC.Breadcrumb={
if(typeof localStorage !=='undefined' && localStorage !== null){
/**
* User and instance aware localstorage
+ * @namespace
*/
OC.localStorage={
namespace:'oc_'+OC.currentUser+'_'+OC.webroot+'_',
@@ -845,9 +1022,9 @@ function object(o) {
function initCore() {
/**
- * Set users local to moment.js as soon as possible
+ * Set users locale to moment.js as soon as possible
*/
- moment.locale($('html').prop('lang'));
+ moment.locale(OC.getLocale());
/**
@@ -887,77 +1064,6 @@ function initCore() {
}else{
SVGSupport.checkMimeType();
}
- $('form.searchbox').submit(function(event){
- event.preventDefault();
- });
- $('#searchbox').keyup(function(event){
- if(event.keyCode===13){//enter
- if(OC.search.currentResult>-1){
- var result=$('#searchresults tr.result a')[OC.search.currentResult];
- window.location = $(result).attr('href');
- }
- }else if(event.keyCode===38){//up
- if(OC.search.currentResult>0){
- OC.search.currentResult--;
- OC.search.renderCurrent();
- }
- }else if(event.keyCode===40){//down
- if(OC.search.lastResults.length>OC.search.currentResult+1){
- OC.search.currentResult++;
- OC.search.renderCurrent();
- }
- }else if(event.keyCode===27){//esc
- OC.search.hide();
- if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
- FileList.unfilter();
- }
- }else{
- var query=$('#searchbox').val();
- if(OC.search.lastQuery!==query){
- OC.search.lastQuery=query;
- OC.search.currentResult=-1;
- if (FileList && typeof FileList.filter === 'function') { //TODO add hook system
- FileList.filter(query);
- }
- if(query.length>2){
- OC.search(query);
- }else{
- if(OC.search.hide){
- OC.search.hide();
- }
- }
- }
- }
- });
-
- var setShowPassword = function(input, label) {
- input.showPassword().keyup();
- };
- setShowPassword($('#adminpass'), $('label[for=show]'));
- setShowPassword($('#pass2'), $('label[for=personal-show]'));
- setShowPassword($('#dbpass'), $('label[for=dbpassword]'));
-
- var checkShowCredentials = function() {
- var empty = false;
- $('input#user, input#password').each(function() {
- if ($(this).val() === '') {
- empty = true;
- }
- });
- if(empty) {
- $('#submit').fadeOut();
- $('#remember_login').hide();
- $('#remember_login+label').fadeOut();
- } else {
- $('#submit').fadeIn();
- $('#remember_login').show();
- $('#remember_login+label').fadeIn();
- }
- };
- // hide log in button etc. when form fields not filled
- // commented out due to some browsers having issues with it
- // checkShowCredentials();
- // $('input#user, input#password').keyup(checkShowCredentials);
// user menu
$('#settings #expand').keydown(function(event) {
@@ -1164,6 +1270,7 @@ function relative_modified_date(timestamp) {
/**
* Utility functions
+ * @namespace
*/
OC.Util = {
// TODO: remove original functions from global namespace
@@ -1314,6 +1421,8 @@ OC.Util = {
* Utility class for the history API,
* includes fallback to using the URL hash when
* the browser doesn't support the history API.
+ *
+ * @namespace
*/
OC.Util.History = {
_handlers: [],
@@ -1473,6 +1582,7 @@ OC.set=function(name, value) {
/**
* Namespace for apps
+ * @namespace OCA
*/
window.OCA = {};
diff --git a/core/js/jstz.js b/core/js/jstz.js
deleted file mode 100644
index 0f9abe8b78d..00000000000
--- a/core/js/jstz.js
+++ /dev/null
@@ -1,358 +0,0 @@
-/**
- * This script gives you the zone info key representing your device's time zone setting.
- *
- * @name jsTimezoneDetect
- * @version 1.0.5
- * @author Jon Nylander
- * @license MIT License - http://www.opensource.org/licenses/mit-license.php
- *
- * For usage and examples, visit:
- * http://pellepim.bitbucket.org/jstz/
- *
- * Copyright (c) Jon Nylander
- */
-
-/*jslint undef: true */
-/*global console, exports*/
-
-(function(root) {
- /**
- * Namespace to hold all the code for timezone detection.
- */
- var jstz = (function () {
- 'use strict';
- var HEMISPHERE_SOUTH = 's',
-
- /**
- * Gets the offset in minutes from UTC for a certain date.
- * @param {Date} date
- * @returns {Number}
- */
- get_date_offset = function (date) {
- var offset = -date.getTimezoneOffset();
- return (offset !== null ? offset : 0);
- },
-
- get_date = function (year, month, date) {
- var d = new Date();
- if (year !== undefined) {
- d.setFullYear(year);
- }
- d.setMonth(month);
- d.setDate(date);
- return d;
- },
-
- get_january_offset = function (year) {
- return get_date_offset(get_date(year, 0 ,2));
- },
-
- get_june_offset = function (year) {
- return get_date_offset(get_date(year, 5, 2));
- },
-
- /**
- * Private method.
- * Checks whether a given date is in daylight saving time.
- * If the date supplied is after august, we assume that we're checking
- * for southern hemisphere DST.
- * @param {Date} date
- * @returns {Boolean}
- */
- date_is_dst = function (date) {
- var is_southern = date.getMonth() > 7,
- base_offset = is_southern ? get_june_offset(date.getFullYear()) :
- get_january_offset(date.getFullYear()),
- date_offset = get_date_offset(date),
- is_west = base_offset < 0,
- dst_offset = base_offset - date_offset;
-
- if (!is_west && !is_southern) {
- return dst_offset < 0;
- }
-
- return dst_offset !== 0;
- },
-
- /**
- * This function does some basic calculations to create information about
- * the user's timezone. It uses REFERENCE_YEAR as a solid year for which
- * the script has been tested rather than depend on the year set by the
- * client device.
- *
- * Returns a key that can be used to do lookups in jstz.olson.timezones.
- * eg: "720,1,2".
- *
- * @returns {String}
- */
-
- lookup_key = function () {
- var january_offset = get_january_offset(),
- june_offset = get_june_offset(),
- diff = january_offset - june_offset;
-
- if (diff < 0) {
- return january_offset + ",1";
- } else if (diff > 0) {
- return june_offset + ",1," + HEMISPHERE_SOUTH;
- }
-
- return january_offset + ",0";
- },
-
- /**
- * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
- *
- * Returns a primitive object on the format:
- * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
- *
- * @returns Object
- */
- determine = function () {
- var key = lookup_key();
- return new jstz.TimeZone(jstz.olson.timezones[key]);
- },
-
- /**
- * This object contains information on when daylight savings starts for
- * different timezones.
- *
- * The list is short for a reason. Often we do not have to be very specific
- * to single out the correct timezone. But when we do, this list comes in
- * handy.
- *
- * Each value is a date denoting when daylight savings starts for that timezone.
- */
- dst_start_for = function (tz_name) {
-
- var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
- dst_starts = {
- 'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
- 'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
- 'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
- 'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
- 'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
- 'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
- 'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
- 'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
- 'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
- 'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
- 'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
- 'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
- 'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
- 'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
- 'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
- 'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
- 'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
- 'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
- 'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
- 'Europe/Moscow': ru_pre_dst_change,
- 'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
- 'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
- 'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
- 'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
- 'Asia/Yekaterinburg': ru_pre_dst_change,
- 'Asia/Omsk': ru_pre_dst_change,
- 'Asia/Krasnoyarsk': ru_pre_dst_change,
- 'Asia/Irkutsk': ru_pre_dst_change,
- 'Asia/Yakutsk': ru_pre_dst_change,
- 'Asia/Vladivostok': ru_pre_dst_change,
- 'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
- 'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
- 'Asia/Kamchatka': ru_pre_dst_change,
- 'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
- 'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
- 'Europe/Minsk': ru_pre_dst_change,
- 'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
- 'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
- 'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
- };
-
- return dst_starts[tz_name];
- };
-
- return {
- determine: determine,
- date_is_dst: date_is_dst,
- dst_start_for: dst_start_for
- };
- }());
-
- /**
- * Simple object to perform ambiguity check and to return name of time zone.
- */
- jstz.TimeZone = function (tz_name) {
- 'use strict';
- /**
- * The keys in this object are timezones that we know may be ambiguous after
- * a preliminary scan through the olson_tz object.
- *
- * The array of timezones to compare must be in the order that daylight savings
- * starts for the regions.
- */
- var AMBIGUITIES = {
- 'America/Denver': ['America/Denver', 'America/Mazatlan'],
- 'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
- 'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
- 'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
- 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
- 'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
- 'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
- 'America/New_York': ['America/Havana', 'America/New_York'],
- 'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
- 'America/Godthab': ['America/Miquelon', 'America/Godthab'],
- 'Asia/Dubai': ['Europe/Moscow'],
- 'Asia/Dhaka': ['Asia/Yekaterinburg'],
- 'Asia/Jakarta': ['Asia/Omsk'],
- 'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
- 'Asia/Tokyo': ['Asia/Irkutsk'],
- 'Australia/Brisbane': ['Asia/Yakutsk'],
- 'Pacific/Noumea': ['Asia/Vladivostok'],
- 'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
- 'Pacific/Tongatapu': ['Pacific/Apia'],
- 'Asia/Baghdad': ['Europe/Minsk'],
- 'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
- 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
- },
-
- timezone_name = tz_name,
-
- /**
- * Checks if a timezone has possible ambiguities. I.e timezones that are similar.
- *
- * For example, if the preliminary scan determines that we're in America/Denver.
- * We double check here that we're really there and not in America/Mazatlan.
- *
- * This is done by checking known dates for when daylight savings start for different
- * timezones during 2010 and 2011.
- */
- ambiguity_check = function () {
- var ambiguity_list = AMBIGUITIES[timezone_name],
- length = ambiguity_list.length,
- i = 0,
- tz = ambiguity_list[0];
-
- for (; i < length; i += 1) {
- tz = ambiguity_list[i];
-
- if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
- timezone_name = tz;
- return;
- }
- }
- },
-
- /**
- * Checks if it is possible that the timezone is ambiguous.
- */
- is_ambiguous = function () {
- return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
- };
-
- if (is_ambiguous()) {
- ambiguity_check();
- }
-
- return {
- name: function () {
- return timezone_name;
- }
- };
- };
-
- jstz.olson = {};
-
- /*
- * The keys in this dictionary are comma separated as such:
- *
- * First the offset compared to UTC time in minutes.
- *
- * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
- * does.
- *
- * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
- * only interesting for timezones with DST.
- *
- * The mapped arrays is used for constructing the jstz.TimeZone object from within
- * jstz.determine_timezone();
- */
- jstz.olson.timezones = {
- '-720,0' : 'Pacific/Majuro',
- '-660,0' : 'Pacific/Pago_Pago',
- '-600,1' : 'America/Adak',
- '-600,0' : 'Pacific/Honolulu',
- '-570,0' : 'Pacific/Marquesas',
- '-540,0' : 'Pacific/Gambier',
- '-540,1' : 'America/Anchorage',
- '-480,1' : 'America/Los_Angeles',
- '-480,0' : 'Pacific/Pitcairn',
- '-420,0' : 'America/Phoenix',
- '-420,1' : 'America/Denver',
- '-360,0' : 'America/Guatemala',
- '-360,1' : 'America/Chicago',
- '-360,1,s' : 'Pacific/Easter',
- '-300,0' : 'America/Bogota',
- '-300,1' : 'America/New_York',
- '-270,0' : 'America/Caracas',
- '-240,1' : 'America/Halifax',
- '-240,0' : 'America/Santo_Domingo',
- '-240,1,s' : 'America/Santiago',
- '-210,1' : 'America/St_Johns',
- '-180,1' : 'America/Godthab',
- '-180,0' : 'America/Argentina/Buenos_Aires',
- '-180,1,s' : 'America/Montevideo',
- '-120,0' : 'America/Noronha',
- '-120,1' : 'America/Noronha',
- '-60,1' : 'Atlantic/Azores',
- '-60,0' : 'Atlantic/Cape_Verde',
- '0,0' : 'UTC',
- '0,1' : 'Europe/London',
- '60,1' : 'Europe/Berlin',
- '60,0' : 'Africa/Lagos',
- '60,1,s' : 'Africa/Windhoek',
- '120,1' : 'Asia/Beirut',
- '120,0' : 'Africa/Johannesburg',
- '180,0' : 'Asia/Baghdad',
- '180,1' : 'Europe/Moscow',
- '210,1' : 'Asia/Tehran',
- '240,0' : 'Asia/Dubai',
- '240,1' : 'Asia/Baku',
- '270,0' : 'Asia/Kabul',
- '300,1' : 'Asia/Yekaterinburg',
- '300,0' : 'Asia/Karachi',
- '330,0' : 'Asia/Kolkata',
- '345,0' : 'Asia/Kathmandu',
- '360,0' : 'Asia/Dhaka',
- '360,1' : 'Asia/Omsk',
- '390,0' : 'Asia/Rangoon',
- '420,1' : 'Asia/Krasnoyarsk',
- '420,0' : 'Asia/Jakarta',
- '480,0' : 'Asia/Shanghai',
- '480,1' : 'Asia/Irkutsk',
- '525,0' : 'Australia/Eucla',
- '525,1,s' : 'Australia/Eucla',
- '540,1' : 'Asia/Yakutsk',
- '540,0' : 'Asia/Tokyo',
- '570,0' : 'Australia/Darwin',
- '570,1,s' : 'Australia/Adelaide',
- '600,0' : 'Australia/Brisbane',
- '600,1' : 'Asia/Vladivostok',
- '600,1,s' : 'Australia/Sydney',
- '630,1,s' : 'Australia/Lord_Howe',
- '660,1' : 'Asia/Kamchatka',
- '660,0' : 'Pacific/Noumea',
- '690,0' : 'Pacific/Norfolk',
- '720,1,s' : 'Pacific/Auckland',
- '720,0' : 'Pacific/Tarawa',
- '765,1,s' : 'Pacific/Chatham',
- '780,0' : 'Pacific/Tongatapu',
- '780,1,s' : 'Pacific/Apia',
- '840,0' : 'Pacific/Kiritimati'
- };
-
- if (typeof exports !== 'undefined') {
- exports.jstz = jstz;
- } else {
- root.jstz = jstz;
- }
-})(this);
diff --git a/core/js/l10n.js b/core/js/l10n.js
index e375b7eca80..60ffa949191 100644
--- a/core/js/l10n.js
+++ b/core/js/l10n.js
@@ -27,11 +27,43 @@ OC.L10N = {
_pluralFunctions: {},
/**
+ * Load an app's translation bundle if not loaded already.
+ *
+ * @param {String} appName name of the app
+ * @param {Function} callback callback to be called when
+ * the translations are loaded
+ * @return {Promise} promise
+ */
+ load: function(appName, callback) {
+ // already available ?
+ if (this._bundles[appName] || OC.getLocale() === 'en') {
+ var deferred = $.Deferred();
+ var promise = deferred.promise();
+ promise.then(callback);
+ deferred.resolve();
+ return promise;
+ }
+
+ var self = this;
+ var url = OC.filePath(appName, 'l10n', OC.getLocale() + '.json');
+
+ // load JSON translation bundle per AJAX
+ return $.get(url)
+ .then(
+ function(result) {
+ if (result.translations) {
+ self.register(appName, result.translations, result.pluralForm);
+ }
+ })
+ .then(callback);
+ },
+
+ /**
* Register an app's translation bundle.
*
* @param {String} appName name of the app
- * @param {Object<String,String>} strings bundle
- * @param {{Function|String}} [pluralForm] optional plural function or plural string
+ * @param {Object<String,String>} bundle
+ * @param {Function|String} [pluralForm] optional plural function or plural string
*/
register: function(appName, bundle, pluralForm) {
this._bundles[appName] = bundle || {};
@@ -97,9 +129,17 @@ OC.L10N = {
* @param {string} text the string to translate
* @param [vars] map of placeholder key to value
* @param {number} [count] number to replace %n with
+ * @param {array} [options] options array
+ * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)
* @return {string}
*/
- translate: function(app, text, vars, count) {
+ translate: function(app, text, vars, count, options) {
+ var defaultOptions = {
+ escape: true
+ },
+ allOptions = options || {};
+ _.defaults(allOptions, defaultOptions);
+
// TODO: cache this function to avoid inline recreation
// of the same function over and over again in case
// translate() is used in a loop
@@ -107,7 +147,15 @@ OC.L10N = {
return text.replace(/%n/g, count).replace(/{([^{}]*)}/g,
function (a, b) {
var r = vars[b];
- return typeof r === 'string' || typeof r === 'number' ? r : a;
+ if(typeof r === 'string' || typeof r === 'number') {
+ if(allOptions.escape) {
+ return escapeHTML(r);
+ } else {
+ return r;
+ }
+ } else {
+ return a;
+ }
}
);
};
@@ -128,13 +176,15 @@ OC.L10N = {
/**
* Translate a plural string
* @param {string} app the id of the app for which to translate the string
- * @param {string} text_singular the string to translate for exactly one object
- * @param {string} text_plural the string to translate for n objects
+ * @param {string} textSingular the string to translate for exactly one object
+ * @param {string} textPlural the string to translate for n objects
* @param {number} count number to determine whether to use singular or plural
* @param [vars] map of placeholder key to value
+ * @param {array} [options] options array
+ * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)
* @return {string} Translated string
*/
- translatePlural: function(app, textSingular, textPlural, count, vars) {
+ translatePlural: function(app, textSingular, textPlural, count, vars, options) {
var identifier = '_' + textSingular + '_::_' + textPlural + '_';
var bundle = this._bundles[app] || {};
var value = bundle[identifier];
@@ -142,15 +192,15 @@ OC.L10N = {
var translation = value;
if ($.isArray(translation)) {
var plural = this._pluralFunctions[app](count);
- return this.translate(app, translation[plural.plural], vars, count);
+ return this.translate(app, translation[plural.plural], vars, count, options);
}
}
if(count === 1) {
- return this.translate(app, textSingular, vars, count);
+ return this.translate(app, textSingular, vars, count, options);
}
else{
- return this.translate(app, textPlural, vars, count);
+ return this.translate(app, textPlural, vars, count, options);
}
}
};
diff --git a/core/js/lostpassword.js b/core/js/lostpassword.js
index ad221cb30fc..294a9d8c1cf 100644
--- a/core/js/lostpassword.js
+++ b/core/js/lostpassword.js
@@ -8,19 +8,12 @@ OC.Lostpassword = {
+ ('<br /><input type="checkbox" id="encrypted-continue" value="Yes" />')
+ '<label for="encrypted-continue">'
+ t('core', 'I know what I\'m doing')
- + '</label><br />'
- + '<a id="lost-password-encryption" href>'
- + t('core', 'Reset password')
- + '</a>',
+ + '</label><br />',
resetErrorMsg : t('core', 'Password can not be changed. Please contact your administrator.'),
init : function() {
- if ($('#lost-password-encryption').length){
- $('#lost-password-encryption').click(OC.Lostpassword.sendLink);
- } else {
- $('#lost-password').click(OC.Lostpassword.sendLink);
- }
+ $('#lost-password').click(OC.Lostpassword.sendLink);
$('#reset-password #submit').click(OC.Lostpassword.resetPassword);
},
@@ -32,8 +25,7 @@ OC.Lostpassword = {
$.post(
OC.generateUrl('/lostpassword/email'),
{
- user : $('#user').val(),
- proceed: $('#encrypted-continue').attr('checked') ? 'Yes' : 'No'
+ user : $('#user').val()
},
OC.Lostpassword.sendLinkDone
);
@@ -84,11 +76,16 @@ OC.Lostpassword = {
$.post(
$('#password').parents('form').attr('action'),
{
- password : $('#password').val()
+ password : $('#password').val(),
+ proceed: $('#encrypted-continue').attr('checked') ? 'true' : 'false'
},
OC.Lostpassword.resetDone
);
}
+ if($('#encrypted-continue').attr('checked')) {
+ $('#reset-password #submit').hide();
+ $('#reset-password #float-spinner').removeClass('hidden');
+ }
},
resetDone : function(result){
@@ -115,7 +112,11 @@ OC.Lostpassword = {
},
redirect : function(msg){
- window.location = OC.webroot;
+ if(OC.webroot !== '') {
+ window.location = OC.webroot;
+ } else {
+ window.location = '/';
+ }
},
resetError : function(msg){
@@ -126,7 +127,7 @@ OC.Lostpassword = {
getResetStatusNode : function (){
if (!$('#lost-password').length){
- $('<p id="lost-password"></p>').insertAfter($('#submit'));
+ $('<p id="lost-password"></p>').insertBefore($('#reset-password fieldset'));
} else {
$('#lost-password').replaceWith($('<p id="lost-password"></p>'));
}
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index bd6fd2e5007..0c046d8ef0e 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -23,6 +23,7 @@
/**
* this class to ease the usage of jquery dialogs
+ * @lends OC.dialogs
*/
var OCdialogs = {
// dialog button types
@@ -362,56 +363,69 @@ var OCdialogs = {
return canvas.toDataURL("image/png", 0.7);
};
- var addConflict = function(conflicts, original, replacement) {
+ var addConflict = function($conflicts, original, replacement) {
- var conflict = conflicts.find('.template').clone().removeClass('template').addClass('conflict');
+ var $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict');
+ var $originalDiv = $conflict.find('.original');
+ var $replacementDiv = $conflict.find('.replacement');
- conflict.data('data',data);
+ $conflict.data('data',data);
- conflict.find('.filename').text(original.name);
- conflict.find('.original .size').text(humanFileSize(original.size));
- conflict.find('.original .mtime').text(formatDate(original.mtime));
+ $conflict.find('.filename').text(original.name);
+ $originalDiv.find('.size').text(humanFileSize(original.size));
+ $originalDiv.find('.mtime').text(formatDate(original.mtime));
// ie sucks
if (replacement.size && replacement.lastModifiedDate) {
- conflict.find('.replacement .size').text(humanFileSize(replacement.size));
- conflict.find('.replacement .mtime').text(formatDate(replacement.lastModifiedDate));
+ $replacementDiv.find('.size').text(humanFileSize(replacement.size));
+ $replacementDiv.find('.mtime').text(formatDate(replacement.lastModifiedDate));
}
var path = original.directory + '/' +original.name;
Files.lazyLoadPreview(path, original.mimetype, function(previewpath){
- conflict.find('.original .icon').css('background-image','url('+previewpath+')');
+ $originalDiv.find('.icon').css('background-image','url('+previewpath+')');
}, 96, 96, original.etag);
getCroppedPreview(replacement).then(
function(path){
- conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
+ $replacementDiv.find('.icon').css('background-image','url(' + path + ')');
}, function(){
Files.getMimeIcon(replacement.type,function(path){
- conflict.find('.replacement .icon').css('background-image','url(' + path + ')');
+ $replacementDiv.find('.icon').css('background-image','url(' + path + ')');
});
}
);
- conflicts.append(conflict);
+ $conflicts.append($conflict);
//set more recent mtime bold
// ie sucks
if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime) {
- conflict.find('.replacement .mtime').css('font-weight', 'bold');
+ $replacementDiv.find('.mtime').css('font-weight', 'bold');
} else if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() < original.mtime) {
- conflict.find('.original .mtime').css('font-weight', 'bold');
+ $originalDiv.find('.mtime').css('font-weight', 'bold');
} else {
//TODO add to same mtime collection?
}
// set bigger size bold
if (replacement.size && replacement.size > original.size) {
- conflict.find('.replacement .size').css('font-weight', 'bold');
+ $replacementDiv.find('.size').css('font-weight', 'bold');
} else if (replacement.size && replacement.size < original.size) {
- conflict.find('.original .size').css('font-weight', 'bold');
+ $originalDiv.find('.size').css('font-weight', 'bold');
} else {
//TODO add to same size collection?
}
//TODO show skip action for files with same size and mtime in bottom row
+ // always keep readonly files
+
+ if (original.status === 'readonly') {
+ $originalDiv
+ .addClass('readonly')
+ .find('input[type="checkbox"]')
+ .prop('checked', true)
+ .prop('disabled', true);
+ $originalDiv.find('.message')
+ .text(t('core','read-only'))
+ }
};
//var selection = controller.getSelection(data.originalFiles);
//if (selection.defaultAction) {
@@ -422,8 +436,8 @@ var OCdialogs = {
if (this._fileexistsshown) {
// add conflict
- var conflicts = $(dialogId+ ' .conflicts');
- addConflict(conflicts, original, replacement);
+ var $conflicts = $(dialogId+ ' .conflicts');
+ addConflict($conflicts, original, replacement);
var count = $(dialogId+ ' .conflict').length;
var title = n('core',
@@ -455,8 +469,8 @@ var OCdialogs = {
});
$('body').append($dlg);
- var conflicts = $($dlg).find('.conflicts');
- addConflict(conflicts, original, replacement);
+ var $conflicts = $dlg.find('.conflicts');
+ addConflict($conflicts, original, replacement);
var buttonlist = [{
text: t('core', 'Cancel'),
@@ -495,20 +509,20 @@ var OCdialogs = {
//add checkbox toggling actions
$(dialogId).find('.allnewfiles').on('click', function() {
- var checkboxes = $(dialogId).find('.conflict .replacement input[type="checkbox"]');
- checkboxes.prop('checked', $(this).prop('checked'));
+ var $checkboxes = $(dialogId).find('.conflict .replacement input[type="checkbox"]');
+ $checkboxes.prop('checked', $(this).prop('checked'));
});
$(dialogId).find('.allexistingfiles').on('click', function() {
- var checkboxes = $(dialogId).find('.conflict .original input[type="checkbox"]');
- checkboxes.prop('checked', $(this).prop('checked'));
+ var $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type="checkbox"]');
+ $checkboxes.prop('checked', $(this).prop('checked'));
});
- $(dialogId).find('.conflicts').on('click', '.replacement,.original', function() {
- var checkbox = $(this).find('input[type="checkbox"]');
- checkbox.prop('checked', !checkbox.prop('checked'));
+ $(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {
+ var $checkbox = $(this).find('input[type="checkbox"]');
+ $checkbox.prop('checked', !$checkbox.prop('checked'));
});
- $(dialogId).find('.conflicts').on('click', 'input[type="checkbox"]', function() {
- var checkbox = $(this);
- checkbox.prop('checked', !checkbox.prop('checked'));
+ $(dialogId).find('.conflicts').on('click', '.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]', function() {
+ var $checkbox = $(this);
+ $checkbox.prop('checked', !checkbox.prop('checked'));
});
//update counters
diff --git a/core/js/oc-requesttoken.js b/core/js/oc-requesttoken.js
index 02175a3d674..2f7548ecb77 100644
--- a/core/js/oc-requesttoken.js
+++ b/core/js/oc-requesttoken.js
@@ -1,3 +1,4 @@
$(document).on('ajaxSend',function(elm, xhr) {
xhr.setRequestHeader('requesttoken', oc_requesttoken);
-}); \ No newline at end of file
+ xhr.setRequestHeader('OCS-APIREQUEST', 'true');
+});
diff --git a/core/js/setup.js b/core/js/setup.js
index 1eceb8ced70..e65b795646e 100644
--- a/core/js/setup.js
+++ b/core/js/setup.js
@@ -103,4 +103,18 @@ $(document).ready(function() {
t('core', 'Strong password')
]
});
+
+ // centers the database chooser if it is too wide
+ if($('#databaseBackend').width() > 300) {
+ // this somehow needs to wait 250 milliseconds
+ // otherwise it gets overwritten
+ setTimeout(function(){
+ // calculate negative left margin
+ // half of the difference of width and default bix width of 300
+ // add 10 to clear left side padding of button group
+ var leftMargin = (($('#databaseBackend').width() - 300) / 2 + 10 ) * -1;
+
+ $('#databaseBackend').css('margin-left', Math.floor(leftMargin) + 'px');
+ }, 250);
+ }
});
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index f351c1b451a..db5365c124d 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -49,11 +49,16 @@
var afterCall = function(data, statusText, xhr) {
var messages = [];
if (xhr.status === 200 && data) {
- if (!data.serverhasinternetconnection) {
+ if (!data.serverHasInternetConnection) {
messages.push(
t('core', 'This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.')
);
}
+ if(!data.dataDirectoryProtected) {
+ messages.push(
+ t('core', '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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.')
+ );
+ }
} else {
messages.push(t('core', 'Error occurred while checking server setup'));
}
diff --git a/core/js/share.js b/core/js/share.js
index d9ae0168129..2692ff60b5c 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -8,6 +8,7 @@ OC.Share={
SHARE_TYPE_GROUP:1,
SHARE_TYPE_LINK:3,
SHARE_TYPE_EMAIL:4,
+ SHARE_TYPE_REMOTE:6,
/**
* Regular expression for splitting parts of remote share owners:
@@ -131,7 +132,7 @@ OC.Share={
}
for(i = 0; i < files.length; i++) {
if ($(files[i]).closest('tr').data('type') === 'dir') {
- $(files[i]).css('background-image', 'url('+shareFolder+')');
+ $(files[i]).find('.thumbnail').css('background-image', 'url('+shareFolder+')');
}
}
}
@@ -238,10 +239,10 @@ OC.Share={
else {
shareFolderIcon = OC.imagePath('core', 'filetypes/folder-shared');
}
- $tr.children('.filename').css('background-image', 'url(' + shareFolderIcon + ')');
+ $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');
} else if (type === 'dir') {
shareFolderIcon = OC.imagePath('core', 'filetypes/folder');
- $tr.children('.filename').css('background-image', 'url(' + shareFolderIcon + ')');
+ $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');
}
// update share action text / icon
if (hasShares || owner) {
@@ -254,7 +255,7 @@ OC.Share={
message = this._formatSharedByOwner(owner);
}
else if (recipients) {
- message = t('core', 'Shared with {recipients}', {recipients: escapeHTML(recipients)});
+ message = t('core', 'Shared with {recipients}', {recipients: recipients});
}
action.html(' <span>' + message + '</span>').prepend(img);
if (owner) {
@@ -354,9 +355,9 @@ OC.Share={
var html = '<div id="dropdown" class="drop shareDropDown" data-item-type="'+itemType+'" data-item-source="'+itemSource+'">';
if (data !== false && data.reshare !== false && data.reshare.uid_owner !== undefined) {
if (data.reshare.share_type == OC.Share.SHARE_TYPE_GROUP) {
- html += '<span class="reshare">'+t('core', 'Shared with you and the group {group} by {owner}', {group: escapeHTML(data.reshare.share_with), owner: escapeHTML(data.reshare.displayname_owner)})+'</span>';
+ html += '<span class="reshare">'+t('core', 'Shared with you and the group {group} by {owner}', {group: data.reshare.share_with, owner: data.reshare.displayname_owner})+'</span>';
} else {
- html += '<span class="reshare">'+t('core', 'Shared with you by {owner}', {owner: escapeHTML(data.reshare.displayname_owner)})+'</span>';
+ html += '<span class="reshare">'+t('core', 'Shared with you by {owner}', {owner: data.reshare.displayname_owner})+'</span>';
}
html += '<br />';
}
@@ -380,6 +381,7 @@ OC.Share={
}
});
+ html += '<label for="shareWith" class="hidden-visually">'+t('core', 'Share')+'</label>';
html += '<input id="shareWith" type="text" placeholder="'+t('core', 'Share with user or group …')+'" />';
html += '<span class="shareWithLoading icon-loading-small hidden"></span>';
html += '<ul id="shareWithList">';
@@ -393,12 +395,14 @@ OC.Share={
var defaultExpireMessage = '';
if ((itemType === 'folder' || itemType === 'file') && oc_appconfig.core.defaultExpireDateEnforced) {
- defaultExpireMessage = t('core', 'The public link will expire no later than {days} days after it is created', {'days': escapeHTML(oc_appconfig.core.defaultExpireDate)}) + '<br/>';
+ defaultExpireMessage = t('core', 'The public link will expire no later than {days} days after it is created', {'days': oc_appconfig.core.defaultExpireDate}) + '<br/>';
}
+ html += '<label for="linkText" class="hidden-visually">'+t('core', 'Link')+'</label>';
html += '<input id="linkText" type="text" readonly="readonly" />';
html += '<input type="checkbox" name="showPassword" id="showPassword" value="1" style="display:none;" /><label for="showPassword" style="display:none;">'+t('core', 'Password protect')+'</label>';
html += '<div id="linkPass">';
+ html += '<label for="linkPassText" class="hidden-visually">'+t('core', 'Password')+'</label>';
html += '<input id="linkPassText" type="password" placeholder="'+t('core', 'Choose a password for the public link')+'" />';
html += '<span class="icon-loading-small hidden"></span>';
html += '</div>';
@@ -407,17 +411,22 @@ OC.Share={
html += '<div id="allowPublicUploadWrapper" style="display:none;">';
html += '<span class="icon-loading-small hidden"></span>';
html += '<input type="checkbox" value="1" name="allowPublicUpload" id="sharingDialogAllowPublicUpload"' + ((allowPublicUploadStatus) ? 'checked="checked"' : '') + ' />';
- html += '<label for="sharingDialogAllowPublicUpload">' + t('core', 'Allow Public Upload') + '</label>';
+ html += '<label for="sharingDialogAllowPublicUpload">' + t('core', 'Allow editing') + '</label>';
html += '</div>';
}
- html += '</div><form id="emailPrivateLink" >';
- html += '<input id="email" style="display:none; width:62%;" value="" placeholder="'+t('core', 'Email link to person')+'" type="text" />';
- html += '<input id="emailButton" style="display:none;" type="submit" value="'+t('core', 'Send')+'" />';
- html += '</form>';
+ html += '</div>';
+ var mailPublicNotificationEnabled = $('input:hidden[name=mailPublicNotificationEnabled]').val();
+ if (mailPublicNotificationEnabled === 'yes') {
+ html += '<form id="emailPrivateLink">';
+ html += '<input id="email" style="display:none; width:62%;" value="" placeholder="'+t('core', 'Email link to person')+'" type="text" />';
+ html += '<input id="emailButton" style="display:none;" type="submit" value="'+t('core', 'Send')+'" />';
+ html += '</form>';
+ }
}
html += '<div id="expiration">';
html += '<input type="checkbox" name="expirationCheckbox" id="expirationCheckbox" value="1" /><label for="expirationCheckbox">'+t('core', 'Set expiration date')+'</label>';
+ html += '<label for="expirationDate" class="hidden-visually">'+t('core', 'Expiration')+'</label>';
html += '<input id="expirationDate" type="text" placeholder="'+t('core', 'Expiration date')+'" style="display:none; width:90%;" />';
html += '<em id="defaultExpireMessage">'+defaultExpireMessage+'</em>';
html += '</div>';
@@ -436,7 +445,11 @@ OC.Share={
if (share.collection) {
OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, share.mail_send, share.collection);
} else {
- OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, share.mail_send, false);
+ if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {
+ OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE, share.mail_send, false);
+ } else {
+ OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, share.mail_send, false);
+ }
}
}
if (share.expiration != null) {
@@ -447,7 +460,7 @@ OC.Share={
$('#shareWith').autocomplete({minLength: 2, delay: 750, source: function(search, response) {
var $loading = $('#dropdown .shareWithLoading');
$loading.removeClass('hidden');
- $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: OC.Share.itemShares }, function(result) {
+ $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term.trim(), itemShares: OC.Share.itemShares, itemType: itemType }, function(result) {
$loading.addClass('hidden');
if (result.status == 'success' && result.data.length > 0) {
$( "#shareWith" ).autocomplete( "option", "autoFocus", true );
@@ -476,20 +489,23 @@ OC.Share={
// Default permissions are Edit (CRUD) and Share
// Check if these permissions are possible
var permissions = OC.PERMISSION_READ;
- if (possiblePermissions & OC.PERMISSION_UPDATE) {
- permissions = permissions | OC.PERMISSION_UPDATE;
- }
- if (possiblePermissions & OC.PERMISSION_CREATE) {
- permissions = permissions | OC.PERMISSION_CREATE;
- }
- if (possiblePermissions & OC.PERMISSION_DELETE) {
- permissions = permissions | OC.PERMISSION_DELETE;
- }
- if (oc_appconfig.core.resharingAllowed && (possiblePermissions & OC.PERMISSION_SHARE)) {
- permissions = permissions | OC.PERMISSION_SHARE;
+ if (shareType === OC.Share.SHARE_TYPE_REMOTE) {
+ permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_READ;
+ } else {
+ if (possiblePermissions & OC.PERMISSION_UPDATE) {
+ permissions = permissions | OC.PERMISSION_UPDATE;
+ }
+ if (possiblePermissions & OC.PERMISSION_CREATE) {
+ permissions = permissions | OC.PERMISSION_CREATE;
+ }
+ if (possiblePermissions & OC.PERMISSION_DELETE) {
+ permissions = permissions | OC.PERMISSION_DELETE;
+ }
+ if (oc_appconfig.core.resharingAllowed && (possiblePermissions & OC.PERMISSION_SHARE)) {
+ permissions = permissions | OC.PERMISSION_SHARE;
+ }
}
-
var $input = $(this);
var $loading = $dropDown.find('.shareWithLoading');
$loading.removeClass('hidden');
@@ -499,7 +515,11 @@ OC.Share={
OC.Share.share(itemType, itemSource, shareType, shareWith, permissions, itemSourceName, expirationDate, function() {
$input.prop('disabled', false);
$loading.addClass('hidden');
- OC.Share.addShareWith(shareType, shareWith, selected.item.label, permissions, possiblePermissions);
+ var posPermissions = possiblePermissions;
+ if (shareType === OC.Share.SHARE_TYPE_REMOTE) {
+ posPermissions = permissions;
+ }
+ OC.Share.addShareWith(shareType, shareWith, selected.item.label, permissions, posPermissions);
$('#shareWith').val('');
$('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares}));
OC.Share.updateIcon(itemType, itemSource);
@@ -510,17 +530,22 @@ OC.Share={
// customize internal _renderItem function to display groups and users differently
.data("ui-autocomplete")._renderItem = function( ul, item ) {
var insert = $( "<a>" );
- var text = (item.value.shareType == 1)? item.label + ' ('+t('core', 'group')+')' : item.label;
+ var text = item.label;
+ if (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) {
+ text = text + ' ('+t('core', 'group')+')';
+ } else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) {
+ text = text + ' ('+t('core', 'remote')+')';
+ }
insert.text( text );
- if(item.value.shareType == 1) {
+ if(item.value.shareType === OC.Share.SHARE_TYPE_GROUP) {
insert = insert.wrapInner('<strong></strong>');
}
return $( "<li>" )
- .addClass((item.value.shareType == 1)?'group':'user')
+ .addClass((item.value.shareType === OC.Share.SHARE_TYPE_GROUP)?'group':'user')
.append( insert )
.appendTo( ul );
};
- if (link && linksAllowed) {
+ if (link && linksAllowed && $('#email').length != 0) {
$('#email').autocomplete({
minLength: 1,
source: function (search, response) {
@@ -577,9 +602,12 @@ OC.Share={
share_with_displayname: shareWithDisplayName,
permissions: permissions
};
- if (shareType === 1) {
+ if (shareType === OC.Share.SHARE_TYPE_GROUP) {
shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'group') + ')';
}
+ if (shareType === OC.Share.SHARE_TYPE_REMOTE) {
+ shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'remote') + ')';
+ }
if (!OC.Share.itemShares[shareType]) {
OC.Share.itemShares[shareType] = [];
}
@@ -594,7 +622,7 @@ OC.Share={
if (collectionList.length > 0) {
$(collectionList).append(', '+shareWithDisplayName);
} else {
- var html = '<li style="clear: both;" data-collection="'+item+'">'+t('core', 'Shared in {item} with {user}', {'item': escapeHTML(item), user: escapeHTML(shareWithDisplayName)})+'</li>';
+ var html = '<li style="clear: both;" data-collection="'+item+'">'+t('core', 'Shared in {item} with {user}', {'item': item, user: shareWithDisplayName})+'</li>';
$('#shareWithList').prepend(html);
}
} else {
@@ -619,7 +647,7 @@ OC.Share={
html += '<a href="#" class="unshare"><img class="svg" alt="'+t('core', 'Unshare')+'" title="'+t('core', 'Unshare')+'" src="'+OC.imagePath('core', 'actions/delete')+'"/></a>';
html += '<span class="username">' + escapeHTML(shareWithDisplayName) + '</span>';
var mailNotificationEnabled = $('input:hidden[name=mailNotificationEnabled]').val();
- if (mailNotificationEnabled === 'yes') {
+ if (mailNotificationEnabled === 'yes' && shareType !== OC.Share.SHARE_TYPE_REMOTE) {
var checked = '';
if (mailSend === '1') {
checked = 'checked';
@@ -632,17 +660,19 @@ OC.Share={
if (possiblePermissions & OC.PERMISSION_CREATE || possiblePermissions & OC.PERMISSION_UPDATE || possiblePermissions & OC.PERMISSION_DELETE) {
html += '<input id="canEdit-'+escapeHTML(shareWith)+'" type="checkbox" name="edit" class="permissions" '+editChecked+' /><label for="canEdit-'+escapeHTML(shareWith)+'">'+t('core', 'can edit')+'</label>';
}
- showCrudsButton = '<a href="#" class="showCruds"><img class="svg" alt="'+t('core', 'access control')+'" title="'+t('core', 'access control')+'" src="'+OC.imagePath('core', 'actions/triangle-s')+'"/></a>';
+ if (shareType !== OC.Share.SHARE_TYPE_REMOTE) {
+ showCrudsButton = '<a href="#" class="showCruds"><img class="svg" alt="'+t('core', 'access control')+'" src="'+OC.imagePath('core', 'actions/triangle-s')+'"/></a>';
+ }
html += '<div class="cruds" style="display:none;">';
- if (possiblePermissions & OC.PERMISSION_CREATE) {
- html += '<input id="canCreate-'+escapeHTML(shareWith)+'" type="checkbox" name="create" class="permissions" '+createChecked+' data-permissions="'+OC.PERMISSION_CREATE+'"/><label for="canCreate-'+escapeHTML(shareWith)+'">'+t('core', 'create')+'</label>';
- }
- if (possiblePermissions & OC.PERMISSION_UPDATE) {
- html += '<input id="canUpdate-'+escapeHTML(shareWith)+'" type="checkbox" name="update" class="permissions" '+updateChecked+' data-permissions="'+OC.PERMISSION_UPDATE+'"/><label for="canUpdate-'+escapeHTML(shareWith)+'">'+t('core', 'update')+'</label>';
- }
- if (possiblePermissions & OC.PERMISSION_DELETE) {
- html += '<input id="canDelete-'+escapeHTML(shareWith)+'" type="checkbox" name="delete" class="permissions" '+deleteChecked+' data-permissions="'+OC.PERMISSION_DELETE+'"/><label for="canDelete-'+escapeHTML(shareWith)+'">'+t('core', 'delete')+'</label>';
- }
+ if (possiblePermissions & OC.PERMISSION_CREATE) {
+ html += '<input id="canCreate-' + escapeHTML(shareWith) + '" type="checkbox" name="create" class="permissions" ' + createChecked + ' data-permissions="' + OC.PERMISSION_CREATE + '"/><label for="canCreate-' + escapeHTML(shareWith) + '">' + t('core', 'create') + '</label>';
+ }
+ if (possiblePermissions & OC.PERMISSION_UPDATE) {
+ html += '<input id="canUpdate-' + escapeHTML(shareWith) + '" type="checkbox" name="update" class="permissions" ' + updateChecked + ' data-permissions="' + OC.PERMISSION_UPDATE + '"/><label for="canUpdate-' + escapeHTML(shareWith) + '">' + t('core', 'change') + '</label>';
+ }
+ if (possiblePermissions & OC.PERMISSION_DELETE) {
+ html += '<input id="canDelete-' + escapeHTML(shareWith) + '" type="checkbox" name="delete" class="permissions" ' + deleteChecked + ' data-permissions="' + OC.PERMISSION_DELETE + '"/><label for="canDelete-' + escapeHTML(shareWith) + '">' + t('core', 'delete') + '</label>';
+ }
html += '</div>';
html += '</li>';
html = $(html).appendTo('#shareWithList');
diff --git a/core/js/snap.js b/core/js/snap.js
deleted file mode 100644
index 19942e866a9..00000000000
--- a/core/js/snap.js
+++ /dev/null
@@ -1,785 +0,0 @@
-/*! Snap.js v2.0.0-rc1 */
-(function(win, doc) {
-
- 'use strict';
-
- // Our export
- var Namespace = 'Snap';
-
- // Our main toolbelt
- var utils = {
-
- /**
- * Deeply extends two objects
- * @param {Object} destination The destination object
- * @param {Object} source The custom options to extend destination by
- * @return {Object} The desination object
- */
- extend: function(destination, source) {
- var property;
- for (property in source) {
- if (source[property] && source[property].constructor && source[property].constructor === Object) {
- destination[property] = destination[property] || {};
- utils.extend(destination[property], source[property]);
- } else {
- destination[property] = source[property];
- }
- }
- return destination;
- }
- };
-
- /**
- * Our Snap global that initializes our instance
- * @param {Object} opts The custom Snap.js options
- */
- var Core = function( opts ) {
-
- var self = this;
-
- /**
- * Our default settings for a Snap instance
- * @type {Object}
- */
- var settings = self.settings = {
- element: null,
- dragger: null,
- disable: 'none',
- addBodyClasses: true,
- hyperextensible: true,
- resistance: 0.5,
- flickThreshold: 50,
- transitionSpeed: 0.3,
- easing: 'ease',
- maxPosition: 266,
- minPosition: -266,
- tapToClose: true,
- touchToDrag: true,
- clickToDrag: true,
- slideIntent: 40, // degrees
- minDragDistance: 5
- };
-
- /**
- * Stores internally global data
- * @type {Object}
- */
- var cache = self.cache = {
- isDragging: false,
- simpleStates: {
- opening: null,
- towards: null,
- hyperExtending: null,
- halfway: null,
- flick: null,
- translation: {
- absolute: 0,
- relative: 0,
- sinceDirectionChange: 0,
- percentage: 0
- }
- }
- };
-
- var eventList = self.eventList = {};
-
- utils.extend(utils, {
-
- /**
- * Determines if we are interacting with a touch device
- * @type {Boolean}
- */
- hasTouch: ('ontouchstart' in doc.documentElement || win.navigator.msPointerEnabled),
-
- /**
- * Returns the appropriate event type based on whether we are a touch device or not
- * @param {String} action The "action" event you're looking for: up, down, move, out
- * @return {String} The browsers supported event name
- */
- eventType: function(action) {
- var eventTypes = {
- down: (utils.hasTouch ? 'touchstart' : settings.clickToDrag ? 'mousedown' : ''),
- move: (utils.hasTouch ? 'touchmove' : settings.clickToDrag ? 'mousemove' : ''),
- up: (utils.hasTouch ? 'touchend' : settings.clickToDrag ? 'mouseup': ''),
- out: (utils.hasTouch ? 'touchcancel' : settings.clickToDrag ? 'mouseout' : '')
- };
- return eventTypes[action];
- },
-
- /**
- * Returns the correct "cursor" position on both browser and mobile
- * @param {String} t The coordinate to retrieve, either "X" or "Y"
- * @param {Object} e The event object being triggered
- * @return {Number} The desired coordiante for the events interaction
- */
- page: function(t, e){
- return (utils.hasTouch && e.touches.length && e.touches[0]) ? e.touches[0]['page'+t] : e['page'+t];
- },
-
-
- klass: {
-
- /**
- * Checks if an element has a class name
- * @param {Object} el The element to check
- * @param {String} name The class name to search for
- * @return {Boolean} Returns true if the class exists
- */
- has: function(el, name){
- return (el.className).indexOf(name) !== -1;
- },
-
- /**
- * Adds a class name to an element
- * @param {Object} el The element to add to
- * @param {String} name The class name to add
- */
- add: function(el, name){
- if(!utils.klass.has(el, name) && settings.addBodyClasses){
- el.className += " "+name;
- }
- },
-
- /**
- * Removes a class name
- * @param {Object} el The element to remove from
- * @param {String} name The class name to remove
- */
- remove: function(el, name){
- if(utils.klass.has(el, name) && settings.addBodyClasses){
- el.className = (el.className).replace(name, "").replace(/^\s+|\s+$/g, '');
- }
- }
- },
-
- /**
- * Dispatch a custom Snap.js event
- * @param {String} type The event name
- */
- dispatchEvent: function(type) {
- if( typeof eventList[type] === 'function') {
- return eventList[type].apply();
- }
- },
-
- /**
- * Determines the browsers vendor prefix for CSS3
- * @return {String} The browsers vendor prefix
- */
- vendor: function(){
- var tmp = doc.createElement("div"),
- prefixes = 'webkit Moz O ms'.split(' '),
- i;
- for (i in prefixes) {
- if (typeof tmp.style[prefixes[i] + 'Transition'] !== 'undefined') {
- return prefixes[i];
- }
- }
- },
-
- /**
- * Determines the browsers vendor prefix for transition callback events
- * @return {String} The event name
- */
- transitionCallback: function(){
- return (cache.vendor==='Moz' || cache.vendor==='ms') ? 'transitionend' : cache.vendor+'TransitionEnd';
- },
-
- /**
- * Determines if the users browser supports CSS3 transformations
- * @return {[type]} [description]
- */
- canTransform: function(){
- return typeof settings.element.style[cache.vendor+'Transform'] !== 'undefined';
- },
-
- /**
- * Determines an angle between two points
- * @param {Number} x The X coordinate
- * @param {Number} y The Y coordinate
- * @return {Number} The number of degrees between the two points
- */
- angleOfDrag: function(x, y) {
- var degrees, theta;
- // Calc Theta
- theta = Math.atan2(-(cache.startDragY - y), (cache.startDragX - x));
- if (theta < 0) {
- theta += 2 * Math.PI;
- }
- // Calc Degrees
- degrees = Math.floor(theta * (180 / Math.PI) - 180);
- if (degrees < 0 && degrees > -180) {
- degrees = 360 - Math.abs(degrees);
- }
- return Math.abs(degrees);
- },
-
-
- events: {
-
- /**
- * Adds an event to an element
- * @param {Object} element Element to add event to
- * @param {String} eventName The event name
- * @param {Function} func Callback function
- */
- addEvent: function addEvent(element, eventName, func) {
- if (element.addEventListener) {
- return element.addEventListener(eventName, func, false);
- } else if (element.attachEvent) {
- return element.attachEvent("on" + eventName, func);
- }
- },
-
- /**
- * Removes an event to an element
- * @param {Object} element Element to remove event from
- * @param {String} eventName The event name
- * @param {Function} func Callback function
- */
- removeEvent: function addEvent(element, eventName, func) {
- if (element.addEventListener) {
- return element.removeEventListener(eventName, func, false);
- } else if (element.attachEvent) {
- return element.detachEvent("on" + eventName, func);
- }
- },
-
- /**
- * Prevents the default event
- * @param {Object} e The event object
- */
- prevent: function(e) {
- if (e.preventDefault) {
- e.preventDefault();
- } else {
- e.returnValue = false;
- }
- }
- },
-
- /**
- * Searches the parent element until a specified attribute has been matched
- * @param {Object} el The element to search from
- * @param {String} attr The attribute to search for
- * @return {Object|null} Returns a matched element if it exists, else, null
- */
- parentUntil: function(el, attr) {
- var isStr = typeof attr === 'string';
- while (el.parentNode) {
- if (isStr && el.getAttribute && el.getAttribute(attr)){
- return el;
- } else if(!isStr && el === attr){
- return el;
- }
- el = el.parentNode;
- }
- return null;
- }
- });
-
-
- var action = self.action = {
-
- /**
- * Handles translating the elements position
- * @type {Object}
- */
- translate: {
- get: {
-
- /**
- * Returns the amount an element is translated
- * @param {Number} index The index desired from the CSS3 values of translate3d
- * @return {Number} The amount of pixels an element is translated
- */
- matrix: function(index) {
-
- if( !cache.canTransform ){
- return parseInt(settings.element.style.left, 10);
- } else {
- var matrix = win.getComputedStyle(settings.element)[cache.vendor+'Transform'].match(/\((.*)\)/),
- ieOffset = 8;
- if (matrix) {
- matrix = matrix[1].split(',');
-
- // Internet Explorer likes to give us 16 fucking values
- if(matrix.length===16){
- index+=ieOffset;
- }
- return parseInt(matrix[index], 10);
- }
- return 0;
- }
- }
- },
-
- /**
- * Called when the element has finished transitioning
- */
- easeCallback: function(fn){
- settings.element.style[cache.vendor+'Transition'] = '';
- cache.translation = action.translate.get.matrix(4);
- cache.easing = false;
-
- if(cache.easingTo===0){
- utils.klass.remove(doc.body, 'snapjs-right');
- utils.klass.remove(doc.body, 'snapjs-left');
- }
-
- if( cache.once ){
- cache.once.call(self, self.state());
- delete cache.once;
- }
-
- utils.dispatchEvent('animated');
- utils.events.removeEvent(settings.element, utils.transitionCallback(), action.translate.easeCallback);
-
- },
-
- /**
- * Animates the pane by the specified amount of pixels
- * @param {Number} n The amount of pixels to move the pane
- */
- easeTo: function(n, cb) {
-
- if( !cache.canTransform ){
- cache.translation = n;
- action.translate.x(n);
- } else {
- cache.easing = true;
- cache.easingTo = n;
-
- settings.element.style[cache.vendor+'Transition'] = 'all ' + settings.transitionSpeed + 's ' + settings.easing;
-
- cache.once = cb;
-
- utils.events.addEvent(settings.element, utils.transitionCallback(), action.translate.easeCallback);
- action.translate.x(n);
- }
- if(n===0){
- settings.element.style[cache.vendor+'Transform'] = '';
- }
- },
-
- /**
- * Immediately translates the element on its X axis
- * @param {Number} n Amount of pixels to translate
- */
- x: function(n) {
- if( (settings.disable==='left' && n>0) ||
- (settings.disable==='right' && n<0)
- ){ return; }
-
- if( !settings.hyperextensible ){
- if( n===settings.maxPosition || n>settings.maxPosition ){
- n=settings.maxPosition;
- } else if( n===settings.minPosition || n<settings.minPosition ){
- n=settings.minPosition;
- }
- }
-
- n = parseInt(n, 10);
- if(isNaN(n)){
- n = 0;
- }
-
- if( cache.canTransform ){
- var theTranslate = 'translate3d(' + n + 'px, 0,0)';
- settings.element.style[cache.vendor+'Transform'] = theTranslate;
- } else {
- settings.element.style.width = (win.innerWidth || doc.documentElement.clientWidth)+'px';
-
- settings.element.style.left = n+'px';
- settings.element.style.right = '';
- }
- }
- },
-
- /**
- * Handles all the events that interface with dragging
- * @type {Object}
- */
- drag: {
-
- /**
- * Begins listening for drag events on our element
- */
- listen: function() {
- cache.translation = 0;
- cache.easing = false;
- utils.events.addEvent(self.settings.element, utils.eventType('down'), action.drag.startDrag);
- utils.events.addEvent(self.settings.element, utils.eventType('move'), action.drag.dragging);
- utils.events.addEvent(self.settings.element, utils.eventType('up'), action.drag.endDrag);
- },
-
- /**
- * Stops listening for drag events on our element
- */
- stopListening: function() {
- utils.events.removeEvent(settings.element, utils.eventType('down'), action.drag.startDrag);
- utils.events.removeEvent(settings.element, utils.eventType('move'), action.drag.dragging);
- utils.events.removeEvent(settings.element, utils.eventType('up'), action.drag.endDrag);
- },
-
- /**
- * Fired immediately when the user begins to drag the content pane
- * @param {Object} e Event object
- */
- startDrag: function(e) {
- // No drag on ignored elements
- var target = e.target ? e.target : e.srcElement,
- ignoreParent = utils.parentUntil(target, 'data-snap-ignore');
-
- if (ignoreParent) {
- utils.dispatchEvent('ignore');
- return;
- }
-
-
- if(settings.dragger){
- var dragParent = utils.parentUntil(target, settings.dragger);
-
- // Only use dragger if we're in a closed state
- if( !dragParent &&
- (cache.translation !== settings.minPosition &&
- cache.translation !== settings.maxPosition
- )){
- return;
- }
- }
-
- utils.dispatchEvent('start');
- settings.element.style[cache.vendor+'Transition'] = '';
- cache.isDragging = true;
-
- cache.intentChecked = false;
- cache.startDragX = utils.page('X', e);
- cache.startDragY = utils.page('Y', e);
- cache.dragWatchers = {
- current: 0,
- last: 0,
- hold: 0,
- state: ''
- };
- cache.simpleStates = {
- opening: null,
- towards: null,
- hyperExtending: null,
- halfway: null,
- flick: null,
- translation: {
- absolute: 0,
- relative: 0,
- sinceDirectionChange: 0,
- percentage: 0
- }
- };
- },
-
- /**
- * Fired while the user is moving the content pane
- * @param {Object} e Event object
- */
- dragging: function(e) {
-
- if (cache.isDragging && settings.touchToDrag) {
-
- var thePageX = utils.page('X', e),
- thePageY = utils.page('Y', e),
- translated = cache.translation,
- absoluteTranslation = action.translate.get.matrix(4),
- whileDragX = thePageX - cache.startDragX,
- openingLeft = absoluteTranslation > 0,
- translateTo = whileDragX,
- diff;
-
- // Shown no intent already
- if((cache.intentChecked && !cache.hasIntent)){
- return;
- }
-
- if(settings.addBodyClasses){
- if((absoluteTranslation)>0){
- utils.klass.add(doc.body, 'snapjs-left');
- utils.klass.remove(doc.body, 'snapjs-right');
- } else if((absoluteTranslation)<0){
- utils.klass.add(doc.body, 'snapjs-right');
- utils.klass.remove(doc.body, 'snapjs-left');
- }
- }
-
- if (cache.hasIntent === false || cache.hasIntent === null) {
-
- var deg = utils.angleOfDrag(thePageX, thePageY),
- inRightRange = (deg >= 0 && deg <= settings.slideIntent) || (deg <= 360 && deg > (360 - settings.slideIntent)),
- inLeftRange = (deg >= 180 && deg <= (180 + settings.slideIntent)) || (deg <= 180 && deg >= (180 - settings.slideIntent));
- if (!inLeftRange && !inRightRange) {
- cache.hasIntent = false;
- } else {
- cache.hasIntent = true;
- }
- cache.intentChecked = true;
- }
-
- if (
- (settings.minDragDistance>=Math.abs(thePageX-cache.startDragX)) || // Has user met minimum drag distance?
- (cache.hasIntent === false)
- ) {
- return;
- }
-
- utils.events.prevent(e);
- utils.dispatchEvent('drag');
-
- cache.dragWatchers.current = thePageX;
-
- // Determine which direction we are going
- if (cache.dragWatchers.last > thePageX) {
- if (cache.dragWatchers.state !== 'left') {
- cache.dragWatchers.state = 'left';
- cache.dragWatchers.hold = thePageX;
- }
- cache.dragWatchers.last = thePageX;
- } else if (cache.dragWatchers.last < thePageX) {
- if (cache.dragWatchers.state !== 'right') {
- cache.dragWatchers.state = 'right';
- cache.dragWatchers.hold = thePageX;
- }
- cache.dragWatchers.last = thePageX;
- }
- if (openingLeft) {
- // Pulling too far to the right
- if (settings.maxPosition < absoluteTranslation) {
- diff = (absoluteTranslation - settings.maxPosition) * settings.resistance;
- translateTo = whileDragX - diff;
- }
- cache.simpleStates = {
- opening: 'left',
- towards: cache.dragWatchers.state,
- hyperExtending: settings.maxPosition < absoluteTranslation,
- halfway: absoluteTranslation > (settings.maxPosition / 2),
- flick: Math.abs(cache.dragWatchers.current - cache.dragWatchers.hold) > settings.flickThreshold,
- translation: {
- absolute: absoluteTranslation,
- relative: whileDragX,
- sinceDirectionChange: (cache.dragWatchers.current - cache.dragWatchers.hold),
- percentage: (absoluteTranslation/settings.maxPosition)*100
- }
- };
- } else {
- // Pulling too far to the left
- if (settings.minPosition > absoluteTranslation) {
- diff = (absoluteTranslation - settings.minPosition) * settings.resistance;
- translateTo = whileDragX - diff;
- }
- cache.simpleStates = {
- opening: 'right',
- towards: cache.dragWatchers.state,
- hyperExtending: settings.minPosition > absoluteTranslation,
- halfway: absoluteTranslation < (settings.minPosition / 2),
- flick: Math.abs(cache.dragWatchers.current - cache.dragWatchers.hold) > settings.flickThreshold,
- translation: {
- absolute: absoluteTranslation,
- relative: whileDragX,
- sinceDirectionChange: (cache.dragWatchers.current - cache.dragWatchers.hold),
- percentage: (absoluteTranslation/settings.minPosition)*100
- }
- };
- }
- action.translate.x(translateTo + translated);
- }
- },
-
- /**
- * Fired when the user releases the content pane
- * @param {Object} e Event object
- */
- endDrag: function(e) {
- if (cache.isDragging) {
- utils.dispatchEvent('end');
- var translated = action.translate.get.matrix(4);
-
- // Tap Close
- if (cache.dragWatchers.current === 0 && translated !== 0 && settings.tapToClose) {
- utils.dispatchEvent('close');
- utils.events.prevent(e);
- action.translate.easeTo(0);
- cache.isDragging = false;
- cache.startDragX = 0;
- return;
- }
-
- // Revealing Left
- if (cache.simpleStates.opening === 'left') {
- // Halfway, Flicking, or Too Far Out
- if ((cache.simpleStates.halfway || cache.simpleStates.hyperExtending || cache.simpleStates.flick)) {
- if (cache.simpleStates.flick && cache.simpleStates.towards === 'left') { // Flicking Closed
- action.translate.easeTo(0);
- } else if (
- (cache.simpleStates.flick && cache.simpleStates.towards === 'right') || // Flicking Open OR
- (cache.simpleStates.halfway || cache.simpleStates.hyperExtending) // At least halfway open OR hyperextending
- ) {
- action.translate.easeTo(settings.maxPosition); // Open Left
- }
- } else {
- action.translate.easeTo(0); // Close Left
- }
- // Revealing Right
- } else if (cache.simpleStates.opening === 'right') {
- // Halfway, Flicking, or Too Far Out
- if ((cache.simpleStates.halfway || cache.simpleStates.hyperExtending || cache.simpleStates.flick)) {
- if (cache.simpleStates.flick && cache.simpleStates.towards === 'right') { // Flicking Closed
- action.translate.easeTo(0);
- } else if (
- (cache.simpleStates.flick && cache.simpleStates.towards === 'left') || // Flicking Open OR
- (cache.simpleStates.halfway || cache.simpleStates.hyperExtending) // At least halfway open OR hyperextending
- ) {
- action.translate.easeTo(settings.minPosition); // Open Right
- }
- } else {
- action.translate.easeTo(0); // Close Right
- }
- }
- cache.isDragging = false;
- cache.startDragX = utils.page('X', e);
- }
- }
- }
- };
-
-
- // Initialize
- if (opts.element) {
- utils.extend(settings, opts);
- cache.vendor = utils.vendor();
- cache.canTransform = utils.canTransform();
- action.drag.listen();
- }
- };
-
-
- utils.extend(Core.prototype, {
-
- /**
- * Opens the specified side menu
- * @param {String} side Must be "left" or "right"
- */
- open: function(side, cb) {
- utils.dispatchEvent('open');
- utils.klass.remove(doc.body, 'snapjs-expand-left');
- utils.klass.remove(doc.body, 'snapjs-expand-right');
-
- if (side === 'left') {
- this.cache.simpleStates.opening = 'left';
- this.cache.simpleStates.towards = 'right';
- utils.klass.add(doc.body, 'snapjs-left');
- utils.klass.remove(doc.body, 'snapjs-right');
- this.action.translate.easeTo(this.settings.maxPosition, cb);
- } else if (side === 'right') {
- this.cache.simpleStates.opening = 'right';
- this.cache.simpleStates.towards = 'left';
- utils.klass.remove(doc.body, 'snapjs-left');
- utils.klass.add(doc.body, 'snapjs-right');
- this.action.translate.easeTo(this.settings.minPosition, cb);
- }
- },
-
- /**
- * Closes the pane
- */
- close: function(cb) {
- utils.dispatchEvent('close');
- this.action.translate.easeTo(0, cb);
- },
-
- /**
- * Hides the content pane completely allowing for full menu visibility
- * @param {String} side Must be "left" or "right"
- */
- expand: function(side){
- var to = win.innerWidth || doc.documentElement.clientWidth;
-
- if(side==='left'){
- utils.dispatchEvent('expandLeft');
- utils.klass.add(doc.body, 'snapjs-expand-left');
- utils.klass.remove(doc.body, 'snapjs-expand-right');
- } else {
- utils.dispatchEvent('expandRight');
- utils.klass.add(doc.body, 'snapjs-expand-right');
- utils.klass.remove(doc.body, 'snapjs-expand-left');
- to *= -1;
- }
- this.action.translate.easeTo(to);
- },
-
- /**
- * Listen in to custom Snap events
- * @param {String} evt The snap event name
- * @param {Function} fn Callback function
- * @return {Object} Snap instance
- */
- on: function(evt, fn) {
- this.eventList[evt] = fn;
- return this;
- },
-
- /**
- * Stops listening to custom Snap events
- * @param {String} evt The snap event name
- */
- off: function(evt) {
- if (this.eventList[evt]) {
- this.eventList[evt] = false;
- }
- },
-
- /**
- * Enables Snap.js events
- */
- enable: function() {
- utils.dispatchEvent('enable');
- this.action.drag.listen();
- },
-
- /**
- * Disables Snap.js events
- */
- disable: function() {
- utils.dispatchEvent('disable');
- this.action.drag.stopListening();
- },
-
- /**
- * Updates the instances settings
- * @param {Object} opts The Snap options to set
- */
- settings: function(opts){
- utils.extend(this.settings, opts);
- },
-
- /**
- * Returns information about the state of the content pane
- * @return {Object} Information regarding the state of the pane
- */
- state: function() {
- var state,
- fromLeft = this.action.translate.get.matrix(4);
- if (fromLeft === this.settings.maxPosition) {
- state = 'left';
- } else if (fromLeft === this.settings.minPosition) {
- state = 'right';
- } else {
- state = 'closed';
- }
- return {
- state: state,
- info: this.cache.simpleStates
- };
- }
- });
-
- // Assign to the global namespace
- this[Namespace] = Core;
-
-}).call(this, window, document);
diff --git a/core/js/tests/specHelper.js b/core/js/tests/specHelper.js
index 4111b6763d9..59c2a99645f 100644
--- a/core/js/tests/specHelper.js
+++ b/core/js/tests/specHelper.js
@@ -120,6 +120,9 @@ window.isPhantom = /phantom/i.test(navigator.userAgent);
if (!OC.TestUtil) {
OC.TestUtil = TestUtil;
}
+
+ // reset plugins
+ OC.Plugins._plugins = [];
});
afterEach(function() {
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index 2c5c22905b0..d283839d7e7 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -655,5 +655,133 @@ describe('Core base tests', function() {
]);
});
});
+ describe('Plugins', function() {
+ var plugin;
+
+ beforeEach(function() {
+ plugin = {
+ name: 'Some name',
+ attach: function(obj) {
+ obj.attached = true;
+ },
+
+ detach: function(obj) {
+ obj.attached = false;
+ }
+ };
+ OC.Plugins.register('OC.Test.SomeName', plugin);
+ });
+ it('attach plugin to object', function() {
+ var obj = {something: true};
+ OC.Plugins.attach('OC.Test.SomeName', obj);
+ expect(obj.attached).toEqual(true);
+ OC.Plugins.detach('OC.Test.SomeName', obj);
+ expect(obj.attached).toEqual(false);
+ });
+ it('only call handler for target name', function() {
+ var obj = {something: true};
+ OC.Plugins.attach('OC.Test.SomeOtherName', obj);
+ expect(obj.attached).not.toBeDefined();
+ OC.Plugins.detach('OC.Test.SomeOtherName', obj);
+ expect(obj.attached).not.toBeDefined();
+ });
+ });
+ describe('Notifications', function() {
+ beforeEach(function(){
+ notificationMock = sinon.mock(OC.Notification);
+ });
+ afterEach(function(){
+ // verify that all expectations are met
+ notificationMock.verify();
+ // restore mocked methods
+ notificationMock.restore();
+ // clean up the global variable
+ delete notificationMock;
+ });
+ it('Should show a plain text notification' , function() {
+ // one is shown ...
+ notificationMock.expects('show').once().withExactArgs('My notification test');
+ // ... but not the HTML one
+ notificationMock.expects('showHtml').never();
+
+ OC.Notification.showTemporary('My notification test');
+
+ // verification is done in afterEach
+ });
+ it('Should show a HTML notification' , function() {
+ // no plain is shown ...
+ notificationMock.expects('show').never();
+ // ... but one HTML notification
+ notificationMock.expects('showHtml').once().withExactArgs('<a>My notification test</a>');
+
+ OC.Notification.showTemporary('<a>My notification test</a>', { isHTML: true });
+
+ // verification is done in afterEach
+ });
+ it('Should hide previous notification and hide itself after 7 seconds' , function() {
+ var clock = sinon.useFakeTimers();
+
+ // previous notifications get hidden
+ notificationMock.expects('hide').once();
+
+ OC.Notification.showTemporary('');
+
+ // verify the first call
+ notificationMock.verify();
+
+ // expect it a second time
+ notificationMock.expects('hide').once();
+
+ // travel in time +7000 milliseconds
+ clock.tick(7000);
+
+ // verification is done in afterEach
+ });
+ it('Should hide itself after a given time' , function() {
+ var clock = sinon.useFakeTimers();
+
+ // previous notifications get hidden
+ notificationMock.expects('hide').once();
+
+ OC.Notification.showTemporary('', { timeout: 10 });
+
+ // verify the first call
+ notificationMock.verify();
+
+ // expect to not be called after 9 seconds
+ notificationMock.expects('hide').never();
+
+ // travel in time +9 seconds
+ clock.tick(9000);
+ // verify this
+ notificationMock.verify();
+
+ // expect the second call one second later
+ notificationMock.expects('hide').once();
+ // travel in time +1 seconds
+ clock.tick(1000);
+
+ // verification is done in afterEach
+ });
+ it('Should not hide itself after a given time if a timeout of 0 is defined' , function() {
+ var clock = sinon.useFakeTimers();
+
+ // previous notifications get hidden
+ notificationMock.expects('hide').once();
+
+ OC.Notification.showTemporary('', { timeout: 0 });
+
+ // verify the first call
+ notificationMock.verify();
+
+ // expect to not be called after 1000 seconds
+ notificationMock.expects('hide').never();
+
+ // travel in time +1000 seconds
+ clock.tick(1000000);
+
+ // verification is done in afterEach
+ });
+ });
});
diff --git a/core/js/tests/specs/l10nSpec.js b/core/js/tests/specs/l10nSpec.js
index d5b0363ea38..bafc7746d6c 100644
--- a/core/js/tests/specs/l10nSpec.js
+++ b/core/js/tests/specs/l10nSpec.js
@@ -11,8 +11,12 @@
describe('OC.L10N tests', function() {
var TEST_APP = 'jsunittestapp';
+ beforeEach(function() {
+ OC.appswebroots[TEST_APP] = OC.webroot + '/apps3/jsunittestapp';
+ });
afterEach(function() {
delete OC.L10N._bundles[TEST_APP];
+ delete OC.appswebroots[TEST_APP];
});
describe('text translation', function() {
@@ -38,6 +42,16 @@ describe('OC.L10N tests', function() {
t(TEST_APP, 'Hello {name}, the weather is {weather}', {name: 'Steve', weather: t(TEST_APP, 'sunny')})
).toEqual('Hallo Steve, das Wetter ist sonnig');
});
+ it('returns text with escaped placeholder', function() {
+ expect(
+ t(TEST_APP, 'Hello {name}', {name: '<strong>Steve</strong>'})
+ ).toEqual('Hello &lt;strong&gt;Steve&lt;/strong&gt;');
+ });
+ it('returns text with not escaped placeholder', function() {
+ expect(
+ t(TEST_APP, 'Hello {name}', {name: '<strong>Steve</strong>'}, null, {escape: false})
+ ).toEqual('Hello <strong>Steve</strong>');
+ });
});
describe('plurals', function() {
function checkPlurals() {
@@ -98,4 +112,52 @@ describe('OC.L10N tests', function() {
checkPlurals();
});
});
+ describe('async loading of translations', function() {
+ it('loads bundle for given app and calls callback', function() {
+ var localeStub = sinon.stub(OC, 'getLocale').returns('zh_CN');
+ var callbackStub = sinon.stub();
+ var promiseStub = sinon.stub();
+ OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
+ expect(callbackStub.notCalled).toEqual(true);
+ expect(promiseStub.notCalled).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(1);
+ var req = fakeServer.requests[0];
+ expect(req.url).toEqual(
+ OC.webroot + '/apps3/' + TEST_APP + '/l10n/zh_CN.json'
+ );
+ req.respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify({
+ translations: {'Hello world!': '你好世界!'},
+ pluralForm: 'nplurals=2; plural=(n != 1);'
+ })
+ );
+
+ expect(callbackStub.calledOnce).toEqual(true);
+ expect(promiseStub.calledOnce).toEqual(true);
+ expect(t(TEST_APP, 'Hello world!')).toEqual('你好世界!');
+ localeStub.restore();
+ });
+ it('calls callback if translation already available', function() {
+ var promiseStub = sinon.stub();
+ var callbackStub = sinon.stub();
+ OC.L10N.register(TEST_APP, {
+ 'Hello world!': 'Hallo Welt!'
+ });
+ OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
+ expect(callbackStub.calledOnce).toEqual(true);
+ expect(promiseStub.calledOnce).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ it('calls callback if locale is en', function() {
+ var localeStub = sinon.stub(OC, 'getLocale').returns('en');
+ var promiseStub = sinon.stub();
+ var callbackStub = sinon.stub();
+ OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
+ expect(callbackStub.calledOnce).toEqual(true);
+ expect(promiseStub.calledOnce).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ });
});
diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js
index e712ea58bc2..4859ba782d2 100644
--- a/core/js/tests/specs/shareSpec.js
+++ b/core/js/tests/specs/shareSpec.js
@@ -31,6 +31,7 @@ describe('OC.Share tests', function() {
$('#testArea').append($('<div id="shareContainer"></div>'));
// horrible parameters
$('#testArea').append('<input id="allowShareWithLink" type="hidden" value="yes">');
+ $('#testArea').append('<input id="mailPublicNotificationEnabled" name="mailPublicNotificationEnabled" type="hidden" value="yes">');
$container = $('#shareContainer');
/* jshint camelcase:false */
oldAppConfig = _.extend({}, oc_appconfig.core);
@@ -362,6 +363,16 @@ describe('OC.Share tests', function() {
$('#dropdown [name=expirationCheckbox]').click();
expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(true);
});
+ it('displayes email form when sending emails is enabled', function() {
+ $('input[name=mailPublicNotificationEnabled]').val('yes');
+ showDropDown();
+ expect($('#emailPrivateLink').length).toEqual(1);
+ });
+ it('not renders email form when sending emails is disabled', function() {
+ $('input[name=mailPublicNotificationEnabled]').val('no');
+ showDropDown();
+ expect($('#emailPrivateLink').length).toEqual(0);
+ });
it('sets picker minDate to today and no maxDate by default', function() {
showDropDown();
$('#dropdown [name=linkCheckbox]').click();
@@ -498,7 +509,7 @@ describe('OC.Share tests', function() {
beforeEach(function() {
tipsyStub = sinon.stub($.fn, 'tipsy');
- $file = $('<tr><td class="filename">File name</td></tr>');
+ $file = $('<tr><td class="filename"><div class="thumbnail"></div><span class="name">File name</span></td></tr>');
$file.find('.filename').append(
'<span class="fileactions">' +
'<a href="#" class="action action-share" data-action="Share">' +
@@ -570,7 +581,7 @@ describe('OC.Share tests', function() {
describe('displaying the folder icon', function() {
function checkIcon(expectedImage) {
- var imageUrl = OC.TestUtil.getImageUrl($file.find('.filename'));
+ var imageUrl = OC.TestUtil.getImageUrl($file.find('.filename .thumbnail'));
expectedIcon = OC.imagePath('core', expectedImage);
expect(imageUrl).toEqual(expectedIcon);
}
diff --git a/core/js/update.js b/core/js/update.js
index e5ce322df95..4899335f0ec 100644
--- a/core/js/update.js
+++ b/core/js/update.js
@@ -47,9 +47,8 @@
updateEventSource.listen('failure', function(message) {
$('<span>').addClass('error').append(message).append('<br />').appendTo($el);
$('<span>')
- .addClass('error bold')
- .append('<br />')
- .append(t('core', 'The update was unsuccessful.' +
+ .addClass('bold')
+ .append(t('core', 'The update was unsuccessful. ' +
'Please report this issue to the ' +
'<a href="https://github.com/owncloud/core/issues" target="_blank">ownCloud community</a>.'))
.appendTo($el);
diff --git a/core/l10n/af_ZA.js b/core/l10n/af_ZA.js
index bb9b876ae73..4eb1a25d956 100644
--- a/core/l10n/af_ZA.js
+++ b/core/l10n/af_ZA.js
@@ -38,7 +38,6 @@ OC.L10N.register(
"Couldn't send reset email. Please contact your administrator." : "Die herstel epos kon nie gestuur word nie. Kontak asseblief die stelsel administrateur.",
"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." : "Die \"link\" vir die herstel van jou wagwoord is na jou epos gestuur. As jy dit nie binne 'n redelike tyd ontvang nie, soek deur jou \"spam/junk\" omslagte.<br>As dit nie daar is nie vra jou administrateur vir hulp.",
"I know what I'm doing" : "Ek weet wat ek doen",
- "Reset password" : "Herstel wagwoord",
"Password can not be changed. Please contact your administrator." : "Wagwoord kan nie verander word nie. Kontak asseblief jou stelsel administrateur.",
"No" : "Nee",
"Yes" : "Ja",
@@ -64,7 +63,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "Met jou en die groep {group} gedeel deur {owner}",
"Shared with you by {owner}" : "Met jou gedeel deur {owner}",
"Password protect" : "Beskerm met Wagwoord",
- "Allow Public Upload" : "Laat Publieke Oplaai toe",
+ "Password" : "Wagwoord",
"Email link to person" : "E-pos aan persoon",
"Send" : "Stuur",
"Set expiration date" : "Stel verval datum",
@@ -76,7 +75,6 @@ OC.L10N.register(
"can edit" : "kan wysig",
"access control" : "toegang beheer",
"create" : "skep",
- "update" : "opdateer",
"delete" : "uitvee",
"Password protected" : "Beskerm met wagwoord",
"Error unsetting expiration date" : "Fout met skrapping van verval datum",
@@ -90,10 +88,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Die opdatering was suksesvol. Jy word nou aan ownCloud terug gelei.",
"%s password reset" : "%s wagwoord herstel",
"Use the following link to reset your password: {link}" : "Gebruik die volgende skakel om jou wagwoord te herstel: {link}",
- "You will receive a link to reset your password via Email." : "Jy sal `n skakel via e-pos ontvang om jou wagwoord te herstel.",
- "Username" : "Gebruikersnaam",
- "Yes, I really want to reset my password now" : "Ja, Ek wil regtig my wagwoord herstel",
"New password" : "Nuwe wagwoord",
+ "Reset password" : "Herstel wagwoord",
"For the best results, please consider using a GNU/Linux server instead." : "Oorweeg die gebruik van 'n GNU/Linux bediener vir die beste resultate.",
"Personal" : "Persoonlik",
"Users" : "Gebruikers",
@@ -107,7 +103,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jou data gids en lêers is moontlik toeganklik vanaf die internet omdat die .htaccess lêer nie werk nie.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.",
"Create an <strong>admin account</strong>" : "Skep `n <strong>admin-rekening</strong>",
- "Password" : "Wagwoord",
+ "Username" : "Gebruikersnaam",
"Data folder" : "Data omslag",
"Configure the database" : "Stel databasis op",
"Database user" : "Databasis-gebruiker",
diff --git a/core/l10n/af_ZA.json b/core/l10n/af_ZA.json
index 373d3dff8b4..40bf6925c31 100644
--- a/core/l10n/af_ZA.json
+++ b/core/l10n/af_ZA.json
@@ -36,7 +36,6 @@
"Couldn't send reset email. Please contact your administrator." : "Die herstel epos kon nie gestuur word nie. Kontak asseblief die stelsel administrateur.",
"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." : "Die \"link\" vir die herstel van jou wagwoord is na jou epos gestuur. As jy dit nie binne 'n redelike tyd ontvang nie, soek deur jou \"spam/junk\" omslagte.<br>As dit nie daar is nie vra jou administrateur vir hulp.",
"I know what I'm doing" : "Ek weet wat ek doen",
- "Reset password" : "Herstel wagwoord",
"Password can not be changed. Please contact your administrator." : "Wagwoord kan nie verander word nie. Kontak asseblief jou stelsel administrateur.",
"No" : "Nee",
"Yes" : "Ja",
@@ -62,7 +61,7 @@
"Shared with you and the group {group} by {owner}" : "Met jou en die groep {group} gedeel deur {owner}",
"Shared with you by {owner}" : "Met jou gedeel deur {owner}",
"Password protect" : "Beskerm met Wagwoord",
- "Allow Public Upload" : "Laat Publieke Oplaai toe",
+ "Password" : "Wagwoord",
"Email link to person" : "E-pos aan persoon",
"Send" : "Stuur",
"Set expiration date" : "Stel verval datum",
@@ -74,7 +73,6 @@
"can edit" : "kan wysig",
"access control" : "toegang beheer",
"create" : "skep",
- "update" : "opdateer",
"delete" : "uitvee",
"Password protected" : "Beskerm met wagwoord",
"Error unsetting expiration date" : "Fout met skrapping van verval datum",
@@ -88,10 +86,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Die opdatering was suksesvol. Jy word nou aan ownCloud terug gelei.",
"%s password reset" : "%s wagwoord herstel",
"Use the following link to reset your password: {link}" : "Gebruik die volgende skakel om jou wagwoord te herstel: {link}",
- "You will receive a link to reset your password via Email." : "Jy sal `n skakel via e-pos ontvang om jou wagwoord te herstel.",
- "Username" : "Gebruikersnaam",
- "Yes, I really want to reset my password now" : "Ja, Ek wil regtig my wagwoord herstel",
"New password" : "Nuwe wagwoord",
+ "Reset password" : "Herstel wagwoord",
"For the best results, please consider using a GNU/Linux server instead." : "Oorweeg die gebruik van 'n GNU/Linux bediener vir die beste resultate.",
"Personal" : "Persoonlik",
"Users" : "Gebruikers",
@@ -105,7 +101,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jou data gids en lêers is moontlik toeganklik vanaf die internet omdat die .htaccess lêer nie werk nie.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.",
"Create an <strong>admin account</strong>" : "Skep `n <strong>admin-rekening</strong>",
- "Password" : "Wagwoord",
+ "Username" : "Gebruikersnaam",
"Data folder" : "Data omslag",
"Configure the database" : "Stel databasis op",
"Database user" : "Databasis-gebruiker",
diff --git a/core/l10n/ar.js b/core/l10n/ar.js
index 2d7bcda9398..28b2a3924c1 100644
--- a/core/l10n/ar.js
+++ b/core/l10n/ar.js
@@ -25,7 +25,6 @@ OC.L10N.register(
"December" : "كانون الاول",
"Settings" : "إعدادات",
"Saving..." : "جاري الحفظ...",
- "Reset password" : "تعديل كلمة السر",
"No" : "لا",
"Yes" : "نعم",
"Choose" : "اختيار",
@@ -38,6 +37,7 @@ OC.L10N.register(
"Strong password" : "كلمة السر قوية",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "اعدادات خادمك غير صحيحة بشكل تسمح لك بمزامنة ملفاتك وذلك بسبب أن واجهة WebDAV تبدو معطلة",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "هذا الخادم لا يوجد لدية اتصال انترنت. هذا يعني ان بعض الميزات مثل mounting التخزين الخارجي , تنبيهات عن التحديثات او تنزيلات برامج الطرف الثالث3 لا تعمل. الدخول للملفات البعيدة و ارسال تنبيهات البريد الالكتروني ممكن ان لا تعمل ايضا. نحن نقترح بتفعيل اتصال الانترنت لهذا الخادم لتتمكن من الاستفادة من كل الميزات",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "مجلد data و ملفاتك يمكن الوصول لها عن طريق الانترنت. ملف .htaccess لا يمكن تشغيلة. نحن نقترح باصرار ان تعيد اعداد خادمك لمنع الدخول الى بياناتك عن طريق الانترنت او بالامكان ان تنقل مجلد data خارج document root بشكل مؤقت. ",
"Shared" : "مشارك",
"Share" : "شارك",
"Error" : "خطأ",
@@ -48,7 +48,7 @@ OC.L10N.register(
"Shared with you by {owner}" : "شورك معك من قبل {owner}",
"Share link" : "شارك الرابط",
"Password protect" : "حماية كلمة السر",
- "Allow Public Upload" : "اسمح بالرفع للعامة",
+ "Password" : "كلمة المرور",
"Email link to person" : "ارسل الرابط بالبريد الى صديق",
"Send" : "أرسل",
"Set expiration date" : "تعيين تاريخ إنتهاء الصلاحية",
@@ -61,7 +61,6 @@ OC.L10N.register(
"can edit" : "التحرير مسموح",
"access control" : "ضبط الوصول",
"create" : "إنشاء",
- "update" : "تحديث",
"delete" : "حذف",
"Password protected" : "محمي بكلمة السر",
"Error unsetting expiration date" : "حصل خطأ عند عملية إزالة تاريخ إنتهاء الصلاحية",
@@ -76,10 +75,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "تم التحديث بنجاح , يتم اعادة توجيهك الان الى Owncloud",
"%s password reset" : "تمت إعادة ضبط كلمة مرور %s",
"Use the following link to reset your password: {link}" : "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}",
- "You will receive a link to reset your password via Email." : "سوف نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر.",
- "Username" : "إسم المستخدم",
- "Yes, I really want to reset my password now" : "نعم، أريد إعادة ضبظ كلمة مروري",
"New password" : "كلمات سر جديدة",
+ "Reset password" : "تعديل كلمة السر",
"Personal" : "شخصي",
"Users" : "المستخدمين",
"Apps" : "التطبيقات",
@@ -92,7 +89,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "مجلدات البيانات والملفات الخاصة قد تكون قابلة للوصول اليها عن طريق شبكة الانترنت وذلك بسبب ان ملف .htaccess لا يعمل بشكل صحيح.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "لمزيد من المعلومات عن كيفية إعداد خادمك، يرجى الاطلاع على <a href=\"%s\" target=\"_blank\">صفحة المساعدة</a>.",
"Create an <strong>admin account</strong>" : "أضف </strong>مستخدم رئيسي <strong>",
- "Password" : "كلمة المرور",
+ "Username" : "إسم المستخدم",
"Data folder" : "مجلد المعلومات",
"Configure the database" : "أسس قاعدة البيانات",
"Database user" : "مستخدم قاعدة البيانات",
@@ -102,6 +99,7 @@ OC.L10N.register(
"Database host" : "خادم قاعدة البيانات",
"Finish setup" : "انهاء التعديلات",
"Log out" : "الخروج",
+ "Search" : "البحث",
"remember" : "تذكر",
"Log in" : "أدخل",
"Alternative Logins" : "اسماء دخول بديلة"
diff --git a/core/l10n/ar.json b/core/l10n/ar.json
index fd5c1275e41..52cd0cc08ac 100644
--- a/core/l10n/ar.json
+++ b/core/l10n/ar.json
@@ -23,7 +23,6 @@
"December" : "كانون الاول",
"Settings" : "إعدادات",
"Saving..." : "جاري الحفظ...",
- "Reset password" : "تعديل كلمة السر",
"No" : "لا",
"Yes" : "نعم",
"Choose" : "اختيار",
@@ -36,6 +35,7 @@
"Strong password" : "كلمة السر قوية",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "اعدادات خادمك غير صحيحة بشكل تسمح لك بمزامنة ملفاتك وذلك بسبب أن واجهة WebDAV تبدو معطلة",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "هذا الخادم لا يوجد لدية اتصال انترنت. هذا يعني ان بعض الميزات مثل mounting التخزين الخارجي , تنبيهات عن التحديثات او تنزيلات برامج الطرف الثالث3 لا تعمل. الدخول للملفات البعيدة و ارسال تنبيهات البريد الالكتروني ممكن ان لا تعمل ايضا. نحن نقترح بتفعيل اتصال الانترنت لهذا الخادم لتتمكن من الاستفادة من كل الميزات",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "مجلد data و ملفاتك يمكن الوصول لها عن طريق الانترنت. ملف .htaccess لا يمكن تشغيلة. نحن نقترح باصرار ان تعيد اعداد خادمك لمنع الدخول الى بياناتك عن طريق الانترنت او بالامكان ان تنقل مجلد data خارج document root بشكل مؤقت. ",
"Shared" : "مشارك",
"Share" : "شارك",
"Error" : "خطأ",
@@ -46,7 +46,7 @@
"Shared with you by {owner}" : "شورك معك من قبل {owner}",
"Share link" : "شارك الرابط",
"Password protect" : "حماية كلمة السر",
- "Allow Public Upload" : "اسمح بالرفع للعامة",
+ "Password" : "كلمة المرور",
"Email link to person" : "ارسل الرابط بالبريد الى صديق",
"Send" : "أرسل",
"Set expiration date" : "تعيين تاريخ إنتهاء الصلاحية",
@@ -59,7 +59,6 @@
"can edit" : "التحرير مسموح",
"access control" : "ضبط الوصول",
"create" : "إنشاء",
- "update" : "تحديث",
"delete" : "حذف",
"Password protected" : "محمي بكلمة السر",
"Error unsetting expiration date" : "حصل خطأ عند عملية إزالة تاريخ إنتهاء الصلاحية",
@@ -74,10 +73,8 @@
"The update was successful. Redirecting you to ownCloud now." : "تم التحديث بنجاح , يتم اعادة توجيهك الان الى Owncloud",
"%s password reset" : "تمت إعادة ضبط كلمة مرور %s",
"Use the following link to reset your password: {link}" : "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}",
- "You will receive a link to reset your password via Email." : "سوف نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر.",
- "Username" : "إسم المستخدم",
- "Yes, I really want to reset my password now" : "نعم، أريد إعادة ضبظ كلمة مروري",
"New password" : "كلمات سر جديدة",
+ "Reset password" : "تعديل كلمة السر",
"Personal" : "شخصي",
"Users" : "المستخدمين",
"Apps" : "التطبيقات",
@@ -90,7 +87,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "مجلدات البيانات والملفات الخاصة قد تكون قابلة للوصول اليها عن طريق شبكة الانترنت وذلك بسبب ان ملف .htaccess لا يعمل بشكل صحيح.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "لمزيد من المعلومات عن كيفية إعداد خادمك، يرجى الاطلاع على <a href=\"%s\" target=\"_blank\">صفحة المساعدة</a>.",
"Create an <strong>admin account</strong>" : "أضف </strong>مستخدم رئيسي <strong>",
- "Password" : "كلمة المرور",
+ "Username" : "إسم المستخدم",
"Data folder" : "مجلد المعلومات",
"Configure the database" : "أسس قاعدة البيانات",
"Database user" : "مستخدم قاعدة البيانات",
@@ -100,6 +97,7 @@
"Database host" : "خادم قاعدة البيانات",
"Finish setup" : "انهاء التعديلات",
"Log out" : "الخروج",
+ "Search" : "البحث",
"remember" : "تذكر",
"Log in" : "أدخل",
"Alternative Logins" : "اسماء دخول بديلة"
diff --git a/core/l10n/ast.js b/core/l10n/ast.js
index fbb0ba765b0..ac881cf0d7f 100644
--- a/core/l10n/ast.js
+++ b/core/l10n/ast.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Turned off maintenance mode" : "Apagáu'l mou de caltenimientu",
"Updated database" : "Base de datos anovada",
"Checked database schema update" : "Anovamientu del esquema de base de datos revisáu",
+ "Checked database schema update for apps" : "Anovamientu del esquema de base de datos p'aplicaciones revisáu",
"Updated \"%s\" to %s" : "Anováu \"%s\" a %s",
"Disabled incompatible apps: %s" : "Aplicaciones incompatibles desactivaes: %s",
"No image or file provided" : "Nun s'especificó nenguna imaxe o ficheru",
@@ -38,7 +39,6 @@ OC.L10N.register(
"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." : "Unviósete al corréu l'enllaz pa reaniciar la to contraseña. Si nun lu recibes nuna cantidá razonable de tiempu, comprueba les tos carpetes de corréu puxarra. <br>Si nun ta ehí, entruga al to alministrador llocal",
"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?" : "Los tos ficheros tán crifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que se reanicie la to contraseña.<br />Si nun tas seguru de qué facer, por favor contauta col to alministrador enantes que sigas. <br />¿De xuru quies siguir?",
"I know what I'm doing" : "Sé lo que toi faciendo",
- "Reset password" : "Restablecer contraseña",
"Password can not be changed. Please contact your administrator." : "Nun pue camudase la contraseña. Por favor, contauta col alministrador.",
"No" : "Non",
"Yes" : "Sí",
@@ -64,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Contraseña mui bona",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "El to sirvidor web entá nun ta configuráu afayadizamente pa permitir la sincronización de ficheros porque la interfaz WebDAV paez tar rota.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Esti sirvidor nun tien conexón a Internet. Esto significa que dalgunes de les carauterístiques nun van funcionar, como'l montaxe d'almacenamiento esternu, les notificaciones sobre anovamientos, la instalación d'aplicaciones de terceros, l'accesu a los ficheros de mou remotu o l'unviu de correos-e de notificación. Suxerimos habilitar una conexón a Internet nesti sirvidor pa esfrutar de toles funciones.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El direutoriu de datos y ficheros ye dablemente accesible dende Internet, darréu que'l ficheru .htaccess nun ta funcionando. Suxerímoste que configures el sirvidor web de mou que'l direutoriu de datos nun seya accesible o que muevas talu direutoriu fuera del raigañu de documentos del sirvidor web.",
"Shared" : "Compartíu",
"Shared with {recipients}" : "Compartío con {recipients}",
"Share" : "Compartir",
@@ -77,11 +78,12 @@ OC.L10N.register(
"Share link" : "Compartir enllaz",
"The public link will expire no later than {days} days after it is created" : "L'enllaz públicu va caducar enantes de {days} díes dende la so creación",
"Password protect" : "Protexer con contraseña",
+ "Password" : "Contraseña",
"Choose a password for the public link" : "Escueyi una contraseña pal enllaz públicu",
- "Allow Public Upload" : "Permitir xuba pública",
"Email link to person" : "Enllaz de corréu-e a la persona",
"Send" : "Unviar",
"Set expiration date" : "Afitar la data de caducidá",
+ "Expiration" : "Caducidá",
"Expiration date" : "Data de caducidá",
"group" : "grupu",
"Resharing is not allowed" : "Recompartir nun ta permitíu",
@@ -92,7 +94,6 @@ OC.L10N.register(
"can edit" : "pue editar",
"access control" : "control d'accesu",
"create" : "crear",
- "update" : "xubir",
"delete" : "desaniciar",
"Password protected" : "Contraseña protexida",
"Error unsetting expiration date" : "Fallu desafitando la data de caducidá",
@@ -110,20 +111,15 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"Updating {productName} to version {version}, this may take a while." : "Anovando {productName} a la versión {version}, esto pue llevar un tiempu.",
"Please reload the page." : "Por favor, recarga la páxina",
- "The update was unsuccessful." : "L'anovamientu nun foi esitosu.",
"The update was successful. Redirecting you to ownCloud now." : "L'anovamientu fízose con ésitu. Redirixiendo agora al to ownCloud.",
"Couldn't reset password because the token is invalid" : "Nun pudo reaniciase la contraseña porque'l token ye inválidu",
"Couldn't send reset email. Please make sure your username is correct." : "Nun pudo unviase'l corréu. Por favor, asegurate que'l to nome d'usuariu seya correutu",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nun pudo unviase'l corréu porque nun hai direición de corréu pa esti nome d'usuariu. Por favor, contauta col alministrador",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usa'l siguiente enllaz pa restablecer la to contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas recibir un enllaz vía Corréu-e pa restablecer la to contraseña",
- "Username" : "Nome d'usuariu",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Los ficheros tán cifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que la contraseña se reanicie. Si nun tas seguru de qué facer, por favor contauta col alministrador enantes de siguir. ¿De xuru quies continuar?",
- "Yes, I really want to reset my password now" : "Sí, quiero reaniciar daveres la mio contraseña agora",
- "Reset" : "Reaniciar",
"New password" : "Contraseña nueva",
"New Password" : "Contraseña nueva",
+ "Reset password" : "Restablecer contraseña",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nun ta sofitáu y %s nun furrulará afayadizamente nesta plataforma. ¡Úsalu baxo'l to riesgu!",
"For the best results, please consider using a GNU/Linux server instead." : "Pa los meyores resultaos, por favor considera l'usu d'un sirvidor GNU/Linux nel so llugar.",
"Personal" : "Personal",
@@ -148,7 +144,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "El to direutoriu de datos y ficheros seique ye accesible dende internet por mor qu'el ficheru .htaccess nun furrula.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pa informase de cómo configurar el so sirvidor, por favor güeya la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crea una <strong>cuenta d'alministrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nome d'usuariu",
"Storage & database" : "Almacenamientu y Base de datos",
"Data folder" : "Carpeta de datos",
"Configure the database" : "Configura la base de datos",
@@ -163,6 +159,7 @@ OC.L10N.register(
"Finishing …" : "Finando ...",
"%s is available. Get more information on how to update." : "Ta disponible %s. Consigui más información en cómo anovar·",
"Log out" : "Zarrar sesión",
+ "Search" : "Guetar",
"Server side authentication failed!" : "Falló l'autenticación nel sirvidor!",
"Please contact your administrator." : "Por favor, contauta col to alministrador",
"Forgot your password? Reset it!" : "¿Escaeciesti la to contraseña? ¡Reaníciala!",
diff --git a/core/l10n/ast.json b/core/l10n/ast.json
index e255cad1774..623be8cb43b 100644
--- a/core/l10n/ast.json
+++ b/core/l10n/ast.json
@@ -4,6 +4,7 @@
"Turned off maintenance mode" : "Apagáu'l mou de caltenimientu",
"Updated database" : "Base de datos anovada",
"Checked database schema update" : "Anovamientu del esquema de base de datos revisáu",
+ "Checked database schema update for apps" : "Anovamientu del esquema de base de datos p'aplicaciones revisáu",
"Updated \"%s\" to %s" : "Anováu \"%s\" a %s",
"Disabled incompatible apps: %s" : "Aplicaciones incompatibles desactivaes: %s",
"No image or file provided" : "Nun s'especificó nenguna imaxe o ficheru",
@@ -36,7 +37,6 @@
"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." : "Unviósete al corréu l'enllaz pa reaniciar la to contraseña. Si nun lu recibes nuna cantidá razonable de tiempu, comprueba les tos carpetes de corréu puxarra. <br>Si nun ta ehí, entruga al to alministrador llocal",
"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?" : "Los tos ficheros tán crifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que se reanicie la to contraseña.<br />Si nun tas seguru de qué facer, por favor contauta col to alministrador enantes que sigas. <br />¿De xuru quies siguir?",
"I know what I'm doing" : "Sé lo que toi faciendo",
- "Reset password" : "Restablecer contraseña",
"Password can not be changed. Please contact your administrator." : "Nun pue camudase la contraseña. Por favor, contauta col alministrador.",
"No" : "Non",
"Yes" : "Sí",
@@ -62,6 +62,7 @@
"Strong password" : "Contraseña mui bona",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "El to sirvidor web entá nun ta configuráu afayadizamente pa permitir la sincronización de ficheros porque la interfaz WebDAV paez tar rota.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Esti sirvidor nun tien conexón a Internet. Esto significa que dalgunes de les carauterístiques nun van funcionar, como'l montaxe d'almacenamiento esternu, les notificaciones sobre anovamientos, la instalación d'aplicaciones de terceros, l'accesu a los ficheros de mou remotu o l'unviu de correos-e de notificación. Suxerimos habilitar una conexón a Internet nesti sirvidor pa esfrutar de toles funciones.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El direutoriu de datos y ficheros ye dablemente accesible dende Internet, darréu que'l ficheru .htaccess nun ta funcionando. Suxerímoste que configures el sirvidor web de mou que'l direutoriu de datos nun seya accesible o que muevas talu direutoriu fuera del raigañu de documentos del sirvidor web.",
"Shared" : "Compartíu",
"Shared with {recipients}" : "Compartío con {recipients}",
"Share" : "Compartir",
@@ -75,11 +76,12 @@
"Share link" : "Compartir enllaz",
"The public link will expire no later than {days} days after it is created" : "L'enllaz públicu va caducar enantes de {days} díes dende la so creación",
"Password protect" : "Protexer con contraseña",
+ "Password" : "Contraseña",
"Choose a password for the public link" : "Escueyi una contraseña pal enllaz públicu",
- "Allow Public Upload" : "Permitir xuba pública",
"Email link to person" : "Enllaz de corréu-e a la persona",
"Send" : "Unviar",
"Set expiration date" : "Afitar la data de caducidá",
+ "Expiration" : "Caducidá",
"Expiration date" : "Data de caducidá",
"group" : "grupu",
"Resharing is not allowed" : "Recompartir nun ta permitíu",
@@ -90,7 +92,6 @@
"can edit" : "pue editar",
"access control" : "control d'accesu",
"create" : "crear",
- "update" : "xubir",
"delete" : "desaniciar",
"Password protected" : "Contraseña protexida",
"Error unsetting expiration date" : "Fallu desafitando la data de caducidá",
@@ -108,20 +109,15 @@
"_download %n file_::_download %n files_" : ["",""],
"Updating {productName} to version {version}, this may take a while." : "Anovando {productName} a la versión {version}, esto pue llevar un tiempu.",
"Please reload the page." : "Por favor, recarga la páxina",
- "The update was unsuccessful." : "L'anovamientu nun foi esitosu.",
"The update was successful. Redirecting you to ownCloud now." : "L'anovamientu fízose con ésitu. Redirixiendo agora al to ownCloud.",
"Couldn't reset password because the token is invalid" : "Nun pudo reaniciase la contraseña porque'l token ye inválidu",
"Couldn't send reset email. Please make sure your username is correct." : "Nun pudo unviase'l corréu. Por favor, asegurate que'l to nome d'usuariu seya correutu",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nun pudo unviase'l corréu porque nun hai direición de corréu pa esti nome d'usuariu. Por favor, contauta col alministrador",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usa'l siguiente enllaz pa restablecer la to contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas recibir un enllaz vía Corréu-e pa restablecer la to contraseña",
- "Username" : "Nome d'usuariu",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Los ficheros tán cifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que la contraseña se reanicie. Si nun tas seguru de qué facer, por favor contauta col alministrador enantes de siguir. ¿De xuru quies continuar?",
- "Yes, I really want to reset my password now" : "Sí, quiero reaniciar daveres la mio contraseña agora",
- "Reset" : "Reaniciar",
"New password" : "Contraseña nueva",
"New Password" : "Contraseña nueva",
+ "Reset password" : "Restablecer contraseña",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nun ta sofitáu y %s nun furrulará afayadizamente nesta plataforma. ¡Úsalu baxo'l to riesgu!",
"For the best results, please consider using a GNU/Linux server instead." : "Pa los meyores resultaos, por favor considera l'usu d'un sirvidor GNU/Linux nel so llugar.",
"Personal" : "Personal",
@@ -146,7 +142,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "El to direutoriu de datos y ficheros seique ye accesible dende internet por mor qu'el ficheru .htaccess nun furrula.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pa informase de cómo configurar el so sirvidor, por favor güeya la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crea una <strong>cuenta d'alministrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nome d'usuariu",
"Storage & database" : "Almacenamientu y Base de datos",
"Data folder" : "Carpeta de datos",
"Configure the database" : "Configura la base de datos",
@@ -161,6 +157,7 @@
"Finishing …" : "Finando ...",
"%s is available. Get more information on how to update." : "Ta disponible %s. Consigui más información en cómo anovar·",
"Log out" : "Zarrar sesión",
+ "Search" : "Guetar",
"Server side authentication failed!" : "Falló l'autenticación nel sirvidor!",
"Please contact your administrator." : "Por favor, contauta col to alministrador",
"Forgot your password? Reset it!" : "¿Escaeciesti la to contraseña? ¡Reaníciala!",
diff --git a/core/l10n/az.js b/core/l10n/az.js
index f3a5b138641..a60bfa562d2 100644
--- a/core/l10n/az.js
+++ b/core/l10n/az.js
@@ -26,6 +26,7 @@ OC.L10N.register(
"Share" : "Yayımla",
"Error" : "Səhv",
"Share link" : "Linki yayımla",
+ "Password" : "Şifrə",
"Send" : "Göndər",
"group" : "qrup",
"can share" : "yayımlaya bilərsiniz",
@@ -35,14 +36,13 @@ OC.L10N.register(
"Delete" : "Sil",
"Add" : "Əlavə etmək",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "İstifadəçi adı",
- "Reset" : "Sıfırla",
"Personal" : "Şəxsi",
"Users" : "İstifadəçilər",
"Admin" : "İnzibatçı",
"Help" : "Kömək",
"Security Warning" : "Təhlükəsizlik xəbərdarlığı",
- "Password" : "Şifrə",
+ "Username" : "İstifadəçi adı",
+ "Search" : "Axtarış",
"You are accessing the server from an untrusted domain." : "Siz serverə inamsız domain-dən girməyə çalışırsız.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Xahiş olunur inzibatçı ilə əlaqə saxlayasınız. Eger siz bu xidmətin inzibatçısısınizsa, \"trusted_domain\" configini config/config.php faylinda düzgün qeyd edin. Config nüsxəsi config/config.sample.php faylında qeyd edilmişdir."
},
diff --git a/core/l10n/az.json b/core/l10n/az.json
index 7f4f7d8bb95..05f063df4e2 100644
--- a/core/l10n/az.json
+++ b/core/l10n/az.json
@@ -24,6 +24,7 @@
"Share" : "Yayımla",
"Error" : "Səhv",
"Share link" : "Linki yayımla",
+ "Password" : "Şifrə",
"Send" : "Göndər",
"group" : "qrup",
"can share" : "yayımlaya bilərsiniz",
@@ -33,14 +34,13 @@
"Delete" : "Sil",
"Add" : "Əlavə etmək",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "İstifadəçi adı",
- "Reset" : "Sıfırla",
"Personal" : "Şəxsi",
"Users" : "İstifadəçilər",
"Admin" : "İnzibatçı",
"Help" : "Kömək",
"Security Warning" : "Təhlükəsizlik xəbərdarlığı",
- "Password" : "Şifrə",
+ "Username" : "İstifadəçi adı",
+ "Search" : "Axtarış",
"You are accessing the server from an untrusted domain." : "Siz serverə inamsız domain-dən girməyə çalışırsız.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Xahiş olunur inzibatçı ilə əlaqə saxlayasınız. Eger siz bu xidmətin inzibatçısısınizsa, \"trusted_domain\" configini config/config.php faylinda düzgün qeyd edin. Config nüsxəsi config/config.sample.php faylında qeyd edilmişdir."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js
index fc93aad24da..f84bfc5ffb5 100644
--- a/core/l10n/bg_BG.js
+++ b/core/l10n/bg_BG.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Връзката за възстановяване на паролата е изпратена на твоя имейл. Ако не я получиш в разумен период от време, провери папката си за спам.<br>Ако не е там се свържи с администратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата.<br /> Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш.<br/>Наистина ли си сигурен, че искаш да продължиш?",
"I know what I'm doing" : "Знам какво правя!",
- "Reset password" : "Възстановяване на парола",
"Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържи се с администратора.",
"No" : "Не",
"Yes" : "Да",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Сигурна парола",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Твоят web сървър все още не е правилно настроен да позволява синхронизация на файлове, защото WebDAV интерфейсът изглежда не работи.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Твоята директория за данни и файлове вероятно са достъпни от интернет. .htaccess файла не функционира. Силно препоръчваме да настроиш уебсъръра по такъв начин, че директорията за данни да не бъде достъпна или да я преместиш извън директорията корен на сървъра.",
"Error occurred while checking server setup" : "Настъпи грешка при проверката на настройките на сървъра.",
"Shared" : "Споделено",
"Shared with {recipients}" : "Споделено с {recipients}.",
@@ -79,11 +79,12 @@ OC.L10N.register(
"Share link" : "Връзка за споделяне",
"The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дена след създаването й.",
"Password protect" : "Защитено с парола",
+ "Password" : "Парола",
"Choose a password for the public link" : "Избери парола за общодостъпната връзка",
- "Allow Public Upload" : "Разреши Общодостъпно Качване",
"Email link to person" : "Изпрати връзка до нечия пощата",
"Send" : "Изпрати",
"Set expiration date" : "Посочи дата на изтичане",
+ "Expiration" : "Изтичане",
"Expiration date" : "Дата на изтичане",
"Adding user..." : "Добавяне на потребител...",
"group" : "група",
@@ -95,7 +96,6 @@ OC.L10N.register(
"can edit" : "може да променя",
"access control" : "контрол на достъпа",
"create" : "Създаване",
- "update" : "Обновяване",
"delete" : "изтрий",
"Password protected" : "Защитено с парола",
"Error unsetting expiration date" : "Грешка при премахване на дата за изтичане",
@@ -110,23 +110,22 @@ OC.L10N.register(
"Edit tags" : "Промяна на етикетите",
"Error loading dialog template: {error}" : "Грешка при зареждането на шаблоn за диалог: {error}.",
"No tags selected for deletion." : "Не са избрани етикети за изтриване.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "непознат текст",
+ "Hello world!" : "Здравей Свят!",
+ "sunny" : "слънчево",
+ "Hello {name}, the weather is {weather}" : "Здравей {name}, времето е {weather}",
+ "_download %n file_::_download %n files_" : ["изтегли %n файл","изтегли %n файла"],
"Updating {productName} to version {version}, this may take a while." : "Обновява се {productName} на версия {version}, това може да отнеме време.",
"Please reload the page." : "Моля, презареди страницата.",
- "The update was unsuccessful." : "Обновяването неуспешно.",
"The update was successful. Redirecting you to ownCloud now." : "Обновяването е успешно. Пренасочване към твоя ownCloud сега.",
"Couldn't reset password because the token is invalid" : "Невалиден линк за промяна на паролата.",
"Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, увери се, че потребителското име е правилно.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата, защото липсва имейл свързан с това потребителско име. Моля свържи се с админстратора.",
"%s password reset" : "Паролата на %s е променена.",
"Use the following link to reset your password: {link}" : "Използвай следната връзка, за да възстановиш паролата си: {link}",
- "You will receive a link to reset your password via Email." : "Ще получиш връзка за възстановяване на паролата посредством емейл.",
- "Username" : "Потребител",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата. Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш. Наистина ли си сигурен, че искаш да продължиш?",
- "Yes, I really want to reset my password now" : "Да, наистина желая да възстановя паролата си сега.",
- "Reset" : "Възстанови",
"New password" : "Нова парола",
"New Password" : "Нова Парола",
+ "Reset password" : "Възстановяване на парола",
"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 сървър.",
"Personal" : "Лични",
@@ -166,7 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Твоята директория за данни и файлове вероятно са достъпни от интернет поради това, че .htaccess файла не функционира.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "За информация как правилно да настроиш сървъра си, моля прегледай <a href=\"%s\" target=\"_blank\">документацията</a>.",
"Create an <strong>admin account</strong>" : "Създаване на <strong>админ профил</strong>.",
- "Password" : "Парола",
+ "Username" : "Потребител",
"Storage & database" : "Дисково пространство и база данни",
"Data folder" : "Директория за данни",
"Configure the database" : "Конфигуриране на базата данни",
@@ -182,6 +181,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Програмата изисква JavaScript, за да функционира правилно. Моля, <a href=\"http://enable-javascript.com/\" target=\"_blank\">включи JavaScript</a> и презареди страницата.",
"%s is available. Get more information on how to update." : "%s е на разположение. Прочети повече как да обновиш. ",
"Log out" : "Отписване",
+ "Search" : "Търсене",
"Server side authentication failed!" : "Заверяването в сървъра неуспешно!",
"Please contact your administrator." : "Моля, свържи се с админстратора.",
"Forgot your password? Reset it!" : "Забрави паролата? Възстанови я!",
diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json
index 7a74dfd6a2c..a1c58faeca1 100644
--- a/core/l10n/bg_BG.json
+++ b/core/l10n/bg_BG.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Връзката за възстановяване на паролата е изпратена на твоя имейл. Ако не я получиш в разумен период от време, провери папката си за спам.<br>Ако не е там се свържи с администратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата.<br /> Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш.<br/>Наистина ли си сигурен, че искаш да продължиш?",
"I know what I'm doing" : "Знам какво правя!",
- "Reset password" : "Възстановяване на парола",
"Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържи се с администратора.",
"No" : "Не",
"Yes" : "Да",
@@ -63,6 +62,7 @@
"Strong password" : "Сигурна парола",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Твоят web сървър все още не е правилно настроен да позволява синхронизация на файлове, защото WebDAV интерфейсът изглежда не работи.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Твоята директория за данни и файлове вероятно са достъпни от интернет. .htaccess файла не функционира. Силно препоръчваме да настроиш уебсъръра по такъв начин, че директорията за данни да не бъде достъпна или да я преместиш извън директорията корен на сървъра.",
"Error occurred while checking server setup" : "Настъпи грешка при проверката на настройките на сървъра.",
"Shared" : "Споделено",
"Shared with {recipients}" : "Споделено с {recipients}.",
@@ -77,11 +77,12 @@
"Share link" : "Връзка за споделяне",
"The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дена след създаването й.",
"Password protect" : "Защитено с парола",
+ "Password" : "Парола",
"Choose a password for the public link" : "Избери парола за общодостъпната връзка",
- "Allow Public Upload" : "Разреши Общодостъпно Качване",
"Email link to person" : "Изпрати връзка до нечия пощата",
"Send" : "Изпрати",
"Set expiration date" : "Посочи дата на изтичане",
+ "Expiration" : "Изтичане",
"Expiration date" : "Дата на изтичане",
"Adding user..." : "Добавяне на потребител...",
"group" : "група",
@@ -93,7 +94,6 @@
"can edit" : "може да променя",
"access control" : "контрол на достъпа",
"create" : "Създаване",
- "update" : "Обновяване",
"delete" : "изтрий",
"Password protected" : "Защитено с парола",
"Error unsetting expiration date" : "Грешка при премахване на дата за изтичане",
@@ -108,23 +108,22 @@
"Edit tags" : "Промяна на етикетите",
"Error loading dialog template: {error}" : "Грешка при зареждането на шаблоn за диалог: {error}.",
"No tags selected for deletion." : "Не са избрани етикети за изтриване.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "непознат текст",
+ "Hello world!" : "Здравей Свят!",
+ "sunny" : "слънчево",
+ "Hello {name}, the weather is {weather}" : "Здравей {name}, времето е {weather}",
+ "_download %n file_::_download %n files_" : ["изтегли %n файл","изтегли %n файла"],
"Updating {productName} to version {version}, this may take a while." : "Обновява се {productName} на версия {version}, това може да отнеме време.",
"Please reload the page." : "Моля, презареди страницата.",
- "The update was unsuccessful." : "Обновяването неуспешно.",
"The update was successful. Redirecting you to ownCloud now." : "Обновяването е успешно. Пренасочване към твоя ownCloud сега.",
"Couldn't reset password because the token is invalid" : "Невалиден линк за промяна на паролата.",
"Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, увери се, че потребителското име е правилно.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата, защото липсва имейл свързан с това потребителско име. Моля свържи се с админстратора.",
"%s password reset" : "Паролата на %s е променена.",
"Use the following link to reset your password: {link}" : "Използвай следната връзка, за да възстановиш паролата си: {link}",
- "You will receive a link to reset your password via Email." : "Ще получиш връзка за възстановяване на паролата посредством емейл.",
- "Username" : "Потребител",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата. Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш. Наистина ли си сигурен, че искаш да продължиш?",
- "Yes, I really want to reset my password now" : "Да, наистина желая да възстановя паролата си сега.",
- "Reset" : "Възстанови",
"New password" : "Нова парола",
"New Password" : "Нова Парола",
+ "Reset password" : "Възстановяване на парола",
"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 сървър.",
"Personal" : "Лични",
@@ -164,7 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Твоята директория за данни и файлове вероятно са достъпни от интернет поради това, че .htaccess файла не функционира.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "За информация как правилно да настроиш сървъра си, моля прегледай <a href=\"%s\" target=\"_blank\">документацията</a>.",
"Create an <strong>admin account</strong>" : "Създаване на <strong>админ профил</strong>.",
- "Password" : "Парола",
+ "Username" : "Потребител",
"Storage & database" : "Дисково пространство и база данни",
"Data folder" : "Директория за данни",
"Configure the database" : "Конфигуриране на базата данни",
@@ -180,6 +179,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Програмата изисква JavaScript, за да функционира правилно. Моля, <a href=\"http://enable-javascript.com/\" target=\"_blank\">включи JavaScript</a> и презареди страницата.",
"%s is available. Get more information on how to update." : "%s е на разположение. Прочети повече как да обновиш. ",
"Log out" : "Отписване",
+ "Search" : "Търсене",
"Server side authentication failed!" : "Заверяването в сървъра неуспешно!",
"Please contact your administrator." : "Моля, свържи се с админстратора.",
"Forgot your password? Reset it!" : "Забрави паролата? Възстанови я!",
diff --git a/core/l10n/bn_BD.js b/core/l10n/bn_BD.js
index ac4ba299468..9266477a8d0 100644
--- a/core/l10n/bn_BD.js
+++ b/core/l10n/bn_BD.js
@@ -29,7 +29,6 @@ OC.L10N.register(
"December" : "ডিসেম্বর",
"Settings" : "নিয়ামকসমূহ",
"Saving..." : "সংরক্ষণ করা হচ্ছে..",
- "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"No" : "না",
"Yes" : "হ্যাঁ",
"Choose" : "বেছে নিন",
@@ -52,6 +51,7 @@ OC.L10N.register(
"Shared with you by {owner}" : "{owner} আপনার সাথে ভাগাভাগি করেছেন",
"Share link" : "লিংক ভাগাভাগি করেন",
"Password protect" : "কূটশব্দ সুরক্ষিত",
+ "Password" : "কূটশব্দ",
"Email link to person" : "ব্যক্তির সাথে ই-মেইল যুক্ত কর",
"Send" : "পাঠাও",
"Set expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন",
@@ -64,7 +64,6 @@ OC.L10N.register(
"can edit" : "সম্পাদনা করতে পারবেন",
"access control" : "অধিগম্যতা নিয়ন্ত্রণ",
"create" : "তৈরী করুন",
- "update" : "পরিবর্ধন কর",
"delete" : "মুছে ফেল",
"Password protected" : "কূটশব্দদ্বারা সুরক্ষিত",
"Error unsetting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ বাতিল করতে সমস্যা দেখা দিয়েছে",
@@ -80,11 +79,9 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"Please reload the page." : "দয়া করে পৃষ্ঠাটি পূনরায় লোড করুন।",
"Use the following link to reset your password: {link}" : "আপনার কূটশব্দটি পূনঃনির্ধারণ করার জন্য নিম্নোক্ত লিংকটি ব্যবহার করুনঃ {link}",
- "You will receive a link to reset your password via Email." : "কূটশব্দ পূনঃনির্ধারণের জন্য একটি টূনঃনির্ধারণ লিংকটি আপনাকে ই-মেইলে পাঠানো হয়েছে ।",
- "Username" : "ব্যবহারকারী",
- "Reset" : "পূণঃনির্ধানণ",
"New password" : "নতুন কূটশব্দ",
"New Password" : "নতুন কূটশব্দ",
+ "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"Personal" : "ব্যক্তিগত",
"Users" : "ব্যবহারকারী",
"Apps" : "অ্যাপ",
@@ -99,7 +96,7 @@ OC.L10N.register(
"Cheers!" : "শুভেচ্ছা!",
"Security Warning" : "নিরাপত্তাজনিত সতর্কতা",
"Create an <strong>admin account</strong>" : "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন",
- "Password" : "কূটশব্দ",
+ "Username" : "ব্যবহারকারী",
"Data folder" : "ডাটা ফোল্ডার ",
"Configure the database" : "ডাটাবেচ কনফিগার করুন",
"Database user" : "ডাটাবেজ ব্যবহারকারী",
@@ -110,6 +107,7 @@ OC.L10N.register(
"Finish setup" : "সেটআপ সুসম্পন্ন কর",
"Finishing …" : "সম্পন্ন হচ্ছে....",
"Log out" : "প্রস্থান",
+ "Search" : "অনুসন্ধান",
"remember" : "মনে রাখ",
"Log in" : "প্রবেশ",
"Alternative Logins" : "বিকল্প লগইন"
diff --git a/core/l10n/bn_BD.json b/core/l10n/bn_BD.json
index 9eee32ba3c2..f88b549e32d 100644
--- a/core/l10n/bn_BD.json
+++ b/core/l10n/bn_BD.json
@@ -27,7 +27,6 @@
"December" : "ডিসেম্বর",
"Settings" : "নিয়ামকসমূহ",
"Saving..." : "সংরক্ষণ করা হচ্ছে..",
- "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"No" : "না",
"Yes" : "হ্যাঁ",
"Choose" : "বেছে নিন",
@@ -50,6 +49,7 @@
"Shared with you by {owner}" : "{owner} আপনার সাথে ভাগাভাগি করেছেন",
"Share link" : "লিংক ভাগাভাগি করেন",
"Password protect" : "কূটশব্দ সুরক্ষিত",
+ "Password" : "কূটশব্দ",
"Email link to person" : "ব্যক্তির সাথে ই-মেইল যুক্ত কর",
"Send" : "পাঠাও",
"Set expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন",
@@ -62,7 +62,6 @@
"can edit" : "সম্পাদনা করতে পারবেন",
"access control" : "অধিগম্যতা নিয়ন্ত্রণ",
"create" : "তৈরী করুন",
- "update" : "পরিবর্ধন কর",
"delete" : "মুছে ফেল",
"Password protected" : "কূটশব্দদ্বারা সুরক্ষিত",
"Error unsetting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ বাতিল করতে সমস্যা দেখা দিয়েছে",
@@ -78,11 +77,9 @@
"_download %n file_::_download %n files_" : ["",""],
"Please reload the page." : "দয়া করে পৃষ্ঠাটি পূনরায় লোড করুন।",
"Use the following link to reset your password: {link}" : "আপনার কূটশব্দটি পূনঃনির্ধারণ করার জন্য নিম্নোক্ত লিংকটি ব্যবহার করুনঃ {link}",
- "You will receive a link to reset your password via Email." : "কূটশব্দ পূনঃনির্ধারণের জন্য একটি টূনঃনির্ধারণ লিংকটি আপনাকে ই-মেইলে পাঠানো হয়েছে ।",
- "Username" : "ব্যবহারকারী",
- "Reset" : "পূণঃনির্ধানণ",
"New password" : "নতুন কূটশব্দ",
"New Password" : "নতুন কূটশব্দ",
+ "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"Personal" : "ব্যক্তিগত",
"Users" : "ব্যবহারকারী",
"Apps" : "অ্যাপ",
@@ -97,7 +94,7 @@
"Cheers!" : "শুভেচ্ছা!",
"Security Warning" : "নিরাপত্তাজনিত সতর্কতা",
"Create an <strong>admin account</strong>" : "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন",
- "Password" : "কূটশব্দ",
+ "Username" : "ব্যবহারকারী",
"Data folder" : "ডাটা ফোল্ডার ",
"Configure the database" : "ডাটাবেচ কনফিগার করুন",
"Database user" : "ডাটাবেজ ব্যবহারকারী",
@@ -108,6 +105,7 @@
"Finish setup" : "সেটআপ সুসম্পন্ন কর",
"Finishing …" : "সম্পন্ন হচ্ছে....",
"Log out" : "প্রস্থান",
+ "Search" : "অনুসন্ধান",
"remember" : "মনে রাখ",
"Log in" : "প্রবেশ",
"Alternative Logins" : "বিকল্প লগইন"
diff --git a/core/l10n/bn_IN.js b/core/l10n/bn_IN.js
index a72a91078ae..1331e3ee8ea 100644
--- a/core/l10n/bn_IN.js
+++ b/core/l10n/bn_IN.js
@@ -12,6 +12,6 @@ OC.L10N.register(
"Add" : "যোগ করা",
"_download %n file_::_download %n files_" : ["",""],
"Username" : "ইউজারনেম",
- "Reset" : "রিসেট করুন"
+ "Search" : "অনুসন্ধান"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/bn_IN.json b/core/l10n/bn_IN.json
index 4e29d0774f6..be4609c5c88 100644
--- a/core/l10n/bn_IN.json
+++ b/core/l10n/bn_IN.json
@@ -10,6 +10,6 @@
"Add" : "যোগ করা",
"_download %n file_::_download %n files_" : ["",""],
"Username" : "ইউজারনেম",
- "Reset" : "রিসেট করুন"
+ "Search" : "অনুসন্ধান"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/bs.js b/core/l10n/bs.js
index 9a7f5526fdd..c9f8a9ea5a6 100644
--- a/core/l10n/bs.js
+++ b/core/l10n/bs.js
@@ -1,10 +1,212 @@
OC.L10N.register(
"core",
{
+ "Couldn't send mail to following users: %s " : "Nemoguće slanje emaila slijedećim korisnicima: %s",
+ "Turned on maintenance mode" : "Upaljen modus održavanja",
+ "Turned off maintenance mode" : "Ugašen modus održavanja",
+ "Updated database" : "Aktualizirana baza podataka",
+ "Checked database schema update" : "Provjereno aktualiziranje šeme baze podataka",
+ "Checked database schema update for apps" : "Provjereno ažuriranje šeme baze podataka za aplikacije",
+ "Updated \"%s\" to %s" : "Aktualizirano \"%s\" do %s",
+ "Disabled incompatible apps: %s" : "Deaktivirane nekompatibilne aplikacije: %s",
+ "No image or file provided" : "Ne postoji predviđena slika ili datoteka",
+ "Unknown filetype" : "Nepoznat tip datoteke",
+ "Invalid image" : "Nevažeća datoteka",
+ "No temporary profile picture available, try again" : "Trenutna slika profila nije dostupna, pokušajte ponovo",
+ "Sunday" : "Nedjelja",
+ "Monday" : "Ponedjeljak",
+ "Tuesday" : "Utorak",
+ "Wednesday" : "Srijeda",
+ "Thursday" : "Četvrtak",
+ "Friday" : "Petak",
+ "Saturday" : "Subota",
+ "January" : "Januar",
+ "February" : "Februar",
+ "March" : "Mart",
+ "April" : "April",
+ "May" : "Maj",
+ "June" : "Juni",
+ "July" : "Juli",
+ "August" : "Avgust",
+ "September" : "Septembar",
+ "October" : "Oktobar",
+ "November" : "Novembar",
+ "December" : "Decembar",
+ "Settings" : "Postavke",
"Saving..." : "Spašavam...",
+ "Couldn't send reset email. Please contact your administrator." : "Slanje emaila resetovanja nije moguće. Molim kontaktirajte administratora.",
+ "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." : "Veza za resetovanje vaše lozinke poslana je na vašu adresu e-pošte. Ako je ne primite u nekom razumnom vremenskom roku, provjerite svoje spam/junk direktorij. <br> Ako nije tamo, kontaktirajte vašeg lokalnog administratora.",
+ "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 datoteke su šifrirane. Ako niste aktivirali povratni ključ, neećete imati mogućnost povratka vaših podataka nakon što vaša lozinka bude resetovana.<br />Ako niste sigurni šta učiniti, prije nego nastavite, molimo kontaktirajte vašeg administratora. <br />Želite li zaista nastaviti?",
+ "I know what I'm doing" : "Ja znam šta radim",
+ "Password can not be changed. Please contact your administrator." : "Lozinku ne može biti promjenuta. Molimo kontaktirajte vašeg administratora.",
+ "No" : "Ne",
+ "Yes" : "Da",
+ "Choose" : "Izaberite",
+ "Error loading file picker template: {error}" : "Pogrešno učitavanje šablona za izabir datoteke: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Pogrešno učitavanje šablona za poruke: {error}",
+ "read-only" : "samo-čitljivo",
"_{count} file conflict_::_{count} file conflicts_" : ["","",""],
+ "One file conflict" : "Konflikt jedne datoteke",
+ "New Files" : "Nove datoteke",
+ "Already existing files" : "Postojeće datoteke",
+ "Which files do you want to keep?" : "Koje datoteke želite zadržati?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ako odaberete obe verzije, kopirana datoteka će imati broj dodan uz njeno ime.",
+ "Cancel" : "Odustani",
+ "Continue" : "Nastavi",
+ "(all selected)" : "(sve odabrano)",
+ "({count} selected)" : "({count} odabranih)",
+ "Error loading file exists template" : "Pogrešno učitavanje postojece datoteke šablona",
+ "Very weak password" : "Veoma slaba lozinka",
+ "Weak password" : "Slaba lozinka",
+ "So-so password" : "Tu-i-tamo lozinka",
+ "Good password" : "Dobra lozinka",
+ "Strong password" : "Jaka lozinka",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Vaš web server još nije valjano podešen da bi omogućio sinkronizaciju datoteka jer izgleda da je WebDAV sučelje neispravno.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ovaj server nema uspostavljenu internet konekciju. To znači da neke od njegovih funkcija poput spajanje na vanjsku memoriju, obavještavanje o ažuriranju ili instalaciji aplikacija 3će strane neće raditi. Također, možda je onemogućen daljinski pristup datotekama i slanje obavještajne e-pošte. Savjetujemo uspostavljanje internet konekcije za ovaj server u koliko želite sve njegove funkcije.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaš direktorij podataka i vaše datoteke su vjerovatno dostupne s interneta. Datoteka .htaccess ne radi. Strogo vam preporučujemo da vaš web server konfigurišete tako da je pristup direktoriju podataka nemoguć ili čak direktorij podataka premjestite izvan korijenskog/početnog direktorija web servera.",
+ "Error occurred while checking server setup" : "Došlo je do pogreške prilikom provjere serverskih postavki",
+ "Shared" : "Podijeljen",
+ "Shared with {recipients}" : "Podijeljen sa {recipients}",
"Share" : "Podijeli",
+ "Error" : "Greška",
+ "Error while sharing" : "Greška pri dijeljenju",
+ "Error while unsharing" : "Ggreška pri prestanku dijeljenja",
+ "Error while changing permissions" : "Greška pri mijenjanju dozvola",
+ "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}",
+ "Shared with you by {owner}" : "Podijeljeno sa vama od {owner}",
+ "Share with user or group …" : "Podijelite s korisnikom ili grupom ...",
+ "Share link" : "Podijelite vezu",
+ "The public link will expire no later than {days} days after it is created" : "Javna veza ističe najkasnije {days} dana nakon što je kreirana",
+ "Link" : "Veza",
+ "Password protect" : "Zaštitita lozinkom",
+ "Password" : "Lozinka",
+ "Choose a password for the public link" : "Izaberite lozinku za javnu vezu",
+ "Allow editing" : "Dozvolite izmjenu",
+ "Email link to person" : "Pošaljite osobi vezu e-poštom",
+ "Send" : "Pošalji",
+ "Set expiration date" : "Postavite datum isteka",
+ "Expiration" : "Istek",
+ "Expiration date" : "Datum isteka",
+ "Adding user..." : "Dodavanje korisnika...",
+ "group" : "grupa",
+ "remote" : "daljinski",
+ "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno",
+ "Shared in {item} with {user}" : "Podijeljeno u {item} s {user}",
+ "Unshare" : "Prestani dijeliti",
+ "notify by email" : "Obavijesti e-poštom",
+ "can share" : "može dijeliti",
+ "can edit" : "moće mijenjati",
+ "access control" : "Kontrola pristupa",
+ "create" : "kreiraj",
+ "change" : "izmjeni",
+ "delete" : "izbriši",
+ "Password protected" : "Zaštićeno lozinkom",
+ "Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka",
+ "Error setting expiration date" : "Pogrešno postavljanje datuma isteka",
+ "Sending ..." : "Slanje...",
+ "Email sent" : "E-pošta poslana",
+ "Warning" : "Upozorenje",
+ "The object type is not specified." : "Vrsta objekta nije određena.",
+ "Enter new" : "Unesi novi",
+ "Delete" : "Izbriši",
"Add" : "Dodaj",
- "_download %n file_::_download %n files_" : ["","",""]
+ "Edit tags" : "Izmjeni oznake",
+ "Error loading dialog template: {error}" : "Pogrešno učitavanje šablona dijaloga: {error}",
+ "No tags selected for deletion." : "Nema odabranih oznaka za brisanje.",
+ "unknown text" : "nepoznat tekst",
+ "Hello world!" : "Halo svijete!",
+ "sunny" : "sunčan",
+ "Hello {name}, the weather is {weather}" : "Halo {name}, vrijeme je {weather}",
+ "_download %n file_::_download %n files_" : ["","",""],
+ "Updating {productName} to version {version}, this may take a while." : "Ažuriranje {productName} u verziiju {version}, to može potrajati neko vrijeme.",
+ "Please reload the page." : "Molim, ponovno učitajte stranicu",
+ "The update was unsuccessful. " : "Ažuriranje nije uspjelo.",
+ "The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspjelo. Preusmjeravam vas na ownCloud.",
+ "Couldn't reset password because the token is invalid" : "Nemoguće resetiranje lozinke jer znak nije validan.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Slanje emaila resetovanja nije moguće. Osigurajte se da vam je ispravno korisničko ime.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Slanje emaila resetovanja nije moguće jer za ovo korisničko ime ne postoji email adresa. Molim, kontaktirajte administratora.",
+ "%s password reset" : "%s lozinka resetovana",
+ "Use the following link to reset your password: {link}" : "Za resetovanje vaše lozinke koristite slijedeću vezu: {link}",
+ "New password" : "Nova lozinka",
+ "New Password" : "Nova Lozinka",
+ "Reset password" : "Resetuj lozinku",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba. Korištenje na vlastiti rizik!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Umjesto toga, za najbolje rezultate, molimo razmislite o mogućnosti korištenje GNU/Linux servera.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Molim odstranite open_basedir postavku iz vaše php.ini ili prebacite na 64bit PHP.",
+ "Please install the cURL extension and restart your webserver." : "Molim instalirajte cURL proširenje i ponovo pokrenite svoj server.",
+ "Personal" : "Osobno",
+ "Users" : "Korisnici",
+ "Apps" : "Aplikacije",
+ "Admin" : "Admin",
+ "Help" : "Pomoć",
+ "Error loading tags" : "Greška pri učitavanju oznaka",
+ "Tag already exists" : "Oznaka već postoji",
+ "Error deleting tag(s)" : "Greška pri brisanju znaka(ova)",
+ "Error tagging" : "Greška pri označavanju",
+ "Error untagging" : "Greška pri uklanjanju oznaka",
+ "Error favoriting" : "Greška pri dodavanju u favorite",
+ "Error unfavoriting" : "Greška pri uklanjanju iz favorita",
+ "Access forbidden" : "Zabranjen pristup",
+ "File not found" : "Datoteka nije pronađena",
+ "The specified document has not been found on the server." : "Odabran dokument nije pronađen na serveru.",
+ "You can click here to return to %s." : "Možete kliknuti ovdje da bih se vratili na %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej,\n\nsamo da javim da je %s podjelio(la) %s s vama.\nPosjeti: %s\n\n",
+ "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.",
+ "Cheers!" : "Cheers!",
+ "Internal Server Error" : "Unutarnja Server Greška",
+ "More details can be found in the server log." : "Više detalja se mogu naći u server zapisu (log).",
+ "Technical details" : "Tehnički detalji",
+ "Request ID: %s" : "Zahtjevaj ID: %s",
+ "Code: %s" : "Kod (Code): %s",
+ "Message: %s" : "Poruka: %s",
+ "File: %s" : "Datoteka: %s",
+ "Line: %s" : "Red: %s",
+ "Security Warning" : "Sigurnosno Upozorenje",
+ "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Vaša PHP verzija je podložna napadu NULL Byte (CVE-2006-7243)",
+ "Please update your PHP installation to use %s securely." : "Molim aktualizirajte vašu PHP instalaciju da bih sigurno koistili %s.",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaš direktorij podataka i datoteke vjerojatno se mogu pristupiti s interneta jer .htaccess datoteka ne radi.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da valjano konfigurišete vaš server, molim pogledajte <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
+ "Create an <strong>admin account</strong>" : "Kreirajte <strong>administracioni račun</strong>",
+ "Username" : "Korisničko ime",
+ "Storage & database" : "Pohrana & baza podataka",
+ "Data folder" : "Direktorij podataka",
+ "Configure the database" : "Konfigurišite bazu podataka",
+ "Only %s is available." : "Samo %s je dostupno.",
+ "Database user" : "Korisnik baze podataka",
+ "Database password" : "Lozinka baze podataka",
+ "Database name" : "Naziv baze podataka",
+ "Database tablespace" : "Tablespace (?) baze podataka",
+ "Database host" : "Glavno računalo (host) baze podataka",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite će se koristiti kao baza podataka. Za veće instalacije preporučujemo da se to promijeni.",
+ "Finish setup" : "Završite postavke",
+ "Finishing …" : "Završavanje...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ova aplikacija zahtjeva JavaScript za ispravan rad. Molimo <a href=\"http://enable-javascript.com/\" target=\"_blank\"> uključite JavaScript</a> i ponovno učitajte stranicu.",
+ "%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.",
+ "Log out" : "Odjava",
+ "Search" : "Potraži",
+ "Server side authentication failed!" : "Autentikacija na strani servera nije uspjela!",
+ "Please contact your administrator." : "Molim kontaktirajte svog administratora.",
+ "Forgot your password? Reset it!" : "Zaboravili ste svoju lozinku? Resetujte ju!",
+ "remember" : "zapamti",
+ "Log in" : "Prijava",
+ "Alternative Logins" : "Alternativne Prijave",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej, <br><br> upravo vam javljam da je %s s vama podijelio <strong>%s</strong>.<br><a href=\"%s\">Pogledajte!</a><br><br>",
+ "This ownCloud instance is currently in single user mode." : "Ova ownCloud instanca je trenutno u jednokorisničkom načinu rada.",
+ "This means only administrators can use the instance." : "To znači da tu instancu mogu koristiti samo administratori.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktirajte svog administratora sistema ako se ova poruka ponavlja ili se pojavila neočekivano.",
+ "Thank you for your patience." : "Hvala vam na strpljenju",
+ "You are accessing the server from an untrusted domain." : "Pristupate serveru sa nepouzdane domene.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Molim kontaktirajte vašeg administratora. Ako ste vi administrator ove instance, konfigurišite postavku \"trusted_domain\" u config/config.php. Primjer konfiguracije ponuđen je u 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." : "Ovisno o vašoj konfiguraciji, kao administrator vi biste također mogli koristiti dugme ispod za povjeru toj domeni.",
+ "Add \"%s\" as trusted domain" : "Dodajte \"%s\" kao povjerenu/pouzdanu domenu.",
+ "%s will be updated to version %s." : "%s će biti ažuriran u verziju %s",
+ "The following apps will be disabled:" : "Sljedeće aplikacije bit će onemogućene:",
+ "The theme %s has been disabled." : "Tema %s je onemogućena",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Prije nego nastavite, molim osigurajte se da su baza podataka, direktorij konfiguracije i direktorij podataka sigurnosno kopirani.",
+ "Start update" : "Započnite ažuriranje",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Da biste izbjegli vremensko prekoračenje s većim instalacijama, možete pokrenuti slijedeću naredbu iz svoga instalacijskog direktorija:",
+ "This %s instance is currently being updated, which may take a while." : "Instanca %s se trenutno ažurira, što može potrajati.",
+ "This page will refresh itself when the %s instance is available again." : "Ova stranica će se sama aktualizirati nakon što instanca %s postane ponovo dostupna."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/core/l10n/bs.json b/core/l10n/bs.json
index 470d259820d..44eb1cd99a6 100644
--- a/core/l10n/bs.json
+++ b/core/l10n/bs.json
@@ -1,8 +1,210 @@
{ "translations": {
+ "Couldn't send mail to following users: %s " : "Nemoguće slanje emaila slijedećim korisnicima: %s",
+ "Turned on maintenance mode" : "Upaljen modus održavanja",
+ "Turned off maintenance mode" : "Ugašen modus održavanja",
+ "Updated database" : "Aktualizirana baza podataka",
+ "Checked database schema update" : "Provjereno aktualiziranje šeme baze podataka",
+ "Checked database schema update for apps" : "Provjereno ažuriranje šeme baze podataka za aplikacije",
+ "Updated \"%s\" to %s" : "Aktualizirano \"%s\" do %s",
+ "Disabled incompatible apps: %s" : "Deaktivirane nekompatibilne aplikacije: %s",
+ "No image or file provided" : "Ne postoji predviđena slika ili datoteka",
+ "Unknown filetype" : "Nepoznat tip datoteke",
+ "Invalid image" : "Nevažeća datoteka",
+ "No temporary profile picture available, try again" : "Trenutna slika profila nije dostupna, pokušajte ponovo",
+ "Sunday" : "Nedjelja",
+ "Monday" : "Ponedjeljak",
+ "Tuesday" : "Utorak",
+ "Wednesday" : "Srijeda",
+ "Thursday" : "Četvrtak",
+ "Friday" : "Petak",
+ "Saturday" : "Subota",
+ "January" : "Januar",
+ "February" : "Februar",
+ "March" : "Mart",
+ "April" : "April",
+ "May" : "Maj",
+ "June" : "Juni",
+ "July" : "Juli",
+ "August" : "Avgust",
+ "September" : "Septembar",
+ "October" : "Oktobar",
+ "November" : "Novembar",
+ "December" : "Decembar",
+ "Settings" : "Postavke",
"Saving..." : "Spašavam...",
+ "Couldn't send reset email. Please contact your administrator." : "Slanje emaila resetovanja nije moguće. Molim kontaktirajte administratora.",
+ "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." : "Veza za resetovanje vaše lozinke poslana je na vašu adresu e-pošte. Ako je ne primite u nekom razumnom vremenskom roku, provjerite svoje spam/junk direktorij. <br> Ako nije tamo, kontaktirajte vašeg lokalnog administratora.",
+ "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 datoteke su šifrirane. Ako niste aktivirali povratni ključ, neećete imati mogućnost povratka vaših podataka nakon što vaša lozinka bude resetovana.<br />Ako niste sigurni šta učiniti, prije nego nastavite, molimo kontaktirajte vašeg administratora. <br />Želite li zaista nastaviti?",
+ "I know what I'm doing" : "Ja znam šta radim",
+ "Password can not be changed. Please contact your administrator." : "Lozinku ne može biti promjenuta. Molimo kontaktirajte vašeg administratora.",
+ "No" : "Ne",
+ "Yes" : "Da",
+ "Choose" : "Izaberite",
+ "Error loading file picker template: {error}" : "Pogrešno učitavanje šablona za izabir datoteke: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Pogrešno učitavanje šablona za poruke: {error}",
+ "read-only" : "samo-čitljivo",
"_{count} file conflict_::_{count} file conflicts_" : ["","",""],
+ "One file conflict" : "Konflikt jedne datoteke",
+ "New Files" : "Nove datoteke",
+ "Already existing files" : "Postojeće datoteke",
+ "Which files do you want to keep?" : "Koje datoteke želite zadržati?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ako odaberete obe verzije, kopirana datoteka će imati broj dodan uz njeno ime.",
+ "Cancel" : "Odustani",
+ "Continue" : "Nastavi",
+ "(all selected)" : "(sve odabrano)",
+ "({count} selected)" : "({count} odabranih)",
+ "Error loading file exists template" : "Pogrešno učitavanje postojece datoteke šablona",
+ "Very weak password" : "Veoma slaba lozinka",
+ "Weak password" : "Slaba lozinka",
+ "So-so password" : "Tu-i-tamo lozinka",
+ "Good password" : "Dobra lozinka",
+ "Strong password" : "Jaka lozinka",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Vaš web server još nije valjano podešen da bi omogućio sinkronizaciju datoteka jer izgleda da je WebDAV sučelje neispravno.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ovaj server nema uspostavljenu internet konekciju. To znači da neke od njegovih funkcija poput spajanje na vanjsku memoriju, obavještavanje o ažuriranju ili instalaciji aplikacija 3će strane neće raditi. Također, možda je onemogućen daljinski pristup datotekama i slanje obavještajne e-pošte. Savjetujemo uspostavljanje internet konekcije za ovaj server u koliko želite sve njegove funkcije.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaš direktorij podataka i vaše datoteke su vjerovatno dostupne s interneta. Datoteka .htaccess ne radi. Strogo vam preporučujemo da vaš web server konfigurišete tako da je pristup direktoriju podataka nemoguć ili čak direktorij podataka premjestite izvan korijenskog/početnog direktorija web servera.",
+ "Error occurred while checking server setup" : "Došlo je do pogreške prilikom provjere serverskih postavki",
+ "Shared" : "Podijeljen",
+ "Shared with {recipients}" : "Podijeljen sa {recipients}",
"Share" : "Podijeli",
+ "Error" : "Greška",
+ "Error while sharing" : "Greška pri dijeljenju",
+ "Error while unsharing" : "Ggreška pri prestanku dijeljenja",
+ "Error while changing permissions" : "Greška pri mijenjanju dozvola",
+ "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}",
+ "Shared with you by {owner}" : "Podijeljeno sa vama od {owner}",
+ "Share with user or group …" : "Podijelite s korisnikom ili grupom ...",
+ "Share link" : "Podijelite vezu",
+ "The public link will expire no later than {days} days after it is created" : "Javna veza ističe najkasnije {days} dana nakon što je kreirana",
+ "Link" : "Veza",
+ "Password protect" : "Zaštitita lozinkom",
+ "Password" : "Lozinka",
+ "Choose a password for the public link" : "Izaberite lozinku za javnu vezu",
+ "Allow editing" : "Dozvolite izmjenu",
+ "Email link to person" : "Pošaljite osobi vezu e-poštom",
+ "Send" : "Pošalji",
+ "Set expiration date" : "Postavite datum isteka",
+ "Expiration" : "Istek",
+ "Expiration date" : "Datum isteka",
+ "Adding user..." : "Dodavanje korisnika...",
+ "group" : "grupa",
+ "remote" : "daljinski",
+ "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno",
+ "Shared in {item} with {user}" : "Podijeljeno u {item} s {user}",
+ "Unshare" : "Prestani dijeliti",
+ "notify by email" : "Obavijesti e-poštom",
+ "can share" : "može dijeliti",
+ "can edit" : "moće mijenjati",
+ "access control" : "Kontrola pristupa",
+ "create" : "kreiraj",
+ "change" : "izmjeni",
+ "delete" : "izbriši",
+ "Password protected" : "Zaštićeno lozinkom",
+ "Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka",
+ "Error setting expiration date" : "Pogrešno postavljanje datuma isteka",
+ "Sending ..." : "Slanje...",
+ "Email sent" : "E-pošta poslana",
+ "Warning" : "Upozorenje",
+ "The object type is not specified." : "Vrsta objekta nije određena.",
+ "Enter new" : "Unesi novi",
+ "Delete" : "Izbriši",
"Add" : "Dodaj",
- "_download %n file_::_download %n files_" : ["","",""]
+ "Edit tags" : "Izmjeni oznake",
+ "Error loading dialog template: {error}" : "Pogrešno učitavanje šablona dijaloga: {error}",
+ "No tags selected for deletion." : "Nema odabranih oznaka za brisanje.",
+ "unknown text" : "nepoznat tekst",
+ "Hello world!" : "Halo svijete!",
+ "sunny" : "sunčan",
+ "Hello {name}, the weather is {weather}" : "Halo {name}, vrijeme je {weather}",
+ "_download %n file_::_download %n files_" : ["","",""],
+ "Updating {productName} to version {version}, this may take a while." : "Ažuriranje {productName} u verziiju {version}, to može potrajati neko vrijeme.",
+ "Please reload the page." : "Molim, ponovno učitajte stranicu",
+ "The update was unsuccessful. " : "Ažuriranje nije uspjelo.",
+ "The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspjelo. Preusmjeravam vas na ownCloud.",
+ "Couldn't reset password because the token is invalid" : "Nemoguće resetiranje lozinke jer znak nije validan.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Slanje emaila resetovanja nije moguće. Osigurajte se da vam je ispravno korisničko ime.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Slanje emaila resetovanja nije moguće jer za ovo korisničko ime ne postoji email adresa. Molim, kontaktirajte administratora.",
+ "%s password reset" : "%s lozinka resetovana",
+ "Use the following link to reset your password: {link}" : "Za resetovanje vaše lozinke koristite slijedeću vezu: {link}",
+ "New password" : "Nova lozinka",
+ "New Password" : "Nova Lozinka",
+ "Reset password" : "Resetuj lozinku",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba. Korištenje na vlastiti rizik!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Umjesto toga, za najbolje rezultate, molimo razmislite o mogućnosti korištenje GNU/Linux servera.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Molim odstranite open_basedir postavku iz vaše php.ini ili prebacite na 64bit PHP.",
+ "Please install the cURL extension and restart your webserver." : "Molim instalirajte cURL proširenje i ponovo pokrenite svoj server.",
+ "Personal" : "Osobno",
+ "Users" : "Korisnici",
+ "Apps" : "Aplikacije",
+ "Admin" : "Admin",
+ "Help" : "Pomoć",
+ "Error loading tags" : "Greška pri učitavanju oznaka",
+ "Tag already exists" : "Oznaka već postoji",
+ "Error deleting tag(s)" : "Greška pri brisanju znaka(ova)",
+ "Error tagging" : "Greška pri označavanju",
+ "Error untagging" : "Greška pri uklanjanju oznaka",
+ "Error favoriting" : "Greška pri dodavanju u favorite",
+ "Error unfavoriting" : "Greška pri uklanjanju iz favorita",
+ "Access forbidden" : "Zabranjen pristup",
+ "File not found" : "Datoteka nije pronađena",
+ "The specified document has not been found on the server." : "Odabran dokument nije pronađen na serveru.",
+ "You can click here to return to %s." : "Možete kliknuti ovdje da bih se vratili na %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej,\n\nsamo da javim da je %s podjelio(la) %s s vama.\nPosjeti: %s\n\n",
+ "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.",
+ "Cheers!" : "Cheers!",
+ "Internal Server Error" : "Unutarnja Server Greška",
+ "More details can be found in the server log." : "Više detalja se mogu naći u server zapisu (log).",
+ "Technical details" : "Tehnički detalji",
+ "Request ID: %s" : "Zahtjevaj ID: %s",
+ "Code: %s" : "Kod (Code): %s",
+ "Message: %s" : "Poruka: %s",
+ "File: %s" : "Datoteka: %s",
+ "Line: %s" : "Red: %s",
+ "Security Warning" : "Sigurnosno Upozorenje",
+ "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Vaša PHP verzija je podložna napadu NULL Byte (CVE-2006-7243)",
+ "Please update your PHP installation to use %s securely." : "Molim aktualizirajte vašu PHP instalaciju da bih sigurno koistili %s.",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaš direktorij podataka i datoteke vjerojatno se mogu pristupiti s interneta jer .htaccess datoteka ne radi.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da valjano konfigurišete vaš server, molim pogledajte <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
+ "Create an <strong>admin account</strong>" : "Kreirajte <strong>administracioni račun</strong>",
+ "Username" : "Korisničko ime",
+ "Storage & database" : "Pohrana & baza podataka",
+ "Data folder" : "Direktorij podataka",
+ "Configure the database" : "Konfigurišite bazu podataka",
+ "Only %s is available." : "Samo %s je dostupno.",
+ "Database user" : "Korisnik baze podataka",
+ "Database password" : "Lozinka baze podataka",
+ "Database name" : "Naziv baze podataka",
+ "Database tablespace" : "Tablespace (?) baze podataka",
+ "Database host" : "Glavno računalo (host) baze podataka",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite će se koristiti kao baza podataka. Za veće instalacije preporučujemo da se to promijeni.",
+ "Finish setup" : "Završite postavke",
+ "Finishing …" : "Završavanje...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ova aplikacija zahtjeva JavaScript za ispravan rad. Molimo <a href=\"http://enable-javascript.com/\" target=\"_blank\"> uključite JavaScript</a> i ponovno učitajte stranicu.",
+ "%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.",
+ "Log out" : "Odjava",
+ "Search" : "Potraži",
+ "Server side authentication failed!" : "Autentikacija na strani servera nije uspjela!",
+ "Please contact your administrator." : "Molim kontaktirajte svog administratora.",
+ "Forgot your password? Reset it!" : "Zaboravili ste svoju lozinku? Resetujte ju!",
+ "remember" : "zapamti",
+ "Log in" : "Prijava",
+ "Alternative Logins" : "Alternativne Prijave",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej, <br><br> upravo vam javljam da je %s s vama podijelio <strong>%s</strong>.<br><a href=\"%s\">Pogledajte!</a><br><br>",
+ "This ownCloud instance is currently in single user mode." : "Ova ownCloud instanca je trenutno u jednokorisničkom načinu rada.",
+ "This means only administrators can use the instance." : "To znači da tu instancu mogu koristiti samo administratori.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktirajte svog administratora sistema ako se ova poruka ponavlja ili se pojavila neočekivano.",
+ "Thank you for your patience." : "Hvala vam na strpljenju",
+ "You are accessing the server from an untrusted domain." : "Pristupate serveru sa nepouzdane domene.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Molim kontaktirajte vašeg administratora. Ako ste vi administrator ove instance, konfigurišite postavku \"trusted_domain\" u config/config.php. Primjer konfiguracije ponuđen je u 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." : "Ovisno o vašoj konfiguraciji, kao administrator vi biste također mogli koristiti dugme ispod za povjeru toj domeni.",
+ "Add \"%s\" as trusted domain" : "Dodajte \"%s\" kao povjerenu/pouzdanu domenu.",
+ "%s will be updated to version %s." : "%s će biti ažuriran u verziju %s",
+ "The following apps will be disabled:" : "Sljedeće aplikacije bit će onemogućene:",
+ "The theme %s has been disabled." : "Tema %s je onemogućena",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Prije nego nastavite, molim osigurajte se da su baza podataka, direktorij konfiguracije i direktorij podataka sigurnosno kopirani.",
+ "Start update" : "Započnite ažuriranje",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Da biste izbjegli vremensko prekoračenje s većim instalacijama, možete pokrenuti slijedeću naredbu iz svoga instalacijskog direktorija:",
+ "This %s instance is currently being updated, which may take a while." : "Instanca %s se trenutno ažurira, što može potrajati.",
+ "This page will refresh itself when the %s instance is available again." : "Ova stranica će se sama aktualizirati nakon što instanca %s postane ponovo dostupna."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
index afa434d3570..ff7f2e78985 100644
--- a/core/l10n/ca.js
+++ b/core/l10n/ca.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"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.",
"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?",
"I know what I'm doing" : "Sé el que faig",
- "Reset password" : "Reinicialitza la contrasenya",
"Password can not be changed. Please contact your administrator." : "La contrasenya no es pot canviar. Contacteu amb l'administrador.",
"No" : "No",
"Yes" : "Sí",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Contrasenya forta",
"Your web server is not yet properly setup to allow files 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.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Aquest servidor no té cap connexió a internet que funcioni. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La carpeta de dades i els vostres fitxersprobablement són accessibles des d'Internet. La 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.",
"Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor",
"Shared" : "Compartit",
"Shared with {recipients}" : "Compartit amb {recipients}",
@@ -79,11 +79,12 @@ OC.L10N.register(
"Share link" : "Enllaç de compartició",
"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",
"Password protect" : "Protegir amb contrasenya",
+ "Password" : "Contrasenya",
"Choose a password for the public link" : "Escolliu una contrasenya per l'enllaç públic",
- "Allow Public Upload" : "Permet pujada pública",
"Email link to person" : "Enllaç per correu electrónic amb la persona",
"Send" : "Envia",
"Set expiration date" : "Estableix la data de venciment",
+ "Expiration" : "Expiració",
"Expiration date" : "Data de venciment",
"Adding user..." : "Afegint usuari...",
"group" : "grup",
@@ -95,7 +96,6 @@ OC.L10N.register(
"can edit" : "pot editar",
"access control" : "control d'accés",
"create" : "crea",
- "update" : "actualitza",
"delete" : "elimina",
"Password protected" : "Protegeix amb contrasenya",
"Error unsetting expiration date" : "Error en eliminar la data de venciment",
@@ -113,20 +113,15 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"Updating {productName} to version {version}, this may take a while." : "Actualitzant {productName} a la versió {version}. Pot trigar una estona.",
"Please reload the page." : "Carregueu la pàgina de nou.",
- "The update was unsuccessful." : "L'actualització no ha tingut èxit.",
"The update was successful. Redirecting you to ownCloud now." : "L'actualització ha estat correcte. Ara us redirigim a ownCloud.",
"Couldn't reset password because the token is invalid" : "No es pot restablir la contrasenya perquè el testimoni no és vàlid",
"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.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar el correu de restabliment perquè no hi ha cap correu electrònic per aquest usuari. Contacteu amb l'administrador.",
"%s password reset" : "restableix la contrasenya %s",
"Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
- "You will receive a link to reset your password via Email." : "Rebreu un enllaç al correu electrònic per reiniciar la contrasenya.",
- "Username" : "Nom d'usuari",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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. Si sabeu què fer, contacteu amb l'administrador abans de continuar. Voleu continuar?",
- "Yes, I really want to reset my password now" : "Sí, vull restablir ara la contrasenya",
- "Reset" : "Estableix de nou",
"New password" : "Contrasenya nova",
"New Password" : "Contrasenya nova",
+ "Reset password" : "Reinicialitza la contrasenya",
"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.",
"Personal" : "Personal",
@@ -161,7 +156,7 @@ OC.L10N.register(
"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.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>",
- "Password" : "Contrasenya",
+ "Username" : "Nom d'usuari",
"Storage & database" : "Emmagatzematge i base de dades",
"Data folder" : "Carpeta de dades",
"Configure the database" : "Configura la base de dades",
@@ -177,6 +172,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Aquesta aplicació requereix JavaScrip pel seu correcte funcionament. Si us plau <a href=\"http://enable-javascript.com/\" target=\"_blank\">Activeu JavaScript</a> i actualitzeu la pàgina.",
"%s is available. Get more information on how to update." : "%s està disponible. Obtingueu més informació de com actualitzar.",
"Log out" : "Surt",
+ "Search" : "Cerca",
"Server side authentication failed!" : "L'autenticació del servidor ha fallat!",
"Please contact your administrator." : "Contacteu amb l'administrador.",
"Forgot your password? Reset it!" : "Heu oblidat la contrasenya? Restabliu-la!",
@@ -188,7 +184,7 @@ OC.L10N.register(
"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.",
- "You are accessing the server from an untrusted domain." : "Esteu accedint el servidor des d'un domini no fiable",
+ "You are accessing the server from an untrusted domain." : "Esteu accedint al servidor des d'un domini no fiable",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contacteu amb l'administrador. Si sou un administrador d'aquesta instància, configureu el paràmetre \"trusted_domain\" a config/config.php. Hi ha un exemple de configuració a config/config.sampe.php",
"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",
diff --git a/core/l10n/ca.json b/core/l10n/ca.json
index c1ea86b4223..5ae065f9c3e 100644
--- a/core/l10n/ca.json
+++ b/core/l10n/ca.json
@@ -37,7 +37,6 @@
"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.",
"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?",
"I know what I'm doing" : "Sé el que faig",
- "Reset password" : "Reinicialitza la contrasenya",
"Password can not be changed. Please contact your administrator." : "La contrasenya no es pot canviar. Contacteu amb l'administrador.",
"No" : "No",
"Yes" : "Sí",
@@ -63,6 +62,7 @@
"Strong password" : "Contrasenya forta",
"Your web server is not yet properly setup to allow files 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.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Aquest servidor no té cap connexió a internet que funcioni. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La carpeta de dades i els vostres fitxersprobablement són accessibles des d'Internet. La 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.",
"Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor",
"Shared" : "Compartit",
"Shared with {recipients}" : "Compartit amb {recipients}",
@@ -77,11 +77,12 @@
"Share link" : "Enllaç de compartició",
"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",
"Password protect" : "Protegir amb contrasenya",
+ "Password" : "Contrasenya",
"Choose a password for the public link" : "Escolliu una contrasenya per l'enllaç públic",
- "Allow Public Upload" : "Permet pujada pública",
"Email link to person" : "Enllaç per correu electrónic amb la persona",
"Send" : "Envia",
"Set expiration date" : "Estableix la data de venciment",
+ "Expiration" : "Expiració",
"Expiration date" : "Data de venciment",
"Adding user..." : "Afegint usuari...",
"group" : "grup",
@@ -93,7 +94,6 @@
"can edit" : "pot editar",
"access control" : "control d'accés",
"create" : "crea",
- "update" : "actualitza",
"delete" : "elimina",
"Password protected" : "Protegeix amb contrasenya",
"Error unsetting expiration date" : "Error en eliminar la data de venciment",
@@ -111,20 +111,15 @@
"_download %n file_::_download %n files_" : ["",""],
"Updating {productName} to version {version}, this may take a while." : "Actualitzant {productName} a la versió {version}. Pot trigar una estona.",
"Please reload the page." : "Carregueu la pàgina de nou.",
- "The update was unsuccessful." : "L'actualització no ha tingut èxit.",
"The update was successful. Redirecting you to ownCloud now." : "L'actualització ha estat correcte. Ara us redirigim a ownCloud.",
"Couldn't reset password because the token is invalid" : "No es pot restablir la contrasenya perquè el testimoni no és vàlid",
"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.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar el correu de restabliment perquè no hi ha cap correu electrònic per aquest usuari. Contacteu amb l'administrador.",
"%s password reset" : "restableix la contrasenya %s",
"Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
- "You will receive a link to reset your password via Email." : "Rebreu un enllaç al correu electrònic per reiniciar la contrasenya.",
- "Username" : "Nom d'usuari",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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. Si sabeu què fer, contacteu amb l'administrador abans de continuar. Voleu continuar?",
- "Yes, I really want to reset my password now" : "Sí, vull restablir ara la contrasenya",
- "Reset" : "Estableix de nou",
"New password" : "Contrasenya nova",
"New Password" : "Contrasenya nova",
+ "Reset password" : "Reinicialitza la contrasenya",
"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.",
"Personal" : "Personal",
@@ -159,7 +154,7 @@
"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.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>",
- "Password" : "Contrasenya",
+ "Username" : "Nom d'usuari",
"Storage & database" : "Emmagatzematge i base de dades",
"Data folder" : "Carpeta de dades",
"Configure the database" : "Configura la base de dades",
@@ -175,6 +170,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Aquesta aplicació requereix JavaScrip pel seu correcte funcionament. Si us plau <a href=\"http://enable-javascript.com/\" target=\"_blank\">Activeu JavaScript</a> i actualitzeu la pàgina.",
"%s is available. Get more information on how to update." : "%s està disponible. Obtingueu més informació de com actualitzar.",
"Log out" : "Surt",
+ "Search" : "Cerca",
"Server side authentication failed!" : "L'autenticació del servidor ha fallat!",
"Please contact your administrator." : "Contacteu amb l'administrador.",
"Forgot your password? Reset it!" : "Heu oblidat la contrasenya? Restabliu-la!",
@@ -186,7 +182,7 @@
"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.",
- "You are accessing the server from an untrusted domain." : "Esteu accedint el servidor des d'un domini no fiable",
+ "You are accessing the server from an untrusted domain." : "Esteu accedint al servidor des d'un domini no fiable",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contacteu amb l'administrador. Si sou un administrador d'aquesta instància, configureu el paràmetre \"trusted_domain\" a config/config.php. Hi ha un exemple de configuració a config/config.sampe.php",
"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",
diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js
index c9aed4a7c45..52d28459e4f 100644
--- a/core/l10n/cs_CZ.js
+++ b/core/l10n/cs_CZ.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"core",
{
- "Couldn't send mail to following users: %s " : "Nebylo možné odeslat e-mail následujícím uživatelům: %s",
+ "Couldn't send mail to following users: %s " : "Nebylo možné odeslat email následujícím uživatelům: %s",
"Turned on maintenance mode" : "Zapnut režim údržby",
"Turned off maintenance mode" : "Vypnut režim údržby",
"Updated database" : "Zaktualizována databáze",
@@ -35,18 +35,18 @@ OC.L10N.register(
"December" : "Prosinec",
"Settings" : "Nastavení",
"Saving..." : "Ukládám...",
- "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte vašeho administrátora.",
- "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 e-mailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého administrátora.",
- "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.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého administrátora než budete pokračovat. <br />Opravdu si přejete pokračovat?",
+ "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte svého správce systému.",
+ "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 složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
- "Reset password" : "Obnovit heslo",
- "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého administrátora.",
+ "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
"Yes" : "Ano",
"Choose" : "Vybrat",
"Error loading file picker template: {error}" : "Chyba při nahrávání šablony výběru souborů: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Chyba při nahrávání šablony zprávy: {error}",
+ "read-only" : "pouze ke čtení",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} souborový konflikt","{count} souborové konflikty","{count} souborových konfliktů"],
"One file conflict" : "Jeden konflikt souboru",
"New Files" : "Nové soubory",
@@ -64,7 +64,8 @@ OC.L10N.register(
"Good password" : "Dobré heslo",
"Strong password" : "Silné heslo",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Váš webový server není správně nastaven pro umožnění synchronizace, rozhraní WebDAV se zdá být rozbité.",
- "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "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 e-mailů také nemusí fungovat. Pokud si přejete využívat všech vlastností ownCloud, doporučujeme povolit připojení k internetu tomuto serveru.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "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 si přejete využívat všech vlastností ownCloud, doporučujeme povolit připojení k internetu tomuto serveru.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
"Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě",
"Shared" : "Sdílené",
"Shared with {recipients}" : "Sdíleno s {recipients}",
@@ -78,30 +79,34 @@ OC.L10N.register(
"Share with user or group …" : "Sdílet s uživatelem nebo skupinou",
"Share link" : "Sdílet odkaz",
"The public link will expire no later than {days} days after it is created" : "Veřejný odkaz vyprší nejpozději {days} dní od svého vytvoření",
+ "Link" : "Odkaz",
"Password protect" : "Chránit heslem",
+ "Password" : "Heslo",
"Choose a password for the public link" : "Zadej heslo pro tento veřejný odkaz",
- "Allow Public Upload" : "Povolit veřejné nahrávání",
- "Email link to person" : "Odeslat osobě odkaz e-mailem",
+ "Allow editing" : "Povolit úpravy",
+ "Email link to person" : "Odeslat osobě odkaz emailem",
"Send" : "Odeslat",
"Set expiration date" : "Nastavit datum vypršení platnosti",
+ "Expiration" : "Konec platnosti",
"Expiration date" : "Datum vypršení platnosti",
"Adding user..." : "Přidávám uživatele...",
"group" : "skupina",
+ "remote" : "vzdálený",
"Resharing is not allowed" : "Sdílení již sdílené položky není povoleno",
"Shared in {item} with {user}" : "Sdíleno v {item} s {user}",
"Unshare" : "Zrušit sdílení",
- "notify by email" : "upozornit e-mailem",
+ "notify by email" : "upozornit emailem",
"can share" : "může sdílet",
"can edit" : "lze upravovat",
"access control" : "řízení přístupu",
"create" : "vytvořit",
- "update" : "aktualizovat",
+ "change" : "změnit",
"delete" : "smazat",
"Password protected" : "Chráněno heslem",
"Error unsetting expiration date" : "Chyba při odstraňování data vypršení platnosti",
"Error setting expiration date" : "Chyba při nastavení data vypršení platnosti",
"Sending ..." : "Odesílám ...",
- "Email sent" : "E-mail odeslán",
+ "Email sent" : "Email odeslán",
"Warning" : "Varování",
"The object type is not specified." : "Není určen typ objektu.",
"Enter new" : "Zadat nový",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Zdravím, světe!",
"sunny" : "slunečno",
"Hello {name}, the weather is {weather}" : "Ahoj {name}, je {weather}",
+ "Hello {name}" : "Vítej, {name}",
"_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"],
"Updating {productName} to version {version}, this may take a while." : "Aktualizuji {productName} na verzi {version}, může to chvíli trvat.",
"Please reload the page." : "Načtěte stránku znovu, prosím.",
- "The update was unsuccessful." : "Aktualizace nebyla úspěšná.",
+ "The update was unsuccessful. " : "Aktualizace nebyla úspěšná.",
"The update was successful. Redirecting you to ownCloud now." : "Aktualizace byla úspěšná. Přesměrovávám na ownCloud.",
"Couldn't reset password because the token is invalid" : "Heslo nebylo změněno kvůli neplatnému tokenu",
"Couldn't send reset email. Please make sure your username is correct." : "Nelze odeslat email pro změnu hesla. Ujistěte se prosím, že zadáváte správné uživatelské jméno.",
- "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena e-mailová adresa. Kontaktujte prosím svého administrátora.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena emailová adresa. Kontaktujte prosím svého správce systému.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
- "You will receive a link to reset your password via Email." : "E-mailem Vám bude zaslán odkaz pro obnovu hesla.",
- "Username" : "Uživatelské jméno",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud nemáte povolen klíč pro obnovu, neexistuje způsob jak získat, po změně hesla, vaše data. Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce. Opravdu si přejete pokračovat?",
- "Yes, I really want to reset my password now" : "Ano, opravdu si nyní přeji obnovit mé heslo",
- "Reset" : "Restartovat složku",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovit heslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!",
"For the best results, please consider using a GNU/Linux server instead." : "Místo toho zvažte pro nejlepší funkčnost použití GNU/Linux serveru.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Vypadá to, že tato %s instance běží v 32-bitovém PHP prostředí a byl nakonfigurován open_basedir v php.ini. Toto povede k problémům se soubory většími než 4GB a zásadně není doporučováno.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Odstraňte prosím open_basedir nastavení ve svém php.ini nebo přejděte na 64-bitové PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Vypadá to, že tato %s instance běží v 32-bitovém PHP prostředí a není nainstalováno cURL. Toto povede k problémům se soubory většími než 4GB a zásadně není doporučováno.",
+ "Please install the cURL extension and restart your webserver." : "Nainstalujte prosím cURL rozšíření a restartujte webový server.",
"Personal" : "Osobní",
"Users" : "Uživatelé",
"Apps" : "Aplikace",
@@ -154,7 +160,7 @@ OC.L10N.register(
"Cheers!" : "Ať slouží!",
"Internal Server Error" : "Vnitřní chyba serveru",
"The server encountered an internal error and was unable to complete your request." : "Server zaznamenal interní chybu a nebyl schopen dokončit váš požadavek.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím administrátora serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím správce serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
"More details can be found in the server log." : "Více podrobností k nalezení v serverovém logu.",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.",
"Create an <strong>admin account</strong>" : "Vytvořit <strong>účet správce</strong>",
- "Password" : "Heslo",
+ "Username" : "Uživatelské jméno",
"Storage & database" : "Úložiště & databáze",
"Data folder" : "Složka s daty",
"Configure the database" : "Nastavit databázi",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">povolte JavaScript</a> a znovu načtěte stránku.",
"%s is available. Get more information on how to update." : "%s je dostupná. Získejte více informací k postupu aktualizace.",
"Log out" : "Odhlásit se",
+ "Search" : "Hledat",
"Server side authentication failed!" : "Autentizace na serveru selhala!",
"Please contact your administrator." : "Kontaktujte prosím vašeho správce.",
"Forgot your password? Reset it!" : "Zapomenuté heslo? Nastavte si nové!",
@@ -195,11 +202,11 @@ OC.L10N.register(
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej ty,<br><br>jen ti dávám vědět, že %s sdílí <strong>%s</strong> s tebou.<br><a href=\"%s\">Zobrazit!</a><br><br>",
"This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.",
"This means only administrators can use the instance." : "To znamená, že pouze správci systému mohou aplikaci používat.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte, prosím, správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
- "Thank you for your patience." : "Děkuji za trpělivost.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
+ "Thank you for your patience." : "Děkujeme za vaši trpělivost.",
"You are accessing the server from an untrusted domain." : "Přistupujete na server z nedůvěryhodné domény.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Kontaktujte prosím správce. Pokud jste správce této instalace, nastavte \"trusted_domain\" v souboru config/config.php. Příklad konfigurace najdete v souboru 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." : "V závislosti na vaší konfiguraci vám může být, jako administrátorovi, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako správci, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
"Add \"%s\" as trusted domain" : "Přidat \"%s\" jako důvěryhodnou doménu",
"%s will be updated to version %s." : "%s bude aktualizován na verzi %s.",
"The following apps will be disabled:" : "Následující aplikace budou zakázány:",
@@ -207,7 +214,7 @@ OC.L10N.register(
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Před provedením dalšího kroku se prosím ujistěte, že databáze a konfigurační a datový adresář byly zazálohovány. ",
"Start update" : "Spustit aktualizaci",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Abyste zabránili vypršení časového limitu u větších instalací, můžete namísto toho spustit následující příkaz v hlavním adresáři:",
- "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována a to může chvíli trvat.",
+ "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována. Mějte chvíli strpení.",
"This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json
index 67250ae52e7..25b0aefad5e 100644
--- a/core/l10n/cs_CZ.json
+++ b/core/l10n/cs_CZ.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Couldn't send mail to following users: %s " : "Nebylo možné odeslat e-mail následujícím uživatelům: %s",
+ "Couldn't send mail to following users: %s " : "Nebylo možné odeslat email následujícím uživatelům: %s",
"Turned on maintenance mode" : "Zapnut režim údržby",
"Turned off maintenance mode" : "Vypnut režim údržby",
"Updated database" : "Zaktualizována databáze",
@@ -33,18 +33,18 @@
"December" : "Prosinec",
"Settings" : "Nastavení",
"Saving..." : "Ukládám...",
- "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte vašeho administrátora.",
- "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 e-mailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého administrátora.",
- "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.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého administrátora než budete pokračovat. <br />Opravdu si přejete pokračovat?",
+ "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte svého správce systému.",
+ "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 složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
- "Reset password" : "Obnovit heslo",
- "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého administrátora.",
+ "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
"Yes" : "Ano",
"Choose" : "Vybrat",
"Error loading file picker template: {error}" : "Chyba při nahrávání šablony výběru souborů: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Chyba při nahrávání šablony zprávy: {error}",
+ "read-only" : "pouze ke čtení",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} souborový konflikt","{count} souborové konflikty","{count} souborových konfliktů"],
"One file conflict" : "Jeden konflikt souboru",
"New Files" : "Nové soubory",
@@ -62,7 +62,8 @@
"Good password" : "Dobré heslo",
"Strong password" : "Silné heslo",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Váš webový server není správně nastaven pro umožnění synchronizace, rozhraní WebDAV se zdá být rozbité.",
- "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "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 e-mailů také nemusí fungovat. Pokud si přejete využívat všech vlastností ownCloud, doporučujeme povolit připojení k internetu tomuto serveru.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "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 si přejete využívat všech vlastností ownCloud, doporučujeme povolit připojení k internetu tomuto serveru.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
"Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě",
"Shared" : "Sdílené",
"Shared with {recipients}" : "Sdíleno s {recipients}",
@@ -76,30 +77,34 @@
"Share with user or group …" : "Sdílet s uživatelem nebo skupinou",
"Share link" : "Sdílet odkaz",
"The public link will expire no later than {days} days after it is created" : "Veřejný odkaz vyprší nejpozději {days} dní od svého vytvoření",
+ "Link" : "Odkaz",
"Password protect" : "Chránit heslem",
+ "Password" : "Heslo",
"Choose a password for the public link" : "Zadej heslo pro tento veřejný odkaz",
- "Allow Public Upload" : "Povolit veřejné nahrávání",
- "Email link to person" : "Odeslat osobě odkaz e-mailem",
+ "Allow editing" : "Povolit úpravy",
+ "Email link to person" : "Odeslat osobě odkaz emailem",
"Send" : "Odeslat",
"Set expiration date" : "Nastavit datum vypršení platnosti",
+ "Expiration" : "Konec platnosti",
"Expiration date" : "Datum vypršení platnosti",
"Adding user..." : "Přidávám uživatele...",
"group" : "skupina",
+ "remote" : "vzdálený",
"Resharing is not allowed" : "Sdílení již sdílené položky není povoleno",
"Shared in {item} with {user}" : "Sdíleno v {item} s {user}",
"Unshare" : "Zrušit sdílení",
- "notify by email" : "upozornit e-mailem",
+ "notify by email" : "upozornit emailem",
"can share" : "může sdílet",
"can edit" : "lze upravovat",
"access control" : "řízení přístupu",
"create" : "vytvořit",
- "update" : "aktualizovat",
+ "change" : "změnit",
"delete" : "smazat",
"Password protected" : "Chráněno heslem",
"Error unsetting expiration date" : "Chyba při odstraňování data vypršení platnosti",
"Error setting expiration date" : "Chyba při nastavení data vypršení platnosti",
"Sending ..." : "Odesílám ...",
- "Email sent" : "E-mail odeslán",
+ "Email sent" : "Email odeslán",
"Warning" : "Varování",
"The object type is not specified." : "Není určen typ objektu.",
"Enter new" : "Zadat nový",
@@ -112,25 +117,26 @@
"Hello world!" : "Zdravím, světe!",
"sunny" : "slunečno",
"Hello {name}, the weather is {weather}" : "Ahoj {name}, je {weather}",
+ "Hello {name}" : "Vítej, {name}",
"_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"],
"Updating {productName} to version {version}, this may take a while." : "Aktualizuji {productName} na verzi {version}, může to chvíli trvat.",
"Please reload the page." : "Načtěte stránku znovu, prosím.",
- "The update was unsuccessful." : "Aktualizace nebyla úspěšná.",
+ "The update was unsuccessful. " : "Aktualizace nebyla úspěšná.",
"The update was successful. Redirecting you to ownCloud now." : "Aktualizace byla úspěšná. Přesměrovávám na ownCloud.",
"Couldn't reset password because the token is invalid" : "Heslo nebylo změněno kvůli neplatnému tokenu",
"Couldn't send reset email. Please make sure your username is correct." : "Nelze odeslat email pro změnu hesla. Ujistěte se prosím, že zadáváte správné uživatelské jméno.",
- "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena e-mailová adresa. Kontaktujte prosím svého administrátora.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena emailová adresa. Kontaktujte prosím svého správce systému.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
- "You will receive a link to reset your password via Email." : "E-mailem Vám bude zaslán odkaz pro obnovu hesla.",
- "Username" : "Uživatelské jméno",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud nemáte povolen klíč pro obnovu, neexistuje způsob jak získat, po změně hesla, vaše data. Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce. Opravdu si přejete pokračovat?",
- "Yes, I really want to reset my password now" : "Ano, opravdu si nyní přeji obnovit mé heslo",
- "Reset" : "Restartovat složku",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovit heslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!",
"For the best results, please consider using a GNU/Linux server instead." : "Místo toho zvažte pro nejlepší funkčnost použití GNU/Linux serveru.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Vypadá to, že tato %s instance běží v 32-bitovém PHP prostředí a byl nakonfigurován open_basedir v php.ini. Toto povede k problémům se soubory většími než 4GB a zásadně není doporučováno.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Odstraňte prosím open_basedir nastavení ve svém php.ini nebo přejděte na 64-bitové PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Vypadá to, že tato %s instance běží v 32-bitovém PHP prostředí a není nainstalováno cURL. Toto povede k problémům se soubory většími než 4GB a zásadně není doporučováno.",
+ "Please install the cURL extension and restart your webserver." : "Nainstalujte prosím cURL rozšíření a restartujte webový server.",
"Personal" : "Osobní",
"Users" : "Uživatelé",
"Apps" : "Aplikace",
@@ -152,7 +158,7 @@
"Cheers!" : "Ať slouží!",
"Internal Server Error" : "Vnitřní chyba serveru",
"The server encountered an internal error and was unable to complete your request." : "Server zaznamenal interní chybu a nebyl schopen dokončit váš požadavek.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím administrátora serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím správce serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
"More details can be found in the server log." : "Více podrobností k nalezení v serverovém logu.",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.",
"Create an <strong>admin account</strong>" : "Vytvořit <strong>účet správce</strong>",
- "Password" : "Heslo",
+ "Username" : "Uživatelské jméno",
"Storage & database" : "Úložiště & databáze",
"Data folder" : "Složka s daty",
"Configure the database" : "Nastavit databázi",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">povolte JavaScript</a> a znovu načtěte stránku.",
"%s is available. Get more information on how to update." : "%s je dostupná. Získejte více informací k postupu aktualizace.",
"Log out" : "Odhlásit se",
+ "Search" : "Hledat",
"Server side authentication failed!" : "Autentizace na serveru selhala!",
"Please contact your administrator." : "Kontaktujte prosím vašeho správce.",
"Forgot your password? Reset it!" : "Zapomenuté heslo? Nastavte si nové!",
@@ -193,11 +200,11 @@
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej ty,<br><br>jen ti dávám vědět, že %s sdílí <strong>%s</strong> s tebou.<br><a href=\"%s\">Zobrazit!</a><br><br>",
"This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.",
"This means only administrators can use the instance." : "To znamená, že pouze správci systému mohou aplikaci používat.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte, prosím, správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
- "Thank you for your patience." : "Děkuji za trpělivost.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
+ "Thank you for your patience." : "Děkujeme za vaši trpělivost.",
"You are accessing the server from an untrusted domain." : "Přistupujete na server z nedůvěryhodné domény.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Kontaktujte prosím správce. Pokud jste správce této instalace, nastavte \"trusted_domain\" v souboru config/config.php. Příklad konfigurace najdete v souboru 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." : "V závislosti na vaší konfiguraci vám může být, jako administrátorovi, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako správci, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
"Add \"%s\" as trusted domain" : "Přidat \"%s\" jako důvěryhodnou doménu",
"%s will be updated to version %s." : "%s bude aktualizován na verzi %s.",
"The following apps will be disabled:" : "Následující aplikace budou zakázány:",
@@ -205,7 +212,7 @@
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Před provedením dalšího kroku se prosím ujistěte, že databáze a konfigurační a datový adresář byly zazálohovány. ",
"Start update" : "Spustit aktualizaci",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Abyste zabránili vypršení časového limitu u větších instalací, můžete namísto toho spustit následující příkaz v hlavním adresáři:",
- "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována a to může chvíli trvat.",
+ "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována. Mějte chvíli strpení.",
"This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/cy_GB.js b/core/l10n/cy_GB.js
index b5fbab1efb6..b2424b615a2 100644
--- a/core/l10n/cy_GB.js
+++ b/core/l10n/cy_GB.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Rhagfyr",
"Settings" : "Gosodiadau",
"Saving..." : "Yn cadw...",
- "Reset password" : "Ailosod cyfrinair",
"No" : "Na",
"Yes" : "Ie",
"Choose" : "Dewisiwch",
@@ -39,6 +38,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "Rhannwyd â chi a'r grŵp {group} gan {owner}",
"Shared with you by {owner}" : "Rhannwyd â chi gan {owner}",
"Password protect" : "Diogelu cyfrinair",
+ "Password" : "Cyfrinair",
"Email link to person" : "E-bostio dolen at berson",
"Send" : "Anfon",
"Set expiration date" : "Gosod dyddiad dod i ben",
@@ -50,7 +50,6 @@ OC.L10N.register(
"can edit" : "yn gallu golygu",
"access control" : "rheolaeth mynediad",
"create" : "creu",
- "update" : "diweddaru",
"delete" : "dileu",
"Password protected" : "Diogelwyd â chyfrinair",
"Error unsetting expiration date" : "Gwall wrth ddad-osod dyddiad dod i ben",
@@ -64,9 +63,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["","","",""],
"The update was successful. Redirecting you to ownCloud now." : "Roedd y diweddariad yn llwyddiannus. Cewch eich ailgyfeirio i ownCloud nawr.",
"Use the following link to reset your password: {link}" : "Defnyddiwch y ddolen hon i ailosod eich cyfrinair: {link}",
- "You will receive a link to reset your password via Email." : "Byddwch yn derbyn dolen drwy e-bost i ailosod eich cyfrinair.",
- "Username" : "Enw defnyddiwr",
"New password" : "Cyfrinair newydd",
+ "Reset password" : "Ailosod cyfrinair",
"Personal" : "Personol",
"Users" : "Defnyddwyr",
"Apps" : "Pecynnau",
@@ -77,7 +75,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Mae eich fersiwn PHP yn agored i ymosodiad NULL Byte (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ",
"Create an <strong>admin account</strong>" : "Crewch <strong>gyfrif gweinyddol</strong>",
- "Password" : "Cyfrinair",
+ "Username" : "Enw defnyddiwr",
"Data folder" : "Plygell data",
"Configure the database" : "Cyflunio'r gronfa ddata",
"Database user" : "Defnyddiwr cronfa ddata",
@@ -88,6 +86,7 @@ OC.L10N.register(
"Finish setup" : "Gorffen sefydlu",
"%s is available. Get more information on how to update." : "%s ar gael. Mwy o wybodaeth am sut i ddiweddaru.",
"Log out" : "Allgofnodi",
+ "Search" : "Chwilio",
"remember" : "cofio",
"Log in" : "Mewngofnodi",
"Alternative Logins" : "Mewngofnodiadau Amgen"
diff --git a/core/l10n/cy_GB.json b/core/l10n/cy_GB.json
index c3749e52468..84ac0db0350 100644
--- a/core/l10n/cy_GB.json
+++ b/core/l10n/cy_GB.json
@@ -20,7 +20,6 @@
"December" : "Rhagfyr",
"Settings" : "Gosodiadau",
"Saving..." : "Yn cadw...",
- "Reset password" : "Ailosod cyfrinair",
"No" : "Na",
"Yes" : "Ie",
"Choose" : "Dewisiwch",
@@ -37,6 +36,7 @@
"Shared with you and the group {group} by {owner}" : "Rhannwyd â chi a'r grŵp {group} gan {owner}",
"Shared with you by {owner}" : "Rhannwyd â chi gan {owner}",
"Password protect" : "Diogelu cyfrinair",
+ "Password" : "Cyfrinair",
"Email link to person" : "E-bostio dolen at berson",
"Send" : "Anfon",
"Set expiration date" : "Gosod dyddiad dod i ben",
@@ -48,7 +48,6 @@
"can edit" : "yn gallu golygu",
"access control" : "rheolaeth mynediad",
"create" : "creu",
- "update" : "diweddaru",
"delete" : "dileu",
"Password protected" : "Diogelwyd â chyfrinair",
"Error unsetting expiration date" : "Gwall wrth ddad-osod dyddiad dod i ben",
@@ -62,9 +61,8 @@
"_download %n file_::_download %n files_" : ["","","",""],
"The update was successful. Redirecting you to ownCloud now." : "Roedd y diweddariad yn llwyddiannus. Cewch eich ailgyfeirio i ownCloud nawr.",
"Use the following link to reset your password: {link}" : "Defnyddiwch y ddolen hon i ailosod eich cyfrinair: {link}",
- "You will receive a link to reset your password via Email." : "Byddwch yn derbyn dolen drwy e-bost i ailosod eich cyfrinair.",
- "Username" : "Enw defnyddiwr",
"New password" : "Cyfrinair newydd",
+ "Reset password" : "Ailosod cyfrinair",
"Personal" : "Personol",
"Users" : "Defnyddwyr",
"Apps" : "Pecynnau",
@@ -75,7 +73,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Mae eich fersiwn PHP yn agored i ymosodiad NULL Byte (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ",
"Create an <strong>admin account</strong>" : "Crewch <strong>gyfrif gweinyddol</strong>",
- "Password" : "Cyfrinair",
+ "Username" : "Enw defnyddiwr",
"Data folder" : "Plygell data",
"Configure the database" : "Cyflunio'r gronfa ddata",
"Database user" : "Defnyddiwr cronfa ddata",
@@ -86,6 +84,7 @@
"Finish setup" : "Gorffen sefydlu",
"%s is available. Get more information on how to update." : "%s ar gael. Mwy o wybodaeth am sut i ddiweddaru.",
"Log out" : "Allgofnodi",
+ "Search" : "Chwilio",
"remember" : "cofio",
"Log in" : "Mewngofnodi",
"Alternative Logins" : "Mewngofnodiadau Amgen"
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 64bd64582a7..a414f0cf930 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"I know what I'm doing" : "Jeg ved, hvad jeg har gang i",
- "Reset password" : "Nulstil kodeord",
"Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.",
"No" : "Nej",
"Yes" : "Ja",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Fejl ved indlæsning af filvælger skabelon: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Fejl ved indlæsning af besked skabelon: {error}",
+ "read-only" : "skrivebeskyttet",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
"One file conflict" : "En filkonflikt",
"New Files" : "Nye filer",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Stærkt kodeord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat op til at tillade fil synkronisering fordi WebDAV grænsefladen virker ødelagt.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Denne ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af 3.-parts applikationer ikke fungerer. Det vil sandsynligvis heller ikke fungere at tilgå filer fra eksterne drev eller informations-e-mails. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver så data mappen ikke længere er tilgængelig, eller at du flytter data mappen uden for webserverens dokument rod. ",
"Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Del med bruger eller gruppe ...",
"Share link" : "Del link",
"The public link will expire no later than {days} days after it is created" : "Det offentlige link udløber senest {days} dage efter det blev oprettet",
+ "Link" : "Link",
"Password protect" : "Beskyt med adgangskode",
+ "Password" : "Adgangskode",
"Choose a password for the public link" : "Vælg et kodeord til det offentlige link",
- "Allow Public Upload" : "Tillad Offentlig Upload",
+ "Allow editing" : "Tillad redigering",
"Email link to person" : "E-mail link til person",
"Send" : "Send",
"Set expiration date" : "Vælg udløbsdato",
+ "Expiration" : "Udløb",
"Expiration date" : "Udløbsdato",
"Adding user..." : "Tilføjer bruger...",
"group" : "gruppe",
+ "remote" : "ekstern",
"Resharing is not allowed" : "Videredeling ikke tilladt",
"Shared in {item} with {user}" : "Delt i {item} med {user}",
"Unshare" : "Fjern deling",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "kan redigere",
"access control" : "Adgangskontrol",
"create" : "opret",
- "update" : "opdater",
+ "change" : "tilpas",
"delete" : "slet",
"Password protected" : "Beskyttet med adgangskode",
"Error unsetting expiration date" : "Fejl ved fjernelse af udløbsdato",
@@ -107,51 +112,52 @@ OC.L10N.register(
"Enter new" : "Indtast nyt",
"Delete" : "Slet",
"Add" : "Tilføj",
- "Edit tags" : "Rediger tags",
+ "Edit tags" : "Redigér mærker",
"Error loading dialog template: {error}" : "Fejl ved indlæsning dialog skabelon: {error}",
- "No tags selected for deletion." : "Ingen tags markeret til sletning.",
+ "No tags selected for deletion." : "Ingen mærker markeret til sletning.",
"unknown text" : "ukendt tekst",
"Hello world!" : "Hej verden!",
"sunny" : "solrigt",
"Hello {name}, the weather is {weather}" : "Hej {name}, vejret er {weather}",
+ "Hello {name}" : "Hej {name}",
"_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"],
"Updating {productName} to version {version}, this may take a while." : "Opdaterer {productName} til version {version}, det kan tage et stykke tid.",
"Please reload the page." : "Genindlæs venligst siden",
- "The update was unsuccessful." : "Opdateringen mislykkedes.",
+ "The update was unsuccessful. " : "Opdateringen blev ikke gennemført.",
"The update was successful. Redirecting you to ownCloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til ownCloud.",
"Couldn't reset password because the token is invalid" : "Kunne ikke nulstille kodeordet, fordi symboludtrykket er ugyldigt",
"Couldn't send reset email. Please make sure your username is correct." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Kontroller venligst om dit brugernavnet er korrekt",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Der ikke er nogen email adresse tilknyttet denne bruger konto. Kontakt venligst systemadministratoren",
"%s password reset" : "%s adgangskode nulstillet",
"Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
- "You will receive a link to reset your password via Email." : "Du vil modtage et link til at nulstille dit kodeord via e-mail.",
- "Username" : "Brugernavn",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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. HVis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter. Vil du fortsætte?",
- "Yes, I really want to reset my password now" : "Ja, Jeg ønsker virkelig at nulstille mit kodeord",
- "Reset" : "Nulstil",
- "New password" : "Nyt kodeord",
+ "New password" : "Ny adgangskode",
"New Password" : "Ny adgangskode",
+ "Reset password" : "Nulstil kodeord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X understøttes ikke og %s vil ikke virke optimalt på denne platform. Anvend på eget ansvar!",
"For the best results, please consider using a GNU/Linux server instead." : "For de bedste resultater, overvej venligst at bruge en GNU/Linux-server i stedet.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø og at open_basedir er blevet konfigureret gennem php.ini. Dette vil føre til problemer som er større end 4GB og frarådes stærkt.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Fjern venligst indstillingen for open_basedir inde i din php.ini eller skift til 64-bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø og cURL er ikke installeret. Dette vil føre til problemer som er større end 4GB og frarådes stærkt.",
+ "Please install the cURL extension and restart your webserver." : "Installér venligst cURL-udvidelsen og genstart din webserver.",
"Personal" : "Personligt",
"Users" : "Brugere",
"Apps" : "Apps",
"Admin" : "Admin",
"Help" : "Hjælp",
- "Error loading tags" : "Fejl ved indlæsning af tags",
- "Tag already exists" : "Tag eksistere allerede",
- "Error deleting tag(s)" : "Fejl ved sletning af tag(s)",
- "Error tagging" : "Fejl ved tagging",
- "Error untagging" : "Fejl ved fjernelse af tag",
+ "Error loading tags" : "Fejl ved indlæsning af mærker",
+ "Tag already exists" : "Mærket eksisterer allerede",
+ "Error deleting tag(s)" : "Fejl ved sletning af mærke(r)",
+ "Error tagging" : "Fejl ved opmærkning",
+ "Error untagging" : "Fejl ved fjernelse af opmærkning",
"Error favoriting" : "Fejl ved favoritering",
"Error unfavoriting" : "Fejl ved fjernelse af favorisering.",
"Access forbidden" : "Adgang forbudt",
"File not found" : "Filen blev ikke fundet",
"The specified document has not been found on the server." : "Det angivne dokument blev ikke fundet på serveren.",
"You can click here to return to %s." : "Du kan klikke her for at gå tilbage til %s.",
- "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej med dig\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\nSe det her: %s\n\n",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\n\nSe det her: %s\n\n",
"The share will expire on %s." : "Delingen vil udløbe om %s.",
- "Cheers!" : "Hej!",
+ "Cheers!" : "Hav en fortsat god dag.",
"Internal Server Error" : "Intern serverfejl",
"The server encountered an internal error and was unable to complete your request." : "Servern stødte på en intern fejl og var ikke i stand til at fuldføre din forespørgsel.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt venligst serveradministratoren, hvis denne fejl gentager sig flere gange - medtag venligst de tekniske detaljer nedenfor i din rapport.",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dine data mappe og filer er sandsynligvis tilgængelige fra internettet fordi .htaccess filen ikke virker.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information om, hvordan du konfigurerer din server korrekt se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Opret en <strong>administratorkonto</strong>",
- "Password" : "Adgangskode",
+ "Username" : "Brugernavn",
"Storage & database" : "Lager & database",
"Data folder" : "Datamappe",
"Configure the database" : "Konfigurer databasen",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Applikationen kræver JavaScript for at fungere korrekt. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Slå venligst JavaScript til</a> og genindlæs siden.",
"%s is available. Get more information on how to update." : "%s er tilgængelig. Få mere information om, hvordan du opdaterer.",
"Log out" : "Log ud",
+ "Search" : "Søg",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator",
"Forgot your password? Reset it!" : "Glemt din adgangskode? Nulstil det!",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index ed40172a698..385bb51e7ad 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"I know what I'm doing" : "Jeg ved, hvad jeg har gang i",
- "Reset password" : "Nulstil kodeord",
"Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.",
"No" : "Nej",
"Yes" : "Ja",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Fejl ved indlæsning af filvælger skabelon: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Fejl ved indlæsning af besked skabelon: {error}",
+ "read-only" : "skrivebeskyttet",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
"One file conflict" : "En filkonflikt",
"New Files" : "Nye filer",
@@ -63,6 +63,7 @@
"Strong password" : "Stærkt kodeord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat op til at tillade fil synkronisering fordi WebDAV grænsefladen virker ødelagt.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Denne ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af 3.-parts applikationer ikke fungerer. Det vil sandsynligvis heller ikke fungere at tilgå filer fra eksterne drev eller informations-e-mails. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver så data mappen ikke længere er tilgængelig, eller at du flytter data mappen uden for webserverens dokument rod. ",
"Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Del med bruger eller gruppe ...",
"Share link" : "Del link",
"The public link will expire no later than {days} days after it is created" : "Det offentlige link udløber senest {days} dage efter det blev oprettet",
+ "Link" : "Link",
"Password protect" : "Beskyt med adgangskode",
+ "Password" : "Adgangskode",
"Choose a password for the public link" : "Vælg et kodeord til det offentlige link",
- "Allow Public Upload" : "Tillad Offentlig Upload",
+ "Allow editing" : "Tillad redigering",
"Email link to person" : "E-mail link til person",
"Send" : "Send",
"Set expiration date" : "Vælg udløbsdato",
+ "Expiration" : "Udløb",
"Expiration date" : "Udløbsdato",
"Adding user..." : "Tilføjer bruger...",
"group" : "gruppe",
+ "remote" : "ekstern",
"Resharing is not allowed" : "Videredeling ikke tilladt",
"Shared in {item} with {user}" : "Delt i {item} med {user}",
"Unshare" : "Fjern deling",
@@ -93,7 +98,7 @@
"can edit" : "kan redigere",
"access control" : "Adgangskontrol",
"create" : "opret",
- "update" : "opdater",
+ "change" : "tilpas",
"delete" : "slet",
"Password protected" : "Beskyttet med adgangskode",
"Error unsetting expiration date" : "Fejl ved fjernelse af udløbsdato",
@@ -105,51 +110,52 @@
"Enter new" : "Indtast nyt",
"Delete" : "Slet",
"Add" : "Tilføj",
- "Edit tags" : "Rediger tags",
+ "Edit tags" : "Redigér mærker",
"Error loading dialog template: {error}" : "Fejl ved indlæsning dialog skabelon: {error}",
- "No tags selected for deletion." : "Ingen tags markeret til sletning.",
+ "No tags selected for deletion." : "Ingen mærker markeret til sletning.",
"unknown text" : "ukendt tekst",
"Hello world!" : "Hej verden!",
"sunny" : "solrigt",
"Hello {name}, the weather is {weather}" : "Hej {name}, vejret er {weather}",
+ "Hello {name}" : "Hej {name}",
"_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"],
"Updating {productName} to version {version}, this may take a while." : "Opdaterer {productName} til version {version}, det kan tage et stykke tid.",
"Please reload the page." : "Genindlæs venligst siden",
- "The update was unsuccessful." : "Opdateringen mislykkedes.",
+ "The update was unsuccessful. " : "Opdateringen blev ikke gennemført.",
"The update was successful. Redirecting you to ownCloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til ownCloud.",
"Couldn't reset password because the token is invalid" : "Kunne ikke nulstille kodeordet, fordi symboludtrykket er ugyldigt",
"Couldn't send reset email. Please make sure your username is correct." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Kontroller venligst om dit brugernavnet er korrekt",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Der ikke er nogen email adresse tilknyttet denne bruger konto. Kontakt venligst systemadministratoren",
"%s password reset" : "%s adgangskode nulstillet",
"Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
- "You will receive a link to reset your password via Email." : "Du vil modtage et link til at nulstille dit kodeord via e-mail.",
- "Username" : "Brugernavn",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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. HVis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter. Vil du fortsætte?",
- "Yes, I really want to reset my password now" : "Ja, Jeg ønsker virkelig at nulstille mit kodeord",
- "Reset" : "Nulstil",
- "New password" : "Nyt kodeord",
+ "New password" : "Ny adgangskode",
"New Password" : "Ny adgangskode",
+ "Reset password" : "Nulstil kodeord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X understøttes ikke og %s vil ikke virke optimalt på denne platform. Anvend på eget ansvar!",
"For the best results, please consider using a GNU/Linux server instead." : "For de bedste resultater, overvej venligst at bruge en GNU/Linux-server i stedet.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø og at open_basedir er blevet konfigureret gennem php.ini. Dette vil føre til problemer som er større end 4GB og frarådes stærkt.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Fjern venligst indstillingen for open_basedir inde i din php.ini eller skift til 64-bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø og cURL er ikke installeret. Dette vil føre til problemer som er større end 4GB og frarådes stærkt.",
+ "Please install the cURL extension and restart your webserver." : "Installér venligst cURL-udvidelsen og genstart din webserver.",
"Personal" : "Personligt",
"Users" : "Brugere",
"Apps" : "Apps",
"Admin" : "Admin",
"Help" : "Hjælp",
- "Error loading tags" : "Fejl ved indlæsning af tags",
- "Tag already exists" : "Tag eksistere allerede",
- "Error deleting tag(s)" : "Fejl ved sletning af tag(s)",
- "Error tagging" : "Fejl ved tagging",
- "Error untagging" : "Fejl ved fjernelse af tag",
+ "Error loading tags" : "Fejl ved indlæsning af mærker",
+ "Tag already exists" : "Mærket eksisterer allerede",
+ "Error deleting tag(s)" : "Fejl ved sletning af mærke(r)",
+ "Error tagging" : "Fejl ved opmærkning",
+ "Error untagging" : "Fejl ved fjernelse af opmærkning",
"Error favoriting" : "Fejl ved favoritering",
"Error unfavoriting" : "Fejl ved fjernelse af favorisering.",
"Access forbidden" : "Adgang forbudt",
"File not found" : "Filen blev ikke fundet",
"The specified document has not been found on the server." : "Det angivne dokument blev ikke fundet på serveren.",
"You can click here to return to %s." : "Du kan klikke her for at gå tilbage til %s.",
- "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej med dig\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\nSe det her: %s\n\n",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\n\nSe det her: %s\n\n",
"The share will expire on %s." : "Delingen vil udløbe om %s.",
- "Cheers!" : "Hej!",
+ "Cheers!" : "Hav en fortsat god dag.",
"Internal Server Error" : "Intern serverfejl",
"The server encountered an internal error and was unable to complete your request." : "Servern stødte på en intern fejl og var ikke i stand til at fuldføre din forespørgsel.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt venligst serveradministratoren, hvis denne fejl gentager sig flere gange - medtag venligst de tekniske detaljer nedenfor i din rapport.",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dine data mappe og filer er sandsynligvis tilgængelige fra internettet fordi .htaccess filen ikke virker.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information om, hvordan du konfigurerer din server korrekt se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Opret en <strong>administratorkonto</strong>",
- "Password" : "Adgangskode",
+ "Username" : "Brugernavn",
"Storage & database" : "Lager & database",
"Data folder" : "Datamappe",
"Configure the database" : "Konfigurer databasen",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Applikationen kræver JavaScript for at fungere korrekt. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Slå venligst JavaScript til</a> og genindlæs siden.",
"%s is available. Get more information on how to update." : "%s er tilgængelig. Få mere information om, hvordan du opdaterer.",
"Log out" : "Log ud",
+ "Search" : "Søg",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator",
"Forgot your password? Reset it!" : "Glemt din adgangskode? Nulstil det!",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 1258cf40251..6d0d1a7e8df 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen Deines Passwort ist an Deine E-Mail-Adresse geschickt worden. Wenn Du ihn nicht innerhalb einer vernünftigen Zeit empfängst, prüfe Deine Spam-Verzeichnisse.<br>Wenn er nicht dort ist, frage Deinen lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Sollten Sie keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Ihre Daten zu kommen, wenn das Passwort zurückgesetzt wird.<br />Falls Sie sich nicht sicher sind, was Sie tun sollen, kontaktieren Sie bitte Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere Deinen Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Fehler beim Laden der Dateiauswahlvorlage: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Fehler beim Laden der Nachrichtenvorlage: {error}",
+ "read-only" : "Schreibgeschützt",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} Dateikonflikt","{count} Dateikonflikte"],
"One file conflict" : "Ein Dateikonflikt",
"New Files" : "Neue Dateien",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 z.B. das Einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren, wenn Sie alle Funktionen nutzen wollen.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Dein Datenverzeichnis und deine Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten dir dringend, dass du deinen Webserver dahingehend konfigurierst, dass dein Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder du verschiebst das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"Shared" : "Geteilt",
"Shared with {recipients}" : "Geteilt mit {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Mit Benutzer oder Gruppe teilen ....",
"Share link" : "Link Teilen",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens nach {days} Tagen, nach Erstellung, ablaufen",
+ "Link" : "Link",
"Password protect" : "Passwortschutz",
+ "Password" : "Passwort",
"Choose a password for the public link" : "Wählen Sie ein Passwort für den öffentlichen Link",
- "Allow Public Upload" : "Öffentliches Hochladen erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
"Set expiration date" : "Setze ein Ablaufdatum",
+ "Expiration" : "Ablaufdatum",
"Expiration date" : "Ablaufdatum",
"Adding user..." : "Benutzer wird hinzugefügt …",
"group" : "Gruppe",
+ "remote" : "Entfernte Freigabe",
"Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt",
"Shared in {item} with {user}" : "Für {user} in {item} freigegeben",
"Unshare" : "Freigabe aufheben",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "kann bearbeiten",
"access control" : "Zugriffskontrolle",
"create" : "erstellen",
- "update" : "aktualisieren",
+ "change" : "Ändern",
"delete" : "löschen",
"Password protected" : "Durch ein Passwort geschützt",
"Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Hallo Welt!",
"sunny" : "Sonnig",
"Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}",
+ "Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
"Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.",
"Please reload the page." : "Bitte lade diese Seite neu.",
- "The update was unsuccessful." : "Die Aktualisierung war erfolgreich.",
+ "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.",
"The update was successful. Redirecting you to ownCloud now." : "Das Update war erfolgreich. Du wirst nun zu ownCloud weitergeleitet.",
"Couldn't reset password because the token is invalid" : "Aufgrund eines ungültigen Tokens kann das Passwort nicht zurück gesetzt werden",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Stelle sicher, dass Dein Nutzername korrekt ist.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "E-Mail zum Zurücksetzen kann Aufgrund einer nicht vorhandenen E-Mail Adresse für diesen Nutzernamen nicht versendet werden. Bitte kontaktiere Deinen Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutze den nachfolgenden Link, um Dein Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du erhältst einen Link per E-Mail, um Dein Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest Du keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Deine Daten zu kommen, wenn das Passwort zurückgesetzt wird. Falls Du Dir nicht sicher bist, was Du tun sollst, kontaktiere bitte Deinen Administrator, bevor Du fortfährst. Willst Du wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich will mein Passwort jetzt zurücksetzen",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht korrekt funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und die open_basedir wurde in der php.ini konfiguriert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Bitte entferne die open_basedir - Einstellung in Deiner php.ini oder wechsle zum 64Bit-PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und cURL ist nicht installiert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please install the cURL extension and restart your webserver." : "Bitte installiere die cURL-Erweiterung und starte den Webserver neu.",
"Personal" : "Persönlich",
"Users" : "Benutzer",
"Apps" : "Apps",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Für Informationen, wie Du Deinen Server richtig konfigurierst, lies bitte die <a href=\"%s\" target=\"_blank\">Dokumentation</a>.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
- "Password" : "Passwort",
+ "Username" : "Benutzername",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
"Configure the database" : "Datenbank einrichten",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Diese Anwendung benötigt ein aktiviertes JavaScript zum korrekten Betrieb. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktiviere JavaScript</a> und lade diese Seite neu.",
"%s is available. Get more information on how to update." : "%s ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.",
"Log out" : "Abmelden",
+ "Search" : "Suche",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
"Please contact your administrator." : "Bitte kontaktiere Deinen Administrator.",
"Forgot your password? Reset it!" : "Passwort vergessen? Setze es zurück!",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 09a77d2ee9a..cfd583fbc0c 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen Deines Passwort ist an Deine E-Mail-Adresse geschickt worden. Wenn Du ihn nicht innerhalb einer vernünftigen Zeit empfängst, prüfe Deine Spam-Verzeichnisse.<br>Wenn er nicht dort ist, frage Deinen lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Sollten Sie keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Ihre Daten zu kommen, wenn das Passwort zurückgesetzt wird.<br />Falls Sie sich nicht sicher sind, was Sie tun sollen, kontaktieren Sie bitte Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere Deinen Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Fehler beim Laden der Dateiauswahlvorlage: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Fehler beim Laden der Nachrichtenvorlage: {error}",
+ "read-only" : "Schreibgeschützt",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} Dateikonflikt","{count} Dateikonflikte"],
"One file conflict" : "Ein Dateikonflikt",
"New Files" : "Neue Dateien",
@@ -63,6 +63,7 @@
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 z.B. das Einbinden von externen Speichern, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Senden von Benachrichtigungsmails funktioniert eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren, wenn Sie alle Funktionen nutzen wollen.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Dein Datenverzeichnis und deine Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten dir dringend, dass du deinen Webserver dahingehend konfigurierst, dass dein Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder du verschiebst das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"Shared" : "Geteilt",
"Shared with {recipients}" : "Geteilt mit {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Mit Benutzer oder Gruppe teilen ....",
"Share link" : "Link Teilen",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens nach {days} Tagen, nach Erstellung, ablaufen",
+ "Link" : "Link",
"Password protect" : "Passwortschutz",
+ "Password" : "Passwort",
"Choose a password for the public link" : "Wählen Sie ein Passwort für den öffentlichen Link",
- "Allow Public Upload" : "Öffentliches Hochladen erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
"Set expiration date" : "Setze ein Ablaufdatum",
+ "Expiration" : "Ablaufdatum",
"Expiration date" : "Ablaufdatum",
"Adding user..." : "Benutzer wird hinzugefügt …",
"group" : "Gruppe",
+ "remote" : "Entfernte Freigabe",
"Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt",
"Shared in {item} with {user}" : "Für {user} in {item} freigegeben",
"Unshare" : "Freigabe aufheben",
@@ -93,7 +98,7 @@
"can edit" : "kann bearbeiten",
"access control" : "Zugriffskontrolle",
"create" : "erstellen",
- "update" : "aktualisieren",
+ "change" : "Ändern",
"delete" : "löschen",
"Password protected" : "Durch ein Passwort geschützt",
"Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums",
@@ -112,25 +117,26 @@
"Hello world!" : "Hallo Welt!",
"sunny" : "Sonnig",
"Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}",
+ "Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
"Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.",
"Please reload the page." : "Bitte lade diese Seite neu.",
- "The update was unsuccessful." : "Die Aktualisierung war erfolgreich.",
+ "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.",
"The update was successful. Redirecting you to ownCloud now." : "Das Update war erfolgreich. Du wirst nun zu ownCloud weitergeleitet.",
"Couldn't reset password because the token is invalid" : "Aufgrund eines ungültigen Tokens kann das Passwort nicht zurück gesetzt werden",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Stelle sicher, dass Dein Nutzername korrekt ist.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "E-Mail zum Zurücksetzen kann Aufgrund einer nicht vorhandenen E-Mail Adresse für diesen Nutzernamen nicht versendet werden. Bitte kontaktiere Deinen Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutze den nachfolgenden Link, um Dein Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du erhältst einen Link per E-Mail, um Dein Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest Du keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Deine Daten zu kommen, wenn das Passwort zurückgesetzt wird. Falls Du Dir nicht sicher bist, was Du tun sollst, kontaktiere bitte Deinen Administrator, bevor Du fortfährst. Willst Du wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich will mein Passwort jetzt zurücksetzen",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht korrekt funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und die open_basedir wurde in der php.ini konfiguriert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Bitte entferne die open_basedir - Einstellung in Deiner php.ini oder wechsle zum 64Bit-PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und cURL ist nicht installiert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please install the cURL extension and restart your webserver." : "Bitte installiere die cURL-Erweiterung und starte den Webserver neu.",
"Personal" : "Persönlich",
"Users" : "Benutzer",
"Apps" : "Apps",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Für Informationen, wie Du Deinen Server richtig konfigurierst, lies bitte die <a href=\"%s\" target=\"_blank\">Dokumentation</a>.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
- "Password" : "Passwort",
+ "Username" : "Benutzername",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
"Configure the database" : "Datenbank einrichten",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Diese Anwendung benötigt ein aktiviertes JavaScript zum korrekten Betrieb. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktiviere JavaScript</a> und lade diese Seite neu.",
"%s is available. Get more information on how to update." : "%s ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.",
"Log out" : "Abmelden",
+ "Search" : "Suche",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
"Please contact your administrator." : "Bitte kontaktiere Deinen Administrator.",
"Forgot your password? Reset it!" : "Passwort vergessen? Setze es zurück!",
diff --git a/core/l10n/de_AT.js b/core/l10n/de_AT.js
index 7ffe692029e..fc8b8553f92 100644
--- a/core/l10n/de_AT.js
+++ b/core/l10n/de_AT.js
@@ -26,6 +26,7 @@ OC.L10N.register(
"Continue" : "Weiter",
"Share" : "Freigeben",
"Error" : "Fehler",
+ "Password" : "Passwort",
"group" : "Gruppe",
"Unshare" : "Teilung zurücknehmen",
"can share" : "Kann teilen",
@@ -33,7 +34,6 @@ OC.L10N.register(
"Delete" : "Löschen",
"_download %n file_::_download %n files_" : ["",""],
"Personal" : "Persönlich",
- "Help" : "Hilfe",
- "Password" : "Passwort"
+ "Help" : "Hilfe"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/de_AT.json b/core/l10n/de_AT.json
index f82fc259f5a..1bcfc336622 100644
--- a/core/l10n/de_AT.json
+++ b/core/l10n/de_AT.json
@@ -24,6 +24,7 @@
"Continue" : "Weiter",
"Share" : "Freigeben",
"Error" : "Fehler",
+ "Password" : "Passwort",
"group" : "Gruppe",
"Unshare" : "Teilung zurücknehmen",
"can share" : "Kann teilen",
@@ -31,7 +32,6 @@
"Delete" : "Löschen",
"_download %n file_::_download %n files_" : ["",""],
"Personal" : "Persönlich",
- "Help" : "Hilfe",
- "Password" : "Passwort"
+ "Help" : "Hilfe"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 017ecd1c4fa..9ba90643477 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link, zum Zurücksetzen Ihres Passwortes, ist an Ihre E-Mail-Adresse geschickt worden. Wenn Sie ihn nicht innerhalb einer vernünftigen Zeit empfangen, überprüfen Sie bitte Ihre Spam-Ordner.<br>Wenn sie nicht dort ist, fragen Sie bitte Ihren lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Fehler beim Laden der Dateiauswahlvorlage: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Fehler beim Laden der Nachrichtenvorlage: {error}",
+ "read-only" : "Schreibgeschützt",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} Dateikonflikt","{count} Dateikonflikte"],
"One file conflict" : "Ein Dateikonflikt",
"New Files" : "Neue Dateien",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ihr Internetserver ist noch nicht richtig konfiguriert, um Dateisynchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dieses bedeutet, dass einige Funktionen wie z.B. das Einbinden von externen Speichern, Aktualisierungsbenachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Versenden von E-Mail-Benachrichtigungen funktionieren eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren, wenn Sie alle Funktionen benutzen wollen.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ihr Datenverzeichnis und Ihre Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis außerhalb des Wurzelverzeichnisses des Webservers.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"Shared" : "Geteilt",
"Shared with {recipients}" : "Geteilt mit {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Mit Benutzer oder Gruppe teilen …",
"Share link" : "Link teilen",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens nach {days} Tagen, nach Erstellung, ablaufen",
+ "Link" : "Link",
"Password protect" : "Passwortschutz",
+ "Password" : "Passwort",
"Choose a password for the public link" : "Wählen Sie ein Passwort für den öffentlichen Link",
- "Allow Public Upload" : "Öffentliches Hochladen erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
"Set expiration date" : "Ein Ablaufdatum setzen",
+ "Expiration" : "Ablaufdatum",
"Expiration date" : "Ablaufdatum",
"Adding user..." : "Benutzer wird hinzugefügt …",
"group" : "Gruppe",
+ "remote" : "Entfernte Freigabe",
"Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt",
"Shared in {item} with {user}" : "Freigegeben in {item} von {user}",
"Unshare" : "Freigabe aufheben",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "kann bearbeiten",
"access control" : "Zugriffskontrolle",
"create" : "erstellen",
- "update" : "aktualisieren",
+ "change" : "Ändern",
"delete" : "löschen",
"Password protected" : "Passwortgeschützt",
"Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Hallo Welt!",
"sunny" : "Sonnig",
"Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}",
+ "Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
"Updating {productName} to version {version}, this may take a while." : "{productName} wird auf Version {version} aktualisiert. Das könnte eine Weile dauern.",
"Please reload the page." : "Bitte laden Sie diese Seite neu.",
- "The update was unsuccessful." : "Die Aktualisierung war erfolgreich.",
+ "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.",
"The update was successful. Redirecting you to ownCloud now." : "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.",
"Couldn't reset password because the token is invalid" : "Aufgrund eines ungültigen Tokens kann das Passwort nicht zurück gesetzt werden",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stellen Sie sicher, dass Ihr Benutzername richtig ist.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Die E-Mail, zum Zurücksetzen, kann Aufgrund einer nicht vorhandenen E-Mail-Adresse, für diesen Benutzernamen, nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Sie erhalten einen Link per E-Mail, um Ihr Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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 wiederzubekommen, nachdem Ihr Passwort zurückgesetzt wurde. Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren. Wollen Sie wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich möchte jetzt mein Passwort wirklich zurücksetzen.",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht richtig funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und die open_basedir wurde in der php.ini konfiguriert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Bitte entfernen Sie die open_basedir - Einstellung in Ihrer php.ini oder wechseln Sie zum 64Bit-PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und cURL ist nicht installiert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please install the cURL extension and restart your webserver." : "Bitte installieren Sie die cURL-Erweiterung und starten Sie den Webserver neu.",
"Personal" : "Persönlich",
"Users" : "Benutzer",
"Apps" : "Apps",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bitte lesen Sie die <a href=\"%s\" target=\"_blank\">Dokumentation</a>, um zu erfahren, wie Sie Ihren Server richtig konfigurieren können.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
- "Password" : "Passwort",
+ "Username" : "Benutzername",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
"Configure the database" : "Datenbank einrichten",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Diese Anwendung benötigt ein aktiviertes JavaScript, um richtig zu funktionieren. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivieren Sie JavaScript</a> und laden Sie diese Seite neu.",
"%s is available. Get more information on how to update." : "%s ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.",
"Log out" : "Abmelden",
+ "Search" : "Suche",
"Server side authentication failed!" : "Die Legitimierung auf dem Server ist fehlgeschlagen!",
"Please contact your administrator." : "Bitte kontaktieren Sie Ihren Administrator.",
"Forgot your password? Reset it!" : "Passwort vergessen? Zurückstellen!",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index d6d0c73a777..a9043c0b627 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link, zum Zurücksetzen Ihres Passwortes, ist an Ihre E-Mail-Adresse geschickt worden. Wenn Sie ihn nicht innerhalb einer vernünftigen Zeit empfangen, überprüfen Sie bitte Ihre Spam-Ordner.<br>Wenn sie nicht dort ist, fragen Sie bitte Ihren lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Fehler beim Laden der Dateiauswahlvorlage: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Fehler beim Laden der Nachrichtenvorlage: {error}",
+ "read-only" : "Schreibgeschützt",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} Dateikonflikt","{count} Dateikonflikte"],
"One file conflict" : "Ein Dateikonflikt",
"New Files" : "Neue Dateien",
@@ -63,6 +63,7 @@
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ihr Internetserver ist noch nicht richtig konfiguriert, um Dateisynchronisation zu erlauben, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dieses bedeutet, dass einige Funktionen wie z.B. das Einbinden von externen Speichern, Aktualisierungsbenachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Fernzugriff auf Dateien und das Versenden von E-Mail-Benachrichtigungen funktionieren eventuell ebenfalls nicht. Wir empfehlen die Internetverbindung für diesen Server zu aktivieren, wenn Sie alle Funktionen benutzen wollen.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ihr Datenverzeichnis und Ihre Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis außerhalb des Wurzelverzeichnisses des Webservers.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"Shared" : "Geteilt",
"Shared with {recipients}" : "Geteilt mit {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Mit Benutzer oder Gruppe teilen …",
"Share link" : "Link teilen",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens nach {days} Tagen, nach Erstellung, ablaufen",
+ "Link" : "Link",
"Password protect" : "Passwortschutz",
+ "Password" : "Passwort",
"Choose a password for the public link" : "Wählen Sie ein Passwort für den öffentlichen Link",
- "Allow Public Upload" : "Öffentliches Hochladen erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
"Set expiration date" : "Ein Ablaufdatum setzen",
+ "Expiration" : "Ablaufdatum",
"Expiration date" : "Ablaufdatum",
"Adding user..." : "Benutzer wird hinzugefügt …",
"group" : "Gruppe",
+ "remote" : "Entfernte Freigabe",
"Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt",
"Shared in {item} with {user}" : "Freigegeben in {item} von {user}",
"Unshare" : "Freigabe aufheben",
@@ -93,7 +98,7 @@
"can edit" : "kann bearbeiten",
"access control" : "Zugriffskontrolle",
"create" : "erstellen",
- "update" : "aktualisieren",
+ "change" : "Ändern",
"delete" : "löschen",
"Password protected" : "Passwortgeschützt",
"Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums",
@@ -112,25 +117,26 @@
"Hello world!" : "Hallo Welt!",
"sunny" : "Sonnig",
"Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}",
+ "Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
"Updating {productName} to version {version}, this may take a while." : "{productName} wird auf Version {version} aktualisiert. Das könnte eine Weile dauern.",
"Please reload the page." : "Bitte laden Sie diese Seite neu.",
- "The update was unsuccessful." : "Die Aktualisierung war erfolgreich.",
+ "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.",
"The update was successful. Redirecting you to ownCloud now." : "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.",
"Couldn't reset password because the token is invalid" : "Aufgrund eines ungültigen Tokens kann das Passwort nicht zurück gesetzt werden",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stellen Sie sicher, dass Ihr Benutzername richtig ist.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Die E-Mail, zum Zurücksetzen, kann Aufgrund einer nicht vorhandenen E-Mail-Adresse, für diesen Benutzernamen, nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Sie erhalten einen Link per E-Mail, um Ihr Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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 wiederzubekommen, nachdem Ihr Passwort zurückgesetzt wurde. Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren. Wollen Sie wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich möchte jetzt mein Passwort wirklich zurücksetzen.",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht richtig funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und die open_basedir wurde in der php.ini konfiguriert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Bitte entfernen Sie die open_basedir - Einstellung in Ihrer php.ini oder wechseln Sie zum 64Bit-PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Es scheint, dass die %s - Instanz unter einer 32Bit PHP-Umgebung läuft und cURL ist nicht installiert. Dies führt zu Problemen mit Dateien über 4 GB und wird dringend abgeraten.",
+ "Please install the cURL extension and restart your webserver." : "Bitte installieren Sie die cURL-Erweiterung und starten Sie den Webserver neu.",
"Personal" : "Persönlich",
"Users" : "Benutzer",
"Apps" : "Apps",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bitte lesen Sie die <a href=\"%s\" target=\"_blank\">Dokumentation</a>, um zu erfahren, wie Sie Ihren Server richtig konfigurieren können.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
- "Password" : "Passwort",
+ "Username" : "Benutzername",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
"Configure the database" : "Datenbank einrichten",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Diese Anwendung benötigt ein aktiviertes JavaScript, um richtig zu funktionieren. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivieren Sie JavaScript</a> und laden Sie diese Seite neu.",
"%s is available. Get more information on how to update." : "%s ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.",
"Log out" : "Abmelden",
+ "Search" : "Suche",
"Server side authentication failed!" : "Die Legitimierung auf dem Server ist fehlgeschlagen!",
"Please contact your administrator." : "Bitte kontaktieren Sie Ihren Administrator.",
"Forgot your password? Reset it!" : "Passwort vergessen? Zurückstellen!",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index 9d54904faa6..1b9248d64eb 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του κωδικού πρόσβασής σας απεστάλη στο ηλ. ταχυδρομείο σας. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br>Εάν δεν βρίσκεται εκεί ρωτήστε τον τοπικό διαχειριστή σας.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
- "Reset password" : "Επαναφορά συνθηματικού",
"Password can not be changed. Please contact your administrator." : "Ο κωδικός πρόσβασης δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"No" : "Όχι",
"Yes" : "Ναι",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Σφάλμα κατά την φόρτωση προτύπου επιλογέα αρχείων: {σφάλμα}",
"Ok" : "Οκ",
"Error loading message template: {error}" : "Σφάλμα φόρτωσης προτύπου μηνυμάτων: {σφάλμα}",
+ "read-only" : "μόνο για ανάγνωση",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} αρχείο διαφέρει","{count} αρχεία διαφέρουν"],
"One file conflict" : "Ένα αρχείο διαφέρει",
"New Files" : "Νέα Αρχεία",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Δυνατό συνθηματικό",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει ενεργή σύνδεση στο διαδίκτυο. Αυτό σημαίνει ότι κάποιες υπηρεσίες όπως η σύνδεση με εξωτερικούς αποθηκευτικούς χώρους, ειδοποιήσεις περί ενημερώσεων ή η εγκατάσταση 3ων εφαρμογών δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν δουλεύει. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων έξω από τη ρίζα του καταλόγου του διακομιστή.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή",
"Shared" : "Κοινόχρηστα",
"Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
@@ -78,15 +79,18 @@ OC.L10N.register(
"Share with user or group …" : "Διαμοιρασμός με χρήστη ή ομάδα ...",
"Share link" : "Διαμοιρασμός συνδέσμου",
"The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του",
+ "Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Password" : "Συνθηματικό",
"Choose a password for the public link" : "Επιλέξτε κωδικό για τον δημόσιο σύνδεσμο",
- "Allow Public Upload" : "Επιτρέπεται η Δημόσια Αποστολή",
"Email link to person" : "Αποστολή συνδέσμου με email ",
"Send" : "Αποστολή",
"Set expiration date" : "Ορισμός ημ. λήξης",
+ "Expiration" : "Λήξη",
"Expiration date" : "Ημερομηνία λήξης",
"Adding user..." : "Προσθήκη χρήστη ...",
"group" : "ομάδα",
+ "remote" : "απομακρυσμένα",
"Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται",
"Shared in {item} with {user}" : "Διαμοιρασμός του {item} με τον {user}",
"Unshare" : "Διακοπή διαμοιρασμού",
@@ -95,7 +99,7 @@ OC.L10N.register(
"can edit" : "δυνατότητα αλλαγής",
"access control" : "έλεγχος πρόσβασης",
"create" : "δημιουργία",
- "update" : "ενημέρωση",
+ "change" : "αλλαγή",
"delete" : "διαγραφή",
"Password protected" : "Προστασία με συνθηματικό",
"Error unsetting expiration date" : "Σφάλμα κατά την διαγραφή της ημ. λήξης",
@@ -110,25 +114,25 @@ OC.L10N.register(
"Edit tags" : "Επεξεργασία ετικετών",
"Error loading dialog template: {error}" : "Σφάλμα φόρτωσης προτύπου διαλόγων: {σφάλμα}",
"No tags selected for deletion." : "Καμμία ετικέτα δεν επιλέχθηκε για διαγραφή.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "άγνωστο κείμενο",
+ "sunny" : "ηλιόλουστη",
+ "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}",
+ "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
"Updating {productName} to version {version}, this may take a while." : "Ενημέρωση του {productName} στην έκδοση {version}, αυτό μπορεί να διαρκέσει λίγη ώρα.",
"Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
- "The update was unsuccessful." : "Η ενημέρωση δεν ήταν επιτυχής.",
+ "The update was unsuccessful. " : "Η ενημέρωση δεν ήταν επιτυχής.",
"The update was successful. Redirecting you to ownCloud now." : "Η ενημέρωση ήταν επιτυχής. Μετάβαση στο ownCloud.",
"Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το τεκμήριο είναι άκυρο",
"Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς καθώς δεν αντιστοιχεί καμμία διεύθυνση ηλ. ταχυδρομείου σε αυτό το όνομα χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"%s password reset" : "%s επαναφορά κωδικού πρόσβασης",
"Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}",
- "You will receive a link to reset your password via Email." : "Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας μέσω ηλεκτρονικού ταχυδρομείου.",
- "Username" : "Όνομα χρήστη",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί ανάκτησης, δεν υπάρχει περίπτωση να έχετε πρόσβαση στα δεδομένα σας μετά την επαναφορά του συνθηματικού. Εάν δεν είστε σίγουροι τι να κάνετε, παρακαλώ επικοινωνήστε με τον διαχειριστή πριν συνεχίσετε. Θέλετε να συνεχίσετε;",
- "Yes, I really want to reset my password now" : "Ναι, θέλω να επαναφέρω το συνθηματικό μου τώρα.",
- "Reset" : "Επαναφορά",
"New password" : "Νέο συνθηματικό",
"New Password" : "Νέος Κωδικός",
+ "Reset password" : "Επαναφορά συνθηματικού",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!",
"For the best results, please consider using a GNU/Linux server instead." : "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux.",
+ "Please install the cURL extension and restart your webserver." : "Παρακαλώ εγκαταστήστε το πρόσθετο cURL και επανεκκινήστε τον διακομιστή σας.",
"Personal" : "Προσωπικά",
"Users" : "Χρήστες",
"Apps" : "Εφαρμογές",
@@ -166,7 +170,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την <a href=\"%s\" target=\"_blank\">τεκμηρίωση</a>.",
"Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>",
- "Password" : "Συνθηματικό",
+ "Username" : "Όνομα χρήστη",
"Storage & database" : "Αποθήκευση & βάση δεδομένων",
"Data folder" : "Φάκελος δεδομένων",
"Configure the database" : "Ρύθμιση της βάσης δεδομένων",
@@ -182,6 +186,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για τη σωστή λειτουργία. Παρακαλώ <a href=\"http://enable-javascript.com/\" target=\"_blank\">ενεργοποιήστε τη JavaScript</a> και επαναφορτώστε τη σελίδα.",
"%s is available. Get more information on how to update." : "%s είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες στο πώς να αναβαθμίσετε.",
"Log out" : "Αποσύνδεση",
+ "Search" : "Αναζήτηση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"Forgot your password? Reset it!" : "Ξεχάσατε τον κωδικό πρόσβασής σας; Επαναφέρετέ τον!",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 259ad682028..3b61d5bbd07 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του κωδικού πρόσβασής σας απεστάλη στο ηλ. ταχυδρομείο σας. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br>Εάν δεν βρίσκεται εκεί ρωτήστε τον τοπικό διαχειριστή σας.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
- "Reset password" : "Επαναφορά συνθηματικού",
"Password can not be changed. Please contact your administrator." : "Ο κωδικός πρόσβασης δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"No" : "Όχι",
"Yes" : "Ναι",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Σφάλμα κατά την φόρτωση προτύπου επιλογέα αρχείων: {σφάλμα}",
"Ok" : "Οκ",
"Error loading message template: {error}" : "Σφάλμα φόρτωσης προτύπου μηνυμάτων: {σφάλμα}",
+ "read-only" : "μόνο για ανάγνωση",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} αρχείο διαφέρει","{count} αρχεία διαφέρουν"],
"One file conflict" : "Ένα αρχείο διαφέρει",
"New Files" : "Νέα Αρχεία",
@@ -63,6 +63,7 @@
"Strong password" : "Δυνατό συνθηματικό",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει ενεργή σύνδεση στο διαδίκτυο. Αυτό σημαίνει ότι κάποιες υπηρεσίες όπως η σύνδεση με εξωτερικούς αποθηκευτικούς χώρους, ειδοποιήσεις περί ενημερώσεων ή η εγκατάσταση 3ων εφαρμογών δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν δουλεύει. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων έξω από τη ρίζα του καταλόγου του διακομιστή.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή",
"Shared" : "Κοινόχρηστα",
"Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
@@ -76,15 +77,18 @@
"Share with user or group …" : "Διαμοιρασμός με χρήστη ή ομάδα ...",
"Share link" : "Διαμοιρασμός συνδέσμου",
"The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του",
+ "Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Password" : "Συνθηματικό",
"Choose a password for the public link" : "Επιλέξτε κωδικό για τον δημόσιο σύνδεσμο",
- "Allow Public Upload" : "Επιτρέπεται η Δημόσια Αποστολή",
"Email link to person" : "Αποστολή συνδέσμου με email ",
"Send" : "Αποστολή",
"Set expiration date" : "Ορισμός ημ. λήξης",
+ "Expiration" : "Λήξη",
"Expiration date" : "Ημερομηνία λήξης",
"Adding user..." : "Προσθήκη χρήστη ...",
"group" : "ομάδα",
+ "remote" : "απομακρυσμένα",
"Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται",
"Shared in {item} with {user}" : "Διαμοιρασμός του {item} με τον {user}",
"Unshare" : "Διακοπή διαμοιρασμού",
@@ -93,7 +97,7 @@
"can edit" : "δυνατότητα αλλαγής",
"access control" : "έλεγχος πρόσβασης",
"create" : "δημιουργία",
- "update" : "ενημέρωση",
+ "change" : "αλλαγή",
"delete" : "διαγραφή",
"Password protected" : "Προστασία με συνθηματικό",
"Error unsetting expiration date" : "Σφάλμα κατά την διαγραφή της ημ. λήξης",
@@ -108,25 +112,25 @@
"Edit tags" : "Επεξεργασία ετικετών",
"Error loading dialog template: {error}" : "Σφάλμα φόρτωσης προτύπου διαλόγων: {σφάλμα}",
"No tags selected for deletion." : "Καμμία ετικέτα δεν επιλέχθηκε για διαγραφή.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "άγνωστο κείμενο",
+ "sunny" : "ηλιόλουστη",
+ "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}",
+ "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
"Updating {productName} to version {version}, this may take a while." : "Ενημέρωση του {productName} στην έκδοση {version}, αυτό μπορεί να διαρκέσει λίγη ώρα.",
"Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
- "The update was unsuccessful." : "Η ενημέρωση δεν ήταν επιτυχής.",
+ "The update was unsuccessful. " : "Η ενημέρωση δεν ήταν επιτυχής.",
"The update was successful. Redirecting you to ownCloud now." : "Η ενημέρωση ήταν επιτυχής. Μετάβαση στο ownCloud.",
"Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το τεκμήριο είναι άκυρο",
"Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς καθώς δεν αντιστοιχεί καμμία διεύθυνση ηλ. ταχυδρομείου σε αυτό το όνομα χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"%s password reset" : "%s επαναφορά κωδικού πρόσβασης",
"Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}",
- "You will receive a link to reset your password via Email." : "Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας μέσω ηλεκτρονικού ταχυδρομείου.",
- "Username" : "Όνομα χρήστη",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί ανάκτησης, δεν υπάρχει περίπτωση να έχετε πρόσβαση στα δεδομένα σας μετά την επαναφορά του συνθηματικού. Εάν δεν είστε σίγουροι τι να κάνετε, παρακαλώ επικοινωνήστε με τον διαχειριστή πριν συνεχίσετε. Θέλετε να συνεχίσετε;",
- "Yes, I really want to reset my password now" : "Ναι, θέλω να επαναφέρω το συνθηματικό μου τώρα.",
- "Reset" : "Επαναφορά",
"New password" : "Νέο συνθηματικό",
"New Password" : "Νέος Κωδικός",
+ "Reset password" : "Επαναφορά συνθηματικού",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!",
"For the best results, please consider using a GNU/Linux server instead." : "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux.",
+ "Please install the cURL extension and restart your webserver." : "Παρακαλώ εγκαταστήστε το πρόσθετο cURL και επανεκκινήστε τον διακομιστή σας.",
"Personal" : "Προσωπικά",
"Users" : "Χρήστες",
"Apps" : "Εφαρμογές",
@@ -164,7 +168,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την <a href=\"%s\" target=\"_blank\">τεκμηρίωση</a>.",
"Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>",
- "Password" : "Συνθηματικό",
+ "Username" : "Όνομα χρήστη",
"Storage & database" : "Αποθήκευση & βάση δεδομένων",
"Data folder" : "Φάκελος δεδομένων",
"Configure the database" : "Ρύθμιση της βάσης δεδομένων",
@@ -180,6 +184,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για τη σωστή λειτουργία. Παρακαλώ <a href=\"http://enable-javascript.com/\" target=\"_blank\">ενεργοποιήστε τη JavaScript</a> και επαναφορτώστε τη σελίδα.",
"%s is available. Get more information on how to update." : "%s είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες στο πώς να αναβαθμίσετε.",
"Log out" : "Αποσύνδεση",
+ "Search" : "Αναζήτηση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"Forgot your password? Reset it!" : "Ξεχάσατε τον κωδικό πρόσβασής σας; Επαναφέρετέ τον!",
diff --git a/core/l10n/en@pirate.js b/core/l10n/en@pirate.js
index 9db5e2cd3ef..ad49e97968d 100644
--- a/core/l10n/en@pirate.js
+++ b/core/l10n/en@pirate.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"core",
{
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
- "_download %n file_::_download %n files_" : ["",""],
- "Password" : "Passcode"
+ "Password" : "Passcode",
+ "_download %n file_::_download %n files_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/en@pirate.json b/core/l10n/en@pirate.json
index 63c33c612f3..c8192005772 100644
--- a/core/l10n/en@pirate.json
+++ b/core/l10n/en@pirate.json
@@ -1,6 +1,6 @@
{ "translations": {
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
- "_download %n file_::_download %n files_" : ["",""],
- "Password" : "Passcode"
+ "Password" : "Passcode",
+ "_download %n file_::_download %n files_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index dd27b6c114d..87c214c2688 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"I know what I'm doing" : "I know what I'm doing",
- "Reset password" : "Reset password",
"Password can not be changed. Please contact your administrator." : "Password can not be changed. Please contact your administrator.",
"No" : "No",
"Yes" : "Yes",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Error loading file picker template: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Error loading message template: {error}",
+ "read-only" : "read-only",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} file conflict","{count} file conflicts"],
"One file conflict" : "One file conflict",
"New Files" : "New Files",
@@ -64,7 +64,8 @@ OC.L10N.register(
"Good password" : "Good password",
"Strong password" : "Strong password",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet properly setup to allow files synchronisation because the WebDAV interface seems to be broken.",
- "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don't work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "This server has no working internet connection. This means that some of the features such as mounting external storage, notifications about updates, or installation of 3rd party apps won't work. Accessing files remotely and sending notification emails might also not work. We suggest enabling an internet connection for this server if you want to have all the features.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.",
"Error occurred while checking server setup" : "Error occurred whilst checking server setup",
"Shared" : "Shared",
"Shared with {recipients}" : "Shared with {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Share with user or group …",
"Share link" : "Share link",
"The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created",
+ "Link" : "Link",
"Password protect" : "Password protect",
+ "Password" : "Password",
"Choose a password for the public link" : "Choose a password for the public link",
- "Allow Public Upload" : "Allow Public Upload",
+ "Allow editing" : "Allow editing",
"Email link to person" : "Email link to person",
"Send" : "Send",
"Set expiration date" : "Set expiration date",
+ "Expiration" : "Expiration",
"Expiration date" : "Expiration date",
"Adding user..." : "Adding user...",
"group" : "group",
+ "remote" : "remote",
"Resharing is not allowed" : "Resharing is not allowed",
"Shared in {item} with {user}" : "Shared in {item} with {user}",
"Unshare" : "Unshare",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "can edit",
"access control" : "access control",
"create" : "create",
- "update" : "update",
+ "change" : "change",
"delete" : "delete",
"Password protected" : "Password protected",
"Error unsetting expiration date" : "Error unsetting expiration date",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Hello world!",
"sunny" : "sunny",
"Hello {name}, the weather is {weather}" : "Hello {name}, the weather is {weather}",
+ "Hello {name}" : "Hello {name}",
"_download %n file_::_download %n files_" : ["download %n file","download %n files"],
"Updating {productName} to version {version}, this may take a while." : "Updating {productName} to version {version}, this may take a while.",
"Please reload the page." : "Please reload the page.",
- "The update was unsuccessful." : "The update was unsuccessful.",
+ "The update was unsuccessful. " : "The update was unsuccessful. ",
"The update was successful. Redirecting you to ownCloud now." : "The update was successful. Redirecting you to ownCloud now.",
"Couldn't reset password because the token is invalid" : "Couldn't reset password because the token is invalid",
"Couldn't send reset email. Please make sure your username is correct." : "Couldn't send reset email. Please make sure your username is correct.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Couldn't send reset email because there is no email address for this username. Please contact your administrator.",
"%s password reset" : "%s password reset",
"Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
- "You will receive a link to reset your password via Email." : "You will receive a link to reset your password via email.",
- "Username" : "Username",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?",
- "Yes, I really want to reset my password now" : "Yes, I really want to reset my password now",
- "Reset" : "Reset",
"New password" : "New password",
"New Password" : "New Password",
+ "Reset password" : "Reset password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! ",
"For the best results, please consider using a GNU/Linux server instead." : "For the best results, please consider using a GNU/Linux server instead.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged.",
+ "Please install the cURL extension and restart your webserver." : "Please install the cURL extension and restart your webserver.",
"Personal" : "Personal",
"Users" : "Users",
"Apps" : "Apps",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>",
- "Password" : "Password",
+ "Username" : "Username",
"Storage & database" : "Storage & database",
"Data folder" : "Data folder",
"Configure the database" : "Configure the database",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page.",
"%s is available. Get more information on how to update." : "%s is available. Get more information on how to update.",
"Log out" : "Log out",
+ "Search" : "Search",
"Server side authentication failed!" : "Server side authentication failed!",
"Please contact your administrator." : "Please contact your administrator.",
"Forgot your password? Reset it!" : "Forgot your password? Reset it!",
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index b1f6556f900..8997603dbbf 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"I know what I'm doing" : "I know what I'm doing",
- "Reset password" : "Reset password",
"Password can not be changed. Please contact your administrator." : "Password can not be changed. Please contact your administrator.",
"No" : "No",
"Yes" : "Yes",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Error loading file picker template: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "Error loading message template: {error}",
+ "read-only" : "read-only",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} file conflict","{count} file conflicts"],
"One file conflict" : "One file conflict",
"New Files" : "New Files",
@@ -62,7 +62,8 @@
"Good password" : "Good password",
"Strong password" : "Strong password",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet properly setup to allow files synchronisation because the WebDAV interface seems to be broken.",
- "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don't work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "This server has no working internet connection. This means that some of the features such as mounting external storage, notifications about updates, or installation of 3rd party apps won't work. Accessing files remotely and sending notification emails might also not work. We suggest enabling an internet connection for this server if you want to have all the features.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.",
"Error occurred while checking server setup" : "Error occurred whilst checking server setup",
"Shared" : "Shared",
"Shared with {recipients}" : "Shared with {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Share with user or group …",
"Share link" : "Share link",
"The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created",
+ "Link" : "Link",
"Password protect" : "Password protect",
+ "Password" : "Password",
"Choose a password for the public link" : "Choose a password for the public link",
- "Allow Public Upload" : "Allow Public Upload",
+ "Allow editing" : "Allow editing",
"Email link to person" : "Email link to person",
"Send" : "Send",
"Set expiration date" : "Set expiration date",
+ "Expiration" : "Expiration",
"Expiration date" : "Expiration date",
"Adding user..." : "Adding user...",
"group" : "group",
+ "remote" : "remote",
"Resharing is not allowed" : "Resharing is not allowed",
"Shared in {item} with {user}" : "Shared in {item} with {user}",
"Unshare" : "Unshare",
@@ -93,7 +98,7 @@
"can edit" : "can edit",
"access control" : "access control",
"create" : "create",
- "update" : "update",
+ "change" : "change",
"delete" : "delete",
"Password protected" : "Password protected",
"Error unsetting expiration date" : "Error unsetting expiration date",
@@ -112,25 +117,26 @@
"Hello world!" : "Hello world!",
"sunny" : "sunny",
"Hello {name}, the weather is {weather}" : "Hello {name}, the weather is {weather}",
+ "Hello {name}" : "Hello {name}",
"_download %n file_::_download %n files_" : ["download %n file","download %n files"],
"Updating {productName} to version {version}, this may take a while." : "Updating {productName} to version {version}, this may take a while.",
"Please reload the page." : "Please reload the page.",
- "The update was unsuccessful." : "The update was unsuccessful.",
+ "The update was unsuccessful. " : "The update was unsuccessful. ",
"The update was successful. Redirecting you to ownCloud now." : "The update was successful. Redirecting you to ownCloud now.",
"Couldn't reset password because the token is invalid" : "Couldn't reset password because the token is invalid",
"Couldn't send reset email. Please make sure your username is correct." : "Couldn't send reset email. Please make sure your username is correct.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Couldn't send reset email because there is no email address for this username. Please contact your administrator.",
"%s password reset" : "%s password reset",
"Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
- "You will receive a link to reset your password via Email." : "You will receive a link to reset your password via email.",
- "Username" : "Username",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?",
- "Yes, I really want to reset my password now" : "Yes, I really want to reset my password now",
- "Reset" : "Reset",
"New password" : "New password",
"New Password" : "New Password",
+ "Reset password" : "Reset password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! ",
"For the best results, please consider using a GNU/Linux server instead." : "For the best results, please consider using a GNU/Linux server instead.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged.",
+ "Please install the cURL extension and restart your webserver." : "Please install the cURL extension and restart your webserver.",
"Personal" : "Personal",
"Users" : "Users",
"Apps" : "Apps",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>",
- "Password" : "Password",
+ "Username" : "Username",
"Storage & database" : "Storage & database",
"Data folder" : "Data folder",
"Configure the database" : "Configure the database",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page.",
"%s is available. Get more information on how to update." : "%s is available. Get more information on how to update.",
"Log out" : "Log out",
+ "Search" : "Search",
"Server side authentication failed!" : "Server side authentication failed!",
"Please contact your administrator." : "Please contact your administrator.",
"Forgot your password? Reset it!" : "Forgot your password? Reset it!",
diff --git a/core/l10n/eo.js b/core/l10n/eo.js
index cc814c41e35..099419eb12d 100644
--- a/core/l10n/eo.js
+++ b/core/l10n/eo.js
@@ -25,7 +25,6 @@ OC.L10N.register(
"December" : "Decembro",
"Settings" : "Agordo",
"Saving..." : "Konservante...",
- "Reset password" : "Rekomenci la pasvorton",
"No" : "Ne",
"Yes" : "Jes",
"Choose" : "Elekti",
@@ -55,9 +54,11 @@ OC.L10N.register(
"Share with user or group …" : "Kunhavigi kun uzanto aŭ grupo...",
"Share link" : "Konhavigi ligilon",
"Password protect" : "Protekti per pasvorto",
+ "Password" : "Pasvorto",
"Email link to person" : "Retpoŝti la ligilon al ulo",
"Send" : "Sendi",
"Set expiration date" : "Agordi limdaton",
+ "Expiration" : "Eksvalidiĝo",
"Expiration date" : "Limdato",
"group" : "grupo",
"Resharing is not allowed" : "Rekunhavigo ne permesatas",
@@ -68,7 +69,6 @@ OC.L10N.register(
"can edit" : "povas redakti",
"access control" : "alirkontrolo",
"create" : "krei",
- "update" : "ĝisdatigi",
"delete" : "forigi",
"Password protected" : "Protektita per pasvorto",
"Error unsetting expiration date" : "Eraro dum malagordado de limdato",
@@ -86,10 +86,8 @@ OC.L10N.register(
"Please reload the page." : "Bonvolu reŝargi la paĝon.",
"The update was successful. Redirecting you to ownCloud now." : "La ĝisdatigo estis sukcesa. Alidirektante nun al ownCloud.",
"Use the following link to reset your password: {link}" : "Uzu la jenan ligilon por restarigi vian pasvorton: {link}",
- "You will receive a link to reset your password via Email." : "Vi ricevos ligilon retpoŝte por rekomencigi vian pasvorton.",
- "Username" : "Uzantonomo",
- "Yes, I really want to reset my password now" : "Jes, mi vere volas restarigi mian pasvorton nun",
"New password" : "Nova pasvorto",
+ "Reset password" : "Rekomenci la pasvorton",
"Personal" : "Persona",
"Users" : "Uzantoj",
"Apps" : "Aplikaĵoj",
@@ -105,7 +103,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Via PHP versio estas sendefenda je la NULL bajto atako (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Bonvolu ĝisdatigi vian PHP-instalon por uzi %s sekure.",
"Create an <strong>admin account</strong>" : "Krei <strong>administran konton</strong>",
- "Password" : "Pasvorto",
+ "Username" : "Uzantonomo",
"Data folder" : "Datuma dosierujo",
"Configure the database" : "Agordi la datumbazon",
"Database user" : "Datumbaza uzanto",
@@ -117,6 +115,7 @@ OC.L10N.register(
"Finishing …" : "Finante...",
"%s is available. Get more information on how to update." : "%s haveblas. Ekhavi pli da informo pri kiel ĝisdatigi.",
"Log out" : "Elsaluti",
+ "Search" : "Serĉi",
"Please contact your administrator." : "Bonvolu kontakti vian administranton.",
"remember" : "memori",
"Log in" : "Ensaluti",
diff --git a/core/l10n/eo.json b/core/l10n/eo.json
index dc4d9d6eefc..49e30719a22 100644
--- a/core/l10n/eo.json
+++ b/core/l10n/eo.json
@@ -23,7 +23,6 @@
"December" : "Decembro",
"Settings" : "Agordo",
"Saving..." : "Konservante...",
- "Reset password" : "Rekomenci la pasvorton",
"No" : "Ne",
"Yes" : "Jes",
"Choose" : "Elekti",
@@ -53,9 +52,11 @@
"Share with user or group …" : "Kunhavigi kun uzanto aŭ grupo...",
"Share link" : "Konhavigi ligilon",
"Password protect" : "Protekti per pasvorto",
+ "Password" : "Pasvorto",
"Email link to person" : "Retpoŝti la ligilon al ulo",
"Send" : "Sendi",
"Set expiration date" : "Agordi limdaton",
+ "Expiration" : "Eksvalidiĝo",
"Expiration date" : "Limdato",
"group" : "grupo",
"Resharing is not allowed" : "Rekunhavigo ne permesatas",
@@ -66,7 +67,6 @@
"can edit" : "povas redakti",
"access control" : "alirkontrolo",
"create" : "krei",
- "update" : "ĝisdatigi",
"delete" : "forigi",
"Password protected" : "Protektita per pasvorto",
"Error unsetting expiration date" : "Eraro dum malagordado de limdato",
@@ -84,10 +84,8 @@
"Please reload the page." : "Bonvolu reŝargi la paĝon.",
"The update was successful. Redirecting you to ownCloud now." : "La ĝisdatigo estis sukcesa. Alidirektante nun al ownCloud.",
"Use the following link to reset your password: {link}" : "Uzu la jenan ligilon por restarigi vian pasvorton: {link}",
- "You will receive a link to reset your password via Email." : "Vi ricevos ligilon retpoŝte por rekomencigi vian pasvorton.",
- "Username" : "Uzantonomo",
- "Yes, I really want to reset my password now" : "Jes, mi vere volas restarigi mian pasvorton nun",
"New password" : "Nova pasvorto",
+ "Reset password" : "Rekomenci la pasvorton",
"Personal" : "Persona",
"Users" : "Uzantoj",
"Apps" : "Aplikaĵoj",
@@ -103,7 +101,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Via PHP versio estas sendefenda je la NULL bajto atako (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Bonvolu ĝisdatigi vian PHP-instalon por uzi %s sekure.",
"Create an <strong>admin account</strong>" : "Krei <strong>administran konton</strong>",
- "Password" : "Pasvorto",
+ "Username" : "Uzantonomo",
"Data folder" : "Datuma dosierujo",
"Configure the database" : "Agordi la datumbazon",
"Database user" : "Datumbaza uzanto",
@@ -115,6 +113,7 @@
"Finishing …" : "Finante...",
"%s is available. Get more information on how to update." : "%s haveblas. Ekhavi pli da informo pri kiel ĝisdatigi.",
"Log out" : "Elsaluti",
+ "Search" : "Serĉi",
"Please contact your administrator." : "Bonvolu kontakti vian administranton.",
"remember" : "memori",
"Log in" : "Ensaluti",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index b963b9d3f01..bb39a5ae8b4 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"Turned off maintenance mode" : "Modo mantenimiento desactivado",
"Updated database" : "Base de datos actualizada",
"Checked database schema update" : "Actualización del esquema de base de datos revisado",
- "Checked database schema update for apps" : "Chequeada actualización de esquema de la base de datos para aplicaciones",
+ "Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones",
"Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s",
"Disabled incompatible apps: %s" : "Aplicaciones incompatibles desactivadas: %s",
"No image or file provided" : "No se especificó ningún archivo o imagen",
@@ -35,11 +35,10 @@ OC.L10N.register(
"December" : "Diciembre",
"Settings" : "Ajustes",
"Saving..." : "Guardando...",
- "Couldn't send reset email. Please contact your administrator." : "La reiniciación de este correo electrónico no pudo ser enviada. Por favor, contacte a su administrador.",
+ "Couldn't send reset email. Please contact your administrator." : "No pudo enviarse un correo de reinicio. Por favor, contacte con su administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un enlace para reiniciar su contraseña ha sido enviado a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta para spam/chatarra.<br>Si no lo encuentra, pregunte a su administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no has activado la clave de recuperación, no habrá manera de recuperar los datos despues de que tu contraseña seá restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte a su administrador antes de continuar.<br />¿Realmente desea continuar?",
- "I know what I'm doing" : "Yo se lo que estoy haciendo",
- "Reset password" : "Restablecer contraseña",
+ "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",
"Yes" : "Sí",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Error cargando plantilla del seleccionador de archivos: {error}",
"Ok" : "Aceptar",
"Error loading message template: {error}" : "Error cargando plantilla del mensaje: {error}",
+ "read-only" : "solo lectura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos de archivo"],
"One file conflict" : "On conflicto de archivo",
"New Files" : "Nuevos Archivos",
@@ -63,9 +63,10 @@ OC.L10N.register(
"So-so password" : "Contraseña pasable",
"Good password" : "Contraseña buena",
"Strong password" : "Contraseña muy buena",
- "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir la sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir la sincronización de archivos; ya que la interfaz WebDAV parece no estar funcionando.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor no tiene conexión a Internet. Esto significa que algunas de las características no funcionarán, como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones, la instalación de aplicaciones de terceros, el acceso a los archivos de forma remota o el envío de correos electrónicos de notificación. Sugerimos habilitar una conexión a Internet en este servidor para disfrutar de todas las funciones.",
- "Error occurred while checking server setup" : "Ha ocurrido un error la revisar la configuración 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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
+ "Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor",
"Shared" : "Compartido",
"Shared with {recipients}" : "Compartido con {recipients}",
"Share" : "Compartir",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Compartido con el usuario o con el grupo ...",
"Share link" : "Enlace compartido",
"The public link will expire no later than {days} days after it is created" : "El link publico no expirará antes de {days} desde que fué creado",
+ "Link" : "Enlace",
"Password protect" : "Protección con contraseña",
+ "Password" : "Contraseña",
"Choose a password for the public link" : "Elija una contraseña para el enlace publico",
- "Allow Public Upload" : "Permitir Subida Pública",
+ "Allow editing" : "Permitir edición",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
"Set expiration date" : "Establecer fecha de caducidad",
+ "Expiration" : "Expira en:",
"Expiration date" : "Fecha de caducidad",
"Adding user..." : "Añadiendo usuario...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "No se permite compartir de nuevo",
"Shared in {item} with {user}" : "Compartido en {item} con {user}",
"Unshare" : "Dejar de compartir",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "puede editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
+ "change" : "cambio",
"delete" : "eliminar",
"Password protected" : "Protegido con contraseña",
"Error unsetting expiration date" : "Error eliminando fecha de caducidad",
@@ -110,29 +115,29 @@ OC.L10N.register(
"Edit tags" : "Editar etiquetas",
"Error loading dialog template: {error}" : "Error cargando plantilla de diálogo: {error}",
"No tags selected for deletion." : "No hay etiquetas seleccionadas para borrar.",
- "unknown text" : "test desconocido",
- "Hello world!" : "¡ Hola mundo !",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
"sunny" : "soleado",
"Hello {name}, the weather is {weather}" : "Hola {name}, el día es {weather}",
"_download %n file_::_download %n files_" : ["descarga %n ficheros","descarga %n ficheros"],
"Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a la versión {version}. Esto puede tardar un poco.",
"Please reload the page." : "Recargue/Actualice la página",
- "The update was unsuccessful." : "Falló la actualización",
+ "The update was unsuccessful. " : "La actualización ha fallado.",
"The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
- "Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es nulo.",
+ "Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es inválido.",
"Couldn't send reset email. Please make sure your username is correct." : "No se pudo enviar la reiniciación de su correo electrónico. Por favor, asegúrese de que su nombre de usuario es el correcto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No se pudo enviar la reiniciación del correo electrónico, porque no hay una dirección de correo electrónico asociada con este nombre de usuario. Por favor, contacte a su administrador.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
"New Password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"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 está soportado y %s no funcionará bien en esta plataforma. ¡Úsela a su propio riesgo! ",
"For the best results, please consider using a GNU/Linux server instead." : "Para óptimos resultados, considere utilizar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Parece ser que esta %s instalación está ejecutándose en un entorno PHP de 32-bits y que el parámetro open_basedir se ha configurado en php.ini. Esto acarreará problemas con ficheros de más de 4GB y se desaconseja encarecidamente.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Por favor, elimine el parámetro open_basedir de su fichero de configuración php.ini o migre a PHP de 64-bits.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Parece ser que esta %s instalación está ejecutándose en un entorno PHP de 32-bits y cURL no está instalado. Esto acarreará problemas con ficheros de más de 4GB y se desaconseja encarecidamente.",
+ "Please install the cURL extension and restart your webserver." : "Por favor, instale la extensión cURL y reinicie su servidor web.",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Aplicaciones",
@@ -154,15 +159,15 @@ OC.L10N.register(
"Cheers!" : "¡Saludos!",
"Internal Server Error" : "Error interno del servidor",
"The server encountered an internal error and was unable to complete your request." : "El servidor ha encontrado un error y no puede completar la solicitud.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor contacte con el administrador del servidor si este error reaparece multiples veces. Por favor incluya los detalles tecnicos que se muestran acontinuación.",
- "More details can be found in the server log." : "Mas detalles pueden verse en el log del servidor.",
- "Technical details" : "Detalles tecnicos",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor, contacte con el administrador del servidor si este error reaparece múltiples veces. Incluya asimismo los detalles técnicos que se muestran acontinuación.",
+ "More details can be found in the server log." : "Pueden verse más detalles en el registro del servidor.",
+ "Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
"Request ID: %s" : "ID solicitado: %s",
- "Code: %s" : "Codigo: %s",
+ "Code: %s" : "Código: %s",
"Message: %s" : "Mensaje: %s",
"File: %s" : "Archivo: %s",
- "Line: %s" : "Linea: %s",
+ "Line: %s" : "Línea: %s",
"Trace" : "Trazas",
"Security Warning" : "Advertencia de seguridad",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Su versión de PHP es vulnerable al ataque de Byte NULL (CVE-2006-7243)",
@@ -170,7 +175,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nombre de usuario",
"Storage & database" : "Almacenamiento y base de datos",
"Data folder" : "Directorio de datos",
"Configure the database" : "Configurar la base de datos",
@@ -183,12 +188,13 @@ OC.L10N.register(
"SQLite will be used as database. For larger installations we recommend to change this." : "Se usará SQLite como base de datos. Para instalaciones más grandes, es recomendable cambiar esto.",
"Finish setup" : "Completar la instalación",
"Finishing …" : "Finalizando...",
- "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "La aplicación requiere JavaScript para poder operar correctamente. Sírvase <a href=\"http://enable-javascript.com/\" target=\"_blank\">activar JavaScript</a> y volver a cargar la página.",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "La aplicación requiere JavaScript para poder operar correctamente. Habilite <a href=\"http://enable-javascript.com/\" target=\"_blank\">activar JavaScript</a> y vuelva a cargar la página.",
"%s is available. Get more information on how to update." : "%s está disponible. Obtener más información de como actualizar.",
"Log out" : "Salir",
+ "Search" : "Buscar",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
"Please contact your administrator." : "Por favor, contacte con el administrador.",
- "Forgot your password? Reset it!" : "¿Olvidó su contraseña? ¡Reiniciala!",
+ "Forgot your password? Reset it!" : "¿Olvidó su contraseña? ¡Restablézquela!",
"remember" : "recordar",
"Log in" : "Entrar",
"Alternative Logins" : "Inicios de sesión alternativos",
@@ -207,7 +213,7 @@ OC.L10N.register(
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Antes de proceder, asegúrese de que se haya hecho un respaldo de la base de datos, la carpeta de configuración y la carpeta de datos.",
"Start update" : "Iniciar actualización",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tiempos de espera en grandes instalaciones, en su lugar puede ejecutar el siguiente comando desde el directorio de instalación:",
- "This %s instance is currently being updated, which may take a while." : "Está instancia %s está siendo actualizada, lo que puede llevar un tiempo.",
- "This page will refresh itself when the %s instance is available again." : "La página se refrescará por sí misma cuando la instancia %s vuelva a estar disponible."
+ "This %s instance is currently being updated, which may take a while." : "Esta versión %s está actualizándose, lo cual puede tardar un rato.",
+ "This page will refresh itself when the %s instance is available again." : "La página se refrescará cuando la instalación %s vuelva a estar disponible."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/es.json b/core/l10n/es.json
index 008891d5c98..1cf35d3f85b 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -4,7 +4,7 @@
"Turned off maintenance mode" : "Modo mantenimiento desactivado",
"Updated database" : "Base de datos actualizada",
"Checked database schema update" : "Actualización del esquema de base de datos revisado",
- "Checked database schema update for apps" : "Chequeada actualización de esquema de la base de datos para aplicaciones",
+ "Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones",
"Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s",
"Disabled incompatible apps: %s" : "Aplicaciones incompatibles desactivadas: %s",
"No image or file provided" : "No se especificó ningún archivo o imagen",
@@ -33,11 +33,10 @@
"December" : "Diciembre",
"Settings" : "Ajustes",
"Saving..." : "Guardando...",
- "Couldn't send reset email. Please contact your administrator." : "La reiniciación de este correo electrónico no pudo ser enviada. Por favor, contacte a su administrador.",
+ "Couldn't send reset email. Please contact your administrator." : "No pudo enviarse un correo de reinicio. Por favor, contacte con su administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un enlace para reiniciar su contraseña ha sido enviado a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta para spam/chatarra.<br>Si no lo encuentra, pregunte a su administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no has activado la clave de recuperación, no habrá manera de recuperar los datos despues de que tu contraseña seá restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte a su administrador antes de continuar.<br />¿Realmente desea continuar?",
- "I know what I'm doing" : "Yo se lo que estoy haciendo",
- "Reset password" : "Restablecer contraseña",
+ "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",
"Yes" : "Sí",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Error cargando plantilla del seleccionador de archivos: {error}",
"Ok" : "Aceptar",
"Error loading message template: {error}" : "Error cargando plantilla del mensaje: {error}",
+ "read-only" : "solo lectura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos de archivo"],
"One file conflict" : "On conflicto de archivo",
"New Files" : "Nuevos Archivos",
@@ -61,9 +61,10 @@
"So-so password" : "Contraseña pasable",
"Good password" : "Contraseña buena",
"Strong password" : "Contraseña muy buena",
- "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir la sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir la sincronización de archivos; ya que la interfaz WebDAV parece no estar funcionando.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor no tiene conexión a Internet. Esto significa que algunas de las características no funcionarán, como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones, la instalación de aplicaciones de terceros, el acceso a los archivos de forma remota o el envío de correos electrónicos de notificación. Sugerimos habilitar una conexión a Internet en este servidor para disfrutar de todas las funciones.",
- "Error occurred while checking server setup" : "Ha ocurrido un error la revisar la configuración 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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
+ "Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor",
"Shared" : "Compartido",
"Shared with {recipients}" : "Compartido con {recipients}",
"Share" : "Compartir",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Compartido con el usuario o con el grupo ...",
"Share link" : "Enlace compartido",
"The public link will expire no later than {days} days after it is created" : "El link publico no expirará antes de {days} desde que fué creado",
+ "Link" : "Enlace",
"Password protect" : "Protección con contraseña",
+ "Password" : "Contraseña",
"Choose a password for the public link" : "Elija una contraseña para el enlace publico",
- "Allow Public Upload" : "Permitir Subida Pública",
+ "Allow editing" : "Permitir edición",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
"Set expiration date" : "Establecer fecha de caducidad",
+ "Expiration" : "Expira en:",
"Expiration date" : "Fecha de caducidad",
"Adding user..." : "Añadiendo usuario...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "No se permite compartir de nuevo",
"Shared in {item} with {user}" : "Compartido en {item} con {user}",
"Unshare" : "Dejar de compartir",
@@ -93,7 +98,7 @@
"can edit" : "puede editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
+ "change" : "cambio",
"delete" : "eliminar",
"Password protected" : "Protegido con contraseña",
"Error unsetting expiration date" : "Error eliminando fecha de caducidad",
@@ -108,29 +113,29 @@
"Edit tags" : "Editar etiquetas",
"Error loading dialog template: {error}" : "Error cargando plantilla de diálogo: {error}",
"No tags selected for deletion." : "No hay etiquetas seleccionadas para borrar.",
- "unknown text" : "test desconocido",
- "Hello world!" : "¡ Hola mundo !",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
"sunny" : "soleado",
"Hello {name}, the weather is {weather}" : "Hola {name}, el día es {weather}",
"_download %n file_::_download %n files_" : ["descarga %n ficheros","descarga %n ficheros"],
"Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a la versión {version}. Esto puede tardar un poco.",
"Please reload the page." : "Recargue/Actualice la página",
- "The update was unsuccessful." : "Falló la actualización",
+ "The update was unsuccessful. " : "La actualización ha fallado.",
"The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
- "Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es nulo.",
+ "Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es inválido.",
"Couldn't send reset email. Please make sure your username is correct." : "No se pudo enviar la reiniciación de su correo electrónico. Por favor, asegúrese de que su nombre de usuario es el correcto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No se pudo enviar la reiniciación del correo electrónico, porque no hay una dirección de correo electrónico asociada con este nombre de usuario. Por favor, contacte a su administrador.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
"New Password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"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 está soportado y %s no funcionará bien en esta plataforma. ¡Úsela a su propio riesgo! ",
"For the best results, please consider using a GNU/Linux server instead." : "Para óptimos resultados, considere utilizar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Parece ser que esta %s instalación está ejecutándose en un entorno PHP de 32-bits y que el parámetro open_basedir se ha configurado en php.ini. Esto acarreará problemas con ficheros de más de 4GB y se desaconseja encarecidamente.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Por favor, elimine el parámetro open_basedir de su fichero de configuración php.ini o migre a PHP de 64-bits.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Parece ser que esta %s instalación está ejecutándose en un entorno PHP de 32-bits y cURL no está instalado. Esto acarreará problemas con ficheros de más de 4GB y se desaconseja encarecidamente.",
+ "Please install the cURL extension and restart your webserver." : "Por favor, instale la extensión cURL y reinicie su servidor web.",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Aplicaciones",
@@ -152,15 +157,15 @@
"Cheers!" : "¡Saludos!",
"Internal Server Error" : "Error interno del servidor",
"The server encountered an internal error and was unable to complete your request." : "El servidor ha encontrado un error y no puede completar la solicitud.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor contacte con el administrador del servidor si este error reaparece multiples veces. Por favor incluya los detalles tecnicos que se muestran acontinuación.",
- "More details can be found in the server log." : "Mas detalles pueden verse en el log del servidor.",
- "Technical details" : "Detalles tecnicos",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor, contacte con el administrador del servidor si este error reaparece múltiples veces. Incluya asimismo los detalles técnicos que se muestran acontinuación.",
+ "More details can be found in the server log." : "Pueden verse más detalles en el registro del servidor.",
+ "Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
"Request ID: %s" : "ID solicitado: %s",
- "Code: %s" : "Codigo: %s",
+ "Code: %s" : "Código: %s",
"Message: %s" : "Mensaje: %s",
"File: %s" : "Archivo: %s",
- "Line: %s" : "Linea: %s",
+ "Line: %s" : "Línea: %s",
"Trace" : "Trazas",
"Security Warning" : "Advertencia de seguridad",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Su versión de PHP es vulnerable al ataque de Byte NULL (CVE-2006-7243)",
@@ -168,7 +173,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nombre de usuario",
"Storage & database" : "Almacenamiento y base de datos",
"Data folder" : "Directorio de datos",
"Configure the database" : "Configurar la base de datos",
@@ -181,12 +186,13 @@
"SQLite will be used as database. For larger installations we recommend to change this." : "Se usará SQLite como base de datos. Para instalaciones más grandes, es recomendable cambiar esto.",
"Finish setup" : "Completar la instalación",
"Finishing …" : "Finalizando...",
- "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "La aplicación requiere JavaScript para poder operar correctamente. Sírvase <a href=\"http://enable-javascript.com/\" target=\"_blank\">activar JavaScript</a> y volver a cargar la página.",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "La aplicación requiere JavaScript para poder operar correctamente. Habilite <a href=\"http://enable-javascript.com/\" target=\"_blank\">activar JavaScript</a> y vuelva a cargar la página.",
"%s is available. Get more information on how to update." : "%s está disponible. Obtener más información de como actualizar.",
"Log out" : "Salir",
+ "Search" : "Buscar",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
"Please contact your administrator." : "Por favor, contacte con el administrador.",
- "Forgot your password? Reset it!" : "¿Olvidó su contraseña? ¡Reiniciala!",
+ "Forgot your password? Reset it!" : "¿Olvidó su contraseña? ¡Restablézquela!",
"remember" : "recordar",
"Log in" : "Entrar",
"Alternative Logins" : "Inicios de sesión alternativos",
@@ -205,7 +211,7 @@
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Antes de proceder, asegúrese de que se haya hecho un respaldo de la base de datos, la carpeta de configuración y la carpeta de datos.",
"Start update" : "Iniciar actualización",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tiempos de espera en grandes instalaciones, en su lugar puede ejecutar el siguiente comando desde el directorio de instalación:",
- "This %s instance is currently being updated, which may take a while." : "Está instancia %s está siendo actualizada, lo que puede llevar un tiempo.",
- "This page will refresh itself when the %s instance is available again." : "La página se refrescará por sí misma cuando la instancia %s vuelva a estar disponible."
+ "This %s instance is currently being updated, which may take a while." : "Esta versión %s está actualizándose, lo cual puede tardar un rato.",
+ "This page will refresh itself when the %s instance is available again." : "La página se refrescará cuando la instalación %s vuelva a estar disponible."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/es_AR.js b/core/l10n/es_AR.js
index f37377f465c..c07edddd6e5 100644
--- a/core/l10n/es_AR.js
+++ b/core/l10n/es_AR.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "diciembre",
"Settings" : "Configuración",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Elegir",
@@ -55,6 +54,7 @@ OC.L10N.register(
"Strong password" : "Contraseña fuerte.",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Tu servidor web no está configurado todavía para permitir sincronización de archivos porque la interfaz WebDAV parece no funcionar.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "El servidor no posee una conexión a Internet activa. Esto significa que algunas características como el montaje de un almacenamiento externo, las notificaciones acerca de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. El acceso a archivos de forma remota y el envío de correos con notificaciones es posible que tampoco funcionen. Sugerimos habilitar la conexión a Internet para este servidor si deseas tener todas estas características.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El directorio de datos y tus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no funciona. Sugerimos fuertemente que configures tu servidor web de forma tal que el archivo de directorios no sea accesible o muevas el mismo fuera de la raíz de los documentos del servidor web.",
"Shared" : "Compartido",
"Share" : "Compartir",
"Error" : "Error",
@@ -66,10 +66,11 @@ OC.L10N.register(
"Share with user or group …" : "Compartir con usuario o grupo ...",
"Share link" : "Compartir vínculo",
"Password protect" : "Proteger con contraseña ",
- "Allow Public Upload" : "Permitir Subida Pública",
+ "Password" : "Contraseña",
"Email link to person" : "Enviar el enlace por e-mail.",
"Send" : "Mandar",
"Set expiration date" : "Asignar fecha de vencimiento",
+ "Expiration" : "Vencimiento",
"Expiration date" : "Fecha de vencimiento",
"group" : "grupo",
"Resharing is not allowed" : "No se permite volver a compartir",
@@ -80,7 +81,6 @@ OC.L10N.register(
"can edit" : "podés editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
"delete" : "borrar",
"Password protected" : "Protegido por contraseña",
"Error unsetting expiration date" : "Error al remover la fecha de vencimiento",
@@ -100,12 +100,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usá este enlace para restablecer tu contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas a recibir un enlace por e-mail para restablecer tu contraseña.",
- "Username" : "Nombre de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tus archivos están encriptados. Si no habilitaste la clave de recuperación, no vas a tener manera de obtener nuevamente tus datos después que se restablezca tu contraseña. Si no estás seguro sobre qué hacer, ponete en contacto con el administrador antes de seguir. ¿Estás seguro/a que querés continuar?",
- "Yes, I really want to reset my password now" : "Sí, definitivamente quiero restablecer mi contraseña ahora",
- "Reset" : "Resetear",
"New password" : "Nueva contraseña:",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Apps",
@@ -128,7 +124,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nombre de usuario",
"Data folder" : "Directorio de almacenamiento",
"Configure the database" : "Configurar la base de datos",
"Database user" : "Usuario de la base de datos",
@@ -140,6 +136,7 @@ OC.L10N.register(
"Finishing …" : "Finalizando...",
"%s is available. Get more information on how to update." : "%s está disponible. Obtené más información sobre cómo actualizar.",
"Log out" : "Cerrar la sesión",
+ "Search" : "Buscar",
"Server side authentication failed!" : "¡Falló la autenticación del servidor!",
"Please contact your administrator." : "Por favor, contacte a su administrador.",
"remember" : "recordame",
diff --git a/core/l10n/es_AR.json b/core/l10n/es_AR.json
index 219139245a3..4c8fc14d51f 100644
--- a/core/l10n/es_AR.json
+++ b/core/l10n/es_AR.json
@@ -29,7 +29,6 @@
"December" : "diciembre",
"Settings" : "Configuración",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Elegir",
@@ -53,6 +52,7 @@
"Strong password" : "Contraseña fuerte.",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Tu servidor web no está configurado todavía para permitir sincronización de archivos porque la interfaz WebDAV parece no funcionar.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "El servidor no posee una conexión a Internet activa. Esto significa que algunas características como el montaje de un almacenamiento externo, las notificaciones acerca de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. El acceso a archivos de forma remota y el envío de correos con notificaciones es posible que tampoco funcionen. Sugerimos habilitar la conexión a Internet para este servidor si deseas tener todas estas características.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El directorio de datos y tus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no funciona. Sugerimos fuertemente que configures tu servidor web de forma tal que el archivo de directorios no sea accesible o muevas el mismo fuera de la raíz de los documentos del servidor web.",
"Shared" : "Compartido",
"Share" : "Compartir",
"Error" : "Error",
@@ -64,10 +64,11 @@
"Share with user or group …" : "Compartir con usuario o grupo ...",
"Share link" : "Compartir vínculo",
"Password protect" : "Proteger con contraseña ",
- "Allow Public Upload" : "Permitir Subida Pública",
+ "Password" : "Contraseña",
"Email link to person" : "Enviar el enlace por e-mail.",
"Send" : "Mandar",
"Set expiration date" : "Asignar fecha de vencimiento",
+ "Expiration" : "Vencimiento",
"Expiration date" : "Fecha de vencimiento",
"group" : "grupo",
"Resharing is not allowed" : "No se permite volver a compartir",
@@ -78,7 +79,6 @@
"can edit" : "podés editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
"delete" : "borrar",
"Password protected" : "Protegido por contraseña",
"Error unsetting expiration date" : "Error al remover la fecha de vencimiento",
@@ -98,12 +98,8 @@
"The update was successful. Redirecting you to ownCloud now." : "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usá este enlace para restablecer tu contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas a recibir un enlace por e-mail para restablecer tu contraseña.",
- "Username" : "Nombre de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tus archivos están encriptados. Si no habilitaste la clave de recuperación, no vas a tener manera de obtener nuevamente tus datos después que se restablezca tu contraseña. Si no estás seguro sobre qué hacer, ponete en contacto con el administrador antes de seguir. ¿Estás seguro/a que querés continuar?",
- "Yes, I really want to reset my password now" : "Sí, definitivamente quiero restablecer mi contraseña ahora",
- "Reset" : "Resetear",
"New password" : "Nueva contraseña:",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Apps",
@@ -126,7 +122,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nombre de usuario",
"Data folder" : "Directorio de almacenamiento",
"Configure the database" : "Configurar la base de datos",
"Database user" : "Usuario de la base de datos",
@@ -138,6 +134,7 @@
"Finishing …" : "Finalizando...",
"%s is available. Get more information on how to update." : "%s está disponible. Obtené más información sobre cómo actualizar.",
"Log out" : "Cerrar la sesión",
+ "Search" : "Buscar",
"Server side authentication failed!" : "¡Falló la autenticación del servidor!",
"Please contact your administrator." : "Por favor, contacte a su administrador.",
"remember" : "recordame",
diff --git a/core/l10n/es_CL.js b/core/l10n/es_CL.js
index 3808c2cb7c4..6c75e143f1f 100644
--- a/core/l10n/es_CL.js
+++ b/core/l10n/es_CL.js
@@ -35,14 +35,14 @@ OC.L10N.register(
"Error while sharing" : "Ocurrió un error mientras compartía",
"Error while unsharing" : "Ocurrió un error mientras dejaba de compartir",
"Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos",
+ "Password" : "Clave",
"The object type is not specified." : "El tipo de objeto no está especificado.",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "Usuario",
"Personal" : "Personal",
"Users" : "Usuarios",
"Admin" : "Administración",
"Help" : "Ayuda",
- "Password" : "Clave",
+ "Username" : "Usuario",
"You are accessing the server from an untrusted domain." : "Usted está accediendo al servidor desde un dominio no confiable.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor contacte con su administrador. Si usted es el administrador de esta instancia, configure la opción \"trusted_domain\" en \"config/config.php\". Un ejemplo de la configuración está disponible en config/config.sample.php"
},
diff --git a/core/l10n/es_CL.json b/core/l10n/es_CL.json
index 1760e39c6c6..b29e9974f99 100644
--- a/core/l10n/es_CL.json
+++ b/core/l10n/es_CL.json
@@ -33,14 +33,14 @@
"Error while sharing" : "Ocurrió un error mientras compartía",
"Error while unsharing" : "Ocurrió un error mientras dejaba de compartir",
"Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos",
+ "Password" : "Clave",
"The object type is not specified." : "El tipo de objeto no está especificado.",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "Usuario",
"Personal" : "Personal",
"Users" : "Usuarios",
"Admin" : "Administración",
"Help" : "Ayuda",
- "Password" : "Clave",
+ "Username" : "Usuario",
"You are accessing the server from an untrusted domain." : "Usted está accediendo al servidor desde un dominio no confiable.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor contacte con su administrador. Si usted es el administrador de esta instancia, configure la opción \"trusted_domain\" en \"config/config.php\". Un ejemplo de la configuración está disponible en config/config.sample.php"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js
index d830538bed3..b9fb2388ac6 100644
--- a/core/l10n/es_MX.js
+++ b/core/l10n/es_MX.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "Diciembre",
"Settings" : "Ajustes",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Seleccionar",
@@ -49,6 +48,7 @@ OC.L10N.register(
"Error loading file exists template" : "Error cargando plantilla de archivo existente",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir la sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor no tiene conexión a Internet. Esto significa que algunas de las características no funcionarán, como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones, la instalación de aplicaciones de terceros, el acceso a los archivos de forma remota o el envío de correos electrónicos de notificación. Sugerimos habilitar una conexión a Internet en este servidor para disfrutar de todas las funciones.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
"Shared" : "Compartido",
"Share" : "Compartir",
"Error" : "Error",
@@ -60,10 +60,11 @@ OC.L10N.register(
"Share with user or group …" : "Compartido con el usuario o con el grupo …",
"Share link" : "Enlace compartido",
"Password protect" : "Protección con contraseña",
- "Allow Public Upload" : "Permitir Subida Pública",
+ "Password" : "Contraseña",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
"Set expiration date" : "Establecer fecha de caducidad",
+ "Expiration" : "Caducidad",
"Expiration date" : "Fecha de caducidad",
"group" : "grupo",
"Resharing is not allowed" : "No se permite compartir de nuevo",
@@ -74,7 +75,6 @@ OC.L10N.register(
"can edit" : "puede editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
"delete" : "eliminar",
"Password protected" : "Protegido con contraseña",
"Error unsetting expiration date" : "Error eliminando fecha de caducidad",
@@ -94,12 +94,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Aplicaciones",
@@ -122,7 +118,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nombre de usuario",
"Data folder" : "Directorio de datos",
"Configure the database" : "Configurar la base de datos",
"Database user" : "Usuario de la base de datos",
@@ -134,6 +130,7 @@ OC.L10N.register(
"Finishing …" : "Finalizando …",
"%s is available. Get more information on how to update." : "%s esta disponible. Obtener mas información de como actualizar.",
"Log out" : "Salir",
+ "Search" : "Buscar",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
"Please contact your administrator." : "Por favor, contacte con el administrador.",
"remember" : "recordar",
diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json
index 99da53b91fe..fe1526ba11f 100644
--- a/core/l10n/es_MX.json
+++ b/core/l10n/es_MX.json
@@ -29,7 +29,6 @@
"December" : "Diciembre",
"Settings" : "Ajustes",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Seleccionar",
@@ -47,6 +46,7 @@
"Error loading file exists template" : "Error cargando plantilla de archivo existente",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir la sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor no tiene conexión a Internet. Esto significa que algunas de las características no funcionarán, como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones, la instalación de aplicaciones de terceros, el acceso a los archivos de forma remota o el envío de correos electrónicos de notificación. Sugerimos habilitar una conexión a Internet en este servidor para disfrutar de todas las funciones.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
"Shared" : "Compartido",
"Share" : "Compartir",
"Error" : "Error",
@@ -58,10 +58,11 @@
"Share with user or group …" : "Compartido con el usuario o con el grupo …",
"Share link" : "Enlace compartido",
"Password protect" : "Protección con contraseña",
- "Allow Public Upload" : "Permitir Subida Pública",
+ "Password" : "Contraseña",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
"Set expiration date" : "Establecer fecha de caducidad",
+ "Expiration" : "Caducidad",
"Expiration date" : "Fecha de caducidad",
"group" : "grupo",
"Resharing is not allowed" : "No se permite compartir de nuevo",
@@ -72,7 +73,6 @@
"can edit" : "puede editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
"delete" : "eliminar",
"Password protected" : "Protegido con contraseña",
"Error unsetting expiration date" : "Error eliminando fecha de caducidad",
@@ -92,12 +92,8 @@
"The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Aplicaciones",
@@ -120,7 +116,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
- "Password" : "Contraseña",
+ "Username" : "Nombre de usuario",
"Data folder" : "Directorio de datos",
"Configure the database" : "Configurar la base de datos",
"Database user" : "Usuario de la base de datos",
@@ -132,6 +128,7 @@
"Finishing …" : "Finalizando …",
"%s is available. Get more information on how to update." : "%s esta disponible. Obtener mas información de como actualizar.",
"Log out" : "Salir",
+ "Search" : "Buscar",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
"Please contact your administrator." : "Por favor, contacte con el administrador.",
"remember" : "recordar",
diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js
index 7325c6478d8..a9a6937bbaa 100644
--- a/core/l10n/et_EE.js
+++ b/core/l10n/et_EE.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link parooli vahetuseks on saadetud Sinu e-posti aadressil.<br>Kui kiri pole saabunud mõistliku aja jooksul, siis kontrolli oma spam-/rämpskirjade katalooge<br>.Kui kirja pole ka seal, siis küsi abi süsteemihaldurilt.",
"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?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
"I know what I'm doing" : "Ma tean mida teen",
- "Reset password" : "Nulli parool",
"Password can not be changed. Please contact your administrator." : "Parooli ei saa muuta. Palun kontakteeru oma süsteemihalduriga.",
"No" : "Ei",
"Yes" : "Jah",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Väga hea parool",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Veebiserveri ei ole veel korralikult seadistatud võimaldamaks failide sünkroniseerimist, kuna WebDAV liides näib olevat mittetoimiv.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Serveril puudub toimiv internetiühendus. See tähendab, et mõned funktsionaalsused, nagu näiteks väliste andmehoidlate ühendamine, teavitused uuendustest või kolmandate osapoolte rakenduste paigaldamine ei tööta. Eemalt failidele ligipääs ning teadete saatmine emailiga ei pruugi samuti toimida. Kui soovid täielikku funktsionaalsust, siis soovitame serverile tagada ligipääs internetti.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Andmete kataloog ja failid on tõenäoliselt internetis avalikult saadaval. .htaccess fail, ei toimi. Soovitame tungivalt veebiserver seadistada selliselt, et andmete kataloog ei oleks enam vabalt saadaval või tõstaksid andmete kataloogi oma veebiserveri veebi juurkataloogist mujale.",
"Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga",
"Shared" : "Jagatud",
"Shared with {recipients}" : "Jagatud {recipients}",
@@ -79,11 +79,12 @@ OC.L10N.register(
"Share link" : "Jaga linki",
"The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist",
"Password protect" : "Parooliga kaitstud",
+ "Password" : "Parool",
"Choose a password for the public link" : "Vali avaliku lingi jaoks parool",
- "Allow Public Upload" : "Luba avalik üleslaadimine",
"Email link to person" : "Saada link isikule e-postiga",
"Send" : "Saada",
"Set expiration date" : "Määra aegumise kuupäev",
+ "Expiration" : "Aegumine",
"Expiration date" : "Aegumise kuupäev",
"Adding user..." : "Kasutaja lisamine...",
"group" : "grupp",
@@ -95,7 +96,6 @@ OC.L10N.register(
"can edit" : "saab muuta",
"access control" : "ligipääsukontroll",
"create" : "loo",
- "update" : "uuenda",
"delete" : "kustuta",
"Password protected" : "Parooliga kaitstud",
"Error unsetting expiration date" : "Viga aegumise kuupäeva eemaldamisel",
@@ -117,20 +117,15 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"],
"Updating {productName} to version {version}, this may take a while." : "Uuendan {productName} versioonile {version}, see võtab veidi aega.",
"Please reload the page." : "Palun laadi see uuesti.",
- "The update was unsuccessful." : "Uuendus ebaõnnestus.",
"The update was successful. Redirecting you to ownCloud now." : "Uuendus oli edukas. Kohe suunatakse Sind ownCloudi.",
"Couldn't reset password because the token is invalid" : "Ei saanud parooli taastada, kuna märgend on vigane",
"Couldn't send reset email. Please make sure your username is correct." : "Ei suutnud lähtestada e-maili. Palun veendu, et kasutajatunnus on õige.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ei suutnud lähtestada e-maili, kuna sellel kasutajal pole e-posti määratud. Palun kontakteeru süsteemihalduriga.",
"%s password reset" : "%s parooli lähtestus",
"Use the following link to reset your password: {link}" : "Kasuta järgnevat linki oma parooli taastamiseks: {link}",
- "You will receive a link to reset your password via Email." : "Sinu parooli taastamise link saadetakse sulle e-postile.",
- "Username" : "Kasutajanimi",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. Oled sa kindel, et sa soovid jätkata?",
- "Yes, I really want to reset my password now" : "Jah, ma tõesti soovin oma parooli praegu taastada",
- "Reset" : "Algseaded",
"New password" : "Uus parool",
"New Password" : "Uus parool",
+ "Reset password" : "Nulli parool",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole toetatud ja %s ei pruugi korralikult toimida sellel platvormil. Kasuta seda omal vastutusel!",
"For the best results, please consider using a GNU/Linux server instead." : "Parema tulemuse saavitamiseks palun kaalu serveris GNU/Linux kasutamist.",
"Personal" : "Isiklik",
@@ -170,7 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Serveri korrektseks seadistuseks palun tutvu <a href=\"%s\" target=\"_blank\">dokumentatsiooniga</a>.",
"Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>",
- "Password" : "Parool",
+ "Username" : "Kasutajanimi",
"Storage & database" : "Andmehoidla ja andmebaas",
"Data folder" : "Andmete kaust",
"Configure the database" : "Seadista andmebaasi",
@@ -186,6 +181,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "See rakendus vajab toimimiseks JavaScripti. Palun <a href=\"http://enable-javascript.com/\" target=\"_blank\">luba JavaScript</a> ning laadi see leht uuesti.",
"%s is available. Get more information on how to update." : "%s on saadaval. Vaata lähemalt kuidas uuendada.",
"Log out" : "Logi välja",
+ "Search" : "Otsi",
"Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!",
"Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.",
"Forgot your password? Reset it!" : "Unustasid parooli? Taasta see!",
diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json
index 56ede97196a..21a4b56bd27 100644
--- a/core/l10n/et_EE.json
+++ b/core/l10n/et_EE.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link parooli vahetuseks on saadetud Sinu e-posti aadressil.<br>Kui kiri pole saabunud mõistliku aja jooksul, siis kontrolli oma spam-/rämpskirjade katalooge<br>.Kui kirja pole ka seal, siis küsi abi süsteemihaldurilt.",
"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?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
"I know what I'm doing" : "Ma tean mida teen",
- "Reset password" : "Nulli parool",
"Password can not be changed. Please contact your administrator." : "Parooli ei saa muuta. Palun kontakteeru oma süsteemihalduriga.",
"No" : "Ei",
"Yes" : "Jah",
@@ -63,6 +62,7 @@
"Strong password" : "Väga hea parool",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Veebiserveri ei ole veel korralikult seadistatud võimaldamaks failide sünkroniseerimist, kuna WebDAV liides näib olevat mittetoimiv.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Serveril puudub toimiv internetiühendus. See tähendab, et mõned funktsionaalsused, nagu näiteks väliste andmehoidlate ühendamine, teavitused uuendustest või kolmandate osapoolte rakenduste paigaldamine ei tööta. Eemalt failidele ligipääs ning teadete saatmine emailiga ei pruugi samuti toimida. Kui soovid täielikku funktsionaalsust, siis soovitame serverile tagada ligipääs internetti.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Andmete kataloog ja failid on tõenäoliselt internetis avalikult saadaval. .htaccess fail, ei toimi. Soovitame tungivalt veebiserver seadistada selliselt, et andmete kataloog ei oleks enam vabalt saadaval või tõstaksid andmete kataloogi oma veebiserveri veebi juurkataloogist mujale.",
"Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga",
"Shared" : "Jagatud",
"Shared with {recipients}" : "Jagatud {recipients}",
@@ -77,11 +77,12 @@
"Share link" : "Jaga linki",
"The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist",
"Password protect" : "Parooliga kaitstud",
+ "Password" : "Parool",
"Choose a password for the public link" : "Vali avaliku lingi jaoks parool",
- "Allow Public Upload" : "Luba avalik üleslaadimine",
"Email link to person" : "Saada link isikule e-postiga",
"Send" : "Saada",
"Set expiration date" : "Määra aegumise kuupäev",
+ "Expiration" : "Aegumine",
"Expiration date" : "Aegumise kuupäev",
"Adding user..." : "Kasutaja lisamine...",
"group" : "grupp",
@@ -93,7 +94,6 @@
"can edit" : "saab muuta",
"access control" : "ligipääsukontroll",
"create" : "loo",
- "update" : "uuenda",
"delete" : "kustuta",
"Password protected" : "Parooliga kaitstud",
"Error unsetting expiration date" : "Viga aegumise kuupäeva eemaldamisel",
@@ -115,20 +115,15 @@
"_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"],
"Updating {productName} to version {version}, this may take a while." : "Uuendan {productName} versioonile {version}, see võtab veidi aega.",
"Please reload the page." : "Palun laadi see uuesti.",
- "The update was unsuccessful." : "Uuendus ebaõnnestus.",
"The update was successful. Redirecting you to ownCloud now." : "Uuendus oli edukas. Kohe suunatakse Sind ownCloudi.",
"Couldn't reset password because the token is invalid" : "Ei saanud parooli taastada, kuna märgend on vigane",
"Couldn't send reset email. Please make sure your username is correct." : "Ei suutnud lähtestada e-maili. Palun veendu, et kasutajatunnus on õige.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ei suutnud lähtestada e-maili, kuna sellel kasutajal pole e-posti määratud. Palun kontakteeru süsteemihalduriga.",
"%s password reset" : "%s parooli lähtestus",
"Use the following link to reset your password: {link}" : "Kasuta järgnevat linki oma parooli taastamiseks: {link}",
- "You will receive a link to reset your password via Email." : "Sinu parooli taastamise link saadetakse sulle e-postile.",
- "Username" : "Kasutajanimi",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. Oled sa kindel, et sa soovid jätkata?",
- "Yes, I really want to reset my password now" : "Jah, ma tõesti soovin oma parooli praegu taastada",
- "Reset" : "Algseaded",
"New password" : "Uus parool",
"New Password" : "Uus parool",
+ "Reset password" : "Nulli parool",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole toetatud ja %s ei pruugi korralikult toimida sellel platvormil. Kasuta seda omal vastutusel!",
"For the best results, please consider using a GNU/Linux server instead." : "Parema tulemuse saavitamiseks palun kaalu serveris GNU/Linux kasutamist.",
"Personal" : "Isiklik",
@@ -168,7 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Serveri korrektseks seadistuseks palun tutvu <a href=\"%s\" target=\"_blank\">dokumentatsiooniga</a>.",
"Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>",
- "Password" : "Parool",
+ "Username" : "Kasutajanimi",
"Storage & database" : "Andmehoidla ja andmebaas",
"Data folder" : "Andmete kaust",
"Configure the database" : "Seadista andmebaasi",
@@ -184,6 +179,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "See rakendus vajab toimimiseks JavaScripti. Palun <a href=\"http://enable-javascript.com/\" target=\"_blank\">luba JavaScript</a> ning laadi see leht uuesti.",
"%s is available. Get more information on how to update." : "%s on saadaval. Vaata lähemalt kuidas uuendada.",
"Log out" : "Logi välja",
+ "Search" : "Otsi",
"Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!",
"Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.",
"Forgot your password? Reset it!" : "Unustasid parooli? Taasta see!",
diff --git a/core/l10n/eu.js b/core/l10n/eu.js
index e90e458a193..4628595cb0c 100644
--- a/core/l10n/eu.js
+++ b/core/l10n/eu.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"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." : "Zure pasahitza berrezartzeko lotura zure postara bidalia izan da.<br>Ez baduzu arrazoizko denbora epe batean jasotzen begiratu zure zabor-posta karpetan.<br>Hor ere ez badago kudeatzailearekin harremanetan jarri.",
"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?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?",
"I know what I'm doing" : "Badakit zer ari naizen egiten",
- "Reset password" : "Berrezarri pasahitza",
"Password can not be changed. Please contact your administrator." : "Ezin da pasahitza aldatu. Mesedez jarri harremetan zure administradorearekin.",
"No" : "Ez",
"Yes" : "Bai",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Pasahitz sendoa",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Zure web zerbitzaria ez dago oraindik ongi konfiguratuta fitxategien sinkronizazioa egiteko, WebDAV interfazea ongi ez dagoela dirudi.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Zerbitzari honen interneteko konexioa ez dabil. Honek esan nahi du kanpoko biltegiratze zerbitzuak, eguneraketen informazioa edo bestelako aplikazioen instalazioa bezalako programek ez dutela funtzionatuko. Urrunetik fitxategiak eskuratzea eta e-postak bidaltzea ere ezinezkoa izan daiteke. onwCloud-en aukera guztiak erabili ahal izateko zerbitzari honetan interneteko konexioa gaitzea aholkatzen dizugu.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Zure data karpeta eta zure fitxategiak internetetik zuzenean eskuragarri egon daitezke. .htaccess fitxategia ez du bere lana egiten. Aholkatzen dizugu zure web zerbitzaria ongi konfiguratzea data karpeta eskuragarri ez izateko edo data karpeta web zerbitzariaren dokumentu errotik mugitzea.",
"Error occurred while checking server setup" : "Errore bat gertatu da zerbitzariaren konfigurazioa egiaztatzerakoan.",
"Shared" : "Elkarbanatuta",
"Shared with {recipients}" : "{recipients}-rekin partekatua.",
@@ -79,11 +79,12 @@ OC.L10N.register(
"Share link" : "Elkarbanatu lotura",
"The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.",
"Password protect" : "Babestu pasahitzarekin",
+ "Password" : "Pasahitza",
"Choose a password for the public link" : "Aukeratu pasahitz bat esteka publikorako",
- "Allow Public Upload" : "Gaitu igotze publikoa",
"Email link to person" : "Postaz bidali lotura ",
"Send" : "Bidali",
"Set expiration date" : "Ezarri muga data",
+ "Expiration" : "Iraungitzea",
"Expiration date" : "Muga data",
"Adding user..." : "Erabiltzailea gehitzen...",
"group" : "taldea",
@@ -95,7 +96,6 @@ OC.L10N.register(
"can edit" : "editatu dezake",
"access control" : "sarrera kontrola",
"create" : "sortu",
- "update" : "eguneratu",
"delete" : "ezabatu",
"Password protected" : "Pasahitzarekin babestuta",
"Error unsetting expiration date" : "Errorea izan da muga data kentzean",
@@ -113,20 +113,15 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"Updating {productName} to version {version}, this may take a while." : "Eguneratu {productName} {version} bertsiora, bere denbora behar du.",
"Please reload the page." : "Mesedez birkargatu orria.",
- "The update was unsuccessful." : "Eguneraketak ez du arrakasta izan.",
"The update was successful. Redirecting you to ownCloud now." : "Eguneraketa ongi egin da. Orain zure ownClouderea berbideratua izango zara.",
"Couldn't reset password because the token is invalid" : "Ezin izan da pasahitza berrezarri tokena baliogabea delako",
"Couldn't send reset email. Please make sure your username is correct." : "Ezin izan da berrezartzeko eposta bidali. Ziurtatu zure erabiltzaile izena egokia dela.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ezin izan da berrezartzeko eposta bidali erabiltzaile izen honetarako eposta helbiderik ez dagoelako. Mesedez harremanetan jarri kudeatzailearekin.",
"%s password reset" : "%s pasahitza berrezarri",
"Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
- "You will receive a link to reset your password via Email." : "Zure pashitza berrezartzeko lotura bat jasoko duzu Epostaren bidez.",
- "Username" : "Erabiltzaile izena",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik. Ziur zaude aurrera jarraitu nahi duzula?",
- "Yes, I really want to reset my password now" : "Bai, nire pasahitza orain berrabiarazi nahi dut",
- "Reset" : "Berrezarri",
"New password" : "Pasahitz berria",
"New Password" : "Pasahitz Berria",
+ "Reset password" : "Berrezarri pasahitza",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
"For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.",
"Personal" : "Pertsonala",
@@ -166,7 +161,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.",
"Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat",
- "Password" : "Pasahitza",
+ "Username" : "Erabiltzaile izena",
"Storage & database" : "Biltegia & datubasea",
"Data folder" : "Datuen karpeta",
"Configure the database" : "Konfiguratu datu basea",
@@ -182,6 +177,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Aplikazio honek ongi funtzionatzeko JavaScript behar du. Mesedez <a href=\"http://enable-javascript.com/\" target=\"_blank\">gaitu JavaScript</a> eta birkargatu orri hau.",
"%s is available. Get more information on how to update." : "%s erabilgarri dago. Eguneratzeaz argibide gehiago eskuratu.",
"Log out" : "Saioa bukatu",
+ "Search" : "Bilatu",
"Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!",
"Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.",
"Forgot your password? Reset it!" : "Pasahitza ahaztu duzu? Berrezarri!",
diff --git a/core/l10n/eu.json b/core/l10n/eu.json
index d851c6e942d..2e023d84df5 100644
--- a/core/l10n/eu.json
+++ b/core/l10n/eu.json
@@ -37,7 +37,6 @@
"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." : "Zure pasahitza berrezartzeko lotura zure postara bidalia izan da.<br>Ez baduzu arrazoizko denbora epe batean jasotzen begiratu zure zabor-posta karpetan.<br>Hor ere ez badago kudeatzailearekin harremanetan jarri.",
"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?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?",
"I know what I'm doing" : "Badakit zer ari naizen egiten",
- "Reset password" : "Berrezarri pasahitza",
"Password can not be changed. Please contact your administrator." : "Ezin da pasahitza aldatu. Mesedez jarri harremetan zure administradorearekin.",
"No" : "Ez",
"Yes" : "Bai",
@@ -63,6 +62,7 @@
"Strong password" : "Pasahitz sendoa",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Zure web zerbitzaria ez dago oraindik ongi konfiguratuta fitxategien sinkronizazioa egiteko, WebDAV interfazea ongi ez dagoela dirudi.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Zerbitzari honen interneteko konexioa ez dabil. Honek esan nahi du kanpoko biltegiratze zerbitzuak, eguneraketen informazioa edo bestelako aplikazioen instalazioa bezalako programek ez dutela funtzionatuko. Urrunetik fitxategiak eskuratzea eta e-postak bidaltzea ere ezinezkoa izan daiteke. onwCloud-en aukera guztiak erabili ahal izateko zerbitzari honetan interneteko konexioa gaitzea aholkatzen dizugu.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Zure data karpeta eta zure fitxategiak internetetik zuzenean eskuragarri egon daitezke. .htaccess fitxategia ez du bere lana egiten. Aholkatzen dizugu zure web zerbitzaria ongi konfiguratzea data karpeta eskuragarri ez izateko edo data karpeta web zerbitzariaren dokumentu errotik mugitzea.",
"Error occurred while checking server setup" : "Errore bat gertatu da zerbitzariaren konfigurazioa egiaztatzerakoan.",
"Shared" : "Elkarbanatuta",
"Shared with {recipients}" : "{recipients}-rekin partekatua.",
@@ -77,11 +77,12 @@
"Share link" : "Elkarbanatu lotura",
"The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.",
"Password protect" : "Babestu pasahitzarekin",
+ "Password" : "Pasahitza",
"Choose a password for the public link" : "Aukeratu pasahitz bat esteka publikorako",
- "Allow Public Upload" : "Gaitu igotze publikoa",
"Email link to person" : "Postaz bidali lotura ",
"Send" : "Bidali",
"Set expiration date" : "Ezarri muga data",
+ "Expiration" : "Iraungitzea",
"Expiration date" : "Muga data",
"Adding user..." : "Erabiltzailea gehitzen...",
"group" : "taldea",
@@ -93,7 +94,6 @@
"can edit" : "editatu dezake",
"access control" : "sarrera kontrola",
"create" : "sortu",
- "update" : "eguneratu",
"delete" : "ezabatu",
"Password protected" : "Pasahitzarekin babestuta",
"Error unsetting expiration date" : "Errorea izan da muga data kentzean",
@@ -111,20 +111,15 @@
"_download %n file_::_download %n files_" : ["",""],
"Updating {productName} to version {version}, this may take a while." : "Eguneratu {productName} {version} bertsiora, bere denbora behar du.",
"Please reload the page." : "Mesedez birkargatu orria.",
- "The update was unsuccessful." : "Eguneraketak ez du arrakasta izan.",
"The update was successful. Redirecting you to ownCloud now." : "Eguneraketa ongi egin da. Orain zure ownClouderea berbideratua izango zara.",
"Couldn't reset password because the token is invalid" : "Ezin izan da pasahitza berrezarri tokena baliogabea delako",
"Couldn't send reset email. Please make sure your username is correct." : "Ezin izan da berrezartzeko eposta bidali. Ziurtatu zure erabiltzaile izena egokia dela.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ezin izan da berrezartzeko eposta bidali erabiltzaile izen honetarako eposta helbiderik ez dagoelako. Mesedez harremanetan jarri kudeatzailearekin.",
"%s password reset" : "%s pasahitza berrezarri",
"Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
- "You will receive a link to reset your password via Email." : "Zure pashitza berrezartzeko lotura bat jasoko duzu Epostaren bidez.",
- "Username" : "Erabiltzaile izena",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik. Ziur zaude aurrera jarraitu nahi duzula?",
- "Yes, I really want to reset my password now" : "Bai, nire pasahitza orain berrabiarazi nahi dut",
- "Reset" : "Berrezarri",
"New password" : "Pasahitz berria",
"New Password" : "Pasahitz Berria",
+ "Reset password" : "Berrezarri pasahitza",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
"For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.",
"Personal" : "Pertsonala",
@@ -164,7 +159,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.",
"Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat",
- "Password" : "Pasahitza",
+ "Username" : "Erabiltzaile izena",
"Storage & database" : "Biltegia & datubasea",
"Data folder" : "Datuen karpeta",
"Configure the database" : "Konfiguratu datu basea",
@@ -180,6 +175,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Aplikazio honek ongi funtzionatzeko JavaScript behar du. Mesedez <a href=\"http://enable-javascript.com/\" target=\"_blank\">gaitu JavaScript</a> eta birkargatu orri hau.",
"%s is available. Get more information on how to update." : "%s erabilgarri dago. Eguneratzeaz argibide gehiago eskuratu.",
"Log out" : "Saioa bukatu",
+ "Search" : "Bilatu",
"Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!",
"Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.",
"Forgot your password? Reset it!" : "Pasahitza ahaztu duzu? Berrezarri!",
diff --git a/core/l10n/fa.js b/core/l10n/fa.js
index e280bae0f58..dce3d22084a 100644
--- a/core/l10n/fa.js
+++ b/core/l10n/fa.js
@@ -35,7 +35,6 @@ OC.L10N.register(
"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>اگر آن رادر یک زمان مشخصی دریافت نکرده اید، لطفا هرزنامه/ پوشه های ناخواسته را بررسی کنید.<br>در صورت نبودن از مدیر خود بپرسید.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
"I know what I'm doing" : "اطلاع از انجام این کار دارم",
- "Reset password" : "تنظیم مجدد رمز عبور",
"Password can not be changed. Please contact your administrator." : "رمز عبور نمی تواند تغییر بکند . لطفا با مدیر سیستم تماس بگیرید .",
"No" : "نه",
"Yes" : "بله",
@@ -59,6 +58,7 @@ OC.L10N.register(
"Strong password" : "رمز عبور قوی",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "احتمالاً وب سرور شما طوری تنظیم نشده است که اجازه ی همگام سازی فایلها را بدهد زیرا به نظر میرسد رابط WebDAV از کار افتاده است.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "این سرور ارتباط اینترنتی ندارد. این بدین معناست که بعضی از امکانات نظیر مرتبط سازی یک منبع ذخیره‌ی خارجی، اطلاعات رسانی در مورد بروزرسانی‌ها یا نصب برنامه های جانبی کار نمی‌کنند. دسترسی به فایل ها از راه دور و ارسال اطلاع رسانی توسط ایمیل ممکن است همچنان کار نکند. ما پیشنهاد می‌کنیم که ارتباط اینترنتی مربوط به این سرور را فعال کنید تا تمامی امکانات را در اختیار داشته باشید.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "به احتمال زیاد پوشه‌ی data و فایل‌های شما از طریق اینترنت قابل دسترسی هستند. فایل .htaccess برنامه کار نمی‌کند. ما شدیداً توصیه می کنیم که شما وب سرور خودتان را طوری تنظیم کنید که پوشه‌ی data شما غیر قابل دسترسی باشد یا اینکه پوشه‌‎ی data را به خارج از ریشه‌ی اصلی وب سرور انتقال دهید.",
"Shared" : "اشتراک گذاشته شده",
"Shared with {recipients}" : "به اشتراک گذاشته شده با {recipients}",
"Share" : "اشتراک‌گذاری",
@@ -71,10 +71,11 @@ OC.L10N.register(
"Share with user or group …" : "به اشتراک گذاری با کاربر یا گروه",
"Share link" : "اشتراک گذاشتن لینک",
"Password protect" : "نگهداری کردن رمز عبور",
- "Allow Public Upload" : "اجازه آپلود عمومی",
+ "Password" : "گذرواژه",
"Email link to person" : "پیوند ایمیل برای شخص.",
"Send" : "ارسال",
"Set expiration date" : "تنظیم تاریخ انقضا",
+ "Expiration" : "تاریخ انقضا",
"Expiration date" : "تاریخ انقضا",
"group" : "گروه",
"Resharing is not allowed" : "اشتراک گذاری مجدد مجاز نمی باشد",
@@ -85,7 +86,6 @@ OC.L10N.register(
"can edit" : "می توان ویرایش کرد",
"access control" : "کنترل دسترسی",
"create" : "ایجاد",
- "update" : "به روز",
"delete" : "پاک کردن",
"Password protected" : "نگهداری از رمز عبور",
"Error unsetting expiration date" : "خطا در تنظیم نکردن تاریخ انقضا ",
@@ -99,15 +99,10 @@ OC.L10N.register(
"Add" : "افزودن",
"Edit tags" : "ویرایش تگ ها",
"_download %n file_::_download %n files_" : [""],
- "The update was unsuccessful." : "بروزرسانی موفقیت آمیز نبود.",
"The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.",
"Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}",
- "You will receive a link to reset your password via Email." : "شما یک نامه الکترونیکی حاوی یک لینک جهت بازسازی گذرواژه دریافت خواهید کرد.",
- "Username" : "نام کاربری",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
- "Yes, I really want to reset my password now" : "بله، من اکنون میخواهم رمز عبور خود را مجددا راه اندازی کنم.",
- "Reset" : "تنظیم مجدد",
"New password" : "گذرواژه جدید",
+ "Reset password" : "تنظیم مجدد رمز عبور",
"Personal" : "شخصی",
"Users" : "کاربران",
"Apps" : " برنامه ها",
@@ -126,7 +121,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "نسخه ی PHP شما در برابر حملات NULL Byte آسیب پذیر است.(CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "فایلها و فهرست های داده های شما قابل از اینترنت قابل دسترسی هستند، چونکه فایل htacces. کار نمی کند.",
"Create an <strong>admin account</strong>" : "لطفا یک <strong> شناسه برای مدیر</strong> بسازید",
- "Password" : "گذرواژه",
+ "Username" : "نام کاربری",
"Storage & database" : "انبارش و پایگاه داده",
"Data folder" : "پوشه اطلاعاتی",
"Configure the database" : "پایگاه داده برنامه ریزی شدند",
@@ -140,6 +135,7 @@ OC.L10N.register(
"Finishing …" : "در حال اتمام ...",
"%s is available. Get more information on how to update." : "%s در دسترس است. برای چگونگی به روز رسانی اطلاعات بیشتر را دریافت نمایید.",
"Log out" : "خروج",
+ "Search" : "جست‌و‌جو",
"remember" : "بیاد آوری",
"Log in" : "ورود",
"Alternative Logins" : "ورود متناوب",
diff --git a/core/l10n/fa.json b/core/l10n/fa.json
index e7687a02b4c..4a739e42a46 100644
--- a/core/l10n/fa.json
+++ b/core/l10n/fa.json
@@ -33,7 +33,6 @@
"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>اگر آن رادر یک زمان مشخصی دریافت نکرده اید، لطفا هرزنامه/ پوشه های ناخواسته را بررسی کنید.<br>در صورت نبودن از مدیر خود بپرسید.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
"I know what I'm doing" : "اطلاع از انجام این کار دارم",
- "Reset password" : "تنظیم مجدد رمز عبور",
"Password can not be changed. Please contact your administrator." : "رمز عبور نمی تواند تغییر بکند . لطفا با مدیر سیستم تماس بگیرید .",
"No" : "نه",
"Yes" : "بله",
@@ -57,6 +56,7 @@
"Strong password" : "رمز عبور قوی",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "احتمالاً وب سرور شما طوری تنظیم نشده است که اجازه ی همگام سازی فایلها را بدهد زیرا به نظر میرسد رابط WebDAV از کار افتاده است.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "این سرور ارتباط اینترنتی ندارد. این بدین معناست که بعضی از امکانات نظیر مرتبط سازی یک منبع ذخیره‌ی خارجی، اطلاعات رسانی در مورد بروزرسانی‌ها یا نصب برنامه های جانبی کار نمی‌کنند. دسترسی به فایل ها از راه دور و ارسال اطلاع رسانی توسط ایمیل ممکن است همچنان کار نکند. ما پیشنهاد می‌کنیم که ارتباط اینترنتی مربوط به این سرور را فعال کنید تا تمامی امکانات را در اختیار داشته باشید.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "به احتمال زیاد پوشه‌ی data و فایل‌های شما از طریق اینترنت قابل دسترسی هستند. فایل .htaccess برنامه کار نمی‌کند. ما شدیداً توصیه می کنیم که شما وب سرور خودتان را طوری تنظیم کنید که پوشه‌ی data شما غیر قابل دسترسی باشد یا اینکه پوشه‌‎ی data را به خارج از ریشه‌ی اصلی وب سرور انتقال دهید.",
"Shared" : "اشتراک گذاشته شده",
"Shared with {recipients}" : "به اشتراک گذاشته شده با {recipients}",
"Share" : "اشتراک‌گذاری",
@@ -69,10 +69,11 @@
"Share with user or group …" : "به اشتراک گذاری با کاربر یا گروه",
"Share link" : "اشتراک گذاشتن لینک",
"Password protect" : "نگهداری کردن رمز عبور",
- "Allow Public Upload" : "اجازه آپلود عمومی",
+ "Password" : "گذرواژه",
"Email link to person" : "پیوند ایمیل برای شخص.",
"Send" : "ارسال",
"Set expiration date" : "تنظیم تاریخ انقضا",
+ "Expiration" : "تاریخ انقضا",
"Expiration date" : "تاریخ انقضا",
"group" : "گروه",
"Resharing is not allowed" : "اشتراک گذاری مجدد مجاز نمی باشد",
@@ -83,7 +84,6 @@
"can edit" : "می توان ویرایش کرد",
"access control" : "کنترل دسترسی",
"create" : "ایجاد",
- "update" : "به روز",
"delete" : "پاک کردن",
"Password protected" : "نگهداری از رمز عبور",
"Error unsetting expiration date" : "خطا در تنظیم نکردن تاریخ انقضا ",
@@ -97,15 +97,10 @@
"Add" : "افزودن",
"Edit tags" : "ویرایش تگ ها",
"_download %n file_::_download %n files_" : [""],
- "The update was unsuccessful." : "بروزرسانی موفقیت آمیز نبود.",
"The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.",
"Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}",
- "You will receive a link to reset your password via Email." : "شما یک نامه الکترونیکی حاوی یک لینک جهت بازسازی گذرواژه دریافت خواهید کرد.",
- "Username" : "نام کاربری",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
- "Yes, I really want to reset my password now" : "بله، من اکنون میخواهم رمز عبور خود را مجددا راه اندازی کنم.",
- "Reset" : "تنظیم مجدد",
"New password" : "گذرواژه جدید",
+ "Reset password" : "تنظیم مجدد رمز عبور",
"Personal" : "شخصی",
"Users" : "کاربران",
"Apps" : " برنامه ها",
@@ -124,7 +119,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "نسخه ی PHP شما در برابر حملات NULL Byte آسیب پذیر است.(CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "فایلها و فهرست های داده های شما قابل از اینترنت قابل دسترسی هستند، چونکه فایل htacces. کار نمی کند.",
"Create an <strong>admin account</strong>" : "لطفا یک <strong> شناسه برای مدیر</strong> بسازید",
- "Password" : "گذرواژه",
+ "Username" : "نام کاربری",
"Storage & database" : "انبارش و پایگاه داده",
"Data folder" : "پوشه اطلاعاتی",
"Configure the database" : "پایگاه داده برنامه ریزی شدند",
@@ -138,6 +133,7 @@
"Finishing …" : "در حال اتمام ...",
"%s is available. Get more information on how to update." : "%s در دسترس است. برای چگونگی به روز رسانی اطلاعات بیشتر را دریافت نمایید.",
"Log out" : "خروج",
+ "Search" : "جست‌و‌جو",
"remember" : "بیاد آوری",
"Log in" : "ورود",
"Alternative Logins" : "ورود متناوب",
diff --git a/core/l10n/fi.js b/core/l10n/fi.js
new file mode 100644
index 00000000000..96793fe434e
--- /dev/null
+++ b/core/l10n/fi.js
@@ -0,0 +1,20 @@
+OC.L10N.register(
+ "core",
+ {
+ "Settings" : "Asetukset",
+ "No" : "EI",
+ "Yes" : "KYLLÄ",
+ "Choose" : "Valitse",
+ "_{count} file conflict_::_{count} file conflicts_" : ["",""],
+ "Cancel" : "Peruuta",
+ "Error" : "Virhe",
+ "Share link" : "Jaa linkki",
+ "Password" : "Salasana",
+ "Delete" : "Poista",
+ "Add" : "Lisää",
+ "_download %n file_::_download %n files_" : ["",""],
+ "Help" : "Apua",
+ "Username" : "Käyttäjätunnus",
+ "Log in" : "Kirjaudu sisään"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/fi.json b/core/l10n/fi.json
new file mode 100644
index 00000000000..ab23e1e7e9f
--- /dev/null
+++ b/core/l10n/fi.json
@@ -0,0 +1,18 @@
+{ "translations": {
+ "Settings" : "Asetukset",
+ "No" : "EI",
+ "Yes" : "KYLLÄ",
+ "Choose" : "Valitse",
+ "_{count} file conflict_::_{count} file conflicts_" : ["",""],
+ "Cancel" : "Peruuta",
+ "Error" : "Virhe",
+ "Share link" : "Jaa linkki",
+ "Password" : "Salasana",
+ "Delete" : "Poista",
+ "Add" : "Lisää",
+ "_download %n file_::_download %n files_" : ["",""],
+ "Help" : "Apua",
+ "Username" : "Käyttäjätunnus",
+ "Log in" : "Kirjaudu sisään"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js
index cc9fad66f8b..4efeffa9e69 100644
--- a/core/l10n/fi_FI.js
+++ b/core/l10n/fi_FI.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Turned off maintenance mode" : "Ylläpitotila laitettu pois päältä",
"Updated database" : "Tietokanta ajan tasalla",
"Checked database schema update" : "Tarkistettu tietokannan skeemapäivitys",
+ "Checked database schema update for apps" : "Tarkistettu tietokannan skeemapäivitys sovelluksille",
"Updated \"%s\" to %s" : "Päivitetty \"%s\" versioon %s",
"Disabled incompatible apps: %s" : "Yhteensopimattomat sovellukset poistettiin käytöstä: %s",
"No image or file provided" : "Kuvaa tai tiedostoa ei määritelty",
@@ -38,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linkki salasanan palauttamista varten on lähetetty sähköpostitse. Jos et saa sähköpostiviestiä kohtuullisessa ajassa, tarkista roskapostikansiot.<br>Jos et saa sähköpostiviestiä, ota yhteys paikalliseen ylläpitäjään.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"I know what I'm doing" : "Tiedän mitä teen",
- "Reset password" : "Palauta salasana",
"Password can not be changed. Please contact your administrator." : "Salasanan vaihtaminen ei onnistunut. Ota yhteys ylläpitäjään.",
"No" : "Ei",
"Yes" : "Kyllä",
@@ -46,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Virhe ladatessa tiedostopohjia: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Virhe ladatessa viestipohjaa: {error}",
+ "read-only" : "vain luku",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} tiedoston ristiriita","{count} tiedoston ristiriita"],
"One file conflict" : "Yhden tiedoston ristiriita",
"New Files" : "Uudet tiedostot",
@@ -64,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Vahva salasana",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web-palvelimen asetukset eivät ole kelvolliset tiedostojen synkronointia varten, koska WebDAV-liitäntä vaikuttaa olevan rikki.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 erillisten tallennustilojen liittäminen, ilmoitukset päivityksistä tai kolmansien osapuolten sovellusten asentaminen eivät toimi. Tiedostojen käyttäminen etäältä ja ilmoitusten lähettäminen sähköpostitse eivät myöskään välttämättä toimi. Jos haluat käyttää kaikkia palvelimen ominaisuuksia, kytke palvelin internetiin.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datahakemistosi ja kaikki tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi tällä hetkellä. Määritä verkkopalvelimen asetukset siten, ettei datahakemistosi ole suoraan käytettävissä tai siirrä kyseinen hakemisto pois verkkopalvelimen dokumenttijuuresta.",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"Shared" : "Jaettu",
"Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa",
@@ -77,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Jaa käyttäjän tai ryhmän kanssa…",
"Share link" : "Jaa linkki",
"The public link will expire no later than {days} days after it is created" : "Julkinen linkki vanhenee {days} päivän jälkeen sen luomisesta",
+ "Link" : "Linkki",
"Password protect" : "Suojaa salasanalla",
+ "Password" : "Salasana",
"Choose a password for the public link" : "Valitse salasana julkiselle linkille",
- "Allow Public Upload" : "Salli julkinen lähetys",
+ "Allow editing" : "Salli muokkaus",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Set expiration date" : "Aseta päättymispäivä",
+ "Expiration" : "Erääntyminen",
"Expiration date" : "Päättymispäivä",
"Adding user..." : "Lisätään käyttäjä...",
"group" : "ryhmä",
+ "remote" : "etä",
"Resharing is not allowed" : "Jakaminen uudelleen ei ole salittu",
"Shared in {item} with {user}" : "{item} on jaettu {user} kanssa",
"Unshare" : "Peru jakaminen",
@@ -94,7 +100,7 @@ OC.L10N.register(
"can edit" : "voi muokata",
"access control" : "Pääsyn hallinta",
"create" : "luo",
- "update" : "päivitä",
+ "change" : "muuta",
"delete" : "poista",
"Password protected" : "Salasanasuojattu",
"Error unsetting expiration date" : "Virhe purettaessa eräpäivää",
@@ -113,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Hei maailma!",
"sunny" : "aurinkoinen",
"Hello {name}, the weather is {weather}" : "Hei {name}, sää on {weather}",
+ "Hello {name}" : "Hei {name}",
"_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"],
"Updating {productName} to version {version}, this may take a while." : "Päivitetään {productName} versioon {version}, tämä saattaa kestää hetken.",
"Please reload the page." : "Päivitä sivu.",
- "The update was unsuccessful." : "Päivitys epäonnistui.",
+ "The update was unsuccessful. " : "Päivitys epäonnistui.",
"The update was successful. Redirecting you to ownCloud now." : "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi.",
"Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa koska valtuutus on virheellinen",
"Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut, koska tälle käyttäjätunnukselle ei ole määritelty sähköpostiosoitetta. Ota yhteys ylläpitäjään.",
"%s password reset" : "%s salasanan palautus",
"Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
- "You will receive a link to reset your password via Email." : "Saat sähköpostitse linkin palauttaaksesi salasanan.",
- "Username" : "Käyttäjätunnus",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut palautusavainta käyttöön, et voi käyttää tiedostojasi enää salasanan nollauksen jälkeen. Jos et ole varma mitä tehdä, ota yhteys ylläpitoon ennen kuin jatkat. Haluatko varmasti jatkaa?",
- "Yes, I really want to reset my password now" : "Kyllä, haluan palauttaa salasanani nyt",
- "Reset" : "Palauta salasana",
"New password" : "Uusi salasana",
"New Password" : "Uusi salasana",
+ "Reset password" : "Palauta salasana",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole tuettu, joten %s ei toimi kunnolla tällä alustalla. Käytä omalla vastuulla!",
"For the best results, please consider using a GNU/Linux server instead." : "Käytä parhaan lopputuloksen saamiseksi GNU/Linux-palvelinta.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-asennus toimii 32-bittisessä PHP-ympäristössä ja open_basedir on määritetty php.ini-tiedostossa. Tämä johtaa ongelmiin yli neljän gigatavun tiedostojen kanssa, eikä kyseistä toteutusta suositella.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Poista open_basedir-asetus php.ini-tiedostosta tai vaihda 64-bittiseen PHP-asennukseen.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-asennus toimii 32-bittisessä PHP-ympäristössä ja ettei cURLia ole asennettu. Tämä johtaa ongelmiin yli neljän gigatavun tiedostojen kanssa, eikä kyseistä toteutusta suositella.",
+ "Please install the cURL extension and restart your webserver." : "Asenna cURL-laajennus ja käynnistä http-palvelin uudelleen.",
"Personal" : "Henkilökohtainen",
"Users" : "Käyttäjät",
"Apps" : "Sovellukset",
@@ -150,7 +157,7 @@ OC.L10N.register(
"You can click here to return to %s." : "Napsauta tästä palataksesi %siin.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei sinä!\n\n%s jakoi kohteen %s kanssasi.\nTutustu siihen: %s\n\n",
"The share will expire on %s." : "Jakaminen päättyy %s.",
- "Cheers!" : "Kippis!",
+ "Cheers!" : "Kiitos!",
"Internal Server Error" : "Sisäinen palvelinvirhe",
"The server encountered an internal error and was unable to complete your request." : "Palvelin kohtasi sisäisen virheen, eikä pystynyt viimeistelmään pyyntöäsi.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Ota yhteys palvelimen ylläpitäjään, jos tämä virhe ilmenee useita kertoja. Lisää yhteydenottoosi alla olevat tekniset tiedot.",
@@ -169,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen asetuksien määrittämisestä on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiosta</a>.",
"Create an <strong>admin account</strong>" : "Luo <strong>ylläpitäjän tunnus</strong>",
- "Password" : "Salasana",
+ "Username" : "Käyttäjätunnus",
"Storage & database" : "Tallennus ja tietokanta",
"Data folder" : "Datakansio",
"Configure the database" : "Muokkaa tietokantaa",
@@ -185,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Tämä sovellus vaatii JavaScript-tuen toimiakseen. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Ota JavaScript käyttöön</a> ja päivitä sivu.",
"%s is available. Get more information on how to update." : "%s on saatavilla. Lue lisätietoja, miten päivitys asennetaan.",
"Log out" : "Kirjaudu ulos",
+ "Search" : "Etsi",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
"Forgot your password? Reset it!" : "Unohditko salasanasi? Palauta se!",
diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json
index 32ad46587e2..cf2008f0dea 100644
--- a/core/l10n/fi_FI.json
+++ b/core/l10n/fi_FI.json
@@ -4,6 +4,7 @@
"Turned off maintenance mode" : "Ylläpitotila laitettu pois päältä",
"Updated database" : "Tietokanta ajan tasalla",
"Checked database schema update" : "Tarkistettu tietokannan skeemapäivitys",
+ "Checked database schema update for apps" : "Tarkistettu tietokannan skeemapäivitys sovelluksille",
"Updated \"%s\" to %s" : "Päivitetty \"%s\" versioon %s",
"Disabled incompatible apps: %s" : "Yhteensopimattomat sovellukset poistettiin käytöstä: %s",
"No image or file provided" : "Kuvaa tai tiedostoa ei määritelty",
@@ -36,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linkki salasanan palauttamista varten on lähetetty sähköpostitse. Jos et saa sähköpostiviestiä kohtuullisessa ajassa, tarkista roskapostikansiot.<br>Jos et saa sähköpostiviestiä, ota yhteys paikalliseen ylläpitäjään.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"I know what I'm doing" : "Tiedän mitä teen",
- "Reset password" : "Palauta salasana",
"Password can not be changed. Please contact your administrator." : "Salasanan vaihtaminen ei onnistunut. Ota yhteys ylläpitäjään.",
"No" : "Ei",
"Yes" : "Kyllä",
@@ -44,6 +44,7 @@
"Error loading file picker template: {error}" : "Virhe ladatessa tiedostopohjia: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Virhe ladatessa viestipohjaa: {error}",
+ "read-only" : "vain luku",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} tiedoston ristiriita","{count} tiedoston ristiriita"],
"One file conflict" : "Yhden tiedoston ristiriita",
"New Files" : "Uudet tiedostot",
@@ -62,6 +63,7 @@
"Strong password" : "Vahva salasana",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web-palvelimen asetukset eivät ole kelvolliset tiedostojen synkronointia varten, koska WebDAV-liitäntä vaikuttaa olevan rikki.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 erillisten tallennustilojen liittäminen, ilmoitukset päivityksistä tai kolmansien osapuolten sovellusten asentaminen eivät toimi. Tiedostojen käyttäminen etäältä ja ilmoitusten lähettäminen sähköpostitse eivät myöskään välttämättä toimi. Jos haluat käyttää kaikkia palvelimen ominaisuuksia, kytke palvelin internetiin.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datahakemistosi ja kaikki tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi tällä hetkellä. Määritä verkkopalvelimen asetukset siten, ettei datahakemistosi ole suoraan käytettävissä tai siirrä kyseinen hakemisto pois verkkopalvelimen dokumenttijuuresta.",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"Shared" : "Jaettu",
"Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa",
@@ -75,15 +77,19 @@
"Share with user or group …" : "Jaa käyttäjän tai ryhmän kanssa…",
"Share link" : "Jaa linkki",
"The public link will expire no later than {days} days after it is created" : "Julkinen linkki vanhenee {days} päivän jälkeen sen luomisesta",
+ "Link" : "Linkki",
"Password protect" : "Suojaa salasanalla",
+ "Password" : "Salasana",
"Choose a password for the public link" : "Valitse salasana julkiselle linkille",
- "Allow Public Upload" : "Salli julkinen lähetys",
+ "Allow editing" : "Salli muokkaus",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Set expiration date" : "Aseta päättymispäivä",
+ "Expiration" : "Erääntyminen",
"Expiration date" : "Päättymispäivä",
"Adding user..." : "Lisätään käyttäjä...",
"group" : "ryhmä",
+ "remote" : "etä",
"Resharing is not allowed" : "Jakaminen uudelleen ei ole salittu",
"Shared in {item} with {user}" : "{item} on jaettu {user} kanssa",
"Unshare" : "Peru jakaminen",
@@ -92,7 +98,7 @@
"can edit" : "voi muokata",
"access control" : "Pääsyn hallinta",
"create" : "luo",
- "update" : "päivitä",
+ "change" : "muuta",
"delete" : "poista",
"Password protected" : "Salasanasuojattu",
"Error unsetting expiration date" : "Virhe purettaessa eräpäivää",
@@ -111,25 +117,26 @@
"Hello world!" : "Hei maailma!",
"sunny" : "aurinkoinen",
"Hello {name}, the weather is {weather}" : "Hei {name}, sää on {weather}",
+ "Hello {name}" : "Hei {name}",
"_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"],
"Updating {productName} to version {version}, this may take a while." : "Päivitetään {productName} versioon {version}, tämä saattaa kestää hetken.",
"Please reload the page." : "Päivitä sivu.",
- "The update was unsuccessful." : "Päivitys epäonnistui.",
+ "The update was unsuccessful. " : "Päivitys epäonnistui.",
"The update was successful. Redirecting you to ownCloud now." : "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi.",
"Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa koska valtuutus on virheellinen",
"Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut, koska tälle käyttäjätunnukselle ei ole määritelty sähköpostiosoitetta. Ota yhteys ylläpitäjään.",
"%s password reset" : "%s salasanan palautus",
"Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
- "You will receive a link to reset your password via Email." : "Saat sähköpostitse linkin palauttaaksesi salasanan.",
- "Username" : "Käyttäjätunnus",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut palautusavainta käyttöön, et voi käyttää tiedostojasi enää salasanan nollauksen jälkeen. Jos et ole varma mitä tehdä, ota yhteys ylläpitoon ennen kuin jatkat. Haluatko varmasti jatkaa?",
- "Yes, I really want to reset my password now" : "Kyllä, haluan palauttaa salasanani nyt",
- "Reset" : "Palauta salasana",
"New password" : "Uusi salasana",
"New Password" : "Uusi salasana",
+ "Reset password" : "Palauta salasana",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole tuettu, joten %s ei toimi kunnolla tällä alustalla. Käytä omalla vastuulla!",
"For the best results, please consider using a GNU/Linux server instead." : "Käytä parhaan lopputuloksen saamiseksi GNU/Linux-palvelinta.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-asennus toimii 32-bittisessä PHP-ympäristössä ja open_basedir on määritetty php.ini-tiedostossa. Tämä johtaa ongelmiin yli neljän gigatavun tiedostojen kanssa, eikä kyseistä toteutusta suositella.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Poista open_basedir-asetus php.ini-tiedostosta tai vaihda 64-bittiseen PHP-asennukseen.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-asennus toimii 32-bittisessä PHP-ympäristössä ja ettei cURLia ole asennettu. Tämä johtaa ongelmiin yli neljän gigatavun tiedostojen kanssa, eikä kyseistä toteutusta suositella.",
+ "Please install the cURL extension and restart your webserver." : "Asenna cURL-laajennus ja käynnistä http-palvelin uudelleen.",
"Personal" : "Henkilökohtainen",
"Users" : "Käyttäjät",
"Apps" : "Sovellukset",
@@ -148,7 +155,7 @@
"You can click here to return to %s." : "Napsauta tästä palataksesi %siin.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei sinä!\n\n%s jakoi kohteen %s kanssasi.\nTutustu siihen: %s\n\n",
"The share will expire on %s." : "Jakaminen päättyy %s.",
- "Cheers!" : "Kippis!",
+ "Cheers!" : "Kiitos!",
"Internal Server Error" : "Sisäinen palvelinvirhe",
"The server encountered an internal error and was unable to complete your request." : "Palvelin kohtasi sisäisen virheen, eikä pystynyt viimeistelmään pyyntöäsi.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Ota yhteys palvelimen ylläpitäjään, jos tämä virhe ilmenee useita kertoja. Lisää yhteydenottoosi alla olevat tekniset tiedot.",
@@ -167,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen asetuksien määrittämisestä on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiosta</a>.",
"Create an <strong>admin account</strong>" : "Luo <strong>ylläpitäjän tunnus</strong>",
- "Password" : "Salasana",
+ "Username" : "Käyttäjätunnus",
"Storage & database" : "Tallennus ja tietokanta",
"Data folder" : "Datakansio",
"Configure the database" : "Muokkaa tietokantaa",
@@ -183,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Tämä sovellus vaatii JavaScript-tuen toimiakseen. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Ota JavaScript käyttöön</a> ja päivitä sivu.",
"%s is available. Get more information on how to update." : "%s on saatavilla. Lue lisätietoja, miten päivitys asennetaan.",
"Log out" : "Kirjaudu ulos",
+ "Search" : "Etsi",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
"Forgot your password? Reset it!" : "Unohditko salasanasi? Palauta se!",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index bf0c26e1e0e..ebb0c87689a 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"Turned off maintenance mode" : "Mode de maintenance désactivé",
"Updated database" : "Base de données mise à jour",
"Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée",
- "Checked database schema update for apps" : "La mise à jour du schéma de la base de données pour les applications a été vérifiée",
+ "Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée",
"Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s",
"Disabled incompatible apps: %s" : "Applications incompatibles désactivées : %s",
"No image or file provided" : "Aucun fichier fourni",
@@ -39,7 +39,6 @@ OC.L10N.register(
"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." : "Le lien permettant de réinitialiser votre mot de passe vient d'être envoyé à votre adresse de courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, vérifiez votre dossier de pourriels/spams.<br>Si besoin, contactez votre administrateur.",
"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 clef 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(e) de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"I know what I'm doing" : "Je sais ce que je fais",
- "Reset password" : "Réinitialiser le mot de passe",
"Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.",
"No" : "Non",
"Yes" : "Oui",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Erreur lors du chargement du modèle du sélecteur de fichiers : {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Erreur de chargement du modèle de message : {error}",
+ "read-only" : "Lecture seule",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} fichier en conflit","{count} fichiers en conflit"],
"One file conflict" : "Un conflit de fichier",
"New Files" : "Nouveaux fichiers",
@@ -63,8 +63,9 @@ OC.L10N.register(
"So-so password" : "Mot de passe tout juste acceptable",
"Good password" : "Mot de passe de sécurité suffisante",
"Strong password" : "Mot de passe fort",
- "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav semble ne pas fonctionner.",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers car l'interface WebDav semble ne pas fonctionner.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 ne fonctionneront pas non plus. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou bien de le déplacer à l'extérieur de la racine du serveur web.",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"Shared" : "Partagé",
"Shared with {recipients}" : "Partagé avec {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Partager avec un utilisateur ou un groupe...",
"Share link" : "Partager par lien public",
"The public link will expire no later than {days} days after it is created" : "Ce lien public expirera au plus tard {days} jours après sa création.",
+ "Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
+ "Password" : "Mot de passe",
"Choose a password for the public link" : "Choisissez un mot de passe pour le lien public",
- "Allow Public Upload" : "Autoriser l'ajout de fichiers par des utilisateurs non enregistrés",
+ "Allow editing" : "Permettre la modification",
"Email link to person" : "Envoyer le lien par courriel",
"Send" : "Envoyer",
"Set expiration date" : "Spécifier une date d'expiration",
+ "Expiration" : "Expiration",
"Expiration date" : "Date d'expiration",
- "Adding user..." : "Utilisateur en cours d'ajout...",
+ "Adding user..." : "Ajout de l'utilisateur...",
"group" : "groupe",
+ "remote" : "distant",
"Resharing is not allowed" : "Le repartage n'est pas autorisé",
"Shared in {item} with {user}" : "Partagé dans {item} avec {user}",
"Unshare" : "Ne plus partager",
@@ -95,12 +100,12 @@ OC.L10N.register(
"can edit" : "peut modifier",
"access control" : "contrôle d'accès",
"create" : "créer",
- "update" : "mettre à jour",
+ "change" : "modification",
"delete" : "supprimer",
"Password protected" : "Protégé par mot de passe",
"Error unsetting expiration date" : "Erreur lors de la suppression de la date d'expiration",
"Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration",
- "Sending ..." : "Envoi …",
+ "Sending ..." : "Envoi…",
"Email sent" : "Courriel envoyé",
"Warning" : "Attention",
"The object type is not specified." : "Le type d'objet n'est pas spécifié.",
@@ -117,22 +122,22 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["Télécharger %n fichier","Télécharger %n fichiers"],
"Updating {productName} to version {version}, this may take a while." : "La mise à jour de {productName} vers la version {version} est en cours. Cela peut prendre un certain temps.",
"Please reload the page." : "Veuillez recharger la page.",
- "The update was unsuccessful." : "La mise à jour a échoué.",
+ "The update was unsuccessful. " : "La mise à jour a échoué.",
"The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé(e) vers ownCloud.",
"Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.",
"Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.",
"%s password reset" : "Réinitialisation de votre mot de passe %s",
"Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
- "You will receive a link to reset your password via Email." : "Vous allez recevoir un courriel contenant un lien pour réinitialiser votre mot de passe.",
- "Username" : "Nom d'utilisateur",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef 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é. Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de poursuivre. Voulez-vous vraiment continuer ?",
- "Yes, I really want to reset my password now" : "Oui, je veux vraiment réinitialiser mon mot de passe maintenant",
- "Reset" : "Réinitialiser",
"New password" : "Nouveau mot de passe",
"New Password" : "Nouveau mot de passe",
+ "Reset password" : "Réinitialiser le mot de passe",
"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 !",
"For the best results, please consider using a GNU/Linux server instead." : "Pour obtenir les meilleurs résultats, vous devriez utiliser un serveur GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Il semble que cette instance %s fonctionne dans un environnement PHP 32 bits et que le open_basedir a été configuré dans php.ini. Cela posera des problèmes avec les fichiers de taille supérieure à 4 Go et est fortement déconseillé.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Veuillez supprimer le paramètre open_basedir de votre php.ini ou passer à un environnement PHP 64 bits.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Il semble que cette instance %s fonctionne dans un environnement PHP 32 bits et que cURL ne soit pas installé. Cela posera des problèmes avec les fichiers de taille supérieure à 4 Go et est fortement déconseillé.",
+ "Please install the cURL extension and restart your webserver." : "Veuillez installer l'extension cURL et redémarrer votre serveur web.",
"Personal" : "Personnel",
"Users" : "Utilisateurs",
"Apps" : "Applications",
@@ -170,7 +175,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Votre répertoire de données est certainement accessible depuis l'internet car le fichier .htaccess ne fonctionne pas.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Créer un <strong>compte administrateur</strong>",
- "Password" : "Mot de passe",
+ "Username" : "Nom d'utilisateur",
"Storage & database" : "Stockage & base de données",
"Data folder" : "Répertoire des données",
"Configure the database" : "Configurer la base de données",
@@ -186,6 +191,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Cette application nécessite JavaScript pour fonctionner correctement. Veuillez <a href=\"http://www.enable-javascript.com/fr/\" target=\"_blank\">activer JavaScript</a> puis charger à nouveau cette page.",
"%s is available. Get more information on how to update." : "%s est disponible. Obtenez plus d'informations sur la façon de mettre à jour.",
"Log out" : "Se déconnecter",
+ "Search" : "Rechercher",
"Server side authentication failed!" : "L'authentification sur le serveur a échoué !",
"Please contact your administrator." : "Veuillez contacter votre administrateur.",
"Forgot your password? Reset it!" : "Mot de passe oublié ? Réinitialisez-le !",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 75f11a37b12..e82adf2008f 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -4,7 +4,7 @@
"Turned off maintenance mode" : "Mode de maintenance désactivé",
"Updated database" : "Base de données mise à jour",
"Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée",
- "Checked database schema update for apps" : "La mise à jour du schéma de la base de données pour les applications a été vérifiée",
+ "Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée",
"Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s",
"Disabled incompatible apps: %s" : "Applications incompatibles désactivées : %s",
"No image or file provided" : "Aucun fichier fourni",
@@ -37,7 +37,6 @@
"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." : "Le lien permettant de réinitialiser votre mot de passe vient d'être envoyé à votre adresse de courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, vérifiez votre dossier de pourriels/spams.<br>Si besoin, contactez votre administrateur.",
"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 clef 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(e) de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"I know what I'm doing" : "Je sais ce que je fais",
- "Reset password" : "Réinitialiser le mot de passe",
"Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.",
"No" : "Non",
"Yes" : "Oui",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Erreur lors du chargement du modèle du sélecteur de fichiers : {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Erreur de chargement du modèle de message : {error}",
+ "read-only" : "Lecture seule",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} fichier en conflit","{count} fichiers en conflit"],
"One file conflict" : "Un conflit de fichier",
"New Files" : "Nouveaux fichiers",
@@ -61,8 +61,9 @@
"So-so password" : "Mot de passe tout juste acceptable",
"Good password" : "Mot de passe de sécurité suffisante",
"Strong password" : "Mot de passe fort",
- "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav semble ne pas fonctionner.",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers car l'interface WebDav semble ne pas fonctionner.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 ne fonctionneront pas non plus. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou bien de le déplacer à l'extérieur de la racine du serveur web.",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"Shared" : "Partagé",
"Shared with {recipients}" : "Partagé avec {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Partager avec un utilisateur ou un groupe...",
"Share link" : "Partager par lien public",
"The public link will expire no later than {days} days after it is created" : "Ce lien public expirera au plus tard {days} jours après sa création.",
+ "Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
+ "Password" : "Mot de passe",
"Choose a password for the public link" : "Choisissez un mot de passe pour le lien public",
- "Allow Public Upload" : "Autoriser l'ajout de fichiers par des utilisateurs non enregistrés",
+ "Allow editing" : "Permettre la modification",
"Email link to person" : "Envoyer le lien par courriel",
"Send" : "Envoyer",
"Set expiration date" : "Spécifier une date d'expiration",
+ "Expiration" : "Expiration",
"Expiration date" : "Date d'expiration",
- "Adding user..." : "Utilisateur en cours d'ajout...",
+ "Adding user..." : "Ajout de l'utilisateur...",
"group" : "groupe",
+ "remote" : "distant",
"Resharing is not allowed" : "Le repartage n'est pas autorisé",
"Shared in {item} with {user}" : "Partagé dans {item} avec {user}",
"Unshare" : "Ne plus partager",
@@ -93,12 +98,12 @@
"can edit" : "peut modifier",
"access control" : "contrôle d'accès",
"create" : "créer",
- "update" : "mettre à jour",
+ "change" : "modification",
"delete" : "supprimer",
"Password protected" : "Protégé par mot de passe",
"Error unsetting expiration date" : "Erreur lors de la suppression de la date d'expiration",
"Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration",
- "Sending ..." : "Envoi …",
+ "Sending ..." : "Envoi…",
"Email sent" : "Courriel envoyé",
"Warning" : "Attention",
"The object type is not specified." : "Le type d'objet n'est pas spécifié.",
@@ -115,22 +120,22 @@
"_download %n file_::_download %n files_" : ["Télécharger %n fichier","Télécharger %n fichiers"],
"Updating {productName} to version {version}, this may take a while." : "La mise à jour de {productName} vers la version {version} est en cours. Cela peut prendre un certain temps.",
"Please reload the page." : "Veuillez recharger la page.",
- "The update was unsuccessful." : "La mise à jour a échoué.",
+ "The update was unsuccessful. " : "La mise à jour a échoué.",
"The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé(e) vers ownCloud.",
"Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.",
"Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.",
"%s password reset" : "Réinitialisation de votre mot de passe %s",
"Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
- "You will receive a link to reset your password via Email." : "Vous allez recevoir un courriel contenant un lien pour réinitialiser votre mot de passe.",
- "Username" : "Nom d'utilisateur",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef 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é. Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de poursuivre. Voulez-vous vraiment continuer ?",
- "Yes, I really want to reset my password now" : "Oui, je veux vraiment réinitialiser mon mot de passe maintenant",
- "Reset" : "Réinitialiser",
"New password" : "Nouveau mot de passe",
"New Password" : "Nouveau mot de passe",
+ "Reset password" : "Réinitialiser le mot de passe",
"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 !",
"For the best results, please consider using a GNU/Linux server instead." : "Pour obtenir les meilleurs résultats, vous devriez utiliser un serveur GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Il semble que cette instance %s fonctionne dans un environnement PHP 32 bits et que le open_basedir a été configuré dans php.ini. Cela posera des problèmes avec les fichiers de taille supérieure à 4 Go et est fortement déconseillé.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Veuillez supprimer le paramètre open_basedir de votre php.ini ou passer à un environnement PHP 64 bits.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Il semble que cette instance %s fonctionne dans un environnement PHP 32 bits et que cURL ne soit pas installé. Cela posera des problèmes avec les fichiers de taille supérieure à 4 Go et est fortement déconseillé.",
+ "Please install the cURL extension and restart your webserver." : "Veuillez installer l'extension cURL et redémarrer votre serveur web.",
"Personal" : "Personnel",
"Users" : "Utilisateurs",
"Apps" : "Applications",
@@ -168,7 +173,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Votre répertoire de données est certainement accessible depuis l'internet car le fichier .htaccess ne fonctionne pas.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Créer un <strong>compte administrateur</strong>",
- "Password" : "Mot de passe",
+ "Username" : "Nom d'utilisateur",
"Storage & database" : "Stockage & base de données",
"Data folder" : "Répertoire des données",
"Configure the database" : "Configurer la base de données",
@@ -184,6 +189,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Cette application nécessite JavaScript pour fonctionner correctement. Veuillez <a href=\"http://www.enable-javascript.com/fr/\" target=\"_blank\">activer JavaScript</a> puis charger à nouveau cette page.",
"%s is available. Get more information on how to update." : "%s est disponible. Obtenez plus d'informations sur la façon de mettre à jour.",
"Log out" : "Se déconnecter",
+ "Search" : "Rechercher",
"Server side authentication failed!" : "L'authentification sur le serveur a échoué !",
"Please contact your administrator." : "Veuillez contacter votre administrateur.",
"Forgot your password? Reset it!" : "Mot de passe oublié ? Réinitialisez-le !",
diff --git a/core/l10n/gl.js b/core/l10n/gl.js
index 724775644dc..638c7ef0182 100644
--- a/core/l10n/gl.js
+++ b/core/l10n/gl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A ligazón para restabelecer o seu contrasinal foi enviada ao seu correo. Se non a recibe nun prazo razoábel de tempo, vexa o seu cartafol de correo lixo. <br> Se non está ali pregúntelle ao administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere?",
"I know what I'm doing" : "Sei o estou a facer",
- "Reset password" : "Restabelecer o contrasinal",
"Password can not be changed. Please contact your administrator." : "Non é posíbel cambiar o contrasinal. Póñase en contacto co administrador.",
"No" : "Non",
"Yes" : "Si",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Produciuse un erro ao cargar o modelo do selector: {error}",
"Ok" : "Aceptar",
"Error loading message template: {error}" : "Produciuse un erro ao cargar o modelo da mensaxe: {error}",
+ "read-only" : "só lectura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflito de ficheiro","{count} conflitos de ficheiros"],
"One file conflict" : "Un conflito de ficheiro",
"New Files" : "Ficheiros novos",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Contrasinal forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "O seu servidor web aínda non está configurado axeidamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor non ten conexión a Internet. Isto significa que algunhas das funcionalidades como a montaxe de almacenamento externo, as notificacións sobre actualizacións ou instalación de aplicacións de terceiros non funcionan. O acceso aos ficheiros de forma remota e o envío de mensaxes de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet deste servidor se quere dispor de todas as funcionalidades.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través de internet. O ficheiro .htaccess non está a traballar. Suxerímoslle que configure o seu servidor web de tal maneira que o cartafol de datos non estea accesíbel ou que mova o o directorio de datos fóra da raíz de documentos do servidor web.",
"Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor",
"Shared" : "Compartido",
"Shared with {recipients}" : "Compartido con {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Compartir cun usuario ou grupo ...",
"Share link" : "Ligazón para compartir",
"The public link will expire no later than {days} days after it is created" : "A ligazón pública caducará, a máis tardar, {days} días após a súa creación",
+ "Link" : "Ligazón",
"Password protect" : "Protexido con contrasinal",
+ "Password" : "Contrasinal",
"Choose a password for the public link" : "Escolla un contrasinal para a ligazón pública",
- "Allow Public Upload" : "Permitir o envío público",
+ "Allow editing" : "Permitir a edición",
"Email link to person" : "Enviar ligazón por correo",
"Send" : "Enviar",
"Set expiration date" : "Definir a data de caducidade",
+ "Expiration" : "Caducidade",
"Expiration date" : "Data de caducidade",
"Adding user..." : "Engadindo usuario...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "Non se permite volver compartir",
"Shared in {item} with {user}" : "Compartido en {item} con {user}",
"Unshare" : "Deixar de compartir",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "pode editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
+ "change" : "cambio",
"delete" : "eliminar",
"Password protected" : "Protexido con contrasinal",
"Error unsetting expiration date" : "Produciuse un erro ao retirar a data de caducidade",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Hola mundo!",
"sunny" : "soleado",
"Hello {name}, the weather is {weather}" : "Olá {name}, o tempo é {weather}",
+ "Hello {name}" : "Ola {name}",
"_download %n file_::_download %n files_" : ["descargar %n ficheiro","descargar %n ficheiros"],
"Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a versión {version}, isto pode levar un anaco.",
"Please reload the page." : "Volva cargar a páxina.",
- "The update was unsuccessful." : "A actualización foi satisfactoria.",
+ "The update was unsuccessful. " : "Fracasou a actualización.",
"The update was successful. Redirecting you to ownCloud now." : "A actualización realizouse correctamente. Redirixíndoo agora á ownCloud.",
"Couldn't reset password because the token is invalid" : "No, foi posíbel restabelecer o contrasinal, a marca non é correcta",
"Couldn't send reset email. Please make sure your username is correct." : "Non foi posíbel enviar o coreo do restablecemento. Asegúrese de que o nome de usuario é o correcto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.",
"%s password reset" : "Restabelecer o contrasinal %s",
"Use the following link to reset your password: {link}" : "Usa a seguinte ligazón para restabelecer o contrasinal: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá unha ligazón por correo para restabelecer o contrasinal",
- "Username" : "Nome de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os ficheiros están cifrados. Se aínda non activou a chave de recuperación non haberá xeito de recuperar os datos unha vez que se teña restabelecido o contrasinal. Se non ten certeza do que ten que facer, póñase en contacto co administrador antes de continuar. Confirma que quere continuar?",
- "Yes, I really want to reset my password now" : "Si, confirmo que quero restabelecer agora o meu contrasinal",
- "Reset" : "Restabelecer",
"New password" : "Novo contrasinal",
"New Password" : "Novo contrasinal",
+ "Reset password" : "Restabelecer o contrasinal",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non é compatíbel e %s non funcionará correctamente nesta plataforma. Úseo baixo o seu risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter mellores resultados, considere o emprego dun servidor GNU/Linux no seu canto.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Semella que está instancia %s está a executarse nun entorno de 32 bits e o PHP open_basedir foi configurado en php.ini. Isto dará lugar a problemas con ficheiros de máis de 4GB e é moi desalentador.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Elimine a configuración open_basedir no php.ini ou cambie a PHP 64 bits.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Semella que está instancia %s está a executarse nun entorno de 32 bits e cURL non está instalado. Isto dará lugar a problemas con ficheiros de máis de 4GB e é moi desalentador.",
+ "Please install the cURL extension and restart your webserver." : "Instale a extensión cURL e reinicie o servidor web.",
"Personal" : "Persoal",
"Users" : "Usuarios",
"Apps" : "Aplicacións",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear unha <strong>contra de administrador</strong>",
- "Password" : "Contrasinal",
+ "Username" : "Nome de usuario",
"Storage & database" : "Almacenamento e base de datos",
"Data folder" : "Cartafol de datos",
"Configure the database" : "Configurar a base de datos",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Este aplicativo precisa JavaScript para funcionar. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">habilite JavaScript</a> e recargue a páxina.",
"%s is available. Get more information on how to update." : "%s está dispoñíbel. Obteña máis información sobre como actualizar.",
"Log out" : "Desconectar",
+ "Search" : "Buscar",
"Server side authentication failed!" : "A autenticación fracasou do lado do servidor!",
"Please contact your administrator." : "Contacte co administrador.",
"Forgot your password? Reset it!" : "Esqueceu o contrasinal? Restabelézao!",
diff --git a/core/l10n/gl.json b/core/l10n/gl.json
index 7715f3bebbf..0c45e59cc86 100644
--- a/core/l10n/gl.json
+++ b/core/l10n/gl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A ligazón para restabelecer o seu contrasinal foi enviada ao seu correo. Se non a recibe nun prazo razoábel de tempo, vexa o seu cartafol de correo lixo. <br> Se non está ali pregúntelle ao administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere?",
"I know what I'm doing" : "Sei o estou a facer",
- "Reset password" : "Restabelecer o contrasinal",
"Password can not be changed. Please contact your administrator." : "Non é posíbel cambiar o contrasinal. Póñase en contacto co administrador.",
"No" : "Non",
"Yes" : "Si",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Produciuse un erro ao cargar o modelo do selector: {error}",
"Ok" : "Aceptar",
"Error loading message template: {error}" : "Produciuse un erro ao cargar o modelo da mensaxe: {error}",
+ "read-only" : "só lectura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflito de ficheiro","{count} conflitos de ficheiros"],
"One file conflict" : "Un conflito de ficheiro",
"New Files" : "Ficheiros novos",
@@ -63,6 +63,7 @@
"Strong password" : "Contrasinal forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "O seu servidor web aínda non está configurado axeidamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor non ten conexión a Internet. Isto significa que algunhas das funcionalidades como a montaxe de almacenamento externo, as notificacións sobre actualizacións ou instalación de aplicacións de terceiros non funcionan. O acceso aos ficheiros de forma remota e o envío de mensaxes de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet deste servidor se quere dispor de todas as funcionalidades.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través de internet. O ficheiro .htaccess non está a traballar. Suxerímoslle que configure o seu servidor web de tal maneira que o cartafol de datos non estea accesíbel ou que mova o o directorio de datos fóra da raíz de documentos do servidor web.",
"Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor",
"Shared" : "Compartido",
"Shared with {recipients}" : "Compartido con {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Compartir cun usuario ou grupo ...",
"Share link" : "Ligazón para compartir",
"The public link will expire no later than {days} days after it is created" : "A ligazón pública caducará, a máis tardar, {days} días após a súa creación",
+ "Link" : "Ligazón",
"Password protect" : "Protexido con contrasinal",
+ "Password" : "Contrasinal",
"Choose a password for the public link" : "Escolla un contrasinal para a ligazón pública",
- "Allow Public Upload" : "Permitir o envío público",
+ "Allow editing" : "Permitir a edición",
"Email link to person" : "Enviar ligazón por correo",
"Send" : "Enviar",
"Set expiration date" : "Definir a data de caducidade",
+ "Expiration" : "Caducidade",
"Expiration date" : "Data de caducidade",
"Adding user..." : "Engadindo usuario...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "Non se permite volver compartir",
"Shared in {item} with {user}" : "Compartido en {item} con {user}",
"Unshare" : "Deixar de compartir",
@@ -93,7 +98,7 @@
"can edit" : "pode editar",
"access control" : "control de acceso",
"create" : "crear",
- "update" : "actualizar",
+ "change" : "cambio",
"delete" : "eliminar",
"Password protected" : "Protexido con contrasinal",
"Error unsetting expiration date" : "Produciuse un erro ao retirar a data de caducidade",
@@ -112,25 +117,26 @@
"Hello world!" : "Hola mundo!",
"sunny" : "soleado",
"Hello {name}, the weather is {weather}" : "Olá {name}, o tempo é {weather}",
+ "Hello {name}" : "Ola {name}",
"_download %n file_::_download %n files_" : ["descargar %n ficheiro","descargar %n ficheiros"],
"Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a versión {version}, isto pode levar un anaco.",
"Please reload the page." : "Volva cargar a páxina.",
- "The update was unsuccessful." : "A actualización foi satisfactoria.",
+ "The update was unsuccessful. " : "Fracasou a actualización.",
"The update was successful. Redirecting you to ownCloud now." : "A actualización realizouse correctamente. Redirixíndoo agora á ownCloud.",
"Couldn't reset password because the token is invalid" : "No, foi posíbel restabelecer o contrasinal, a marca non é correcta",
"Couldn't send reset email. Please make sure your username is correct." : "Non foi posíbel enviar o coreo do restablecemento. Asegúrese de que o nome de usuario é o correcto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.",
"%s password reset" : "Restabelecer o contrasinal %s",
"Use the following link to reset your password: {link}" : "Usa a seguinte ligazón para restabelecer o contrasinal: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá unha ligazón por correo para restabelecer o contrasinal",
- "Username" : "Nome de usuario",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os ficheiros están cifrados. Se aínda non activou a chave de recuperación non haberá xeito de recuperar os datos unha vez que se teña restabelecido o contrasinal. Se non ten certeza do que ten que facer, póñase en contacto co administrador antes de continuar. Confirma que quere continuar?",
- "Yes, I really want to reset my password now" : "Si, confirmo que quero restabelecer agora o meu contrasinal",
- "Reset" : "Restabelecer",
"New password" : "Novo contrasinal",
"New Password" : "Novo contrasinal",
+ "Reset password" : "Restabelecer o contrasinal",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non é compatíbel e %s non funcionará correctamente nesta plataforma. Úseo baixo o seu risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter mellores resultados, considere o emprego dun servidor GNU/Linux no seu canto.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Semella que está instancia %s está a executarse nun entorno de 32 bits e o PHP open_basedir foi configurado en php.ini. Isto dará lugar a problemas con ficheiros de máis de 4GB e é moi desalentador.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Elimine a configuración open_basedir no php.ini ou cambie a PHP 64 bits.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Semella que está instancia %s está a executarse nun entorno de 32 bits e cURL non está instalado. Isto dará lugar a problemas con ficheiros de máis de 4GB e é moi desalentador.",
+ "Please install the cURL extension and restart your webserver." : "Instale a extensión cURL e reinicie o servidor web.",
"Personal" : "Persoal",
"Users" : "Usuarios",
"Apps" : "Aplicacións",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear unha <strong>contra de administrador</strong>",
- "Password" : "Contrasinal",
+ "Username" : "Nome de usuario",
"Storage & database" : "Almacenamento e base de datos",
"Data folder" : "Cartafol de datos",
"Configure the database" : "Configurar a base de datos",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Este aplicativo precisa JavaScript para funcionar. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">habilite JavaScript</a> e recargue a páxina.",
"%s is available. Get more information on how to update." : "%s está dispoñíbel. Obteña máis información sobre como actualizar.",
"Log out" : "Desconectar",
+ "Search" : "Buscar",
"Server side authentication failed!" : "A autenticación fracasou do lado do servidor!",
"Please contact your administrator." : "Contacte co administrador.",
"Forgot your password? Reset it!" : "Esqueceu o contrasinal? Restabelézao!",
diff --git a/core/l10n/he.js b/core/l10n/he.js
index 206e0c0de01..a1dd1661b3d 100644
--- a/core/l10n/he.js
+++ b/core/l10n/he.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "דצמבר",
"Settings" : "הגדרות",
"Saving..." : "שמירה…",
- "Reset password" : "איפוס ססמה",
"No" : "לא",
"Yes" : "כן",
"Choose" : "בחירה",
@@ -41,6 +40,7 @@ OC.L10N.register(
"Shared with you by {owner}" : "שותף אתך על ידי {owner}",
"Share link" : "קישור לשיתוף",
"Password protect" : "הגנה בססמה",
+ "Password" : "סיסמא",
"Email link to person" : "שליחת קישור בדוא״ל למשתמש",
"Send" : "שליחה",
"Set expiration date" : "הגדרת תאריך תפוגה",
@@ -53,7 +53,6 @@ OC.L10N.register(
"can edit" : "ניתן לערוך",
"access control" : "בקרת גישה",
"create" : "יצירה",
- "update" : "עדכון",
"delete" : "מחיקה",
"Password protected" : "מוגן בססמה",
"Error unsetting expiration date" : "אירעה שגיאה בביטול תאריך התפוגה",
@@ -67,10 +66,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "תהליך העדכון הסתיים בהצלחה. עכשיו מנתב אותך אל ownCloud.",
"Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
- "You will receive a link to reset your password via Email." : "יישלח לתיבת הדוא״ל שלך קישור לאיפוס הססמה.",
- "Username" : "שם משתמש",
- "Yes, I really want to reset my password now" : "כן, אני רוצה לאפס את הסיסמה שלי עכשיו.",
"New password" : "ססמה חדשה",
+ "Reset password" : "איפוס ססמה",
"Personal" : "אישי",
"Users" : "משתמשים",
"Apps" : "יישומים",
@@ -82,7 +79,7 @@ OC.L10N.register(
"Please update your PHP installation to use %s securely." : "נא לעדכן את התקנת ה-PHP שלך כדי להשתמש ב-%s בצורה מאובטחת.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.",
"Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>",
- "Password" : "סיסמא",
+ "Username" : "שם משתמש",
"Data folder" : "תיקיית נתונים",
"Configure the database" : "הגדרת מסד הנתונים",
"Database user" : "שם משתמש במסד הנתונים",
@@ -93,6 +90,7 @@ OC.L10N.register(
"Finish setup" : "סיום התקנה",
"%s is available. Get more information on how to update." : "%s זמינה להורדה. ניתן ללחוץ כדי לקבל מידע נוסף כיצד לעדכן.",
"Log out" : "התנתקות",
+ "Search" : "חיפוש",
"remember" : "שמירת הססמה",
"Log in" : "כניסה",
"Alternative Logins" : "כניסות אלטרנטיביות"
diff --git a/core/l10n/he.json b/core/l10n/he.json
index 437098c104f..75d1ecd8723 100644
--- a/core/l10n/he.json
+++ b/core/l10n/he.json
@@ -20,7 +20,6 @@
"December" : "דצמבר",
"Settings" : "הגדרות",
"Saving..." : "שמירה…",
- "Reset password" : "איפוס ססמה",
"No" : "לא",
"Yes" : "כן",
"Choose" : "בחירה",
@@ -39,6 +38,7 @@
"Shared with you by {owner}" : "שותף אתך על ידי {owner}",
"Share link" : "קישור לשיתוף",
"Password protect" : "הגנה בססמה",
+ "Password" : "סיסמא",
"Email link to person" : "שליחת קישור בדוא״ל למשתמש",
"Send" : "שליחה",
"Set expiration date" : "הגדרת תאריך תפוגה",
@@ -51,7 +51,6 @@
"can edit" : "ניתן לערוך",
"access control" : "בקרת גישה",
"create" : "יצירה",
- "update" : "עדכון",
"delete" : "מחיקה",
"Password protected" : "מוגן בססמה",
"Error unsetting expiration date" : "אירעה שגיאה בביטול תאריך התפוגה",
@@ -65,10 +64,8 @@
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "תהליך העדכון הסתיים בהצלחה. עכשיו מנתב אותך אל ownCloud.",
"Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
- "You will receive a link to reset your password via Email." : "יישלח לתיבת הדוא״ל שלך קישור לאיפוס הססמה.",
- "Username" : "שם משתמש",
- "Yes, I really want to reset my password now" : "כן, אני רוצה לאפס את הסיסמה שלי עכשיו.",
"New password" : "ססמה חדשה",
+ "Reset password" : "איפוס ססמה",
"Personal" : "אישי",
"Users" : "משתמשים",
"Apps" : "יישומים",
@@ -80,7 +77,7 @@
"Please update your PHP installation to use %s securely." : "נא לעדכן את התקנת ה-PHP שלך כדי להשתמש ב-%s בצורה מאובטחת.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.",
"Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>",
- "Password" : "סיסמא",
+ "Username" : "שם משתמש",
"Data folder" : "תיקיית נתונים",
"Configure the database" : "הגדרת מסד הנתונים",
"Database user" : "שם משתמש במסד הנתונים",
@@ -91,6 +88,7 @@
"Finish setup" : "סיום התקנה",
"%s is available. Get more information on how to update." : "%s זמינה להורדה. ניתן ללחוץ כדי לקבל מידע נוסף כיצד לעדכן.",
"Log out" : "התנתקות",
+ "Search" : "חיפוש",
"remember" : "שמירת הססמה",
"Log in" : "כניסה",
"Alternative Logins" : "כניסות אלטרנטיביות"
diff --git a/core/l10n/hi.js b/core/l10n/hi.js
index bd74076a739..b47560081a8 100644
--- a/core/l10n/hi.js
+++ b/core/l10n/hi.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"Cancel" : "रद्द करें ",
"Share" : "साझा करें",
"Error" : "त्रुटि",
+ "Password" : "पासवर्ड",
"Send" : "भेजें",
"Sending ..." : "भेजा जा रहा है",
"Email sent" : "ईमेल भेज दिया गया है ",
@@ -32,8 +33,6 @@ OC.L10N.register(
"Add" : "डाले",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}",
- "You will receive a link to reset your password via Email." : "पासवर्ड बदलने कि लिंक आपको ई-मेल द्वारा भेजी जायेगी|",
- "Username" : "प्रयोक्ता का नाम",
"New password" : "नया पासवर्ड",
"Personal" : "यक्तिगत",
"Users" : "उपयोगकर्ता",
@@ -41,7 +40,7 @@ OC.L10N.register(
"Help" : "सहयोग",
"Security Warning" : "सुरक्षा चेतावनी ",
"Create an <strong>admin account</strong>" : "व्यवस्थापक खाता बनाएँ",
- "Password" : "पासवर्ड",
+ "Username" : "प्रयोक्ता का नाम",
"Data folder" : "डाटा फोल्डर",
"Configure the database" : "डेटाबेस कॉन्फ़िगर करें ",
"Database user" : "डेटाबेस उपयोगकर्ता",
diff --git a/core/l10n/hi.json b/core/l10n/hi.json
index 82f27644e93..3d504fb4f9d 100644
--- a/core/l10n/hi.json
+++ b/core/l10n/hi.json
@@ -23,6 +23,7 @@
"Cancel" : "रद्द करें ",
"Share" : "साझा करें",
"Error" : "त्रुटि",
+ "Password" : "पासवर्ड",
"Send" : "भेजें",
"Sending ..." : "भेजा जा रहा है",
"Email sent" : "ईमेल भेज दिया गया है ",
@@ -30,8 +31,6 @@
"Add" : "डाले",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}",
- "You will receive a link to reset your password via Email." : "पासवर्ड बदलने कि लिंक आपको ई-मेल द्वारा भेजी जायेगी|",
- "Username" : "प्रयोक्ता का नाम",
"New password" : "नया पासवर्ड",
"Personal" : "यक्तिगत",
"Users" : "उपयोगकर्ता",
@@ -39,7 +38,7 @@
"Help" : "सहयोग",
"Security Warning" : "सुरक्षा चेतावनी ",
"Create an <strong>admin account</strong>" : "व्यवस्थापक खाता बनाएँ",
- "Password" : "पासवर्ड",
+ "Username" : "प्रयोक्ता का नाम",
"Data folder" : "डाटा फोल्डर",
"Configure the database" : "डेटाबेस कॉन्फ़िगर करें ",
"Database user" : "डेटाबेस उपयोगकर्ता",
diff --git a/core/l10n/hi_IN.php b/core/l10n/hi_IN.php
deleted file mode 100644
index aff098dff1f..00000000000
--- a/core/l10n/hi_IN.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_{count} file conflict_::_{count} file conflicts_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/hr.js b/core/l10n/hr.js
index 38de4e13cd3..b39b85ae796 100644
--- a/core/l10n/hr.js
+++ b/core/l10n/hr.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"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." : "Veza za resetiranje vaše lozinke poslana je na vašu adresu e-pošte. Ako je ne primite unekom razumnom vremenskom roku, provjerite svoje spam/junk mape. <br> Ako nije tamo, kontaktirajtesvoga lokalnog administratora.",
"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 datoteke su šifrirane. Ako niste aktivirali ključ oporavka,svoje podatke nećete moći dohvatitinakon što vaša lozinka bude resetirana.<br />Ako ne znate što učiniti, prije nego linastavite, molimo kontaktirajte svog administratora. <br />Želite li doista nastaviti?",
"I know what I'm doing" : "Znam što radim",
- "Reset password" : "Resetirajte lozinku",
"Password can not be changed. Please contact your administrator." : "Lozinku nije moguće promijeniti. Molimo kontaktirajte svog administratora.",
"No" : "Ne",
"Yes" : "Da",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Lozinka snažna",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Vaš web poslužitelj još nije propisno postavljen da bi omogućio sinkronizaciju datoteka jer izgleda da jesučelje WebDAV neispravno.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ovaj poslužitelj nema nikakvu radnu vezu s internetom. To znači da ne rade neke od njegovihfunkcija kao što su spajanje na vanjsku memoriju, notifikacije o ažuriranju ili instalacijiaplikacija treće strane. Također, možda je onemogućen daljinski pristup datotekama i slanjenotifikacijske e-pošte. Savjetujemo vam da, ako želite da sve njegove funkcije rade,omogućite vezuovog poslužitelja s internetom.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vašem podatkovnom direktoriju i vašim datotekama pristup je vjerojatno moguć s interneta.Datoteka .htaccess ne radi. Toplo vam preporučujemo da svoj web poslužitelj konfigurirate tako daje pristup podatkovnom direktoriju nemoguć ili pak podatkovni direktorij premjestite izvan korijena dokumentaweb poslužitelja.",
"Shared" : "Resurs podijeljen",
"Shared with {recipients}" : "Resurs podijeljen s {recipients}",
"Share" : "Podijelite",
@@ -78,8 +78,8 @@ OC.L10N.register(
"Share link" : "Podijelite vezu",
"The public link will expire no later than {days} days after it is created" : " Javna veza ističe najkasnije {days} dana nakon što je kreirana",
"Password protect" : "Zaštititi lozinkom",
+ "Password" : "Lozinka",
"Choose a password for the public link" : "Odaberite lozinku za javnu vezu",
- "Allow Public Upload" : "Omogućite javno učitavanje",
"Email link to person" : "Pošaljite osobi vezu e-poštom",
"Send" : "Pošaljite",
"Set expiration date" : "Odredite datum isteka",
@@ -93,7 +93,6 @@ OC.L10N.register(
"can edit" : "Uređivanje moguće",
"access control" : "Kontrola pristupa",
"create" : "Kreirajte",
- "update" : "Ažurirajte",
"delete" : "Izbrišite",
"Password protected" : "Lozinka zaštićena",
"Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka",
@@ -111,20 +110,15 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["","",""],
"Updating {productName} to version {version}, this may take a while." : "Uređivanje {productName} u verziiju {version}, to može potrajati neko vrijeme.",
"Please reload the page." : "Molimo, ponovno učitajte stranicu",
- "The update was unsuccessful." : "Ažuriranje nije uspjelo",
"The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspjelo. Upravo ste preusmjeravani na ownCloud.",
"Couldn't reset password because the token is invalid" : "Resetiranje lozinke nije moguće jer je token neispravan.",
"Couldn't send reset email. Please make sure your username is correct." : "Resetiranu e-poštu nije moguće poslati.Molimo provjerite ispravnost svoga korisničkog imena.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Resetiranu e-poštu nije moguće poslati jer za ovo korisničko ime ne postoji adresa.Molimo, kontaktirajte svog administratora.",
"%s password reset" : "%s lozinka resetirana",
"Use the following link to reset your password: {link}" : "Za resetiranje svoje lozinke koristite sljedeću vezu: {link}",
- "You will receive a link to reset your password via Email." : "Vezu za resetiranje svoje lozinke primit ćete e-poštom.",
- "Username" : "Korisničko ime",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše datoteke su šifrirane. Ako niste aktivirali ključ oporavka, svoje podatke nećetemoći dohvatiti nakon što vaša lozinka bude resetirana. Ako niste sigurni što učiniti, molimokontaktirajte svog administratora prije nego li nastavite. Želite li doista nastaviti?",
- "Yes, I really want to reset my password now" : "Da, ja doista želim sada resetirati svojju lozinku.",
- "Reset" : "Resetirajte",
"New password" : "Nova lozinka",
"New Password" : "Nova lozinka",
+ "Reset password" : "Resetirajte lozinku",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba.",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate, molimo razmotrite mogućnost korištenje poslužitelja GNU/Linux.",
"Personal" : "Osobno",
@@ -149,7 +143,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vašem podatkovnom direktoriju i datotekama vjerojatno se može pristupiti s interneta jer .htaccess datoteka ne radi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informaciju kako ispravno konfigurirati vaš poslužitelj, molimo vidite <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
"Create an <strong>admin account</strong>" : "Kreirajte <strong>admin račun</strong>",
- "Password" : "Lozinka",
+ "Username" : "Korisničko ime",
"Storage & database" : "Pohrana & baza podataka",
"Data folder" : "Mapa za podatke",
"Configure the database" : "Konfigurirajte bazu podataka",
@@ -165,6 +159,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ova aplikacija zahtjeva JavaScript za ispravan rad. Molimo <a href=\"http://enable-javascript.com/\" target=\"_blank\"> uključite JavaScript</a> i ponovno učitajte stranicu.",
"%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.",
"Log out" : "Odjavite se",
+ "Search" : "pretraži",
"Server side authentication failed!" : "Autentikacija na strani poslužitelja nije uspjela!",
"Please contact your administrator." : "Molimo kontaktirajte svog administratora.",
"Forgot your password? Reset it!" : "Zaboravili ste svoju lozinku? Resetirajte ju!",
diff --git a/core/l10n/hr.json b/core/l10n/hr.json
index fbcc57054e3..0f0aea8ab2b 100644
--- a/core/l10n/hr.json
+++ b/core/l10n/hr.json
@@ -37,7 +37,6 @@
"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." : "Veza za resetiranje vaše lozinke poslana je na vašu adresu e-pošte. Ako je ne primite unekom razumnom vremenskom roku, provjerite svoje spam/junk mape. <br> Ako nije tamo, kontaktirajtesvoga lokalnog administratora.",
"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 datoteke su šifrirane. Ako niste aktivirali ključ oporavka,svoje podatke nećete moći dohvatitinakon što vaša lozinka bude resetirana.<br />Ako ne znate što učiniti, prije nego linastavite, molimo kontaktirajte svog administratora. <br />Želite li doista nastaviti?",
"I know what I'm doing" : "Znam što radim",
- "Reset password" : "Resetirajte lozinku",
"Password can not be changed. Please contact your administrator." : "Lozinku nije moguće promijeniti. Molimo kontaktirajte svog administratora.",
"No" : "Ne",
"Yes" : "Da",
@@ -63,6 +62,7 @@
"Strong password" : "Lozinka snažna",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Vaš web poslužitelj još nije propisno postavljen da bi omogućio sinkronizaciju datoteka jer izgleda da jesučelje WebDAV neispravno.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ovaj poslužitelj nema nikakvu radnu vezu s internetom. To znači da ne rade neke od njegovihfunkcija kao što su spajanje na vanjsku memoriju, notifikacije o ažuriranju ili instalacijiaplikacija treće strane. Također, možda je onemogućen daljinski pristup datotekama i slanjenotifikacijske e-pošte. Savjetujemo vam da, ako želite da sve njegove funkcije rade,omogućite vezuovog poslužitelja s internetom.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vašem podatkovnom direktoriju i vašim datotekama pristup je vjerojatno moguć s interneta.Datoteka .htaccess ne radi. Toplo vam preporučujemo da svoj web poslužitelj konfigurirate tako daje pristup podatkovnom direktoriju nemoguć ili pak podatkovni direktorij premjestite izvan korijena dokumentaweb poslužitelja.",
"Shared" : "Resurs podijeljen",
"Shared with {recipients}" : "Resurs podijeljen s {recipients}",
"Share" : "Podijelite",
@@ -76,8 +76,8 @@
"Share link" : "Podijelite vezu",
"The public link will expire no later than {days} days after it is created" : " Javna veza ističe najkasnije {days} dana nakon što je kreirana",
"Password protect" : "Zaštititi lozinkom",
+ "Password" : "Lozinka",
"Choose a password for the public link" : "Odaberite lozinku za javnu vezu",
- "Allow Public Upload" : "Omogućite javno učitavanje",
"Email link to person" : "Pošaljite osobi vezu e-poštom",
"Send" : "Pošaljite",
"Set expiration date" : "Odredite datum isteka",
@@ -91,7 +91,6 @@
"can edit" : "Uređivanje moguće",
"access control" : "Kontrola pristupa",
"create" : "Kreirajte",
- "update" : "Ažurirajte",
"delete" : "Izbrišite",
"Password protected" : "Lozinka zaštićena",
"Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka",
@@ -109,20 +108,15 @@
"_download %n file_::_download %n files_" : ["","",""],
"Updating {productName} to version {version}, this may take a while." : "Uređivanje {productName} u verziiju {version}, to može potrajati neko vrijeme.",
"Please reload the page." : "Molimo, ponovno učitajte stranicu",
- "The update was unsuccessful." : "Ažuriranje nije uspjelo",
"The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspjelo. Upravo ste preusmjeravani na ownCloud.",
"Couldn't reset password because the token is invalid" : "Resetiranje lozinke nije moguće jer je token neispravan.",
"Couldn't send reset email. Please make sure your username is correct." : "Resetiranu e-poštu nije moguće poslati.Molimo provjerite ispravnost svoga korisničkog imena.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Resetiranu e-poštu nije moguće poslati jer za ovo korisničko ime ne postoji adresa.Molimo, kontaktirajte svog administratora.",
"%s password reset" : "%s lozinka resetirana",
"Use the following link to reset your password: {link}" : "Za resetiranje svoje lozinke koristite sljedeću vezu: {link}",
- "You will receive a link to reset your password via Email." : "Vezu za resetiranje svoje lozinke primit ćete e-poštom.",
- "Username" : "Korisničko ime",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše datoteke su šifrirane. Ako niste aktivirali ključ oporavka, svoje podatke nećetemoći dohvatiti nakon što vaša lozinka bude resetirana. Ako niste sigurni što učiniti, molimokontaktirajte svog administratora prije nego li nastavite. Želite li doista nastaviti?",
- "Yes, I really want to reset my password now" : "Da, ja doista želim sada resetirati svojju lozinku.",
- "Reset" : "Resetirajte",
"New password" : "Nova lozinka",
"New Password" : "Nova lozinka",
+ "Reset password" : "Resetirajte lozinku",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba.",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate, molimo razmotrite mogućnost korištenje poslužitelja GNU/Linux.",
"Personal" : "Osobno",
@@ -147,7 +141,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vašem podatkovnom direktoriju i datotekama vjerojatno se može pristupiti s interneta jer .htaccess datoteka ne radi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informaciju kako ispravno konfigurirati vaš poslužitelj, molimo vidite <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
"Create an <strong>admin account</strong>" : "Kreirajte <strong>admin račun</strong>",
- "Password" : "Lozinka",
+ "Username" : "Korisničko ime",
"Storage & database" : "Pohrana & baza podataka",
"Data folder" : "Mapa za podatke",
"Configure the database" : "Konfigurirajte bazu podataka",
@@ -163,6 +157,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ova aplikacija zahtjeva JavaScript za ispravan rad. Molimo <a href=\"http://enable-javascript.com/\" target=\"_blank\"> uključite JavaScript</a> i ponovno učitajte stranicu.",
"%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.",
"Log out" : "Odjavite se",
+ "Search" : "pretraži",
"Server side authentication failed!" : "Autentikacija na strani poslužitelja nije uspjela!",
"Please contact your administrator." : "Molimo kontaktirajte svog administratora.",
"Forgot your password? Reset it!" : "Zaboravili ste svoju lozinku? Resetirajte ju!",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index 867d47cda68..02883aef09a 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A jelszó felülírásához a linket e-mailben elküldtük. Ha a levél elfogadható időn belül nem érkezik meg, ellenőrizze a spam/levélszemét mappát.<br>Ha nincs ott, kérdezze meg a helyi rendszergazdát.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön állományai 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. Biztos, hogy folytatni kívánja?",
"I know what I'm doing" : "Tudom mit csinálok.",
- "Reset password" : "Jelszó-visszaállítás",
"Password can not be changed. Please contact your administrator." : "A jelszót nem lehet visszaállítani. Kérjük, lépjen kapcsolatba a redszergazdával.",
"No" : "Nem",
"Yes" : "Igen",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Nem sikerült betölteni a fájlkiválasztó sablont: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Nem sikerült betölteni az üzenet sablont: {error}",
+ "read-only" : "csak olvasható",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} fájl ütközik","{count} fájl ütközik"],
"One file conflict" : "Egy fájl ütközik",
"New Files" : "Új fájlok",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Erős jelszó",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Az Ön webkiszolgálója nincs megfelelően beállítva az állományok szinkronizálásához, mert a WebDAV-elérés úgy tűnik, nem működik.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "A kiszolgálónak nem működik az internetkapcsolata. Ez azt jelenti, hogy bizonyos funkciók nem fognak működni, mint pl. külső tárolók becsatolása, automatikus frissítési értesítések vagy más fejlesztők /3rd party/ által írt alkalmazások telepítése. Az állományok távolról történő elérése valamint e-mail értesítések küldése szintén lehet, hogy nem fog működni. Javasoljuk, hogy engedélyezze a kiszolgáló internetelérését, ha az összes funkciót szeretné használni.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Az adatkönytára és az itt levő fájlok valószínűleg elérhetők az internetről. Az ownCloud által beillesztett .htaccess fájl nem működik. Nagyon erősen ajánlott, hogy a webszervert úgy konfigurálja, hogy az adatkönyvtár ne legyen közvetlenül kívülről elérhető, vagy az adatkönyvtárt tegye a webszerver dokumentumfáján kívülre.",
"Error occurred while checking server setup" : "Hiba történt a szerver beállítások ellenőrzése közben",
"Shared" : "Megosztott",
"Shared with {recipients}" : "Megosztva ővelük: {recipients}",
@@ -79,11 +80,12 @@ OC.L10N.register(
"Share link" : "Megosztás hivatkozással",
"The public link will expire no later than {days} days after it is created" : "A nyilvános link érvényessége legkorábban {days} nappal a létrehozása után jár csak le",
"Password protect" : "Jelszóval is védem",
+ "Password" : "Jelszó",
"Choose a password for the public link" : "Válasszon egy jelszót a nyilvános linkhez",
- "Allow Public Upload" : "Feltöltést is engedélyezek",
"Email link to person" : "Email címre küldjük el",
"Send" : "Küldjük el",
"Set expiration date" : "Legyen lejárati idő",
+ "Expiration" : "Lejárat",
"Expiration date" : "A lejárati idő",
"Adding user..." : "Felhasználó hozzáadása...",
"group" : "csoport",
@@ -95,7 +97,7 @@ OC.L10N.register(
"can edit" : "módosíthat",
"access control" : "jogosultság",
"create" : "létrehoz",
- "update" : "szerkeszt",
+ "change" : "változtatás",
"delete" : "töröl",
"Password protected" : "Jelszóval van védve",
"Error unsetting expiration date" : "Nem sikerült a lejárati időt törölni",
@@ -110,23 +112,23 @@ OC.L10N.register(
"Edit tags" : "Címkék szerkesztése",
"Error loading dialog template: {error}" : "Hiba a párbeszédpanel-sablon betöltésekor: {error}",
"No tags selected for deletion." : "Nincs törlésre kijelölt címke.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "ismeretlen szöveg",
+ "Hello world!" : "Üdv, világ!",
+ "sunny" : "napos",
+ "Hello {name}, the weather is {weather}" : "Üdv, {name}, {weather} időnk van",
+ "_download %n file_::_download %n files_" : ["%n fájl letöltése","%n fájl letöltése"],
"Updating {productName} to version {version}, this may take a while." : " {productName} frissítése zajlik erre a verzióra: {version}. Ez eltarthat egy darabig.",
"Please reload the page." : "Kérjük frissítse az oldalt!",
- "The update was unsuccessful." : "A frissítés nem sikerült.",
+ "The update was unsuccessful. " : "A frissítés sikerült.",
"The update was successful. Redirecting you to ownCloud now." : "A frissítés sikeres volt. Visszairányítjuk az ownCloud szolgáltatáshoz.",
"Couldn't reset password because the token is invalid" : "Nem lehet a jelszót törölni, mert a token érvénytelen.",
"Couldn't send reset email. Please make sure your username is correct." : "Visszaállítási e-mail nem küldhető. Kérjük, lépjen kapcsolatba a rendszergazdával. ",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Visszaállítási e-mail nem küldhető, mert nem tartozik e-mail cím ehhez a felhasználóhoz. Kérjük, lépjen kapcsolatba a rendszergazdával.",
"%s password reset" : "%s jelszó visszaállítás",
"Use the following link to reset your password: {link}" : "Használja ezt a linket a jelszó ismételt beállításához: {link}",
- "You will receive a link to reset your password via Email." : "Egy e-mailben fog értesítést kapni a jelszóbeállítás módjáról.",
- "Username" : "Felhasználónév",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Az Ön állományai 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. Biztos, hogy folytatni kívánja?",
- "Yes, I really want to reset my password now" : "Igen, tényleg meg akarom változtatni a jelszavam",
- "Reset" : "Visszaállítás",
"New password" : "Az új jelszó",
"New Password" : "Új jelszó",
+ "Reset password" : "Jelszó-visszaállítás",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú kiszolgálót használni.",
"Personal" : "Személyes",
@@ -156,13 +158,14 @@ OC.L10N.register(
"Message: %s" : "Üzenet: %s",
"File: %s" : "Fájl: %s",
"Line: %s" : "Sor: %s",
+ "Trace" : "Lekövetés",
"Security Warning" : "Biztonsági figyelmeztetés",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Az Ön PHP verziója sebezhető a NULL bájtos támadással szemben (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Kérjük frissítse a telepített PHP csomagjait, hogy biztonságos legyen az %s szolgáltatása.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Az adatkönyvtár és a benne levő állományok valószínűleg közvetlenül is elérhetők az internetről, mert a .htaccess állomány nem érvényesül.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A kiszolgáló megfelelő beállításához kérjük olvassa el a <a href=\"%sl\" target=\"_blank\">dokumentációt</a>.",
"Create an <strong>admin account</strong>" : "<strong>Rendszergazdai belépés</strong> létrehozása",
- "Password" : "Jelszó",
+ "Username" : "Felhasználónév",
"Storage & database" : "Tárolás és adatbázis",
"Data folder" : "Adatkönyvtár",
"Configure the database" : "Adatbázis konfigurálása",
@@ -177,6 +180,7 @@ OC.L10N.register(
"Finishing …" : "Befejezés ...",
"%s is available. Get more information on how to update." : "%s rendelkezésre áll. További információ a frissítéshez.",
"Log out" : "Kilépés",
+ "Search" : "Keresés",
"Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!",
"Please contact your administrator." : "Kérjük, lépjen kapcsolatba a rendszergazdával.",
"Forgot your password? Reset it!" : "Elfelejtette a jelszavát? Állítsa vissza!",
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 3ab7d5d2e97..ad7966a5bc5 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A jelszó felülírásához a linket e-mailben elküldtük. Ha a levél elfogadható időn belül nem érkezik meg, ellenőrizze a spam/levélszemét mappát.<br>Ha nincs ott, kérdezze meg a helyi rendszergazdát.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön állományai 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. Biztos, hogy folytatni kívánja?",
"I know what I'm doing" : "Tudom mit csinálok.",
- "Reset password" : "Jelszó-visszaállítás",
"Password can not be changed. Please contact your administrator." : "A jelszót nem lehet visszaállítani. Kérjük, lépjen kapcsolatba a redszergazdával.",
"No" : "Nem",
"Yes" : "Igen",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Nem sikerült betölteni a fájlkiválasztó sablont: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Nem sikerült betölteni az üzenet sablont: {error}",
+ "read-only" : "csak olvasható",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} fájl ütközik","{count} fájl ütközik"],
"One file conflict" : "Egy fájl ütközik",
"New Files" : "Új fájlok",
@@ -63,6 +63,7 @@
"Strong password" : "Erős jelszó",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Az Ön webkiszolgálója nincs megfelelően beállítva az állományok szinkronizálásához, mert a WebDAV-elérés úgy tűnik, nem működik.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "A kiszolgálónak nem működik az internetkapcsolata. Ez azt jelenti, hogy bizonyos funkciók nem fognak működni, mint pl. külső tárolók becsatolása, automatikus frissítési értesítések vagy más fejlesztők /3rd party/ által írt alkalmazások telepítése. Az állományok távolról történő elérése valamint e-mail értesítések küldése szintén lehet, hogy nem fog működni. Javasoljuk, hogy engedélyezze a kiszolgáló internetelérését, ha az összes funkciót szeretné használni.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Az adatkönytára és az itt levő fájlok valószínűleg elérhetők az internetről. Az ownCloud által beillesztett .htaccess fájl nem működik. Nagyon erősen ajánlott, hogy a webszervert úgy konfigurálja, hogy az adatkönyvtár ne legyen közvetlenül kívülről elérhető, vagy az adatkönyvtárt tegye a webszerver dokumentumfáján kívülre.",
"Error occurred while checking server setup" : "Hiba történt a szerver beállítások ellenőrzése közben",
"Shared" : "Megosztott",
"Shared with {recipients}" : "Megosztva ővelük: {recipients}",
@@ -77,11 +78,12 @@
"Share link" : "Megosztás hivatkozással",
"The public link will expire no later than {days} days after it is created" : "A nyilvános link érvényessége legkorábban {days} nappal a létrehozása után jár csak le",
"Password protect" : "Jelszóval is védem",
+ "Password" : "Jelszó",
"Choose a password for the public link" : "Válasszon egy jelszót a nyilvános linkhez",
- "Allow Public Upload" : "Feltöltést is engedélyezek",
"Email link to person" : "Email címre küldjük el",
"Send" : "Küldjük el",
"Set expiration date" : "Legyen lejárati idő",
+ "Expiration" : "Lejárat",
"Expiration date" : "A lejárati idő",
"Adding user..." : "Felhasználó hozzáadása...",
"group" : "csoport",
@@ -93,7 +95,7 @@
"can edit" : "módosíthat",
"access control" : "jogosultság",
"create" : "létrehoz",
- "update" : "szerkeszt",
+ "change" : "változtatás",
"delete" : "töröl",
"Password protected" : "Jelszóval van védve",
"Error unsetting expiration date" : "Nem sikerült a lejárati időt törölni",
@@ -108,23 +110,23 @@
"Edit tags" : "Címkék szerkesztése",
"Error loading dialog template: {error}" : "Hiba a párbeszédpanel-sablon betöltésekor: {error}",
"No tags selected for deletion." : "Nincs törlésre kijelölt címke.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "ismeretlen szöveg",
+ "Hello world!" : "Üdv, világ!",
+ "sunny" : "napos",
+ "Hello {name}, the weather is {weather}" : "Üdv, {name}, {weather} időnk van",
+ "_download %n file_::_download %n files_" : ["%n fájl letöltése","%n fájl letöltése"],
"Updating {productName} to version {version}, this may take a while." : " {productName} frissítése zajlik erre a verzióra: {version}. Ez eltarthat egy darabig.",
"Please reload the page." : "Kérjük frissítse az oldalt!",
- "The update was unsuccessful." : "A frissítés nem sikerült.",
+ "The update was unsuccessful. " : "A frissítés sikerült.",
"The update was successful. Redirecting you to ownCloud now." : "A frissítés sikeres volt. Visszairányítjuk az ownCloud szolgáltatáshoz.",
"Couldn't reset password because the token is invalid" : "Nem lehet a jelszót törölni, mert a token érvénytelen.",
"Couldn't send reset email. Please make sure your username is correct." : "Visszaállítási e-mail nem küldhető. Kérjük, lépjen kapcsolatba a rendszergazdával. ",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Visszaállítási e-mail nem küldhető, mert nem tartozik e-mail cím ehhez a felhasználóhoz. Kérjük, lépjen kapcsolatba a rendszergazdával.",
"%s password reset" : "%s jelszó visszaállítás",
"Use the following link to reset your password: {link}" : "Használja ezt a linket a jelszó ismételt beállításához: {link}",
- "You will receive a link to reset your password via Email." : "Egy e-mailben fog értesítést kapni a jelszóbeállítás módjáról.",
- "Username" : "Felhasználónév",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Az Ön állományai 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. Biztos, hogy folytatni kívánja?",
- "Yes, I really want to reset my password now" : "Igen, tényleg meg akarom változtatni a jelszavam",
- "Reset" : "Visszaállítás",
"New password" : "Az új jelszó",
"New Password" : "Új jelszó",
+ "Reset password" : "Jelszó-visszaállítás",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú kiszolgálót használni.",
"Personal" : "Személyes",
@@ -154,13 +156,14 @@
"Message: %s" : "Üzenet: %s",
"File: %s" : "Fájl: %s",
"Line: %s" : "Sor: %s",
+ "Trace" : "Lekövetés",
"Security Warning" : "Biztonsági figyelmeztetés",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Az Ön PHP verziója sebezhető a NULL bájtos támadással szemben (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Kérjük frissítse a telepített PHP csomagjait, hogy biztonságos legyen az %s szolgáltatása.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Az adatkönyvtár és a benne levő állományok valószínűleg közvetlenül is elérhetők az internetről, mert a .htaccess állomány nem érvényesül.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A kiszolgáló megfelelő beállításához kérjük olvassa el a <a href=\"%sl\" target=\"_blank\">dokumentációt</a>.",
"Create an <strong>admin account</strong>" : "<strong>Rendszergazdai belépés</strong> létrehozása",
- "Password" : "Jelszó",
+ "Username" : "Felhasználónév",
"Storage & database" : "Tárolás és adatbázis",
"Data folder" : "Adatkönyvtár",
"Configure the database" : "Adatbázis konfigurálása",
@@ -175,6 +178,7 @@
"Finishing …" : "Befejezés ...",
"%s is available. Get more information on how to update." : "%s rendelkezésre áll. További információ a frissítéshez.",
"Log out" : "Kilépés",
+ "Search" : "Keresés",
"Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!",
"Please contact your administrator." : "Kérjük, lépjen kapcsolatba a rendszergazdával.",
"Forgot your password? Reset it!" : "Elfelejtette a jelszavát? Állítsa vissza!",
diff --git a/core/l10n/ia.js b/core/l10n/ia.js
index 8bac55ebfab..7b714292ee3 100644
--- a/core/l10n/ia.js
+++ b/core/l10n/ia.js
@@ -36,7 +36,6 @@ OC.L10N.register(
"Saving..." : "Salveguardante...",
"Couldn't send reset email. Please contact your administrator." : "On non pote inviar message de configurar ex novo. Pro favor continge tu administrator.",
"I know what I'm doing" : "Io sape lo que io es facente",
- "Reset password" : "Reinitialisar contrasigno",
"Password can not be changed. Please contact your administrator." : "Contrasigno non pote esser modificate. Pro favor continge tu administrator.",
"No" : "No",
"Yes" : "Si",
@@ -68,8 +67,8 @@ OC.L10N.register(
"Share with user or group …" : "Compartir con usator o gruppo ...",
"Share link" : "Compartir ligamine",
"Password protect" : "Protegite per contrasigno",
+ "Password" : "Contrasigno",
"Choose a password for the public link" : "Selige un contrasigno pro le ligamine public",
- "Allow Public Upload" : "Permitter incargamento public",
"Email link to person" : "Ligamine de e-posta a persona",
"Send" : "Invia",
"Set expiration date" : "Fixa data de expiration",
@@ -84,7 +83,6 @@ OC.L10N.register(
"can edit" : "pote modificar",
"access control" : "controlo de accesso",
"create" : "crear",
- "update" : "actualisar",
"delete" : "deler",
"Password protected" : "Proteger con contrasigno",
"Error unsetting expiration date" : "Error quando on levava le data de expiration",
@@ -99,16 +97,12 @@ OC.L10N.register(
"Edit tags" : "Modifica etiquettas",
"_download %n file_::_download %n files_" : ["",""],
"Please reload the page." : "Pro favor recarga le pagina.",
- "The update was unsuccessful." : "Le actualisation esseva successose.",
"The update was successful. Redirecting you to ownCloud now." : "Le actualisation terminava con successo. On redirige nunc a tu ownCloud.",
"%s password reset" : "%s contrasigno re-fixate",
"Use the following link to reset your password: {link}" : "Usa le ligamine sequente pro re-fixar tu contrasigno: {link}",
- "You will receive a link to reset your password via Email." : "Tu recipera un ligamine pro re-configurar tu contrasigno via e-posta.",
- "Username" : "Nomine de usator",
- "Yes, I really want to reset my password now" : "Si, io vermente vole re-configurar mi contrasigno nunc",
- "Reset" : "Re-fixar",
"New password" : "Nove contrasigno",
"New Password" : "Nove contrasigno",
+ "Reset password" : "Reinitialisar contrasigno",
"For the best results, please consider using a GNU/Linux server instead." : "Pro le exitos melior, pro favor tu considera usar in loco un servitor GNU/Linux.",
"Personal" : "Personal",
"Users" : "Usatores",
@@ -133,7 +127,7 @@ OC.L10N.register(
"Security Warning" : "Aviso de securitate",
"Please update your PHP installation to use %s securely." : "Pro favor actualisa tu installation de PHP pro usar %s con securitate.",
"Create an <strong>admin account</strong>" : "Crear un <strong>conto de administration</strong>",
- "Password" : "Contrasigno",
+ "Username" : "Nomine de usator",
"Storage & database" : "Immagazinage & base de datos",
"Data folder" : "Dossier de datos",
"Configure the database" : "Configurar le base de datos",
@@ -146,6 +140,7 @@ OC.L10N.register(
"Finish setup" : "Terminar configuration",
"Finishing …" : "Terminante ...",
"Log out" : "Clauder le session",
+ "Search" : "Cercar",
"Server side authentication failed!" : "Il falleva authentication de latere servitor!",
"Please contact your administrator." : "Pro favor continge tu administrator.",
"Forgot your password? Reset it!" : "Tu oblidava tu contrasigno? Re-configura lo!",
diff --git a/core/l10n/ia.json b/core/l10n/ia.json
index 60ece2f9425..21249fc5629 100644
--- a/core/l10n/ia.json
+++ b/core/l10n/ia.json
@@ -34,7 +34,6 @@
"Saving..." : "Salveguardante...",
"Couldn't send reset email. Please contact your administrator." : "On non pote inviar message de configurar ex novo. Pro favor continge tu administrator.",
"I know what I'm doing" : "Io sape lo que io es facente",
- "Reset password" : "Reinitialisar contrasigno",
"Password can not be changed. Please contact your administrator." : "Contrasigno non pote esser modificate. Pro favor continge tu administrator.",
"No" : "No",
"Yes" : "Si",
@@ -66,8 +65,8 @@
"Share with user or group …" : "Compartir con usator o gruppo ...",
"Share link" : "Compartir ligamine",
"Password protect" : "Protegite per contrasigno",
+ "Password" : "Contrasigno",
"Choose a password for the public link" : "Selige un contrasigno pro le ligamine public",
- "Allow Public Upload" : "Permitter incargamento public",
"Email link to person" : "Ligamine de e-posta a persona",
"Send" : "Invia",
"Set expiration date" : "Fixa data de expiration",
@@ -82,7 +81,6 @@
"can edit" : "pote modificar",
"access control" : "controlo de accesso",
"create" : "crear",
- "update" : "actualisar",
"delete" : "deler",
"Password protected" : "Proteger con contrasigno",
"Error unsetting expiration date" : "Error quando on levava le data de expiration",
@@ -97,16 +95,12 @@
"Edit tags" : "Modifica etiquettas",
"_download %n file_::_download %n files_" : ["",""],
"Please reload the page." : "Pro favor recarga le pagina.",
- "The update was unsuccessful." : "Le actualisation esseva successose.",
"The update was successful. Redirecting you to ownCloud now." : "Le actualisation terminava con successo. On redirige nunc a tu ownCloud.",
"%s password reset" : "%s contrasigno re-fixate",
"Use the following link to reset your password: {link}" : "Usa le ligamine sequente pro re-fixar tu contrasigno: {link}",
- "You will receive a link to reset your password via Email." : "Tu recipera un ligamine pro re-configurar tu contrasigno via e-posta.",
- "Username" : "Nomine de usator",
- "Yes, I really want to reset my password now" : "Si, io vermente vole re-configurar mi contrasigno nunc",
- "Reset" : "Re-fixar",
"New password" : "Nove contrasigno",
"New Password" : "Nove contrasigno",
+ "Reset password" : "Reinitialisar contrasigno",
"For the best results, please consider using a GNU/Linux server instead." : "Pro le exitos melior, pro favor tu considera usar in loco un servitor GNU/Linux.",
"Personal" : "Personal",
"Users" : "Usatores",
@@ -131,7 +125,7 @@
"Security Warning" : "Aviso de securitate",
"Please update your PHP installation to use %s securely." : "Pro favor actualisa tu installation de PHP pro usar %s con securitate.",
"Create an <strong>admin account</strong>" : "Crear un <strong>conto de administration</strong>",
- "Password" : "Contrasigno",
+ "Username" : "Nomine de usator",
"Storage & database" : "Immagazinage & base de datos",
"Data folder" : "Dossier de datos",
"Configure the database" : "Configurar le base de datos",
@@ -144,6 +138,7 @@
"Finish setup" : "Terminar configuration",
"Finishing …" : "Terminante ...",
"Log out" : "Clauder le session",
+ "Search" : "Cercar",
"Server side authentication failed!" : "Il falleva authentication de latere servitor!",
"Please contact your administrator." : "Pro favor continge tu administrator.",
"Forgot your password? Reset it!" : "Tu oblidava tu contrasigno? Re-configura lo!",
diff --git a/core/l10n/id.js b/core/l10n/id.js
index 7182162297e..10d22cacd47 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Sebuah tautan untuk setel ulang sandi Anda telah dikirim ke email Anda. Jika Anda tidak menerima dalam jangka waktu yang wajar, periksa folder spam/sampah Anda.<br>Jika tidak ada, tanyakan pada administrator Anda.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"I know what I'm doing" : "Saya tahu apa yang saya lakukan",
- "Reset password" : "Setel ulang sandi",
"Password can not be changed. Please contact your administrator." : "Sandi tidak dapat diubah. Silakan hubungi administrator Anda",
"No" : "Tidak",
"Yes" : "Ya",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Sandi kuat",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web server Anda belum dikonfigurasikan dengan baik untuk mengizinkan sinkronisasi berkas karena tampaknya antarmuka WebDAV rusak.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Server ini tidak memiliki koneksi internet. Hal ini berarti bahwa beberapa fitur seperti mengaitkan penyimpanan eksternal, pemberitahuan tentang pembaruan atau instalasi aplikasi pihak ke-3 tidak akan bisa. Mengakses berkas dari remote dan mengirim email notifikasi juga tidak akan bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda menginginkan semua fitur.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Direktori data dan berkas Anda mungkin dapat diakses dari internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan untuk mengkonfigurasi server web Anda agar direktori data tidak lagi dapat diakses atau Anda dapat memindahkan direktori data di luar dokumen root webserver.",
"Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server",
"Shared" : "Dibagikan",
"Shared with {recipients}" : "Dibagikan dengan {recipients}",
@@ -79,11 +79,12 @@ OC.L10N.register(
"Share link" : "Bagikan tautan",
"The public link will expire no later than {days} days after it is created" : "Tautan publik akan kadaluarsa tidak lebih dari {days} hari setelah ini dibuat",
"Password protect" : "Lindungi dengan sandi",
+ "Password" : "Sandi",
"Choose a password for the public link" : "Tetapkan sandi untuk tautan publik",
- "Allow Public Upload" : "Izinkan Unggahan Publik",
"Email link to person" : "Emailkan tautan ini ke orang",
"Send" : "Kirim",
"Set expiration date" : "Atur tanggal kedaluwarsa",
+ "Expiration" : "Kedaluwarsa",
"Expiration date" : "Tanggal kedaluwarsa",
"Adding user..." : "Menambahkan pengguna...",
"group" : "grup",
@@ -95,7 +96,6 @@ OC.L10N.register(
"can edit" : "dapat sunting",
"access control" : "kontrol akses",
"create" : "buat",
- "update" : "perbarui",
"delete" : "hapus",
"Password protected" : "Sandi dilindungi",
"Error unsetting expiration date" : "Galat ketika menghapus tanggal kedaluwarsa",
@@ -113,20 +113,15 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini memerlukan waktu.",
"Please reload the page." : "Silakan muat ulang halaman.",
- "The update was unsuccessful." : "Pembaruan tidak berhasil",
"The update was successful. Redirecting you to ownCloud now." : "Pembaruan sukses. Anda akan diarahkan ulang ke ownCloud.",
"Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah",
"Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat menyetel ulang email karena tidak ada alamat email untuk nama pengguna ini. Silakan hubungi Administrator Anda.",
"%s password reset" : "%s sandi disetel ulang",
"Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima tautan penyetelan ulang sandi lewat Email.",
- "Username" : "Nama pengguna",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Berkas anda terenkripsi. Jika sebelumnya anda belum mengaktifkan kunci pemulihan, tidak akan ada cara lagi untuk mendapatkan data anda kembali setelah sandi anda diatur ulang. Jika anda tidak yakin dengan apa yang harus dilakukan, silakan hubungi administrator anda sebelum melanjutkan. Apakah anda benar-benar ingin melanjutkan?",
- "Yes, I really want to reset my password now" : "Ya, Saya sungguh ingin mengatur ulang sandi saya sekarang",
- "Reset" : "Atur Ulang",
"New password" : "Sandi baru",
"New Password" : "Sandi Baru",
+ "Reset password" : "Setel ulang sandi",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!",
"For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ",
"Personal" : "Pribadi",
@@ -166,7 +161,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi cara mengkonfigurasi server anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.",
"Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>",
- "Password" : "Sandi",
+ "Username" : "Nama pengguna",
"Storage & database" : "Penyimpanan & Basis data",
"Data folder" : "Folder data",
"Configure the database" : "Konfigurasikan basis data",
@@ -182,6 +177,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Aplikasi ini memerlukan JavaScript untuk beroperasi dengan benar. Mohon <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktifkan JavaScript</a> dan muat ulang halaman.",
"%s is available. Get more information on how to update." : "%s tersedia. Dapatkan informasi lebih lanjut tentang cara memperbarui.",
"Log out" : "Keluar",
+ "Search" : "Cari",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"Forgot your password? Reset it!" : "Lupa sandi Anda? Setel ulang!",
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 79e90900d0f..fd79ee0c380 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Sebuah tautan untuk setel ulang sandi Anda telah dikirim ke email Anda. Jika Anda tidak menerima dalam jangka waktu yang wajar, periksa folder spam/sampah Anda.<br>Jika tidak ada, tanyakan pada administrator Anda.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"I know what I'm doing" : "Saya tahu apa yang saya lakukan",
- "Reset password" : "Setel ulang sandi",
"Password can not be changed. Please contact your administrator." : "Sandi tidak dapat diubah. Silakan hubungi administrator Anda",
"No" : "Tidak",
"Yes" : "Ya",
@@ -63,6 +62,7 @@
"Strong password" : "Sandi kuat",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web server Anda belum dikonfigurasikan dengan baik untuk mengizinkan sinkronisasi berkas karena tampaknya antarmuka WebDAV rusak.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Server ini tidak memiliki koneksi internet. Hal ini berarti bahwa beberapa fitur seperti mengaitkan penyimpanan eksternal, pemberitahuan tentang pembaruan atau instalasi aplikasi pihak ke-3 tidak akan bisa. Mengakses berkas dari remote dan mengirim email notifikasi juga tidak akan bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda menginginkan semua fitur.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Direktori data dan berkas Anda mungkin dapat diakses dari internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan untuk mengkonfigurasi server web Anda agar direktori data tidak lagi dapat diakses atau Anda dapat memindahkan direktori data di luar dokumen root webserver.",
"Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server",
"Shared" : "Dibagikan",
"Shared with {recipients}" : "Dibagikan dengan {recipients}",
@@ -77,11 +77,12 @@
"Share link" : "Bagikan tautan",
"The public link will expire no later than {days} days after it is created" : "Tautan publik akan kadaluarsa tidak lebih dari {days} hari setelah ini dibuat",
"Password protect" : "Lindungi dengan sandi",
+ "Password" : "Sandi",
"Choose a password for the public link" : "Tetapkan sandi untuk tautan publik",
- "Allow Public Upload" : "Izinkan Unggahan Publik",
"Email link to person" : "Emailkan tautan ini ke orang",
"Send" : "Kirim",
"Set expiration date" : "Atur tanggal kedaluwarsa",
+ "Expiration" : "Kedaluwarsa",
"Expiration date" : "Tanggal kedaluwarsa",
"Adding user..." : "Menambahkan pengguna...",
"group" : "grup",
@@ -93,7 +94,6 @@
"can edit" : "dapat sunting",
"access control" : "kontrol akses",
"create" : "buat",
- "update" : "perbarui",
"delete" : "hapus",
"Password protected" : "Sandi dilindungi",
"Error unsetting expiration date" : "Galat ketika menghapus tanggal kedaluwarsa",
@@ -111,20 +111,15 @@
"_download %n file_::_download %n files_" : [""],
"Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini memerlukan waktu.",
"Please reload the page." : "Silakan muat ulang halaman.",
- "The update was unsuccessful." : "Pembaruan tidak berhasil",
"The update was successful. Redirecting you to ownCloud now." : "Pembaruan sukses. Anda akan diarahkan ulang ke ownCloud.",
"Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah",
"Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat menyetel ulang email karena tidak ada alamat email untuk nama pengguna ini. Silakan hubungi Administrator Anda.",
"%s password reset" : "%s sandi disetel ulang",
"Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima tautan penyetelan ulang sandi lewat Email.",
- "Username" : "Nama pengguna",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Berkas anda terenkripsi. Jika sebelumnya anda belum mengaktifkan kunci pemulihan, tidak akan ada cara lagi untuk mendapatkan data anda kembali setelah sandi anda diatur ulang. Jika anda tidak yakin dengan apa yang harus dilakukan, silakan hubungi administrator anda sebelum melanjutkan. Apakah anda benar-benar ingin melanjutkan?",
- "Yes, I really want to reset my password now" : "Ya, Saya sungguh ingin mengatur ulang sandi saya sekarang",
- "Reset" : "Atur Ulang",
"New password" : "Sandi baru",
"New Password" : "Sandi Baru",
+ "Reset password" : "Setel ulang sandi",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!",
"For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ",
"Personal" : "Pribadi",
@@ -164,7 +159,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi cara mengkonfigurasi server anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.",
"Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>",
- "Password" : "Sandi",
+ "Username" : "Nama pengguna",
"Storage & database" : "Penyimpanan & Basis data",
"Data folder" : "Folder data",
"Configure the database" : "Konfigurasikan basis data",
@@ -180,6 +175,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Aplikasi ini memerlukan JavaScript untuk beroperasi dengan benar. Mohon <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktifkan JavaScript</a> dan muat ulang halaman.",
"%s is available. Get more information on how to update." : "%s tersedia. Dapatkan informasi lebih lanjut tentang cara memperbarui.",
"Log out" : "Keluar",
+ "Search" : "Cari",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"Forgot your password? Reset it!" : "Lupa sandi Anda? Setel ulang!",
diff --git a/core/l10n/is.js b/core/l10n/is.js
index 8f1f7d09eec..bf8edebd2a8 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Desember",
"Settings" : "Stillingar",
"Saving..." : "Er að vista ...",
- "Reset password" : "Endursetja lykilorð",
"No" : "Nei",
"Yes" : "Já",
"Choose" : "Veldu",
@@ -38,6 +37,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}",
"Shared with you by {owner}" : "Deilt með þér af {owner}",
"Password protect" : "Verja með lykilorði",
+ "Password" : "Lykilorð",
"Email link to person" : "Senda vefhlekk í tölvupóstu til notenda",
"Send" : "Senda",
"Set expiration date" : "Setja gildistíma",
@@ -48,7 +48,6 @@ OC.L10N.register(
"can edit" : "getur breytt",
"access control" : "aðgangsstýring",
"create" : "mynda",
- "update" : "uppfæra",
"delete" : "eyða",
"Password protected" : "Verja með lykilorði",
"Error unsetting expiration date" : "Villa við að aftengja gildistíma",
@@ -62,9 +61,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "Uppfærslan heppnaðist. Beini þér til ownCloud nú.",
"Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
- "You will receive a link to reset your password via Email." : "Þú munt fá veftengil í tölvupósti til að endursetja lykilorðið.",
- "Username" : "Notendanafn",
"New password" : "Nýtt lykilorð",
+ "Reset password" : "Endursetja lykilorð",
"Personal" : "Um mig",
"Users" : "Notendur",
"Apps" : "Forrit",
@@ -73,7 +71,7 @@ OC.L10N.register(
"Access forbidden" : "Aðgangur bannaður",
"Security Warning" : "Öryggis aðvörun",
"Create an <strong>admin account</strong>" : "Útbúa <strong>vefstjóra aðgang</strong>",
- "Password" : "Lykilorð",
+ "Username" : "Notendanafn",
"Data folder" : "Gagnamappa",
"Configure the database" : "Stilla gagnagrunn",
"Database user" : "Gagnagrunns notandi",
diff --git a/core/l10n/is.json b/core/l10n/is.json
index ff69c133fa6..934e4ec607f 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -20,7 +20,6 @@
"December" : "Desember",
"Settings" : "Stillingar",
"Saving..." : "Er að vista ...",
- "Reset password" : "Endursetja lykilorð",
"No" : "Nei",
"Yes" : "Já",
"Choose" : "Veldu",
@@ -36,6 +35,7 @@
"Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}",
"Shared with you by {owner}" : "Deilt með þér af {owner}",
"Password protect" : "Verja með lykilorði",
+ "Password" : "Lykilorð",
"Email link to person" : "Senda vefhlekk í tölvupóstu til notenda",
"Send" : "Senda",
"Set expiration date" : "Setja gildistíma",
@@ -46,7 +46,6 @@
"can edit" : "getur breytt",
"access control" : "aðgangsstýring",
"create" : "mynda",
- "update" : "uppfæra",
"delete" : "eyða",
"Password protected" : "Verja með lykilorði",
"Error unsetting expiration date" : "Villa við að aftengja gildistíma",
@@ -60,9 +59,8 @@
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "Uppfærslan heppnaðist. Beini þér til ownCloud nú.",
"Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
- "You will receive a link to reset your password via Email." : "Þú munt fá veftengil í tölvupósti til að endursetja lykilorðið.",
- "Username" : "Notendanafn",
"New password" : "Nýtt lykilorð",
+ "Reset password" : "Endursetja lykilorð",
"Personal" : "Um mig",
"Users" : "Notendur",
"Apps" : "Forrit",
@@ -71,7 +69,7 @@
"Access forbidden" : "Aðgangur bannaður",
"Security Warning" : "Öryggis aðvörun",
"Create an <strong>admin account</strong>" : "Útbúa <strong>vefstjóra aðgang</strong>",
- "Password" : "Lykilorð",
+ "Username" : "Notendanafn",
"Data folder" : "Gagnamappa",
"Configure the database" : "Stilla gagnagrunn",
"Database user" : "Gagnagrunns notandi",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index dcc221bf885..000eed625b3 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Il collegamento per reimpostare la password è stato inviato al tuo indirizzo di posta. Se non lo ricevi in tempi ragionevoli, controlla le cartelle della posta indesiderata.<br>Se non dovesse essere nemmeno lì, contatta il tuo amministratore locale.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, per favore contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"I know what I'm doing" : "So cosa sto facendo",
- "Reset password" : "Ripristina la password",
"Password can not be changed. Please contact your administrator." : "La password non può essere cambiata. Contatta il tuo amministratore.",
"No" : "No",
"Yes" : "Sì",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Errore durante il caricamento del modello del selettore file: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Errore durante il caricamento del modello di messaggio: {error}",
+ "read-only" : "sola lettura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} file in conflitto","{count} file in conflitto"],
"One file conflict" : "Un file in conflitto",
"New Files" : "File nuovi",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Password forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra no funzionare correttamente.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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à.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
"Shared" : "Condivisi",
"Shared with {recipients}" : "Condiviso con {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Condividi con utente o gruppo ...",
"Share link" : "Condividi collegamento",
"The public link will expire no later than {days} days after it is created" : "Il collegamento pubblico scadrà non più tardi di {days} giorni dopo la sua creazione",
+ "Link" : "Collegamento",
"Password protect" : "Proteggi con password",
+ "Password" : "Password",
"Choose a password for the public link" : "Scegli una password per il collegamento pubblico",
- "Allow Public Upload" : "Consenti caricamento pubblico",
+ "Allow editing" : "Consenti la modifica",
"Email link to person" : "Invia collegamento via email",
"Send" : "Invia",
"Set expiration date" : "Imposta data di scadenza",
+ "Expiration" : "Scadenza",
"Expiration date" : "Data di scadenza",
"Adding user..." : "Aggiunta utente in corso...",
"group" : "gruppo",
+ "remote" : "remota",
"Resharing is not allowed" : "La ri-condivisione non è consentita",
"Shared in {item} with {user}" : "Condiviso in {item} con {user}",
"Unshare" : "Rimuovi condivisione",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "può modificare",
"access control" : "controllo d'accesso",
"create" : "creare",
- "update" : "aggiornare",
+ "change" : "cambia",
"delete" : "elimina",
"Password protected" : "Protetta da password",
"Error unsetting expiration date" : "Errore durante la rimozione della data di scadenza",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Ciao mondo!",
"sunny" : "soleggiato",
"Hello {name}, the weather is {weather}" : "Ciao {name}, il tempo è {weather}",
+ "Hello {name}" : "Ciao {name}",
"_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"],
"Updating {productName} to version {version}, this may take a while." : "Aggiornamento di {productName} alla versione {version}, potrebbe richiedere del tempo.",
"Please reload the page." : "Ricarica la pagina.",
- "The update was unsuccessful." : "L'aggiornamento non è riuscito.",
+ "The update was unsuccessful. " : "L'aggiornamento non è riuscito.",
"The update was successful. Redirecting you to ownCloud now." : "L'aggiornamento è stato effettuato correttamente. Stai per essere reindirizzato a ownCloud.",
"Couldn't reset password because the token is invalid" : "Impossibile reimpostare la password poiché il token non è valido",
"Couldn't send reset email. Please make sure your username is correct." : "Impossibile inviare l'email di reimpostazione. Assicurati che il nome utente sia corretto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione poiché non è presente un indirizzo email per questo nome utente. Contatta il tuo amministratore.",
"%s password reset" : "Ripristino password di %s",
"Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
- "You will receive a link to reset your password via Email." : "Riceverai un collegamento per ripristinare la tua password via email",
- "Username" : "Nome utente",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "I file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà ripristinata. Se non sei sicuro, per favore contatta l'amministratore prima di proseguire. Vuoi davvero continuare?",
- "Yes, I really want to reset my password now" : "Sì, voglio davvero ripristinare la mia password adesso",
- "Reset" : "Ripristina",
"New password" : "Nuova password",
"New Password" : "Nuova password",
+ "Reset password" : "Ripristina la password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non è supportato e %s non funzionerà correttamente su questa piattaforma. Usalo a tuo rischio!",
"For the best results, please consider using a GNU/Linux server instead." : "Per avere il risultato migliore, prendi in considerazione l'utilizzo di un server GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che open_basedir sia stata configurata in php.ini. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Rimuovi l'impostazione di open_basedir nel tuo php.ini o passa alla versione a 64 bit di PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che cURL non sia installato. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
+ "Please install the cURL extension and restart your webserver." : "Installa l'estensione cURL e riavvia il server web.",
"Personal" : "Personale",
"Users" : "Utenti",
"Apps" : "Applicazioni",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>account amministratore</strong>",
- "Password" : "Password",
+ "Username" : "Nome utente",
"Storage & database" : "Archiviazione e database",
"Data folder" : "Cartella dati",
"Configure the database" : "Configura il database",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Abilita JavaScript</a> e ricarica questa pagina.",
"%s is available. Get more information on how to update." : "%s è disponibile. Ottieni ulteriori informazioni sull'aggiornamento.",
"Log out" : "Esci",
+ "Search" : "Cerca",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
"Please contact your administrator." : "Contatta il tuo amministratore di sistema.",
"Forgot your password? Reset it!" : "Hai dimenticato la password? Reimpostala!",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 599c613828b..a469798e010 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Il collegamento per reimpostare la password è stato inviato al tuo indirizzo di posta. Se non lo ricevi in tempi ragionevoli, controlla le cartelle della posta indesiderata.<br>Se non dovesse essere nemmeno lì, contatta il tuo amministratore locale.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, per favore contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"I know what I'm doing" : "So cosa sto facendo",
- "Reset password" : "Ripristina la password",
"Password can not be changed. Please contact your administrator." : "La password non può essere cambiata. Contatta il tuo amministratore.",
"No" : "No",
"Yes" : "Sì",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Errore durante il caricamento del modello del selettore file: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Errore durante il caricamento del modello di messaggio: {error}",
+ "read-only" : "sola lettura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} file in conflitto","{count} file in conflitto"],
"One file conflict" : "Un file in conflitto",
"New Files" : "File nuovi",
@@ -63,6 +63,7 @@
"Strong password" : "Password forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra no funzionare correttamente.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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à.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
"Shared" : "Condivisi",
"Shared with {recipients}" : "Condiviso con {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Condividi con utente o gruppo ...",
"Share link" : "Condividi collegamento",
"The public link will expire no later than {days} days after it is created" : "Il collegamento pubblico scadrà non più tardi di {days} giorni dopo la sua creazione",
+ "Link" : "Collegamento",
"Password protect" : "Proteggi con password",
+ "Password" : "Password",
"Choose a password for the public link" : "Scegli una password per il collegamento pubblico",
- "Allow Public Upload" : "Consenti caricamento pubblico",
+ "Allow editing" : "Consenti la modifica",
"Email link to person" : "Invia collegamento via email",
"Send" : "Invia",
"Set expiration date" : "Imposta data di scadenza",
+ "Expiration" : "Scadenza",
"Expiration date" : "Data di scadenza",
"Adding user..." : "Aggiunta utente in corso...",
"group" : "gruppo",
+ "remote" : "remota",
"Resharing is not allowed" : "La ri-condivisione non è consentita",
"Shared in {item} with {user}" : "Condiviso in {item} con {user}",
"Unshare" : "Rimuovi condivisione",
@@ -93,7 +98,7 @@
"can edit" : "può modificare",
"access control" : "controllo d'accesso",
"create" : "creare",
- "update" : "aggiornare",
+ "change" : "cambia",
"delete" : "elimina",
"Password protected" : "Protetta da password",
"Error unsetting expiration date" : "Errore durante la rimozione della data di scadenza",
@@ -112,25 +117,26 @@
"Hello world!" : "Ciao mondo!",
"sunny" : "soleggiato",
"Hello {name}, the weather is {weather}" : "Ciao {name}, il tempo è {weather}",
+ "Hello {name}" : "Ciao {name}",
"_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"],
"Updating {productName} to version {version}, this may take a while." : "Aggiornamento di {productName} alla versione {version}, potrebbe richiedere del tempo.",
"Please reload the page." : "Ricarica la pagina.",
- "The update was unsuccessful." : "L'aggiornamento non è riuscito.",
+ "The update was unsuccessful. " : "L'aggiornamento non è riuscito.",
"The update was successful. Redirecting you to ownCloud now." : "L'aggiornamento è stato effettuato correttamente. Stai per essere reindirizzato a ownCloud.",
"Couldn't reset password because the token is invalid" : "Impossibile reimpostare la password poiché il token non è valido",
"Couldn't send reset email. Please make sure your username is correct." : "Impossibile inviare l'email di reimpostazione. Assicurati che il nome utente sia corretto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione poiché non è presente un indirizzo email per questo nome utente. Contatta il tuo amministratore.",
"%s password reset" : "Ripristino password di %s",
"Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
- "You will receive a link to reset your password via Email." : "Riceverai un collegamento per ripristinare la tua password via email",
- "Username" : "Nome utente",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "I file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà ripristinata. Se non sei sicuro, per favore contatta l'amministratore prima di proseguire. Vuoi davvero continuare?",
- "Yes, I really want to reset my password now" : "Sì, voglio davvero ripristinare la mia password adesso",
- "Reset" : "Ripristina",
"New password" : "Nuova password",
"New Password" : "Nuova password",
+ "Reset password" : "Ripristina la password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non è supportato e %s non funzionerà correttamente su questa piattaforma. Usalo a tuo rischio!",
"For the best results, please consider using a GNU/Linux server instead." : "Per avere il risultato migliore, prendi in considerazione l'utilizzo di un server GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che open_basedir sia stata configurata in php.ini. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Rimuovi l'impostazione di open_basedir nel tuo php.ini o passa alla versione a 64 bit di PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che cURL non sia installato. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
+ "Please install the cURL extension and restart your webserver." : "Installa l'estensione cURL e riavvia il server web.",
"Personal" : "Personale",
"Users" : "Utenti",
"Apps" : "Applicazioni",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>account amministratore</strong>",
- "Password" : "Password",
+ "Username" : "Nome utente",
"Storage & database" : "Archiviazione e database",
"Data folder" : "Cartella dati",
"Configure the database" : "Configura il database",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Abilita JavaScript</a> e ricarica questa pagina.",
"%s is available. Get more information on how to update." : "%s è disponibile. Ottieni ulteriori informazioni sull'aggiornamento.",
"Log out" : "Esci",
+ "Search" : "Cerca",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
"Please contact your administrator." : "Contatta il tuo amministratore di sistema.",
"Forgot your password? Reset it!" : "Hai dimenticato la password? Reimpostala!",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index bba306dafc6..2e9557fe25d 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットする、このリンクをクリックするとメールを送信します。しばらく経ってもメールが届かなかった場合は、スパム/ジャンクフォルダを確認してください。<br>それでも見つからなかった場合は、管理者に問合せてください。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に連絡してください。<br />続けてよろしいでしょうか?",
"I know what I'm doing" : "どういう操作をしているか理解しています",
- "Reset password" : "パスワードをリセット",
"Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。",
"No" : "いいえ",
"Yes" : "はい",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "ファイル選択テンプレートの読み込みエラー: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "メッセージテンプレートの読み込みエラー: {error}",
+ "read-only" : "読み取り専用",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} ファイルが競合"],
"One file conflict" : "1ファイルが競合",
"New Files" : "新しいファイル",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "強いパスワード",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースに問題があると思われるため、Webサーバーはまだファイルの同期を許可するよう適切に設定されていません。",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティアプリといったいくつかの機能が使えません。また、リモート接続でのファイルアクセス、通知メールの送信と言った機能も利用できないかもしれません。すべての機能を利用したい場合は、このサーバーがインターネット接続できるようにすることをお勧めします。",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートから移動するよう強く提案します。",
"Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました",
"Shared" : "共有中",
"Shared with {recipients}" : "{recipients} と共有",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "ユーザーもしくはグループと共有 ...",
"Share link" : "URLで共有",
"The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります",
+ "Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
+ "Password" : "パスワード",
"Choose a password for the public link" : "URLによる共有のパスワードを入力",
- "Allow Public Upload" : "アップロードを許可",
+ "Allow editing" : "編集許可",
"Email link to person" : "メールリンク",
"Send" : "送信",
"Set expiration date" : "有効期限を設定",
+ "Expiration" : "期限切れ",
"Expiration date" : "有効期限",
"Adding user..." : "ユーザーを追加しています...",
"group" : "グループ",
+ "remote" : "リモート",
"Resharing is not allowed" : "再共有は許可されていません",
"Shared in {item} with {user}" : "{item} 内で {user} と共有中",
"Unshare" : "共有解除",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "編集を許可",
"access control" : "アクセス権限",
"create" : "作成",
- "update" : "アップデート",
+ "change" : "更新",
"delete" : "削除",
"Password protected" : "パスワード保護",
"Error unsetting expiration date" : "有効期限の未設定エラー",
@@ -117,22 +122,22 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["%n個のファイルをダウンロード"],
"Updating {productName} to version {version}, this may take a while." : "{productName} を バージョン {version} に更新しています。しばらくお待ちください。",
"Please reload the page." : "ページをリロードしてください。",
- "The update was unsuccessful." : "アップデートに失敗しました。",
+ "The update was unsuccessful. " : "アップデートに失敗しました。",
"The update was successful. Redirecting you to ownCloud now." : "アップデートに成功しました。今すぐownCloudにリダイレクトします。",
"Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした",
"Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。",
"%s password reset" : "%s パスワードリセット",
"Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
- "You will receive a link to reset your password via Email." : "メールでパスワードをリセットするリンクが届きます。",
- "Username" : "ユーザー名",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "ファイルが暗号化されています。リカバリキーを有効にしていなかった場合、パスワードをリセットしてからデータを復旧する方法はありません。何をすべきかよくわからないなら、続ける前にまず管理者に連絡しましょう。本当に続けますか?",
- "Yes, I really want to reset my password now" : "はい、今すぐパスワードをリセットします。",
- "Reset" : "リセット",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
+ "Reset password" : "パスワードをリセット",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%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 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "このインスタンス %s は、32bit PHP 環境で動いておりphp.ini に open_basedir が設定されているようです。これにより4GB以上のファイルで問題を引き起こし、非常に残念なことになるでしょう。",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "php.ini から open_basedir 設定を削除するか、64bit PHPに切り替えて下さい。",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "このインスタンス %s は、32bit PHP 環境で動いておりcURLがインストールされていないようです。これにより4GB以上のファイルで問題を引き起こし、非常に残念なことになるでしょう。",
+ "Please install the cURL extension and restart your webserver." : "cURL拡張をインストールして、WEBサーバーを再起動して下さい。",
"Personal" : "個人",
"Users" : "ユーザー",
"Apps" : "アプリ",
@@ -170,7 +175,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccessファイルが動作していないため、おそらくあなたのデータディレクトリまたはファイルはインターネットからアクセス可能になっています。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを適正に設定する情報は、こちらの<a href=\"%s\" target=\"_blank\">ドキュメント</a>を参照してください。",
"Create an <strong>admin account</strong>" : "<strong>管理者アカウント</strong>を作成してください",
- "Password" : "パスワード",
+ "Username" : "ユーザー名",
"Storage & database" : "ストレージとデータベース",
"Data folder" : "データフォルダー",
"Configure the database" : "データベースを設定してください",
@@ -186,6 +191,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "このアプリケーションは使用する為、JavaScriptが必要です。\n<a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScriptを有効にし</a>、ページを更新してください。 ",
"%s is available. Get more information on how to update." : "%s が利用可能です。アップデート方法について詳細情報を確認してください。",
"Log out" : "ログアウト",
+ "Search" : "検索",
"Server side authentication failed!" : "サーバーサイドの認証に失敗しました!",
"Please contact your administrator." : "管理者に問い合わせてください。",
"Forgot your password? Reset it!" : "パスワードを忘れましたか?リセットします!",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 706d6bcfc29..0fabd819e7e 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットする、このリンクをクリックするとメールを送信します。しばらく経ってもメールが届かなかった場合は、スパム/ジャンクフォルダを確認してください。<br>それでも見つからなかった場合は、管理者に問合せてください。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に連絡してください。<br />続けてよろしいでしょうか?",
"I know what I'm doing" : "どういう操作をしているか理解しています",
- "Reset password" : "パスワードをリセット",
"Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。",
"No" : "いいえ",
"Yes" : "はい",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "ファイル選択テンプレートの読み込みエラー: {error}",
"Ok" : "OK",
"Error loading message template: {error}" : "メッセージテンプレートの読み込みエラー: {error}",
+ "read-only" : "読み取り専用",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} ファイルが競合"],
"One file conflict" : "1ファイルが競合",
"New Files" : "新しいファイル",
@@ -63,6 +63,7 @@
"Strong password" : "強いパスワード",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースに問題があると思われるため、Webサーバーはまだファイルの同期を許可するよう適切に設定されていません。",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティアプリといったいくつかの機能が使えません。また、リモート接続でのファイルアクセス、通知メールの送信と言った機能も利用できないかもしれません。すべての機能を利用したい場合は、このサーバーがインターネット接続できるようにすることをお勧めします。",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートから移動するよう強く提案します。",
"Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました",
"Shared" : "共有中",
"Shared with {recipients}" : "{recipients} と共有",
@@ -76,15 +77,19 @@
"Share with user or group …" : "ユーザーもしくはグループと共有 ...",
"Share link" : "URLで共有",
"The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります",
+ "Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
+ "Password" : "パスワード",
"Choose a password for the public link" : "URLによる共有のパスワードを入力",
- "Allow Public Upload" : "アップロードを許可",
+ "Allow editing" : "編集許可",
"Email link to person" : "メールリンク",
"Send" : "送信",
"Set expiration date" : "有効期限を設定",
+ "Expiration" : "期限切れ",
"Expiration date" : "有効期限",
"Adding user..." : "ユーザーを追加しています...",
"group" : "グループ",
+ "remote" : "リモート",
"Resharing is not allowed" : "再共有は許可されていません",
"Shared in {item} with {user}" : "{item} 内で {user} と共有中",
"Unshare" : "共有解除",
@@ -93,7 +98,7 @@
"can edit" : "編集を許可",
"access control" : "アクセス権限",
"create" : "作成",
- "update" : "アップデート",
+ "change" : "更新",
"delete" : "削除",
"Password protected" : "パスワード保護",
"Error unsetting expiration date" : "有効期限の未設定エラー",
@@ -115,22 +120,22 @@
"_download %n file_::_download %n files_" : ["%n個のファイルをダウンロード"],
"Updating {productName} to version {version}, this may take a while." : "{productName} を バージョン {version} に更新しています。しばらくお待ちください。",
"Please reload the page." : "ページをリロードしてください。",
- "The update was unsuccessful." : "アップデートに失敗しました。",
+ "The update was unsuccessful. " : "アップデートに失敗しました。",
"The update was successful. Redirecting you to ownCloud now." : "アップデートに成功しました。今すぐownCloudにリダイレクトします。",
"Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした",
"Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。",
"%s password reset" : "%s パスワードリセット",
"Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
- "You will receive a link to reset your password via Email." : "メールでパスワードをリセットするリンクが届きます。",
- "Username" : "ユーザー名",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "ファイルが暗号化されています。リカバリキーを有効にしていなかった場合、パスワードをリセットしてからデータを復旧する方法はありません。何をすべきかよくわからないなら、続ける前にまず管理者に連絡しましょう。本当に続けますか?",
- "Yes, I really want to reset my password now" : "はい、今すぐパスワードをリセットします。",
- "Reset" : "リセット",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
+ "Reset password" : "パスワードをリセット",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%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 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "このインスタンス %s は、32bit PHP 環境で動いておりphp.ini に open_basedir が設定されているようです。これにより4GB以上のファイルで問題を引き起こし、非常に残念なことになるでしょう。",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "php.ini から open_basedir 設定を削除するか、64bit PHPに切り替えて下さい。",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "このインスタンス %s は、32bit PHP 環境で動いておりcURLがインストールされていないようです。これにより4GB以上のファイルで問題を引き起こし、非常に残念なことになるでしょう。",
+ "Please install the cURL extension and restart your webserver." : "cURL拡張をインストールして、WEBサーバーを再起動して下さい。",
"Personal" : "個人",
"Users" : "ユーザー",
"Apps" : "アプリ",
@@ -168,7 +173,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccessファイルが動作していないため、おそらくあなたのデータディレクトリまたはファイルはインターネットからアクセス可能になっています。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを適正に設定する情報は、こちらの<a href=\"%s\" target=\"_blank\">ドキュメント</a>を参照してください。",
"Create an <strong>admin account</strong>" : "<strong>管理者アカウント</strong>を作成してください",
- "Password" : "パスワード",
+ "Username" : "ユーザー名",
"Storage & database" : "ストレージとデータベース",
"Data folder" : "データフォルダー",
"Configure the database" : "データベースを設定してください",
@@ -184,6 +189,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "このアプリケーションは使用する為、JavaScriptが必要です。\n<a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScriptを有効にし</a>、ページを更新してください。 ",
"%s is available. Get more information on how to update." : "%s が利用可能です。アップデート方法について詳細情報を確認してください。",
"Log out" : "ログアウト",
+ "Search" : "検索",
"Server side authentication failed!" : "サーバーサイドの認証に失敗しました!",
"Please contact your administrator." : "管理者に問い合わせてください。",
"Forgot your password? Reset it!" : "パスワードを忘れましたか?リセットします!",
diff --git a/core/l10n/ka_GE.js b/core/l10n/ka_GE.js
index 699065f6c50..5231d64dd5a 100644
--- a/core/l10n/ka_GE.js
+++ b/core/l10n/ka_GE.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "დეკემბერი",
"Settings" : "პარამეტრები",
"Saving..." : "შენახვა...",
- "Reset password" : "პაროლის შეცვლა",
"No" : "არა",
"Yes" : "კი",
"Choose" : "არჩევა",
@@ -40,9 +39,11 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "გაზიარდა თქვენთვის და ჯგუფისთვის {group}, {owner}–ის მიერ",
"Shared with you by {owner}" : "გაზიარდა თქვენთვის {owner}–ის მიერ",
"Password protect" : "პაროლით დაცვა",
+ "Password" : "პაროლი",
"Email link to person" : "ლინკის პიროვნების იმეილზე გაგზავნა",
"Send" : "გაგზავნა",
"Set expiration date" : "მიუთითე ვადის გასვლის დრო",
+ "Expiration" : "ვადის გასვლის დრო",
"Expiration date" : "ვადის გასვლის დრო",
"group" : "ჯგუფი",
"Resharing is not allowed" : "მეორეჯერ გაზიარება არ არის დაშვებული",
@@ -51,7 +52,6 @@ OC.L10N.register(
"can edit" : "შეგიძლია შეცვლა",
"access control" : "დაშვების კონტროლი",
"create" : "შექმნა",
- "update" : "განახლება",
"delete" : "წაშლა",
"Password protected" : "პაროლით დაცული",
"Error unsetting expiration date" : "შეცდომა ვადის გასვლის მოხსნის დროს",
@@ -65,9 +65,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "განახლება ვერ განხორციელდა. გადამისამართება თქვენს ownCloud–ზე.",
"Use the following link to reset your password: {link}" : "გამოიყენე შემდეგი ლინკი პაროლის შესაცვლელად: {link}",
- "You will receive a link to reset your password via Email." : "თქვენ მოგივათ პაროლის შესაცვლელი ლინკი მეილზე",
- "Username" : "მომხმარებლის სახელი",
"New password" : "ახალი პაროლი",
+ "Reset password" : "პაროლის შეცვლა",
"Personal" : "პირადი",
"Users" : "მომხმარებელი",
"Apps" : "აპლიკაციები",
@@ -78,7 +77,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "თქვენი PHP ვერსია შეიცავს საფრთხეს NULL Byte შეტევებისთვის (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.",
"Create an <strong>admin account</strong>" : "შექმენი <strong>ადმინ ექაუნტი</strong>",
- "Password" : "პაროლი",
+ "Username" : "მომხმარებლის სახელი",
"Data folder" : "მონაცემთა საქაღალდე",
"Configure the database" : "მონაცემთა ბაზის კონფიგურირება",
"Database user" : "მონაცემთა ბაზის მომხმარებელი",
@@ -88,6 +87,7 @@ OC.L10N.register(
"Database host" : "მონაცემთა ბაზის ჰოსტი",
"Finish setup" : "კონფიგურაციის დასრულება",
"Log out" : "გამოსვლა",
+ "Search" : "ძებნა",
"remember" : "დამახსოვრება",
"Log in" : "შესვლა",
"Alternative Logins" : "ალტერნატიული Login–ი"
diff --git a/core/l10n/ka_GE.json b/core/l10n/ka_GE.json
index c7d8d774620..6fb53280523 100644
--- a/core/l10n/ka_GE.json
+++ b/core/l10n/ka_GE.json
@@ -20,7 +20,6 @@
"December" : "დეკემბერი",
"Settings" : "პარამეტრები",
"Saving..." : "შენახვა...",
- "Reset password" : "პაროლის შეცვლა",
"No" : "არა",
"Yes" : "კი",
"Choose" : "არჩევა",
@@ -38,9 +37,11 @@
"Shared with you and the group {group} by {owner}" : "გაზიარდა თქვენთვის და ჯგუფისთვის {group}, {owner}–ის მიერ",
"Shared with you by {owner}" : "გაზიარდა თქვენთვის {owner}–ის მიერ",
"Password protect" : "პაროლით დაცვა",
+ "Password" : "პაროლი",
"Email link to person" : "ლინკის პიროვნების იმეილზე გაგზავნა",
"Send" : "გაგზავნა",
"Set expiration date" : "მიუთითე ვადის გასვლის დრო",
+ "Expiration" : "ვადის გასვლის დრო",
"Expiration date" : "ვადის გასვლის დრო",
"group" : "ჯგუფი",
"Resharing is not allowed" : "მეორეჯერ გაზიარება არ არის დაშვებული",
@@ -49,7 +50,6 @@
"can edit" : "შეგიძლია შეცვლა",
"access control" : "დაშვების კონტროლი",
"create" : "შექმნა",
- "update" : "განახლება",
"delete" : "წაშლა",
"Password protected" : "პაროლით დაცული",
"Error unsetting expiration date" : "შეცდომა ვადის გასვლის მოხსნის დროს",
@@ -63,9 +63,8 @@
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "განახლება ვერ განხორციელდა. გადამისამართება თქვენს ownCloud–ზე.",
"Use the following link to reset your password: {link}" : "გამოიყენე შემდეგი ლინკი პაროლის შესაცვლელად: {link}",
- "You will receive a link to reset your password via Email." : "თქვენ მოგივათ პაროლის შესაცვლელი ლინკი მეილზე",
- "Username" : "მომხმარებლის სახელი",
"New password" : "ახალი პაროლი",
+ "Reset password" : "პაროლის შეცვლა",
"Personal" : "პირადი",
"Users" : "მომხმარებელი",
"Apps" : "აპლიკაციები",
@@ -76,7 +75,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "თქვენი PHP ვერსია შეიცავს საფრთხეს NULL Byte შეტევებისთვის (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.",
"Create an <strong>admin account</strong>" : "შექმენი <strong>ადმინ ექაუნტი</strong>",
- "Password" : "პაროლი",
+ "Username" : "მომხმარებლის სახელი",
"Data folder" : "მონაცემთა საქაღალდე",
"Configure the database" : "მონაცემთა ბაზის კონფიგურირება",
"Database user" : "მონაცემთა ბაზის მომხმარებელი",
@@ -86,6 +85,7 @@
"Database host" : "მონაცემთა ბაზის ჰოსტი",
"Finish setup" : "კონფიგურაციის დასრულება",
"Log out" : "გამოსვლა",
+ "Search" : "ძებნა",
"remember" : "დამახსოვრება",
"Log in" : "შესვლა",
"Alternative Logins" : "ალტერნატიული Login–ი"
diff --git a/core/l10n/km.js b/core/l10n/km.js
index 80b25cbe34c..8afc52c7187 100644
--- a/core/l10n/km.js
+++ b/core/l10n/km.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"December" : "ខែធ្នូ",
"Settings" : "ការកំណត់",
"Saving..." : "កំពុង​រក្សាទុក",
- "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"No" : "ទេ",
"Yes" : "ព្រម",
"Choose" : "ជ្រើស",
@@ -51,7 +50,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "បាន​ចែក​រំលែក​ជាមួយ​អ្នក និង​ក្រុម {group} ដោយ {owner}",
"Shared with you by {owner}" : "បាន​ចែក​រំលែក​ជាមួយ​អ្នក​ដោយ {owner}",
"Password protect" : "ការ​ពារ​ដោយ​ពាក្យ​សម្ងាត់",
- "Allow Public Upload" : "អនុញ្ញាត​ការ​ផ្ទុកឡើង​ជា​សាធារណៈ",
+ "Password" : "ពាក្យសម្ងាត់",
"Send" : "ផ្ញើ",
"Set expiration date" : "កំណត់​ពេល​ផុត​កំណត់",
"Expiration date" : "ពេល​ផុត​កំណត់",
@@ -63,7 +62,6 @@ OC.L10N.register(
"can edit" : "អាច​កែប្រែ",
"access control" : "សិទ្ធិ​បញ្ជា",
"create" : "បង្កើត",
- "update" : "ធ្វើ​បច្ចុប្បន្នភាព",
"delete" : "លុប",
"Password protected" : "បាន​ការ​ពារ​ដោយ​ពាក្យ​សម្ងាត់",
"Sending ..." : "កំពុង​ផ្ញើ ...",
@@ -74,8 +72,8 @@ OC.L10N.register(
"Add" : "បញ្ចូល",
"_download %n file_::_download %n files_" : [""],
"Please reload the page." : "សូម​ផ្ទុក​ទំព័រ​នេះ​ឡើង​វិញ។",
- "Username" : "ឈ្មោះ​អ្នកប្រើ",
"New password" : "ពាក្យ​សម្ងាត់​ថ្មី",
+ "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"Personal" : "ផ្ទាល់​ខ្លួន",
"Users" : "អ្នកប្រើ",
"Apps" : "កម្មវិធី",
@@ -84,7 +82,7 @@ OC.L10N.register(
"Access forbidden" : "បាន​ហាមឃាត់​ការ​ចូល",
"Security Warning" : "បម្រាម​សុវត្ថិភាព",
"Create an <strong>admin account</strong>" : "បង្កើត​<strong>គណនី​អភិបាល</strong>",
- "Password" : "ពាក្យសម្ងាត់",
+ "Username" : "ឈ្មោះ​អ្នកប្រើ",
"Storage & database" : "ឃ្លាំង​ផ្ទុក & មូលដ្ឋាន​ទិន្នន័យ",
"Data folder" : "ថត​ទិន្នន័យ",
"Configure the database" : "កំណត់​សណ្ឋាន​មូលដ្ឋាន​ទិន្នន័យ",
@@ -95,6 +93,7 @@ OC.L10N.register(
"Finish setup" : "បញ្ចប់​ការ​ដំឡើង",
"Finishing …" : "កំពុង​បញ្ចប់ ...",
"Log out" : "ចាក​ចេញ",
+ "Search" : "ស្វែង​រក",
"remember" : "ចងចាំ",
"Log in" : "ចូល",
"Alternative Logins" : "ការ​ចូល​ជំនួស"
diff --git a/core/l10n/km.json b/core/l10n/km.json
index 50f693d3620..49e1d0b7f6d 100644
--- a/core/l10n/km.json
+++ b/core/l10n/km.json
@@ -22,7 +22,6 @@
"December" : "ខែធ្នូ",
"Settings" : "ការកំណត់",
"Saving..." : "កំពុង​រក្សាទុក",
- "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"No" : "ទេ",
"Yes" : "ព្រម",
"Choose" : "ជ្រើស",
@@ -49,7 +48,7 @@
"Shared with you and the group {group} by {owner}" : "បាន​ចែក​រំលែក​ជាមួយ​អ្នក និង​ក្រុម {group} ដោយ {owner}",
"Shared with you by {owner}" : "បាន​ចែក​រំលែក​ជាមួយ​អ្នក​ដោយ {owner}",
"Password protect" : "ការ​ពារ​ដោយ​ពាក្យ​សម្ងាត់",
- "Allow Public Upload" : "អនុញ្ញាត​ការ​ផ្ទុកឡើង​ជា​សាធារណៈ",
+ "Password" : "ពាក្យសម្ងាត់",
"Send" : "ផ្ញើ",
"Set expiration date" : "កំណត់​ពេល​ផុត​កំណត់",
"Expiration date" : "ពេល​ផុត​កំណត់",
@@ -61,7 +60,6 @@
"can edit" : "អាច​កែប្រែ",
"access control" : "សិទ្ធិ​បញ្ជា",
"create" : "បង្កើត",
- "update" : "ធ្វើ​បច្ចុប្បន្នភាព",
"delete" : "លុប",
"Password protected" : "បាន​ការ​ពារ​ដោយ​ពាក្យ​សម្ងាត់",
"Sending ..." : "កំពុង​ផ្ញើ ...",
@@ -72,8 +70,8 @@
"Add" : "បញ្ចូល",
"_download %n file_::_download %n files_" : [""],
"Please reload the page." : "សូម​ផ្ទុក​ទំព័រ​នេះ​ឡើង​វិញ។",
- "Username" : "ឈ្មោះ​អ្នកប្រើ",
"New password" : "ពាក្យ​សម្ងាត់​ថ្មី",
+ "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"Personal" : "ផ្ទាល់​ខ្លួន",
"Users" : "អ្នកប្រើ",
"Apps" : "កម្មវិធី",
@@ -82,7 +80,7 @@
"Access forbidden" : "បាន​ហាមឃាត់​ការ​ចូល",
"Security Warning" : "បម្រាម​សុវត្ថិភាព",
"Create an <strong>admin account</strong>" : "បង្កើត​<strong>គណនី​អភិបាល</strong>",
- "Password" : "ពាក្យសម្ងាត់",
+ "Username" : "ឈ្មោះ​អ្នកប្រើ",
"Storage & database" : "ឃ្លាំង​ផ្ទុក & មូលដ្ឋាន​ទិន្នន័យ",
"Data folder" : "ថត​ទិន្នន័យ",
"Configure the database" : "កំណត់​សណ្ឋាន​មូលដ្ឋាន​ទិន្នន័យ",
@@ -93,6 +91,7 @@
"Finish setup" : "បញ្ចប់​ការ​ដំឡើង",
"Finishing …" : "កំពុង​បញ្ចប់ ...",
"Log out" : "ចាក​ចេញ",
+ "Search" : "ស្វែង​រក",
"remember" : "ចងចាំ",
"Log in" : "ចូល",
"Alternative Logins" : "ការ​ចូល​ជំនួស"
diff --git a/core/l10n/kn.js b/core/l10n/kn.js
index 49247f7174c..ec27321166c 100644
--- a/core/l10n/kn.js
+++ b/core/l10n/kn.js
@@ -1,7 +1,177 @@
OC.L10N.register(
"core",
{
+ "Couldn't send mail to following users: %s " : "ಕೆಳಗಿನ ಬಳಕೆದಾರರಿಗೆ ಈ-ಮೇಲ್ ಕಳುಹಿಸಿ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ: %s",
+ "Turned on maintenance mode" : "ನಿರ್ವಹಣೆಯ ಸ್ತಿತಿಯನ್ನು ಆರಂಭಿಸಲಾಗಿದೆ",
+ "Turned off maintenance mode" : "ನಿರ್ವಹಣೆಯ ಸ್ತಿತಿಯನ್ನು ಮುಕ್ತಗೊಳಿಸಲಾಗಿದೆ",
+ "Updated database" : "ದತ್ತಸಂಚಯ ",
+ "Checked database schema update" : "ಪರಿಶೀಲಿಸಿದ ದತ್ತಸಂಚಯ ಯೋಜನಾ ಅಪ್ಡೇಟ್",
+ "Checked database schema update for apps" : "ನವೀಕರಿಸಿದ ದತ್ತಸಂಚಯದ ಯೋಜನಾ ಪ್ರತಿಗಳನ್ನು ಕಾಯಕ್ರಮಗಳೊಂದಿಗೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ",
+ "Updated \"%s\" to %s" : "%s ರ ಆವೃತ್ತಿ %s ನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತದೆ.",
+ "Disabled incompatible apps: %s" : "ಹೊಂದಾಣಿಕೆಯಾಗದ %s ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ",
+ "No image or file provided" : "ಚಿತ್ರ ಅಥವಾ ಕಡತದ ಕೊರತೆ ಇದೆ",
+ "Unknown filetype" : "ಅಪರಿಚಿತ ಕಡತ ಮಾದರಿ",
+ "Invalid image" : "ಅಸಾಮರ್ಥ್ಯ ಚಿತ್ರ",
+ "No temporary profile picture available, try again" : "ಯಾವುದೇ ತಾತ್ಕಾಲಿಕ ವ್ಯಕ್ತಿ ಚಿತ್ರ ದೊರಕುತ್ತಿಲ್ಲ, ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ",
+ "No crop data provided" : "ಸುಕ್ಕು ಒದಗಿಸಿದ ಮಾಹಿತಿ ",
+ "Sunday" : "ಭಾನುವಾರ",
+ "Monday" : "ಸೋಮವಾರ",
+ "Tuesday" : "ಮಂಗಳವಾರ",
+ "Wednesday" : "ಬುಧವಾರ",
+ "Thursday" : "ಗುರುವಾರ",
+ "Friday" : "ಶುಕ್ರವಾರ",
+ "Saturday" : "ಶನಿವಾರ",
+ "January" : "ಜನವರಿ",
+ "February" : "ಫೆಬ್ರುವರಿ",
+ "March" : "ಮಾರ್ಚ್",
+ "April" : "ಏಪ್ರಿಲ್",
+ "May" : "ಮೇ",
+ "June" : "ಜೂನ್",
+ "July" : "ಜುಲೈ",
+ "August" : "ಆಗಸ್ಟ್",
+ "September" : "ಸೆಪ್ಟೆಂಬರ್",
+ "October" : "ಅಕ್ಟೋಬರ್",
+ "November" : "ನವೆಂಬರ್",
+ "December" : "ಡಿಸೆಂಬರ್",
+ "Settings" : "ಆಯ್ಕೆಗಳು",
+ "Saving..." : "ಉಳಿಸಲಾಗುತ್ತಿದೆ ...",
+ "Couldn't send reset email. Please contact your administrator." : "ರೀಸೆಟ್ ಇಮೇಲ್ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "ನಿಮ್ಮ ಗುಪ್ತಪದ ಮರುಹೊಂದಿಸಲು ಅಂತ್ರಜಾಲ ಕೊಂಡಿಯನ್ನು ನಿಮ್ಮ ಇ-ಅಂಚೆ ಪೆಟ್ಟಿಗೆಗೆ ಕಳುಹಿಸಲಾಗಿದೆ. ಇದನ್ನು ನಿರ್ದಿಷ್ಟ ಸಮಯದಲ್ಲಿ ಇ-ಅಂಚೆ ಪೆಟ್ಟಿಗೆಯ ಮುಖ್ಯ ಕೂಶದಲ್ಲಿ ಪಡೆಯದಿದ್ದಲ್ಲಿ, ಇತರೇ ಕೂಶಗಳನ್ನು ಪರಿಶೀಲಿಸಿ. <br> ಇದು ಇನ್ನು ಬಾರದೆ ಇದ್ದರೆ, ನಿಮ್ಮ ಸ್ಥಳೀಯ ಸಂಕೀರ್ಣ ವ್ಯವಸ್ಥೆಯ ನಿರ್ವಾಹಕರ ಸಹಾಯ ಕೇಳಿ.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ನಿಮ್ಮ ಕಡತಗಳನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್. ನೀವು ಚೇತರಿಕೆ ಕೀ ಸಶಕ್ತ ಇದ್ದರೆ, ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ರೀಸೆಟ್ ಮತ್ತೆ ನಂತರ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪಡೆಯಲು ಯಾವುದೇ ದಾರಿ ಇರುತ್ತದೆ. <br /> ನೀವು ಏನು ಖಚಿತವಾಗಿ ಇದ್ದರೆ ನೀವು ಮುಂದುವರೆಯಲು ಮೊದಲು, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ. <br /> ನೀವು ನಿಜವಾಗಿಯೂ ಮುಂದುವರಿಸಲು ಬಯಸುತ್ತೀರಾ?",
+ "I know what I'm doing" : "ಏನು ಮಾಡುತ್ತಿರುವೆ ಎಂದು ನನಗೆ ತಿಳಿದಿದೆ",
+ "Password can not be changed. Please contact your administrator." : "ಗುಪ್ತಪದ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
+ "No" : "ಇಲ್ಲ",
+ "Yes" : "ಹೌದು",
+ "Choose" : "ಆಯ್ಕೆ",
+ "Ok" : "ಸರಿ",
+ "read-only" : "ಓದಲು ಮಾತ್ರ",
"_{count} file conflict_::_{count} file conflicts_" : [""],
- "_download %n file_::_download %n files_" : [""]
+ "One file conflict" : "ಒಂದು ಕಡತದಲ್ಲಿ ಸಮಸ್ಯೆ ಇದೆ",
+ "New Files" : "ಹೊಸ ಕಡತಗಳು",
+ "Already existing files" : "ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕಡತಗಳು",
+ "Which files do you want to keep?" : "ಯಾವ ಕಡತಗಳನ್ನು ಇರಿಸಿಕೊಳ್ಳಲು ಬಯಸುತ್ತೀರಿ?",
+ "If you select both versions, the copied file will have a number added to its name." : "ನೀವು ಎರಡೂ ಆವೃತ್ತಿಗಳನ್ನು ಆರಿಸಿದರೆ, ನಕಲು ಕಡತ ಸಂಖ್ಯೆಯನ್ನು ಅದರ ಹೆಸರನ್ನು ಸೇರಿಸಲಾಗಿದೆ ಹೊಂದಿರುತ್ತದೆ.",
+ "Cancel" : "ರದ್ದು",
+ "Continue" : "ಮುಂದುವರಿಸಿ",
+ "(all selected)" : "(ಎಲ್ಲಾ ಆಯ್ಕೆ)",
+ "({count} selected)" : "({count} ಆಯ್ಕೆಗಳು)",
+ "Very weak password" : "ಅತೀ ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "Weak password" : "ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "So-so password" : "ಊಹಿಸಬಹುದಾದ ಗುಪ್ತಪದ",
+ "Good password" : "ಉತ್ತಮ ಗುಪ್ತಪದ",
+ "Strong password" : "ಪ್ರಬಲ ಗುಪ್ತಪದ",
+ "Error occurred while checking server setup" : "ಪರಿಚಾರಿಕ ಗಣಕವನ್ನು ಪರಿಶೀಲಿಸುವಾಗ ದೋಷವುಂಟಾಗಿದೆ",
+ "Shared" : "ಹಂಚಿಕೆಯ",
+ "Shared with {recipients}" : "ಹಂಚಿಕೆಯನ್ನು ಪಡೆದವರು {recipients}",
+ "Share" : "ಹಂಚಿಕೊಳ್ಳಿ",
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
+ "Error while sharing" : "ಹಂಚುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Error while unsharing" : " ಹಂಚಿಕೆಯನ್ನು ಹಿಂದೆರುಗಿಸು ಸಂದರ್ಭದಲ್ಲಿ ಲೋಪವಾಗಿದೆ",
+ "Error while changing permissions" : "ಅನುಮತಿಗಳನ್ನು ಬದಲಾವಣೆ ಮಾಡುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Shared with you and the group {group} by {owner}" : "ನಿಮಗೆ ಮತ್ತು {group} ಗುಂಪಿನೂಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ",
+ "Shared with you by {owner}" : "ನಿಮ್ಮೊಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ",
+ "Share with user or group …" : "ಬಳಕೆದಾರ ಅಥವಾ ಗುಂಪನ್ನು ಜೊತೆ ಹಂಚಿಕೊಳ್ಳಿ ...",
+ "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು",
+ "The public link will expire no later than {days} days after it is created" : "ರಚನೆಯಾದ {days} ದಿನಗಳ ನಂತರ ಈ ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿ ಅಂತ್ಯಗೊಳ್ಳಲಿದೆ",
+ "Link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ",
+ "Password protect" : "ಗುಪ್ತಪದ ರಕ್ಷಿಸಿಕೂಳ್ಲಿ",
+ "Password" : "ಗುಪ್ತಪದ",
+ "Choose a password for the public link" : "ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿಗೆ ಗುಪ್ತಪದ ಆಯ್ಕೆಮಾಡಿ",
+ "Allow editing" : "ಸಂಪಾದನೆಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡಿ",
+ "Email link to person" : "ಬಳಕೆದಾರನ ಇ-ಅಂಚೆಯ ಸಂಪರ್ಕಕೊಂಡಿ",
+ "Send" : "ಕಳುಹಿಸಿ",
+ "Set expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸಿ",
+ "Expiration" : "ಮುಕ್ತಾಯ",
+ "Expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ",
+ "Adding user..." : "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ ...",
+ "group" : "ಗುಂಪು",
+ "remote" : "ಆಚೆಯ",
+ "Resharing is not allowed" : "ಮರುಹಂಚಿಕೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ",
+ "Shared in {item} with {user}" : "{user} ಜೊತೆ {item} ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ",
+ "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ",
+ "notify by email" : "ಇ-ಅಂಚೆ ಮೂಲಕ ತಿಳಿಸಲು",
+ "can share" : "ಹಂಚಿಕೊಳ್ಳಬಹುದು",
+ "can edit" : "ಸಂಪಾದಿಸಬಹುದು",
+ "access control" : "ಪ್ರವೇಶ ನಿಯಂತ್ರಣ",
+ "create" : "ಸೃಷ್ಟಿಸು",
+ "change" : "ಬದಲಾವಣೆ",
+ "delete" : "ಅಳಿಸಿ",
+ "Password protected" : "ಗುಪ್ತಪದದಿಂದ ರಕ್ಷಿಸಲಾಗಿದೆ",
+ "Error unsetting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಹಿಂಪಡೆಯುವಲಿ್ಲ ದೋಷ",
+ "Error setting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸುವಲ್ಲಿ ದೋಷ",
+ "Sending ..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
+ "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ",
+ "Warning" : "ಎಚ್ಚರಿಕೆ",
+ "The object type is not specified." : "ವಸ್ತು ಮಾದರಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ.",
+ "Enter new" : "ಹೊಸ ನಮೂದನೆ",
+ "Delete" : "ಅಳಿಸಿ",
+ "Add" : "ಸೇರಿಸಿ",
+ "Edit tags" : "ಕಿರು-ಪದ ಗಳನ್ನು ಸಂಪಾದಿಸು",
+ "No tags selected for deletion." : "ಯಾವುದೇ ಕಿರು ಪದಗಳನ್ನ ಅಳಿಸಲು ಆಯ್ಕೆ ಇಲ್ಲ.",
+ "unknown text" : "ತಿಳಿಯದ ವಿಷಯ",
+ "Hello world!" : "ಹೇ ಲೋಕವೇ ನಿನಗೆ ನಮಸ್ಕಾರ!",
+ "sunny" : "ಬಿಸಿಲಿನ",
+ "Hello {name}, the weather is {weather}" : "ನಮಸ್ಕಾರ {name}, ಸದ್ಯ {weather} ಹವಾಮಾನವಿದೆ",
+ "_download %n file_::_download %n files_" : ["%n ಕಡತಗಳನ್ನು ಸ್ಥಳೀಯ ಪ್ರತಿಯಾಗಿಸಿ"],
+ "Please reload the page." : "ಪುಟವನ್ನು ಪುನಃ ನವೀಕರಿಸಿ.",
+ "The update was unsuccessful. " : "ಆಧುನೀಕರಿಣೆ ಯಶಸ್ವಿಯಾಗಿಲ್ಲ.",
+ "Couldn't reset password because the token is invalid" : "ಚಿಹ್ನೆ ಅಮಾನ್ಯವಾಗಿದೆ, ಗುಪ್ತಪದ ಮರುಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Couldn't send reset email. Please make sure your username is correct." : "ಬದಲಾವಣೆಯ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ಬಳಕೆದಾರ ಹೆಸರು ಸರಿಯಾಗಿದೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "ಈ ಬಳಕೆದಾರನ ಹೆಸರಿನ್ನಲ್ಲಿ ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲದರಿರುವುದರಿಂದ ಬದಲಾವಣೆಯ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
+ "%s password reset" : "%s ಗುಪ್ತ ಪದವನ್ನು ಮರುಹೊಂದಿಸಿ",
+ "Use the following link to reset your password: {link}" : "ನಿಮ್ಮ ಗುಪ್ತಪದ ಮರುಹೊಂದಿಸಲು ಕೆಳಗಿನ ಅಂತ್ರಜಾಲ ಕೊಂಡಿಯನ್ನು ಬಳಸಿ : {link}",
+ "New password" : "ಹೊಸ ಗುಪ್ತಪದ",
+ "New Password" : "ಹೊಸ ಗುಪ್ತಪದ",
+ "Reset password" : "ಗುಪ್ತ ಪದವನ್ನು ಮರುಹೊಂದಿಸಿ",
+ "Personal" : "ವೈಯಕ್ತಿಕ",
+ "Users" : "ಬಳಕೆದಾರರು",
+ "Apps" : "ಕಾರ್ಯಕ್ರಮಗಳು",
+ "Admin" : "ನಿರ್ವಹಕ",
+ "Help" : "ಸಹಾಯ",
+ "Error loading tags" : "ಕಿರು ಪದಗಳನ್ನ ಪಡೆಯುವಲ್ಲಿ ಲೋಪವಾಗಿದೆ",
+ "Tag already exists" : "ಕಿರು ಪದ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ",
+ "Error deleting tag(s)" : "ಕಿರು-ಪದ(ಗಳನ್ನು) ಅಳಿಸುವಲ್ಲಿ ಲೋಪವಾದೆ",
+ "Error tagging" : "ಕಿರು-ಪದ ಅಸ್ತಿತ್ವಗೂಳಿಸಲಯ ",
+ "Error untagging" : "ಕಿರು-ಪದವನ್ನು ತೆರುವುಗೂಳಿಸುವಲಿ್ಲ ದೋಷ",
+ "Error favoriting" : "ಒಲವು ತೋರಿಸುವಲ್ಲಿ ದೋಷ",
+ "Error unfavoriting" : "ಒಲವು ಬದಲಾಯಿಸುವಲ್ಲಿ ದೋಷ",
+ "Access forbidden" : "ಪ್ರವೇಶ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ",
+ "File not found" : "ಕಡತ ಕಂಡುಬಂದಿಲ್ಲ",
+ "You can click here to return to %s." : "ಮರಳಿ ಹೋಗುಲು ಇಲ್ಲಿ ಆಯ್ಕೆ ಮಾಡಿ %s",
+ "Cheers!" : "ಆನಂದಿಸಿ !",
+ "Internal Server Error" : "ಪರಿಚಾರಕ-ಗಣಕದ ಆಂತರಿಕ ದೋಷ",
+ "Technical details" : "ತಾಂತ್ರಿಕ ವಿವರಗಳು",
+ "Remote Address: %s" : "ಆಚೆ-ಗಣಕದ ವಿಳಾಸ : %s",
+ "Request ID: %s" : "ವಿನಂತಿಯ ಸಂಖ್ಯೆ: %s",
+ "Code: %s" : "ಸ೦ಕೇತ: %s",
+ "Message: %s" : "ಸ೦ದೇಶ: %s",
+ "File: %s" : "ಕಡತ: %s",
+ "Line: %s" : "ಕೋಂಡಿ: %s",
+ "Trace" : "ಕುರುಹು",
+ "Security Warning" : "ಭದ್ರತಾ ಎಚ್ಚರಿಕೆ",
+ "Username" : "ಬಳಕೆಯ ಹೆಸರು",
+ "Storage & database" : "ಶೇಖರಣಾ ಮತ್ತು ದತ್ತಸಂಚಯ",
+ "Data folder" : "ಮಾಹಿತಿ ಕೋಶ",
+ "Configure the database" : "ದತ್ತಸಂಚಯದ ಆಯ್ಕೆಗಳು",
+ "Only %s is available." : "ಕೇವಲ %s ಮಾತ್ರ ಲಭ್ಯವಿದೆ.",
+ "Database user" : " ದತ್ತಸಂಚಯದ ಬಳಕೆದಾರ",
+ "Database password" : " ದತ್ತಸಂಚಯದ ಗುಪ್ತಪದ",
+ "Database name" : "ದತ್ತಸಂಚಯದ ಹೆಸರು",
+ "Database tablespace" : "ದತ್ತಸಂಚಯದ tablespace",
+ "Database host" : "ದತ್ತಸಂಚಯದ ಅತಿಥೆಯ",
+ "Finish setup" : "ಹೊಂದಾಣಿಕೆಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ",
+ "Finishing …" : "ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ ...",
+ "%s is available. Get more information on how to update." : "%s ಲಭ್ಯವಿದೆ. ಹೇಗೆ ನವೀಕರಿಸಬಹುದೆಂದು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ.",
+ "Log out" : "ಈ ಆವೃತ್ತಿ ಇಂದ ನಿರ್ಗಮಿಸಿ",
+ "Search" : "ಹುಡುಕು",
+ "Please contact your administrator." : "ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಲು ಕೋರಲಾಗಿದೆ.",
+ "Forgot your password? Reset it!" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಮರೆತಿರಾ? ಮರುಹೊಂದಿಸಿ!",
+ "remember" : "ನೆನಪಿಡಿ",
+ "This ownCloud instance is currently in single user mode." : "ಪ್ರಸ್ತುತ ಕ್ರಮದಲ್ಲಿ, ಈ OwnCloud ನ್ನು ಕೇವಲ ಒಬ್ಬನೇ ಬಳಕೆದಾರ ಮಾತ್ರ ಬಳಸಬಹುದಾಗಿದೆ.",
+ "This means only administrators can use the instance." : "ಇದರ ಅರ್ಥ, ಸದ್ಯದ ನಿದರ್ಶನದಲ್ಲಿ ನಿರ್ವಾಹಕರು ಮಾತ್ರ ಬಳಸಬಹುದಾಗಿದೆ.",
+ "Thank you for your patience." : "ನಿಮ್ಮ ತಾಳ್ಮೆಗೆ ಧನ್ಯವಾದಗಳು.",
+ "%s will be updated to version %s." : "%s ರ ಆವೃತ್ತಿ %s ನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತದೆ.",
+ "The following apps will be disabled:" : "ಈ ಕೆಳಗಿನ ಕಾರ್ಯಕ್ರಮಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ:",
+ "Start update" : "ನವೀಕರಿಣವನ್ನು ಆರಂಭಿಸಿ"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/kn.json b/core/l10n/kn.json
index 1d746175292..fc91b416bf9 100644
--- a/core/l10n/kn.json
+++ b/core/l10n/kn.json
@@ -1,5 +1,175 @@
{ "translations": {
+ "Couldn't send mail to following users: %s " : "ಕೆಳಗಿನ ಬಳಕೆದಾರರಿಗೆ ಈ-ಮೇಲ್ ಕಳುಹಿಸಿ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ: %s",
+ "Turned on maintenance mode" : "ನಿರ್ವಹಣೆಯ ಸ್ತಿತಿಯನ್ನು ಆರಂಭಿಸಲಾಗಿದೆ",
+ "Turned off maintenance mode" : "ನಿರ್ವಹಣೆಯ ಸ್ತಿತಿಯನ್ನು ಮುಕ್ತಗೊಳಿಸಲಾಗಿದೆ",
+ "Updated database" : "ದತ್ತಸಂಚಯ ",
+ "Checked database schema update" : "ಪರಿಶೀಲಿಸಿದ ದತ್ತಸಂಚಯ ಯೋಜನಾ ಅಪ್ಡೇಟ್",
+ "Checked database schema update for apps" : "ನವೀಕರಿಸಿದ ದತ್ತಸಂಚಯದ ಯೋಜನಾ ಪ್ರತಿಗಳನ್ನು ಕಾಯಕ್ರಮಗಳೊಂದಿಗೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ",
+ "Updated \"%s\" to %s" : "%s ರ ಆವೃತ್ತಿ %s ನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತದೆ.",
+ "Disabled incompatible apps: %s" : "ಹೊಂದಾಣಿಕೆಯಾಗದ %s ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ",
+ "No image or file provided" : "ಚಿತ್ರ ಅಥವಾ ಕಡತದ ಕೊರತೆ ಇದೆ",
+ "Unknown filetype" : "ಅಪರಿಚಿತ ಕಡತ ಮಾದರಿ",
+ "Invalid image" : "ಅಸಾಮರ್ಥ್ಯ ಚಿತ್ರ",
+ "No temporary profile picture available, try again" : "ಯಾವುದೇ ತಾತ್ಕಾಲಿಕ ವ್ಯಕ್ತಿ ಚಿತ್ರ ದೊರಕುತ್ತಿಲ್ಲ, ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ",
+ "No crop data provided" : "ಸುಕ್ಕು ಒದಗಿಸಿದ ಮಾಹಿತಿ ",
+ "Sunday" : "ಭಾನುವಾರ",
+ "Monday" : "ಸೋಮವಾರ",
+ "Tuesday" : "ಮಂಗಳವಾರ",
+ "Wednesday" : "ಬುಧವಾರ",
+ "Thursday" : "ಗುರುವಾರ",
+ "Friday" : "ಶುಕ್ರವಾರ",
+ "Saturday" : "ಶನಿವಾರ",
+ "January" : "ಜನವರಿ",
+ "February" : "ಫೆಬ್ರುವರಿ",
+ "March" : "ಮಾರ್ಚ್",
+ "April" : "ಏಪ್ರಿಲ್",
+ "May" : "ಮೇ",
+ "June" : "ಜೂನ್",
+ "July" : "ಜುಲೈ",
+ "August" : "ಆಗಸ್ಟ್",
+ "September" : "ಸೆಪ್ಟೆಂಬರ್",
+ "October" : "ಅಕ್ಟೋಬರ್",
+ "November" : "ನವೆಂಬರ್",
+ "December" : "ಡಿಸೆಂಬರ್",
+ "Settings" : "ಆಯ್ಕೆಗಳು",
+ "Saving..." : "ಉಳಿಸಲಾಗುತ್ತಿದೆ ...",
+ "Couldn't send reset email. Please contact your administrator." : "ರೀಸೆಟ್ ಇಮೇಲ್ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "ನಿಮ್ಮ ಗುಪ್ತಪದ ಮರುಹೊಂದಿಸಲು ಅಂತ್ರಜಾಲ ಕೊಂಡಿಯನ್ನು ನಿಮ್ಮ ಇ-ಅಂಚೆ ಪೆಟ್ಟಿಗೆಗೆ ಕಳುಹಿಸಲಾಗಿದೆ. ಇದನ್ನು ನಿರ್ದಿಷ್ಟ ಸಮಯದಲ್ಲಿ ಇ-ಅಂಚೆ ಪೆಟ್ಟಿಗೆಯ ಮುಖ್ಯ ಕೂಶದಲ್ಲಿ ಪಡೆಯದಿದ್ದಲ್ಲಿ, ಇತರೇ ಕೂಶಗಳನ್ನು ಪರಿಶೀಲಿಸಿ. <br> ಇದು ಇನ್ನು ಬಾರದೆ ಇದ್ದರೆ, ನಿಮ್ಮ ಸ್ಥಳೀಯ ಸಂಕೀರ್ಣ ವ್ಯವಸ್ಥೆಯ ನಿರ್ವಾಹಕರ ಸಹಾಯ ಕೇಳಿ.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ನಿಮ್ಮ ಕಡತಗಳನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್. ನೀವು ಚೇತರಿಕೆ ಕೀ ಸಶಕ್ತ ಇದ್ದರೆ, ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ರೀಸೆಟ್ ಮತ್ತೆ ನಂತರ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪಡೆಯಲು ಯಾವುದೇ ದಾರಿ ಇರುತ್ತದೆ. <br /> ನೀವು ಏನು ಖಚಿತವಾಗಿ ಇದ್ದರೆ ನೀವು ಮುಂದುವರೆಯಲು ಮೊದಲು, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ. <br /> ನೀವು ನಿಜವಾಗಿಯೂ ಮುಂದುವರಿಸಲು ಬಯಸುತ್ತೀರಾ?",
+ "I know what I'm doing" : "ಏನು ಮಾಡುತ್ತಿರುವೆ ಎಂದು ನನಗೆ ತಿಳಿದಿದೆ",
+ "Password can not be changed. Please contact your administrator." : "ಗುಪ್ತಪದ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
+ "No" : "ಇಲ್ಲ",
+ "Yes" : "ಹೌದು",
+ "Choose" : "ಆಯ್ಕೆ",
+ "Ok" : "ಸರಿ",
+ "read-only" : "ಓದಲು ಮಾತ್ರ",
"_{count} file conflict_::_{count} file conflicts_" : [""],
- "_download %n file_::_download %n files_" : [""]
+ "One file conflict" : "ಒಂದು ಕಡತದಲ್ಲಿ ಸಮಸ್ಯೆ ಇದೆ",
+ "New Files" : "ಹೊಸ ಕಡತಗಳು",
+ "Already existing files" : "ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕಡತಗಳು",
+ "Which files do you want to keep?" : "ಯಾವ ಕಡತಗಳನ್ನು ಇರಿಸಿಕೊಳ್ಳಲು ಬಯಸುತ್ತೀರಿ?",
+ "If you select both versions, the copied file will have a number added to its name." : "ನೀವು ಎರಡೂ ಆವೃತ್ತಿಗಳನ್ನು ಆರಿಸಿದರೆ, ನಕಲು ಕಡತ ಸಂಖ್ಯೆಯನ್ನು ಅದರ ಹೆಸರನ್ನು ಸೇರಿಸಲಾಗಿದೆ ಹೊಂದಿರುತ್ತದೆ.",
+ "Cancel" : "ರದ್ದು",
+ "Continue" : "ಮುಂದುವರಿಸಿ",
+ "(all selected)" : "(ಎಲ್ಲಾ ಆಯ್ಕೆ)",
+ "({count} selected)" : "({count} ಆಯ್ಕೆಗಳು)",
+ "Very weak password" : "ಅತೀ ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "Weak password" : "ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "So-so password" : "ಊಹಿಸಬಹುದಾದ ಗುಪ್ತಪದ",
+ "Good password" : "ಉತ್ತಮ ಗುಪ್ತಪದ",
+ "Strong password" : "ಪ್ರಬಲ ಗುಪ್ತಪದ",
+ "Error occurred while checking server setup" : "ಪರಿಚಾರಿಕ ಗಣಕವನ್ನು ಪರಿಶೀಲಿಸುವಾಗ ದೋಷವುಂಟಾಗಿದೆ",
+ "Shared" : "ಹಂಚಿಕೆಯ",
+ "Shared with {recipients}" : "ಹಂಚಿಕೆಯನ್ನು ಪಡೆದವರು {recipients}",
+ "Share" : "ಹಂಚಿಕೊಳ್ಳಿ",
+ "Error" : "ತಪ್ಪಾಗಿದೆ",
+ "Error while sharing" : "ಹಂಚುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Error while unsharing" : " ಹಂಚಿಕೆಯನ್ನು ಹಿಂದೆರುಗಿಸು ಸಂದರ್ಭದಲ್ಲಿ ಲೋಪವಾಗಿದೆ",
+ "Error while changing permissions" : "ಅನುಮತಿಗಳನ್ನು ಬದಲಾವಣೆ ಮಾಡುವಾಗ ದೋಷವಾಗಿದೆ",
+ "Shared with you and the group {group} by {owner}" : "ನಿಮಗೆ ಮತ್ತು {group} ಗುಂಪಿನೂಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ",
+ "Shared with you by {owner}" : "ನಿಮ್ಮೊಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ",
+ "Share with user or group …" : "ಬಳಕೆದಾರ ಅಥವಾ ಗುಂಪನ್ನು ಜೊತೆ ಹಂಚಿಕೊಳ್ಳಿ ...",
+ "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು",
+ "The public link will expire no later than {days} days after it is created" : "ರಚನೆಯಾದ {days} ದಿನಗಳ ನಂತರ ಈ ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿ ಅಂತ್ಯಗೊಳ್ಳಲಿದೆ",
+ "Link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ",
+ "Password protect" : "ಗುಪ್ತಪದ ರಕ್ಷಿಸಿಕೂಳ್ಲಿ",
+ "Password" : "ಗುಪ್ತಪದ",
+ "Choose a password for the public link" : "ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿಗೆ ಗುಪ್ತಪದ ಆಯ್ಕೆಮಾಡಿ",
+ "Allow editing" : "ಸಂಪಾದನೆಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡಿ",
+ "Email link to person" : "ಬಳಕೆದಾರನ ಇ-ಅಂಚೆಯ ಸಂಪರ್ಕಕೊಂಡಿ",
+ "Send" : "ಕಳುಹಿಸಿ",
+ "Set expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸಿ",
+ "Expiration" : "ಮುಕ್ತಾಯ",
+ "Expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ",
+ "Adding user..." : "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ ...",
+ "group" : "ಗುಂಪು",
+ "remote" : "ಆಚೆಯ",
+ "Resharing is not allowed" : "ಮರುಹಂಚಿಕೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ",
+ "Shared in {item} with {user}" : "{user} ಜೊತೆ {item} ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ",
+ "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ",
+ "notify by email" : "ಇ-ಅಂಚೆ ಮೂಲಕ ತಿಳಿಸಲು",
+ "can share" : "ಹಂಚಿಕೊಳ್ಳಬಹುದು",
+ "can edit" : "ಸಂಪಾದಿಸಬಹುದು",
+ "access control" : "ಪ್ರವೇಶ ನಿಯಂತ್ರಣ",
+ "create" : "ಸೃಷ್ಟಿಸು",
+ "change" : "ಬದಲಾವಣೆ",
+ "delete" : "ಅಳಿಸಿ",
+ "Password protected" : "ಗುಪ್ತಪದದಿಂದ ರಕ್ಷಿಸಲಾಗಿದೆ",
+ "Error unsetting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಹಿಂಪಡೆಯುವಲಿ್ಲ ದೋಷ",
+ "Error setting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸುವಲ್ಲಿ ದೋಷ",
+ "Sending ..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
+ "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ",
+ "Warning" : "ಎಚ್ಚರಿಕೆ",
+ "The object type is not specified." : "ವಸ್ತು ಮಾದರಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ.",
+ "Enter new" : "ಹೊಸ ನಮೂದನೆ",
+ "Delete" : "ಅಳಿಸಿ",
+ "Add" : "ಸೇರಿಸಿ",
+ "Edit tags" : "ಕಿರು-ಪದ ಗಳನ್ನು ಸಂಪಾದಿಸು",
+ "No tags selected for deletion." : "ಯಾವುದೇ ಕಿರು ಪದಗಳನ್ನ ಅಳಿಸಲು ಆಯ್ಕೆ ಇಲ್ಲ.",
+ "unknown text" : "ತಿಳಿಯದ ವಿಷಯ",
+ "Hello world!" : "ಹೇ ಲೋಕವೇ ನಿನಗೆ ನಮಸ್ಕಾರ!",
+ "sunny" : "ಬಿಸಿಲಿನ",
+ "Hello {name}, the weather is {weather}" : "ನಮಸ್ಕಾರ {name}, ಸದ್ಯ {weather} ಹವಾಮಾನವಿದೆ",
+ "_download %n file_::_download %n files_" : ["%n ಕಡತಗಳನ್ನು ಸ್ಥಳೀಯ ಪ್ರತಿಯಾಗಿಸಿ"],
+ "Please reload the page." : "ಪುಟವನ್ನು ಪುನಃ ನವೀಕರಿಸಿ.",
+ "The update was unsuccessful. " : "ಆಧುನೀಕರಿಣೆ ಯಶಸ್ವಿಯಾಗಿಲ್ಲ.",
+ "Couldn't reset password because the token is invalid" : "ಚಿಹ್ನೆ ಅಮಾನ್ಯವಾಗಿದೆ, ಗುಪ್ತಪದ ಮರುಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Couldn't send reset email. Please make sure your username is correct." : "ಬದಲಾವಣೆಯ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ಬಳಕೆದಾರ ಹೆಸರು ಸರಿಯಾಗಿದೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "ಈ ಬಳಕೆದಾರನ ಹೆಸರಿನ್ನಲ್ಲಿ ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲದರಿರುವುದರಿಂದ ಬದಲಾವಣೆಯ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
+ "%s password reset" : "%s ಗುಪ್ತ ಪದವನ್ನು ಮರುಹೊಂದಿಸಿ",
+ "Use the following link to reset your password: {link}" : "ನಿಮ್ಮ ಗುಪ್ತಪದ ಮರುಹೊಂದಿಸಲು ಕೆಳಗಿನ ಅಂತ್ರಜಾಲ ಕೊಂಡಿಯನ್ನು ಬಳಸಿ : {link}",
+ "New password" : "ಹೊಸ ಗುಪ್ತಪದ",
+ "New Password" : "ಹೊಸ ಗುಪ್ತಪದ",
+ "Reset password" : "ಗುಪ್ತ ಪದವನ್ನು ಮರುಹೊಂದಿಸಿ",
+ "Personal" : "ವೈಯಕ್ತಿಕ",
+ "Users" : "ಬಳಕೆದಾರರು",
+ "Apps" : "ಕಾರ್ಯಕ್ರಮಗಳು",
+ "Admin" : "ನಿರ್ವಹಕ",
+ "Help" : "ಸಹಾಯ",
+ "Error loading tags" : "ಕಿರು ಪದಗಳನ್ನ ಪಡೆಯುವಲ್ಲಿ ಲೋಪವಾಗಿದೆ",
+ "Tag already exists" : "ಕಿರು ಪದ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ",
+ "Error deleting tag(s)" : "ಕಿರು-ಪದ(ಗಳನ್ನು) ಅಳಿಸುವಲ್ಲಿ ಲೋಪವಾದೆ",
+ "Error tagging" : "ಕಿರು-ಪದ ಅಸ್ತಿತ್ವಗೂಳಿಸಲಯ ",
+ "Error untagging" : "ಕಿರು-ಪದವನ್ನು ತೆರುವುಗೂಳಿಸುವಲಿ್ಲ ದೋಷ",
+ "Error favoriting" : "ಒಲವು ತೋರಿಸುವಲ್ಲಿ ದೋಷ",
+ "Error unfavoriting" : "ಒಲವು ಬದಲಾಯಿಸುವಲ್ಲಿ ದೋಷ",
+ "Access forbidden" : "ಪ್ರವೇಶ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ",
+ "File not found" : "ಕಡತ ಕಂಡುಬಂದಿಲ್ಲ",
+ "You can click here to return to %s." : "ಮರಳಿ ಹೋಗುಲು ಇಲ್ಲಿ ಆಯ್ಕೆ ಮಾಡಿ %s",
+ "Cheers!" : "ಆನಂದಿಸಿ !",
+ "Internal Server Error" : "ಪರಿಚಾರಕ-ಗಣಕದ ಆಂತರಿಕ ದೋಷ",
+ "Technical details" : "ತಾಂತ್ರಿಕ ವಿವರಗಳು",
+ "Remote Address: %s" : "ಆಚೆ-ಗಣಕದ ವಿಳಾಸ : %s",
+ "Request ID: %s" : "ವಿನಂತಿಯ ಸಂಖ್ಯೆ: %s",
+ "Code: %s" : "ಸ೦ಕೇತ: %s",
+ "Message: %s" : "ಸ೦ದೇಶ: %s",
+ "File: %s" : "ಕಡತ: %s",
+ "Line: %s" : "ಕೋಂಡಿ: %s",
+ "Trace" : "ಕುರುಹು",
+ "Security Warning" : "ಭದ್ರತಾ ಎಚ್ಚರಿಕೆ",
+ "Username" : "ಬಳಕೆಯ ಹೆಸರು",
+ "Storage & database" : "ಶೇಖರಣಾ ಮತ್ತು ದತ್ತಸಂಚಯ",
+ "Data folder" : "ಮಾಹಿತಿ ಕೋಶ",
+ "Configure the database" : "ದತ್ತಸಂಚಯದ ಆಯ್ಕೆಗಳು",
+ "Only %s is available." : "ಕೇವಲ %s ಮಾತ್ರ ಲಭ್ಯವಿದೆ.",
+ "Database user" : " ದತ್ತಸಂಚಯದ ಬಳಕೆದಾರ",
+ "Database password" : " ದತ್ತಸಂಚಯದ ಗುಪ್ತಪದ",
+ "Database name" : "ದತ್ತಸಂಚಯದ ಹೆಸರು",
+ "Database tablespace" : "ದತ್ತಸಂಚಯದ tablespace",
+ "Database host" : "ದತ್ತಸಂಚಯದ ಅತಿಥೆಯ",
+ "Finish setup" : "ಹೊಂದಾಣಿಕೆಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ",
+ "Finishing …" : "ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ ...",
+ "%s is available. Get more information on how to update." : "%s ಲಭ್ಯವಿದೆ. ಹೇಗೆ ನವೀಕರಿಸಬಹುದೆಂದು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ.",
+ "Log out" : "ಈ ಆವೃತ್ತಿ ಇಂದ ನಿರ್ಗಮಿಸಿ",
+ "Search" : "ಹುಡುಕು",
+ "Please contact your administrator." : "ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಲು ಕೋರಲಾಗಿದೆ.",
+ "Forgot your password? Reset it!" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಮರೆತಿರಾ? ಮರುಹೊಂದಿಸಿ!",
+ "remember" : "ನೆನಪಿಡಿ",
+ "This ownCloud instance is currently in single user mode." : "ಪ್ರಸ್ತುತ ಕ್ರಮದಲ್ಲಿ, ಈ OwnCloud ನ್ನು ಕೇವಲ ಒಬ್ಬನೇ ಬಳಕೆದಾರ ಮಾತ್ರ ಬಳಸಬಹುದಾಗಿದೆ.",
+ "This means only administrators can use the instance." : "ಇದರ ಅರ್ಥ, ಸದ್ಯದ ನಿದರ್ಶನದಲ್ಲಿ ನಿರ್ವಾಹಕರು ಮಾತ್ರ ಬಳಸಬಹುದಾಗಿದೆ.",
+ "Thank you for your patience." : "ನಿಮ್ಮ ತಾಳ್ಮೆಗೆ ಧನ್ಯವಾದಗಳು.",
+ "%s will be updated to version %s." : "%s ರ ಆವೃತ್ತಿ %s ನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತದೆ.",
+ "The following apps will be disabled:" : "ಈ ಕೆಳಗಿನ ಕಾರ್ಯಕ್ರಮಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ:",
+ "Start update" : "ನವೀಕರಿಣವನ್ನು ಆರಂಭಿಸಿ"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index a4c637cec83..fb95f7fd35f 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -32,7 +32,6 @@ OC.L10N.register(
"Settings" : "설정",
"Saving..." : "저장 중...",
"Couldn't send reset email. Please contact your administrator." : "재설정 메일을 보낼수 없습니다. 관리자에게 문의하십시오.",
- "Reset password" : "암호 재설정",
"Password can not be changed. Please contact your administrator." : "비밀번호를 변경할수 없습니다. 관리자에게 문의하십시오.",
"No" : "아니요",
"Yes" : "예",
@@ -58,6 +57,7 @@ OC.L10N.register(
"Strong password" : "강력한 암호",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "WebDAV 인터페이스가 제대로 작동하지 않습니다. 웹 서버에서 파일 동기화를 사용할 수 있도록 설정이 제대로 되지 않은 것 같습니다.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "서버에서 인터넷에 연결할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 일부 기능을 사용할 수 없습니다. 외부에서 파일에 접근하거나 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "데이터 디렉터리와 파일을 인터넷에서 접근할 수도 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 접근할 수 없도록 하거나, 웹 서버 문서 경로 외부로 데이터 디렉터리를 옮기십시오.",
"Shared" : "공유됨",
"Share" : "공유",
"Error" : "오류",
@@ -69,10 +69,11 @@ OC.L10N.register(
"Share with user or group …" : "사용자 및 그룹과 공유...",
"Share link" : "링크 공유",
"Password protect" : "암호 보호",
- "Allow Public Upload" : "공개 업로드 허용",
+ "Password" : "암호",
"Email link to person" : "이메일 주소",
"Send" : "전송",
"Set expiration date" : "만료 날짜 설정",
+ "Expiration" : "만료",
"Expiration date" : "만료 날짜",
"group" : "그룹",
"Resharing is not allowed" : "다시 공유할 수 없습니다",
@@ -83,7 +84,6 @@ OC.L10N.register(
"can edit" : "편집 가능",
"access control" : "접근 제어",
"create" : "생성",
- "update" : "업데이트",
"delete" : "삭제",
"Password protected" : "암호로 보호됨",
"Error unsetting expiration date" : "만료 날짜 해제 오류",
@@ -103,13 +103,9 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "업데이트가 성공하였습니다. ownCloud로 돌아갑니다.",
"%s password reset" : "%s 암호 재설정",
"Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
- "You will receive a link to reset your password via Email." : "이메일로 암호 재설정 링크를 보냈습니다.",
- "Username" : "사용자 이름",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "저장된 파일은 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다. 무엇을 해야 할 지 모르겠으면 진행하기 전에 시스템 관리자에게 연락하십시오. 계속 진행하시겠습니까?",
- "Yes, I really want to reset my password now" : "예, 지금 내 암호를 재설정합니다",
- "Reset" : "재설정",
"New password" : "새 암호",
"New Password" : "새 암호",
+ "Reset password" : "암호 재설정",
"Personal" : "개인",
"Users" : "사용자",
"Apps" : "앱",
@@ -132,7 +128,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccess 파일이 처리되지 않아서 데이터 디렉터리와 파일을 인터넷에서 접근할 수 없을 수도 있습니다.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "올바른 서버 설정을 위한 정보는 <a href=\"%s\" target=\"_blank\">문서</a>를 참조하십시오.",
"Create an <strong>admin account</strong>" : "<strong>관리자 계정</strong> 만들기",
- "Password" : "암호",
+ "Username" : "사용자 이름",
"Storage & database" : "스토리지 & 데이터베이스",
"Data folder" : "데이터 폴더",
"Configure the database" : "데이터베이스 설정",
@@ -146,6 +142,7 @@ OC.L10N.register(
"Finishing …" : "완료 중 ...",
"%s is available. Get more information on how to update." : "%s을(를) 사용할 수 있습니다. 업데이트하는 방법에 대해서 자세한 정보를 얻으십시오.",
"Log out" : "로그아웃",
+ "Search" : "검색",
"Server side authentication failed!" : "서버 인증 실패!",
"Please contact your administrator." : "관리자에게 문의하십시오.",
"Forgot your password? Reset it!" : "암호를 잊으셨다구요? 재설정하세요!",
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index b068150f590..007d53391f4 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -30,7 +30,6 @@
"Settings" : "설정",
"Saving..." : "저장 중...",
"Couldn't send reset email. Please contact your administrator." : "재설정 메일을 보낼수 없습니다. 관리자에게 문의하십시오.",
- "Reset password" : "암호 재설정",
"Password can not be changed. Please contact your administrator." : "비밀번호를 변경할수 없습니다. 관리자에게 문의하십시오.",
"No" : "아니요",
"Yes" : "예",
@@ -56,6 +55,7 @@
"Strong password" : "강력한 암호",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "WebDAV 인터페이스가 제대로 작동하지 않습니다. 웹 서버에서 파일 동기화를 사용할 수 있도록 설정이 제대로 되지 않은 것 같습니다.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "서버에서 인터넷에 연결할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 일부 기능을 사용할 수 없습니다. 외부에서 파일에 접근하거나 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "데이터 디렉터리와 파일을 인터넷에서 접근할 수도 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 접근할 수 없도록 하거나, 웹 서버 문서 경로 외부로 데이터 디렉터리를 옮기십시오.",
"Shared" : "공유됨",
"Share" : "공유",
"Error" : "오류",
@@ -67,10 +67,11 @@
"Share with user or group …" : "사용자 및 그룹과 공유...",
"Share link" : "링크 공유",
"Password protect" : "암호 보호",
- "Allow Public Upload" : "공개 업로드 허용",
+ "Password" : "암호",
"Email link to person" : "이메일 주소",
"Send" : "전송",
"Set expiration date" : "만료 날짜 설정",
+ "Expiration" : "만료",
"Expiration date" : "만료 날짜",
"group" : "그룹",
"Resharing is not allowed" : "다시 공유할 수 없습니다",
@@ -81,7 +82,6 @@
"can edit" : "편집 가능",
"access control" : "접근 제어",
"create" : "생성",
- "update" : "업데이트",
"delete" : "삭제",
"Password protected" : "암호로 보호됨",
"Error unsetting expiration date" : "만료 날짜 해제 오류",
@@ -101,13 +101,9 @@
"The update was successful. Redirecting you to ownCloud now." : "업데이트가 성공하였습니다. ownCloud로 돌아갑니다.",
"%s password reset" : "%s 암호 재설정",
"Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
- "You will receive a link to reset your password via Email." : "이메일로 암호 재설정 링크를 보냈습니다.",
- "Username" : "사용자 이름",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "저장된 파일은 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다. 무엇을 해야 할 지 모르겠으면 진행하기 전에 시스템 관리자에게 연락하십시오. 계속 진행하시겠습니까?",
- "Yes, I really want to reset my password now" : "예, 지금 내 암호를 재설정합니다",
- "Reset" : "재설정",
"New password" : "새 암호",
"New Password" : "새 암호",
+ "Reset password" : "암호 재설정",
"Personal" : "개인",
"Users" : "사용자",
"Apps" : "앱",
@@ -130,7 +126,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccess 파일이 처리되지 않아서 데이터 디렉터리와 파일을 인터넷에서 접근할 수 없을 수도 있습니다.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "올바른 서버 설정을 위한 정보는 <a href=\"%s\" target=\"_blank\">문서</a>를 참조하십시오.",
"Create an <strong>admin account</strong>" : "<strong>관리자 계정</strong> 만들기",
- "Password" : "암호",
+ "Username" : "사용자 이름",
"Storage & database" : "스토리지 & 데이터베이스",
"Data folder" : "데이터 폴더",
"Configure the database" : "데이터베이스 설정",
@@ -144,6 +140,7 @@
"Finishing …" : "완료 중 ...",
"%s is available. Get more information on how to update." : "%s을(를) 사용할 수 있습니다. 업데이트하는 방법에 대해서 자세한 정보를 얻으십시오.",
"Log out" : "로그아웃",
+ "Search" : "검색",
"Server side authentication failed!" : "서버 인증 실패!",
"Please contact your administrator." : "관리자에게 문의하십시오.",
"Forgot your password? Reset it!" : "암호를 잊으셨다구요? 재설정하세요!",
diff --git a/core/l10n/ku_IQ.js b/core/l10n/ku_IQ.js
index 7f249580986..446b842d94b 100644
--- a/core/l10n/ku_IQ.js
+++ b/core/l10n/ku_IQ.js
@@ -3,29 +3,30 @@ OC.L10N.register(
{
"Settings" : "ده‌ستكاری",
"Saving..." : "پاشکه‌وتده‌کات...",
- "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"No" : "نەخێر",
"Yes" : "بەڵێ",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
"Cancel" : "لابردن",
"Share" : "هاوبەشی کردن",
"Error" : "هه‌ڵه",
+ "Password" : "وشەی تێپەربو",
"Warning" : "ئاگاداری",
"Add" : "زیادکردن",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ناوی به‌کارهێنه‌ر",
"New password" : "وشەی نهێنی نوێ",
+ "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"Users" : "به‌كارهێنه‌ر",
"Apps" : "به‌رنامه‌كان",
"Admin" : "به‌ڕێوه‌به‌ری سه‌ره‌كی",
"Help" : "یارمەتی",
- "Password" : "وشەی تێپەربو",
+ "Username" : "ناوی به‌کارهێنه‌ر",
"Data folder" : "زانیاری فۆڵده‌ر",
"Database user" : "به‌كارهێنه‌ری داتابه‌یس",
"Database password" : "وشه‌ی نهێنی داتا به‌یس",
"Database name" : "ناوی داتابه‌یس",
"Database host" : "هۆستی داتابه‌یس",
"Finish setup" : "كۆتایی هات ده‌ستكاریه‌كان",
- "Log out" : "چوونەدەرەوە"
+ "Log out" : "چوونەدەرەوە",
+ "Search" : "بگەڕێ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/ku_IQ.json b/core/l10n/ku_IQ.json
index 2772a2895a2..a6e8fa91441 100644
--- a/core/l10n/ku_IQ.json
+++ b/core/l10n/ku_IQ.json
@@ -1,29 +1,30 @@
{ "translations": {
"Settings" : "ده‌ستكاری",
"Saving..." : "پاشکه‌وتده‌کات...",
- "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"No" : "نەخێر",
"Yes" : "بەڵێ",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
"Cancel" : "لابردن",
"Share" : "هاوبەشی کردن",
"Error" : "هه‌ڵه",
+ "Password" : "وشەی تێپەربو",
"Warning" : "ئاگاداری",
"Add" : "زیادکردن",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ناوی به‌کارهێنه‌ر",
"New password" : "وشەی نهێنی نوێ",
+ "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"Users" : "به‌كارهێنه‌ر",
"Apps" : "به‌رنامه‌كان",
"Admin" : "به‌ڕێوه‌به‌ری سه‌ره‌كی",
"Help" : "یارمەتی",
- "Password" : "وشەی تێپەربو",
+ "Username" : "ناوی به‌کارهێنه‌ر",
"Data folder" : "زانیاری فۆڵده‌ر",
"Database user" : "به‌كارهێنه‌ری داتابه‌یس",
"Database password" : "وشه‌ی نهێنی داتا به‌یس",
"Database name" : "ناوی داتابه‌یس",
"Database host" : "هۆستی داتابه‌یس",
"Finish setup" : "كۆتایی هات ده‌ستكاریه‌كان",
- "Log out" : "چوونەدەرەوە"
+ "Log out" : "چوونەدەرەوە",
+ "Search" : "بگەڕێ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/lb.js b/core/l10n/lb.js
index 90ceb4cd8b8..638626fadcf 100644
--- a/core/l10n/lb.js
+++ b/core/l10n/lb.js
@@ -28,7 +28,6 @@ OC.L10N.register(
"December" : "Dezember",
"Settings" : "Astellungen",
"Saving..." : "Speicheren...",
- "Reset password" : "Passwuert zréck setzen",
"No" : "Nee",
"Yes" : "Jo",
"Choose" : "Auswielen",
@@ -49,7 +48,7 @@ OC.L10N.register(
"Shared with you by {owner}" : "Gedeelt mat dir vum {owner}",
"Share link" : "Link deelen",
"Password protect" : "Passwuertgeschützt",
- "Allow Public Upload" : "Ëffentlechen Upload erlaaben",
+ "Password" : "Passwuert",
"Email link to person" : "Link enger Persoun mailen",
"Send" : "Schécken",
"Set expiration date" : "Verfallsdatum setzen",
@@ -63,7 +62,6 @@ OC.L10N.register(
"can edit" : "kann änneren",
"access control" : "Zougrëffskontroll",
"create" : "erstellen",
- "update" : "aktualiséieren",
"delete" : "läschen",
"Password protected" : "Passwuertgeschützt",
"Error unsetting expiration date" : "Feeler beim Läsche vum Verfallsdatum",
@@ -80,12 +78,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Den Update war erfollegräich. Du gëss elo bei d'ownCloud ëmgeleet.",
"%s password reset" : "%s Passwuert ass nei gesat",
"Use the following link to reset your password: {link}" : "Benotz folgende Link fir däi Passwuert zréckzesetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du kriss e Link fir däi Passwuert zréckzesetze via Email geschéckt.",
- "Username" : "Benotzernumm",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deng Fichiere si verschlësselt. Falls du de Recuperatiouns-Schlëssel net aktivéiert hues, gëtt et keng Méiglechkeet nees un deng Daten ze komme wann däi Passwuert muss zréckgesat ginn. Falls du net sécher bass wat s de maache soll, kontaktéier w.e.gl däin Administrateur bevir s de weidermëss. Wëlls de wierklech weidermaachen?",
- "Yes, I really want to reset my password now" : "Jo, ech wëll mäi Passwuert elo zrécksetzen",
- "Reset" : "Zeréck setzen",
"New password" : "Neit Passwuert",
+ "Reset password" : "Passwuert zréck setzen",
"Personal" : "Perséinlech",
"Users" : "Benotzer",
"Apps" : "Applikatiounen",
@@ -100,7 +94,7 @@ OC.L10N.register(
"Please update your PHP installation to use %s securely." : "Aktualiséier w.e.gl deng PHP-Installatioun fir %s sécher kennen ze benotzen.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Däin Daten-Dossier an deng Fichieren si wahrscheinlech iwwert den Internet accessibel well den .htaccess-Fichier net funktionnéiert.",
"Create an <strong>admin account</strong>" : "En <strong>Admin-Account</strong> uleeën",
- "Password" : "Passwuert",
+ "Username" : "Benotzernumm",
"Data folder" : "Daten-Dossier",
"Configure the database" : "D'Datebank konfiguréieren",
"Database user" : "Datebank-Benotzer",
@@ -112,6 +106,7 @@ OC.L10N.register(
"Finishing …" : "Schléissen of ...",
"%s is available. Get more information on how to update." : "%s ass verfügbar. Kréi méi Informatiounen doriwwer wéi d'Aktualiséierung ofleeft.",
"Log out" : "Ofmellen",
+ "Search" : "Sichen",
"remember" : "verhalen",
"Log in" : "Umellen",
"Alternative Logins" : "Alternativ Umeldungen",
diff --git a/core/l10n/lb.json b/core/l10n/lb.json
index 9a1be1e4dd9..6a981f6762d 100644
--- a/core/l10n/lb.json
+++ b/core/l10n/lb.json
@@ -26,7 +26,6 @@
"December" : "Dezember",
"Settings" : "Astellungen",
"Saving..." : "Speicheren...",
- "Reset password" : "Passwuert zréck setzen",
"No" : "Nee",
"Yes" : "Jo",
"Choose" : "Auswielen",
@@ -47,7 +46,7 @@
"Shared with you by {owner}" : "Gedeelt mat dir vum {owner}",
"Share link" : "Link deelen",
"Password protect" : "Passwuertgeschützt",
- "Allow Public Upload" : "Ëffentlechen Upload erlaaben",
+ "Password" : "Passwuert",
"Email link to person" : "Link enger Persoun mailen",
"Send" : "Schécken",
"Set expiration date" : "Verfallsdatum setzen",
@@ -61,7 +60,6 @@
"can edit" : "kann änneren",
"access control" : "Zougrëffskontroll",
"create" : "erstellen",
- "update" : "aktualiséieren",
"delete" : "läschen",
"Password protected" : "Passwuertgeschützt",
"Error unsetting expiration date" : "Feeler beim Läsche vum Verfallsdatum",
@@ -78,12 +76,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Den Update war erfollegräich. Du gëss elo bei d'ownCloud ëmgeleet.",
"%s password reset" : "%s Passwuert ass nei gesat",
"Use the following link to reset your password: {link}" : "Benotz folgende Link fir däi Passwuert zréckzesetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du kriss e Link fir däi Passwuert zréckzesetze via Email geschéckt.",
- "Username" : "Benotzernumm",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deng Fichiere si verschlësselt. Falls du de Recuperatiouns-Schlëssel net aktivéiert hues, gëtt et keng Méiglechkeet nees un deng Daten ze komme wann däi Passwuert muss zréckgesat ginn. Falls du net sécher bass wat s de maache soll, kontaktéier w.e.gl däin Administrateur bevir s de weidermëss. Wëlls de wierklech weidermaachen?",
- "Yes, I really want to reset my password now" : "Jo, ech wëll mäi Passwuert elo zrécksetzen",
- "Reset" : "Zeréck setzen",
"New password" : "Neit Passwuert",
+ "Reset password" : "Passwuert zréck setzen",
"Personal" : "Perséinlech",
"Users" : "Benotzer",
"Apps" : "Applikatiounen",
@@ -98,7 +92,7 @@
"Please update your PHP installation to use %s securely." : "Aktualiséier w.e.gl deng PHP-Installatioun fir %s sécher kennen ze benotzen.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Däin Daten-Dossier an deng Fichieren si wahrscheinlech iwwert den Internet accessibel well den .htaccess-Fichier net funktionnéiert.",
"Create an <strong>admin account</strong>" : "En <strong>Admin-Account</strong> uleeën",
- "Password" : "Passwuert",
+ "Username" : "Benotzernumm",
"Data folder" : "Daten-Dossier",
"Configure the database" : "D'Datebank konfiguréieren",
"Database user" : "Datebank-Benotzer",
@@ -110,6 +104,7 @@
"Finishing …" : "Schléissen of ...",
"%s is available. Get more information on how to update." : "%s ass verfügbar. Kréi méi Informatiounen doriwwer wéi d'Aktualiséierung ofleeft.",
"Log out" : "Ofmellen",
+ "Search" : "Sichen",
"remember" : "verhalen",
"Log in" : "Umellen",
"Alternative Logins" : "Alternativ Umeldungen",
diff --git a/core/l10n/lo.js b/core/l10n/lo.js
new file mode 100644
index 00000000000..49247f7174c
--- /dev/null
+++ b/core/l10n/lo.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "core",
+ {
+ "_{count} file conflict_::_{count} file conflicts_" : [""],
+ "_download %n file_::_download %n files_" : [""]
+},
+"nplurals=1; plural=0;");
diff --git a/core/l10n/lo.json b/core/l10n/lo.json
new file mode 100644
index 00000000000..1d746175292
--- /dev/null
+++ b/core/l10n/lo.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "_{count} file conflict_::_{count} file conflicts_" : [""],
+ "_download %n file_::_download %n files_" : [""]
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/core/l10n/lt_LT.js b/core/l10n/lt_LT.js
index e3796940fbe..e2cb9d2035d 100644
--- a/core/l10n/lt_LT.js
+++ b/core/l10n/lt_LT.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "Gruodis",
"Settings" : "Nustatymai",
"Saving..." : "Saugoma...",
- "Reset password" : "Atkurti slaptažodį",
"No" : "Ne",
"Yes" : "Taip",
"Choose" : "Pasirinkite",
@@ -49,6 +48,7 @@ OC.L10N.register(
"Error loading file exists template" : "Klaida įkeliant esančių failų ruošinį",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Jūsų serveris nėra tvarkingai nustatytas leisti failų sinchronizaciją, nes WebDAV sąsaja panašu, kad yra sugadinta.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Šis serveris neturi veikiančio ryšio. Tai reiškia, kas kai kurios funkcijos kaip išorinės saugyklos prijungimas, perspėjimai apie atnaujinimus ar trečių šalių programų įdiegimas neveikia. Failų pasiekimas iš kitur ir pranešimų siuntimas el. paštu gali taip pat neveikti. Rekomenduojame įjungti interneto ryšį šiame serveryje, jei norite naudoti visas funkcijas.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsų duomenų katalogas ir Jūsų failai turbūt yra pasiekiami per internetą. Failas .htaccess neveikia. Mes labai rekomenduojame sukonfigūruoti serverį taip, kad katalogas nebūtų daugiau pasiekiamas, arba iškelkite duomenis kitur iš webserverio šakninio aplanko.",
"Shared" : "Dalinamasi",
"Share" : "Dalintis",
"Error" : "Klaida",
@@ -60,10 +60,11 @@ OC.L10N.register(
"Share with user or group …" : "Dalintis su vartotoju arba grupe...",
"Share link" : "Dalintis nuoroda",
"Password protect" : "Apsaugotas slaptažodžiu",
- "Allow Public Upload" : "Leisti viešą įkėlimą",
+ "Password" : "Slaptažodis",
"Email link to person" : "Nusiųsti nuorodą paštu",
"Send" : "Siųsti",
"Set expiration date" : "Nustatykite galiojimo laiką",
+ "Expiration" : "Galiojimo laikas",
"Expiration date" : "Galiojimo laikas",
"group" : "grupė",
"Resharing is not allowed" : "Dalijinasis išnaujo negalimas",
@@ -74,7 +75,6 @@ OC.L10N.register(
"can edit" : "gali redaguoti",
"access control" : "priėjimo kontrolė",
"create" : "sukurti",
- "update" : "atnaujinti",
"delete" : "ištrinti",
"Password protected" : "Apsaugota slaptažodžiu",
"Error unsetting expiration date" : "Klaida nuimant galiojimo laiką",
@@ -94,12 +94,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Atnaujinimas buvo sėkmingas. Nukreipiame į jūsų ownCloud.",
"%s password reset" : "%s slaptažodžio atnaujinimas",
"Use the following link to reset your password: {link}" : "Slaptažodio atkūrimui naudokite šią nuorodą: {link}",
- "You will receive a link to reset your password via Email." : "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
- "Username" : "Prisijungimo vardas",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsų failai yra užšifruoti. Jei neįjungėte atstatymo rakto, nebus galimybės atstatyti duomenų po slaptažodžio atstatymo. Jei nesate tikri ką daryti, prašome susisiekti su administratoriumi prie tęsiant. Ar tikrai tęsti?",
- "Yes, I really want to reset my password now" : "Taip, aš tikrai noriu atnaujinti slaptažodį",
- "Reset" : "Atstatyti",
"New password" : "Naujas slaptažodis",
+ "Reset password" : "Atkurti slaptažodį",
"Personal" : "Asmeniniai",
"Users" : "Vartotojai",
"Apps" : "Programos",
@@ -122,7 +118,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.",
"Create an <strong>admin account</strong>" : "Sukurti <strong>administratoriaus paskyrą</strong>",
- "Password" : "Slaptažodis",
+ "Username" : "Prisijungimo vardas",
"Data folder" : "Duomenų katalogas",
"Configure the database" : "Nustatyti duomenų bazę",
"Database user" : "Duomenų bazės vartotojas",
@@ -134,6 +130,7 @@ OC.L10N.register(
"Finishing …" : "Baigiama ...",
"%s is available. Get more information on how to update." : "%s yra prieinama. Gaukite daugiau informacijos apie atnaujinimą.",
"Log out" : "Atsijungti",
+ "Search" : "Ieškoti",
"Server side authentication failed!" : "Autentikacija serveryje nepavyko!",
"Please contact your administrator." : "Kreipkitės į savo sistemos administratorių.",
"remember" : "prisiminti",
diff --git a/core/l10n/lt_LT.json b/core/l10n/lt_LT.json
index a70b966aae2..31b4311f6e0 100644
--- a/core/l10n/lt_LT.json
+++ b/core/l10n/lt_LT.json
@@ -29,7 +29,6 @@
"December" : "Gruodis",
"Settings" : "Nustatymai",
"Saving..." : "Saugoma...",
- "Reset password" : "Atkurti slaptažodį",
"No" : "Ne",
"Yes" : "Taip",
"Choose" : "Pasirinkite",
@@ -47,6 +46,7 @@
"Error loading file exists template" : "Klaida įkeliant esančių failų ruošinį",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Jūsų serveris nėra tvarkingai nustatytas leisti failų sinchronizaciją, nes WebDAV sąsaja panašu, kad yra sugadinta.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Šis serveris neturi veikiančio ryšio. Tai reiškia, kas kai kurios funkcijos kaip išorinės saugyklos prijungimas, perspėjimai apie atnaujinimus ar trečių šalių programų įdiegimas neveikia. Failų pasiekimas iš kitur ir pranešimų siuntimas el. paštu gali taip pat neveikti. Rekomenduojame įjungti interneto ryšį šiame serveryje, jei norite naudoti visas funkcijas.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsų duomenų katalogas ir Jūsų failai turbūt yra pasiekiami per internetą. Failas .htaccess neveikia. Mes labai rekomenduojame sukonfigūruoti serverį taip, kad katalogas nebūtų daugiau pasiekiamas, arba iškelkite duomenis kitur iš webserverio šakninio aplanko.",
"Shared" : "Dalinamasi",
"Share" : "Dalintis",
"Error" : "Klaida",
@@ -58,10 +58,11 @@
"Share with user or group …" : "Dalintis su vartotoju arba grupe...",
"Share link" : "Dalintis nuoroda",
"Password protect" : "Apsaugotas slaptažodžiu",
- "Allow Public Upload" : "Leisti viešą įkėlimą",
+ "Password" : "Slaptažodis",
"Email link to person" : "Nusiųsti nuorodą paštu",
"Send" : "Siųsti",
"Set expiration date" : "Nustatykite galiojimo laiką",
+ "Expiration" : "Galiojimo laikas",
"Expiration date" : "Galiojimo laikas",
"group" : "grupė",
"Resharing is not allowed" : "Dalijinasis išnaujo negalimas",
@@ -72,7 +73,6 @@
"can edit" : "gali redaguoti",
"access control" : "priėjimo kontrolė",
"create" : "sukurti",
- "update" : "atnaujinti",
"delete" : "ištrinti",
"Password protected" : "Apsaugota slaptažodžiu",
"Error unsetting expiration date" : "Klaida nuimant galiojimo laiką",
@@ -92,12 +92,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Atnaujinimas buvo sėkmingas. Nukreipiame į jūsų ownCloud.",
"%s password reset" : "%s slaptažodžio atnaujinimas",
"Use the following link to reset your password: {link}" : "Slaptažodio atkūrimui naudokite šią nuorodą: {link}",
- "You will receive a link to reset your password via Email." : "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
- "Username" : "Prisijungimo vardas",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsų failai yra užšifruoti. Jei neįjungėte atstatymo rakto, nebus galimybės atstatyti duomenų po slaptažodžio atstatymo. Jei nesate tikri ką daryti, prašome susisiekti su administratoriumi prie tęsiant. Ar tikrai tęsti?",
- "Yes, I really want to reset my password now" : "Taip, aš tikrai noriu atnaujinti slaptažodį",
- "Reset" : "Atstatyti",
"New password" : "Naujas slaptažodis",
+ "Reset password" : "Atkurti slaptažodį",
"Personal" : "Asmeniniai",
"Users" : "Vartotojai",
"Apps" : "Programos",
@@ -120,7 +116,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.",
"Create an <strong>admin account</strong>" : "Sukurti <strong>administratoriaus paskyrą</strong>",
- "Password" : "Slaptažodis",
+ "Username" : "Prisijungimo vardas",
"Data folder" : "Duomenų katalogas",
"Configure the database" : "Nustatyti duomenų bazę",
"Database user" : "Duomenų bazės vartotojas",
@@ -132,6 +128,7 @@
"Finishing …" : "Baigiama ...",
"%s is available. Get more information on how to update." : "%s yra prieinama. Gaukite daugiau informacijos apie atnaujinimą.",
"Log out" : "Atsijungti",
+ "Search" : "Ieškoti",
"Server side authentication failed!" : "Autentikacija serveryje nepavyko!",
"Please contact your administrator." : "Kreipkitės į savo sistemos administratorių.",
"remember" : "prisiminti",
diff --git a/core/l10n/lv.js b/core/l10n/lv.js
index 16bb3007e4c..8f50b8c1126 100644
--- a/core/l10n/lv.js
+++ b/core/l10n/lv.js
@@ -1,6 +1,12 @@
OC.L10N.register(
"core",
{
+ "Couldn't send mail to following users: %s " : "Nevar nosūtīt epastu, sekojošiem lietotājiem: %s",
+ "Turned on maintenance mode" : "Ieslēgts uzturēšanas režīms",
+ "Turned off maintenance mode" : "Izslēgts uzturēšanas režīms",
+ "Updated database" : "Atjaunota datu bāze",
+ "Unknown filetype" : "Nezināms datnes tips",
+ "Invalid image" : "Nederīgs attēls",
"Sunday" : "Svētdiena",
"Monday" : "Pirmdiena",
"Tuesday" : "Otrdiena",
@@ -22,16 +28,25 @@ OC.L10N.register(
"December" : "Decembris",
"Settings" : "Iestatījumi",
"Saving..." : "Saglabā...",
- "Reset password" : "Mainīt paroli",
+ "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ā",
"Choose" : "Izvēlieties",
"Ok" : "Labi",
+ "read-only" : "tikai-skatīt",
"_{count} file conflict_::_{count} file conflicts_" : ["","",""],
"New Files" : "Jaunās datnes",
"Cancel" : "Atcelt",
+ "(all selected)" : "(visus iezīmētos)",
+ "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",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Šim serverim nav savienojums ar internetu. Tas nozīmē ka nebūs tādas iespējas kā ārējo datu nesēju montēšana, paziņojumi par atjauninājumiem vai citu izstrādātāju programmu uzstādīšana. Attālināta failu piekļuve vai paziņojumu epastu sūtīšana iespējams arī nedarbosies. Ir rekomendēts iespējot interneta savienojumu lai gūtu iespēju izmantotu visus risinājumus.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsu datu direktorija un faili visticamāk ir pieejami no interneta. .htaccess fails nedarbojas. Ir rekomendēts konfigurēt serveri tā lai jūsu datu direktorija nav lasāma vai pārvietot to ārpus tīmekļa servera dokumentu mapes.",
"Shared" : "Kopīgs",
"Share" : "Dalīties",
"Error" : "Kļūda",
@@ -41,7 +56,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "{owner} dalījās ar jums un grupu {group}",
"Shared with you by {owner}" : "{owner} dalījās ar jums",
"Password protect" : "Aizsargāt ar paroli",
- "Allow Public Upload" : "Ļaut publisko augšupielādi.",
+ "Password" : "Parole",
"Email link to person" : "Sūtīt saiti personai pa e-pastu",
"Send" : "Sūtīt",
"Set expiration date" : "Iestaties termiņa datumu",
@@ -50,10 +65,10 @@ OC.L10N.register(
"Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta",
"Shared in {item} with {user}" : "Dalījās ar {item} ar {user}",
"Unshare" : "Pārtraukt dalīšanos",
+ "can share" : "Var dalīties",
"can edit" : "var rediģēt",
"access control" : "piekļuves vadība",
"create" : "izveidot",
- "update" : "atjaunināt",
"delete" : "dzēst",
"Password protected" : "Aizsargāts ar paroli",
"Error unsetting expiration date" : "Kļūda, noņemot termiņa datumu",
@@ -68,11 +83,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Atjaunināšana beidzās sekmīgi. Tagad pārsūta jūs uz ownCloud.",
"%s password reset" : "%s paroles maiņa",
"Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
- "You will receive a link to reset your password via Email." : "Jūs savā epastā saņemsiet interneta saiti, caur kuru varēsiet atjaunot paroli.",
- "Username" : "Lietotājvārds",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja nav iespējota atgūšanas kods, tad nebūs iespēja atjaunot jūsu failus pēc tam kad tiks mainīta parole. ja neesat pārliecināts kā rīkoties, jautājiet administratoram. Vai tiešam vēlaties turpināt?",
- "Yes, I really want to reset my password now" : "Jā, Es tiešām vēlos mainīt savu paroli",
"New password" : "Jauna parole",
+ "Reset password" : "Mainīt paroli",
"Personal" : "Personīgi",
"Users" : "Lietotāji",
"Apps" : "Lietotnes",
@@ -85,7 +97,7 @@ OC.L10N.register(
"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.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vairāk informācijai kā konfigurēt serveri, lūdzu skatiet <a href=\"%s\" target=\"_blank\">dokumentāciju</a>.",
"Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>",
- "Password" : "Parole",
+ "Username" : "Lietotājvārds",
"Data folder" : "Datu mape",
"Configure the database" : "Konfigurēt datubāzi",
"Database user" : "Datubāzes lietotājs",
@@ -96,6 +108,7 @@ OC.L10N.register(
"Finish setup" : "Pabeigt iestatīšanu",
"%s is available. Get more information on how to update." : "%s ir pieejams. Uzziniet vairāk kā atjaunināt.",
"Log out" : "Izrakstīties",
+ "Search" : "Meklēt",
"remember" : "atcerēties",
"Log in" : "Ierakstīties",
"Alternative Logins" : "Alternatīvās pieteikšanās"
diff --git a/core/l10n/lv.json b/core/l10n/lv.json
index afeb3f82a17..4fedd220680 100644
--- a/core/l10n/lv.json
+++ b/core/l10n/lv.json
@@ -1,4 +1,10 @@
{ "translations": {
+ "Couldn't send mail to following users: %s " : "Nevar nosūtīt epastu, sekojošiem lietotājiem: %s",
+ "Turned on maintenance mode" : "Ieslēgts uzturēšanas režīms",
+ "Turned off maintenance mode" : "Izslēgts uzturēšanas režīms",
+ "Updated database" : "Atjaunota datu bāze",
+ "Unknown filetype" : "Nezināms datnes tips",
+ "Invalid image" : "Nederīgs attēls",
"Sunday" : "Svētdiena",
"Monday" : "Pirmdiena",
"Tuesday" : "Otrdiena",
@@ -20,16 +26,25 @@
"December" : "Decembris",
"Settings" : "Iestatījumi",
"Saving..." : "Saglabā...",
- "Reset password" : "Mainīt paroli",
+ "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ā",
"Choose" : "Izvēlieties",
"Ok" : "Labi",
+ "read-only" : "tikai-skatīt",
"_{count} file conflict_::_{count} file conflicts_" : ["","",""],
"New Files" : "Jaunās datnes",
"Cancel" : "Atcelt",
+ "(all selected)" : "(visus iezīmētos)",
+ "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",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Šim serverim nav savienojums ar internetu. Tas nozīmē ka nebūs tādas iespējas kā ārējo datu nesēju montēšana, paziņojumi par atjauninājumiem vai citu izstrādātāju programmu uzstādīšana. Attālināta failu piekļuve vai paziņojumu epastu sūtīšana iespējams arī nedarbosies. Ir rekomendēts iespējot interneta savienojumu lai gūtu iespēju izmantotu visus risinājumus.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsu datu direktorija un faili visticamāk ir pieejami no interneta. .htaccess fails nedarbojas. Ir rekomendēts konfigurēt serveri tā lai jūsu datu direktorija nav lasāma vai pārvietot to ārpus tīmekļa servera dokumentu mapes.",
"Shared" : "Kopīgs",
"Share" : "Dalīties",
"Error" : "Kļūda",
@@ -39,7 +54,7 @@
"Shared with you and the group {group} by {owner}" : "{owner} dalījās ar jums un grupu {group}",
"Shared with you by {owner}" : "{owner} dalījās ar jums",
"Password protect" : "Aizsargāt ar paroli",
- "Allow Public Upload" : "Ļaut publisko augšupielādi.",
+ "Password" : "Parole",
"Email link to person" : "Sūtīt saiti personai pa e-pastu",
"Send" : "Sūtīt",
"Set expiration date" : "Iestaties termiņa datumu",
@@ -48,10 +63,10 @@
"Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta",
"Shared in {item} with {user}" : "Dalījās ar {item} ar {user}",
"Unshare" : "Pārtraukt dalīšanos",
+ "can share" : "Var dalīties",
"can edit" : "var rediģēt",
"access control" : "piekļuves vadība",
"create" : "izveidot",
- "update" : "atjaunināt",
"delete" : "dzēst",
"Password protected" : "Aizsargāts ar paroli",
"Error unsetting expiration date" : "Kļūda, noņemot termiņa datumu",
@@ -66,11 +81,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Atjaunināšana beidzās sekmīgi. Tagad pārsūta jūs uz ownCloud.",
"%s password reset" : "%s paroles maiņa",
"Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
- "You will receive a link to reset your password via Email." : "Jūs savā epastā saņemsiet interneta saiti, caur kuru varēsiet atjaunot paroli.",
- "Username" : "Lietotājvārds",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja nav iespējota atgūšanas kods, tad nebūs iespēja atjaunot jūsu failus pēc tam kad tiks mainīta parole. ja neesat pārliecināts kā rīkoties, jautājiet administratoram. Vai tiešam vēlaties turpināt?",
- "Yes, I really want to reset my password now" : "Jā, Es tiešām vēlos mainīt savu paroli",
"New password" : "Jauna parole",
+ "Reset password" : "Mainīt paroli",
"Personal" : "Personīgi",
"Users" : "Lietotāji",
"Apps" : "Lietotnes",
@@ -83,7 +95,7 @@
"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.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vairāk informācijai kā konfigurēt serveri, lūdzu skatiet <a href=\"%s\" target=\"_blank\">dokumentāciju</a>.",
"Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>",
- "Password" : "Parole",
+ "Username" : "Lietotājvārds",
"Data folder" : "Datu mape",
"Configure the database" : "Konfigurēt datubāzi",
"Database user" : "Datubāzes lietotājs",
@@ -94,6 +106,7 @@
"Finish setup" : "Pabeigt iestatīšanu",
"%s is available. Get more information on how to update." : "%s ir pieejams. Uzziniet vairāk kā atjaunināt.",
"Log out" : "Izrakstīties",
+ "Search" : "Meklēt",
"remember" : "atcerēties",
"Log in" : "Ierakstīties",
"Alternative Logins" : "Alternatīvās pieteikšanās"
diff --git a/core/l10n/mk.js b/core/l10n/mk.js
index 0b1e993a8f4..fc2eff6866f 100644
--- a/core/l10n/mk.js
+++ b/core/l10n/mk.js
@@ -28,7 +28,6 @@ OC.L10N.register(
"December" : "Декември",
"Settings" : "Подесувања",
"Saving..." : "Снимам...",
- "Reset password" : "Ресетирај лозинка",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Избери",
@@ -55,10 +54,11 @@ OC.L10N.register(
"Shared with you by {owner}" : "Споделено со Вас од {owner}",
"Share link" : "Сподели ја врската",
"Password protect" : "Заштити со лозинка",
- "Allow Public Upload" : "Дозволи јавен аплоуд",
+ "Password" : "Лозинка",
"Email link to person" : "Прати врска по е-пошта на личност",
"Send" : "Прати",
"Set expiration date" : "Постави рок на траење",
+ "Expiration" : "Истекување",
"Expiration date" : "Рок на траење",
"group" : "група",
"Resharing is not allowed" : "Повторно споделување не е дозволено",
@@ -68,7 +68,6 @@ OC.L10N.register(
"can edit" : "може да се измени",
"access control" : "контрола на пристап",
"create" : "креирај",
- "update" : "ажурирај",
"delete" : "избриши",
"Password protected" : "Заштитено со лозинка",
"Error unsetting expiration date" : "Грешка при тргање на рокот на траење",
@@ -86,11 +85,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Надградбата беше успешна. Веднаш ве префрлам на вашиот ownCloud.",
"%s password reset" : "%s ресетирање на лозинката",
"Use the following link to reset your password: {link}" : "Користете ја следната врска да ја ресетирате Вашата лозинка: {link}",
- "You will receive a link to reset your password via Email." : "Ќе добиете врска по е-пошта за да може да ја ресетирате Вашата лозинка.",
- "Username" : "Корисничко име",
- "Yes, I really want to reset my password now" : "Да, јас сега навистина сакам да ја поништам својата лозинка",
- "Reset" : "Поништи",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетирај лозинка",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Аппликации",
@@ -109,7 +105,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Вашата верзија на PHP е ранлива на NULL Byte attack (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашиот директориум со податоци и датотеки се веројатно достапни преку интенернт поради што .htaccess датотеката не функционира.",
"Create an <strong>admin account</strong>" : "Направете <strong>администраторска сметка</strong>",
- "Password" : "Лозинка",
+ "Username" : "Корисничко име",
"Data folder" : "Фолдер со податоци",
"Configure the database" : "Конфигурирај ја базата",
"Database user" : "Корисник на база",
@@ -120,6 +116,7 @@ OC.L10N.register(
"Finish setup" : "Заврши го подесувањето",
"Finishing …" : "Завршувам ...",
"Log out" : "Одјава",
+ "Search" : "Барај",
"Server side authentication failed!" : "Автентификацијата на серверската страна е неуспешна!",
"Please contact your administrator." : "Ве молиме контактирајте го вашиот администратор.",
"remember" : "запамти",
diff --git a/core/l10n/mk.json b/core/l10n/mk.json
index 2da6b74e601..3b6906eec70 100644
--- a/core/l10n/mk.json
+++ b/core/l10n/mk.json
@@ -26,7 +26,6 @@
"December" : "Декември",
"Settings" : "Подесувања",
"Saving..." : "Снимам...",
- "Reset password" : "Ресетирај лозинка",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Избери",
@@ -53,10 +52,11 @@
"Shared with you by {owner}" : "Споделено со Вас од {owner}",
"Share link" : "Сподели ја врската",
"Password protect" : "Заштити со лозинка",
- "Allow Public Upload" : "Дозволи јавен аплоуд",
+ "Password" : "Лозинка",
"Email link to person" : "Прати врска по е-пошта на личност",
"Send" : "Прати",
"Set expiration date" : "Постави рок на траење",
+ "Expiration" : "Истекување",
"Expiration date" : "Рок на траење",
"group" : "група",
"Resharing is not allowed" : "Повторно споделување не е дозволено",
@@ -66,7 +66,6 @@
"can edit" : "може да се измени",
"access control" : "контрола на пристап",
"create" : "креирај",
- "update" : "ажурирај",
"delete" : "избриши",
"Password protected" : "Заштитено со лозинка",
"Error unsetting expiration date" : "Грешка при тргање на рокот на траење",
@@ -84,11 +83,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Надградбата беше успешна. Веднаш ве префрлам на вашиот ownCloud.",
"%s password reset" : "%s ресетирање на лозинката",
"Use the following link to reset your password: {link}" : "Користете ја следната врска да ја ресетирате Вашата лозинка: {link}",
- "You will receive a link to reset your password via Email." : "Ќе добиете врска по е-пошта за да може да ја ресетирате Вашата лозинка.",
- "Username" : "Корисничко име",
- "Yes, I really want to reset my password now" : "Да, јас сега навистина сакам да ја поништам својата лозинка",
- "Reset" : "Поништи",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетирај лозинка",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Аппликации",
@@ -107,7 +103,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Вашата верзија на PHP е ранлива на NULL Byte attack (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашиот директориум со податоци и датотеки се веројатно достапни преку интенернт поради што .htaccess датотеката не функционира.",
"Create an <strong>admin account</strong>" : "Направете <strong>администраторска сметка</strong>",
- "Password" : "Лозинка",
+ "Username" : "Корисничко име",
"Data folder" : "Фолдер со податоци",
"Configure the database" : "Конфигурирај ја базата",
"Database user" : "Корисник на база",
@@ -118,6 +114,7 @@
"Finish setup" : "Заврши го подесувањето",
"Finishing …" : "Завршувам ...",
"Log out" : "Одјава",
+ "Search" : "Барај",
"Server side authentication failed!" : "Автентификацијата на серверската страна е неуспешна!",
"Please contact your administrator." : "Ве молиме контактирајте го вашиот администратор.",
"remember" : "запамти",
diff --git a/core/l10n/mn.js b/core/l10n/mn.js
index 5b92c594ac0..858069e9fb3 100644
--- a/core/l10n/mn.js
+++ b/core/l10n/mn.js
@@ -1,7 +1,18 @@
OC.L10N.register(
"core",
{
+ "Sunday" : "Ням",
+ "Monday" : "Даваа",
+ "Tuesday" : "Мягмар",
+ "Wednesday" : "Лхагва",
+ "Thursday" : "Пүрэв",
+ "Friday" : "Баасан",
+ "Saturday" : "Бямба",
+ "Settings" : "Тохиргоо",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
- "_download %n file_::_download %n files_" : ["",""]
+ "Share" : "Түгээх",
+ "Password" : "Нууц үг",
+ "_download %n file_::_download %n files_" : ["",""],
+ "Username" : "Хэрэглэгчийн нэр"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/mn.json b/core/l10n/mn.json
index d2c1f43f96e..3216a31cf2c 100644
--- a/core/l10n/mn.json
+++ b/core/l10n/mn.json
@@ -1,5 +1,16 @@
{ "translations": {
+ "Sunday" : "Ням",
+ "Monday" : "Даваа",
+ "Tuesday" : "Мягмар",
+ "Wednesday" : "Лхагва",
+ "Thursday" : "Пүрэв",
+ "Friday" : "Баасан",
+ "Saturday" : "Бямба",
+ "Settings" : "Тохиргоо",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
- "_download %n file_::_download %n files_" : ["",""]
+ "Share" : "Түгээх",
+ "Password" : "Нууц үг",
+ "_download %n file_::_download %n files_" : ["",""],
+ "Username" : "Хэрэглэгчийн нэр"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ms_MY.js b/core/l10n/ms_MY.js
index 612641fe748..f5def6af6b3 100644
--- a/core/l10n/ms_MY.js
+++ b/core/l10n/ms_MY.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Disember",
"Settings" : "Tetapan",
"Saving..." : "Simpan...",
- "Reset password" : "Penetapan semula kata laluan",
"No" : "Tidak",
"Yes" : "Ya",
"Ok" : "Ok",
@@ -30,6 +29,7 @@ OC.L10N.register(
"Cancel" : "Batal",
"Share" : "Kongsi",
"Error" : "Ralat",
+ "Password" : "Kata laluan",
"group" : "kumpulan",
"can share" : "boleh berkongsi",
"can edit" : "boleh mengubah",
@@ -38,9 +38,8 @@ OC.L10N.register(
"Add" : "Tambah",
"_download %n file_::_download %n files_" : [""],
"Use the following link to reset your password: {link}" : "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima pautan untuk menetapkan semula kata laluan anda melalui emel",
- "Username" : "Nama pengguna",
"New password" : "Kata laluan baru",
+ "Reset password" : "Penetapan semula kata laluan",
"Personal" : "Peribadi",
"Users" : "Pengguna",
"Apps" : "Aplikasi",
@@ -49,7 +48,7 @@ OC.L10N.register(
"Access forbidden" : "Larangan akses",
"Security Warning" : "Amaran keselamatan",
"Create an <strong>admin account</strong>" : "buat <strong>akaun admin</strong>",
- "Password" : "Kata laluan",
+ "Username" : "Nama pengguna",
"Data folder" : "Fail data",
"Configure the database" : "Konfigurasi pangkalan data",
"Database user" : "Nama pengguna pangkalan data",
@@ -58,6 +57,7 @@ OC.L10N.register(
"Database host" : "Hos pangkalan data",
"Finish setup" : "Setup selesai",
"Log out" : "Log keluar",
+ "Search" : "Cari",
"remember" : "ingat",
"Log in" : "Log masuk"
},
diff --git a/core/l10n/ms_MY.json b/core/l10n/ms_MY.json
index c1323607c8c..e58a5b4c5a7 100644
--- a/core/l10n/ms_MY.json
+++ b/core/l10n/ms_MY.json
@@ -20,7 +20,6 @@
"December" : "Disember",
"Settings" : "Tetapan",
"Saving..." : "Simpan...",
- "Reset password" : "Penetapan semula kata laluan",
"No" : "Tidak",
"Yes" : "Ya",
"Ok" : "Ok",
@@ -28,6 +27,7 @@
"Cancel" : "Batal",
"Share" : "Kongsi",
"Error" : "Ralat",
+ "Password" : "Kata laluan",
"group" : "kumpulan",
"can share" : "boleh berkongsi",
"can edit" : "boleh mengubah",
@@ -36,9 +36,8 @@
"Add" : "Tambah",
"_download %n file_::_download %n files_" : [""],
"Use the following link to reset your password: {link}" : "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima pautan untuk menetapkan semula kata laluan anda melalui emel",
- "Username" : "Nama pengguna",
"New password" : "Kata laluan baru",
+ "Reset password" : "Penetapan semula kata laluan",
"Personal" : "Peribadi",
"Users" : "Pengguna",
"Apps" : "Aplikasi",
@@ -47,7 +46,7 @@
"Access forbidden" : "Larangan akses",
"Security Warning" : "Amaran keselamatan",
"Create an <strong>admin account</strong>" : "buat <strong>akaun admin</strong>",
- "Password" : "Kata laluan",
+ "Username" : "Nama pengguna",
"Data folder" : "Fail data",
"Configure the database" : "Konfigurasi pangkalan data",
"Database user" : "Nama pengguna pangkalan data",
@@ -56,6 +55,7 @@
"Database host" : "Hos pangkalan data",
"Finish setup" : "Setup selesai",
"Log out" : "Log keluar",
+ "Search" : "Cari",
"remember" : "ingat",
"Log in" : "Log masuk"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/core/l10n/my_MM.js b/core/l10n/my_MM.js
index ff87f52a5e2..c6eb5999460 100644
--- a/core/l10n/my_MM.js
+++ b/core/l10n/my_MM.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Ok" : "အိုကေ",
"_{count} file conflict_::_{count} file conflicts_" : [""],
"Cancel" : "ပယ်ဖျက်မည်",
+ "Password" : "စကားဝှက်",
"Set expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်",
"Expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်",
"Resharing is not allowed" : "ပြန်လည်ဝေမျှခြင်းခွင့်မပြုပါ",
@@ -28,8 +29,6 @@ OC.L10N.register(
"Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်",
"Add" : "ပေါင်းထည့်",
"_download %n file_::_download %n files_" : [""],
- "You will receive a link to reset your password via Email." : "အီးမေးလ်မှတစ်ဆင့် သင်၏စကားဝှက်ကို ပြန်ဖော်ရန်အတွက် Link တစ်ခုလက်ခံရရှိပါလိမ့်မယ်။",
- "Username" : "သုံးစွဲသူအမည်",
"New password" : "စကားဝှက်အသစ်",
"Users" : "သုံးစွဲသူ",
"Apps" : "Apps",
@@ -37,7 +36,7 @@ OC.L10N.register(
"Help" : "အကူအညီ",
"Security Warning" : "လုံခြုံရေးသတိပေးချက်",
"Create an <strong>admin account</strong>" : "<strong>အက်ဒမင်အကောင့်</strong>တစ်ခုဖန်တီးမည်",
- "Password" : "စကားဝှက်",
+ "Username" : "သုံးစွဲသူအမည်",
"Data folder" : "အချက်အလက်ဖိုလ်ဒါလ်",
"Database user" : "Database သုံးစွဲသူ",
"Database password" : "Database စကားဝှက်",
diff --git a/core/l10n/my_MM.json b/core/l10n/my_MM.json
index 086e14cdad0..e211761c348 100644
--- a/core/l10n/my_MM.json
+++ b/core/l10n/my_MM.json
@@ -17,6 +17,7 @@
"Ok" : "အိုကေ",
"_{count} file conflict_::_{count} file conflicts_" : [""],
"Cancel" : "ပယ်ဖျက်မည်",
+ "Password" : "စကားဝှက်",
"Set expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်",
"Expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်",
"Resharing is not allowed" : "ပြန်လည်ဝေမျှခြင်းခွင့်မပြုပါ",
@@ -26,8 +27,6 @@
"Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်",
"Add" : "ပေါင်းထည့်",
"_download %n file_::_download %n files_" : [""],
- "You will receive a link to reset your password via Email." : "အီးမေးလ်မှတစ်ဆင့် သင်၏စကားဝှက်ကို ပြန်ဖော်ရန်အတွက် Link တစ်ခုလက်ခံရရှိပါလိမ့်မယ်။",
- "Username" : "သုံးစွဲသူအမည်",
"New password" : "စကားဝှက်အသစ်",
"Users" : "သုံးစွဲသူ",
"Apps" : "Apps",
@@ -35,7 +34,7 @@
"Help" : "အကူအညီ",
"Security Warning" : "လုံခြုံရေးသတိပေးချက်",
"Create an <strong>admin account</strong>" : "<strong>အက်ဒမင်အကောင့်</strong>တစ်ခုဖန်တီးမည်",
- "Password" : "စကားဝှက်",
+ "Username" : "သုံးစွဲသူအမည်",
"Data folder" : "အချက်အလက်ဖိုလ်ဒါလ်",
"Database user" : "Database သုံးစွဲသူ",
"Database password" : "Database စကားဝှက်",
diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js
index a033c38aa77..ef1cf6a83d0 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lenken for tilbakestilling av passordet ditt er sendt til din e-postadresse. Hvis du ikke mottar den innen rimelig tid, sjekk mappen for søppelpost.<br>Hvis du ikke finner den der, kontakt din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"I know what I'm doing" : "Jeg vet hva jeg gjør",
- "Reset password" : "Tilbakestill passord",
"Password can not be changed. Please contact your administrator." : "Passordet kan ikke endres. Kontakt administratoren din.",
"No" : "Nei",
"Yes" : "Ja",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Feil ved lasting av filvelger-mal: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Feil ved lasting av meldingsmal: {error}",
+ "read-only" : "skrivebeskyttet",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
"One file conflict" : "En filkonflikt",
"New Files" : "Nye filer",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Sterkt passord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Din nettserver er ikke konfigurert korrekt for filsynkronisering. WebDAV ser ut til å ikke fungere.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Denne serveren har ikke en fungerende Internett-tilkobling. Dette betyr at noen av funksjonene, f.eks. å koble opp ekstern lagring, påminnelser om oppdatering eller installering av 3-parts apper ikke fungerer. Fjerntilgang til filer og utsending av påminnelser i e-post virker kanskje ikke heller. Vi anbefaler at Internett-forbindelsen for denne serveren aktiveres hvis du vil ha full funksjonalitet.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer. Vi anbefaler på det sterkeste at du konfigurerer web-serveren din slik at datamappen ikke lenger er tilgjengelig eller at du flytter datamappen ut av web-serverens dokument-rotmappe.",
"Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Del med bruker eller gruppe …",
"Share link" : "Del lenke",
"The public link will expire no later than {days} days after it is created" : "Den offentlige lenken vil utløpe senest {days} dager etter at den lages",
+ "Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
+ "Password" : "Passord",
"Choose a password for the public link" : "Velg et passord for den offentlige lenken",
- "Allow Public Upload" : "Tillat Offentlig Opplasting",
+ "Allow editing" : "Tillat redigering",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
"Set expiration date" : "Sett utløpsdato",
+ "Expiration" : "Utløpsdato",
"Expiration date" : "Utløpsdato",
"Adding user..." : "Legger til bruker...",
"group" : "gruppe",
+ "remote" : "ekstern",
"Resharing is not allowed" : "Videre deling er ikke tillatt",
"Shared in {item} with {user}" : "Delt i {item} med {user}",
"Unshare" : "Avslutt deling",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "kan endre",
"access control" : "tilgangskontroll",
"create" : "opprette",
- "update" : "oppdatere",
+ "change" : "endre",
"delete" : "slette",
"Password protected" : "Passordbeskyttet",
"Error unsetting expiration date" : "Feil ved nullstilling av utløpsdato",
@@ -110,25 +115,29 @@ OC.L10N.register(
"Edit tags" : "Rediger merkelapper",
"Error loading dialog template: {error}" : "Feil ved lasting av dialogmal: {error}",
"No tags selected for deletion." : "Ingen merkelapper valgt for sletting.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "ukjent tekst",
+ "Hello world!" : "Hei, Verden!",
+ "sunny" : "solfylt",
+ "Hello {name}, the weather is {weather}" : "Hallo {name}, været er {weather}",
+ "_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"],
"Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}. Dette kan ta litt tid.",
"Please reload the page." : "Vennligst last siden på nytt.",
- "The update was unsuccessful." : "Oppdateringen var vellykket.",
+ "The update was unsuccessful. " : "Oppdateringen var mislykket.",
"The update was successful. Redirecting you to ownCloud now." : "Oppdateringen var vellykket. Du omdirigeres nå til ownCloud.",
"Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.",
"Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.",
"%s password reset" : "%s tilbakestilling av passord",
"Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du burde motta detaljer om å tilbakestille passordet ditt via epost.",
- "Username" : "Brukernavn",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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 passordet ditt er tilbakestilt. Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. Vil du virkelig fortsette?",
- "Yes, I really want to reset my password now" : "Ja, jeg vil virkelig tilbakestille passordet mitt nå",
- "Reset" : "Tilbakestill",
"New password" : "Nytt passord",
"New Password" : "Nytt passord",
+ "Reset password" : "Tilbakestill passord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Det virker som om denne %s-instansen kjører i et 32-bits PHP-miljø og open_basedir er konfigurert i php.ini. Dette vil gi problemer med filer over 4GB og er sterkt frarådet.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Det virker som om denne %s-instansen kjører i et 32-bits PHP-miljø og cURL er ikke installert. Dette vil gi problemer med filer over 4GB og er sterkt frarådet.",
+ "Please install the cURL extension and restart your webserver." : "Installer utvidelsen cURL og start web-serveren på nytt.",
"Personal" : "Personlig",
"Users" : "Brukere",
"Apps" : "Apper",
@@ -148,6 +157,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\nDette er en beskjed om at %s delte %s med deg.\nVis den: %s\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
+ "Internal Server Error" : "Intern serverfeil.",
"The server encountered an internal error and was unable to complete your request." : "Serveren støtte på en intern feil og kunne ikke fullføre forespørselen din.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt server-administratoren hvis denne feilen oppstår flere ganger. Vennligst ta med de tekniske detaljene nedenfor i rapporten din.",
"More details can be found in the server log." : "Flere detaljer finnes i server-loggen.",
@@ -165,7 +175,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du setter opp serveren din riktig, se <a href=\"%s\" target=\"_blank\">dokumentasjonen</a>.",
"Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>",
- "Password" : "Passord",
+ "Username" : "Brukernavn",
"Storage & database" : "Lagring og database",
"Data folder" : "Datamappe",
"Configure the database" : "Konfigurer databasen",
@@ -181,6 +191,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktiver JavaScript</a> og last siden på nytt.",
"%s is available. Get more information on how to update." : "%s er tilgjengelig. Få mer informasjon om hvordan du kan oppdatere.",
"Log out" : "Logg ut",
+ "Search" : "Søk",
"Server side authentication failed!" : "Autentisering feilet på serveren!",
"Please contact your administrator." : "Vennligst kontakt administratoren din.",
"Forgot your password? Reset it!" : "Glemt passordet ditt? Tilbakestill det!",
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index 9ad2c468000..10f86112705 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lenken for tilbakestilling av passordet ditt er sendt til din e-postadresse. Hvis du ikke mottar den innen rimelig tid, sjekk mappen for søppelpost.<br>Hvis du ikke finner den der, kontakt din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"I know what I'm doing" : "Jeg vet hva jeg gjør",
- "Reset password" : "Tilbakestill passord",
"Password can not be changed. Please contact your administrator." : "Passordet kan ikke endres. Kontakt administratoren din.",
"No" : "Nei",
"Yes" : "Ja",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Feil ved lasting av filvelger-mal: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Feil ved lasting av meldingsmal: {error}",
+ "read-only" : "skrivebeskyttet",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
"One file conflict" : "En filkonflikt",
"New Files" : "Nye filer",
@@ -63,6 +63,7 @@
"Strong password" : "Sterkt passord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Din nettserver er ikke konfigurert korrekt for filsynkronisering. WebDAV ser ut til å ikke fungere.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Denne serveren har ikke en fungerende Internett-tilkobling. Dette betyr at noen av funksjonene, f.eks. å koble opp ekstern lagring, påminnelser om oppdatering eller installering av 3-parts apper ikke fungerer. Fjerntilgang til filer og utsending av påminnelser i e-post virker kanskje ikke heller. Vi anbefaler at Internett-forbindelsen for denne serveren aktiveres hvis du vil ha full funksjonalitet.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer. Vi anbefaler på det sterkeste at du konfigurerer web-serveren din slik at datamappen ikke lenger er tilgjengelig eller at du flytter datamappen ut av web-serverens dokument-rotmappe.",
"Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Del med bruker eller gruppe …",
"Share link" : "Del lenke",
"The public link will expire no later than {days} days after it is created" : "Den offentlige lenken vil utløpe senest {days} dager etter at den lages",
+ "Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
+ "Password" : "Passord",
"Choose a password for the public link" : "Velg et passord for den offentlige lenken",
- "Allow Public Upload" : "Tillat Offentlig Opplasting",
+ "Allow editing" : "Tillat redigering",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
"Set expiration date" : "Sett utløpsdato",
+ "Expiration" : "Utløpsdato",
"Expiration date" : "Utløpsdato",
"Adding user..." : "Legger til bruker...",
"group" : "gruppe",
+ "remote" : "ekstern",
"Resharing is not allowed" : "Videre deling er ikke tillatt",
"Shared in {item} with {user}" : "Delt i {item} med {user}",
"Unshare" : "Avslutt deling",
@@ -93,7 +98,7 @@
"can edit" : "kan endre",
"access control" : "tilgangskontroll",
"create" : "opprette",
- "update" : "oppdatere",
+ "change" : "endre",
"delete" : "slette",
"Password protected" : "Passordbeskyttet",
"Error unsetting expiration date" : "Feil ved nullstilling av utløpsdato",
@@ -108,25 +113,29 @@
"Edit tags" : "Rediger merkelapper",
"Error loading dialog template: {error}" : "Feil ved lasting av dialogmal: {error}",
"No tags selected for deletion." : "Ingen merkelapper valgt for sletting.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "ukjent tekst",
+ "Hello world!" : "Hei, Verden!",
+ "sunny" : "solfylt",
+ "Hello {name}, the weather is {weather}" : "Hallo {name}, været er {weather}",
+ "_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"],
"Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}. Dette kan ta litt tid.",
"Please reload the page." : "Vennligst last siden på nytt.",
- "The update was unsuccessful." : "Oppdateringen var vellykket.",
+ "The update was unsuccessful. " : "Oppdateringen var mislykket.",
"The update was successful. Redirecting you to ownCloud now." : "Oppdateringen var vellykket. Du omdirigeres nå til ownCloud.",
"Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.",
"Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.",
"%s password reset" : "%s tilbakestilling av passord",
"Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du burde motta detaljer om å tilbakestille passordet ditt via epost.",
- "Username" : "Brukernavn",
- "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. If you are not sure what to do, please contact your administrator before you continue. 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 passordet ditt er tilbakestilt. Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. Vil du virkelig fortsette?",
- "Yes, I really want to reset my password now" : "Ja, jeg vil virkelig tilbakestille passordet mitt nå",
- "Reset" : "Tilbakestill",
"New password" : "Nytt passord",
"New Password" : "Nytt passord",
+ "Reset password" : "Tilbakestill passord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Det virker som om denne %s-instansen kjører i et 32-bits PHP-miljø og open_basedir er konfigurert i php.ini. Dette vil gi problemer med filer over 4GB og er sterkt frarådet.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Det virker som om denne %s-instansen kjører i et 32-bits PHP-miljø og cURL er ikke installert. Dette vil gi problemer med filer over 4GB og er sterkt frarådet.",
+ "Please install the cURL extension and restart your webserver." : "Installer utvidelsen cURL og start web-serveren på nytt.",
"Personal" : "Personlig",
"Users" : "Brukere",
"Apps" : "Apper",
@@ -146,6 +155,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\nDette er en beskjed om at %s delte %s med deg.\nVis den: %s\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
+ "Internal Server Error" : "Intern serverfeil.",
"The server encountered an internal error and was unable to complete your request." : "Serveren støtte på en intern feil og kunne ikke fullføre forespørselen din.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt server-administratoren hvis denne feilen oppstår flere ganger. Vennligst ta med de tekniske detaljene nedenfor i rapporten din.",
"More details can be found in the server log." : "Flere detaljer finnes i server-loggen.",
@@ -163,7 +173,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du setter opp serveren din riktig, se <a href=\"%s\" target=\"_blank\">dokumentasjonen</a>.",
"Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>",
- "Password" : "Passord",
+ "Username" : "Brukernavn",
"Storage & database" : "Lagring og database",
"Data folder" : "Datamappe",
"Configure the database" : "Konfigurer databasen",
@@ -179,6 +189,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktiver JavaScript</a> og last siden på nytt.",
"%s is available. Get more information on how to update." : "%s er tilgjengelig. Få mer informasjon om hvordan du kan oppdatere.",
"Log out" : "Logg ut",
+ "Search" : "Søk",
"Server side authentication failed!" : "Autentisering feilet på serveren!",
"Please contact your administrator." : "Vennligst kontakt administratoren din.",
"Forgot your password? Reset it!" : "Glemt passordet ditt? Tilbakestill det!",
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 011b04fd790..a44d2f33e25 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammap. <br>Als het daar niet in zit, neem dan contact op met uw beheerder.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u de herstelsleutel niet hebt geactiveerd, is er geen mogelijk om uw gegevens terug te krijgen nadat uw wachtwoord is hersteld. <br>Als u niet weet wat u moet doen, neem dan eerst contact op met uw beheerder. <br>Wilt u echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
- "Reset password" : "Reset wachtwoord",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
"Yes" : "Ja",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Fout bij laden bestandenselecteur sjabloon: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Fout bij laden berichtensjabloon: {error}",
+ "read-only" : "Alleen lezen",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} bestandsconflict","{count} bestandsconflicten"],
"One file conflict" : "Een bestandsconflict",
"New Files" : "Nieuwe bestanden",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Sterk wachtwoord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verbroken lijkt.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datamap niet bereikbaar is vanaf het internet of om uw datamap te verplaatsen naar een locatie buiten de document root van de webserver.",
"Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie",
"Shared" : "Gedeeld",
"Shared with {recipients}" : "Gedeeld met {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Delen met gebruiker of groep ...",
"Share link" : "Deel link",
"The public link will expire no later than {days} days after it is created" : "De openbare link vervalt niet eerder dan {days} dagen na het aanmaken",
+ "Link" : "Link",
"Password protect" : "Wachtwoord beveiligd",
+ "Password" : "Wachtwoord",
"Choose a password for the public link" : "Kies een wachtwoord voor de openbare link",
- "Allow Public Upload" : "Sta publieke uploads toe",
+ "Allow editing" : "Toestaan bewerken",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
"Set expiration date" : "Stel vervaldatum in",
+ "Expiration" : "Vervaltermijn",
"Expiration date" : "Vervaldatum",
"Adding user..." : "Toevoegen gebruiker...",
"group" : "groep",
+ "remote" : "extern",
"Resharing is not allowed" : "Verder delen is niet toegestaan",
"Shared in {item} with {user}" : "Gedeeld in {item} met {user}",
"Unshare" : "Stop met delen",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "kan wijzigen",
"access control" : "toegangscontrole",
"create" : "creëer",
- "update" : "bijwerken",
+ "change" : "wijzig",
"delete" : "verwijderen",
"Password protected" : "Wachtwoord beveiligd",
"Error unsetting expiration date" : "Fout tijdens het verwijderen van de vervaldatum",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Hallo wereld!",
"sunny" : "zonnig",
"Hello {name}, the weather is {weather}" : "Hallo {name}, het is hier {weather}",
+ "Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"],
"Updating {productName} to version {version}, this may take a while." : "Bijwerken {productName} naar versie {version}, dit kan even duren.",
"Please reload the page." : "Herlaad deze pagina.",
- "The update was unsuccessful." : "De update is niet geslaagd.",
+ "The update was unsuccessful. " : "De update is niet geslaagd.",
"The update was successful. Redirecting you to ownCloud now." : "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud.",
"Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is",
"Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of uw gebruikersnaam correct is.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met uw beheerder.",
"%s password reset" : "%s wachtwoord reset",
"Use the following link to reset your password: {link}" : "Gebruik de volgende link om uw wachtwoord te resetten: {link}",
- "You will receive a link to reset your password via Email." : "U ontvangt een link om uw wachtwoord opnieuw in te stellen via e-mail.",
- "Username" : "Gebruikersnaam",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u geen recoverykey hebt ingeschakeld is er geen manier om uw data terug te krijgen na het resetten van uw wachtwoord.\nAls u niet weet wat u moet doen, neem dan alstublieft contact op met uw systeembeheerder voordat u doorgaat.\nWil u echt doorgaan?",
- "Yes, I really want to reset my password now" : "Ja, ik wil mijn wachtwoord nu echt resetten",
- "Reset" : "Reset",
"New password" : "Nieuw wachtwoord",
"New Password" : "Nieuw wachtwoord",
+ "Reset password" : "Reset wachtwoord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wordt niet ondersteund en %s zal niet goed werken op dit platform. Gebruik het op uw eigen risico!",
"For the best results, please consider using a GNU/Linux server instead." : "Voor het beste resultaat adviseren wij het gebruik van een GNU/Linux server.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat open_basedir is geconfigureerd in php.ini. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Verwijder de open_basedir instelling in php.ini of schakel om naar de 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat cURL niet is geïnstalleerd. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
+ "Please install the cURL extension and restart your webserver." : "Installeer de cURL extensie en herstart uw webserver.",
"Personal" : "Persoonlijk",
"Users" : "Gebruikers",
"Apps" : "Apps",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet omdat het .htaccess-bestand niet functioneert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van uw server.",
"Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan",
- "Password" : "Wachtwoord",
+ "Username" : "Gebruikersnaam",
"Storage & database" : "Opslag & database",
"Data folder" : "Gegevensmap",
"Configure the database" : "Configureer de database",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Deze applicatie heeft JavaScript nodig. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Activeer JavaScript</a> en herlaad deze interface.",
"%s is available. Get more information on how to update." : "%s is beschikbaar. Verkrijg meer informatie over het bijwerken.",
"Log out" : "Afmelden",
+ "Search" : "Zoeken",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
"Please contact your administrator." : "Neem contact op met uw systeembeheerder.",
"Forgot your password? Reset it!" : "Wachtwoord vergeten? Herstel het!",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index b59c04e73ff..dab276fa361 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammap. <br>Als het daar niet in zit, neem dan contact op met uw beheerder.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u de herstelsleutel niet hebt geactiveerd, is er geen mogelijk om uw gegevens terug te krijgen nadat uw wachtwoord is hersteld. <br>Als u niet weet wat u moet doen, neem dan eerst contact op met uw beheerder. <br>Wilt u echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
- "Reset password" : "Reset wachtwoord",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
"Yes" : "Ja",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Fout bij laden bestandenselecteur sjabloon: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Fout bij laden berichtensjabloon: {error}",
+ "read-only" : "Alleen lezen",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} bestandsconflict","{count} bestandsconflicten"],
"One file conflict" : "Een bestandsconflict",
"New Files" : "Nieuwe bestanden",
@@ -63,6 +63,7 @@
"Strong password" : "Sterk wachtwoord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verbroken lijkt.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. 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 emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datamap niet bereikbaar is vanaf het internet of om uw datamap te verplaatsen naar een locatie buiten de document root van de webserver.",
"Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie",
"Shared" : "Gedeeld",
"Shared with {recipients}" : "Gedeeld met {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Delen met gebruiker of groep ...",
"Share link" : "Deel link",
"The public link will expire no later than {days} days after it is created" : "De openbare link vervalt niet eerder dan {days} dagen na het aanmaken",
+ "Link" : "Link",
"Password protect" : "Wachtwoord beveiligd",
+ "Password" : "Wachtwoord",
"Choose a password for the public link" : "Kies een wachtwoord voor de openbare link",
- "Allow Public Upload" : "Sta publieke uploads toe",
+ "Allow editing" : "Toestaan bewerken",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
"Set expiration date" : "Stel vervaldatum in",
+ "Expiration" : "Vervaltermijn",
"Expiration date" : "Vervaldatum",
"Adding user..." : "Toevoegen gebruiker...",
"group" : "groep",
+ "remote" : "extern",
"Resharing is not allowed" : "Verder delen is niet toegestaan",
"Shared in {item} with {user}" : "Gedeeld in {item} met {user}",
"Unshare" : "Stop met delen",
@@ -93,7 +98,7 @@
"can edit" : "kan wijzigen",
"access control" : "toegangscontrole",
"create" : "creëer",
- "update" : "bijwerken",
+ "change" : "wijzig",
"delete" : "verwijderen",
"Password protected" : "Wachtwoord beveiligd",
"Error unsetting expiration date" : "Fout tijdens het verwijderen van de vervaldatum",
@@ -112,25 +117,26 @@
"Hello world!" : "Hallo wereld!",
"sunny" : "zonnig",
"Hello {name}, the weather is {weather}" : "Hallo {name}, het is hier {weather}",
+ "Hello {name}" : "Hallo {name}",
"_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"],
"Updating {productName} to version {version}, this may take a while." : "Bijwerken {productName} naar versie {version}, dit kan even duren.",
"Please reload the page." : "Herlaad deze pagina.",
- "The update was unsuccessful." : "De update is niet geslaagd.",
+ "The update was unsuccessful. " : "De update is niet geslaagd.",
"The update was successful. Redirecting you to ownCloud now." : "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud.",
"Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is",
"Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of uw gebruikersnaam correct is.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met uw beheerder.",
"%s password reset" : "%s wachtwoord reset",
"Use the following link to reset your password: {link}" : "Gebruik de volgende link om uw wachtwoord te resetten: {link}",
- "You will receive a link to reset your password via Email." : "U ontvangt een link om uw wachtwoord opnieuw in te stellen via e-mail.",
- "Username" : "Gebruikersnaam",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u geen recoverykey hebt ingeschakeld is er geen manier om uw data terug te krijgen na het resetten van uw wachtwoord.\nAls u niet weet wat u moet doen, neem dan alstublieft contact op met uw systeembeheerder voordat u doorgaat.\nWil u echt doorgaan?",
- "Yes, I really want to reset my password now" : "Ja, ik wil mijn wachtwoord nu echt resetten",
- "Reset" : "Reset",
"New password" : "Nieuw wachtwoord",
"New Password" : "Nieuw wachtwoord",
+ "Reset password" : "Reset wachtwoord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wordt niet ondersteund en %s zal niet goed werken op dit platform. Gebruik het op uw eigen risico!",
"For the best results, please consider using a GNU/Linux server instead." : "Voor het beste resultaat adviseren wij het gebruik van een GNU/Linux server.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat open_basedir is geconfigureerd in php.ini. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Verwijder de open_basedir instelling in php.ini of schakel om naar de 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat cURL niet is geïnstalleerd. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
+ "Please install the cURL extension and restart your webserver." : "Installeer de cURL extensie en herstart uw webserver.",
"Personal" : "Persoonlijk",
"Users" : "Gebruikers",
"Apps" : "Apps",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet omdat het .htaccess-bestand niet functioneert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van uw server.",
"Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan",
- "Password" : "Wachtwoord",
+ "Username" : "Gebruikersnaam",
"Storage & database" : "Opslag & database",
"Data folder" : "Gegevensmap",
"Configure the database" : "Configureer de database",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Deze applicatie heeft JavaScript nodig. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Activeer JavaScript</a> en herlaad deze interface.",
"%s is available. Get more information on how to update." : "%s is beschikbaar. Verkrijg meer informatie over het bijwerken.",
"Log out" : "Afmelden",
+ "Search" : "Zoeken",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
"Please contact your administrator." : "Neem contact op met uw systeembeheerder.",
"Forgot your password? Reset it!" : "Wachtwoord vergeten? Herstel het!",
diff --git a/core/l10n/nn_NO.js b/core/l10n/nn_NO.js
index d6ba6612f0e..83373ca9c17 100644
--- a/core/l10n/nn_NO.js
+++ b/core/l10n/nn_NO.js
@@ -32,7 +32,6 @@ OC.L10N.register(
"Settings" : "Innstillingar",
"Saving..." : "Lagrar …",
"I know what I'm doing" : "Eg veit kva eg gjer",
- "Reset password" : "Nullstill passord",
"No" : "Nei",
"Yes" : "Ja",
"Choose" : "Vel",
@@ -52,6 +51,7 @@ OC.L10N.register(
"Weak password" : "Svakt passord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Tenaren din er ikkje enno rett innstilt til å tilby filsynkronisering sidan WebDAV-grensesnittet ser ut til å vera øydelagt.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Denne tenaren har ikkje ei fungerande nettilkopling. Dette vil seia at visse funksjonar, som montering av ekstern lagring, meldingar om oppdateringar eller installering av tredjepartsprogram, ikkje vil fungera. Det kan òg henda at du ikkje får tilgang til filene dine utanfrå, eller ikkje får sendt varslingsepostar. Me rår deg til å skru på nettilkoplinga for denne tenaren viss du ønskjer desse funksjonane.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappa og filene dine er sannsynlegvis leselege frå nettet. Fila .htaccess fungerer ikkje. Me rår deg sterkt til å konfigurera vevtenaren din sånn at datamappa di ikkje lenger er tilgjengeleg; alternativt kan du flytta datamappa ut av dokumentrot til vevtenaren.",
"Shared" : "Delt",
"Share" : "Del",
"Error" : "Feil",
@@ -62,8 +62,8 @@ OC.L10N.register(
"Shared with you by {owner}" : "Delt med deg av {owner}",
"Share link" : "Del lenkje",
"Password protect" : "Passordvern",
+ "Password" : "Passord",
"Choose a password for the public link" : "Vel eit passord for den offentlege lenkja",
- "Allow Public Upload" : "Tillat offentleg opplasting",
"Email link to person" : "Send lenkja over e-post",
"Send" : "Send",
"Set expiration date" : "Set utløpsdato",
@@ -76,7 +76,6 @@ OC.L10N.register(
"can edit" : "kan endra",
"access control" : "tilgangskontroll",
"create" : "lag",
- "update" : "oppdater",
"delete" : "slett",
"Password protected" : "Passordverna",
"Error unsetting expiration date" : "Klarte ikkje fjerna utløpsdato",
@@ -91,11 +90,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Oppdateringa er fullført. Sender deg vidare til ownCloud no.",
"%s password reset" : "%s passordnullstilling",
"Use the following link to reset your password: {link}" : "Klikk følgjande lenkje til å nullstilla passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du vil få ein e-post med ei lenkje for å nullstilla passordet.",
- "Username" : "Brukarnamn",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Filene dine er krypterte. Viss du ikkje har skrudd på gjenopprettingsnøkkelen, finst det ingen måte å få tilbake dataa dine når passordet ditt er nullstilt. Viss du ikkje er sikker på kva du skal gjera bør du spørja administratoren din før du går vidare. Vil du verkeleg fortsetja?",
- "Yes, I really want to reset my password now" : "Ja, eg vil nullstilla passordet mitt no",
"New password" : "Nytt passord",
+ "Reset password" : "Nullstill passord",
"Personal" : "Personleg",
"Users" : "Brukarar",
"Apps" : "Program",
@@ -108,7 +104,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappa og filene dine er sannsynlegvis tilgjengelege frå Internett sidan .htaccess-fila ikkje fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Ver venleg og les <a href=\"%s\" target=\"_blank\">dokumentasjonen</a> for meir informasjon om korleis du konfigurerer tenaren din.",
"Create an <strong>admin account</strong>" : "Lag ein <strong>admin-konto</strong>",
- "Password" : "Passord",
+ "Username" : "Brukarnamn",
"Data folder" : "Datamappe",
"Configure the database" : "Set opp databasen",
"Database user" : "Databasebrukar",
@@ -119,6 +115,7 @@ OC.L10N.register(
"Finish setup" : "Fullfør oppsettet",
"%s is available. Get more information on how to update." : "%s er tilgjengeleg. Få meir informasjon om korleis du oppdaterer.",
"Log out" : "Logg ut",
+ "Search" : "Søk",
"remember" : "hugs",
"Log in" : "Logg inn",
"Alternative Logins" : "Alternative innloggingar"
diff --git a/core/l10n/nn_NO.json b/core/l10n/nn_NO.json
index 7c1bbc858f4..85cd6c13c74 100644
--- a/core/l10n/nn_NO.json
+++ b/core/l10n/nn_NO.json
@@ -30,7 +30,6 @@
"Settings" : "Innstillingar",
"Saving..." : "Lagrar …",
"I know what I'm doing" : "Eg veit kva eg gjer",
- "Reset password" : "Nullstill passord",
"No" : "Nei",
"Yes" : "Ja",
"Choose" : "Vel",
@@ -50,6 +49,7 @@
"Weak password" : "Svakt passord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Tenaren din er ikkje enno rett innstilt til å tilby filsynkronisering sidan WebDAV-grensesnittet ser ut til å vera øydelagt.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Denne tenaren har ikkje ei fungerande nettilkopling. Dette vil seia at visse funksjonar, som montering av ekstern lagring, meldingar om oppdateringar eller installering av tredjepartsprogram, ikkje vil fungera. Det kan òg henda at du ikkje får tilgang til filene dine utanfrå, eller ikkje får sendt varslingsepostar. Me rår deg til å skru på nettilkoplinga for denne tenaren viss du ønskjer desse funksjonane.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappa og filene dine er sannsynlegvis leselege frå nettet. Fila .htaccess fungerer ikkje. Me rår deg sterkt til å konfigurera vevtenaren din sånn at datamappa di ikkje lenger er tilgjengeleg; alternativt kan du flytta datamappa ut av dokumentrot til vevtenaren.",
"Shared" : "Delt",
"Share" : "Del",
"Error" : "Feil",
@@ -60,8 +60,8 @@
"Shared with you by {owner}" : "Delt med deg av {owner}",
"Share link" : "Del lenkje",
"Password protect" : "Passordvern",
+ "Password" : "Passord",
"Choose a password for the public link" : "Vel eit passord for den offentlege lenkja",
- "Allow Public Upload" : "Tillat offentleg opplasting",
"Email link to person" : "Send lenkja over e-post",
"Send" : "Send",
"Set expiration date" : "Set utløpsdato",
@@ -74,7 +74,6 @@
"can edit" : "kan endra",
"access control" : "tilgangskontroll",
"create" : "lag",
- "update" : "oppdater",
"delete" : "slett",
"Password protected" : "Passordverna",
"Error unsetting expiration date" : "Klarte ikkje fjerna utløpsdato",
@@ -89,11 +88,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Oppdateringa er fullført. Sender deg vidare til ownCloud no.",
"%s password reset" : "%s passordnullstilling",
"Use the following link to reset your password: {link}" : "Klikk følgjande lenkje til å nullstilla passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du vil få ein e-post med ei lenkje for å nullstilla passordet.",
- "Username" : "Brukarnamn",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Filene dine er krypterte. Viss du ikkje har skrudd på gjenopprettingsnøkkelen, finst det ingen måte å få tilbake dataa dine når passordet ditt er nullstilt. Viss du ikkje er sikker på kva du skal gjera bør du spørja administratoren din før du går vidare. Vil du verkeleg fortsetja?",
- "Yes, I really want to reset my password now" : "Ja, eg vil nullstilla passordet mitt no",
"New password" : "Nytt passord",
+ "Reset password" : "Nullstill passord",
"Personal" : "Personleg",
"Users" : "Brukarar",
"Apps" : "Program",
@@ -106,7 +102,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappa og filene dine er sannsynlegvis tilgjengelege frå Internett sidan .htaccess-fila ikkje fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Ver venleg og les <a href=\"%s\" target=\"_blank\">dokumentasjonen</a> for meir informasjon om korleis du konfigurerer tenaren din.",
"Create an <strong>admin account</strong>" : "Lag ein <strong>admin-konto</strong>",
- "Password" : "Passord",
+ "Username" : "Brukarnamn",
"Data folder" : "Datamappe",
"Configure the database" : "Set opp databasen",
"Database user" : "Databasebrukar",
@@ -117,6 +113,7 @@
"Finish setup" : "Fullfør oppsettet",
"%s is available. Get more information on how to update." : "%s er tilgjengeleg. Få meir informasjon om korleis du oppdaterer.",
"Log out" : "Logg ut",
+ "Search" : "Søk",
"remember" : "hugs",
"Log in" : "Logg inn",
"Alternative Logins" : "Alternative innloggingar"
diff --git a/core/l10n/oc.js b/core/l10n/oc.js
index 43fee792602..5ae7b7d09d3 100644
--- a/core/l10n/oc.js
+++ b/core/l10n/oc.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Decembre",
"Settings" : "Configuracion",
"Saving..." : "Enregistra...",
- "Reset password" : "Senhal tornat botar",
"No" : "Non",
"Yes" : "Òc",
"Choose" : "Causís",
@@ -35,6 +34,7 @@ OC.L10N.register(
"Error while unsharing" : "Error al non partejar",
"Error while changing permissions" : "Error al cambiar permissions",
"Password protect" : "Parat per senhal",
+ "Password" : "Senhal",
"Set expiration date" : "Met la data d'expiracion",
"Expiration date" : "Data d'expiracion",
"group" : "grop",
@@ -43,7 +43,6 @@ OC.L10N.register(
"can edit" : "pòt modificar",
"access control" : "Contraròtle d'acces",
"create" : "crea",
- "update" : "met a jorn",
"delete" : "escafa",
"Password protected" : "Parat per senhal",
"Error unsetting expiration date" : "Error al metre de la data d'expiracion",
@@ -52,9 +51,8 @@ OC.L10N.register(
"Add" : "Ajusta",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "Utiliza lo ligam seguent per tornar botar lo senhal : {link}",
- "You will receive a link to reset your password via Email." : "Reçaupràs un ligam per tornar botar ton senhal via corrièl.",
- "Username" : "Non d'usancièr",
"New password" : "Senhal novèl",
+ "Reset password" : "Senhal tornat botar",
"Personal" : "Personal",
"Users" : "Usancièrs",
"Apps" : "Apps",
@@ -63,7 +61,7 @@ OC.L10N.register(
"Access forbidden" : "Acces enebit",
"Security Warning" : "Avertiment de securitat",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte admin</strong>",
- "Password" : "Senhal",
+ "Username" : "Non d'usancièr",
"Data folder" : "Dorsièr de donadas",
"Configure the database" : "Configura la basa de donadas",
"Database user" : "Usancièr de la basa de donadas",
@@ -73,6 +71,7 @@ OC.L10N.register(
"Database host" : "Òste de basa de donadas",
"Finish setup" : "Configuracion acabada",
"Log out" : "Sortida",
+ "Search" : "Cèrca",
"remember" : "bremba-te",
"Log in" : "Dintrada"
},
diff --git a/core/l10n/oc.json b/core/l10n/oc.json
index c2068151419..4bb842fc590 100644
--- a/core/l10n/oc.json
+++ b/core/l10n/oc.json
@@ -20,7 +20,6 @@
"December" : "Decembre",
"Settings" : "Configuracion",
"Saving..." : "Enregistra...",
- "Reset password" : "Senhal tornat botar",
"No" : "Non",
"Yes" : "Òc",
"Choose" : "Causís",
@@ -33,6 +32,7 @@
"Error while unsharing" : "Error al non partejar",
"Error while changing permissions" : "Error al cambiar permissions",
"Password protect" : "Parat per senhal",
+ "Password" : "Senhal",
"Set expiration date" : "Met la data d'expiracion",
"Expiration date" : "Data d'expiracion",
"group" : "grop",
@@ -41,7 +41,6 @@
"can edit" : "pòt modificar",
"access control" : "Contraròtle d'acces",
"create" : "crea",
- "update" : "met a jorn",
"delete" : "escafa",
"Password protected" : "Parat per senhal",
"Error unsetting expiration date" : "Error al metre de la data d'expiracion",
@@ -50,9 +49,8 @@
"Add" : "Ajusta",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "Utiliza lo ligam seguent per tornar botar lo senhal : {link}",
- "You will receive a link to reset your password via Email." : "Reçaupràs un ligam per tornar botar ton senhal via corrièl.",
- "Username" : "Non d'usancièr",
"New password" : "Senhal novèl",
+ "Reset password" : "Senhal tornat botar",
"Personal" : "Personal",
"Users" : "Usancièrs",
"Apps" : "Apps",
@@ -61,7 +59,7 @@
"Access forbidden" : "Acces enebit",
"Security Warning" : "Avertiment de securitat",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte admin</strong>",
- "Password" : "Senhal",
+ "Username" : "Non d'usancièr",
"Data folder" : "Dorsièr de donadas",
"Configure the database" : "Configura la basa de donadas",
"Database user" : "Usancièr de la basa de donadas",
@@ -71,6 +69,7 @@
"Database host" : "Òste de basa de donadas",
"Finish setup" : "Configuracion acabada",
"Log out" : "Sortida",
+ "Search" : "Cèrca",
"remember" : "bremba-te",
"Log in" : "Dintrada"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/core/l10n/pa.js b/core/l10n/pa.js
index 63933496c0c..a9c6d72a701 100644
--- a/core/l10n/pa.js
+++ b/core/l10n/pa.js
@@ -30,12 +30,13 @@ OC.L10N.register(
"Cancel" : "ਰੱਦ ਕਰੋ",
"Share" : "ਸਾਂਝਾ ਕਰੋ",
"Error" : "ਗਲ",
+ "Password" : "ਪਾਸਵਰ",
"Send" : "ਭੇਜੋ",
"Warning" : "ਚੇਤਾਵਨੀ",
"Delete" : "ਹਟਾਓ",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
"Security Warning" : "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ",
- "Password" : "ਪਾਸਵਰ"
+ "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
+ "Search" : "ਖੋਜ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/pa.json b/core/l10n/pa.json
index 6b1259ba9cc..83726f59038 100644
--- a/core/l10n/pa.json
+++ b/core/l10n/pa.json
@@ -28,12 +28,13 @@
"Cancel" : "ਰੱਦ ਕਰੋ",
"Share" : "ਸਾਂਝਾ ਕਰੋ",
"Error" : "ਗਲ",
+ "Password" : "ਪਾਸਵਰ",
"Send" : "ਭੇਜੋ",
"Warning" : "ਚੇਤਾਵਨੀ",
"Delete" : "ਹਟਾਓ",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
"Security Warning" : "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ",
- "Password" : "ਪਾਸਵਰ"
+ "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
+ "Search" : "ਖੋਜ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 57b18d457c3..d5b9a02da02 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link do zresetowanego hasła, został wysłany na twój adres e-mail. Jeśli nie dostałeś wiadomości w rozsądnym czasie, sprawdź folder ze spamem.<br> Jeśli nie ma wiadomości w tym folderze, skontaktuj się ze swoim administratorem.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"I know what I'm doing" : "Wiem co robię",
- "Reset password" : "Zresetuj hasło",
"Password can not be changed. Please contact your administrator." : "Hasło nie może zostać zmienione. Skontaktuj się z administratorem.",
"No" : "Nie",
"Yes" : "Tak",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Błąd podczas ładowania pliku wybranego szablonu: {error}",
"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"],
"One file conflict" : "Konflikt pliku",
"New Files" : "Nowe pliki",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Mocne hasło",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Serwer internetowy nie jest jeszcze poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ten serwer OwnCloud nie ma połączenia z Internetem. Oznacza to, że niektóre z funkcji, takich jak montowanie zewnętrznych zasobów, powiadomienia o aktualizacji lub aplikacje firm 3-trzecich nie działają. Dostęp do plików z zewnątrz i wysyłanie powiadomień e-mail może również nie działać. Sugerujemy podłączenie tego serwera do internetu, jeśli chcesz mieć wszystkie funkcje.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Twój katalog danych i pliki są prawdopodobnie dostępne z Internetu. Plik .htaccess, który dostarcza ownCloud nie działa. Sugerujemy, aby skonfigurować serwer WWW w taki sposób, aby katalog danych nie był dostępny lub przenieść katalog danych poza główny katalog serwera WWW.",
"Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera",
"Shared" : "Udostępniono",
"Shared with {recipients}" : "Współdzielony z {recipients}",
@@ -78,14 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Współdziel z użytkownikiem lub grupą ...",
"Share link" : "Udostępnij link",
"The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia",
+ "Link" : "Link",
"Password protect" : "Zabezpiecz hasłem",
+ "Password" : "Hasło",
"Choose a password for the public link" : "Wybierz hasło dla linku publicznego",
- "Allow Public Upload" : "Pozwól na publiczne wczytywanie",
+ "Allow editing" : "Pozwól na edycję",
"Email link to person" : "Wyślij osobie odnośnik poprzez e-mail",
"Send" : "Wyślij",
"Set expiration date" : "Ustaw datę wygaśnięcia",
+ "Expiration" : "Wygaśnięcie",
"Expiration date" : "Data wygaśnięcia",
+ "Adding user..." : "Dodaję użytkownika...",
"group" : "grupa",
+ "remote" : "zdalny",
"Resharing is not allowed" : "Współdzielenie nie jest możliwe",
"Shared in {item} with {user}" : "Współdzielone w {item} z {user}",
"Unshare" : "Zatrzymaj współdzielenie",
@@ -94,7 +100,7 @@ OC.L10N.register(
"can edit" : "może edytować",
"access control" : "kontrola dostępu",
"create" : "utwórz",
- "update" : "uaktualnij",
+ "change" : "zmiany",
"delete" : "usuń",
"Password protected" : "Zabezpieczone hasłem",
"Error unsetting expiration date" : "Błąd podczas usuwania daty wygaśnięcia",
@@ -109,25 +115,28 @@ OC.L10N.register(
"Edit tags" : "Edytuj tagi",
"Error loading dialog template: {error}" : "Błąd podczas ładowania szablonu dialogu: {error}",
"No tags selected for deletion." : "Nie zaznaczono tagów do usunięcia.",
- "_download %n file_::_download %n files_" : ["","",""],
+ "unknown text" : "nieznany tekst",
+ "Hello world!" : "Witaj świecie!",
+ "sunny" : "słoneczna",
+ "Hello {name}, the weather is {weather}" : "Cześć {name}, dzisiejsza pogoda jest {weather}",
+ "Hello {name}" : "Cześć {name}",
+ "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików"],
"Updating {productName} to version {version}, this may take a while." : "Aktualizuję {productName} do wersji {version}, to może chwilę potrwać.",
"Please reload the page." : "Proszę przeładować stronę",
- "The update was unsuccessful." : "Aktualizacja nie powiodła się.",
+ "The update was unsuccessful. " : "Aktualizowanie zakończyło się niepowodzeniem.",
"The update was successful. Redirecting you to ownCloud now." : "Aktualizacji zakończyła się powodzeniem. Przekierowuję do ownCloud.",
"Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny",
"Couldn't send reset email. Please make sure your username is correct." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika lub adres email jest poprawny. Skontaktuj się z administratorem.",
"%s password reset" : "%s reset hasła",
"Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
- "You will receive a link to reset your password via Email." : "Odnośnik służący do resetowania hasła zostanie wysłany na adres e-mail.",
- "Username" : "Nazwa użytkownika",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Pliki są szyfrowane. Jeśli nie włączono klucza odzyskiwania, nie będzie możliwe odzyskać dane z powrotem po zresetowaniu hasła. Jeśli nie masz pewności, co zrobić, prosimy o kontakt z administratorem, przed kontynuowaniem. Czy chcesz kontynuować?",
- "Yes, I really want to reset my password now" : "Tak, naprawdę chcę zresetować hasło teraz",
- "Reset" : "Resetuj",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
+ "Reset password" : "Zresetuj hasło",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
"For the best results, please consider using a GNU/Linux server instead." : "Aby uzyskać najlepsze rezultaty, rozważ w to miejsce użycie serwera GNU/Linux.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Usuń ustawienie open_basedir z Twojego pliku php.ini lub przełącz na 64-bitowe PHP.",
+ "Please install the cURL extension and restart your webserver." : "Zainstaluj rozszerzenie cURL, a następnie zrestartuj swój serwer web.",
"Personal" : "Osobiste",
"Users" : "Użytkownicy",
"Apps" : "Aplikacje",
@@ -147,6 +156,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Witaj,\n\ntylko informuję, że %s współdzieli z Tobą %s.\nZobacz tutaj: %s\n\n",
"The share will expire on %s." : "Ten zasób wygaśnie %s",
"Cheers!" : "Pozdrawiam!",
+ "Internal Server Error" : "Internal Server Error",
"The server encountered an internal error and was unable to complete your request." : "Serwer napotkał błąd wewnętrzny i nie był w stanie ukończyć Twojego żądania.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Proszę skontaktować się z administratorem jeśli ten błąd będzie się pojawiał wielokrotnie, proszę do zgłoszenia dołączyć szczegóły techniczne opisane poniżej.",
"More details can be found in the server log." : "Więcej szczegółów można znaleźć w logu serwera.",
@@ -164,7 +174,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informacje jak poprawnie skonfigurować swój serwer, zapoznaj się z <a href=\"%s\" target=\"_blank\">dokumentacją</a>.",
"Create an <strong>admin account</strong>" : "Utwórz <strong>konta administratora</strong>",
- "Password" : "Hasło",
+ "Username" : "Nazwa użytkownika",
"Storage & database" : "Zasoby dysku & baza danych",
"Data folder" : "Katalog danych",
"Configure the database" : "Skonfiguruj bazę danych",
@@ -180,6 +190,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę <a href=\"http://enable-javascript.com/\" target=\"_blank\">włącz JavaScript</a> i przeładuj stronę.",
"%s is available. Get more information on how to update." : "%s jest dostępna. Dowiedz się więcej na temat aktualizacji.",
"Log out" : "Wyloguj",
+ "Search" : "Szukaj",
"Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!",
"Please contact your administrator." : "Skontaktuj się z administratorem",
"Forgot your password? Reset it!" : "Nie pamiętasz hasła? Zresetuj je!",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index f6c0615fc4e..c4b1bda5f0d 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link do zresetowanego hasła, został wysłany na twój adres e-mail. Jeśli nie dostałeś wiadomości w rozsądnym czasie, sprawdź folder ze spamem.<br> Jeśli nie ma wiadomości w tym folderze, skontaktuj się ze swoim administratorem.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"I know what I'm doing" : "Wiem co robię",
- "Reset password" : "Zresetuj hasło",
"Password can not be changed. Please contact your administrator." : "Hasło nie może zostać zmienione. Skontaktuj się z administratorem.",
"No" : "Nie",
"Yes" : "Tak",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Błąd podczas ładowania pliku wybranego szablonu: {error}",
"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"],
"One file conflict" : "Konflikt pliku",
"New Files" : "Nowe pliki",
@@ -63,6 +63,7 @@
"Strong password" : "Mocne hasło",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Serwer internetowy nie jest jeszcze poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ten serwer OwnCloud nie ma połączenia z Internetem. Oznacza to, że niektóre z funkcji, takich jak montowanie zewnętrznych zasobów, powiadomienia o aktualizacji lub aplikacje firm 3-trzecich nie działają. Dostęp do plików z zewnątrz i wysyłanie powiadomień e-mail może również nie działać. Sugerujemy podłączenie tego serwera do internetu, jeśli chcesz mieć wszystkie funkcje.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Twój katalog danych i pliki są prawdopodobnie dostępne z Internetu. Plik .htaccess, który dostarcza ownCloud nie działa. Sugerujemy, aby skonfigurować serwer WWW w taki sposób, aby katalog danych nie był dostępny lub przenieść katalog danych poza główny katalog serwera WWW.",
"Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera",
"Shared" : "Udostępniono",
"Shared with {recipients}" : "Współdzielony z {recipients}",
@@ -76,14 +77,19 @@
"Share with user or group …" : "Współdziel z użytkownikiem lub grupą ...",
"Share link" : "Udostępnij link",
"The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia",
+ "Link" : "Link",
"Password protect" : "Zabezpiecz hasłem",
+ "Password" : "Hasło",
"Choose a password for the public link" : "Wybierz hasło dla linku publicznego",
- "Allow Public Upload" : "Pozwól na publiczne wczytywanie",
+ "Allow editing" : "Pozwól na edycję",
"Email link to person" : "Wyślij osobie odnośnik poprzez e-mail",
"Send" : "Wyślij",
"Set expiration date" : "Ustaw datę wygaśnięcia",
+ "Expiration" : "Wygaśnięcie",
"Expiration date" : "Data wygaśnięcia",
+ "Adding user..." : "Dodaję użytkownika...",
"group" : "grupa",
+ "remote" : "zdalny",
"Resharing is not allowed" : "Współdzielenie nie jest możliwe",
"Shared in {item} with {user}" : "Współdzielone w {item} z {user}",
"Unshare" : "Zatrzymaj współdzielenie",
@@ -92,7 +98,7 @@
"can edit" : "może edytować",
"access control" : "kontrola dostępu",
"create" : "utwórz",
- "update" : "uaktualnij",
+ "change" : "zmiany",
"delete" : "usuń",
"Password protected" : "Zabezpieczone hasłem",
"Error unsetting expiration date" : "Błąd podczas usuwania daty wygaśnięcia",
@@ -107,25 +113,28 @@
"Edit tags" : "Edytuj tagi",
"Error loading dialog template: {error}" : "Błąd podczas ładowania szablonu dialogu: {error}",
"No tags selected for deletion." : "Nie zaznaczono tagów do usunięcia.",
- "_download %n file_::_download %n files_" : ["","",""],
+ "unknown text" : "nieznany tekst",
+ "Hello world!" : "Witaj świecie!",
+ "sunny" : "słoneczna",
+ "Hello {name}, the weather is {weather}" : "Cześć {name}, dzisiejsza pogoda jest {weather}",
+ "Hello {name}" : "Cześć {name}",
+ "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików"],
"Updating {productName} to version {version}, this may take a while." : "Aktualizuję {productName} do wersji {version}, to może chwilę potrwać.",
"Please reload the page." : "Proszę przeładować stronę",
- "The update was unsuccessful." : "Aktualizacja nie powiodła się.",
+ "The update was unsuccessful. " : "Aktualizowanie zakończyło się niepowodzeniem.",
"The update was successful. Redirecting you to ownCloud now." : "Aktualizacji zakończyła się powodzeniem. Przekierowuję do ownCloud.",
"Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny",
"Couldn't send reset email. Please make sure your username is correct." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika lub adres email jest poprawny. Skontaktuj się z administratorem.",
"%s password reset" : "%s reset hasła",
"Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
- "You will receive a link to reset your password via Email." : "Odnośnik służący do resetowania hasła zostanie wysłany na adres e-mail.",
- "Username" : "Nazwa użytkownika",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Pliki są szyfrowane. Jeśli nie włączono klucza odzyskiwania, nie będzie możliwe odzyskać dane z powrotem po zresetowaniu hasła. Jeśli nie masz pewności, co zrobić, prosimy o kontakt z administratorem, przed kontynuowaniem. Czy chcesz kontynuować?",
- "Yes, I really want to reset my password now" : "Tak, naprawdę chcę zresetować hasło teraz",
- "Reset" : "Resetuj",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
+ "Reset password" : "Zresetuj hasło",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
"For the best results, please consider using a GNU/Linux server instead." : "Aby uzyskać najlepsze rezultaty, rozważ w to miejsce użycie serwera GNU/Linux.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Usuń ustawienie open_basedir z Twojego pliku php.ini lub przełącz na 64-bitowe PHP.",
+ "Please install the cURL extension and restart your webserver." : "Zainstaluj rozszerzenie cURL, a następnie zrestartuj swój serwer web.",
"Personal" : "Osobiste",
"Users" : "Użytkownicy",
"Apps" : "Aplikacje",
@@ -145,6 +154,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Witaj,\n\ntylko informuję, że %s współdzieli z Tobą %s.\nZobacz tutaj: %s\n\n",
"The share will expire on %s." : "Ten zasób wygaśnie %s",
"Cheers!" : "Pozdrawiam!",
+ "Internal Server Error" : "Internal Server Error",
"The server encountered an internal error and was unable to complete your request." : "Serwer napotkał błąd wewnętrzny i nie był w stanie ukończyć Twojego żądania.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Proszę skontaktować się z administratorem jeśli ten błąd będzie się pojawiał wielokrotnie, proszę do zgłoszenia dołączyć szczegóły techniczne opisane poniżej.",
"More details can be found in the server log." : "Więcej szczegółów można znaleźć w logu serwera.",
@@ -162,7 +172,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informacje jak poprawnie skonfigurować swój serwer, zapoznaj się z <a href=\"%s\" target=\"_blank\">dokumentacją</a>.",
"Create an <strong>admin account</strong>" : "Utwórz <strong>konta administratora</strong>",
- "Password" : "Hasło",
+ "Username" : "Nazwa użytkownika",
"Storage & database" : "Zasoby dysku & baza danych",
"Data folder" : "Katalog danych",
"Configure the database" : "Skonfiguruj bazę danych",
@@ -178,6 +188,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę <a href=\"http://enable-javascript.com/\" target=\"_blank\">włącz JavaScript</a> i przeładuj stronę.",
"%s is available. Get more information on how to update." : "%s jest dostępna. Dowiedz się więcej na temat aktualizacji.",
"Log out" : "Wyloguj",
+ "Search" : "Szukaj",
"Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!",
"Please contact your administrator." : "Skontaktuj się z administratorem",
"Forgot your password? Reset it!" : "Nie pamiętasz hasła? Zresetuj je!",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 041159ce172..dc3a0bfca25 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviada para o seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo. <br> Se ele não estiver lá, pergunte ao administrador do local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida. <br/> Se você não tem certeza do que fazer, por favor, contate o administrador antes de continuar. <br/> Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
- "Reset password" : "Redefinir senha",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
"Yes" : "Sim",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Erro no seletor de carregamento modelo de arquivos: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Erro no carregamento de modelo de mensagem: {error}",
+ "read-only" : "somente-leitura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflito de arquivo","{count} conflitos de arquivos"],
"One file conflict" : "Conflito em um arquivo",
"New Files" : "Novos Arquivos",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Senha forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Seu servidor web não está configurado corretamente para permitir sincronização de arquivos porque a interface WebDAV parece não estar funcionando.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor não tem conexão com a internet. Isso significa que algumas das características como a montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de 3ºs terceiros não funcionam. Acessar arquivos remotamente e envio de e-mails de notificação também não podem funcionar. Sugerimos permitir conexão com a internet para esse servidor, se você deseja ter todas as funcionalidades.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Seu diretório de dados e seus arquivos são, provavelmente, acessíveis a partir da internet. O arquivo htaccess. não está funcionando. Nós sugerimos fortemente que você configure o seu servidor web de uma forma que o diretório de dados não esteja mais acessível ou mova o diretório de dados para fora do raiz do servidor.",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"Shared" : "Compartilhados",
"Shared with {recipients}" : "Compartilhado com {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Compartilhar com usuário ou grupo ...",
"Share link" : "Compartilhar link",
"The public link will expire no later than {days} days after it is created" : "O link público irá expirar não antes de {days} depois de ser criado",
+ "Link" : "Link",
"Password protect" : "Proteger com senha",
+ "Password" : "Senha",
"Choose a password for the public link" : "Escolha uma senha para o link público",
- "Allow Public Upload" : "Permitir Envio Público",
+ "Allow editing" : "Permitir edição",
"Email link to person" : "Enviar link por e-mail",
"Send" : "Enviar",
"Set expiration date" : "Definir data de expiração",
+ "Expiration" : "Expiração",
"Expiration date" : "Data de expiração",
"Adding user..." : "Adicionando usuário...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "Não é permitido re-compartilhar",
"Shared in {item} with {user}" : "Compartilhado em {item} com {user}",
"Unshare" : "Descompartilhar",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "pode editar",
"access control" : "controle de acesso",
"create" : "criar",
- "update" : "atualizar",
+ "change" : "mudança",
"delete" : "remover",
"Password protected" : "Protegido com senha",
"Error unsetting expiration date" : "Erro ao remover data de expiração",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Alô mundo!",
"sunny" : "ensolarado",
"Hello {name}, the weather is {weather}" : "Olá {name}, o clima está {weather}",
- "_download %n file_::_download %n files_" : ["",""],
+ "Hello {name}" : "Olá {name}",
+ "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"],
"Updating {productName} to version {version}, this may take a while." : "Atualizando {productName} para a versão {version}, isso pode demorar um pouco.",
"Please reload the page." : "Por favor recarregue a página",
- "The update was unsuccessful." : "A atualização não foi bem sucedida.",
+ "The update was unsuccessful. " : "A atualização não foi bem sucedida.",
"The update was successful. Redirecting you to ownCloud now." : "A atualização teve êxito. Você será redirecionado ao ownCloud agora.",
"Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido",
"Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar e-mail de redefinição, porque não há nenhum endereço de e-mail para este nome de usuário. Por favor, contate o administrador.",
"%s password reset" : "%s redefinir senha",
"Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
- "You will receive a link to reset your password via Email." : "Você receberá um link para redefinir sua senha por e-mail.",
- "Username" : "Nome de usuário",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Seus arquivos estão encriptados. Se você não habilitou a chave de recuperação, não haverá maneira de recuperar seus dados após criar uma nova senha. Se você não tem certeza do que fazer, por favor entre em contato com o administrador antes de continuar. Tem certeza que realmente quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, realmente quero criar uma nova senha.",
- "Reset" : "Resetar",
"New password" : "Nova senha",
"New Password" : "Nova Senha",
+ "Reset password" : "Redefinir senha",
"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ão é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o cURL não está instalado. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie seu servidor web.",
"Personal" : "Pessoal",
"Users" : "Usuários",
"Apps" : "Aplicações",
@@ -170,7 +176,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, consulte a <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>",
- "Password" : "Senha",
+ "Username" : "Nome de usuário",
"Storage & database" : "Armazenamento & banco de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configurar o banco de dados",
@@ -186,6 +192,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">habilite JavaScript</a> e recerregue a página.",
"%s is available. Get more information on how to update." : "%s está disponível. Obtenha mais informações sobre como atualizar.",
"Log out" : "Sair",
+ "Search" : "Perquisar",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
"Please contact your administrator." : "Por favor, contate o administrador.",
"Forgot your password? Reset it!" : "Esqueceu sua senha? Redefini-la!",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 05be1f4cb1c..8efed9ab5f7 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviada para o seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo. <br> Se ele não estiver lá, pergunte ao administrador do local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida. <br/> Se você não tem certeza do que fazer, por favor, contate o administrador antes de continuar. <br/> Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
- "Reset password" : "Redefinir senha",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
"Yes" : "Sim",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Erro no seletor de carregamento modelo de arquivos: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Erro no carregamento de modelo de mensagem: {error}",
+ "read-only" : "somente-leitura",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflito de arquivo","{count} conflitos de arquivos"],
"One file conflict" : "Conflito em um arquivo",
"New Files" : "Novos Arquivos",
@@ -63,6 +63,7 @@
"Strong password" : "Senha forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Seu servidor web não está configurado corretamente para permitir sincronização de arquivos porque a interface WebDAV parece não estar funcionando.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor não tem conexão com a internet. Isso significa que algumas das características como a montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de 3ºs terceiros não funcionam. Acessar arquivos remotamente e envio de e-mails de notificação também não podem funcionar. Sugerimos permitir conexão com a internet para esse servidor, se você deseja ter todas as funcionalidades.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Seu diretório de dados e seus arquivos são, provavelmente, acessíveis a partir da internet. O arquivo htaccess. não está funcionando. Nós sugerimos fortemente que você configure o seu servidor web de uma forma que o diretório de dados não esteja mais acessível ou mova o diretório de dados para fora do raiz do servidor.",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"Shared" : "Compartilhados",
"Shared with {recipients}" : "Compartilhado com {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Compartilhar com usuário ou grupo ...",
"Share link" : "Compartilhar link",
"The public link will expire no later than {days} days after it is created" : "O link público irá expirar não antes de {days} depois de ser criado",
+ "Link" : "Link",
"Password protect" : "Proteger com senha",
+ "Password" : "Senha",
"Choose a password for the public link" : "Escolha uma senha para o link público",
- "Allow Public Upload" : "Permitir Envio Público",
+ "Allow editing" : "Permitir edição",
"Email link to person" : "Enviar link por e-mail",
"Send" : "Enviar",
"Set expiration date" : "Definir data de expiração",
+ "Expiration" : "Expiração",
"Expiration date" : "Data de expiração",
"Adding user..." : "Adicionando usuário...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "Não é permitido re-compartilhar",
"Shared in {item} with {user}" : "Compartilhado em {item} com {user}",
"Unshare" : "Descompartilhar",
@@ -93,7 +98,7 @@
"can edit" : "pode editar",
"access control" : "controle de acesso",
"create" : "criar",
- "update" : "atualizar",
+ "change" : "mudança",
"delete" : "remover",
"Password protected" : "Protegido com senha",
"Error unsetting expiration date" : "Erro ao remover data de expiração",
@@ -112,25 +117,26 @@
"Hello world!" : "Alô mundo!",
"sunny" : "ensolarado",
"Hello {name}, the weather is {weather}" : "Olá {name}, o clima está {weather}",
- "_download %n file_::_download %n files_" : ["",""],
+ "Hello {name}" : "Olá {name}",
+ "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"],
"Updating {productName} to version {version}, this may take a while." : "Atualizando {productName} para a versão {version}, isso pode demorar um pouco.",
"Please reload the page." : "Por favor recarregue a página",
- "The update was unsuccessful." : "A atualização não foi bem sucedida.",
+ "The update was unsuccessful. " : "A atualização não foi bem sucedida.",
"The update was successful. Redirecting you to ownCloud now." : "A atualização teve êxito. Você será redirecionado ao ownCloud agora.",
"Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido",
"Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar e-mail de redefinição, porque não há nenhum endereço de e-mail para este nome de usuário. Por favor, contate o administrador.",
"%s password reset" : "%s redefinir senha",
"Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
- "You will receive a link to reset your password via Email." : "Você receberá um link para redefinir sua senha por e-mail.",
- "Username" : "Nome de usuário",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Seus arquivos estão encriptados. Se você não habilitou a chave de recuperação, não haverá maneira de recuperar seus dados após criar uma nova senha. Se você não tem certeza do que fazer, por favor entre em contato com o administrador antes de continuar. Tem certeza que realmente quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, realmente quero criar uma nova senha.",
- "Reset" : "Resetar",
"New password" : "Nova senha",
"New Password" : "Nova Senha",
+ "Reset password" : "Redefinir senha",
"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ão é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o cURL não está instalado. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie seu servidor web.",
"Personal" : "Pessoal",
"Users" : "Usuários",
"Apps" : "Aplicações",
@@ -168,7 +174,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, consulte a <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>",
- "Password" : "Senha",
+ "Username" : "Nome de usuário",
"Storage & database" : "Armazenamento & banco de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configurar o banco de dados",
@@ -184,6 +190,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">habilite JavaScript</a> e recerregue a página.",
"%s is available. Get more information on how to update." : "%s está disponível. Obtenha mais informações sobre como atualizar.",
"Log out" : "Sair",
+ "Search" : "Perquisar",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
"Please contact your administrator." : "Por favor, contate o administrador.",
"Forgot your password? Reset it!" : "Esqueceu sua senha? Redefini-la!",
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index bc84fc7bbd9..808905ca8a8 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -1,19 +1,19 @@
OC.L10N.register(
"core",
{
- "Couldn't send mail to following users: %s " : "Não conseguiu enviar correio aos seguintes utilizadores: %s",
- "Turned on maintenance mode" : "Activado o modo de manutenção",
- "Turned off maintenance mode" : "Desactivado o modo de manutenção",
- "Updated database" : "Base de dados actualizada",
+ "Couldn't send mail to following users: %s " : "Não foi possível enviar a mensagem para os seguintes utilizadores: %s",
+ "Turned on maintenance mode" : "Ativado o modo de manutenção",
+ "Turned off maintenance mode" : "Desativado o modo de manutenção",
+ "Updated database" : "Base de dados atualizada",
"Checked database schema update" : "Atualização do esquema da base de dados verificada.",
"Checked database schema update for apps" : "Atualização do esquema da base de dados verificada.",
- "Updated \"%s\" to %s" : "Actualizado \"%s\" para %s",
+ "Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
"Disabled incompatible apps: %s" : "Apps incompatíveis desativadas: %s",
- "No image or file provided" : "Não foi selecionado nenhum ficheiro para importar",
- "Unknown filetype" : "Ficheiro desconhecido",
+ "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem",
+ "Unknown filetype" : "Tipo de ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
- "No temporary profile picture available, try again" : "Foto temporária de perfil indisponível, tente novamente",
- "No crop data provided" : "Sem dados de corte fornecidos",
+ "No temporary profile picture available, try again" : "Fotografia temporária do perfil indisponível, tente novamente",
+ "No crop data provided" : "Não foram fornecidos dados de recorte",
"Sunday" : "Domingo",
"Monday" : "Segunda",
"Tuesday" : "Terça",
@@ -33,114 +33,118 @@ OC.L10N.register(
"October" : "Outubro",
"November" : "Novembro",
"December" : "Dezembro",
- "Settings" : "Configurações",
- "Saving..." : "A guardar...",
- "Couldn't send reset email. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contactar o administrador.",
+ "Settings" : "Definições",
+ "Saving..." : "A guardar ...",
+ "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar o e-mail de reposição. Por favor, contacte o administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para fazer reset à sua password foi enviado para o seu e-mail. <br> Se não o recebeu dentro um espaço de tempo aceitável, por favor verifique a sua pasta de SPAM.<br> Se não o encontrar, por favor contacte o seu administrador.",
"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 activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "I know what I'm doing" : "Tenho a certeza",
- "Reset password" : "Repor password",
- "Password can not be changed. Please contact your administrator." : "A password não pode ser alterada. Contacte o seu administrador.",
+ "I know what I'm doing" : "Eu sei o que eu estou a fazer",
+ "Password can not be changed. Please contact your administrator." : "A palavra-passe não pode ser alterada. Por favor, contacte o seu administrador.",
"No" : "Não",
"Yes" : "Sim",
- "Choose" : "Escolha",
- "Error loading file picker template: {error}" : "Erro ao carregar o modelo de selecionador de ficheiro: {error}",
- "Ok" : "Ok",
- "Error loading message template: {error}" : "Erro ao carregar o template: {error}",
- "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de ficheiro","{count} conflitos de ficheiro"],
+ "Choose" : "Escolher",
+ "Error loading file picker template: {error}" : "Ocorreu um erro ao carregar o modelo do selecionador de ficheiro: {error}",
+ "Ok" : "CONFIRMAR",
+ "Error loading message template: {error}" : "Ocorreu um erro ao carregar o modelo: {error}",
+ "read-only" : "só-de-leitura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflito de ficheiro","{count} conflitos de ficheiro"],
"One file conflict" : "Um conflito no ficheiro",
"New Files" : "Ficheiros Novos",
- "Already existing files" : "Ficheiro já existente",
+ "Already existing files" : "Ficheiros já existentes",
"Which files do you want to keep?" : "Quais os ficheiros que pretende manter?",
"If you select both versions, the copied file will have a number added to its name." : "Se escolher ambas as versões, o ficheiro copiado irá ter um número adicionado ao seu nome.",
"Cancel" : "Cancelar",
"Continue" : "Continuar",
- "(all selected)" : "(todos seleccionados)",
- "({count} selected)" : "({count} seleccionados)",
- "Error loading file exists template" : "Erro ao carregar o modelo de existências do ficheiro",
- "Very weak password" : "Password muito fraca",
- "Weak password" : "Password fraca",
- "So-so password" : "Password aceitável",
- "Good password" : "Password Forte",
- "Strong password" : "Password muito forte",
+ "(all selected)" : "(todos selecionados)",
+ "({count} selected)" : "({count} selecionados)",
+ "Error loading file exists template" : "Ocorreu um erro ao carregar o ficheiro do modelo existente",
+ "Very weak password" : "Palavra-passe muito fraca",
+ "Weak password" : "Palavra-passe fraca",
+ "So-so password" : "Palavra-passe aceitável",
+ "Good password" : "Palavra-passe boa",
+ "Strong password" : "Palavra-passe forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos (dropbox, gdrive, etc), notificações sobre actualizções, ou a instalação de aplicações não irá funcionar. Sugerimos que active uma ligação à internet se pretender obter todas as funcionalidades do ownCloud.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta dos dados e os seus ficheiros estão provavelmente acessíveis a partir da Internet. O ficheiro .htaccess não está a funcionar corretamente. Nós sugerimos fortemente que configure o seu servidor da Web de maneira a que a pasta dos dados deixe de ficar acessível, ou mova-a para fora da diretoria raiz dos documentos do servidor da Web.",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
"Shared" : "Partilhado",
"Shared with {recipients}" : "Partilhado com {recipients}",
- "Share" : "Partilhar",
+ "Share" : "Compartilhar",
"Error" : "Erro",
"Error while sharing" : "Erro ao partilhar",
- "Error while unsharing" : "Erro ao deixar de partilhar",
+ "Error while unsharing" : "Erro ao remover a partilha",
"Error while changing permissions" : "Erro ao mudar permissões",
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
"Shared with you by {owner}" : "Partilhado consigo por {owner}",
"Share with user or group …" : "Partilhar com utilizador ou grupo...",
- "Share link" : "Partilhar o link",
+ "Share link" : "Compartilhar hiperligação",
"The public link will expire no later than {days} days after it is created" : "O link público expira, o mais tardar {days} dias após sua criação",
- "Password protect" : "Proteger com palavra-passe",
- "Choose a password for the public link" : "Defina a palavra-passe para o link público",
- "Allow Public Upload" : "Permitir Envios Públicos",
- "Email link to person" : "Enviar o link por e-mail",
+ "Link" : "Hiperligação",
+ "Password protect" : "Proteger com Palavra-passe",
+ "Password" : "Palavra-passe",
+ "Choose a password for the public link" : "Defina a palavra-passe para a hiperligação pública",
+ "Allow editing" : "Permitir edição",
+ "Email link to person" : "Enviar a hiperligação para a pessoa",
"Send" : "Enviar",
- "Set expiration date" : "Especificar data de expiração",
+ "Set expiration date" : "Definir a data de expiração",
+ "Expiration" : "Data de expiração",
"Expiration date" : "Data de expiração",
- "Adding user..." : "A adicionar utilizador...",
+ "Adding user..." : "A adicionar o utilizador ...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "Não é permitido partilhar de novo",
"Shared in {item} with {user}" : "Partilhado em {item} com {user}",
- "Unshare" : "Deixar de partilhar",
- "notify by email" : "Notificar por email",
+ "Unshare" : "Cancelar partilha",
+ "notify by email" : "Notificar por correio eletrónico",
"can share" : "pode partilhar",
"can edit" : "pode editar",
- "access control" : "Controlo de acesso",
+ "access control" : "controlo de acesso",
"create" : "criar",
- "update" : "actualizar",
+ "change" : "alterar",
"delete" : "apagar",
- "Password protected" : "Protegido com palavra-passe",
+ "Password protected" : "Protegido com Palavra-passe",
"Error unsetting expiration date" : "Erro ao retirar a data de expiração",
"Error setting expiration date" : "Erro ao aplicar a data de expiração",
"Sending ..." : "A Enviar...",
- "Email sent" : "E-mail enviado",
+ "Email sent" : "Mensagem enviada",
"Warning" : "Aviso",
- "The object type is not specified." : "O tipo de objecto não foi especificado",
+ "The object type is not specified." : "O tipo de objeto não está especificado.",
"Enter new" : "Introduza novo",
- "Delete" : "Eliminar",
+ "Delete" : "Apagar",
"Add" : "Adicionar",
"Edit tags" : "Editar etiquetas",
- "Error loading dialog template: {error}" : "Erro ao carregar modelo de diálogo: {error}",
+ "Error loading dialog template: {error}" : "Ocorreu um erro ao carregar o modelo de janela: {error}",
"No tags selected for deletion." : "Não foram escolhidas etiquetas para apagar.",
"unknown text" : "texto desconhecido",
"Hello world!" : "Olá mundo!",
- "sunny" : "solarengo",
+ "sunny" : "soalheiro",
"Hello {name}, the weather is {weather}" : "Olá {name}, o tempo está {weather}",
- "_download %n file_::_download %n files_" : ["download %n ficheiro","download %n ficheiros"],
+ "Hello {name}" : "Olá {name}",
+ "_download %n file_::_download %n files_" : ["transferir %n ficheiro","transferir %n ficheiros"],
"Updating {productName} to version {version}, this may take a while." : "A atualizar {productName} para a versão {version}, isto poderá demorar algum tempo.",
- "Please reload the page." : "Por favor recarregue a página.",
- "The update was unsuccessful." : "Não foi possível atualizar.",
+ "Please reload the page." : "Por favor, recarregue a página.",
+ "The update was unsuccessful. " : "Não foi possível atualizar.",
"The update was successful. Redirecting you to ownCloud now." : "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.",
- "Couldn't reset password because the token is invalid" : "É impossível efetuar reset à password. ",
+ "Couldn't reset password because the token is invalid" : "Não foi possível repor a palavra-passe porque a senha é inválida",
"Couldn't send reset email. Please make sure your username is correct." : "Ocorreu um problema com o envio do e-mail, por favor confirme o seu utilizador.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contacte o administrador.",
- "%s password reset" : "%s reposição da password",
- "Use the following link to reset your password: {link}" : "Use o seguinte endereço para repor a sua password: {link}",
- "You will receive a link to reset your password via Email." : "Vai receber um endereço para repor a sua password",
- "Username" : "Nome de utilizador",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, tenho a certeza que pretendo redefinir a minha palavra-passe agora.",
- "Reset" : "Repor",
+ "%s password reset" : "%s reposição da palavra-passe",
+ "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"New password" : "Nova palavra-chave",
- "New Password" : "Nova password",
+ "New Password" : "Nova palavra-passe",
+ "Reset password" : "Repor palavra-passe",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Esta plataforma não suporta o sistema operativo Mac OS X e o %s poderá não funcionar correctamente. Utilize por sua conta e risco.",
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Por favor, remova a definição open_basedir no seu php.ini ou mude para 64bit PHP.",
+ "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie o seu servidor da Web.",
"Personal" : "Pessoal",
"Users" : "Utilizadores",
- "Apps" : "Aplicações",
- "Admin" : "Admin",
+ "Apps" : "Apps",
+ "Admin" : "Administração",
"Help" : "Ajuda",
"Error loading tags" : "Erro ao carregar etiquetas",
"Tag already exists" : "A etiqueta já existe",
- "Error deleting tag(s)" : "Erro ao apagar etiqueta(s)",
+ "Error deleting tag(s)" : "Ocorreu um erro ao apagar etiqueta(s)",
"Error tagging" : "Erro ao etiquetar",
"Error untagging" : "Erro ao desetiquetar",
"Error favoriting" : "Erro a definir como favorito",
@@ -148,9 +152,9 @@ OC.L10N.register(
"Access forbidden" : "Acesso interdito",
"File not found" : "Ficheiro não encontrado",
"The specified document has not been found on the server." : "O documento especificado não foi encontrado no servidor.",
- "You can click here to return to %s." : "Pode clicar aqui para retornar para %s.",
+ "You can click here to return to %s." : "Pode clicar aqui para voltar para %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para informar que %s partilhou »%s« consigo.\nConsulte aqui: %s\n",
- "The share will expire on %s." : "Esta partilha vai expirar em %s.",
+ "The share will expire on %s." : "Esta partilha irá expirar em %s.",
"Cheers!" : "Parabéns!",
"Internal Server Error" : "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
@@ -158,37 +162,38 @@ OC.L10N.register(
"More details can be found in the server log." : "Mais detalhes podem ser encontrados no log do servidor.",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço remoto: %s",
- "Request ID: %s" : "ID do Pedido: %s",
+ "Request ID: %s" : "Id. do Pedido: %s",
"Code: %s" : "Código: %s",
"Message: %s" : "Mensagem: %s",
"File: %s" : "Ficheiro: %s",
"Line: %s" : "Linha: %s",
- "Trace" : "Trace",
+ "Trace" : "Rasto",
"Security Warning" : "Aviso de Segurança",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "A sua versão do PHP é vulnerável ao ataque Byte Null (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Por favor atualize a sua versão PHP instalada para usar o %s com segurança.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>",
- "Password" : "Password",
+ "Username" : "Nome de utilizador",
"Storage & database" : "Armazenamento e base de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configure a base de dados",
- "Only %s is available." : "Apenas %s está disponível.",
+ "Only %s is available." : "Só está disponível %s.",
"Database user" : "Utilizador da base de dados",
- "Database password" : "Password da base de dados",
+ "Database password" : "Palavra-passe da base de dados",
"Database name" : "Nome da base de dados",
"Database tablespace" : "Tablespace da base de dados",
"Database host" : "Anfitrião da base de dados",
"SQLite will be used as database. For larger installations we recommend to change this." : "Será usado SQLite como base de dados. Para instalações maiores é recomendável a sua alteração.",
- "Finish setup" : "Acabar instalação",
+ "Finish setup" : "Terminar consiguração",
"Finishing …" : "A terminar...",
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Esta aplicação requer JavaScript para functionar correctamente. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">active o JavaScript</a> e recarregue a página.",
"%s is available. Get more information on how to update." : "%s está disponível. Tenha mais informações como actualizar.",
- "Log out" : "Sair",
+ "Log out" : "Terminar sessão",
+ "Search" : "Procurar",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor contacte o administrador.",
- "Forgot your password? Reset it!" : "Esqueceu-se da password? Recupere-a!",
+ "Forgot your password? Reset it!" : "Esqueceu-se da sua palavra-passe? Recupere-a!",
"remember" : "lembrar",
"Log in" : "Entrar",
"Alternative Logins" : "Contas de acesso alternativas",
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index f61e3c076d0..c47273faccf 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -1,17 +1,17 @@
{ "translations": {
- "Couldn't send mail to following users: %s " : "Não conseguiu enviar correio aos seguintes utilizadores: %s",
- "Turned on maintenance mode" : "Activado o modo de manutenção",
- "Turned off maintenance mode" : "Desactivado o modo de manutenção",
- "Updated database" : "Base de dados actualizada",
+ "Couldn't send mail to following users: %s " : "Não foi possível enviar a mensagem para os seguintes utilizadores: %s",
+ "Turned on maintenance mode" : "Ativado o modo de manutenção",
+ "Turned off maintenance mode" : "Desativado o modo de manutenção",
+ "Updated database" : "Base de dados atualizada",
"Checked database schema update" : "Atualização do esquema da base de dados verificada.",
"Checked database schema update for apps" : "Atualização do esquema da base de dados verificada.",
- "Updated \"%s\" to %s" : "Actualizado \"%s\" para %s",
+ "Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
"Disabled incompatible apps: %s" : "Apps incompatíveis desativadas: %s",
- "No image or file provided" : "Não foi selecionado nenhum ficheiro para importar",
- "Unknown filetype" : "Ficheiro desconhecido",
+ "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem",
+ "Unknown filetype" : "Tipo de ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
- "No temporary profile picture available, try again" : "Foto temporária de perfil indisponível, tente novamente",
- "No crop data provided" : "Sem dados de corte fornecidos",
+ "No temporary profile picture available, try again" : "Fotografia temporária do perfil indisponível, tente novamente",
+ "No crop data provided" : "Não foram fornecidos dados de recorte",
"Sunday" : "Domingo",
"Monday" : "Segunda",
"Tuesday" : "Terça",
@@ -31,114 +31,118 @@
"October" : "Outubro",
"November" : "Novembro",
"December" : "Dezembro",
- "Settings" : "Configurações",
- "Saving..." : "A guardar...",
- "Couldn't send reset email. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contactar o administrador.",
+ "Settings" : "Definições",
+ "Saving..." : "A guardar ...",
+ "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar o e-mail de reposição. Por favor, contacte o administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para fazer reset à sua password foi enviado para o seu e-mail. <br> Se não o recebeu dentro um espaço de tempo aceitável, por favor verifique a sua pasta de SPAM.<br> Se não o encontrar, por favor contacte o seu administrador.",
"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 activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "I know what I'm doing" : "Tenho a certeza",
- "Reset password" : "Repor password",
- "Password can not be changed. Please contact your administrator." : "A password não pode ser alterada. Contacte o seu administrador.",
+ "I know what I'm doing" : "Eu sei o que eu estou a fazer",
+ "Password can not be changed. Please contact your administrator." : "A palavra-passe não pode ser alterada. Por favor, contacte o seu administrador.",
"No" : "Não",
"Yes" : "Sim",
- "Choose" : "Escolha",
- "Error loading file picker template: {error}" : "Erro ao carregar o modelo de selecionador de ficheiro: {error}",
- "Ok" : "Ok",
- "Error loading message template: {error}" : "Erro ao carregar o template: {error}",
- "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de ficheiro","{count} conflitos de ficheiro"],
+ "Choose" : "Escolher",
+ "Error loading file picker template: {error}" : "Ocorreu um erro ao carregar o modelo do selecionador de ficheiro: {error}",
+ "Ok" : "CONFIRMAR",
+ "Error loading message template: {error}" : "Ocorreu um erro ao carregar o modelo: {error}",
+ "read-only" : "só-de-leitura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflito de ficheiro","{count} conflitos de ficheiro"],
"One file conflict" : "Um conflito no ficheiro",
"New Files" : "Ficheiros Novos",
- "Already existing files" : "Ficheiro já existente",
+ "Already existing files" : "Ficheiros já existentes",
"Which files do you want to keep?" : "Quais os ficheiros que pretende manter?",
"If you select both versions, the copied file will have a number added to its name." : "Se escolher ambas as versões, o ficheiro copiado irá ter um número adicionado ao seu nome.",
"Cancel" : "Cancelar",
"Continue" : "Continuar",
- "(all selected)" : "(todos seleccionados)",
- "({count} selected)" : "({count} seleccionados)",
- "Error loading file exists template" : "Erro ao carregar o modelo de existências do ficheiro",
- "Very weak password" : "Password muito fraca",
- "Weak password" : "Password fraca",
- "So-so password" : "Password aceitável",
- "Good password" : "Password Forte",
- "Strong password" : "Password muito forte",
+ "(all selected)" : "(todos selecionados)",
+ "({count} selected)" : "({count} selecionados)",
+ "Error loading file exists template" : "Ocorreu um erro ao carregar o ficheiro do modelo existente",
+ "Very weak password" : "Palavra-passe muito fraca",
+ "Weak password" : "Palavra-passe fraca",
+ "So-so password" : "Palavra-passe aceitável",
+ "Good password" : "Palavra-passe boa",
+ "Strong password" : "Palavra-passe forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos (dropbox, gdrive, etc), notificações sobre actualizções, ou a instalação de aplicações não irá funcionar. Sugerimos que active uma ligação à internet se pretender obter todas as funcionalidades do ownCloud.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta dos dados e os seus ficheiros estão provavelmente acessíveis a partir da Internet. O ficheiro .htaccess não está a funcionar corretamente. Nós sugerimos fortemente que configure o seu servidor da Web de maneira a que a pasta dos dados deixe de ficar acessível, ou mova-a para fora da diretoria raiz dos documentos do servidor da Web.",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
"Shared" : "Partilhado",
"Shared with {recipients}" : "Partilhado com {recipients}",
- "Share" : "Partilhar",
+ "Share" : "Compartilhar",
"Error" : "Erro",
"Error while sharing" : "Erro ao partilhar",
- "Error while unsharing" : "Erro ao deixar de partilhar",
+ "Error while unsharing" : "Erro ao remover a partilha",
"Error while changing permissions" : "Erro ao mudar permissões",
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
"Shared with you by {owner}" : "Partilhado consigo por {owner}",
"Share with user or group …" : "Partilhar com utilizador ou grupo...",
- "Share link" : "Partilhar o link",
+ "Share link" : "Compartilhar hiperligação",
"The public link will expire no later than {days} days after it is created" : "O link público expira, o mais tardar {days} dias após sua criação",
- "Password protect" : "Proteger com palavra-passe",
- "Choose a password for the public link" : "Defina a palavra-passe para o link público",
- "Allow Public Upload" : "Permitir Envios Públicos",
- "Email link to person" : "Enviar o link por e-mail",
+ "Link" : "Hiperligação",
+ "Password protect" : "Proteger com Palavra-passe",
+ "Password" : "Palavra-passe",
+ "Choose a password for the public link" : "Defina a palavra-passe para a hiperligação pública",
+ "Allow editing" : "Permitir edição",
+ "Email link to person" : "Enviar a hiperligação para a pessoa",
"Send" : "Enviar",
- "Set expiration date" : "Especificar data de expiração",
+ "Set expiration date" : "Definir a data de expiração",
+ "Expiration" : "Data de expiração",
"Expiration date" : "Data de expiração",
- "Adding user..." : "A adicionar utilizador...",
+ "Adding user..." : "A adicionar o utilizador ...",
"group" : "grupo",
+ "remote" : "remoto",
"Resharing is not allowed" : "Não é permitido partilhar de novo",
"Shared in {item} with {user}" : "Partilhado em {item} com {user}",
- "Unshare" : "Deixar de partilhar",
- "notify by email" : "Notificar por email",
+ "Unshare" : "Cancelar partilha",
+ "notify by email" : "Notificar por correio eletrónico",
"can share" : "pode partilhar",
"can edit" : "pode editar",
- "access control" : "Controlo de acesso",
+ "access control" : "controlo de acesso",
"create" : "criar",
- "update" : "actualizar",
+ "change" : "alterar",
"delete" : "apagar",
- "Password protected" : "Protegido com palavra-passe",
+ "Password protected" : "Protegido com Palavra-passe",
"Error unsetting expiration date" : "Erro ao retirar a data de expiração",
"Error setting expiration date" : "Erro ao aplicar a data de expiração",
"Sending ..." : "A Enviar...",
- "Email sent" : "E-mail enviado",
+ "Email sent" : "Mensagem enviada",
"Warning" : "Aviso",
- "The object type is not specified." : "O tipo de objecto não foi especificado",
+ "The object type is not specified." : "O tipo de objeto não está especificado.",
"Enter new" : "Introduza novo",
- "Delete" : "Eliminar",
+ "Delete" : "Apagar",
"Add" : "Adicionar",
"Edit tags" : "Editar etiquetas",
- "Error loading dialog template: {error}" : "Erro ao carregar modelo de diálogo: {error}",
+ "Error loading dialog template: {error}" : "Ocorreu um erro ao carregar o modelo de janela: {error}",
"No tags selected for deletion." : "Não foram escolhidas etiquetas para apagar.",
"unknown text" : "texto desconhecido",
"Hello world!" : "Olá mundo!",
- "sunny" : "solarengo",
+ "sunny" : "soalheiro",
"Hello {name}, the weather is {weather}" : "Olá {name}, o tempo está {weather}",
- "_download %n file_::_download %n files_" : ["download %n ficheiro","download %n ficheiros"],
+ "Hello {name}" : "Olá {name}",
+ "_download %n file_::_download %n files_" : ["transferir %n ficheiro","transferir %n ficheiros"],
"Updating {productName} to version {version}, this may take a while." : "A atualizar {productName} para a versão {version}, isto poderá demorar algum tempo.",
- "Please reload the page." : "Por favor recarregue a página.",
- "The update was unsuccessful." : "Não foi possível atualizar.",
+ "Please reload the page." : "Por favor, recarregue a página.",
+ "The update was unsuccessful. " : "Não foi possível atualizar.",
"The update was successful. Redirecting you to ownCloud now." : "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.",
- "Couldn't reset password because the token is invalid" : "É impossível efetuar reset à password. ",
+ "Couldn't reset password because the token is invalid" : "Não foi possível repor a palavra-passe porque a senha é inválida",
"Couldn't send reset email. Please make sure your username is correct." : "Ocorreu um problema com o envio do e-mail, por favor confirme o seu utilizador.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contacte o administrador.",
- "%s password reset" : "%s reposição da password",
- "Use the following link to reset your password: {link}" : "Use o seguinte endereço para repor a sua password: {link}",
- "You will receive a link to reset your password via Email." : "Vai receber um endereço para repor a sua password",
- "Username" : "Nome de utilizador",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, tenho a certeza que pretendo redefinir a minha palavra-passe agora.",
- "Reset" : "Repor",
+ "%s password reset" : "%s reposição da palavra-passe",
+ "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"New password" : "Nova palavra-chave",
- "New Password" : "Nova password",
+ "New Password" : "Nova palavra-passe",
+ "Reset password" : "Repor palavra-passe",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Esta plataforma não suporta o sistema operativo Mac OS X e o %s poderá não funcionar correctamente. Utilize por sua conta e risco.",
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Por favor, remova a definição open_basedir no seu php.ini ou mude para 64bit PHP.",
+ "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie o seu servidor da Web.",
"Personal" : "Pessoal",
"Users" : "Utilizadores",
- "Apps" : "Aplicações",
- "Admin" : "Admin",
+ "Apps" : "Apps",
+ "Admin" : "Administração",
"Help" : "Ajuda",
"Error loading tags" : "Erro ao carregar etiquetas",
"Tag already exists" : "A etiqueta já existe",
- "Error deleting tag(s)" : "Erro ao apagar etiqueta(s)",
+ "Error deleting tag(s)" : "Ocorreu um erro ao apagar etiqueta(s)",
"Error tagging" : "Erro ao etiquetar",
"Error untagging" : "Erro ao desetiquetar",
"Error favoriting" : "Erro a definir como favorito",
@@ -146,9 +150,9 @@
"Access forbidden" : "Acesso interdito",
"File not found" : "Ficheiro não encontrado",
"The specified document has not been found on the server." : "O documento especificado não foi encontrado no servidor.",
- "You can click here to return to %s." : "Pode clicar aqui para retornar para %s.",
+ "You can click here to return to %s." : "Pode clicar aqui para voltar para %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para informar que %s partilhou »%s« consigo.\nConsulte aqui: %s\n",
- "The share will expire on %s." : "Esta partilha vai expirar em %s.",
+ "The share will expire on %s." : "Esta partilha irá expirar em %s.",
"Cheers!" : "Parabéns!",
"Internal Server Error" : "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
@@ -156,37 +160,38 @@
"More details can be found in the server log." : "Mais detalhes podem ser encontrados no log do servidor.",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço remoto: %s",
- "Request ID: %s" : "ID do Pedido: %s",
+ "Request ID: %s" : "Id. do Pedido: %s",
"Code: %s" : "Código: %s",
"Message: %s" : "Mensagem: %s",
"File: %s" : "Ficheiro: %s",
"Line: %s" : "Linha: %s",
- "Trace" : "Trace",
+ "Trace" : "Rasto",
"Security Warning" : "Aviso de Segurança",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "A sua versão do PHP é vulnerável ao ataque Byte Null (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Por favor atualize a sua versão PHP instalada para usar o %s com segurança.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>",
- "Password" : "Password",
+ "Username" : "Nome de utilizador",
"Storage & database" : "Armazenamento e base de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configure a base de dados",
- "Only %s is available." : "Apenas %s está disponível.",
+ "Only %s is available." : "Só está disponível %s.",
"Database user" : "Utilizador da base de dados",
- "Database password" : "Password da base de dados",
+ "Database password" : "Palavra-passe da base de dados",
"Database name" : "Nome da base de dados",
"Database tablespace" : "Tablespace da base de dados",
"Database host" : "Anfitrião da base de dados",
"SQLite will be used as database. For larger installations we recommend to change this." : "Será usado SQLite como base de dados. Para instalações maiores é recomendável a sua alteração.",
- "Finish setup" : "Acabar instalação",
+ "Finish setup" : "Terminar consiguração",
"Finishing …" : "A terminar...",
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Esta aplicação requer JavaScript para functionar correctamente. Por favor <a href=\"http://enable-javascript.com/\" target=\"_blank\">active o JavaScript</a> e recarregue a página.",
"%s is available. Get more information on how to update." : "%s está disponível. Tenha mais informações como actualizar.",
- "Log out" : "Sair",
+ "Log out" : "Terminar sessão",
+ "Search" : "Procurar",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor contacte o administrador.",
- "Forgot your password? Reset it!" : "Esqueceu-se da password? Recupere-a!",
+ "Forgot your password? Reset it!" : "Esqueceu-se da sua palavra-passe? Recupere-a!",
"remember" : "lembrar",
"Log in" : "Entrar",
"Alternative Logins" : "Contas de acesso alternativas",
diff --git a/core/l10n/ro.js b/core/l10n/ro.js
index 8c48c440460..652f68e8470 100644
--- a/core/l10n/ro.js
+++ b/core/l10n/ro.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"Settings" : "Setări",
"Saving..." : "Se salvează...",
"I know what I'm doing" : "Eu știu ce fac",
- "Reset password" : "Resetează parola",
"Password can not be changed. Please contact your administrator." : "Parola nu poate fi modificata. Vă rugăm să contactați administratorul dvs.",
"No" : "Nu",
"Yes" : "Da",
@@ -60,11 +59,13 @@ OC.L10N.register(
"Error while changing permissions" : "Eroare la modificarea permisiunilor",
"Shared with you and the group {group} by {owner}" : "Distribuie cu tine si grupul {group} de {owner}",
"Shared with you by {owner}" : "Distribuie cu tine de {owner}",
+ "Share link" : "Share link",
"Password protect" : "Protejare cu parolă",
- "Allow Public Upload" : "Permiteţi încărcarea publică.",
+ "Password" : "Parolă",
"Email link to person" : "Expediază legătura prin poșta electronică",
"Send" : "Expediază",
"Set expiration date" : "Specifică data expirării",
+ "Expiration" : "Expira",
"Expiration date" : "Data expirării",
"group" : "grup",
"Resharing is not allowed" : "Repartajarea nu este permisă",
@@ -75,7 +76,6 @@ OC.L10N.register(
"can edit" : "poate edita",
"access control" : "control acces",
"create" : "creare",
- "update" : "actualizare",
"delete" : "ștergere",
"Password protected" : "Protejare cu parolă",
"Error unsetting expiration date" : "Eroare la anularea datei de expirare",
@@ -90,17 +90,12 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["","",""],
"Updating {productName} to version {version}, this may take a while." : "Se actualizează {productName} la versiunea {version}, poate dura câteva momente.",
"Please reload the page." : "Te rugăm să reîncarci pagina.",
- "The update was unsuccessful." : "Actualizare eșuată.",
"The update was successful. Redirecting you to ownCloud now." : "Actualizare reușită. Ești redirecționat către ownCloud.",
"%s password reset" : "%s resetare parola",
"Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
- "You will receive a link to reset your password via Email." : "Vei primi un mesaj prin care vei putea reseta parola via email.",
- "Username" : "Nume utilizator",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Fișierele tale sunt criptate. Dacă nu ai activat o cheie de recuperare, nu va mai exista nici o metodă prin care să îți recuperezi datele după resetarea parole. Dacă nu ești sigur în privința la ce ai de făcut, contactează un administrator înainte să continuii. Chiar vrei să continui?",
- "Yes, I really want to reset my password now" : "Da, eu chiar doresc să îmi resetez parola acum",
- "Reset" : "Resetare",
"New password" : "Noua parolă",
"New Password" : "Noua parolă",
+ "Reset password" : "Resetează parola",
"Personal" : "Personal",
"Users" : "Utilizatori",
"Apps" : "Aplicații",
@@ -114,7 +109,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Directorul tău de date și fișiere sunt probabil accesibile de pe Internet, deoarece fișierul .htaccess nu funcționează.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pentru informații despre cum să configurezi serverul, vezi <a href=\"%s\" target=\"_blank\">documentația</a>.",
"Create an <strong>admin account</strong>" : "Crează un <strong>cont de administrator</strong>",
- "Password" : "Parolă",
+ "Username" : "Nume utilizator",
"Storage & database" : "Stocare și baza de date",
"Data folder" : "Director date",
"Configure the database" : "Configurează baza de date",
@@ -126,6 +121,7 @@ OC.L10N.register(
"Finish setup" : "Finalizează instalarea",
"%s is available. Get more information on how to update." : "%s este disponibil. Vezi mai multe informații despre procesul de actualizare.",
"Log out" : "Ieșire",
+ "Search" : "Căutare",
"Forgot your password? Reset it!" : "Ți-ai uitat parola? Resetează!",
"remember" : "amintește",
"Log in" : "Autentificare",
diff --git a/core/l10n/ro.json b/core/l10n/ro.json
index 137a0bc7a52..604351ad263 100644
--- a/core/l10n/ro.json
+++ b/core/l10n/ro.json
@@ -29,7 +29,6 @@
"Settings" : "Setări",
"Saving..." : "Se salvează...",
"I know what I'm doing" : "Eu știu ce fac",
- "Reset password" : "Resetează parola",
"Password can not be changed. Please contact your administrator." : "Parola nu poate fi modificata. Vă rugăm să contactați administratorul dvs.",
"No" : "Nu",
"Yes" : "Da",
@@ -58,11 +57,13 @@
"Error while changing permissions" : "Eroare la modificarea permisiunilor",
"Shared with you and the group {group} by {owner}" : "Distribuie cu tine si grupul {group} de {owner}",
"Shared with you by {owner}" : "Distribuie cu tine de {owner}",
+ "Share link" : "Share link",
"Password protect" : "Protejare cu parolă",
- "Allow Public Upload" : "Permiteţi încărcarea publică.",
+ "Password" : "Parolă",
"Email link to person" : "Expediază legătura prin poșta electronică",
"Send" : "Expediază",
"Set expiration date" : "Specifică data expirării",
+ "Expiration" : "Expira",
"Expiration date" : "Data expirării",
"group" : "grup",
"Resharing is not allowed" : "Repartajarea nu este permisă",
@@ -73,7 +74,6 @@
"can edit" : "poate edita",
"access control" : "control acces",
"create" : "creare",
- "update" : "actualizare",
"delete" : "ștergere",
"Password protected" : "Protejare cu parolă",
"Error unsetting expiration date" : "Eroare la anularea datei de expirare",
@@ -88,17 +88,12 @@
"_download %n file_::_download %n files_" : ["","",""],
"Updating {productName} to version {version}, this may take a while." : "Se actualizează {productName} la versiunea {version}, poate dura câteva momente.",
"Please reload the page." : "Te rugăm să reîncarci pagina.",
- "The update was unsuccessful." : "Actualizare eșuată.",
"The update was successful. Redirecting you to ownCloud now." : "Actualizare reușită. Ești redirecționat către ownCloud.",
"%s password reset" : "%s resetare parola",
"Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
- "You will receive a link to reset your password via Email." : "Vei primi un mesaj prin care vei putea reseta parola via email.",
- "Username" : "Nume utilizator",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Fișierele tale sunt criptate. Dacă nu ai activat o cheie de recuperare, nu va mai exista nici o metodă prin care să îți recuperezi datele după resetarea parole. Dacă nu ești sigur în privința la ce ai de făcut, contactează un administrator înainte să continuii. Chiar vrei să continui?",
- "Yes, I really want to reset my password now" : "Da, eu chiar doresc să îmi resetez parola acum",
- "Reset" : "Resetare",
"New password" : "Noua parolă",
"New Password" : "Noua parolă",
+ "Reset password" : "Resetează parola",
"Personal" : "Personal",
"Users" : "Utilizatori",
"Apps" : "Aplicații",
@@ -112,7 +107,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Directorul tău de date și fișiere sunt probabil accesibile de pe Internet, deoarece fișierul .htaccess nu funcționează.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pentru informații despre cum să configurezi serverul, vezi <a href=\"%s\" target=\"_blank\">documentația</a>.",
"Create an <strong>admin account</strong>" : "Crează un <strong>cont de administrator</strong>",
- "Password" : "Parolă",
+ "Username" : "Nume utilizator",
"Storage & database" : "Stocare și baza de date",
"Data folder" : "Director date",
"Configure the database" : "Configurează baza de date",
@@ -124,6 +119,7 @@
"Finish setup" : "Finalizează instalarea",
"%s is available. Get more information on how to update." : "%s este disponibil. Vezi mai multe informații despre procesul de actualizare.",
"Log out" : "Ieșire",
+ "Search" : "Căutare",
"Forgot your password? Reset it!" : "Ți-ai uitat parola? Resetează!",
"remember" : "amintește",
"Log in" : "Autentificare",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 066be34d07a..9e27ffe0fff 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -6,9 +6,9 @@ OC.L10N.register(
"Turned off maintenance mode" : "Режим отладки отключён",
"Updated database" : "База данных обновлена",
"Checked database schema update" : "Проверено обновление схемы БД",
- "Checked database schema update for apps" : "Проверено обновление схемы БД для приложений",
+ "Checked database schema update for apps" : "Проверено обновление схемы БД приложений",
"Updated \"%s\" to %s" : "Обновлено \"%s\" до %s",
- "Disabled incompatible apps: %s" : "Отключенные несовместимые приложения: %s",
+ "Disabled incompatible apps: %s" : "Отключены несовместимые приложения: %s",
"No image or file provided" : "Не указано изображение или файл",
"Unknown filetype" : "Неизвестный тип файла",
"Invalid image" : "Некорректное изображение",
@@ -36,10 +36,9 @@ OC.L10N.register(
"Settings" : "Настройки",
"Saving..." : "Сохранение...",
"Couldn't send reset email. Please contact your administrator." : "Не удалось отправить письмо для сброса пароля. Пожалуйста, свяжитесь с вашим администратором.",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ссылка для восстановления пароля была отправлена на вашу почту. Если вы не получили её, проверьте папку спама.<br>Если там письма со ссылкой нет, то обратитесь к локальному администратору.",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к локальному администратору.<br />Вытдействительно хотите продолжить?",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ссылка восстановления пароля отправлена на ваш email. Если вы не получили письмо в течении продолжительного промежутка времени, проверьте папку спама.<br>Если письмо с ссылкой восстановления пароля папке спама не обнаружено, обратитесь к вашему администратору.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?",
"I know what I'm doing" : "Я понимаю, что делаю",
- "Reset password" : "Сбросить пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не может быть изменён. Пожалуйста, свяжитесь с вашим администратором.",
"No" : "Нет",
"Yes" : "Да",
@@ -47,15 +46,16 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Ошибка при загрузке шаблона выбора файлов: {error}",
"Ok" : "Ок",
"Error loading message template: {error}" : "Ошибка загрузки шаблона сообщений: {error}",
+ "read-only" : "только для чтения",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах"],
"One file conflict" : "Один конфликт в файлах",
"New Files" : "Новые файлы",
"Already existing files" : "Существующие файлы",
"Which files do you want to keep?" : "Какие файлы вы хотите сохранить?",
- "If you select both versions, the copied file will have a number added to its name." : "При выборе обоих версий, к названию копируемого файла будет добавлена цифра",
- "Cancel" : "Отменить",
+ "If you select both versions, the copied file will have a number added to its name." : "При выборе обеих версий, к названию копируемого файла будет добавлена цифра",
+ "Cancel" : "Отмена",
"Continue" : "Продолжить",
- "(all selected)" : "(выбраны все)",
+ "(all selected)" : "(все)",
"({count} selected)" : "({count} выбрано)",
"Error loading file exists template" : "Ошибка при загрузке шаблона существующего файла",
"Very weak password" : "Очень слабый пароль",
@@ -64,38 +64,43 @@ OC.L10N.register(
"Good password" : "Хороший пароль",
"Strong password" : "Устойчивый к взлому пароль",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Веб-сервер до сих пор не настроен для возможности синхронизации файлов. Похоже что проблема в неисправности интерфейса WebDAV.",
- "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к сети интернет. Это значит, что некоторые возможности, такие как подключение внешних дисков, уведомления об обновлениях или установка сторонних приложений – не работают. Удалённый доступ к файлам и отправка уведомлений по электронной почте вероятнее всего тоже не будут работать. Предлагаем включить соединение с интернетом для этого сервера, если Вы хотите иметь все возможности.",
- "Error occurred while checking server setup" : "Произошла ошибка при проверке настройки сервера",
- "Shared" : "Общие",
- "Shared with {recipients}" : "Доступ открыт {recipients}",
- "Share" : "Открыть доступ",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Данный сервер не имеет подключения к сети интернет. Это значит, что некоторые возможности, такие как подключение удаленных дисков, уведомления об обновлениях или установка сторонних приложений – не работают. Удалённый доступ к файлам и отправка уведомлений по электронной почте вероятнее всего тоже не будут работать. Предлагаем включить соединение с интернетом для этого сервера, если вы хотите использовать все возможности.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Похоже, что каталог с данными и файлы доступны из интернета. Файл .htaccess не работает. Крайне рекомендуется сконфигурировать вебсервер таким образом, чтобы каталог с данными более не был доступен, или переместите каталог с данными в другое место, за пределами каталога документов веб-сервера.",
+ "Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера",
+ "Shared" : "Общий доступ",
+ "Shared with {recipients}" : "Вы поделились с {recipients}",
+ "Share" : "Поделиться",
"Error" : "Ошибка",
- "Error while sharing" : "Ошибка при открытии доступа",
- "Error while unsharing" : "Ошибка при закрытии доступа",
- "Error while changing permissions" : "Ошибка при смене разрешений",
- "Shared with you and the group {group} by {owner}" : "{owner} открыл доступ для Вас и группы {group} ",
- "Shared with you by {owner}" : "{owner} открыл доступ для Вас",
+ "Error while sharing" : "При попытке поделиться произошла ошибка",
+ "Error while unsharing" : "При закрытии доступа произошла ошибка",
+ "Error while changing permissions" : "При изменении прав доступа произошла ошибка",
+ "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ",
+ "Shared with you by {owner}" : "С вами поделился {owner} ",
"Share with user or group …" : "Поделиться с пользователем или группой...",
"Share link" : "Поделиться ссылкой",
- "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней, после её создания",
+ "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней после её создания",
+ "Link" : "Ссылка",
"Password protect" : "Защитить паролем",
- "Choose a password for the public link" : "Выберите пароль для публичной ссылки",
- "Allow Public Upload" : "Разрешить загрузку",
- "Email link to person" : "Почтовая ссылка на персону",
+ "Password" : "Пароль",
+ "Choose a password for the public link" : "Укажите пароль для публичной ссылки",
+ "Allow editing" : "Разрешить редактирование",
+ "Email link to person" : "Отправить ссылку по электронной почте",
"Send" : "Отправить",
"Set expiration date" : "Установить срок доступа",
+ "Expiration" : "Срок действия",
"Expiration date" : "Дата окончания",
"Adding user..." : "Добавляем пользователя...",
"group" : "группа",
- "Resharing is not allowed" : "Общий доступ не разрешен",
- "Shared in {item} with {user}" : "Общий доступ к {item} с {user}",
- "Unshare" : "Закрыть общий доступ",
+ "remote" : "удаленный",
+ "Resharing is not allowed" : "Повторное открытие доступа запрещено",
+ "Shared in {item} with {user}" : "Общий доступ в {item} для {user}",
+ "Unshare" : "Закрыть доступ",
"notify by email" : "уведомить по почте",
- "can share" : "можно дать доступ",
+ "can share" : "может делиться с другими",
"can edit" : "может редактировать",
"access control" : "контроль доступа",
"create" : "создать",
- "update" : "обновить",
+ "change" : "изменить",
"delete" : "удалить",
"Password protected" : "Защищено паролем",
"Error unsetting expiration date" : "Ошибка при отмене срока доступа",
@@ -114,25 +119,26 @@ OC.L10N.register(
"Hello world!" : "Привет мир!",
"sunny" : "солнечно",
"Hello {name}, the weather is {weather}" : "Здравствуйте {name}, погода {weather}",
- "_download %n file_::_download %n files_" : ["","",""],
- "Updating {productName} to version {version}, this may take a while." : "Обновление {productName} до версии {version}, пожалуйста, подождите.",
- "Please reload the page." : "Пожалуйста, перезагрузите страницу.",
- "The update was unsuccessful." : "Обновление не удалось.",
- "The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляемся в Ваш ownCloud...",
- "Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль потому, что ключ неправильный",
- "Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Пожалуйста, убедитесь в том, что ваше имя пользователя введено верно.",
- "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо для сброса пароля, т.к. у вашего аккаунта не прописан адрес почты. Пожалуйста, свяжитесь с администратором.",
+ "Hello {name}" : "Здравствуйте {name}",
+ "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов"],
+ "Updating {productName} to version {version}, this may take a while." : "Идет обновление {productName} до версии {version}, пожалуйста, подождите.",
+ "Please reload the page." : "Обновите страницу.",
+ "The update was unsuccessful. " : "Обновление не удалось.",
+ "The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляем в ownCloud.",
+ "Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль, неверный токен",
+ "Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо восстановления пароля. Убедитесь, что имя пользователя указано верно.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо восстановления пароля, у вашей учетной записи не указан адрес электронной почты. Пожалуйста, свяжитесь с администратором.",
"%s password reset" : "%s сброс пароля",
"Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
- "You will receive a link to reset your password via Email." : "На ваш адрес Email выслана ссылка для сброса пароля.",
- "Username" : "Имя пользователя",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не активировали ключ восстановления, то после сброса пароля все ваши данные будут потеряны навсегда. Если вы не знаете что делать, свяжитесь со своим администратором до того как продолжить. Вы действительно хотите продолжить?",
- "Yes, I really want to reset my password now" : "Да, я действительно хочу сбросить свой пароль",
- "Reset" : "Сброс",
"New password" : "Новый пароль",
"New Password" : "Новый пароль",
- "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 сервер.",
+ "Reset password" : "Сбросить пароль",
+ "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 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB 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 64bit PHP." : "Удалите опцию open_basedir из файла php.ini или смените PHP на 64х разрядную сборку.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Судя по всему, на сервере не установлен cURL и экземпляр %s работает на 32х разрядной сборке PHP. Такая конфигурация приведет к проблемам работы с файлами размером более 4GB и крайне не рекомендуется.",
+ "Please install the cURL extension and restart your webserver." : "Установите расширение cURL и перезапустите веб-сервер.",
"Personal" : "Личное",
"Users" : "Пользователи",
"Apps" : "Приложения",
@@ -143,21 +149,21 @@ OC.L10N.register(
"Error deleting tag(s)" : "Ошибка удаления метки(ок)",
"Error tagging" : "Ошибка присваивания метки",
"Error untagging" : "Ошибка снятия метки",
- "Error favoriting" : "Ошибка размещения в любимых",
- "Error unfavoriting" : "Ошибка удаления из любимых",
+ "Error favoriting" : "Ошибка добавления в избранные",
+ "Error unfavoriting" : "Ошибка удаления из избранного",
"Access forbidden" : "Доступ запрещён",
"File not found" : "Файл не найден",
- "The specified document has not been found on the server." : "Указанный документ не может быть найден на сервере.",
+ "The specified document has not been found on the server." : "Указанный документ не найден на сервере.",
"You can click here to return to %s." : "Вы можете нажать здесь, чтобы вернуться в %s.",
- "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравствуйте,\n\n%s предоставил Вам доступ к %s.\nПосмотреть: %s\n\n",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравствуйте,\n\n%s поделился %s с вами.\nПосмотреть: %s\n",
"The share will expire on %s." : "Доступ будет закрыт %s",
- "Cheers!" : "Удачи!",
+ "Cheers!" : "Всего наилучшего!",
"Internal Server Error" : "Внутренняя ошибка сервера",
- "The server encountered an internal error and was unable to complete your request." : "Сервер столкнулся с внутренней ошибкой и не смог закончить Ваш запрос.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Пожалуйста, свяжитесь с администратором сервера, если эта ошибка будет снова появляться, пожалуйста, прикрепите технические детали к своему сообщению.",
+ "The server encountered an internal error and was unable to complete your request." : "Запрос не выполнен, на сервере произошла ошибка.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Пожалуйста, свяжитесь с администратором сервера, если эта ошибка будет повторяться, прикрепите технические детали к своему сообщению.",
"More details can be found in the server log." : "Больше деталей может быть найдено в журнале сервера.",
"Technical details" : "Технические детали",
- "Remote Address: %s" : "Удаленный Адрес: %s",
+ "Remote Address: %s" : "Удаленный адрес: %s",
"Request ID: %s" : "ID Запроса: %s",
"Code: %s" : "Код: %s",
"Message: %s" : "Сообщение: %s",
@@ -166,13 +172,13 @@ OC.L10N.register(
"Trace" : "След",
"Security Warning" : "Предупреждение безопасности",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Ваша версия PHP уязвима к атаке NULL Byte (CVE-2006-7243)",
- "Please update your PHP installation to use %s securely." : "Пожалуйста обновите Вашу PHP конфигурацию для безопасного использования %s.",
- "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для информации, как правильно настроить Ваш сервер, пожалуйста загляните в <a hrev=\"%s\"target=\"blank\">документацию</a>.",
+ "Please update your PHP installation to use %s securely." : "Обновите PHP для безопасного использования %s.",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Правила файла .htaccess не выполняются, возможно, каталог данных и файлы свободно доступны из интернета.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Что-бы правильно настроить сервер, руководствуйтесь <a hrev=\"%s\"target=\"blank\">документацией</a>.",
"Create an <strong>admin account</strong>" : "Создать <strong>учётную запись администратора</strong>",
- "Password" : "Пароль",
+ "Username" : "Имя пользователя",
"Storage & database" : "Система хранения данных & база данных",
- "Data folder" : "Директория с данными",
+ "Data folder" : "Каталог с данными",
"Configure the database" : "Настройка базы данных",
"Only %s is available." : "Только %s доступно.",
"Database user" : "Пользователь базы данных",
@@ -183,31 +189,32 @@ OC.L10N.register(
"SQLite will be used as database. For larger installations we recommend to change this." : "SQLite будет использован в качестве базы данных. Мы рекомендуем изменить это для крупных установок.",
"Finish setup" : "Завершить установку",
"Finishing …" : "Завершаем...",
- "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Этому приложению нужен включенный Джаваскрипт. Пожалуйста, <a href=\"http://www.enable-javascript.com/ru/\" target=\"_blank\">включите Джаваскрипт</a> и перезагрузите страницу.",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Для нормальной работы приложения требуется JavaScript. Пожалуйста, <a href=\"http://www.enable-javascript.com/ru/\" target=\"_blank\">включите JavaScript</a> в вашем браузере и обновите страницу.",
"%s is available. Get more information on how to update." : "%s доступно. Получить дополнительную информацию о порядке обновления.",
"Log out" : "Выйти",
+ "Search" : "Найти",
"Server side authentication failed!" : "Неудачная аутентификация с сервером!",
"Please contact your administrator." : "Пожалуйста, свяжитесь с вашим администратором.",
"Forgot your password? Reset it!" : "Забыли пароль? Сбросьте его!",
"remember" : "запомнить",
"Log in" : "Войти",
"Alternative Logins" : "Альтернативные имена пользователя",
- "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравствуйте,<br><br>%s предоставил Вам доступ к <strong>%s</strong>.<br>Перейдите по <a href=\"%s\">ссылке</a>, чтобы загрузить информацию<br><br>",
- "This ownCloud instance is currently in single user mode." : "Эта установка ownCloud в настоящее время в однопользовательском режиме.",
- "This means only administrators can use the instance." : "Это значит, что только администраторы могут использовать эту установку.",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравствуйте,<br><br>%s поделился с вами <strong>%s</strong>.<br>Перейдите по <a href=\"%s\">ссылке</a>, чтобы посмотреть<br><br>",
+ "This ownCloud instance is currently in single user mode." : "Сервер ownCloud в настоящее время работает в однопользовательском режиме.",
+ "This means only administrators can use the instance." : "Это значит, что только администраторы могут использовать сервер.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Обратитесь к вашему системному администратору если это сообщение не исчезает или появляется неожиданно.",
"Thank you for your patience." : "Спасибо за терпение.",
"You are accessing the server from an untrusted domain." : "Вы пытаетесь получить доступ к серверу с неподтверждённого домена.",
- "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Пожалуйста, свяжитесь с администратором. Если вы администратор этого хранилища, сконфигурируйте \"trusted_domain\" в config/config.php. Пример настройки можно найти в /config/config.sample.php.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Пожалуйста, свяжитесь с вашим администратором. Если вы - администратор этого сервера, сконфигурируйте \"trusted_domain\" в config/config.php. Пример настройки можно найти в /config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "В зависимости от конфигурации, вы, будучи администратором, можете также внести домен в доверенные при помощи кнопки снизу.",
"Add \"%s\" as trusted domain" : "Добавить \"%s\" как доверенный домен",
"%s will be updated to version %s." : "%s будет обновлено до версии %s.",
"The following apps will be disabled:" : "Следующие приложения будут отключены:",
"The theme %s has been disabled." : "Тема %s была отключена.",
- "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Пожалуйста, перед тем, как продолжить, убедитесь в том, что вы сделали резервную копию базы данных, директории конфигурации и директории с данными.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед тем, как продолжить, убедитесь в том, что вы сделали резервную копию базы данных, каталога конфигурации и каталога с данными.",
"Start update" : "Запустить обновление",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Чтобы избежать задержек при больших объёмах, вы можете выполнить следующую команду в директории установки:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Чтобы избежать задержек при больших объёмах, вы можете выполнить следующую команду в каталоге установки:",
"This %s instance is currently being updated, which may take a while." : "Этот экземпляр %s в данный момент обновляется, это может занять некоторое время.",
- "This page will refresh itself when the %s instance is available again." : "Эта страница обновится, когда экземпляр %s станет снова доступным."
+ "This page will refresh itself when the %s instance is available again." : "Эта страница обновится, когда экземпляр %s снова станет доступен."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index a65f9b502b0..95dded6a0e9 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -4,9 +4,9 @@
"Turned off maintenance mode" : "Режим отладки отключён",
"Updated database" : "База данных обновлена",
"Checked database schema update" : "Проверено обновление схемы БД",
- "Checked database schema update for apps" : "Проверено обновление схемы БД для приложений",
+ "Checked database schema update for apps" : "Проверено обновление схемы БД приложений",
"Updated \"%s\" to %s" : "Обновлено \"%s\" до %s",
- "Disabled incompatible apps: %s" : "Отключенные несовместимые приложения: %s",
+ "Disabled incompatible apps: %s" : "Отключены несовместимые приложения: %s",
"No image or file provided" : "Не указано изображение или файл",
"Unknown filetype" : "Неизвестный тип файла",
"Invalid image" : "Некорректное изображение",
@@ -34,10 +34,9 @@
"Settings" : "Настройки",
"Saving..." : "Сохранение...",
"Couldn't send reset email. Please contact your administrator." : "Не удалось отправить письмо для сброса пароля. Пожалуйста, свяжитесь с вашим администратором.",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ссылка для восстановления пароля была отправлена на вашу почту. Если вы не получили её, проверьте папку спама.<br>Если там письма со ссылкой нет, то обратитесь к локальному администратору.",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к локальному администратору.<br />Вытдействительно хотите продолжить?",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ссылка восстановления пароля отправлена на ваш email. Если вы не получили письмо в течении продолжительного промежутка времени, проверьте папку спама.<br>Если письмо с ссылкой восстановления пароля папке спама не обнаружено, обратитесь к вашему администратору.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?",
"I know what I'm doing" : "Я понимаю, что делаю",
- "Reset password" : "Сбросить пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не может быть изменён. Пожалуйста, свяжитесь с вашим администратором.",
"No" : "Нет",
"Yes" : "Да",
@@ -45,15 +44,16 @@
"Error loading file picker template: {error}" : "Ошибка при загрузке шаблона выбора файлов: {error}",
"Ok" : "Ок",
"Error loading message template: {error}" : "Ошибка загрузки шаблона сообщений: {error}",
+ "read-only" : "только для чтения",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах"],
"One file conflict" : "Один конфликт в файлах",
"New Files" : "Новые файлы",
"Already existing files" : "Существующие файлы",
"Which files do you want to keep?" : "Какие файлы вы хотите сохранить?",
- "If you select both versions, the copied file will have a number added to its name." : "При выборе обоих версий, к названию копируемого файла будет добавлена цифра",
- "Cancel" : "Отменить",
+ "If you select both versions, the copied file will have a number added to its name." : "При выборе обеих версий, к названию копируемого файла будет добавлена цифра",
+ "Cancel" : "Отмена",
"Continue" : "Продолжить",
- "(all selected)" : "(выбраны все)",
+ "(all selected)" : "(все)",
"({count} selected)" : "({count} выбрано)",
"Error loading file exists template" : "Ошибка при загрузке шаблона существующего файла",
"Very weak password" : "Очень слабый пароль",
@@ -62,38 +62,43 @@
"Good password" : "Хороший пароль",
"Strong password" : "Устойчивый к взлому пароль",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Веб-сервер до сих пор не настроен для возможности синхронизации файлов. Похоже что проблема в неисправности интерфейса WebDAV.",
- "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к сети интернет. Это значит, что некоторые возможности, такие как подключение внешних дисков, уведомления об обновлениях или установка сторонних приложений – не работают. Удалённый доступ к файлам и отправка уведомлений по электронной почте вероятнее всего тоже не будут работать. Предлагаем включить соединение с интернетом для этого сервера, если Вы хотите иметь все возможности.",
- "Error occurred while checking server setup" : "Произошла ошибка при проверке настройки сервера",
- "Shared" : "Общие",
- "Shared with {recipients}" : "Доступ открыт {recipients}",
- "Share" : "Открыть доступ",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Данный сервер не имеет подключения к сети интернет. Это значит, что некоторые возможности, такие как подключение удаленных дисков, уведомления об обновлениях или установка сторонних приложений – не работают. Удалённый доступ к файлам и отправка уведомлений по электронной почте вероятнее всего тоже не будут работать. Предлагаем включить соединение с интернетом для этого сервера, если вы хотите использовать все возможности.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Похоже, что каталог с данными и файлы доступны из интернета. Файл .htaccess не работает. Крайне рекомендуется сконфигурировать вебсервер таким образом, чтобы каталог с данными более не был доступен, или переместите каталог с данными в другое место, за пределами каталога документов веб-сервера.",
+ "Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера",
+ "Shared" : "Общий доступ",
+ "Shared with {recipients}" : "Вы поделились с {recipients}",
+ "Share" : "Поделиться",
"Error" : "Ошибка",
- "Error while sharing" : "Ошибка при открытии доступа",
- "Error while unsharing" : "Ошибка при закрытии доступа",
- "Error while changing permissions" : "Ошибка при смене разрешений",
- "Shared with you and the group {group} by {owner}" : "{owner} открыл доступ для Вас и группы {group} ",
- "Shared with you by {owner}" : "{owner} открыл доступ для Вас",
+ "Error while sharing" : "При попытке поделиться произошла ошибка",
+ "Error while unsharing" : "При закрытии доступа произошла ошибка",
+ "Error while changing permissions" : "При изменении прав доступа произошла ошибка",
+ "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ",
+ "Shared with you by {owner}" : "С вами поделился {owner} ",
"Share with user or group …" : "Поделиться с пользователем или группой...",
"Share link" : "Поделиться ссылкой",
- "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней, после её создания",
+ "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней после её создания",
+ "Link" : "Ссылка",
"Password protect" : "Защитить паролем",
- "Choose a password for the public link" : "Выберите пароль для публичной ссылки",
- "Allow Public Upload" : "Разрешить загрузку",
- "Email link to person" : "Почтовая ссылка на персону",
+ "Password" : "Пароль",
+ "Choose a password for the public link" : "Укажите пароль для публичной ссылки",
+ "Allow editing" : "Разрешить редактирование",
+ "Email link to person" : "Отправить ссылку по электронной почте",
"Send" : "Отправить",
"Set expiration date" : "Установить срок доступа",
+ "Expiration" : "Срок действия",
"Expiration date" : "Дата окончания",
"Adding user..." : "Добавляем пользователя...",
"group" : "группа",
- "Resharing is not allowed" : "Общий доступ не разрешен",
- "Shared in {item} with {user}" : "Общий доступ к {item} с {user}",
- "Unshare" : "Закрыть общий доступ",
+ "remote" : "удаленный",
+ "Resharing is not allowed" : "Повторное открытие доступа запрещено",
+ "Shared in {item} with {user}" : "Общий доступ в {item} для {user}",
+ "Unshare" : "Закрыть доступ",
"notify by email" : "уведомить по почте",
- "can share" : "можно дать доступ",
+ "can share" : "может делиться с другими",
"can edit" : "может редактировать",
"access control" : "контроль доступа",
"create" : "создать",
- "update" : "обновить",
+ "change" : "изменить",
"delete" : "удалить",
"Password protected" : "Защищено паролем",
"Error unsetting expiration date" : "Ошибка при отмене срока доступа",
@@ -112,25 +117,26 @@
"Hello world!" : "Привет мир!",
"sunny" : "солнечно",
"Hello {name}, the weather is {weather}" : "Здравствуйте {name}, погода {weather}",
- "_download %n file_::_download %n files_" : ["","",""],
- "Updating {productName} to version {version}, this may take a while." : "Обновление {productName} до версии {version}, пожалуйста, подождите.",
- "Please reload the page." : "Пожалуйста, перезагрузите страницу.",
- "The update was unsuccessful." : "Обновление не удалось.",
- "The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляемся в Ваш ownCloud...",
- "Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль потому, что ключ неправильный",
- "Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Пожалуйста, убедитесь в том, что ваше имя пользователя введено верно.",
- "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо для сброса пароля, т.к. у вашего аккаунта не прописан адрес почты. Пожалуйста, свяжитесь с администратором.",
+ "Hello {name}" : "Здравствуйте {name}",
+ "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов"],
+ "Updating {productName} to version {version}, this may take a while." : "Идет обновление {productName} до версии {version}, пожалуйста, подождите.",
+ "Please reload the page." : "Обновите страницу.",
+ "The update was unsuccessful. " : "Обновление не удалось.",
+ "The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляем в ownCloud.",
+ "Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль, неверный токен",
+ "Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо восстановления пароля. Убедитесь, что имя пользователя указано верно.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо восстановления пароля, у вашей учетной записи не указан адрес электронной почты. Пожалуйста, свяжитесь с администратором.",
"%s password reset" : "%s сброс пароля",
"Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
- "You will receive a link to reset your password via Email." : "На ваш адрес Email выслана ссылка для сброса пароля.",
- "Username" : "Имя пользователя",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не активировали ключ восстановления, то после сброса пароля все ваши данные будут потеряны навсегда. Если вы не знаете что делать, свяжитесь со своим администратором до того как продолжить. Вы действительно хотите продолжить?",
- "Yes, I really want to reset my password now" : "Да, я действительно хочу сбросить свой пароль",
- "Reset" : "Сброс",
"New password" : "Новый пароль",
"New Password" : "Новый пароль",
- "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 сервер.",
+ "Reset password" : "Сбросить пароль",
+ "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 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB 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 64bit PHP." : "Удалите опцию open_basedir из файла php.ini или смените PHP на 64х разрядную сборку.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Судя по всему, на сервере не установлен cURL и экземпляр %s работает на 32х разрядной сборке PHP. Такая конфигурация приведет к проблемам работы с файлами размером более 4GB и крайне не рекомендуется.",
+ "Please install the cURL extension and restart your webserver." : "Установите расширение cURL и перезапустите веб-сервер.",
"Personal" : "Личное",
"Users" : "Пользователи",
"Apps" : "Приложения",
@@ -141,21 +147,21 @@
"Error deleting tag(s)" : "Ошибка удаления метки(ок)",
"Error tagging" : "Ошибка присваивания метки",
"Error untagging" : "Ошибка снятия метки",
- "Error favoriting" : "Ошибка размещения в любимых",
- "Error unfavoriting" : "Ошибка удаления из любимых",
+ "Error favoriting" : "Ошибка добавления в избранные",
+ "Error unfavoriting" : "Ошибка удаления из избранного",
"Access forbidden" : "Доступ запрещён",
"File not found" : "Файл не найден",
- "The specified document has not been found on the server." : "Указанный документ не может быть найден на сервере.",
+ "The specified document has not been found on the server." : "Указанный документ не найден на сервере.",
"You can click here to return to %s." : "Вы можете нажать здесь, чтобы вернуться в %s.",
- "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравствуйте,\n\n%s предоставил Вам доступ к %s.\nПосмотреть: %s\n\n",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравствуйте,\n\n%s поделился %s с вами.\nПосмотреть: %s\n",
"The share will expire on %s." : "Доступ будет закрыт %s",
- "Cheers!" : "Удачи!",
+ "Cheers!" : "Всего наилучшего!",
"Internal Server Error" : "Внутренняя ошибка сервера",
- "The server encountered an internal error and was unable to complete your request." : "Сервер столкнулся с внутренней ошибкой и не смог закончить Ваш запрос.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Пожалуйста, свяжитесь с администратором сервера, если эта ошибка будет снова появляться, пожалуйста, прикрепите технические детали к своему сообщению.",
+ "The server encountered an internal error and was unable to complete your request." : "Запрос не выполнен, на сервере произошла ошибка.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Пожалуйста, свяжитесь с администратором сервера, если эта ошибка будет повторяться, прикрепите технические детали к своему сообщению.",
"More details can be found in the server log." : "Больше деталей может быть найдено в журнале сервера.",
"Technical details" : "Технические детали",
- "Remote Address: %s" : "Удаленный Адрес: %s",
+ "Remote Address: %s" : "Удаленный адрес: %s",
"Request ID: %s" : "ID Запроса: %s",
"Code: %s" : "Код: %s",
"Message: %s" : "Сообщение: %s",
@@ -164,13 +170,13 @@
"Trace" : "След",
"Security Warning" : "Предупреждение безопасности",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Ваша версия PHP уязвима к атаке NULL Byte (CVE-2006-7243)",
- "Please update your PHP installation to use %s securely." : "Пожалуйста обновите Вашу PHP конфигурацию для безопасного использования %s.",
- "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для информации, как правильно настроить Ваш сервер, пожалуйста загляните в <a hrev=\"%s\"target=\"blank\">документацию</a>.",
+ "Please update your PHP installation to use %s securely." : "Обновите PHP для безопасного использования %s.",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Правила файла .htaccess не выполняются, возможно, каталог данных и файлы свободно доступны из интернета.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Что-бы правильно настроить сервер, руководствуйтесь <a hrev=\"%s\"target=\"blank\">документацией</a>.",
"Create an <strong>admin account</strong>" : "Создать <strong>учётную запись администратора</strong>",
- "Password" : "Пароль",
+ "Username" : "Имя пользователя",
"Storage & database" : "Система хранения данных & база данных",
- "Data folder" : "Директория с данными",
+ "Data folder" : "Каталог с данными",
"Configure the database" : "Настройка базы данных",
"Only %s is available." : "Только %s доступно.",
"Database user" : "Пользователь базы данных",
@@ -181,31 +187,32 @@
"SQLite will be used as database. For larger installations we recommend to change this." : "SQLite будет использован в качестве базы данных. Мы рекомендуем изменить это для крупных установок.",
"Finish setup" : "Завершить установку",
"Finishing …" : "Завершаем...",
- "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Этому приложению нужен включенный Джаваскрипт. Пожалуйста, <a href=\"http://www.enable-javascript.com/ru/\" target=\"_blank\">включите Джаваскрипт</a> и перезагрузите страницу.",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Для нормальной работы приложения требуется JavaScript. Пожалуйста, <a href=\"http://www.enable-javascript.com/ru/\" target=\"_blank\">включите JavaScript</a> в вашем браузере и обновите страницу.",
"%s is available. Get more information on how to update." : "%s доступно. Получить дополнительную информацию о порядке обновления.",
"Log out" : "Выйти",
+ "Search" : "Найти",
"Server side authentication failed!" : "Неудачная аутентификация с сервером!",
"Please contact your administrator." : "Пожалуйста, свяжитесь с вашим администратором.",
"Forgot your password? Reset it!" : "Забыли пароль? Сбросьте его!",
"remember" : "запомнить",
"Log in" : "Войти",
"Alternative Logins" : "Альтернативные имена пользователя",
- "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравствуйте,<br><br>%s предоставил Вам доступ к <strong>%s</strong>.<br>Перейдите по <a href=\"%s\">ссылке</a>, чтобы загрузить информацию<br><br>",
- "This ownCloud instance is currently in single user mode." : "Эта установка ownCloud в настоящее время в однопользовательском режиме.",
- "This means only administrators can use the instance." : "Это значит, что только администраторы могут использовать эту установку.",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравствуйте,<br><br>%s поделился с вами <strong>%s</strong>.<br>Перейдите по <a href=\"%s\">ссылке</a>, чтобы посмотреть<br><br>",
+ "This ownCloud instance is currently in single user mode." : "Сервер ownCloud в настоящее время работает в однопользовательском режиме.",
+ "This means only administrators can use the instance." : "Это значит, что только администраторы могут использовать сервер.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Обратитесь к вашему системному администратору если это сообщение не исчезает или появляется неожиданно.",
"Thank you for your patience." : "Спасибо за терпение.",
"You are accessing the server from an untrusted domain." : "Вы пытаетесь получить доступ к серверу с неподтверждённого домена.",
- "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Пожалуйста, свяжитесь с администратором. Если вы администратор этого хранилища, сконфигурируйте \"trusted_domain\" в config/config.php. Пример настройки можно найти в /config/config.sample.php.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Пожалуйста, свяжитесь с вашим администратором. Если вы - администратор этого сервера, сконфигурируйте \"trusted_domain\" в config/config.php. Пример настройки можно найти в /config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "В зависимости от конфигурации, вы, будучи администратором, можете также внести домен в доверенные при помощи кнопки снизу.",
"Add \"%s\" as trusted domain" : "Добавить \"%s\" как доверенный домен",
"%s will be updated to version %s." : "%s будет обновлено до версии %s.",
"The following apps will be disabled:" : "Следующие приложения будут отключены:",
"The theme %s has been disabled." : "Тема %s была отключена.",
- "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Пожалуйста, перед тем, как продолжить, убедитесь в том, что вы сделали резервную копию базы данных, директории конфигурации и директории с данными.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед тем, как продолжить, убедитесь в том, что вы сделали резервную копию базы данных, каталога конфигурации и каталога с данными.",
"Start update" : "Запустить обновление",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Чтобы избежать задержек при больших объёмах, вы можете выполнить следующую команду в директории установки:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Чтобы избежать задержек при больших объёмах, вы можете выполнить следующую команду в каталоге установки:",
"This %s instance is currently being updated, which may take a while." : "Этот экземпляр %s в данный момент обновляется, это может занять некоторое время.",
- "This page will refresh itself when the %s instance is available again." : "Эта страница обновится, когда экземпляр %s станет снова доступным."
+ "This page will refresh itself when the %s instance is available again." : "Эта страница обновится, когда экземпляр %s снова станет доступен."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/l10n/si_LK.js b/core/l10n/si_LK.js
index 3a9978aea85..3f27b10b773 100644
--- a/core/l10n/si_LK.js
+++ b/core/l10n/si_LK.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "දෙසැම්බර්",
"Settings" : "සිටුවම්",
"Saving..." : "සුරැකෙමින් පවතී...",
- "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"No" : "එපා",
"Yes" : "ඔව්",
"Choose" : "තෝරන්න",
@@ -32,6 +31,7 @@ OC.L10N.register(
"Share" : "බෙදා හදා ගන්න",
"Error" : "දෝෂයක්",
"Password protect" : "මුර පදයකින් ආරක්ශාකරන්න",
+ "Password" : "මුර පදය",
"Set expiration date" : "කල් ඉකුත් විමේ දිනය දමන්න",
"Expiration date" : "කල් ඉකුත් විමේ දිනය",
"group" : "කණ්ඩායම",
@@ -39,7 +39,6 @@ OC.L10N.register(
"can edit" : "සංස්කරණය කළ හැක",
"access control" : "ප්‍රවේශ පාලනය",
"create" : "සදන්න",
- "update" : "යාවත්කාලීන කරන්න",
"delete" : "මකන්න",
"Password protected" : "මුර පදයකින් ආරක්ශාකර ඇත",
"Error unsetting expiration date" : "කල් ඉකුත් දිනය ඉවත් කිරීමේ දෝෂයක්",
@@ -48,9 +47,8 @@ OC.L10N.register(
"Delete" : "මකා දමන්න",
"Add" : "එකතු කරන්න",
"_download %n file_::_download %n files_" : ["",""],
- "You will receive a link to reset your password via Email." : "ඔබගේ මුරපදය ප්‍රත්‍යාරම්භ කිරීම සඳහා යොමුව විද්‍යුත් තැපෑලෙන් ලැබෙනු ඇත",
- "Username" : "පරිශීලක නම",
"New password" : "නව මුරපදය",
+ "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"Personal" : "පෞද්ගලික",
"Users" : "පරිශීලකයන්",
"Apps" : "යෙදුම්",
@@ -58,7 +56,7 @@ OC.L10N.register(
"Help" : "උදව්",
"Access forbidden" : "ඇතුල් වීම තහනම්",
"Security Warning" : "ආරක්ෂක නිවේදනයක්",
- "Password" : "මුර පදය",
+ "Username" : "පරිශීලක නම",
"Data folder" : "දත්ත ෆෝල්ඩරය",
"Configure the database" : "දත්ත සමුදාය හැඩගැසීම",
"Database user" : "දත්තගබඩා භාවිතාකරු",
@@ -67,6 +65,7 @@ OC.L10N.register(
"Database host" : "දත්තගබඩා සේවාදායකයා",
"Finish setup" : "ස්ථාපනය කිරීම අවසන් කරන්න",
"Log out" : "නික්මීම",
+ "Search" : "සොයන්න",
"remember" : "මතක තබාගන්න",
"Log in" : "ප්‍රවේශවන්න"
},
diff --git a/core/l10n/si_LK.json b/core/l10n/si_LK.json
index 112e6eb5014..c02ad4ff0aa 100644
--- a/core/l10n/si_LK.json
+++ b/core/l10n/si_LK.json
@@ -20,7 +20,6 @@
"December" : "දෙසැම්බර්",
"Settings" : "සිටුවම්",
"Saving..." : "සුරැකෙමින් පවතී...",
- "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"No" : "එපා",
"Yes" : "ඔව්",
"Choose" : "තෝරන්න",
@@ -30,6 +29,7 @@
"Share" : "බෙදා හදා ගන්න",
"Error" : "දෝෂයක්",
"Password protect" : "මුර පදයකින් ආරක්ශාකරන්න",
+ "Password" : "මුර පදය",
"Set expiration date" : "කල් ඉකුත් විමේ දිනය දමන්න",
"Expiration date" : "කල් ඉකුත් විමේ දිනය",
"group" : "කණ්ඩායම",
@@ -37,7 +37,6 @@
"can edit" : "සංස්කරණය කළ හැක",
"access control" : "ප්‍රවේශ පාලනය",
"create" : "සදන්න",
- "update" : "යාවත්කාලීන කරන්න",
"delete" : "මකන්න",
"Password protected" : "මුර පදයකින් ආරක්ශාකර ඇත",
"Error unsetting expiration date" : "කල් ඉකුත් දිනය ඉවත් කිරීමේ දෝෂයක්",
@@ -46,9 +45,8 @@
"Delete" : "මකා දමන්න",
"Add" : "එකතු කරන්න",
"_download %n file_::_download %n files_" : ["",""],
- "You will receive a link to reset your password via Email." : "ඔබගේ මුරපදය ප්‍රත්‍යාරම්භ කිරීම සඳහා යොමුව විද්‍යුත් තැපෑලෙන් ලැබෙනු ඇත",
- "Username" : "පරිශීලක නම",
"New password" : "නව මුරපදය",
+ "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"Personal" : "පෞද්ගලික",
"Users" : "පරිශීලකයන්",
"Apps" : "යෙදුම්",
@@ -56,7 +54,7 @@
"Help" : "උදව්",
"Access forbidden" : "ඇතුල් වීම තහනම්",
"Security Warning" : "ආරක්ෂක නිවේදනයක්",
- "Password" : "මුර පදය",
+ "Username" : "පරිශීලක නම",
"Data folder" : "දත්ත ෆෝල්ඩරය",
"Configure the database" : "දත්ත සමුදාය හැඩගැසීම",
"Database user" : "දත්තගබඩා භාවිතාකරු",
@@ -65,6 +63,7 @@
"Database host" : "දත්තගබඩා සේවාදායකයා",
"Finish setup" : "ස්ථාපනය කිරීම අවසන් කරන්න",
"Log out" : "නික්මීම",
+ "Search" : "සොයන්න",
"remember" : "මතක තබාගන්න",
"Log in" : "ප්‍රවේශවන්න"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/core/l10n/sk.php b/core/l10n/sk.php
deleted file mode 100644
index 74d6a570c09..00000000000
--- a/core/l10n/sk.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Sunday" => "Nedeľa",
-"Monday" => "Pondelok",
-"Tuesday" => "Utorok",
-"Wednesday" => "Streda",
-"Thursday" => "Štvrtok",
-"Friday" => "Piatok",
-"Saturday" => "Sobota",
-"January" => "Január",
-"February" => "Február",
-"March" => "Marec",
-"April" => "Apríl",
-"May" => "Máj",
-"June" => "Jún",
-"July" => "Júl",
-"August" => "August",
-"September" => "September",
-"October" => "Október",
-"November" => "November",
-"December" => "December",
-"Settings" => "Nastavenia",
-"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
-"Cancel" => "Zrušiť",
-"Share" => "Zdieľať",
-"group" => "skupina",
-"Delete" => "Odstrániť",
-"Personal" => "Osobné"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js
index 2954e513327..22ef7e64bf1 100644
--- a/core/l10n/sk_SK.js
+++ b/core/l10n/sk_SK.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovu hesla bol odoslaný na váš email. Pokiaľ ho neobdržíte v primeranom čase, skontrolujte spam / priečinok nevyžiadanej pošty. <br> Ak tam nie je, kontaktujte svojho administrátora.",
"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ť?",
"I know what I'm doing" : "Viem, čo robím",
- "Reset password" : "Obnovenie hesla",
"Password can not be changed. Please contact your administrator." : "Heslo nemožno zmeniť. Kontaktujte prosím vášho administrátora.",
"No" : "Nie",
"Yes" : "Áno",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Chyba pri nahrávaní šablóny výberu súborov: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Chyba pri nahrávaní šablóny správy: {error}",
+ "read-only" : "iba na čítanie",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt súboru","{count} konflikty súboru","{count} konfliktov súboru"],
"One file conflict" : "Jeden konflikt súboru",
"New Files" : "Nové súbory",
@@ -65,6 +65,8 @@ OC.L10N.register(
"Strong password" : "Silné heslo",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Server nemá funkčné pripojenie k internetu. Niektoré moduly ako napr. externé úložisko, oznámenie o dostupných aktualizáciách alebo inštalácia aplikácií tretích strán nebudú fungovať. Prístup k súborom z iných miest a odosielanie oznamovacích emailov tiež nemusí fungovať. Ak chcete využívať všetky vlastnosti ownCloudu, odporúčame povoliť pripojenie k internetu tomuto serveru.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný, alebo presunúť priečinok s dátami mimo priestor sprístupňovaný webovým serverom.",
+ "Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba",
"Shared" : "Zdieľané",
"Shared with {recipients}" : "Zdieľa s {recipients}",
"Share" : "Zdieľať",
@@ -77,12 +79,15 @@ OC.L10N.register(
"Share with user or group …" : "Zdieľať s používateľom alebo skupinou ...",
"Share link" : "Zdieľať linku",
"The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení",
+ "Link" : "Odkaz",
"Password protect" : "Chrániť heslom",
+ "Password" : "Heslo",
"Choose a password for the public link" : "Zadajte heslo pre tento verejný odkaz",
- "Allow Public Upload" : "Povoliť verejné nahrávanie",
+ "Allow editing" : "Povoliť upravovanie",
"Email link to person" : "Odoslať odkaz emailom",
"Send" : "Odoslať",
"Set expiration date" : "Nastaviť dátum expirácie",
+ "Expiration" : "Uplynutie",
"Expiration date" : "Dátum expirácie",
"Adding user..." : "Pridávam používateľa...",
"group" : "skupina",
@@ -94,7 +99,7 @@ OC.L10N.register(
"can edit" : "môže upraviť",
"access control" : "prístupové práva",
"create" : "vytvoriť",
- "update" : "aktualizovať",
+ "change" : "zmeniť",
"delete" : "vymazať",
"Password protected" : "Chránené heslom",
"Error unsetting expiration date" : "Chyba pri odstraňovaní dátumu expirácie",
@@ -112,23 +117,20 @@ OC.L10N.register(
"unknown text" : "neznámy text",
"Hello world!" : "Ahoj svet!",
"sunny" : "slnečno",
+ "Hello {name}, the weather is {weather}" : "Dobrý deň {name}, počasie je {weather}",
"_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"],
"Updating {productName} to version {version}, this may take a while." : "Aktualizujem {productName} na verziu {version}, chvíľu to môže trvať.",
"Please reload the page." : "Obnovte prosím stránku.",
- "The update was unsuccessful." : "Aktualizácia zlyhala.",
+ "The update was unsuccessful. " : "Aktualizácia bola neúspešná.",
"The update was successful. Redirecting you to ownCloud now." : "Aktualizácia bola úspešná. Presmerovávam vás na prihlasovaciu stránku.",
"Couldn't reset password because the token is invalid" : "Nemožno zmeniť heslo pre neplatnosť tokenu.",
"Couldn't send reset email. Please make sure your username is correct." : "Nemožno poslať email pre obnovu. Uistite sa, či vkladáte správne používateľské meno.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nemožno poslať email pre obnovu hesla, pretože pre tohoto používateľa nie je uvedená žiadna emailová adresa. Prosím, obráťte sa na administrátora.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
- "You will receive a link to reset your password via Email." : "Odkaz pre obnovenie hesla obdržíte emailom.",
- "Username" : "Meno používateľa",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše súbory sú šifrované. Ak nemáte povolený kľúč obnovy, nie je spôsob, ako získať po obnove hesla vaše dáta. Ak nie ste si istí tým, čo robíte, obráťte sa najskôr na administrátora. Naozaj chcete pokračovať?",
- "Yes, I really want to reset my password now" : "Áno, želám si teraz obnoviť svoje heslo",
- "Reset" : "Resetovať",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovenie hesla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
"For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
"Personal" : "Osobné",
@@ -164,7 +166,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pre informácie, ako správne nastaviť váš server, sa pozrite do <a href=\"%s\" target=\"_blank\">dokumentácie</a>.",
"Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>",
- "Password" : "Heslo",
+ "Username" : "Meno používateľa",
"Storage & database" : "Úložislo & databáza",
"Data folder" : "Priečinok dát",
"Configure the database" : "Nastaviť databázu",
@@ -177,8 +179,10 @@ OC.L10N.register(
"SQLite will be used as database. For larger installations we recommend to change this." : "Ako databáza bude použitá SQLite. Pri väčších inštaláciách odporúčame zmeniť na inú.",
"Finish setup" : "Dokončiť inštaláciu",
"Finishing …" : "Dokončujem...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Táto aplikácia potrebuje JavaScript pre správne fungovanie. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">zapnite si JavaScript</a> a obnovte stránku",
"%s is available. Get more information on how to update." : "%s je dostupná. Získajte viac informácií o postupe aktualizácie.",
"Log out" : "Odhlásiť",
+ "Search" : "Hľadať",
"Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
"Please contact your administrator." : "Kontaktujte prosím vášho administrátora.",
"Forgot your password? Reset it!" : "Zabudli ste heslo? Obnovte si ho!",
diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json
index fa6ed266564..c8ef1f7cd1c 100644
--- a/core/l10n/sk_SK.json
+++ b/core/l10n/sk_SK.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovu hesla bol odoslaný na váš email. Pokiaľ ho neobdržíte v primeranom čase, skontrolujte spam / priečinok nevyžiadanej pošty. <br> Ak tam nie je, kontaktujte svojho administrátora.",
"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ť?",
"I know what I'm doing" : "Viem, čo robím",
- "Reset password" : "Obnovenie hesla",
"Password can not be changed. Please contact your administrator." : "Heslo nemožno zmeniť. Kontaktujte prosím vášho administrátora.",
"No" : "Nie",
"Yes" : "Áno",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Chyba pri nahrávaní šablóny výberu súborov: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Chyba pri nahrávaní šablóny správy: {error}",
+ "read-only" : "iba na čítanie",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt súboru","{count} konflikty súboru","{count} konfliktov súboru"],
"One file conflict" : "Jeden konflikt súboru",
"New Files" : "Nové súbory",
@@ -63,6 +63,8 @@
"Strong password" : "Silné heslo",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Server nemá funkčné pripojenie k internetu. Niektoré moduly ako napr. externé úložisko, oznámenie o dostupných aktualizáciách alebo inštalácia aplikácií tretích strán nebudú fungovať. Prístup k súborom z iných miest a odosielanie oznamovacích emailov tiež nemusí fungovať. Ak chcete využívať všetky vlastnosti ownCloudu, odporúčame povoliť pripojenie k internetu tomuto serveru.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný, alebo presunúť priečinok s dátami mimo priestor sprístupňovaný webovým serverom.",
+ "Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba",
"Shared" : "Zdieľané",
"Shared with {recipients}" : "Zdieľa s {recipients}",
"Share" : "Zdieľať",
@@ -75,12 +77,15 @@
"Share with user or group …" : "Zdieľať s používateľom alebo skupinou ...",
"Share link" : "Zdieľať linku",
"The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení",
+ "Link" : "Odkaz",
"Password protect" : "Chrániť heslom",
+ "Password" : "Heslo",
"Choose a password for the public link" : "Zadajte heslo pre tento verejný odkaz",
- "Allow Public Upload" : "Povoliť verejné nahrávanie",
+ "Allow editing" : "Povoliť upravovanie",
"Email link to person" : "Odoslať odkaz emailom",
"Send" : "Odoslať",
"Set expiration date" : "Nastaviť dátum expirácie",
+ "Expiration" : "Uplynutie",
"Expiration date" : "Dátum expirácie",
"Adding user..." : "Pridávam používateľa...",
"group" : "skupina",
@@ -92,7 +97,7 @@
"can edit" : "môže upraviť",
"access control" : "prístupové práva",
"create" : "vytvoriť",
- "update" : "aktualizovať",
+ "change" : "zmeniť",
"delete" : "vymazať",
"Password protected" : "Chránené heslom",
"Error unsetting expiration date" : "Chyba pri odstraňovaní dátumu expirácie",
@@ -110,23 +115,20 @@
"unknown text" : "neznámy text",
"Hello world!" : "Ahoj svet!",
"sunny" : "slnečno",
+ "Hello {name}, the weather is {weather}" : "Dobrý deň {name}, počasie je {weather}",
"_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"],
"Updating {productName} to version {version}, this may take a while." : "Aktualizujem {productName} na verziu {version}, chvíľu to môže trvať.",
"Please reload the page." : "Obnovte prosím stránku.",
- "The update was unsuccessful." : "Aktualizácia zlyhala.",
+ "The update was unsuccessful. " : "Aktualizácia bola neúspešná.",
"The update was successful. Redirecting you to ownCloud now." : "Aktualizácia bola úspešná. Presmerovávam vás na prihlasovaciu stránku.",
"Couldn't reset password because the token is invalid" : "Nemožno zmeniť heslo pre neplatnosť tokenu.",
"Couldn't send reset email. Please make sure your username is correct." : "Nemožno poslať email pre obnovu. Uistite sa, či vkladáte správne používateľské meno.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nemožno poslať email pre obnovu hesla, pretože pre tohoto používateľa nie je uvedená žiadna emailová adresa. Prosím, obráťte sa na administrátora.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
- "You will receive a link to reset your password via Email." : "Odkaz pre obnovenie hesla obdržíte emailom.",
- "Username" : "Meno používateľa",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše súbory sú šifrované. Ak nemáte povolený kľúč obnovy, nie je spôsob, ako získať po obnove hesla vaše dáta. Ak nie ste si istí tým, čo robíte, obráťte sa najskôr na administrátora. Naozaj chcete pokračovať?",
- "Yes, I really want to reset my password now" : "Áno, želám si teraz obnoviť svoje heslo",
- "Reset" : "Resetovať",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovenie hesla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
"For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
"Personal" : "Osobné",
@@ -162,7 +164,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pre informácie, ako správne nastaviť váš server, sa pozrite do <a href=\"%s\" target=\"_blank\">dokumentácie</a>.",
"Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>",
- "Password" : "Heslo",
+ "Username" : "Meno používateľa",
"Storage & database" : "Úložislo & databáza",
"Data folder" : "Priečinok dát",
"Configure the database" : "Nastaviť databázu",
@@ -175,8 +177,10 @@
"SQLite will be used as database. For larger installations we recommend to change this." : "Ako databáza bude použitá SQLite. Pri väčších inštaláciách odporúčame zmeniť na inú.",
"Finish setup" : "Dokončiť inštaláciu",
"Finishing …" : "Dokončujem...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Táto aplikácia potrebuje JavaScript pre správne fungovanie. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">zapnite si JavaScript</a> a obnovte stránku",
"%s is available. Get more information on how to update." : "%s je dostupná. Získajte viac informácií o postupe aktualizácie.",
"Log out" : "Odhlásiť",
+ "Search" : "Hľadať",
"Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
"Please contact your administrator." : "Kontaktujte prosím vášho administrátora.",
"Forgot your password? Reset it!" : "Zabudli ste heslo? Obnovte si ho!",
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index b60e8952b71..a63c82ea726 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"I know what I'm doing" : "Vem, kaj delam!",
- "Reset password" : "Ponastavi geslo",
"Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.",
"No" : "Ne",
"Yes" : "Da",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Napaka nalaganja predloge izbirnika datotek: {error}",
"Ok" : "V redu",
"Error loading message template: {error}" : "Napaka nalaganja predloge sporočil: {error}",
+ "read-only" : "le za branje",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} spor datotek","{count} spora datotek","{count} spori datotek","{count} sporov datotek"],
"One file conflict" : "En spor datotek",
"New Files" : "Nove datoteke",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Odlično geslo",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Spletni stražnik še ni ustrezno nastavljen in ne omogoča usklajevanja, saj je nastavitev vmesnika WebDAV okvarjena.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Na voljo ni delujoče internetne povezave. To pomeni, da nekaterih možnosti, kot so priklapljanje zunanje shrambe, obveščanja o posodobitvah in nameščanje programov tretje roke ni podprto. Dostop do datotek z oddaljenih mest in pošiljanje obvestil preko elektronske pošte prav tako verjetno ne deluje. Za omogočanje vseh zmožnosti mora biti vzpostavljena tudi ustrezna internetna povezava.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaša podatkovna mapa in datoteke so najverjetneje javno dostopna preko interneta. Datoteka .htaccess ni ustrezno nastavljena. Priporočljivo je nastaviti spletni strežnik tako, da podatkovna mapa ni prosto dostopna. To je mogoče zagotoviti tudi tako, da je mapa premaknjena iz neustrezne korenske v podrejeno mapo .",
"Error occurred while checking server setup" : "Prišlo je do napake med preverjanjem nastavitev strežnika",
"Shared" : "V souporabi",
"Shared with {recipients}" : "V souporabi z {recipients}",
@@ -78,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Souporaba z uporabnikom ali skupino ...",
"Share link" : "Povezava za prejem",
"The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.",
+ "Link" : "Povezava",
"Password protect" : "Zaščiti z geslom",
+ "Password" : "Geslo",
"Choose a password for the public link" : "Izberite geslo za javno povezavo",
- "Allow Public Upload" : "Dovoli javno pošiljanje na strežnik",
+ "Allow editing" : "Dovoli urejanje",
"Email link to person" : "Posreduj povezavo po elektronski pošti",
"Send" : "Pošlji",
"Set expiration date" : "Nastavi datum preteka",
+ "Expiration" : "Datum preteka",
"Expiration date" : "Datum preteka",
"Adding user..." : "Dodajanje uporabnika ...",
"group" : "skupina",
+ "remote" : "oddaljeno",
"Resharing is not allowed" : "Nadaljnja souporaba ni dovoljena",
"Shared in {item} with {user}" : "V souporabi v {item} z uporabnikom {user}",
"Unshare" : "Prekliči souporabo",
@@ -95,7 +100,7 @@ OC.L10N.register(
"can edit" : "lahko ureja",
"access control" : "nadzor dostopa",
"create" : "ustvari",
- "update" : "posodobi",
+ "change" : "sprememba",
"delete" : "izbriše",
"Password protected" : "Zaščiteno z geslom",
"Error unsetting expiration date" : "Napaka brisanja datuma preteka",
@@ -110,25 +115,29 @@ OC.L10N.register(
"Edit tags" : "Uredi oznake",
"Error loading dialog template: {error}" : "Napaka nalaganja predloge pogovornega okna: {error}",
"No tags selected for deletion." : "Ni izbranih oznak za izbris.",
- "_download %n file_::_download %n files_" : ["","","",""],
+ "unknown text" : "neznano besedilo",
+ "Hello world!" : "Pozdravljen svet!",
+ "sunny" : "sončno",
+ "Hello {name}, the weather is {weather}" : "Pozdravljeni, {name}, vreme je {weather}",
+ "_download %n file_::_download %n files_" : ["prejmi %n datoteko","prejmi %n datoteki","prejmi %n datoteke","prejmi %n datotek"],
"Updating {productName} to version {version}, this may take a while." : "Poteka posodabljanje {productName} na različico {version}. Opravilo je lahko dolgotrajno.",
"Please reload the page." : "Stran je treba ponovno naložiti",
- "The update was unsuccessful." : "Posodobitev je spodletela",
+ "The update was unsuccessful. " : "Posodobitev je spodletela.",
"The update was successful. Redirecting you to ownCloud now." : "Posodobitev je uspešno končana. Stran bo preusmerjena na oblak ownCloud.",
"Couldn't reset password because the token is invalid" : "Ni mogoče ponastaviti gesla zaradi neustreznega žetona.",
"Couldn't send reset email. Please make sure your username is correct." : "Ni mogoče poslati elektronskega sporočila. Prepričajte se, da je uporabniško ime pravilno.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ni mogoče poslati elektronskega sporočila za ponastavitev gesla, ker ni navedenega elektronskega naslova. Stopite v stik s skrbnikom sistema.",
"%s password reset" : "Ponastavitev gesla %s",
"Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
- "You will receive a link to reset your password via Email." : "Na elektronski naslov boste prejeli povezavo za ponovno nastavitev gesla.",
- "Username" : "Uporabniško ime",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili ključa za obnovitev, žal podatkov ne bo mogoče pridobiti nazaj, ko boste geslo enkrat spremenili. Če niste prepričani, kaj storiti, se obrnite na skrbnika storitve. Ali ste prepričani, da želite nadaljevati?",
- "Yes, I really want to reset my password now" : "Da, potrjujem ponastavitev gesla",
- "Reset" : "Ponastavi",
"New password" : "Novo geslo",
"New Password" : "Novo geslo",
+ "Reset password" : "Ponastavi geslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Videti je, da je dejavna seja %s zagnana v 32-bitnem okolju PHP in da je v datoteki php.ini navedena možnost open_basedir. Pojavijo se lahko težave z datotekami, večjimi od 4GB. Tako delovanje ni priporočljivo.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Odstraniti je treba nastavitev open_basedir v datoteki php.ini ali pa preklopiti na 64-bitno okolje PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Videti je, da je dejavna seja %s zagnana v 32-bitnem okolju PHP in da paket cURL ni nameščen. Pojavijo se lahko težave z datotekami, večjimi od 4GB. Tako delovanje ni priporočljivo.",
+ "Please install the cURL extension and restart your webserver." : "Namestiti je treba razširitev cURL in nato ponovno zagnati spletni strežnik.",
"Personal" : "Osebno",
"Users" : "Uporabniki",
"Apps" : "Programi",
@@ -166,7 +175,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Podatkovna mapa in datoteke so najverjetneje javno dostopni preko interneta, saj datoteka .htaccess ni ustrezno nastavljena.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za več informacij o pravilnem nastavljanju strežnika, kliknite na povezavo do <a href=\"%s\" target=\"_blank\">dokumentacije</a>.",
"Create an <strong>admin account</strong>" : "Ustvari <strong>skrbniški račun</strong>",
- "Password" : "Geslo",
+ "Username" : "Uporabniško ime",
"Storage & database" : "Shramba in podatkovna zbirka",
"Data folder" : "Podatkovna mapa",
"Configure the database" : "Nastavi podatkovno zbirko",
@@ -182,6 +191,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Omogočite <a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScript</a> in ponovno osvežite stran.",
"%s is available. Get more information on how to update." : "%s je na voljo. Pridobite več podrobnosti za posodobitev.",
"Log out" : "Odjava",
+ "Search" : "Poišči",
"Server side authentication failed!" : "Overitev s strežnika je spodletela!",
"Please contact your administrator." : "Stopite v stik s skrbnikom sistema.",
"Forgot your password? Reset it!" : "Ali ste pozabili geslo? Ponastavite ga!",
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index 5636d2794ec..c6b617a22bb 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"I know what I'm doing" : "Vem, kaj delam!",
- "Reset password" : "Ponastavi geslo",
"Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.",
"No" : "Ne",
"Yes" : "Da",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Napaka nalaganja predloge izbirnika datotek: {error}",
"Ok" : "V redu",
"Error loading message template: {error}" : "Napaka nalaganja predloge sporočil: {error}",
+ "read-only" : "le za branje",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} spor datotek","{count} spora datotek","{count} spori datotek","{count} sporov datotek"],
"One file conflict" : "En spor datotek",
"New Files" : "Nove datoteke",
@@ -63,6 +63,7 @@
"Strong password" : "Odlično geslo",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Spletni stražnik še ni ustrezno nastavljen in ne omogoča usklajevanja, saj je nastavitev vmesnika WebDAV okvarjena.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Na voljo ni delujoče internetne povezave. To pomeni, da nekaterih možnosti, kot so priklapljanje zunanje shrambe, obveščanja o posodobitvah in nameščanje programov tretje roke ni podprto. Dostop do datotek z oddaljenih mest in pošiljanje obvestil preko elektronske pošte prav tako verjetno ne deluje. Za omogočanje vseh zmožnosti mora biti vzpostavljena tudi ustrezna internetna povezava.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaša podatkovna mapa in datoteke so najverjetneje javno dostopna preko interneta. Datoteka .htaccess ni ustrezno nastavljena. Priporočljivo je nastaviti spletni strežnik tako, da podatkovna mapa ni prosto dostopna. To je mogoče zagotoviti tudi tako, da je mapa premaknjena iz neustrezne korenske v podrejeno mapo .",
"Error occurred while checking server setup" : "Prišlo je do napake med preverjanjem nastavitev strežnika",
"Shared" : "V souporabi",
"Shared with {recipients}" : "V souporabi z {recipients}",
@@ -76,15 +77,19 @@
"Share with user or group …" : "Souporaba z uporabnikom ali skupino ...",
"Share link" : "Povezava za prejem",
"The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.",
+ "Link" : "Povezava",
"Password protect" : "Zaščiti z geslom",
+ "Password" : "Geslo",
"Choose a password for the public link" : "Izberite geslo za javno povezavo",
- "Allow Public Upload" : "Dovoli javno pošiljanje na strežnik",
+ "Allow editing" : "Dovoli urejanje",
"Email link to person" : "Posreduj povezavo po elektronski pošti",
"Send" : "Pošlji",
"Set expiration date" : "Nastavi datum preteka",
+ "Expiration" : "Datum preteka",
"Expiration date" : "Datum preteka",
"Adding user..." : "Dodajanje uporabnika ...",
"group" : "skupina",
+ "remote" : "oddaljeno",
"Resharing is not allowed" : "Nadaljnja souporaba ni dovoljena",
"Shared in {item} with {user}" : "V souporabi v {item} z uporabnikom {user}",
"Unshare" : "Prekliči souporabo",
@@ -93,7 +98,7 @@
"can edit" : "lahko ureja",
"access control" : "nadzor dostopa",
"create" : "ustvari",
- "update" : "posodobi",
+ "change" : "sprememba",
"delete" : "izbriše",
"Password protected" : "Zaščiteno z geslom",
"Error unsetting expiration date" : "Napaka brisanja datuma preteka",
@@ -108,25 +113,29 @@
"Edit tags" : "Uredi oznake",
"Error loading dialog template: {error}" : "Napaka nalaganja predloge pogovornega okna: {error}",
"No tags selected for deletion." : "Ni izbranih oznak za izbris.",
- "_download %n file_::_download %n files_" : ["","","",""],
+ "unknown text" : "neznano besedilo",
+ "Hello world!" : "Pozdravljen svet!",
+ "sunny" : "sončno",
+ "Hello {name}, the weather is {weather}" : "Pozdravljeni, {name}, vreme je {weather}",
+ "_download %n file_::_download %n files_" : ["prejmi %n datoteko","prejmi %n datoteki","prejmi %n datoteke","prejmi %n datotek"],
"Updating {productName} to version {version}, this may take a while." : "Poteka posodabljanje {productName} na različico {version}. Opravilo je lahko dolgotrajno.",
"Please reload the page." : "Stran je treba ponovno naložiti",
- "The update was unsuccessful." : "Posodobitev je spodletela",
+ "The update was unsuccessful. " : "Posodobitev je spodletela.",
"The update was successful. Redirecting you to ownCloud now." : "Posodobitev je uspešno končana. Stran bo preusmerjena na oblak ownCloud.",
"Couldn't reset password because the token is invalid" : "Ni mogoče ponastaviti gesla zaradi neustreznega žetona.",
"Couldn't send reset email. Please make sure your username is correct." : "Ni mogoče poslati elektronskega sporočila. Prepričajte se, da je uporabniško ime pravilno.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ni mogoče poslati elektronskega sporočila za ponastavitev gesla, ker ni navedenega elektronskega naslova. Stopite v stik s skrbnikom sistema.",
"%s password reset" : "Ponastavitev gesla %s",
"Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
- "You will receive a link to reset your password via Email." : "Na elektronski naslov boste prejeli povezavo za ponovno nastavitev gesla.",
- "Username" : "Uporabniško ime",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili ključa za obnovitev, žal podatkov ne bo mogoče pridobiti nazaj, ko boste geslo enkrat spremenili. Če niste prepričani, kaj storiti, se obrnite na skrbnika storitve. Ali ste prepričani, da želite nadaljevati?",
- "Yes, I really want to reset my password now" : "Da, potrjujem ponastavitev gesla",
- "Reset" : "Ponastavi",
"New password" : "Novo geslo",
"New Password" : "Novo geslo",
+ "Reset password" : "Ponastavi geslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Videti je, da je dejavna seja %s zagnana v 32-bitnem okolju PHP in da je v datoteki php.ini navedena možnost open_basedir. Pojavijo se lahko težave z datotekami, večjimi od 4GB. Tako delovanje ni priporočljivo.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Odstraniti je treba nastavitev open_basedir v datoteki php.ini ali pa preklopiti na 64-bitno okolje PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Videti je, da je dejavna seja %s zagnana v 32-bitnem okolju PHP in da paket cURL ni nameščen. Pojavijo se lahko težave z datotekami, večjimi od 4GB. Tako delovanje ni priporočljivo.",
+ "Please install the cURL extension and restart your webserver." : "Namestiti je treba razširitev cURL in nato ponovno zagnati spletni strežnik.",
"Personal" : "Osebno",
"Users" : "Uporabniki",
"Apps" : "Programi",
@@ -164,7 +173,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Podatkovna mapa in datoteke so najverjetneje javno dostopni preko interneta, saj datoteka .htaccess ni ustrezno nastavljena.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za več informacij o pravilnem nastavljanju strežnika, kliknite na povezavo do <a href=\"%s\" target=\"_blank\">dokumentacije</a>.",
"Create an <strong>admin account</strong>" : "Ustvari <strong>skrbniški račun</strong>",
- "Password" : "Geslo",
+ "Username" : "Uporabniško ime",
"Storage & database" : "Shramba in podatkovna zbirka",
"Data folder" : "Podatkovna mapa",
"Configure the database" : "Nastavi podatkovno zbirko",
@@ -180,6 +189,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Omogočite <a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScript</a> in ponovno osvežite stran.",
"%s is available. Get more information on how to update." : "%s je na voljo. Pridobite več podrobnosti za posodobitev.",
"Log out" : "Odjava",
+ "Search" : "Poišči",
"Server side authentication failed!" : "Overitev s strežnika je spodletela!",
"Please contact your administrator." : "Stopite v stik s skrbnikom sistema.",
"Forgot your password? Reset it!" : "Ali ste pozabili geslo? Ponastavite ga!",
diff --git a/core/l10n/sq.js b/core/l10n/sq.js
index 9dd27342905..f5cc9e11888 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -1,9 +1,19 @@
OC.L10N.register(
"core",
{
+ "Couldn't send mail to following users: %s " : "Nuk mund ti dërgoj e-mail këtyre përdoruesve: %s",
"Turned on maintenance mode" : "Mënyra e mirëmbajtjes u aktivizua",
"Turned off maintenance mode" : "Mënyra e mirëmbajtjes u çaktivizua",
"Updated database" : "Database-i u azhurnua",
+ "Checked database schema update" : "Përditësim i skemës së kontrolluar të bazës së të dhënave",
+ "Checked database schema update for apps" : "Përditësim i skemës së kontrolluar të bazës së të dhënave për aplikacionet",
+ "Updated \"%s\" to %s" : "U përditësua \"%s\" në %s",
+ "Disabled incompatible apps: %s" : "Aplikacione të papajtueshme të bllokuara: %s",
+ "No image or file provided" : "Nuk është dhënë asnjë imazh apo skedar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
+ "No temporary profile picture available, try again" : "Nuk është i mundur asnjë imazh profili i përkohshëm, provoni përsëri",
+ "No crop data provided" : "Nuk është dhënë asnjë parametër prerjeje",
"Sunday" : "E djelë",
"Monday" : "E hënë",
"Tuesday" : "E martë",
@@ -25,15 +35,38 @@ OC.L10N.register(
"December" : "Dhjetor",
"Settings" : "Parametra",
"Saving..." : "Duke ruajtur...",
- "Reset password" : "Rivendos kodin",
+ "Couldn't send reset email. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem kontaktoni me administratorin.",
+ "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 rivendosjen e kodit 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 spam.<br>Nëse nuk është as aty, pyesni administratorin tuaj.",
+ "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?" : "Skedarët tuaj janë të kodifikuar. Nëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin.<br />Nëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj përpara se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
+ "I know what I'm doing" : "Unë e di se çfarë po bëj",
+ "Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutem kontaktoni me administratorin.",
"No" : "Jo",
"Yes" : "Po",
"Choose" : "Zgjidh",
+ "Error loading file picker template: {error}" : "Gabim gjatë ngarkimit të shabllonit të zgjedhësit të skedarëve: {error}",
"Ok" : "Në rregull",
- "_{count} file conflict_::_{count} file conflicts_" : ["",""],
+ "Error loading message template: {error}" : "Gabim gjatë ngarkimit të shabllonit të mesazheve: {error}",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt skedari","{count} konflikte skedarësh"],
+ "One file conflict" : "Një konflikt skedari",
+ "New Files" : "Skedarë të rinj",
+ "Already existing files" : "Skedarë ekzistues",
+ "Which files do you want to keep?" : "Cilët skedarë dëshironi të mbani?",
+ "If you select both versions, the copied file will have a number added to its name." : "Nëse i zgjidhni të dyja versionet, skedarit të kopjuar do ti shtohet një numër në emrin e tij.",
"Cancel" : "Anulo",
+ "Continue" : "Vazhdo",
+ "(all selected)" : "(të gjitha të zgjedhura)",
+ "({count} selected)" : "({count} të zgjedhur)",
+ "Error loading file exists template" : "Gabim gjatë ngarkimit të shabllonit të skedarit ekzistues",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web Serveri juaj nuk është konfigurar sic duhet në mënyre që të lejojë sinkronizimin e skedare pasi ndërfaqja WevDAV duket të jetë e demtuar.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ky server nuk ka lidhje në internet. Kjo dmth qe disa nga funksionalitetet si të montohet ruajtje e jashtme, njoftime mbi versione të reja apo instalimi i aplikacioneve nga palë të 3ta nuk do të funksionojnë. Qasja në distancë e skedarëve dhe dërgimi i emaileve njoftues gjithashtu mund të mos funksionojnë. Ju sugjerojmë që të aktivizoni lidhjen në internet për këtë server nëse dëshironi ti keni të gjitha funksionalitetet.",
+ "Error occurred while checking server setup" : "Gabim gjatë kontrollit të konfigurimit të serverit",
"Shared" : "Ndarë",
+ "Shared with {recipients}" : "Ndarë me {recipients}",
"Share" : "Nda",
"Error" : "Veprim i gabuar",
"Error while sharing" : "Veprim i gabuar gjatë ndarjes",
@@ -41,64 +74,135 @@ OC.L10N.register(
"Error while changing permissions" : "Veprim i gabuar gjatë ndryshimit të lejeve",
"Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}",
"Shared with you by {owner}" : "Ndarë me ju nga {owner}",
+ "Share with user or group …" : "Ndajeni me përdorues ose grup ...",
+ "Share link" : "Ndaje lidhjen",
+ "The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit",
"Password protect" : "Mbro me kod",
- "Allow Public Upload" : "Lejo Ngarkimin Publik",
+ "Password" : "Kodi",
+ "Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike",
"Email link to person" : "Dërgo email me lidhjen",
"Send" : "Dërgo",
"Set expiration date" : "Cakto datën e përfundimit",
+ "Expiration" : "Data e skadimit",
"Expiration date" : "Data e përfundimit",
+ "Adding user..." : "Duke shtuar përdoruesin ...",
"group" : "grupi",
"Resharing is not allowed" : "Rindarja nuk lejohet",
"Shared in {item} with {user}" : "Ndarë në {item} me {user}",
"Unshare" : "Hiq ndarjen",
+ "notify by email" : "njofto me email",
"can share" : "mund të ndajnë",
"can edit" : "mund të ndryshosh",
"access control" : "kontrollimi i hyrjeve",
"create" : "krijo",
- "update" : "azhurno",
"delete" : "elimino",
"Password protected" : "Mbrojtur me kod",
"Error unsetting expiration date" : "Veprim i gabuar gjatë heqjes së datës së përfundimit",
"Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit",
"Sending ..." : "Duke dërguar...",
"Email sent" : "Email-i u dërgua",
+ "Warning" : "Kujdes",
"The object type is not specified." : "Nuk është specifikuar tipi i objektit.",
+ "Enter new" : "Jep të re",
"Delete" : "Elimino",
"Add" : "Shto",
- "_download %n file_::_download %n files_" : ["",""],
+ "Edit tags" : "Modifiko tag",
+ "Error loading dialog template: {error}" : "Gabim gjatë ngarkimit të shabllonit: {error}",
+ "No tags selected for deletion." : "Nuk është zgjedhur asnjë tag për fshirje.",
+ "unknown text" : "tekst i panjohur",
+ "Hello world!" : "Përshendetje të gjithëve!",
+ "sunny" : "diell",
+ "Hello {name}, the weather is {weather}" : "Përshëndetje {name}, koha është {weather}",
+ "_download %n file_::_download %n files_" : ["shkarko %n skedar","shkarko %n skedarë"],
+ "Updating {productName} to version {version}, this may take a while." : "Po përditësoj {productName} në versionin {version}, kjo mund të zgjasë pak.",
+ "Please reload the page." : "Ju lutem ringarkoni faqen.",
"The update was successful. Redirecting you to ownCloud now." : "Azhurnimi u krye. Tani do t'ju kaloj tek ownCloud-i.",
+ "Couldn't reset password because the token is invalid" : "Nuk mund të rivendos fjalëkalimin sepse shenja është e pavlefshme.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem sigurohuni që përdoruesi juaj është i saktë.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet sepse nuk ekziston asnjë adresë email për këtë përdorues. Ju lutem kontaktoni me administratorin.",
"%s password reset" : "Kodi i %s -it u rivendos",
"Use the following link to reset your password: {link}" : "Përdorni lidhjen në vijim për të rivendosur kodin: {link}",
- "You will receive a link to reset your password via Email." : "Do t'iu vijë një email që përmban një lidhje për ta rivendosur kodin.",
- "Username" : "Përdoruesi",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Skedarët tuaj janë të kodifikuar. Nëqoftëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin. Nëqoftëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj para se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
- "Yes, I really want to reset my password now" : "Po, dua ta rivendos kodin tani",
"New password" : "Kodi i ri",
+ "New Password" : "Fjalëkalim i ri",
+ "Reset password" : "Rivendos kodin",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk është i mbështetur dhe %s nuk do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Për të arritur rezultatet më të mira të mundshme, ju lutem më mirë konsideroni përdorimin e një serveri GNU/Linux.",
"Personal" : "Personale",
"Users" : "Përdoruesit",
"Apps" : "App",
"Admin" : "Admin",
"Help" : "Ndihmë",
+ "Error loading tags" : "Gabim gjatë ngarkimit të etiketave.",
+ "Tag already exists" : "Etiketa ekziston",
+ "Error deleting tag(s)" : "Gabim gjatë fshirjes së etiketës(ave)",
+ "Error tagging" : "Gabim etiketimi",
+ "Error untagging" : "Gabim në heqjen e etiketës",
+ "Error favoriting" : "Gabim në ruajtjen si të preferuar",
+ "Error unfavoriting" : "Gabim në heqjen nga të preferuarat",
"Access forbidden" : "Ndalohet hyrja",
+ "File not found" : "Skedari nuk mund të gjendet",
+ "The specified document has not been found on the server." : "Dokumenti i përcaktuar nuk mund të gjendet në server.",
+ "You can click here to return to %s." : "Ju mund të klikoni këtu për tu kthyer në %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Tungjatjeta,\n\nju njoftojmë se %s ka ndarë %s me ju.\nShikojeni në: %s\n\n",
+ "The share will expire on %s." : "Ndarja do të skadojë në %s.",
+ "Cheers!" : "Gjithë të mirat",
+ "Internal Server Error" : "Gabim i brendshëm në server",
+ "The server encountered an internal error and was unable to complete your request." : "Serveri u përball me një gabim të brendshem dhe nuk mundet të mbarojë detyrën që i keni ngarkuar.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Ju lutem kontaktoni me administratorin e serverit nëse ky gabim shfaqet herë të tjera, ju lutem përfshini dhe detajet e mëposhtme teknike në raportin tuaj.",
+ "More details can be found in the server log." : "Detaje të mëtejshme mund të gjenden në listën e veprimeve të serverit.",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa tjetër: %s",
+ "Request ID: %s" : "ID e kërkesës: %s",
+ "Code: %s" : "Kodi: %s",
+ "Message: %s" : "Mesazhi: %s",
+ "File: %s" : "Skedari: %s",
+ "Line: %s" : "Rreshti: %s",
+ "Trace" : "Gjurmim",
"Security Warning" : "Paralajmërim sigurie",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Versioni juaj i PHP-së është i cënueshëm nga sulmi NULL Byte (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Ju lutem azhurnoni instalimin tuaj të PHP-së që të përdorni %s -in në mënyrë të sigurt.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dosja dhe skedarët e të dhënave tuaja mbase janë të arritshme nga interneti sepse skedari .htaccess nuk po punon.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Për më shumë informacion mbi konfigurimin e duhur të serverit tuaj, ju lutem shikoni <a href=\"%s\" target=\"_blank\">dokumentacionin</a>.",
"Create an <strong>admin account</strong>" : "Krijo një <strong>llogari administruesi</strong>",
- "Password" : "Kodi",
+ "Username" : "Përdoruesi",
+ "Storage & database" : "Ruajtja dhe baza e të dhënave",
"Data folder" : "Emri i dosjes",
"Configure the database" : "Konfiguro database-in",
+ "Only %s is available." : "Vetëm %s është e disponueshme.",
"Database user" : "Përdoruesi i database-it",
"Database password" : "Kodi i database-it",
"Database name" : "Emri i database-it",
"Database tablespace" : "Tablespace-i i database-it",
"Database host" : "Pozicioni (host) i database-it",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite do të përdoret si bazë të dhënash. Për instalime më të mëdha ju rekomandojmë që ta ndryshoni këtë.",
"Finish setup" : "Mbaro setup-in",
+ "Finishing …" : "Duke përfunduar ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Këtij aplikacioni i nevojitet JavaScript për funksionim të rregullt. Ju lutem <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivizoni JavaScript</a> dhe ringarkoni faqen.",
"%s is available. Get more information on how to update." : "%s është i disponueshëm. Merrni më shumë informacione mbi azhurnimin.",
"Log out" : "Dalje",
+ "Search" : "Kërko",
+ "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!",
+ "Please contact your administrator." : "Ju lutem kontaktoni administratorin.",
+ "Forgot your password? Reset it!" : "Keni harruar fjalëkalimin tuaj? Rivendoseni!",
"remember" : "kujto",
"Log in" : "Hyrje",
- "Alternative Logins" : "Hyrje alternative"
+ "Alternative Logins" : "Hyrje alternative",
+ "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>" : "Tungjatjeta,<br><br>dëshirojmë t'ju njoftojmë se %s ka ndarë <strong>%s</strong> me ju.<br><a href=\"%s\">Klikoni këtu për ta shikuar!</a><br>",
+ "This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.",
+ "This means only administrators can use the instance." : "Kjo dmth që vetëm administratorët mund të shfrytëzojnë instancën.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktoni administratorin e sistemit nëse ky mesazh vazhdon ose është shfaqur papritmas.",
+ "Thank you for your patience." : "Ju faleminderit për durimin tuaj.",
+ "You are accessing the server from an untrusted domain." : "Ju po qaseni në server nga një domain jo i besuar.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Ju lutem kontaktoni me administratorin. Nëse jeni administrator i kësaj instance, konfiguroni parametrin \"domain i besuar\" në config/config.php . Një konfigurim shembull është dhënë në config/config.sample.php",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Në varësi të konfigurimit tuaj, ju si administrator mundet gjithashtu të jeni i aftë të përdorni butonin e mëposhtëm për ti dhënë besim këtij domain.",
+ "Add \"%s\" as trusted domain" : "Shtoni \"%s\" si domain të besuar",
+ "%s will be updated to version %s." : "%s to të përditësohet në versionin %s.",
+ "The following apps will be disabled:" : "Keto aplikacione do të bllokohen:",
+ "The theme %s has been disabled." : "Tema %s u bllokua.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Ju lutem sigurohuni që bazës së të dhënave, dosjes së konfigurimit dhe dosjes së të dhënave ti jetë bërë një kopje rezervë përpara se të vazhdoni më tutje.",
+ "Start update" : "Fillo përditësimin.",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Për të shmangur momente bllokimi gjatë punës me instalime të mëdha, në vend të kësaj ju mund të kryeni komandën e mëposhtme nga dosja juaj e instalimit:",
+ "This %s instance is currently being updated, which may take a while." : "Kjo instancë %s është në proces përditësimi, i cili mund të zgjasë pak kohë.",
+ "This page will refresh itself when the %s instance is available again." : "Kjo faqe do të ringarkohet automatikisht kur instanca %s të jetë sërish e disponueshme."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index 72230681a4e..fcd69c40fd6 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -1,7 +1,17 @@
{ "translations": {
+ "Couldn't send mail to following users: %s " : "Nuk mund ti dërgoj e-mail këtyre përdoruesve: %s",
"Turned on maintenance mode" : "Mënyra e mirëmbajtjes u aktivizua",
"Turned off maintenance mode" : "Mënyra e mirëmbajtjes u çaktivizua",
"Updated database" : "Database-i u azhurnua",
+ "Checked database schema update" : "Përditësim i skemës së kontrolluar të bazës së të dhënave",
+ "Checked database schema update for apps" : "Përditësim i skemës së kontrolluar të bazës së të dhënave për aplikacionet",
+ "Updated \"%s\" to %s" : "U përditësua \"%s\" në %s",
+ "Disabled incompatible apps: %s" : "Aplikacione të papajtueshme të bllokuara: %s",
+ "No image or file provided" : "Nuk është dhënë asnjë imazh apo skedar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
+ "No temporary profile picture available, try again" : "Nuk është i mundur asnjë imazh profili i përkohshëm, provoni përsëri",
+ "No crop data provided" : "Nuk është dhënë asnjë parametër prerjeje",
"Sunday" : "E djelë",
"Monday" : "E hënë",
"Tuesday" : "E martë",
@@ -23,15 +33,38 @@
"December" : "Dhjetor",
"Settings" : "Parametra",
"Saving..." : "Duke ruajtur...",
- "Reset password" : "Rivendos kodin",
+ "Couldn't send reset email. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem kontaktoni me administratorin.",
+ "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 rivendosjen e kodit 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 spam.<br>Nëse nuk është as aty, pyesni administratorin tuaj.",
+ "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?" : "Skedarët tuaj janë të kodifikuar. Nëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin.<br />Nëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj përpara se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
+ "I know what I'm doing" : "Unë e di se çfarë po bëj",
+ "Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutem kontaktoni me administratorin.",
"No" : "Jo",
"Yes" : "Po",
"Choose" : "Zgjidh",
+ "Error loading file picker template: {error}" : "Gabim gjatë ngarkimit të shabllonit të zgjedhësit të skedarëve: {error}",
"Ok" : "Në rregull",
- "_{count} file conflict_::_{count} file conflicts_" : ["",""],
+ "Error loading message template: {error}" : "Gabim gjatë ngarkimit të shabllonit të mesazheve: {error}",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt skedari","{count} konflikte skedarësh"],
+ "One file conflict" : "Një konflikt skedari",
+ "New Files" : "Skedarë të rinj",
+ "Already existing files" : "Skedarë ekzistues",
+ "Which files do you want to keep?" : "Cilët skedarë dëshironi të mbani?",
+ "If you select both versions, the copied file will have a number added to its name." : "Nëse i zgjidhni të dyja versionet, skedarit të kopjuar do ti shtohet një numër në emrin e tij.",
"Cancel" : "Anulo",
+ "Continue" : "Vazhdo",
+ "(all selected)" : "(të gjitha të zgjedhura)",
+ "({count} selected)" : "({count} të zgjedhur)",
+ "Error loading file exists template" : "Gabim gjatë ngarkimit të shabllonit të skedarit ekzistues",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web Serveri juaj nuk është konfigurar sic duhet në mënyre që të lejojë sinkronizimin e skedare pasi ndërfaqja WevDAV duket të jetë e demtuar.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ky server nuk ka lidhje në internet. Kjo dmth qe disa nga funksionalitetet si të montohet ruajtje e jashtme, njoftime mbi versione të reja apo instalimi i aplikacioneve nga palë të 3ta nuk do të funksionojnë. Qasja në distancë e skedarëve dhe dërgimi i emaileve njoftues gjithashtu mund të mos funksionojnë. Ju sugjerojmë që të aktivizoni lidhjen në internet për këtë server nëse dëshironi ti keni të gjitha funksionalitetet.",
+ "Error occurred while checking server setup" : "Gabim gjatë kontrollit të konfigurimit të serverit",
"Shared" : "Ndarë",
+ "Shared with {recipients}" : "Ndarë me {recipients}",
"Share" : "Nda",
"Error" : "Veprim i gabuar",
"Error while sharing" : "Veprim i gabuar gjatë ndarjes",
@@ -39,64 +72,135 @@
"Error while changing permissions" : "Veprim i gabuar gjatë ndryshimit të lejeve",
"Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}",
"Shared with you by {owner}" : "Ndarë me ju nga {owner}",
+ "Share with user or group …" : "Ndajeni me përdorues ose grup ...",
+ "Share link" : "Ndaje lidhjen",
+ "The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit",
"Password protect" : "Mbro me kod",
- "Allow Public Upload" : "Lejo Ngarkimin Publik",
+ "Password" : "Kodi",
+ "Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike",
"Email link to person" : "Dërgo email me lidhjen",
"Send" : "Dërgo",
"Set expiration date" : "Cakto datën e përfundimit",
+ "Expiration" : "Data e skadimit",
"Expiration date" : "Data e përfundimit",
+ "Adding user..." : "Duke shtuar përdoruesin ...",
"group" : "grupi",
"Resharing is not allowed" : "Rindarja nuk lejohet",
"Shared in {item} with {user}" : "Ndarë në {item} me {user}",
"Unshare" : "Hiq ndarjen",
+ "notify by email" : "njofto me email",
"can share" : "mund të ndajnë",
"can edit" : "mund të ndryshosh",
"access control" : "kontrollimi i hyrjeve",
"create" : "krijo",
- "update" : "azhurno",
"delete" : "elimino",
"Password protected" : "Mbrojtur me kod",
"Error unsetting expiration date" : "Veprim i gabuar gjatë heqjes së datës së përfundimit",
"Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit",
"Sending ..." : "Duke dërguar...",
"Email sent" : "Email-i u dërgua",
+ "Warning" : "Kujdes",
"The object type is not specified." : "Nuk është specifikuar tipi i objektit.",
+ "Enter new" : "Jep të re",
"Delete" : "Elimino",
"Add" : "Shto",
- "_download %n file_::_download %n files_" : ["",""],
+ "Edit tags" : "Modifiko tag",
+ "Error loading dialog template: {error}" : "Gabim gjatë ngarkimit të shabllonit: {error}",
+ "No tags selected for deletion." : "Nuk është zgjedhur asnjë tag për fshirje.",
+ "unknown text" : "tekst i panjohur",
+ "Hello world!" : "Përshendetje të gjithëve!",
+ "sunny" : "diell",
+ "Hello {name}, the weather is {weather}" : "Përshëndetje {name}, koha është {weather}",
+ "_download %n file_::_download %n files_" : ["shkarko %n skedar","shkarko %n skedarë"],
+ "Updating {productName} to version {version}, this may take a while." : "Po përditësoj {productName} në versionin {version}, kjo mund të zgjasë pak.",
+ "Please reload the page." : "Ju lutem ringarkoni faqen.",
"The update was successful. Redirecting you to ownCloud now." : "Azhurnimi u krye. Tani do t'ju kaloj tek ownCloud-i.",
+ "Couldn't reset password because the token is invalid" : "Nuk mund të rivendos fjalëkalimin sepse shenja është e pavlefshme.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem sigurohuni që përdoruesi juaj është i saktë.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet sepse nuk ekziston asnjë adresë email për këtë përdorues. Ju lutem kontaktoni me administratorin.",
"%s password reset" : "Kodi i %s -it u rivendos",
"Use the following link to reset your password: {link}" : "Përdorni lidhjen në vijim për të rivendosur kodin: {link}",
- "You will receive a link to reset your password via Email." : "Do t'iu vijë një email që përmban një lidhje për ta rivendosur kodin.",
- "Username" : "Përdoruesi",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Skedarët tuaj janë të kodifikuar. Nëqoftëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin. Nëqoftëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj para se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
- "Yes, I really want to reset my password now" : "Po, dua ta rivendos kodin tani",
"New password" : "Kodi i ri",
+ "New Password" : "Fjalëkalim i ri",
+ "Reset password" : "Rivendos kodin",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk është i mbështetur dhe %s nuk do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Për të arritur rezultatet më të mira të mundshme, ju lutem më mirë konsideroni përdorimin e një serveri GNU/Linux.",
"Personal" : "Personale",
"Users" : "Përdoruesit",
"Apps" : "App",
"Admin" : "Admin",
"Help" : "Ndihmë",
+ "Error loading tags" : "Gabim gjatë ngarkimit të etiketave.",
+ "Tag already exists" : "Etiketa ekziston",
+ "Error deleting tag(s)" : "Gabim gjatë fshirjes së etiketës(ave)",
+ "Error tagging" : "Gabim etiketimi",
+ "Error untagging" : "Gabim në heqjen e etiketës",
+ "Error favoriting" : "Gabim në ruajtjen si të preferuar",
+ "Error unfavoriting" : "Gabim në heqjen nga të preferuarat",
"Access forbidden" : "Ndalohet hyrja",
+ "File not found" : "Skedari nuk mund të gjendet",
+ "The specified document has not been found on the server." : "Dokumenti i përcaktuar nuk mund të gjendet në server.",
+ "You can click here to return to %s." : "Ju mund të klikoni këtu për tu kthyer në %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Tungjatjeta,\n\nju njoftojmë se %s ka ndarë %s me ju.\nShikojeni në: %s\n\n",
+ "The share will expire on %s." : "Ndarja do të skadojë në %s.",
+ "Cheers!" : "Gjithë të mirat",
+ "Internal Server Error" : "Gabim i brendshëm në server",
+ "The server encountered an internal error and was unable to complete your request." : "Serveri u përball me një gabim të brendshem dhe nuk mundet të mbarojë detyrën që i keni ngarkuar.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Ju lutem kontaktoni me administratorin e serverit nëse ky gabim shfaqet herë të tjera, ju lutem përfshini dhe detajet e mëposhtme teknike në raportin tuaj.",
+ "More details can be found in the server log." : "Detaje të mëtejshme mund të gjenden në listën e veprimeve të serverit.",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa tjetër: %s",
+ "Request ID: %s" : "ID e kërkesës: %s",
+ "Code: %s" : "Kodi: %s",
+ "Message: %s" : "Mesazhi: %s",
+ "File: %s" : "Skedari: %s",
+ "Line: %s" : "Rreshti: %s",
+ "Trace" : "Gjurmim",
"Security Warning" : "Paralajmërim sigurie",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Versioni juaj i PHP-së është i cënueshëm nga sulmi NULL Byte (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Ju lutem azhurnoni instalimin tuaj të PHP-së që të përdorni %s -in në mënyrë të sigurt.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dosja dhe skedarët e të dhënave tuaja mbase janë të arritshme nga interneti sepse skedari .htaccess nuk po punon.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Për më shumë informacion mbi konfigurimin e duhur të serverit tuaj, ju lutem shikoni <a href=\"%s\" target=\"_blank\">dokumentacionin</a>.",
"Create an <strong>admin account</strong>" : "Krijo një <strong>llogari administruesi</strong>",
- "Password" : "Kodi",
+ "Username" : "Përdoruesi",
+ "Storage & database" : "Ruajtja dhe baza e të dhënave",
"Data folder" : "Emri i dosjes",
"Configure the database" : "Konfiguro database-in",
+ "Only %s is available." : "Vetëm %s është e disponueshme.",
"Database user" : "Përdoruesi i database-it",
"Database password" : "Kodi i database-it",
"Database name" : "Emri i database-it",
"Database tablespace" : "Tablespace-i i database-it",
"Database host" : "Pozicioni (host) i database-it",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite do të përdoret si bazë të dhënash. Për instalime më të mëdha ju rekomandojmë që ta ndryshoni këtë.",
"Finish setup" : "Mbaro setup-in",
+ "Finishing …" : "Duke përfunduar ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Këtij aplikacioni i nevojitet JavaScript për funksionim të rregullt. Ju lutem <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivizoni JavaScript</a> dhe ringarkoni faqen.",
"%s is available. Get more information on how to update." : "%s është i disponueshëm. Merrni më shumë informacione mbi azhurnimin.",
"Log out" : "Dalje",
+ "Search" : "Kërko",
+ "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!",
+ "Please contact your administrator." : "Ju lutem kontaktoni administratorin.",
+ "Forgot your password? Reset it!" : "Keni harruar fjalëkalimin tuaj? Rivendoseni!",
"remember" : "kujto",
"Log in" : "Hyrje",
- "Alternative Logins" : "Hyrje alternative"
+ "Alternative Logins" : "Hyrje alternative",
+ "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>" : "Tungjatjeta,<br><br>dëshirojmë t'ju njoftojmë se %s ka ndarë <strong>%s</strong> me ju.<br><a href=\"%s\">Klikoni këtu për ta shikuar!</a><br>",
+ "This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.",
+ "This means only administrators can use the instance." : "Kjo dmth që vetëm administratorët mund të shfrytëzojnë instancën.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktoni administratorin e sistemit nëse ky mesazh vazhdon ose është shfaqur papritmas.",
+ "Thank you for your patience." : "Ju faleminderit për durimin tuaj.",
+ "You are accessing the server from an untrusted domain." : "Ju po qaseni në server nga një domain jo i besuar.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Ju lutem kontaktoni me administratorin. Nëse jeni administrator i kësaj instance, konfiguroni parametrin \"domain i besuar\" në config/config.php . Një konfigurim shembull është dhënë në config/config.sample.php",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Në varësi të konfigurimit tuaj, ju si administrator mundet gjithashtu të jeni i aftë të përdorni butonin e mëposhtëm për ti dhënë besim këtij domain.",
+ "Add \"%s\" as trusted domain" : "Shtoni \"%s\" si domain të besuar",
+ "%s will be updated to version %s." : "%s to të përditësohet në versionin %s.",
+ "The following apps will be disabled:" : "Keto aplikacione do të bllokohen:",
+ "The theme %s has been disabled." : "Tema %s u bllokua.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Ju lutem sigurohuni që bazës së të dhënave, dosjes së konfigurimit dhe dosjes së të dhënave ti jetë bërë një kopje rezervë përpara se të vazhdoni më tutje.",
+ "Start update" : "Fillo përditësimin.",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Për të shmangur momente bllokimi gjatë punës me instalime të mëdha, në vend të kësaj ju mund të kryeni komandën e mëposhtme nga dosja juaj e instalimit:",
+ "This %s instance is currently being updated, which may take a while." : "Kjo instancë %s është në proces përditësimi, i cili mund të zgjasë pak kohë.",
+ "This page will refresh itself when the %s instance is available again." : "Kjo faqe do të ringarkohet automatikisht kur instanca %s të jetë sërish e disponueshme."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 5e2c8354261..b10f72a2987 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Децембар",
"Settings" : "Поставке",
"Saving..." : "Чување у току...",
- "Reset password" : "Ресетуј лозинку",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Одабери",
@@ -38,6 +37,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "Дељено са вама и са групом {group}. Поделио {owner}.",
"Shared with you by {owner}" : "Поделио са вама {owner}",
"Password protect" : "Заштићено лозинком",
+ "Password" : "Лозинка",
"Send" : "Пошаљи",
"Set expiration date" : "Постави датум истека",
"Expiration date" : "Датум истека",
@@ -48,7 +48,6 @@ OC.L10N.register(
"can edit" : "може да мења",
"access control" : "права приступа",
"create" : "направи",
- "update" : "ажурирај",
"delete" : "обриши",
"Password protected" : "Заштићено лозинком",
"Error unsetting expiration date" : "Грешка код поништавања датума истека",
@@ -61,9 +60,8 @@ OC.L10N.register(
"Add" : "Додај",
"_download %n file_::_download %n files_" : ["","",""],
"Use the following link to reset your password: {link}" : "Овом везом ресетујте своју лозинку: {link}",
- "You will receive a link to reset your password via Email." : "Добићете везу за ресетовање лозинке путем е-поште.",
- "Username" : "Корисничко име",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетуј лозинку",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Апликације",
@@ -72,7 +70,7 @@ OC.L10N.register(
"Access forbidden" : "Забрањен приступ",
"Security Warning" : "Сигурносно упозорење",
"Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>",
- "Password" : "Лозинка",
+ "Username" : "Корисничко име",
"Data folder" : "Фацикла података",
"Configure the database" : "Подешавање базе",
"Database user" : "Корисник базе",
@@ -82,6 +80,7 @@ OC.L10N.register(
"Database host" : "Домаћин базе",
"Finish setup" : "Заврши подешавање",
"Log out" : "Одјава",
+ "Search" : "Претражи",
"remember" : "упамти",
"Log in" : "Пријава"
},
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index bfd13040906..8c8ce707f22 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -20,7 +20,6 @@
"December" : "Децембар",
"Settings" : "Поставке",
"Saving..." : "Чување у току...",
- "Reset password" : "Ресетуј лозинку",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Одабери",
@@ -36,6 +35,7 @@
"Shared with you and the group {group} by {owner}" : "Дељено са вама и са групом {group}. Поделио {owner}.",
"Shared with you by {owner}" : "Поделио са вама {owner}",
"Password protect" : "Заштићено лозинком",
+ "Password" : "Лозинка",
"Send" : "Пошаљи",
"Set expiration date" : "Постави датум истека",
"Expiration date" : "Датум истека",
@@ -46,7 +46,6 @@
"can edit" : "може да мења",
"access control" : "права приступа",
"create" : "направи",
- "update" : "ажурирај",
"delete" : "обриши",
"Password protected" : "Заштићено лозинком",
"Error unsetting expiration date" : "Грешка код поништавања датума истека",
@@ -59,9 +58,8 @@
"Add" : "Додај",
"_download %n file_::_download %n files_" : ["","",""],
"Use the following link to reset your password: {link}" : "Овом везом ресетујте своју лозинку: {link}",
- "You will receive a link to reset your password via Email." : "Добићете везу за ресетовање лозинке путем е-поште.",
- "Username" : "Корисничко име",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетуј лозинку",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Апликације",
@@ -70,7 +68,7 @@
"Access forbidden" : "Забрањен приступ",
"Security Warning" : "Сигурносно упозорење",
"Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>",
- "Password" : "Лозинка",
+ "Username" : "Корисничко име",
"Data folder" : "Фацикла података",
"Configure the database" : "Подешавање базе",
"Database user" : "Корисник базе",
@@ -80,6 +78,7 @@
"Database host" : "Домаћин базе",
"Finish setup" : "Заврши подешавање",
"Log out" : "Одјава",
+ "Search" : "Претражи",
"remember" : "упамти",
"Log in" : "Пријава"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/core/l10n/sr@latin.js b/core/l10n/sr@latin.js
index 11c3d2e40a7..549f19b51b0 100644
--- a/core/l10n/sr@latin.js
+++ b/core/l10n/sr@latin.js
@@ -1,6 +1,19 @@
OC.L10N.register(
"core",
{
+ "Couldn't send mail to following users: %s " : "Nije bilo moguće poslati e-mail sledećim korisnicima: %s",
+ "Turned on maintenance mode" : "Uključen je režim za održavanje",
+ "Turned off maintenance mode" : "Isključen je režim za održavanje",
+ "Updated database" : "Osvežena je baza podataka",
+ "Checked database schema update" : "Provereno je osvežavanje šema baze podataka",
+ "Checked database schema update for apps" : "Provereno je osvežavanje šema baze podataka za aplikacije",
+ "Updated \"%s\" to %s" : "Osveženo je \"%s\" na \"%s\"",
+ "Disabled incompatible apps: %s" : "Isključene su nekompatibilne aplikacije; %s",
+ "No image or file provided" : "Nije data slika ili fajl",
+ "Unknown filetype" : "Nepoznat tip fajla",
+ "Invalid image" : "Neispravna slika",
+ "No temporary profile picture available, try again" : "Nije dostupna privremena slika profila, pokušajte ponovo",
+ "No crop data provided" : "Nisu dati podaci za sečenje slike",
"Sunday" : "Nedelja",
"Monday" : "Ponedeljak",
"Tuesday" : "Utorak",
@@ -21,20 +34,39 @@ OC.L10N.register(
"November" : "Novembar",
"December" : "Decembar",
"Settings" : "Podešavanja",
+ "Saving..." : "Snimam...",
+ "Couldn't send reset email. Please contact your administrator." : "Nemoguće slanje e-mail-a za ponovno postavljanje lozinke. Molimo Vas kontaktirajte Vašeg administratora",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link za ponovno postavljanje Vaše lozinke je poslat na Vašu e-mail adresu. Ako ga ne primite u razumnom roku, proverite fascikle za neželjenu poštu.<br>Ako ga nema ni tamo, kontaktirajte Vašeg lokalnog administratora.",
+ "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ši fajlovi su šifrovani. Ako nista omogućili ključ za povrat fajlova, neće biti načina da dobijete ponovo svoje podatke posle promene lozinke.<br />Ako niste sigurni šta da radite, molimo Vas da kontaktirate Vašeg administratora pre nego što nastavite.<br />Da li zaista želite da nastavite?",
"I know what I'm doing" : "Znam šta radim",
- "Reset password" : "Resetuj lozinku",
+ "Password can not be changed. Please contact your administrator." : "Nije moguće promeniti lozinku. Molimo Vas, kontaktirajte Vašeg administratora.",
"No" : "Ne",
"Yes" : "Da",
"Choose" : "Izaberi",
+ "Error loading file picker template: {error}" : "Greška u učitavanju obrasca za izbor fajla: {error}",
"Ok" : "Ok",
- "_{count} file conflict_::_{count} file conflicts_" : ["","",""],
+ "Error loading message template: {error}" : "Greška u učitavanju obrasca poruke: {error}",
+ "read-only" : "samo za čitanje",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt fajlova","{count} konflikata fajlova","{count} konflikata fajlova"],
+ "One file conflict" : "Jedan konflikt fajlova",
+ "New Files" : "Novi Fajlovi",
+ "Already existing files" : "Već postojeći fajlovi",
+ "Which files do you want to keep?" : "Koje fajlove želite da zadržite ?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ako izaberete obe verzije, kopirani fajl će imati broj dodat njegovom imenu.",
"Cancel" : "Otkaži",
"Continue" : "Nastavi",
+ "(all selected)" : "(svi izabrani)",
+ "({count} selected)" : "(izabrano {count})",
+ "Error loading file exists template" : "Greška u učitavanju obrasca za postojeći fajl",
"Very weak password" : "Veoma slaba lozinka",
"Weak password" : "Slaba lozinka",
"So-so password" : "Osrednja lozinka",
"Good password" : "Dobra lozinka",
"Strong password" : "Jaka lozinka",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Vaš web server nije pravilno podešen da dozvoli sinhronizaciju fajlova zato što je neispravan WebDAV interfejs",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ovaj server nema ispravnu internet konekciju. To znači da neke od opcija kao što su montiranje spoljašnjeg skladišta, obaveštenja o osvežavanjima ili instalacija stranih aplikacija neće raditi. Daljinski pristup fajlovima i slanje e-mail-ova sa obaveštenjima možda takođe neće raditi. Predlažemo da omogućite internet konekciju za ovaj server ako želite da imate sve opcije.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaš direktorijum sa fajlovima je verovatno dostupan sa interneta. .htaccess fajl ne radi. Izričito preporučujemo da podesite svoj web server na način koji će sprečiti da direktorijum sa fajlovima bude dostupan ili da premestite direktorijum sa fajlovima izvan korenog direktorijuma web servera.",
+ "Error occurred while checking server setup" : "Došlo je do greške prilikom provere startovanja servera",
"Shared" : "Deljeno",
"Shared with {recipients}" : "Podeljeno sa {recipients}",
"Share" : "Podeli",
@@ -44,18 +76,31 @@ OC.L10N.register(
"Error while changing permissions" : "Greška u promeni dozvola",
"Shared with you and the group {group} by {owner}" : "{owner} podelio sa Vama i grupom {group} ",
"Shared with you by {owner}" : "Sa vama podelio {owner}",
+ "Share with user or group …" : "Podeli sa korisnikom ili grupom",
+ "Share link" : "Podeli prečicu",
+ "The public link will expire no later than {days} days after it is created" : "Javna prečica će isteći ne kasnije od {days} dana pošto je kreirana",
+ "Link" : "Prečica",
"Password protect" : "Zaštita lozinkom",
+ "Password" : "Lozinka",
+ "Choose a password for the public link" : "Izaberite lozinku za javnu prečicu",
+ "Allow editing" : "Dozvoli uređivanje",
"Email link to person" : "Pošalji link e-mailom",
"Send" : "Pošalji",
"Set expiration date" : "Datum isteka",
+ "Expiration" : "Isticanje",
"Expiration date" : "Datum isteka",
+ "Adding user..." : "Dodavanje korisnika...",
+ "group" : "grupa",
+ "remote" : "udaljeni",
"Resharing is not allowed" : "Dalje deljenje nije dozvoljeno",
"Shared in {item} with {user}" : "Deljeno u {item} sa {user}",
"Unshare" : "Ukljoni deljenje",
+ "notify by email" : "obavesti Email-om",
+ "can share" : "dozvoljeno deljenje",
"can edit" : "dozvoljene izmene",
"access control" : "kontrola pristupa",
"create" : "napravi",
- "update" : "ažuriranje",
+ "change" : "izmeni",
"delete" : "brisanje",
"Password protected" : "Zaštćeno lozinkom",
"Error unsetting expiration date" : "Greška u uklanjanju datuma isteka",
@@ -64,35 +109,111 @@ OC.L10N.register(
"Email sent" : "Email poslat",
"Warning" : "Upozorenje",
"The object type is not specified." : "Tip objekta nije zadan.",
+ "Enter new" : "Unesite novi",
"Delete" : "Obriši",
"Add" : "Dodaj",
- "_download %n file_::_download %n files_" : ["","",""],
+ "Edit tags" : "Uredi oznake",
+ "Error loading dialog template: {error}" : "Greška pri učitavanju obrasca dijaloga: {error}",
+ "No tags selected for deletion." : "Nijedna oznaka nije izabrana za brisanje.",
+ "unknown text" : "nepoznati tekst",
+ "Hello world!" : "Zdravo Svete!",
+ "sunny" : "sunčano",
+ "Hello {name}, the weather is {weather}" : "Zdravo {name}, vreme je {weather}",
+ "_download %n file_::_download %n files_" : ["Preuzmi %n fajl","Preuzmi %n fajlova","Preuzmi %n fajlova"],
+ "Updating {productName} to version {version}, this may take a while." : "Osvežavam {productName} na verziju {version}, ovo može potrajati.",
+ "Please reload the page." : "Molimo, ponovo učitajte stranu.",
+ "The update was unsuccessful. " : "Osvežavanje je uspelo.",
"The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspelo. Prosleđivanje na ownCloud.",
+ "Couldn't reset password because the token is invalid" : "Nije bilo moguće ponovo postaviti lozinku zbog nevažećeg kontrolnog broja",
+ "Couldn't send reset email. Please make sure your username is correct." : "Nije bilo moguće poslati Email za ponovno postavljanje. Molimo Vas da proverite da li je Vaše korisničko ime ispravno.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nije bilo moguće poslati Email za ponovno postavljanje lozinke jer nema Email adrese za ovo korisničko ime. Molimo Vas da kontaktirate Vašeg administratora.",
+ "%s password reset" : "%s lozinka ponovo postavljena",
"Use the following link to reset your password: {link}" : "Koristite sledeći link za reset lozinke: {link}",
- "You will receive a link to reset your password via Email." : "Dobićete vezu za resetovanje lozinke putem e-pošte.",
- "Username" : "Korisničko ime",
"New password" : "Nova lozinka",
+ "New Password" : "Nova lozinka",
+ "Reset password" : "Resetuj lozinku",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s neće raditi kako treba na ovoj platformi. Koristite na sopstvenu odgovornost.",
+ "For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate uzmite u obzir korišćenje GNU/Linux servera.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Izgleda da ova %s instanca radi na 32bitnom PHP okruženju i open_basedir je podešen u php.ini. Ovo će dovesti do problema sa fajlovima većim od 4 GB i nikako se ne preporučuje.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Molimo Vas da uklonite open_basedir podešavanje u Vašem php.ini ili pređite na 64bitni PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Izgleda da ova %s instanca radi na 32bitnom PHP okruženju i cURL nije instaliran. Ovo će dovesti do problema sa fajlovima većim od 4 GB i nikako se ne preporučuje.",
+ "Please install the cURL extension and restart your webserver." : "Molimo Vas da instalirate cURL ekstenziju i da ponovo pokrenete Vaš web server.",
"Personal" : "Lično",
"Users" : "Korisnici",
"Apps" : "Programi",
"Admin" : "Adninistracija",
"Help" : "Pomoć",
+ "Error loading tags" : "Greška pri učitavanju oznaka",
+ "Tag already exists" : "Oznaka već postoji",
+ "Error deleting tag(s)" : "Greška pri brisanju oznaka",
+ "Error tagging" : "Greška pri postavljanju oznake",
+ "Error untagging" : "Greška pri uklanjanju oznake",
+ "Error favoriting" : "Greška pri dodavanju omiljenog",
+ "Error unfavoriting" : "Greška pri uklanjanju omiljenog",
"Access forbidden" : "Pristup zabranjen",
+ "File not found" : "Fajl nije nađen",
+ "The specified document has not been found on the server." : "Traženi dokument nije nađen na serveru.",
+ "You can click here to return to %s." : "Možete ovde kliknuti da biste se vratili na %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej,\n\nsamo da ti javimo da je %s delio %s sa tobom.\nPogledaj na: %s\n\n",
+ "The share will expire on %s." : "Deljeni sadržaj će isteći: %s",
+ "Cheers!" : "U zdravlje!",
+ "Internal Server Error" : "Interna Serverska Greška",
+ "The server encountered an internal error and was unable to complete your request." : "Server je naišao na internu grešku i nije mogao da završi obradu Vašeg upita.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Molimo Vas da kontaktirate administratora servera ako se ova greška ponavlja, molimo da uključite tehničke podatke dole u Vašem izveštaju.",
+ "More details can be found in the server log." : "Više detalja se može naći u serverovom logu - zapisniku.",
+ "Technical details" : "Tehnički detalji",
+ "Remote Address: %s" : "Udaljena adresa: %s",
+ "Request ID: %s" : "ID zahteva: %s",
+ "Code: %s" : "Kod: %s",
+ "Message: %s" : "Poruka: %s",
+ "File: %s" : "Fajl: %s",
+ "Line: %s" : "Linija: %s",
+ "Trace" : "Zapisnik: ",
"Security Warning" : "Bezbednosno upozorenje",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Vaša PHP verzija je ranjiva na ",
+ "Please update your PHP installation to use %s securely." : "Molimo Vas da unapredite Vašu PHP instalaciju da bi koristili %s bezbedno",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da pravilno podesite server, molimo Vas da pogledate <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
"Create an <strong>admin account</strong>" : "Napravi <strong>administrativni nalog</strong>",
- "Password" : "Lozinka",
+ "Username" : "Korisničko ime",
+ "Storage & database" : "Skladište i baza podataka",
"Data folder" : "Fascikla podataka",
"Configure the database" : "Podešavanje baze",
+ "Only %s is available." : "Samo %s je na raspolaganju.",
"Database user" : "Korisnik baze",
"Database password" : "Lozinka baze",
"Database name" : "Ime baze",
"Database tablespace" : "tablespace baze",
"Database host" : "Domaćin baze",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite će se koristiti kao baza podataka. Za veće instalacije preporučujemo da promenite ovo.",
"Finish setup" : "Završi podešavanje",
+ "Finishing …" : "Završavam ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ova aplikacija zahteva JavaScript za pravilan rad. Molimo <a href=\"http://enable-javascript.com/\" target=\"_blank\"> omogućite JavaScript</a> i ponovo učitajte stranu.",
+ "%s is available. Get more information on how to update." : "%s je dostupan. Pronađite više informacija kako da izvršite osvežavanje.",
"Log out" : "Odjava",
+ "Search" : "Traži",
+ "Server side authentication failed!" : "Provera identiteta na stani servera nije uspela!",
+ "Please contact your administrator." : "Molimo Vas da kontaktirate Vašeg administratora.",
+ "Forgot your password? Reset it!" : "Zaboravili ste lozinku ? Ponovo je podesite!",
"remember" : "upamti",
- "Log in" : "Prijavi se"
+ "Log in" : "Prijavi se",
+ "Alternative Logins" : "Alternativne prijave",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej,<br><br>samo ti javljamo da je %s delio <strong>%s</strong> sa tobom.<br><a href=\"%s\">Pogledaj!</a><br><br>",
+ "This ownCloud instance is currently in single user mode." : "Ova instanca ownCloud-a je trenutno u režimu rada jednog korisnika.",
+ "This means only administrators can use the instance." : "Ovo znači da samo administratori mogu da koriste ovu instancu.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktirajte Vašeg sistem administratora ako se ova poruka često ili iznenada pojavljuje.",
+ "Thank you for your patience." : "Hvala Vam na strpljenju.",
+ "You are accessing the server from an untrusted domain." : "Pristupate serveru sa nepouzdanog domena.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Molimo Vas da kontaktirate Vašeg administratora. Ako ste Vi administrator ove instance, podesite \"trusted_domain\" podešavanje u config/config.php. Primer podešavanja je dat u 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." : "U zavisnosti od Vaše konfiguracije, kao administrator bi ste mogli da upotrebite dugme ispod da podesite da verujete ovom domenu.",
+ "Add \"%s\" as trusted domain" : "Dodaj \"%s\" kao domen od poverenja",
+ "%s will be updated to version %s." : "%s će biti unapređen na verziju %s.",
+ "The following apps will be disabled:" : "Sledeće aplikacije će biti onemogućene:",
+ "The theme %s has been disabled." : "Tema %s će biti onemogućena.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Molimo Vas da proverite da li su baza podataka, fascikla sa podešavanjima i fascikla sa podacima bekapovani pre nego što nastavite.",
+ "Start update" : "Započni osvežavanje",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Da bi izbegli preduga čekanja na većim instalacijama, možete pokrenuti sledeću komandu iz instalacionog direktorijuma:",
+ "This %s instance is currently being updated, which may take a while." : "Ova %s instance se osveževa, što može potrajati.",
+ "This page will refresh itself when the %s instance is available again." : "Ova stranica će se sama osvežiti kada %s instanca ponovo postane dostupna."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/core/l10n/sr@latin.json b/core/l10n/sr@latin.json
index a358f57d028..ee360113fbb 100644
--- a/core/l10n/sr@latin.json
+++ b/core/l10n/sr@latin.json
@@ -1,4 +1,17 @@
{ "translations": {
+ "Couldn't send mail to following users: %s " : "Nije bilo moguće poslati e-mail sledećim korisnicima: %s",
+ "Turned on maintenance mode" : "Uključen je režim za održavanje",
+ "Turned off maintenance mode" : "Isključen je režim za održavanje",
+ "Updated database" : "Osvežena je baza podataka",
+ "Checked database schema update" : "Provereno je osvežavanje šema baze podataka",
+ "Checked database schema update for apps" : "Provereno je osvežavanje šema baze podataka za aplikacije",
+ "Updated \"%s\" to %s" : "Osveženo je \"%s\" na \"%s\"",
+ "Disabled incompatible apps: %s" : "Isključene su nekompatibilne aplikacije; %s",
+ "No image or file provided" : "Nije data slika ili fajl",
+ "Unknown filetype" : "Nepoznat tip fajla",
+ "Invalid image" : "Neispravna slika",
+ "No temporary profile picture available, try again" : "Nije dostupna privremena slika profila, pokušajte ponovo",
+ "No crop data provided" : "Nisu dati podaci za sečenje slike",
"Sunday" : "Nedelja",
"Monday" : "Ponedeljak",
"Tuesday" : "Utorak",
@@ -19,20 +32,39 @@
"November" : "Novembar",
"December" : "Decembar",
"Settings" : "Podešavanja",
+ "Saving..." : "Snimam...",
+ "Couldn't send reset email. Please contact your administrator." : "Nemoguće slanje e-mail-a za ponovno postavljanje lozinke. Molimo Vas kontaktirajte Vašeg administratora",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link za ponovno postavljanje Vaše lozinke je poslat na Vašu e-mail adresu. Ako ga ne primite u razumnom roku, proverite fascikle za neželjenu poštu.<br>Ako ga nema ni tamo, kontaktirajte Vašeg lokalnog administratora.",
+ "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ši fajlovi su šifrovani. Ako nista omogućili ključ za povrat fajlova, neće biti načina da dobijete ponovo svoje podatke posle promene lozinke.<br />Ako niste sigurni šta da radite, molimo Vas da kontaktirate Vašeg administratora pre nego što nastavite.<br />Da li zaista želite da nastavite?",
"I know what I'm doing" : "Znam šta radim",
- "Reset password" : "Resetuj lozinku",
+ "Password can not be changed. Please contact your administrator." : "Nije moguće promeniti lozinku. Molimo Vas, kontaktirajte Vašeg administratora.",
"No" : "Ne",
"Yes" : "Da",
"Choose" : "Izaberi",
+ "Error loading file picker template: {error}" : "Greška u učitavanju obrasca za izbor fajla: {error}",
"Ok" : "Ok",
- "_{count} file conflict_::_{count} file conflicts_" : ["","",""],
+ "Error loading message template: {error}" : "Greška u učitavanju obrasca poruke: {error}",
+ "read-only" : "samo za čitanje",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt fajlova","{count} konflikata fajlova","{count} konflikata fajlova"],
+ "One file conflict" : "Jedan konflikt fajlova",
+ "New Files" : "Novi Fajlovi",
+ "Already existing files" : "Već postojeći fajlovi",
+ "Which files do you want to keep?" : "Koje fajlove želite da zadržite ?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ako izaberete obe verzije, kopirani fajl će imati broj dodat njegovom imenu.",
"Cancel" : "Otkaži",
"Continue" : "Nastavi",
+ "(all selected)" : "(svi izabrani)",
+ "({count} selected)" : "(izabrano {count})",
+ "Error loading file exists template" : "Greška u učitavanju obrasca za postojeći fajl",
"Very weak password" : "Veoma slaba lozinka",
"Weak password" : "Slaba lozinka",
"So-so password" : "Osrednja lozinka",
"Good password" : "Dobra lozinka",
"Strong password" : "Jaka lozinka",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Vaš web server nije pravilno podešen da dozvoli sinhronizaciju fajlova zato što je neispravan WebDAV interfejs",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ovaj server nema ispravnu internet konekciju. To znači da neke od opcija kao što su montiranje spoljašnjeg skladišta, obaveštenja o osvežavanjima ili instalacija stranih aplikacija neće raditi. Daljinski pristup fajlovima i slanje e-mail-ova sa obaveštenjima možda takođe neće raditi. Predlažemo da omogućite internet konekciju za ovaj server ako želite da imate sve opcije.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaš direktorijum sa fajlovima je verovatno dostupan sa interneta. .htaccess fajl ne radi. Izričito preporučujemo da podesite svoj web server na način koji će sprečiti da direktorijum sa fajlovima bude dostupan ili da premestite direktorijum sa fajlovima izvan korenog direktorijuma web servera.",
+ "Error occurred while checking server setup" : "Došlo je do greške prilikom provere startovanja servera",
"Shared" : "Deljeno",
"Shared with {recipients}" : "Podeljeno sa {recipients}",
"Share" : "Podeli",
@@ -42,18 +74,31 @@
"Error while changing permissions" : "Greška u promeni dozvola",
"Shared with you and the group {group} by {owner}" : "{owner} podelio sa Vama i grupom {group} ",
"Shared with you by {owner}" : "Sa vama podelio {owner}",
+ "Share with user or group …" : "Podeli sa korisnikom ili grupom",
+ "Share link" : "Podeli prečicu",
+ "The public link will expire no later than {days} days after it is created" : "Javna prečica će isteći ne kasnije od {days} dana pošto je kreirana",
+ "Link" : "Prečica",
"Password protect" : "Zaštita lozinkom",
+ "Password" : "Lozinka",
+ "Choose a password for the public link" : "Izaberite lozinku za javnu prečicu",
+ "Allow editing" : "Dozvoli uređivanje",
"Email link to person" : "Pošalji link e-mailom",
"Send" : "Pošalji",
"Set expiration date" : "Datum isteka",
+ "Expiration" : "Isticanje",
"Expiration date" : "Datum isteka",
+ "Adding user..." : "Dodavanje korisnika...",
+ "group" : "grupa",
+ "remote" : "udaljeni",
"Resharing is not allowed" : "Dalje deljenje nije dozvoljeno",
"Shared in {item} with {user}" : "Deljeno u {item} sa {user}",
"Unshare" : "Ukljoni deljenje",
+ "notify by email" : "obavesti Email-om",
+ "can share" : "dozvoljeno deljenje",
"can edit" : "dozvoljene izmene",
"access control" : "kontrola pristupa",
"create" : "napravi",
- "update" : "ažuriranje",
+ "change" : "izmeni",
"delete" : "brisanje",
"Password protected" : "Zaštćeno lozinkom",
"Error unsetting expiration date" : "Greška u uklanjanju datuma isteka",
@@ -62,35 +107,111 @@
"Email sent" : "Email poslat",
"Warning" : "Upozorenje",
"The object type is not specified." : "Tip objekta nije zadan.",
+ "Enter new" : "Unesite novi",
"Delete" : "Obriši",
"Add" : "Dodaj",
- "_download %n file_::_download %n files_" : ["","",""],
+ "Edit tags" : "Uredi oznake",
+ "Error loading dialog template: {error}" : "Greška pri učitavanju obrasca dijaloga: {error}",
+ "No tags selected for deletion." : "Nijedna oznaka nije izabrana za brisanje.",
+ "unknown text" : "nepoznati tekst",
+ "Hello world!" : "Zdravo Svete!",
+ "sunny" : "sunčano",
+ "Hello {name}, the weather is {weather}" : "Zdravo {name}, vreme je {weather}",
+ "_download %n file_::_download %n files_" : ["Preuzmi %n fajl","Preuzmi %n fajlova","Preuzmi %n fajlova"],
+ "Updating {productName} to version {version}, this may take a while." : "Osvežavam {productName} na verziju {version}, ovo može potrajati.",
+ "Please reload the page." : "Molimo, ponovo učitajte stranu.",
+ "The update was unsuccessful. " : "Osvežavanje je uspelo.",
"The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspelo. Prosleđivanje na ownCloud.",
+ "Couldn't reset password because the token is invalid" : "Nije bilo moguće ponovo postaviti lozinku zbog nevažećeg kontrolnog broja",
+ "Couldn't send reset email. Please make sure your username is correct." : "Nije bilo moguće poslati Email za ponovno postavljanje. Molimo Vas da proverite da li je Vaše korisničko ime ispravno.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nije bilo moguće poslati Email za ponovno postavljanje lozinke jer nema Email adrese za ovo korisničko ime. Molimo Vas da kontaktirate Vašeg administratora.",
+ "%s password reset" : "%s lozinka ponovo postavljena",
"Use the following link to reset your password: {link}" : "Koristite sledeći link za reset lozinke: {link}",
- "You will receive a link to reset your password via Email." : "Dobićete vezu za resetovanje lozinke putem e-pošte.",
- "Username" : "Korisničko ime",
"New password" : "Nova lozinka",
+ "New Password" : "Nova lozinka",
+ "Reset password" : "Resetuj lozinku",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s neće raditi kako treba na ovoj platformi. Koristite na sopstvenu odgovornost.",
+ "For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate uzmite u obzir korišćenje GNU/Linux servera.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Izgleda da ova %s instanca radi na 32bitnom PHP okruženju i open_basedir je podešen u php.ini. Ovo će dovesti do problema sa fajlovima većim od 4 GB i nikako se ne preporučuje.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Molimo Vas da uklonite open_basedir podešavanje u Vašem php.ini ili pređite na 64bitni PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Izgleda da ova %s instanca radi na 32bitnom PHP okruženju i cURL nije instaliran. Ovo će dovesti do problema sa fajlovima većim od 4 GB i nikako se ne preporučuje.",
+ "Please install the cURL extension and restart your webserver." : "Molimo Vas da instalirate cURL ekstenziju i da ponovo pokrenete Vaš web server.",
"Personal" : "Lično",
"Users" : "Korisnici",
"Apps" : "Programi",
"Admin" : "Adninistracija",
"Help" : "Pomoć",
+ "Error loading tags" : "Greška pri učitavanju oznaka",
+ "Tag already exists" : "Oznaka već postoji",
+ "Error deleting tag(s)" : "Greška pri brisanju oznaka",
+ "Error tagging" : "Greška pri postavljanju oznake",
+ "Error untagging" : "Greška pri uklanjanju oznake",
+ "Error favoriting" : "Greška pri dodavanju omiljenog",
+ "Error unfavoriting" : "Greška pri uklanjanju omiljenog",
"Access forbidden" : "Pristup zabranjen",
+ "File not found" : "Fajl nije nađen",
+ "The specified document has not been found on the server." : "Traženi dokument nije nađen na serveru.",
+ "You can click here to return to %s." : "Možete ovde kliknuti da biste se vratili na %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej,\n\nsamo da ti javimo da je %s delio %s sa tobom.\nPogledaj na: %s\n\n",
+ "The share will expire on %s." : "Deljeni sadržaj će isteći: %s",
+ "Cheers!" : "U zdravlje!",
+ "Internal Server Error" : "Interna Serverska Greška",
+ "The server encountered an internal error and was unable to complete your request." : "Server je naišao na internu grešku i nije mogao da završi obradu Vašeg upita.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Molimo Vas da kontaktirate administratora servera ako se ova greška ponavlja, molimo da uključite tehničke podatke dole u Vašem izveštaju.",
+ "More details can be found in the server log." : "Više detalja se može naći u serverovom logu - zapisniku.",
+ "Technical details" : "Tehnički detalji",
+ "Remote Address: %s" : "Udaljena adresa: %s",
+ "Request ID: %s" : "ID zahteva: %s",
+ "Code: %s" : "Kod: %s",
+ "Message: %s" : "Poruka: %s",
+ "File: %s" : "Fajl: %s",
+ "Line: %s" : "Linija: %s",
+ "Trace" : "Zapisnik: ",
"Security Warning" : "Bezbednosno upozorenje",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Vaša PHP verzija je ranjiva na ",
+ "Please update your PHP installation to use %s securely." : "Molimo Vas da unapredite Vašu PHP instalaciju da bi koristili %s bezbedno",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da pravilno podesite server, molimo Vas da pogledate <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
"Create an <strong>admin account</strong>" : "Napravi <strong>administrativni nalog</strong>",
- "Password" : "Lozinka",
+ "Username" : "Korisničko ime",
+ "Storage & database" : "Skladište i baza podataka",
"Data folder" : "Fascikla podataka",
"Configure the database" : "Podešavanje baze",
+ "Only %s is available." : "Samo %s je na raspolaganju.",
"Database user" : "Korisnik baze",
"Database password" : "Lozinka baze",
"Database name" : "Ime baze",
"Database tablespace" : "tablespace baze",
"Database host" : "Domaćin baze",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite će se koristiti kao baza podataka. Za veće instalacije preporučujemo da promenite ovo.",
"Finish setup" : "Završi podešavanje",
+ "Finishing …" : "Završavam ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Ova aplikacija zahteva JavaScript za pravilan rad. Molimo <a href=\"http://enable-javascript.com/\" target=\"_blank\"> omogućite JavaScript</a> i ponovo učitajte stranu.",
+ "%s is available. Get more information on how to update." : "%s je dostupan. Pronađite više informacija kako da izvršite osvežavanje.",
"Log out" : "Odjava",
+ "Search" : "Traži",
+ "Server side authentication failed!" : "Provera identiteta na stani servera nije uspela!",
+ "Please contact your administrator." : "Molimo Vas da kontaktirate Vašeg administratora.",
+ "Forgot your password? Reset it!" : "Zaboravili ste lozinku ? Ponovo je podesite!",
"remember" : "upamti",
- "Log in" : "Prijavi se"
+ "Log in" : "Prijavi se",
+ "Alternative Logins" : "Alternativne prijave",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej,<br><br>samo ti javljamo da je %s delio <strong>%s</strong> sa tobom.<br><a href=\"%s\">Pogledaj!</a><br><br>",
+ "This ownCloud instance is currently in single user mode." : "Ova instanca ownCloud-a je trenutno u režimu rada jednog korisnika.",
+ "This means only administrators can use the instance." : "Ovo znači da samo administratori mogu da koriste ovu instancu.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktirajte Vašeg sistem administratora ako se ova poruka često ili iznenada pojavljuje.",
+ "Thank you for your patience." : "Hvala Vam na strpljenju.",
+ "You are accessing the server from an untrusted domain." : "Pristupate serveru sa nepouzdanog domena.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Molimo Vas da kontaktirate Vašeg administratora. Ako ste Vi administrator ove instance, podesite \"trusted_domain\" podešavanje u config/config.php. Primer podešavanja je dat u 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." : "U zavisnosti od Vaše konfiguracije, kao administrator bi ste mogli da upotrebite dugme ispod da podesite da verujete ovom domenu.",
+ "Add \"%s\" as trusted domain" : "Dodaj \"%s\" kao domen od poverenja",
+ "%s will be updated to version %s." : "%s će biti unapređen na verziju %s.",
+ "The following apps will be disabled:" : "Sledeće aplikacije će biti onemogućene:",
+ "The theme %s has been disabled." : "Tema %s će biti onemogućena.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Molimo Vas da proverite da li su baza podataka, fascikla sa podešavanjima i fascikla sa podacima bekapovani pre nego što nastavite.",
+ "Start update" : "Započni osvežavanje",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Da bi izbegli preduga čekanja na većim instalacijama, možete pokrenuti sledeću komandu iz instalacionog direktorijuma:",
+ "This %s instance is currently being updated, which may take a while." : "Ova %s instance se osveževa, što može potrajati.",
+ "This page will refresh itself when the %s instance is available again." : "Ova stranica će se sama osvežiti kada %s instanca ponovo postane dostupna."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index c0066471dc0..2408fd2d5d7 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -5,6 +5,8 @@ OC.L10N.register(
"Turned on maintenance mode" : "Aktiverade underhållsläge",
"Turned off maintenance mode" : "Deaktiverade underhållsläge",
"Updated database" : "Uppdaterade databasen",
+ "Checked database schema update" : "Kontrollerade uppdatering av databasschemat",
+ "Checked database schema update for apps" : "Kontrollerade uppdatering av databasschemat för applikationer",
"Updated \"%s\" to %s" : "Uppdaterade \"%s\" till %s",
"Disabled incompatible apps: %s" : "Inaktiverade inkompatibla appar: %s",
"No image or file provided" : "Ingen bild eller fil har tillhandahållits",
@@ -37,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
- "Reset password" : "Återställ lösenordet",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
"Yes" : "Ja",
@@ -45,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Fel uppstod för filväljarmall: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Fel uppstod under inläsningen av meddelandemallen: {error}",
+ "read-only" : "skrivskyddad",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
"One file conflict" : "En filkonflikt",
"New Files" : "Nya filer",
@@ -63,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Starkt lösenord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Servern har ingen fungerande internetanslutning. Detta innebär att en del av de funktioner som montering av extern lagring, notifieringar om uppdateringar eller installation av 3: e part appar inte fungerar. Åtkomst till filer och skicka e-postmeddelanden fungerar troligen inte heller. Vi rekommenderar starkt att aktivera en internetuppkoppling för denna server om du vill ha alla funktioner.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din datakatalog och dina filer är förmodligen åtkomliga från internet. Filen .htaccess fungerar inte. Vi rekommenderar starkt att du konfigurerar din webbserver så att datakatalogen inte längre är åtkomlig eller du flyttar datakatalogen utanför webbserverns rotkatalog.",
"Error occurred while checking server setup" : "Ett fel inträffade när en kontroll utav servens setup gjordes",
"Shared" : "Delad",
"Shared with {recipients}" : "Delad med {recipients}",
@@ -76,15 +79,19 @@ OC.L10N.register(
"Share with user or group …" : "Dela med användare eller grupp...",
"Share link" : "Dela länk",
"The public link will expire no later than {days} days after it is created" : "Den publika länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
+ "Link" : "Länk",
"Password protect" : "Lösenordsskydda",
+ "Password" : "Lösenord",
"Choose a password for the public link" : "Välj ett lösenord för den publika länken",
- "Allow Public Upload" : "Tillåt publik uppladdning",
+ "Allow editing" : "Tillåt redigering",
"Email link to person" : "E-posta länk till person",
"Send" : "Skicka",
"Set expiration date" : "Sätt utgångsdatum",
+ "Expiration" : "Upphör",
"Expiration date" : "Utgångsdatum",
"Adding user..." : "Lägger till användare...",
"group" : "Grupp",
+ "remote" : "fjärr",
"Resharing is not allowed" : "Dela vidare är inte tillåtet",
"Shared in {item} with {user}" : "Delad i {item} med {user}",
"Unshare" : "Sluta dela",
@@ -93,7 +100,7 @@ OC.L10N.register(
"can edit" : "kan redigera",
"access control" : "åtkomstkontroll",
"create" : "skapa",
- "update" : "uppdatera",
+ "change" : "ändra",
"delete" : "radera",
"Password protected" : "Lösenordsskyddad",
"Error unsetting expiration date" : "Fel vid borttagning av utgångsdatum",
@@ -108,25 +115,29 @@ OC.L10N.register(
"Edit tags" : "Editera taggar",
"Error loading dialog template: {error}" : "Fel under laddning utav dialog mall: {fel}",
"No tags selected for deletion." : "Inga taggar valda för borttagning.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "okänd text",
+ "Hello world!" : "Hej värld!",
+ "sunny" : "soligt",
+ "Hello {name}, the weather is {weather}" : "Hej {name}, vädret är {weather}",
+ "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"],
"Updating {productName} to version {version}, this may take a while." : "Uppdaterar {productName} till version {version}, detta kan ta en stund.",
"Please reload the page." : "Vänligen ladda om sidan.",
- "The update was unsuccessful." : "Uppdateringen misslyckades.",
+ "The update was unsuccessful. " : "Uppdateringen misslyckades.",
"The update was successful. Redirecting you to ownCloud now." : "Uppdateringen lyckades. Du omdirigeras nu till OwnCloud.",
"Couldn't reset password because the token is invalid" : "Kunde inte återställa lösenordet på grund av felaktig token",
"Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmail. Vänligen kontrollera att ditt användarnamn är korrekt.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka något återställningsmail därför att det inte finns någon e-mailadress kopplad till detta användarnamn. Vänligen kontakta din administratör.",
"%s password reset" : "%s återställ lösenord",
"Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
- "You will receive a link to reset your password via Email." : "Du får en länk att återställa ditt lösenord via e-post.",
- "Username" : "Användarnamn",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dina filer är krypterade. Om du inte har aktiverat återställningsnyckeln kommer det inte att finnas någon möjlighet att få tillbaka dina filer efter att ditt lösenord har återställts. Om du är osäker, kontakta din systemadministratör innan du fortsätter. Är du verkligen säker på att fortsätta?",
- "Yes, I really want to reset my password now" : "Ja, jag vill verkligen återställa mitt lösenord nu",
- "Reset" : "Återställ",
"New password" : "Nytt lösenord",
"New Password" : "Nytt lösenord",
+ "Reset password" : "Återställ lösenordet",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
"For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ut som att denna %s instans kör i en 32bits PHP miljö och att open_basedir har blivit configurerad i php.ini. Detta ställer till problem med filer över 4GB och rekommenderas därför inte.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Var vänlig ta bort open_basedir inställningen i din php.ini eller byt till 64bits PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ut som att denna %s instans kör i en 32bits PHP miljö och att cURL inte är installerad. Detta ställer till problem med filer över 4GB och rekommenderas därför inte.",
+ "Please install the cURL extension and restart your webserver." : "Vänligen installera tillägget cURL och starta om din webbserver.",
"Personal" : "Personligt",
"Users" : "Användare",
"Apps" : "Program",
@@ -141,16 +152,30 @@ OC.L10N.register(
"Error unfavoriting" : "Fel av favorisering ",
"Access forbidden" : "Åtkomst förbjuden",
"File not found" : "Filen kunde inte hittas",
+ "The specified document has not been found on the server." : "Det angivna dokumentet hittades inte på servern.",
+ "You can click here to return to %s." : "Du kan klicka här för att återvända till %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej där!,\n\nVi vill bara meddela att %s delade %s med dig.\nTitta på den här: %s\n\n",
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
+ "Internal Server Error" : "Internt serverfel",
+ "The server encountered an internal error and was unable to complete your request." : "Servern påträffade ett internt fel och lmisslyckades att slutföra din begäran.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Vänligen kontakta serveradministratören om detta fel återkommer flera gånger, vänligen inkludera nedanstående tekniska detaljeri din felrapport.",
+ "More details can be found in the server log." : "Mer detaljer återfinns i serverns logg.",
+ "Technical details" : "Tekniska detaljer",
+ "Remote Address: %s" : "Fjärradress: %s",
+ "Request ID: %s" : "Begärd ID: %s",
+ "Code: %s" : "Kod: %s",
+ "Message: %s" : "Meddelande: %s",
+ "File: %s" : "Fil: %s",
+ "Line: %s" : "Rad: %s",
+ "Trace" : "Spåra",
"Security Warning" : "Säkerhetsvarning",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Din version av PHP är sårbar för NULL byte attack (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Var god uppdatera din PHP-installation för att använda %s säkert.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information hur du korrekt konfigurerar din servern, se ownCloud <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Skapa ett <strong>administratörskonto</strong>",
- "Password" : "Lösenord",
+ "Username" : "Användarnamn",
"Storage & database" : "Lagring & databas",
"Data folder" : "Datamapp",
"Configure the database" : "Konfigurera databasen",
@@ -163,8 +188,10 @@ OC.L10N.register(
"SQLite will be used as database. For larger installations we recommend to change this." : "SQLite kommer att användas som databas. För större installationer rekommenderar vi att du ändrar databastyp.",
"Finish setup" : "Avsluta installation",
"Finishing …" : "Avslutar ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Denna applikation kräver JavaScript för att fungera korrekt. Vänligen <a href=\"http://enable-javascript.com/\" target=\"_blank\">slå på JavaScript</a> och ladda om denna sidan.",
"%s is available. Get more information on how to update." : "%s är tillgänglig. Få mer information om hur du går tillväga för att uppdatera.",
"Log out" : "Logga ut",
+ "Search" : "Sök",
"Server side authentication failed!" : "Servern misslyckades med autentisering!",
"Please contact your administrator." : "Kontakta din administratör.",
"Forgot your password? Reset it!" : "Glömt ditt lösenord? Återställ det!",
@@ -184,6 +211,9 @@ OC.L10N.register(
"The following apps will be disabled:" : "Följande appar kommer att inaktiveras:",
"The theme %s has been disabled." : "Temat %s har blivit inaktiverat.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Vänligen säkerställ att en säkerhetskopia har gjorts av databasen, konfigurations- och datamappen innan du fortsätter.",
- "Start update" : "Starta uppdateringen"
+ "Start update" : "Starta uppdateringen",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "För att undvika timeout vid större installationer kan du istället köra följande kommando från din installationskatalog:",
+ "This %s instance is currently being updated, which may take a while." : "Denna %s instans håller på att uppdatera, vilket kan ta ett tag.",
+ "This page will refresh itself when the %s instance is available again." : "Denna sida uppdaterar sig själv när %s instansen är tillgänglig igen."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index 82a228565e3..7f1e5a6b4b9 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -3,6 +3,8 @@
"Turned on maintenance mode" : "Aktiverade underhållsläge",
"Turned off maintenance mode" : "Deaktiverade underhållsläge",
"Updated database" : "Uppdaterade databasen",
+ "Checked database schema update" : "Kontrollerade uppdatering av databasschemat",
+ "Checked database schema update for apps" : "Kontrollerade uppdatering av databasschemat för applikationer",
"Updated \"%s\" to %s" : "Uppdaterade \"%s\" till %s",
"Disabled incompatible apps: %s" : "Inaktiverade inkompatibla appar: %s",
"No image or file provided" : "Ingen bild eller fil har tillhandahållits",
@@ -35,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
- "Reset password" : "Återställ lösenordet",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
"Yes" : "Ja",
@@ -43,6 +44,7 @@
"Error loading file picker template: {error}" : "Fel uppstod för filväljarmall: {error}",
"Ok" : "Ok",
"Error loading message template: {error}" : "Fel uppstod under inläsningen av meddelandemallen: {error}",
+ "read-only" : "skrivskyddad",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
"One file conflict" : "En filkonflikt",
"New Files" : "Nya filer",
@@ -61,6 +63,7 @@
"Strong password" : "Starkt lösenord",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Servern har ingen fungerande internetanslutning. Detta innebär att en del av de funktioner som montering av extern lagring, notifieringar om uppdateringar eller installation av 3: e part appar inte fungerar. Åtkomst till filer och skicka e-postmeddelanden fungerar troligen inte heller. Vi rekommenderar starkt att aktivera en internetuppkoppling för denna server om du vill ha alla funktioner.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din datakatalog och dina filer är förmodligen åtkomliga från internet. Filen .htaccess fungerar inte. Vi rekommenderar starkt att du konfigurerar din webbserver så att datakatalogen inte längre är åtkomlig eller du flyttar datakatalogen utanför webbserverns rotkatalog.",
"Error occurred while checking server setup" : "Ett fel inträffade när en kontroll utav servens setup gjordes",
"Shared" : "Delad",
"Shared with {recipients}" : "Delad med {recipients}",
@@ -74,15 +77,19 @@
"Share with user or group …" : "Dela med användare eller grupp...",
"Share link" : "Dela länk",
"The public link will expire no later than {days} days after it is created" : "Den publika länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
+ "Link" : "Länk",
"Password protect" : "Lösenordsskydda",
+ "Password" : "Lösenord",
"Choose a password for the public link" : "Välj ett lösenord för den publika länken",
- "Allow Public Upload" : "Tillåt publik uppladdning",
+ "Allow editing" : "Tillåt redigering",
"Email link to person" : "E-posta länk till person",
"Send" : "Skicka",
"Set expiration date" : "Sätt utgångsdatum",
+ "Expiration" : "Upphör",
"Expiration date" : "Utgångsdatum",
"Adding user..." : "Lägger till användare...",
"group" : "Grupp",
+ "remote" : "fjärr",
"Resharing is not allowed" : "Dela vidare är inte tillåtet",
"Shared in {item} with {user}" : "Delad i {item} med {user}",
"Unshare" : "Sluta dela",
@@ -91,7 +98,7 @@
"can edit" : "kan redigera",
"access control" : "åtkomstkontroll",
"create" : "skapa",
- "update" : "uppdatera",
+ "change" : "ändra",
"delete" : "radera",
"Password protected" : "Lösenordsskyddad",
"Error unsetting expiration date" : "Fel vid borttagning av utgångsdatum",
@@ -106,25 +113,29 @@
"Edit tags" : "Editera taggar",
"Error loading dialog template: {error}" : "Fel under laddning utav dialog mall: {fel}",
"No tags selected for deletion." : "Inga taggar valda för borttagning.",
- "_download %n file_::_download %n files_" : ["",""],
+ "unknown text" : "okänd text",
+ "Hello world!" : "Hej värld!",
+ "sunny" : "soligt",
+ "Hello {name}, the weather is {weather}" : "Hej {name}, vädret är {weather}",
+ "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"],
"Updating {productName} to version {version}, this may take a while." : "Uppdaterar {productName} till version {version}, detta kan ta en stund.",
"Please reload the page." : "Vänligen ladda om sidan.",
- "The update was unsuccessful." : "Uppdateringen misslyckades.",
+ "The update was unsuccessful. " : "Uppdateringen misslyckades.",
"The update was successful. Redirecting you to ownCloud now." : "Uppdateringen lyckades. Du omdirigeras nu till OwnCloud.",
"Couldn't reset password because the token is invalid" : "Kunde inte återställa lösenordet på grund av felaktig token",
"Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmail. Vänligen kontrollera att ditt användarnamn är korrekt.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka något återställningsmail därför att det inte finns någon e-mailadress kopplad till detta användarnamn. Vänligen kontakta din administratör.",
"%s password reset" : "%s återställ lösenord",
"Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
- "You will receive a link to reset your password via Email." : "Du får en länk att återställa ditt lösenord via e-post.",
- "Username" : "Användarnamn",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dina filer är krypterade. Om du inte har aktiverat återställningsnyckeln kommer det inte att finnas någon möjlighet att få tillbaka dina filer efter att ditt lösenord har återställts. Om du är osäker, kontakta din systemadministratör innan du fortsätter. Är du verkligen säker på att fortsätta?",
- "Yes, I really want to reset my password now" : "Ja, jag vill verkligen återställa mitt lösenord nu",
- "Reset" : "Återställ",
"New password" : "Nytt lösenord",
"New Password" : "Nytt lösenord",
+ "Reset password" : "Återställ lösenordet",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
"For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
+ "It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ut som att denna %s instans kör i en 32bits PHP miljö och att open_basedir har blivit configurerad i php.ini. Detta ställer till problem med filer över 4GB och rekommenderas därför inte.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "Var vänlig ta bort open_basedir inställningen i din php.ini eller byt till 64bits PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Det ser ut som att denna %s instans kör i en 32bits PHP miljö och att cURL inte är installerad. Detta ställer till problem med filer över 4GB och rekommenderas därför inte.",
+ "Please install the cURL extension and restart your webserver." : "Vänligen installera tillägget cURL och starta om din webbserver.",
"Personal" : "Personligt",
"Users" : "Användare",
"Apps" : "Program",
@@ -139,16 +150,30 @@
"Error unfavoriting" : "Fel av favorisering ",
"Access forbidden" : "Åtkomst förbjuden",
"File not found" : "Filen kunde inte hittas",
+ "The specified document has not been found on the server." : "Det angivna dokumentet hittades inte på servern.",
+ "You can click here to return to %s." : "Du kan klicka här för att återvända till %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej där!,\n\nVi vill bara meddela att %s delade %s med dig.\nTitta på den här: %s\n\n",
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
+ "Internal Server Error" : "Internt serverfel",
+ "The server encountered an internal error and was unable to complete your request." : "Servern påträffade ett internt fel och lmisslyckades att slutföra din begäran.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Vänligen kontakta serveradministratören om detta fel återkommer flera gånger, vänligen inkludera nedanstående tekniska detaljeri din felrapport.",
+ "More details can be found in the server log." : "Mer detaljer återfinns i serverns logg.",
+ "Technical details" : "Tekniska detaljer",
+ "Remote Address: %s" : "Fjärradress: %s",
+ "Request ID: %s" : "Begärd ID: %s",
+ "Code: %s" : "Kod: %s",
+ "Message: %s" : "Meddelande: %s",
+ "File: %s" : "Fil: %s",
+ "Line: %s" : "Rad: %s",
+ "Trace" : "Spåra",
"Security Warning" : "Säkerhetsvarning",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Din version av PHP är sårbar för NULL byte attack (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Var god uppdatera din PHP-installation för att använda %s säkert.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information hur du korrekt konfigurerar din servern, se ownCloud <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Skapa ett <strong>administratörskonto</strong>",
- "Password" : "Lösenord",
+ "Username" : "Användarnamn",
"Storage & database" : "Lagring & databas",
"Data folder" : "Datamapp",
"Configure the database" : "Konfigurera databasen",
@@ -161,8 +186,10 @@
"SQLite will be used as database. For larger installations we recommend to change this." : "SQLite kommer att användas som databas. För större installationer rekommenderar vi att du ändrar databastyp.",
"Finish setup" : "Avsluta installation",
"Finishing …" : "Avslutar ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Denna applikation kräver JavaScript för att fungera korrekt. Vänligen <a href=\"http://enable-javascript.com/\" target=\"_blank\">slå på JavaScript</a> och ladda om denna sidan.",
"%s is available. Get more information on how to update." : "%s är tillgänglig. Få mer information om hur du går tillväga för att uppdatera.",
"Log out" : "Logga ut",
+ "Search" : "Sök",
"Server side authentication failed!" : "Servern misslyckades med autentisering!",
"Please contact your administrator." : "Kontakta din administratör.",
"Forgot your password? Reset it!" : "Glömt ditt lösenord? Återställ det!",
@@ -182,6 +209,9 @@
"The following apps will be disabled:" : "Följande appar kommer att inaktiveras:",
"The theme %s has been disabled." : "Temat %s har blivit inaktiverat.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Vänligen säkerställ att en säkerhetskopia har gjorts av databasen, konfigurations- och datamappen innan du fortsätter.",
- "Start update" : "Starta uppdateringen"
+ "Start update" : "Starta uppdateringen",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "För att undvika timeout vid större installationer kan du istället köra följande kommando från din installationskatalog:",
+ "This %s instance is currently being updated, which may take a while." : "Denna %s instans håller på att uppdatera, vilket kan ta ett tag.",
+ "This page will refresh itself when the %s instance is available again." : "Denna sida uppdaterar sig själv när %s instansen är tillgänglig igen."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ta_LK.js b/core/l10n/ta_LK.js
index 520feac8871..b28f3f3f169 100644
--- a/core/l10n/ta_LK.js
+++ b/core/l10n/ta_LK.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "மார்கழி",
"Settings" : "அமைப்புகள்",
"Saving..." : "சேமிக்கப்படுகிறது...",
- "Reset password" : "மீளமைத்த கடவுச்சொல்",
"No" : "இல்லை",
"Yes" : "ஆம்",
"Choose" : "தெரிவுசெய்க ",
@@ -37,6 +36,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "உங்களுடனும் குழுவுக்கிடையிலும் {குழு} பகிரப்பட்டுள்ளது {உரிமையாளர்}",
"Shared with you by {owner}" : "உங்களுடன் பகிரப்பட்டுள்ளது {உரிமையாளர்}",
"Password protect" : "கடவுச்சொல்லை பாதுகாத்தல்",
+ "Password" : "கடவுச்சொல்",
"Set expiration date" : "காலாவதி தேதியை குறிப்பிடுக",
"Expiration date" : "காலவதியாகும் திகதி",
"group" : "குழு",
@@ -46,7 +46,6 @@ OC.L10N.register(
"can edit" : "தொகுக்க முடியும்",
"access control" : "கட்டுப்பாடான அணுகல்",
"create" : "உருவவாக்கல்",
- "update" : "இற்றைப்படுத்தல்",
"delete" : "நீக்குக",
"Password protected" : "கடவுச்சொல் பாதுகாக்கப்பட்டது",
"Error unsetting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடாமைக்கான வழு",
@@ -57,9 +56,8 @@ OC.L10N.register(
"Add" : "சேர்க்க",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "உங்கள் கடவுச்சொல்லை மீளமைக்க பின்வரும் இணைப்பை பயன்படுத்தவும் : {இணைப்பு}",
- "You will receive a link to reset your password via Email." : "நீங்கள் மின்னஞ்சல் மூலம் உங்களுடைய கடவுச்சொல்லை மீளமைப்பதற்கான இணைப்பை பெறுவீர்கள். ",
- "Username" : "பயனாளர் பெயர்",
"New password" : "புதிய கடவுச்சொல்",
+ "Reset password" : "மீளமைத்த கடவுச்சொல்",
"Personal" : "தனிப்பட்ட",
"Users" : "பயனாளர்",
"Apps" : "செயலிகள்",
@@ -68,7 +66,7 @@ OC.L10N.register(
"Access forbidden" : "அணுக தடை",
"Security Warning" : "பாதுகாப்பு எச்சரிக்கை",
"Create an <strong>admin account</strong>" : "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக",
- "Password" : "கடவுச்சொல்",
+ "Username" : "பயனாளர் பெயர்",
"Data folder" : "தரவு கோப்புறை",
"Configure the database" : "தரவுத்தளத்தை தகவமைக்க",
"Database user" : "தரவுத்தள பயனாளர்",
@@ -78,6 +76,7 @@ OC.L10N.register(
"Database host" : "தரவுத்தள ஓம்புனர்",
"Finish setup" : "அமைப்பை முடிக்க",
"Log out" : "விடுபதிகை செய்க",
+ "Search" : "தேடுதல்",
"remember" : "ஞாபகப்படுத்துக",
"Log in" : "புகுபதிகை"
},
diff --git a/core/l10n/ta_LK.json b/core/l10n/ta_LK.json
index 41cdfe8281a..6ad4f30b4ac 100644
--- a/core/l10n/ta_LK.json
+++ b/core/l10n/ta_LK.json
@@ -20,7 +20,6 @@
"December" : "மார்கழி",
"Settings" : "அமைப்புகள்",
"Saving..." : "சேமிக்கப்படுகிறது...",
- "Reset password" : "மீளமைத்த கடவுச்சொல்",
"No" : "இல்லை",
"Yes" : "ஆம்",
"Choose" : "தெரிவுசெய்க ",
@@ -35,6 +34,7 @@
"Shared with you and the group {group} by {owner}" : "உங்களுடனும் குழுவுக்கிடையிலும் {குழு} பகிரப்பட்டுள்ளது {உரிமையாளர்}",
"Shared with you by {owner}" : "உங்களுடன் பகிரப்பட்டுள்ளது {உரிமையாளர்}",
"Password protect" : "கடவுச்சொல்லை பாதுகாத்தல்",
+ "Password" : "கடவுச்சொல்",
"Set expiration date" : "காலாவதி தேதியை குறிப்பிடுக",
"Expiration date" : "காலவதியாகும் திகதி",
"group" : "குழு",
@@ -44,7 +44,6 @@
"can edit" : "தொகுக்க முடியும்",
"access control" : "கட்டுப்பாடான அணுகல்",
"create" : "உருவவாக்கல்",
- "update" : "இற்றைப்படுத்தல்",
"delete" : "நீக்குக",
"Password protected" : "கடவுச்சொல் பாதுகாக்கப்பட்டது",
"Error unsetting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடாமைக்கான வழு",
@@ -55,9 +54,8 @@
"Add" : "சேர்க்க",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "உங்கள் கடவுச்சொல்லை மீளமைக்க பின்வரும் இணைப்பை பயன்படுத்தவும் : {இணைப்பு}",
- "You will receive a link to reset your password via Email." : "நீங்கள் மின்னஞ்சல் மூலம் உங்களுடைய கடவுச்சொல்லை மீளமைப்பதற்கான இணைப்பை பெறுவீர்கள். ",
- "Username" : "பயனாளர் பெயர்",
"New password" : "புதிய கடவுச்சொல்",
+ "Reset password" : "மீளமைத்த கடவுச்சொல்",
"Personal" : "தனிப்பட்ட",
"Users" : "பயனாளர்",
"Apps" : "செயலிகள்",
@@ -66,7 +64,7 @@
"Access forbidden" : "அணுக தடை",
"Security Warning" : "பாதுகாப்பு எச்சரிக்கை",
"Create an <strong>admin account</strong>" : "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக",
- "Password" : "கடவுச்சொல்",
+ "Username" : "பயனாளர் பெயர்",
"Data folder" : "தரவு கோப்புறை",
"Configure the database" : "தரவுத்தளத்தை தகவமைக்க",
"Database user" : "தரவுத்தள பயனாளர்",
@@ -76,6 +74,7 @@
"Database host" : "தரவுத்தள ஓம்புனர்",
"Finish setup" : "அமைப்பை முடிக்க",
"Log out" : "விடுபதிகை செய்க",
+ "Search" : "தேடுதல்",
"remember" : "ஞாபகப்படுத்துக",
"Log in" : "புகுபதிகை"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/core/l10n/te.js b/core/l10n/te.js
index 37dfe005efe..7d90eb651d0 100644
--- a/core/l10n/te.js
+++ b/core/l10n/te.js
@@ -28,6 +28,7 @@ OC.L10N.register(
"Cancel" : "రద్దుచేయి",
"Continue" : "కొనసాగించు",
"Error" : "పొరపాటు",
+ "Password" : "సంకేతపదం",
"Send" : "పంపించు",
"Expiration date" : "కాలం చెల్లు తేదీ",
"delete" : "తొలగించు",
@@ -35,12 +36,11 @@ OC.L10N.register(
"Delete" : "తొలగించు",
"Add" : "చేర్చు",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "వాడుకరి పేరు",
"New password" : "కొత్త సంకేతపదం",
"Personal" : "వ్యక్తిగతం",
"Users" : "వాడుకరులు",
"Help" : "సహాయం",
- "Password" : "సంకేతపదం",
+ "Username" : "వాడుకరి పేరు",
"Log out" : "నిష్క్రమించు"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/te.json b/core/l10n/te.json
index d8224f5ffa1..7bad561319a 100644
--- a/core/l10n/te.json
+++ b/core/l10n/te.json
@@ -26,6 +26,7 @@
"Cancel" : "రద్దుచేయి",
"Continue" : "కొనసాగించు",
"Error" : "పొరపాటు",
+ "Password" : "సంకేతపదం",
"Send" : "పంపించు",
"Expiration date" : "కాలం చెల్లు తేదీ",
"delete" : "తొలగించు",
@@ -33,12 +34,11 @@
"Delete" : "తొలగించు",
"Add" : "చేర్చు",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "వాడుకరి పేరు",
"New password" : "కొత్త సంకేతపదం",
"Personal" : "వ్యక్తిగతం",
"Users" : "వాడుకరులు",
"Help" : "సహాయం",
- "Password" : "సంకేతపదం",
+ "Username" : "వాడుకరి పేరు",
"Log out" : "నిష్క్రమించు"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js
index 7b65977d950..8ee8ee00ac8 100644
--- a/core/l10n/th_TH.js
+++ b/core/l10n/th_TH.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "ธันวาคม",
"Settings" : "ตั้งค่า",
"Saving..." : "กำลังบันทึกข้อมูล...",
- "Reset password" : "เปลี่ยนรหัสผ่าน",
"No" : "ไม่ตกลง",
"Yes" : "ตกลง",
"Choose" : "เลือก",
@@ -39,6 +38,7 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}",
"Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}",
"Password protect" : "ใส่รหัสผ่านไว้",
+ "Password" : "รหัสผ่าน",
"Email link to person" : "ส่งลิงก์ให้ทางอีเมล",
"Send" : "ส่ง",
"Set expiration date" : "กำหนดวันที่หมดอายุ",
@@ -51,7 +51,6 @@ OC.L10N.register(
"can edit" : "สามารถแก้ไข",
"access control" : "ระดับควบคุมการเข้าใช้งาน",
"create" : "สร้าง",
- "update" : "อัพเดท",
"delete" : "ลบ",
"Password protected" : "ใส่รหัสผ่านไว้",
"Error unsetting expiration date" : "เกิดข้อผิดพลาดในการยกเลิกการตั้งค่าวันที่หมดอายุ",
@@ -65,9 +64,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อยแล้ว กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้",
"Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
- "You will receive a link to reset your password via Email." : "คุณจะได้รับลิงค์เพื่อกำหนดรหัสผ่านใหม่ทางอีเมล์",
- "Username" : "ชื่อผู้ใช้งาน",
"New password" : "รหัสผ่านใหม่",
+ "Reset password" : "เปลี่ยนรหัสผ่าน",
"Personal" : "ส่วนตัว",
"Users" : "ผู้ใช้งาน",
"Apps" : "แอปฯ",
@@ -76,7 +74,7 @@ OC.L10N.register(
"Access forbidden" : "การเข้าถึงถูกหวงห้าม",
"Security Warning" : "คำเตือนเกี่ยวกับความปลอดภัย",
"Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>",
- "Password" : "รหัสผ่าน",
+ "Username" : "ชื่อผู้ใช้งาน",
"Data folder" : "โฟลเดอร์เก็บข้อมูล",
"Configure the database" : "กำหนดค่าฐานข้อมูล",
"Database user" : "ชื่อผู้ใช้งานฐานข้อมูล",
@@ -86,6 +84,7 @@ OC.L10N.register(
"Database host" : "Database host",
"Finish setup" : "ติดตั้งเรียบร้อยแล้ว",
"Log out" : "ออกจากระบบ",
+ "Search" : "ค้นหา",
"remember" : "จำรหัสผ่าน",
"Log in" : "เข้าสู่ระบบ"
},
diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json
index 12457e67752..6a19ed2d247 100644
--- a/core/l10n/th_TH.json
+++ b/core/l10n/th_TH.json
@@ -20,7 +20,6 @@
"December" : "ธันวาคม",
"Settings" : "ตั้งค่า",
"Saving..." : "กำลังบันทึกข้อมูล...",
- "Reset password" : "เปลี่ยนรหัสผ่าน",
"No" : "ไม่ตกลง",
"Yes" : "ตกลง",
"Choose" : "เลือก",
@@ -37,6 +36,7 @@
"Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}",
"Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}",
"Password protect" : "ใส่รหัสผ่านไว้",
+ "Password" : "รหัสผ่าน",
"Email link to person" : "ส่งลิงก์ให้ทางอีเมล",
"Send" : "ส่ง",
"Set expiration date" : "กำหนดวันที่หมดอายุ",
@@ -49,7 +49,6 @@
"can edit" : "สามารถแก้ไข",
"access control" : "ระดับควบคุมการเข้าใช้งาน",
"create" : "สร้าง",
- "update" : "อัพเดท",
"delete" : "ลบ",
"Password protected" : "ใส่รหัสผ่านไว้",
"Error unsetting expiration date" : "เกิดข้อผิดพลาดในการยกเลิกการตั้งค่าวันที่หมดอายุ",
@@ -63,9 +62,8 @@
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อยแล้ว กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้",
"Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
- "You will receive a link to reset your password via Email." : "คุณจะได้รับลิงค์เพื่อกำหนดรหัสผ่านใหม่ทางอีเมล์",
- "Username" : "ชื่อผู้ใช้งาน",
"New password" : "รหัสผ่านใหม่",
+ "Reset password" : "เปลี่ยนรหัสผ่าน",
"Personal" : "ส่วนตัว",
"Users" : "ผู้ใช้งาน",
"Apps" : "แอปฯ",
@@ -74,7 +72,7 @@
"Access forbidden" : "การเข้าถึงถูกหวงห้าม",
"Security Warning" : "คำเตือนเกี่ยวกับความปลอดภัย",
"Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>",
- "Password" : "รหัสผ่าน",
+ "Username" : "ชื่อผู้ใช้งาน",
"Data folder" : "โฟลเดอร์เก็บข้อมูล",
"Configure the database" : "กำหนดค่าฐานข้อมูล",
"Database user" : "ชื่อผู้ใช้งานฐานข้อมูล",
@@ -84,6 +82,7 @@
"Database host" : "Database host",
"Finish setup" : "ติดตั้งเรียบร้อยแล้ว",
"Log out" : "ออกจากระบบ",
+ "Search" : "ค้นหา",
"remember" : "จำรหัสผ่าน",
"Log in" : "เข้าสู่ระบบ"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 32144b5441c..c745ad6d210 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Makul bir süre içerisinde almadıysanız spam/gereksiz klasörlerini kontrol ediniz.<br>Bu konumlarda da yoksa yerel sistem yöneticinize sorunuz.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"I know what I'm doing" : "Ne yaptığımı biliyorum",
- "Reset password" : "Parolayı sıfırla",
"Password can not be changed. Please contact your administrator." : "Parola değiştirilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"No" : "Hayır",
"Yes" : "Evet",
@@ -47,6 +46,7 @@ OC.L10N.register(
"Error loading file picker template: {error}" : "Dosya seçici şablonu yüklenirken hata: {error}",
"Ok" : "Tamam",
"Error loading message template: {error}" : "İleti şablonu yüklenirken hata: {error}",
+ "read-only" : "salt okunur",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} dosya çakışması","{count} dosya çakışması"],
"One file conflict" : "Bir dosya çakışması",
"New Files" : "Yeni Dosyalar",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "Güçlü parola",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya eşitlemesine izin vermek üzere düzgün bir şekilde yapılandırılmamış. WebDAV arayüzü sorunlu görünüyor.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Bu sunucunun çalışan bir internet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya 3. parti uygulama kurma gibi bazı özellikler çalışmayacağı anlamına gelmektedir. Uzaktan dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için internet bağlantısını etkinleştirmenizi öneriyoruz.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Veri dizininiz ve dosyalarınız muhtemelen İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri dizinine erişimi kapatmanızı veya veri dizinini web sunucu belge kök dizini dışına almanızı şiddetle tavsiye ederiz.",
"Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu",
"Shared" : "Paylaşılan",
"Shared with {recipients}" : "{recipients} ile paylaşılmış",
@@ -79,11 +80,12 @@ OC.L10N.register(
"Share link" : "Paylaşma bağlantısı",
"The public link will expire no later than {days} days after it is created" : "Herkese açık bağlantı, oluşturulduktan en geç {days} gün sonra sona erecek",
"Password protect" : "Parola koruması",
+ "Password" : "Parola",
"Choose a password for the public link" : "Herkese açık bağlantı için bir parola seçin",
- "Allow Public Upload" : "Herkes Tarafından Gönderime İzin Ver",
"Email link to person" : "Bağlantıyı e-posta ile gönder",
"Send" : "Gönder",
"Set expiration date" : "Son kullanma tarihini ayarla",
+ "Expiration" : "Bitiş",
"Expiration date" : "Son kullanım tarihi",
"Adding user..." : "Kullanıcı ekleniyor...",
"group" : "grup",
@@ -95,7 +97,6 @@ OC.L10N.register(
"can edit" : "düzenleyebilir",
"access control" : "erişim kontrolü",
"create" : "oluştur",
- "update" : "güncelle",
"delete" : "sil",
"Password protected" : "Parola korumalı",
"Error unsetting expiration date" : "Son kullanma tarihi kaldırma hatası",
@@ -117,22 +118,19 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["%n dosya indir","%n dosya indir"],
"Updating {productName} to version {version}, this may take a while." : "{productName}, {version} sürümüne güncelleniyor, bu biraz zaman alabilir.",
"Please reload the page." : "Lütfen sayfayı yeniden yükleyin.",
- "The update was unsuccessful." : "Güncelleme başarısız oldu.",
+ "The update was unsuccessful. " : "Güncelleştirme başarısız.",
"The update was successful. Redirecting you to ownCloud now." : "Güncelleme başarılı. Şimdi ownCloud'a yönlendiriliyorsunuz.",
"Couldn't reset password because the token is invalid" : "Belirteç geçersiz olduğundan parola sıfırlanamadı",
"Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Sıfırlama e-postası, bu kullanıcı için bir e-posta adresi olmadığından gönderilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"%s password reset" : "%s parola sıfırlama",
"Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için bu bağlantıyı kullanın: {link}",
- "You will receive a link to reset your password via Email." : "Parolanızı sıfırlamak için e-posta ile bir bağlantı alacaksınız.",
- "Username" : "Kullanıcı Adı",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Eğer kurtarma anahtarını etkinleştirmediyseniz parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak. Eğer ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin. Gerçekten devam etmek istiyor musunuz?",
- "Yes, I really want to reset my password now" : "Evet, gerçekten parolamı şimdi sıfırlamak istiyorum",
- "Reset" : "Sıfırla",
"New password" : "Yeni parola",
"New Password" : "Yeni Parola",
+ "Reset password" : "Parolayı sıfırla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X desteklenmiyor ve %s bu platformda düzgün çalışmayacak. Kendi riskinizle kullanın!",
"For the best results, please consider using a GNU/Linux server instead." : "En iyi sonuçlar için GNU/Linux sunucusu kullanın.",
+ "Please install the cURL extension and restart your webserver." : "Lütfen cURL eklentisini yükleyiniz ve web sunucusunu yeniden başlatınız.",
"Personal" : "Kişisel",
"Users" : "Kullanıcılar",
"Apps" : "Uygulamalar",
@@ -170,7 +168,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Sunucunuzu nasıl ayarlayacağınıza dair bilgi için, lütfen <a href=\"%s\" target=\"_blank\">belgelendirme sayfasını</a> ziyaret edin.",
"Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun",
- "Password" : "Parola",
+ "Username" : "Kullanıcı Adı",
"Storage & database" : "Depolama ve veritabanı",
"Data folder" : "Veri klasörü",
"Configure the database" : "Veritabanını yapılandır",
@@ -186,6 +184,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Uygulama, doğru çalışabilmesi için JavaScript gerektiriyor. Lütfen <a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScript'i etkinleştirin</a> ve sayfayı yeniden yükleyin.",
"%s is available. Get more information on how to update." : "%s kullanılabilir. Nasıl güncelleyeceğiniz hakkında daha fazla bilgi alın.",
"Log out" : "Çıkış yap",
+ "Search" : "Ara",
"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.",
"Forgot your password? Reset it!" : "Parolanızı mı unuttunuz? Sıfırlayın!",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index c22d47c9e37..f504bcd192e 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Makul bir süre içerisinde almadıysanız spam/gereksiz klasörlerini kontrol ediniz.<br>Bu konumlarda da yoksa yerel sistem yöneticinize sorunuz.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"I know what I'm doing" : "Ne yaptığımı biliyorum",
- "Reset password" : "Parolayı sıfırla",
"Password can not be changed. Please contact your administrator." : "Parola değiştirilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"No" : "Hayır",
"Yes" : "Evet",
@@ -45,6 +44,7 @@
"Error loading file picker template: {error}" : "Dosya seçici şablonu yüklenirken hata: {error}",
"Ok" : "Tamam",
"Error loading message template: {error}" : "İleti şablonu yüklenirken hata: {error}",
+ "read-only" : "salt okunur",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} dosya çakışması","{count} dosya çakışması"],
"One file conflict" : "Bir dosya çakışması",
"New Files" : "Yeni Dosyalar",
@@ -63,6 +63,7 @@
"Strong password" : "Güçlü parola",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya eşitlemesine izin vermek üzere düzgün bir şekilde yapılandırılmamış. WebDAV arayüzü sorunlu görünüyor.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Bu sunucunun çalışan bir internet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya 3. parti uygulama kurma gibi bazı özellikler çalışmayacağı anlamına gelmektedir. Uzaktan dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için internet bağlantısını etkinleştirmenizi öneriyoruz.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Veri dizininiz ve dosyalarınız muhtemelen İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri dizinine erişimi kapatmanızı veya veri dizinini web sunucu belge kök dizini dışına almanızı şiddetle tavsiye ederiz.",
"Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu",
"Shared" : "Paylaşılan",
"Shared with {recipients}" : "{recipients} ile paylaşılmış",
@@ -77,11 +78,12 @@
"Share link" : "Paylaşma bağlantısı",
"The public link will expire no later than {days} days after it is created" : "Herkese açık bağlantı, oluşturulduktan en geç {days} gün sonra sona erecek",
"Password protect" : "Parola koruması",
+ "Password" : "Parola",
"Choose a password for the public link" : "Herkese açık bağlantı için bir parola seçin",
- "Allow Public Upload" : "Herkes Tarafından Gönderime İzin Ver",
"Email link to person" : "Bağlantıyı e-posta ile gönder",
"Send" : "Gönder",
"Set expiration date" : "Son kullanma tarihini ayarla",
+ "Expiration" : "Bitiş",
"Expiration date" : "Son kullanım tarihi",
"Adding user..." : "Kullanıcı ekleniyor...",
"group" : "grup",
@@ -93,7 +95,6 @@
"can edit" : "düzenleyebilir",
"access control" : "erişim kontrolü",
"create" : "oluştur",
- "update" : "güncelle",
"delete" : "sil",
"Password protected" : "Parola korumalı",
"Error unsetting expiration date" : "Son kullanma tarihi kaldırma hatası",
@@ -115,22 +116,19 @@
"_download %n file_::_download %n files_" : ["%n dosya indir","%n dosya indir"],
"Updating {productName} to version {version}, this may take a while." : "{productName}, {version} sürümüne güncelleniyor, bu biraz zaman alabilir.",
"Please reload the page." : "Lütfen sayfayı yeniden yükleyin.",
- "The update was unsuccessful." : "Güncelleme başarısız oldu.",
+ "The update was unsuccessful. " : "Güncelleştirme başarısız.",
"The update was successful. Redirecting you to ownCloud now." : "Güncelleme başarılı. Şimdi ownCloud'a yönlendiriliyorsunuz.",
"Couldn't reset password because the token is invalid" : "Belirteç geçersiz olduğundan parola sıfırlanamadı",
"Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Sıfırlama e-postası, bu kullanıcı için bir e-posta adresi olmadığından gönderilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"%s password reset" : "%s parola sıfırlama",
"Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için bu bağlantıyı kullanın: {link}",
- "You will receive a link to reset your password via Email." : "Parolanızı sıfırlamak için e-posta ile bir bağlantı alacaksınız.",
- "Username" : "Kullanıcı Adı",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Eğer kurtarma anahtarını etkinleştirmediyseniz parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak. Eğer ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin. Gerçekten devam etmek istiyor musunuz?",
- "Yes, I really want to reset my password now" : "Evet, gerçekten parolamı şimdi sıfırlamak istiyorum",
- "Reset" : "Sıfırla",
"New password" : "Yeni parola",
"New Password" : "Yeni Parola",
+ "Reset password" : "Parolayı sıfırla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X desteklenmiyor ve %s bu platformda düzgün çalışmayacak. Kendi riskinizle kullanın!",
"For the best results, please consider using a GNU/Linux server instead." : "En iyi sonuçlar için GNU/Linux sunucusu kullanın.",
+ "Please install the cURL extension and restart your webserver." : "Lütfen cURL eklentisini yükleyiniz ve web sunucusunu yeniden başlatınız.",
"Personal" : "Kişisel",
"Users" : "Kullanıcılar",
"Apps" : "Uygulamalar",
@@ -168,7 +166,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Sunucunuzu nasıl ayarlayacağınıza dair bilgi için, lütfen <a href=\"%s\" target=\"_blank\">belgelendirme sayfasını</a> ziyaret edin.",
"Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun",
- "Password" : "Parola",
+ "Username" : "Kullanıcı Adı",
"Storage & database" : "Depolama ve veritabanı",
"Data folder" : "Veri klasörü",
"Configure the database" : "Veritabanını yapılandır",
@@ -184,6 +182,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Uygulama, doğru çalışabilmesi için JavaScript gerektiriyor. Lütfen <a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScript'i etkinleştirin</a> ve sayfayı yeniden yükleyin.",
"%s is available. Get more information on how to update." : "%s kullanılabilir. Nasıl güncelleyeceğiniz hakkında daha fazla bilgi alın.",
"Log out" : "Çıkış yap",
+ "Search" : "Ara",
"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.",
"Forgot your password? Reset it!" : "Parolanızı mı unuttunuz? Sıfırlayın!",
diff --git a/core/l10n/ug.js b/core/l10n/ug.js
index d6a74751c7a..7a9df44d66f 100644
--- a/core/l10n/ug.js
+++ b/core/l10n/ug.js
@@ -30,6 +30,7 @@ OC.L10N.register(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "سىزنىڭ تور مۇلازىمېتىرىڭىز ھۆججەت قەدەمداشلاشقا يول قويىدىغان قىلىپ توغرا تەڭشەلمەپتۇ، چۈنكى WebDAV نىڭ ئېغىزى بۇزۇلغاندەك تۇرىدۇ.",
"Share" : "ھەمبەھىر",
"Error" : "خاتالىق",
+ "Password" : "ئىم",
"Send" : "يوللا",
"group" : "گۇرۇپپا",
"Unshare" : "ھەمبەھىرلىمە",
@@ -38,15 +39,15 @@ OC.L10N.register(
"Delete" : "ئۆچۈر",
"Add" : "قوش",
"_download %n file_::_download %n files_" : [""],
- "Username" : "ئىشلەتكۈچى ئاتى",
"New password" : "يېڭى ئىم",
"Personal" : "شەخسىي",
"Users" : "ئىشلەتكۈچىلەر",
"Apps" : "ئەپلەر",
"Help" : "ياردەم",
"Security Warning" : "بىخەتەرلىك ئاگاھلاندۇرۇش",
- "Password" : "ئىم",
+ "Username" : "ئىشلەتكۈچى ئاتى",
"Finish setup" : "تەڭشەك تامام",
- "Log out" : "تىزىمدىن چىق"
+ "Log out" : "تىزىمدىن چىق",
+ "Search" : "ئىزدە"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/ug.json b/core/l10n/ug.json
index bd061a85025..71c0804cde8 100644
--- a/core/l10n/ug.json
+++ b/core/l10n/ug.json
@@ -28,6 +28,7 @@
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "سىزنىڭ تور مۇلازىمېتىرىڭىز ھۆججەت قەدەمداشلاشقا يول قويىدىغان قىلىپ توغرا تەڭشەلمەپتۇ، چۈنكى WebDAV نىڭ ئېغىزى بۇزۇلغاندەك تۇرىدۇ.",
"Share" : "ھەمبەھىر",
"Error" : "خاتالىق",
+ "Password" : "ئىم",
"Send" : "يوللا",
"group" : "گۇرۇپپا",
"Unshare" : "ھەمبەھىرلىمە",
@@ -36,15 +37,15 @@
"Delete" : "ئۆچۈر",
"Add" : "قوش",
"_download %n file_::_download %n files_" : [""],
- "Username" : "ئىشلەتكۈچى ئاتى",
"New password" : "يېڭى ئىم",
"Personal" : "شەخسىي",
"Users" : "ئىشلەتكۈچىلەر",
"Apps" : "ئەپلەر",
"Help" : "ياردەم",
"Security Warning" : "بىخەتەرلىك ئاگاھلاندۇرۇش",
- "Password" : "ئىم",
+ "Username" : "ئىشلەتكۈچى ئاتى",
"Finish setup" : "تەڭشەك تامام",
- "Log out" : "تىزىمدىن چىق"
+ "Log out" : "تىزىمدىن چىق",
+ "Search" : "ئىزدە"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index a4ce73653df..e051eadf5d7 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
- "Reset password" : "Скинути пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
"No" : "Ні",
"Yes" : "Так",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "Надійний пароль",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Цей сервер не має під'єднання до Інтернету. Це означає, що деякі функції, такі як монтування зовнішніх сховищ, повідомлення про оновлення або встановлення допоміжних програм не будуть працювати. Віддалений доступ до файлів та надсилання повідомлень електронною поштою також може не працювати. Ми пропонуємо увімкнути під'єднання до Інтернету для даного сервера, якщо ви хочете мати всі можливості ownCloud.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ваш каталог з даними та Ваші файли можливо доступні з Інтернету. Файл .htaccess, наданий з ownCloud, не працює. Ми наполегливо рекомендуємо Вам налаштувати свій веб-сервер таким чином, щоб каталог data більше не був доступний, або перемістити каталог data за межі кореневого каталогу документів веб-сервера.",
"Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка",
"Shared" : "Опубліковано",
"Shared with {recipients}" : "Опубліковано для {recipients}",
@@ -79,11 +79,12 @@ OC.L10N.register(
"Share link" : "Опублікувати посилання",
"The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення",
"Password protect" : "Захистити паролем",
+ "Password" : "Пароль",
"Choose a password for the public link" : "Оберіть пароль для опублікованого посилання",
- "Allow Public Upload" : "Дозволити Публічне Завантаження",
"Email link to person" : "Ел. пошта належить Пану",
"Send" : "Надіслати",
"Set expiration date" : "Встановити термін дії",
+ "Expiration" : "Закінчення",
"Expiration date" : "Термін дії",
"Adding user..." : "Додавання користувача...",
"group" : "група",
@@ -95,7 +96,6 @@ OC.L10N.register(
"can edit" : "може редагувати",
"access control" : "контроль доступу",
"create" : "створити",
- "update" : "оновити",
"delete" : "видалити",
"Password protected" : "Захищено паролем",
"Error unsetting expiration date" : "Помилка при відміні терміна дії",
@@ -110,23 +110,22 @@ OC.L10N.register(
"Edit tags" : "Редагувати теги",
"Error loading dialog template: {error}" : "Помилка при завантаженні шаблону діалогу: {error}",
"No tags selected for deletion." : "Жодних тегів не обрано для видалення.",
- "_download %n file_::_download %n files_" : ["","",""],
+ "unknown text" : "невідомий текст",
+ "Hello world!" : "Привіт світ!",
+ "sunny" : "сонячно",
+ "Hello {name}, the weather is {weather}" : "Привіт {name}, {weather} погода",
+ "_download %n file_::_download %n files_" : ["завантяження %n файлу","завантаження %n файлів","завантаження %n файлів"],
"Updating {productName} to version {version}, this may take a while." : "Оновлення {productName} до версії {version}, це може займати деякий час.",
"Please reload the page." : "Будь ласка, перезавантажте сторінку.",
- "The update was unsuccessful." : "Оновлення завершилось невдачею.",
"The update was successful. Redirecting you to ownCloud now." : "Оновлення виконалось успішно. Перенаправляємо вас на ownCloud.",
"Couldn't reset password because the token is invalid" : "Неможливо скинути пароль, бо маркер є недійсним",
"Couldn't send reset email. Please make sure your username is correct." : "Не вдалося відправити скидання паролю. Будь ласка, переконайтеся, що ваше ім'я користувача є правильним.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.",
"%s password reset" : "%s пароль скинуто",
"Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}",
- "You will receive a link to reset your password via Email." : "Ви отримаєте посилання для скидання вашого паролю на Ел. пошту.",
- "Username" : "Ім'я користувача",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили придатний ключ відновлення, не буде ніякої можливості отримати дані назад після того, як ваш пароль буде скинутий. Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора, щоб продовжити. Ви дійсно хочете продовжити?",
- "Yes, I really want to reset my password now" : "Так, я справді бажаю скинути мій пароль зараз",
- "Reset" : "Перевстановити",
"New password" : "Новий пароль",
"New Password" : "Новий пароль",
+ "Reset password" : "Скинути пароль",
"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 серверу",
"Personal" : "Особисте",
@@ -166,7 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.",
"Create an <strong>admin account</strong>" : "Створити <strong>обліковий запис адміністратора</strong>",
- "Password" : "Пароль",
+ "Username" : "Ім'я користувача",
"Storage & database" : "Сховище і база даних",
"Data folder" : "Каталог даних",
"Configure the database" : "Налаштування бази даних",
@@ -182,6 +181,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Для цього додатка потрібна наявність Java для коректної роботи. Будь ласка, <a href=\"http://enable-javascript.com/\" target=\"_blank\"> увімкніть JavaScript </a> і перезавантажте сторінку.",
"%s is available. Get more information on how to update." : "%s доступний. Отримай більше інформації про те, як оновити.",
"Log out" : "Вихід",
+ "Search" : "Пошук",
"Server side authentication failed!" : "Помилка аутентифікації на боці Сервера !",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"Forgot your password? Reset it!" : "Забули ваш пароль? Скиньте його!",
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index 885a797ee36..20dcdcfb492 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
- "Reset password" : "Скинути пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
"No" : "Ні",
"Yes" : "Так",
@@ -63,6 +62,7 @@
"Strong password" : "Надійний пароль",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Цей сервер не має під'єднання до Інтернету. Це означає, що деякі функції, такі як монтування зовнішніх сховищ, повідомлення про оновлення або встановлення допоміжних програм не будуть працювати. Віддалений доступ до файлів та надсилання повідомлень електронною поштою також може не працювати. Ми пропонуємо увімкнути під'єднання до Інтернету для даного сервера, якщо ви хочете мати всі можливості ownCloud.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ваш каталог з даними та Ваші файли можливо доступні з Інтернету. Файл .htaccess, наданий з ownCloud, не працює. Ми наполегливо рекомендуємо Вам налаштувати свій веб-сервер таким чином, щоб каталог data більше не був доступний, або перемістити каталог data за межі кореневого каталогу документів веб-сервера.",
"Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка",
"Shared" : "Опубліковано",
"Shared with {recipients}" : "Опубліковано для {recipients}",
@@ -77,11 +77,12 @@
"Share link" : "Опублікувати посилання",
"The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення",
"Password protect" : "Захистити паролем",
+ "Password" : "Пароль",
"Choose a password for the public link" : "Оберіть пароль для опублікованого посилання",
- "Allow Public Upload" : "Дозволити Публічне Завантаження",
"Email link to person" : "Ел. пошта належить Пану",
"Send" : "Надіслати",
"Set expiration date" : "Встановити термін дії",
+ "Expiration" : "Закінчення",
"Expiration date" : "Термін дії",
"Adding user..." : "Додавання користувача...",
"group" : "група",
@@ -93,7 +94,6 @@
"can edit" : "може редагувати",
"access control" : "контроль доступу",
"create" : "створити",
- "update" : "оновити",
"delete" : "видалити",
"Password protected" : "Захищено паролем",
"Error unsetting expiration date" : "Помилка при відміні терміна дії",
@@ -108,23 +108,22 @@
"Edit tags" : "Редагувати теги",
"Error loading dialog template: {error}" : "Помилка при завантаженні шаблону діалогу: {error}",
"No tags selected for deletion." : "Жодних тегів не обрано для видалення.",
- "_download %n file_::_download %n files_" : ["","",""],
+ "unknown text" : "невідомий текст",
+ "Hello world!" : "Привіт світ!",
+ "sunny" : "сонячно",
+ "Hello {name}, the weather is {weather}" : "Привіт {name}, {weather} погода",
+ "_download %n file_::_download %n files_" : ["завантяження %n файлу","завантаження %n файлів","завантаження %n файлів"],
"Updating {productName} to version {version}, this may take a while." : "Оновлення {productName} до версії {version}, це може займати деякий час.",
"Please reload the page." : "Будь ласка, перезавантажте сторінку.",
- "The update was unsuccessful." : "Оновлення завершилось невдачею.",
"The update was successful. Redirecting you to ownCloud now." : "Оновлення виконалось успішно. Перенаправляємо вас на ownCloud.",
"Couldn't reset password because the token is invalid" : "Неможливо скинути пароль, бо маркер є недійсним",
"Couldn't send reset email. Please make sure your username is correct." : "Не вдалося відправити скидання паролю. Будь ласка, переконайтеся, що ваше ім'я користувача є правильним.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.",
"%s password reset" : "%s пароль скинуто",
"Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}",
- "You will receive a link to reset your password via Email." : "Ви отримаєте посилання для скидання вашого паролю на Ел. пошту.",
- "Username" : "Ім'я користувача",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили придатний ключ відновлення, не буде ніякої можливості отримати дані назад після того, як ваш пароль буде скинутий. Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора, щоб продовжити. Ви дійсно хочете продовжити?",
- "Yes, I really want to reset my password now" : "Так, я справді бажаю скинути мій пароль зараз",
- "Reset" : "Перевстановити",
"New password" : "Новий пароль",
"New Password" : "Новий пароль",
+ "Reset password" : "Скинути пароль",
"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 серверу",
"Personal" : "Особисте",
@@ -164,7 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.",
"Create an <strong>admin account</strong>" : "Створити <strong>обліковий запис адміністратора</strong>",
- "Password" : "Пароль",
+ "Username" : "Ім'я користувача",
"Storage & database" : "Сховище і база даних",
"Data folder" : "Каталог даних",
"Configure the database" : "Налаштування бази даних",
@@ -180,6 +179,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Для цього додатка потрібна наявність Java для коректної роботи. Будь ласка, <a href=\"http://enable-javascript.com/\" target=\"_blank\"> увімкніть JavaScript </a> і перезавантажте сторінку.",
"%s is available. Get more information on how to update." : "%s доступний. Отримай більше інформації про те, як оновити.",
"Log out" : "Вихід",
+ "Search" : "Пошук",
"Server side authentication failed!" : "Помилка аутентифікації на боці Сервера !",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"Forgot your password? Reset it!" : "Забули ваш пароль? Скиньте його!",
diff --git a/core/l10n/ur.php b/core/l10n/ur.php
deleted file mode 100644
index fdc6c81bd88..00000000000
--- a/core/l10n/ur.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
-"Error" => "خرابی"
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/ur_PK.js b/core/l10n/ur_PK.js
index ce5c57e5fdf..ebbd8234b2f 100644
--- a/core/l10n/ur_PK.js
+++ b/core/l10n/ur_PK.js
@@ -29,7 +29,6 @@ OC.L10N.register(
"December" : "دسمبر",
"Settings" : "ترتیبات",
"Saving..." : "محفوظ ھو رہا ہے ...",
- "Reset password" : "ری سیٹ پاسورڈ",
"No" : "نہیں",
"Yes" : "ہاں",
"Choose" : "منتخب کریں",
@@ -59,8 +58,8 @@ OC.L10N.register(
"Share with user or group …" : "صارف یا مجموعہ کے ساتھ اشتراک کریں ...",
"Share link" : "اشتراک لنک",
"Password protect" : "محفوظ پاسورڈ",
+ "Password" : "پاسورڈ",
"Choose a password for the public link" : "عوامی لنک کے لئےپاس ورڈ منتخب کریں",
- "Allow Public Upload" : "پبلک اپ لوڈ کرنے کی اجازت دیں",
"Email link to person" : "شحص کے لیے ای میل لنک",
"Send" : "بھجیں",
"Set expiration date" : "تاریخ معیاد سیٹ کریں",
@@ -73,7 +72,6 @@ OC.L10N.register(
"can edit" : "تبدیل کر سکے ھیں",
"access control" : "اسیس کنٹرول",
"create" : "نیا بنائیں",
- "update" : "اپ ڈیٹ",
"delete" : "ختم کریں",
"Password protected" : "پاسورڈ سے محفوظ کیا گیا ہے",
"Error unsetting expiration date" : "خرابی غیر تصحیح تاریخ معیاد",
@@ -90,11 +88,8 @@ OC.L10N.register(
"Please reload the page." : "براہ مہربانی صفحہ دوبارہ لوڈ کریں.",
"The update was successful. Redirecting you to ownCloud now." : "اپ ڈیٹ کامیاب تھی۔ اپ کو اون کلوڈ سے منسلک کیا جا رہا ہے",
"Use the following link to reset your password: {link}" : "اپنا پاسورڈ ری سیٹ کرنے کے لیے اس لنک پر کلک کریں۔ {link}",
- "You will receive a link to reset your password via Email." : "آپ ای میل کے ذریعے اپنے پاسورڈ ری سیٹ کا لنک موصول کریں گے",
- "Username" : "یوزر نیم",
- "Yes, I really want to reset my password now" : "جی ہاں، میں واقعی ابھی اپنا پاس ورڈ ری سیٹ کرنا چاہتا ہوں",
- "Reset" : "ری سیٹ",
"New password" : "نیا پاسورڈ",
+ "Reset password" : "ری سیٹ پاسورڈ",
"Personal" : "شخصی",
"Users" : "صارفین",
"Apps" : "ایپز",
@@ -107,7 +102,7 @@ OC.L10N.register(
"Please update your PHP installation to use %s securely." : " براہ مہربانی %s کو بحفاظت استعمال کرنے کے پی ایچ پی کی تنصیب اپڈیٹ کریں",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "آپ کی ڈیٹا ڈائریکٹری اور فائلیں امکان ہےانٹرنیٹ سے قابل رسائی ہیں کیونکہ htaccess. فائل کام نہیں کرتا ہے",
"Create an <strong>admin account</strong>" : "ایک<strong> ایڈمن اکاؤنٹ</strong> بنائیں",
- "Password" : "پاسورڈ",
+ "Username" : "یوزر نیم",
"Storage & database" : "ذخیرہ اور ڈیٹا بیس",
"Data folder" : "ڈیٹا فولڈر",
"Configure the database" : "ڈیٹا بیس کونفگر کریں",
@@ -120,6 +115,7 @@ OC.L10N.register(
"Finishing …" : "تکمیل ...",
"%s is available. Get more information on how to update." : "%s دستیاب ہے. اپ ڈیٹ کرنے کے بارے میں مزید معلومات حاصل کریں.",
"Log out" : "لاگ آؤٹ",
+ "Search" : "تلاش",
"remember" : "یاد رکھیں",
"Log in" : "لاگ ان",
"Alternative Logins" : "متبادل لاگ ان ",
diff --git a/core/l10n/ur_PK.json b/core/l10n/ur_PK.json
index 6f3a5993a9f..f79f48f0a66 100644
--- a/core/l10n/ur_PK.json
+++ b/core/l10n/ur_PK.json
@@ -27,7 +27,6 @@
"December" : "دسمبر",
"Settings" : "ترتیبات",
"Saving..." : "محفوظ ھو رہا ہے ...",
- "Reset password" : "ری سیٹ پاسورڈ",
"No" : "نہیں",
"Yes" : "ہاں",
"Choose" : "منتخب کریں",
@@ -57,8 +56,8 @@
"Share with user or group …" : "صارف یا مجموعہ کے ساتھ اشتراک کریں ...",
"Share link" : "اشتراک لنک",
"Password protect" : "محفوظ پاسورڈ",
+ "Password" : "پاسورڈ",
"Choose a password for the public link" : "عوامی لنک کے لئےپاس ورڈ منتخب کریں",
- "Allow Public Upload" : "پبلک اپ لوڈ کرنے کی اجازت دیں",
"Email link to person" : "شحص کے لیے ای میل لنک",
"Send" : "بھجیں",
"Set expiration date" : "تاریخ معیاد سیٹ کریں",
@@ -71,7 +70,6 @@
"can edit" : "تبدیل کر سکے ھیں",
"access control" : "اسیس کنٹرول",
"create" : "نیا بنائیں",
- "update" : "اپ ڈیٹ",
"delete" : "ختم کریں",
"Password protected" : "پاسورڈ سے محفوظ کیا گیا ہے",
"Error unsetting expiration date" : "خرابی غیر تصحیح تاریخ معیاد",
@@ -88,11 +86,8 @@
"Please reload the page." : "براہ مہربانی صفحہ دوبارہ لوڈ کریں.",
"The update was successful. Redirecting you to ownCloud now." : "اپ ڈیٹ کامیاب تھی۔ اپ کو اون کلوڈ سے منسلک کیا جا رہا ہے",
"Use the following link to reset your password: {link}" : "اپنا پاسورڈ ری سیٹ کرنے کے لیے اس لنک پر کلک کریں۔ {link}",
- "You will receive a link to reset your password via Email." : "آپ ای میل کے ذریعے اپنے پاسورڈ ری سیٹ کا لنک موصول کریں گے",
- "Username" : "یوزر نیم",
- "Yes, I really want to reset my password now" : "جی ہاں، میں واقعی ابھی اپنا پاس ورڈ ری سیٹ کرنا چاہتا ہوں",
- "Reset" : "ری سیٹ",
"New password" : "نیا پاسورڈ",
+ "Reset password" : "ری سیٹ پاسورڈ",
"Personal" : "شخصی",
"Users" : "صارفین",
"Apps" : "ایپز",
@@ -105,7 +100,7 @@
"Please update your PHP installation to use %s securely." : " براہ مہربانی %s کو بحفاظت استعمال کرنے کے پی ایچ پی کی تنصیب اپڈیٹ کریں",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "آپ کی ڈیٹا ڈائریکٹری اور فائلیں امکان ہےانٹرنیٹ سے قابل رسائی ہیں کیونکہ htaccess. فائل کام نہیں کرتا ہے",
"Create an <strong>admin account</strong>" : "ایک<strong> ایڈمن اکاؤنٹ</strong> بنائیں",
- "Password" : "پاسورڈ",
+ "Username" : "یوزر نیم",
"Storage & database" : "ذخیرہ اور ڈیٹا بیس",
"Data folder" : "ڈیٹا فولڈر",
"Configure the database" : "ڈیٹا بیس کونفگر کریں",
@@ -118,6 +113,7 @@
"Finishing …" : "تکمیل ...",
"%s is available. Get more information on how to update." : "%s دستیاب ہے. اپ ڈیٹ کرنے کے بارے میں مزید معلومات حاصل کریں.",
"Log out" : "لاگ آؤٹ",
+ "Search" : "تلاش",
"remember" : "یاد رکھیں",
"Log in" : "لاگ ان",
"Alternative Logins" : "متبادل لاگ ان ",
diff --git a/core/l10n/vi.js b/core/l10n/vi.js
index 5e48c7802d9..38fb084cdc2 100644
--- a/core/l10n/vi.js
+++ b/core/l10n/vi.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "Tháng 12",
"Settings" : "Cài đặt",
"Saving..." : "Đang lưu...",
- "Reset password" : "Khôi phục mật khẩu",
"No" : "Không",
"Yes" : "Có",
"Choose" : "Chọn",
@@ -48,6 +47,7 @@ OC.L10N.register(
"(all selected)" : "(Tất cả các lựa chọn)",
"({count} selected)" : "({count} được chọn)",
"Error loading file exists template" : "Lỗi khi tải tập tin mẫu đã tồn tại",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Thư mục và các tập tin của bạn có thể được truy cập từ Internet. Tập tin .htaccess không làm việc. Chúng tôi đề nghị bạn cấu hình ebserver ,phân quyền lại thư mục dữ liệu và cấp quyền truy cập hoặc di chuyển thư mục dữ liệu bên ngoài tài liệu gốc máy chủ web.",
"Shared" : "Được chia sẻ",
"Share" : "Chia sẻ",
"Error" : "Lỗi",
@@ -59,7 +59,7 @@ OC.L10N.register(
"Share with user or group …" : "Chia sẻ với người dùng hoặc nhóm",
"Share link" : "Chia sẻ liên kết",
"Password protect" : "Mật khẩu bảo vệ",
- "Allow Public Upload" : "Cho phép công khai tập tin tải lên",
+ "Password" : "Mật khẩu",
"Email link to person" : "Liên kết email tới cá nhân",
"Send" : "Gởi",
"Set expiration date" : "Đặt ngày kết thúc",
@@ -73,7 +73,6 @@ OC.L10N.register(
"can edit" : "có thể chỉnh sửa",
"access control" : "quản lý truy cập",
"create" : "tạo",
- "update" : "cập nhật",
"delete" : "xóa",
"Password protected" : "Mật khẩu bảo vệ",
"Error unsetting expiration date" : "Lỗi không thiết lập ngày kết thúc",
@@ -93,12 +92,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.",
"%s password reset" : "%s thiết lập lại mật khẩu",
"Use the following link to reset your password: {link}" : "Dùng đường dẫn sau để khôi phục lại mật khẩu : {link}",
- "You will receive a link to reset your password via Email." : "Vui lòng kiểm tra Email để khôi phục lại mật khẩu.",
- "Username" : "Tên đăng nhập",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tập tin của bạn được mã hóa. Nếu bạn chưa kích hoạt khoá phục hồi, sẽ không có cách nào để lấy lại được dữ liệu sau khi thiết lập lại mật khẩu. Nếu bạn không biết phải làm gì, xin vui lòng liên hệ với quản trị viên trước khi tiếp tục. Bạn có muốn tiếp tục?",
- "Yes, I really want to reset my password now" : "Vâng, tôi muốn thiết lập lại mật khẩu ngay.",
- "Reset" : "Khởi động lại",
"New password" : "Mật khẩu mới",
+ "Reset password" : "Khôi phục mật khẩu",
"Personal" : "Cá nhân",
"Users" : "Người dùng",
"Apps" : "Ứng dụng",
@@ -119,7 +114,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Để biết thêm thông tin và cách cấu hình đúng vui lòng xem thêm <a href=\"%s\" target=\"_blank\">tài l</a>.",
"Create an <strong>admin account</strong>" : "Tạo một <strong>tài khoản quản trị</strong>",
- "Password" : "Mật khẩu",
+ "Username" : "Tên đăng nhập",
"Data folder" : "Thư mục dữ liệu",
"Configure the database" : "Cấu hình cơ sở dữ liệu",
"Database user" : "Người dùng cơ sở dữ liệu",
@@ -131,6 +126,7 @@ OC.L10N.register(
"Finishing …" : "Đang hoàn thành ...",
"%s is available. Get more information on how to update." : "%s còn trống. Xem thêm thông tin cách cập nhật.",
"Log out" : "Đăng xuất",
+ "Search" : "Tìm kiếm",
"Server side authentication failed!" : "Xác thực phía máy chủ không thành công!",
"Please contact your administrator." : "Vui lòng liên hệ với quản trị viên.",
"remember" : "ghi nhớ",
diff --git a/core/l10n/vi.json b/core/l10n/vi.json
index 7567c0a65bb..eb257850e5e 100644
--- a/core/l10n/vi.json
+++ b/core/l10n/vi.json
@@ -29,7 +29,6 @@
"December" : "Tháng 12",
"Settings" : "Cài đặt",
"Saving..." : "Đang lưu...",
- "Reset password" : "Khôi phục mật khẩu",
"No" : "Không",
"Yes" : "Có",
"Choose" : "Chọn",
@@ -46,6 +45,7 @@
"(all selected)" : "(Tất cả các lựa chọn)",
"({count} selected)" : "({count} được chọn)",
"Error loading file exists template" : "Lỗi khi tải tập tin mẫu đã tồn tại",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Thư mục và các tập tin của bạn có thể được truy cập từ Internet. Tập tin .htaccess không làm việc. Chúng tôi đề nghị bạn cấu hình ebserver ,phân quyền lại thư mục dữ liệu và cấp quyền truy cập hoặc di chuyển thư mục dữ liệu bên ngoài tài liệu gốc máy chủ web.",
"Shared" : "Được chia sẻ",
"Share" : "Chia sẻ",
"Error" : "Lỗi",
@@ -57,7 +57,7 @@
"Share with user or group …" : "Chia sẻ với người dùng hoặc nhóm",
"Share link" : "Chia sẻ liên kết",
"Password protect" : "Mật khẩu bảo vệ",
- "Allow Public Upload" : "Cho phép công khai tập tin tải lên",
+ "Password" : "Mật khẩu",
"Email link to person" : "Liên kết email tới cá nhân",
"Send" : "Gởi",
"Set expiration date" : "Đặt ngày kết thúc",
@@ -71,7 +71,6 @@
"can edit" : "có thể chỉnh sửa",
"access control" : "quản lý truy cập",
"create" : "tạo",
- "update" : "cập nhật",
"delete" : "xóa",
"Password protected" : "Mật khẩu bảo vệ",
"Error unsetting expiration date" : "Lỗi không thiết lập ngày kết thúc",
@@ -91,12 +90,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.",
"%s password reset" : "%s thiết lập lại mật khẩu",
"Use the following link to reset your password: {link}" : "Dùng đường dẫn sau để khôi phục lại mật khẩu : {link}",
- "You will receive a link to reset your password via Email." : "Vui lòng kiểm tra Email để khôi phục lại mật khẩu.",
- "Username" : "Tên đăng nhập",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tập tin của bạn được mã hóa. Nếu bạn chưa kích hoạt khoá phục hồi, sẽ không có cách nào để lấy lại được dữ liệu sau khi thiết lập lại mật khẩu. Nếu bạn không biết phải làm gì, xin vui lòng liên hệ với quản trị viên trước khi tiếp tục. Bạn có muốn tiếp tục?",
- "Yes, I really want to reset my password now" : "Vâng, tôi muốn thiết lập lại mật khẩu ngay.",
- "Reset" : "Khởi động lại",
"New password" : "Mật khẩu mới",
+ "Reset password" : "Khôi phục mật khẩu",
"Personal" : "Cá nhân",
"Users" : "Người dùng",
"Apps" : "Ứng dụng",
@@ -117,7 +112,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Để biết thêm thông tin và cách cấu hình đúng vui lòng xem thêm <a href=\"%s\" target=\"_blank\">tài l</a>.",
"Create an <strong>admin account</strong>" : "Tạo một <strong>tài khoản quản trị</strong>",
- "Password" : "Mật khẩu",
+ "Username" : "Tên đăng nhập",
"Data folder" : "Thư mục dữ liệu",
"Configure the database" : "Cấu hình cơ sở dữ liệu",
"Database user" : "Người dùng cơ sở dữ liệu",
@@ -129,6 +124,7 @@
"Finishing …" : "Đang hoàn thành ...",
"%s is available. Get more information on how to update." : "%s còn trống. Xem thêm thông tin cách cập nhật.",
"Log out" : "Đăng xuất",
+ "Search" : "Tìm kiếm",
"Server side authentication failed!" : "Xác thực phía máy chủ không thành công!",
"Please contact your administrator." : "Vui lòng liên hệ với quản trị viên.",
"remember" : "ghi nhớ",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index da5521925ea..51252eb02bb 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -1,12 +1,12 @@
OC.L10N.register(
"core",
{
- "Couldn't send mail to following users: %s " : "发送失败,用户如下: %s ",
+ "Couldn't send mail to following users: %s " : "无法发送邮件到用户: %s ",
"Turned on maintenance mode" : "启用维护模式",
"Turned off maintenance mode" : "关闭维护模式",
"Updated database" : "数据库已更新",
"Checked database schema update" : "已经检查数据库架构更新",
- "Checked database schema update for apps" : "已经检查数据库架构更新",
+ "Checked database schema update for apps" : "已经检查应用的数据库架构更新",
"Updated \"%s\" to %s" : "更新 \"%s\" 为 %s",
"Disabled incompatible apps: %s" : "禁用不兼容应用:%s",
"No image or file provided" : "没有提供图片或文件",
@@ -34,19 +34,19 @@ OC.L10N.register(
"November" : "十一月",
"December" : "十二月",
"Settings" : "设置",
- "Saving..." : "保存中",
+ "Saving..." : "保存中...",
"Couldn't send reset email. Please contact your administrator." : "未能成功发送重置邮件,请联系管理员。",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "密码重置邮件已经发送到您的电子邮箱中。如果您长时间没能收到邮件,请检查您的垃圾/广告邮件箱。<br>如果未能收到邮件请联系管理员。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已被加密。如果您没有启用恢复密钥,密码重置后您将无法取回您的文件。<br />在继续之前,如果有疑问请联系您的管理员。<br />确认继续?",
"I know what I'm doing" : "我知道我在做什么",
- "Reset password" : "重置密码",
"Password can not be changed. Please contact your administrator." : "无法修改密码,请联系管理员。",
"No" : "否",
"Yes" : "是",
- "Choose" : "选择(&C)...",
+ "Choose" : "选择",
"Error loading file picker template: {error}" : "加载文件分拣模板出错: {error}",
- "Ok" : "好",
+ "Ok" : "确定",
"Error loading message template: {error}" : "加载消息模板出错: {error}",
+ "read-only" : "只读",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} 个文件冲突"],
"One file conflict" : "1个文件冲突",
"New Files" : "新文件",
@@ -65,6 +65,7 @@ OC.L10N.register(
"Strong password" : "强密码",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "您的Web服务器尚未正确设置以允许文件同步, 因为WebDAV的接口似乎已损坏.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "此服务器上没有可用的因特网连接. 这意味着某些特性将无法工作,例如挂载外部存储器, 提醒更新或安装第三方应用等. 从远程访问文件和发送提醒电子邮件也可能无法工作. 如果你想要ownCloud的所有特性, 我们建议启用此服务器的因特网连接.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的数据文件夹和文件可由互联网访问。OwnCloud提供的.htaccess文件未生效。我们强烈建议您配置服务器,以使数据文件夹不可被访问,或者将数据文件夹移到web服务器以外。",
"Error occurred while checking server setup" : "当检查服务器启动时出错",
"Shared" : "已共享",
"Shared with {recipients}" : "由{recipients}分享",
@@ -78,15 +79,17 @@ OC.L10N.register(
"Share with user or group …" : "分享给其他用户或组 ...",
"Share link" : "分享链接",
"The public link will expire no later than {days} days after it is created" : "这个共享链接将在创建后 {days} 天失效",
+ "Link" : "链接",
"Password protect" : "密码保护",
+ "Password" : "密码",
"Choose a password for the public link" : "为共享链接设置密码",
- "Allow Public Upload" : "允许公开上传",
"Email link to person" : "发送链接到个人",
"Send" : "发送",
"Set expiration date" : "设置过期日期",
+ "Expiration" : "过期",
"Expiration date" : "过期日期",
"Adding user..." : "添加用户中...",
- "group" : "组",
+ "group" : "群组",
"Resharing is not allowed" : "不允许二次共享",
"Shared in {item} with {user}" : "在 {item} 与 {user} 共享。",
"Unshare" : "取消共享",
@@ -95,7 +98,6 @@ OC.L10N.register(
"can edit" : "可以修改",
"access control" : "访问控制",
"create" : "创建",
- "update" : "更新",
"delete" : "删除",
"Password protected" : "密码已受保护",
"Error unsetting expiration date" : "取消设置过期日期时出错",
@@ -110,25 +112,29 @@ OC.L10N.register(
"Edit tags" : "编辑标签",
"Error loading dialog template: {error}" : "加载对话框模板出错: {error}",
"No tags selected for deletion." : "请选择要删除的标签。",
- "_download %n file_::_download %n files_" : [""],
+ "unknown text" : "未知文字",
+ "Hello world!" : "Hello world!",
+ "sunny" : "晴",
+ "Hello {name}, the weather is {weather}" : "您好 {name},今天天气是{weather}",
+ "_download %n file_::_download %n files_" : ["下载 %n 个文件"],
"Updating {productName} to version {version}, this may take a while." : "更新 {productName} 到版本 {version},这可能需要一些时间。",
"Please reload the page." : "请重新加载页面。",
- "The update was unsuccessful." : "更新未成功。",
+ "The update was unsuccessful. " : "升级未成功",
"The update was successful. Redirecting you to ownCloud now." : "更新成功。正在重定向至 ownCloud。",
"Couldn't reset password because the token is invalid" : "令牌无效,无法重置密码",
"Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。",
"%s password reset" : "重置 %s 的密码",
"Use the following link to reset your password: {link}" : "使用以下链接重置您的密码:{link}",
- "You will receive a link to reset your password via Email." : "您将会收到包含可以重置密码链接的邮件。",
- "Username" : "用户名",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的文件已加密。如果您不启用恢复密钥,您将无法在重设密码后取回文件。如果您不太确定,请在继续前联系您的管理员。您真的要继续吗?",
- "Yes, I really want to reset my password now" : "使得,我真的要现在重设密码",
- "Reset" : "重置",
"New password" : "新密码",
"New Password" : "新密码",
+ "Reset password" : "重置密码",
"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 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "%s 实例运行在 32bit PHP 环境, php.ini 中设置了 open_basedir。在文件超过 4GB 时会有问题, 所以强烈不建议这样设置.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "请从 php.ini 中删除 open_basedir 设置或变更为 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "%s 实例运行在 32bit PHP 环境, 而且 cURL 未安装. 在文件超过 4GB 时会有问题, 所以强烈不建议这样设置.",
+ "Please install the cURL extension and restart your webserver." : "请安装 cURL 扩展并重启网页服务器.",
"Personal" : "个人",
"Users" : "用户",
"Apps" : "应用",
@@ -136,7 +142,7 @@ OC.L10N.register(
"Help" : "帮助",
"Error loading tags" : "加载标签出错",
"Tag already exists" : "标签已存在",
- "Error deleting tag(s)" : "删除标签(s)时出错",
+ "Error deleting tag(s)" : "删除标签时出错",
"Error tagging" : "增加标签时出错",
"Error untagging" : "移除标签时出错",
"Error favoriting" : "收藏时出错",
@@ -148,6 +154,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "嗨、你好,\n\n只想让你知道 %s 分享了 %s 给你。\n现在查看: %s\n",
"The share will expire on %s." : "此分享将在 %s 过期。",
"Cheers!" : "干杯!",
+ "Internal Server Error" : "内部服务器错误",
"The server encountered an internal error and was unable to complete your request." : "服务器发送一个内部错误并且无法完成你的请求。",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "请联系服务器管理员,如果多次出现这个错误,请把下面的技术细节包含在您的报告里。",
"More details can be found in the server log." : "更多细节能在服务器日志中找到。",
@@ -165,7 +172,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的数据目录和文件可能可以直接被互联网访问,因为 .htaccess 并未正常工作。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "关于如何配置服务器,请参见 <a href=\"%s\" target=\"_blank\">此文档</a>。",
"Create an <strong>admin account</strong>" : "创建<strong>管理员账号</strong>",
- "Password" : "密码",
+ "Username" : "用户名",
"Storage & database" : "存储 & 数据库",
"Data folder" : "数据目录",
"Configure the database" : "配置数据库",
@@ -181,6 +188,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "此程序需要启用JavaScript才能正常运行。请<a href=\"http://enable-javascript.com/\" target=\"_blank\">启用JavaScript</a> 并重新加载此页面。",
"%s is available. Get more information on how to update." : "%s 可用。获取更多关于如何升级的信息。",
"Log out" : "注销",
+ "Search" : "搜索",
"Server side authentication failed!" : "服务端验证失败!",
"Please contact your administrator." : "请联系你的管理员。",
"Forgot your password? Reset it!" : "忘记密码?立即重置!",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index ff67feacad0..b6f213d40ca 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -1,10 +1,10 @@
{ "translations": {
- "Couldn't send mail to following users: %s " : "发送失败,用户如下: %s ",
+ "Couldn't send mail to following users: %s " : "无法发送邮件到用户: %s ",
"Turned on maintenance mode" : "启用维护模式",
"Turned off maintenance mode" : "关闭维护模式",
"Updated database" : "数据库已更新",
"Checked database schema update" : "已经检查数据库架构更新",
- "Checked database schema update for apps" : "已经检查数据库架构更新",
+ "Checked database schema update for apps" : "已经检查应用的数据库架构更新",
"Updated \"%s\" to %s" : "更新 \"%s\" 为 %s",
"Disabled incompatible apps: %s" : "禁用不兼容应用:%s",
"No image or file provided" : "没有提供图片或文件",
@@ -32,19 +32,19 @@
"November" : "十一月",
"December" : "十二月",
"Settings" : "设置",
- "Saving..." : "保存中",
+ "Saving..." : "保存中...",
"Couldn't send reset email. Please contact your administrator." : "未能成功发送重置邮件,请联系管理员。",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "密码重置邮件已经发送到您的电子邮箱中。如果您长时间没能收到邮件,请检查您的垃圾/广告邮件箱。<br>如果未能收到邮件请联系管理员。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已被加密。如果您没有启用恢复密钥,密码重置后您将无法取回您的文件。<br />在继续之前,如果有疑问请联系您的管理员。<br />确认继续?",
"I know what I'm doing" : "我知道我在做什么",
- "Reset password" : "重置密码",
"Password can not be changed. Please contact your administrator." : "无法修改密码,请联系管理员。",
"No" : "否",
"Yes" : "是",
- "Choose" : "选择(&C)...",
+ "Choose" : "选择",
"Error loading file picker template: {error}" : "加载文件分拣模板出错: {error}",
- "Ok" : "好",
+ "Ok" : "确定",
"Error loading message template: {error}" : "加载消息模板出错: {error}",
+ "read-only" : "只读",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} 个文件冲突"],
"One file conflict" : "1个文件冲突",
"New Files" : "新文件",
@@ -63,6 +63,7 @@
"Strong password" : "强密码",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "您的Web服务器尚未正确设置以允许文件同步, 因为WebDAV的接口似乎已损坏.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "此服务器上没有可用的因特网连接. 这意味着某些特性将无法工作,例如挂载外部存储器, 提醒更新或安装第三方应用等. 从远程访问文件和发送提醒电子邮件也可能无法工作. 如果你想要ownCloud的所有特性, 我们建议启用此服务器的因特网连接.",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的数据文件夹和文件可由互联网访问。OwnCloud提供的.htaccess文件未生效。我们强烈建议您配置服务器,以使数据文件夹不可被访问,或者将数据文件夹移到web服务器以外。",
"Error occurred while checking server setup" : "当检查服务器启动时出错",
"Shared" : "已共享",
"Shared with {recipients}" : "由{recipients}分享",
@@ -76,15 +77,17 @@
"Share with user or group …" : "分享给其他用户或组 ...",
"Share link" : "分享链接",
"The public link will expire no later than {days} days after it is created" : "这个共享链接将在创建后 {days} 天失效",
+ "Link" : "链接",
"Password protect" : "密码保护",
+ "Password" : "密码",
"Choose a password for the public link" : "为共享链接设置密码",
- "Allow Public Upload" : "允许公开上传",
"Email link to person" : "发送链接到个人",
"Send" : "发送",
"Set expiration date" : "设置过期日期",
+ "Expiration" : "过期",
"Expiration date" : "过期日期",
"Adding user..." : "添加用户中...",
- "group" : "组",
+ "group" : "群组",
"Resharing is not allowed" : "不允许二次共享",
"Shared in {item} with {user}" : "在 {item} 与 {user} 共享。",
"Unshare" : "取消共享",
@@ -93,7 +96,6 @@
"can edit" : "可以修改",
"access control" : "访问控制",
"create" : "创建",
- "update" : "更新",
"delete" : "删除",
"Password protected" : "密码已受保护",
"Error unsetting expiration date" : "取消设置过期日期时出错",
@@ -108,25 +110,29 @@
"Edit tags" : "编辑标签",
"Error loading dialog template: {error}" : "加载对话框模板出错: {error}",
"No tags selected for deletion." : "请选择要删除的标签。",
- "_download %n file_::_download %n files_" : [""],
+ "unknown text" : "未知文字",
+ "Hello world!" : "Hello world!",
+ "sunny" : "晴",
+ "Hello {name}, the weather is {weather}" : "您好 {name},今天天气是{weather}",
+ "_download %n file_::_download %n files_" : ["下载 %n 个文件"],
"Updating {productName} to version {version}, this may take a while." : "更新 {productName} 到版本 {version},这可能需要一些时间。",
"Please reload the page." : "请重新加载页面。",
- "The update was unsuccessful." : "更新未成功。",
+ "The update was unsuccessful. " : "升级未成功",
"The update was successful. Redirecting you to ownCloud now." : "更新成功。正在重定向至 ownCloud。",
"Couldn't reset password because the token is invalid" : "令牌无效,无法重置密码",
"Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。",
"%s password reset" : "重置 %s 的密码",
"Use the following link to reset your password: {link}" : "使用以下链接重置您的密码:{link}",
- "You will receive a link to reset your password via Email." : "您将会收到包含可以重置密码链接的邮件。",
- "Username" : "用户名",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的文件已加密。如果您不启用恢复密钥,您将无法在重设密码后取回文件。如果您不太确定,请在继续前联系您的管理员。您真的要继续吗?",
- "Yes, I really want to reset my password now" : "使得,我真的要现在重设密码",
- "Reset" : "重置",
"New password" : "新密码",
"New Password" : "新密码",
+ "Reset password" : "重置密码",
"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 32bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "%s 实例运行在 32bit PHP 环境, php.ini 中设置了 open_basedir。在文件超过 4GB 时会有问题, 所以强烈不建议这样设置.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64bit PHP." : "请从 php.ini 中删除 open_basedir 设置或变更为 64bit PHP.",
+ "It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "%s 实例运行在 32bit PHP 环境, 而且 cURL 未安装. 在文件超过 4GB 时会有问题, 所以强烈不建议这样设置.",
+ "Please install the cURL extension and restart your webserver." : "请安装 cURL 扩展并重启网页服务器.",
"Personal" : "个人",
"Users" : "用户",
"Apps" : "应用",
@@ -134,7 +140,7 @@
"Help" : "帮助",
"Error loading tags" : "加载标签出错",
"Tag already exists" : "标签已存在",
- "Error deleting tag(s)" : "删除标签(s)时出错",
+ "Error deleting tag(s)" : "删除标签时出错",
"Error tagging" : "增加标签时出错",
"Error untagging" : "移除标签时出错",
"Error favoriting" : "收藏时出错",
@@ -146,6 +152,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "嗨、你好,\n\n只想让你知道 %s 分享了 %s 给你。\n现在查看: %s\n",
"The share will expire on %s." : "此分享将在 %s 过期。",
"Cheers!" : "干杯!",
+ "Internal Server Error" : "内部服务器错误",
"The server encountered an internal error and was unable to complete your request." : "服务器发送一个内部错误并且无法完成你的请求。",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "请联系服务器管理员,如果多次出现这个错误,请把下面的技术细节包含在您的报告里。",
"More details can be found in the server log." : "更多细节能在服务器日志中找到。",
@@ -163,7 +170,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的数据目录和文件可能可以直接被互联网访问,因为 .htaccess 并未正常工作。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "关于如何配置服务器,请参见 <a href=\"%s\" target=\"_blank\">此文档</a>。",
"Create an <strong>admin account</strong>" : "创建<strong>管理员账号</strong>",
- "Password" : "密码",
+ "Username" : "用户名",
"Storage & database" : "存储 & 数据库",
"Data folder" : "数据目录",
"Configure the database" : "配置数据库",
@@ -179,6 +186,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "此程序需要启用JavaScript才能正常运行。请<a href=\"http://enable-javascript.com/\" target=\"_blank\">启用JavaScript</a> 并重新加载此页面。",
"%s is available. Get more information on how to update." : "%s 可用。获取更多关于如何升级的信息。",
"Log out" : "注销",
+ "Search" : "搜索",
"Server side authentication failed!" : "服务端验证失败!",
"Please contact your administrator." : "请联系你的管理员。",
"Forgot your password? Reset it!" : "忘记密码?立即重置!",
diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js
index c36746e12fc..a73e6b87e2f 100644
--- a/core/l10n/zh_HK.js
+++ b/core/l10n/zh_HK.js
@@ -22,12 +22,12 @@ OC.L10N.register(
"December" : "十二月",
"Settings" : "設定",
"Saving..." : "儲存中...",
- "Reset password" : "重設密碼",
"No" : "否",
"Yes" : "是",
"Ok" : "確認",
"_{count} file conflict_::_{count} file conflicts_" : [""],
"Cancel" : "取消",
+ "Continue" : "繼續",
"Shared" : "已分享",
"Share" : "分享",
"Error" : "錯誤",
@@ -38,12 +38,12 @@ OC.L10N.register(
"Shared with you by {owner}" : "{owner}與你的分享",
"Share link" : "分享連結",
"Password protect" : "密碼保護",
+ "Password" : "密碼",
"Send" : "傳送",
"Set expiration date" : "設定分享期限",
"Expiration date" : "分享期限",
"Unshare" : "取消分享",
"create" : "新增",
- "update" : "更新",
"delete" : "刪除",
"Password protected" : "密碼保護",
"Sending ..." : "發送中...",
@@ -54,23 +54,22 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "更新成功, 正",
"Use the following link to reset your password: {link}" : "請用以下連結重設你的密碼: {link}",
- "You will receive a link to reset your password via Email." : "你將收到一封電郵",
- "Username" : "用戶名稱",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"Personal" : "個人",
"Users" : "用戶",
"Apps" : "軟件",
"Admin" : "管理",
"Help" : "幫助",
"Create an <strong>admin account</strong>" : "建立管理員帳戶",
- "Password" : "密碼",
+ "Username" : "用戶名稱",
"Configure the database" : "設定資料庫",
"Database user" : "資料庫帳戶",
"Database password" : "資料庫密碼",
"Database name" : "資料庫名稱",
"Log out" : "登出",
+ "Search" : "尋找",
"remember" : "記住",
"Log in" : "登入"
},
diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json
index 294bdce33b6..fa7f279a27c 100644
--- a/core/l10n/zh_HK.json
+++ b/core/l10n/zh_HK.json
@@ -20,12 +20,12 @@
"December" : "十二月",
"Settings" : "設定",
"Saving..." : "儲存中...",
- "Reset password" : "重設密碼",
"No" : "否",
"Yes" : "是",
"Ok" : "確認",
"_{count} file conflict_::_{count} file conflicts_" : [""],
"Cancel" : "取消",
+ "Continue" : "繼續",
"Shared" : "已分享",
"Share" : "分享",
"Error" : "錯誤",
@@ -36,12 +36,12 @@
"Shared with you by {owner}" : "{owner}與你的分享",
"Share link" : "分享連結",
"Password protect" : "密碼保護",
+ "Password" : "密碼",
"Send" : "傳送",
"Set expiration date" : "設定分享期限",
"Expiration date" : "分享期限",
"Unshare" : "取消分享",
"create" : "新增",
- "update" : "更新",
"delete" : "刪除",
"Password protected" : "密碼保護",
"Sending ..." : "發送中...",
@@ -52,23 +52,22 @@
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "更新成功, 正",
"Use the following link to reset your password: {link}" : "請用以下連結重設你的密碼: {link}",
- "You will receive a link to reset your password via Email." : "你將收到一封電郵",
- "Username" : "用戶名稱",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"Personal" : "個人",
"Users" : "用戶",
"Apps" : "軟件",
"Admin" : "管理",
"Help" : "幫助",
"Create an <strong>admin account</strong>" : "建立管理員帳戶",
- "Password" : "密碼",
+ "Username" : "用戶名稱",
"Configure the database" : "設定資料庫",
"Database user" : "資料庫帳戶",
"Database password" : "資料庫密碼",
"Database name" : "資料庫名稱",
"Log out" : "登出",
+ "Search" : "尋找",
"remember" : "記住",
"Log in" : "登入"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 47a9f738ed0..56b98cf2bd8 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
"I know what I'm doing" : "我知道我在幹嘛",
- "Reset password" : "重設密碼",
"Password can not be changed. Please contact your administrator." : "無法變更密碼,請聯絡您的系統管理員",
"No" : "否",
"Yes" : "是",
@@ -65,6 +64,7 @@ OC.L10N.register(
"Strong password" : "很強的密碼",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "這臺 ownCloud 伺服器沒有連接到網際網路,因此有些功能像是掛載外部儲存空間、更新 ownCloud 或應用程式的通知沒有辦法運作。透過網際網路存取檔案還有電子郵件通知可能也無法運作。如果想要 ownCloud 完整的功能,建議您將這臺伺服器連接至網際網路。",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的資料目錄 (Data Directory) 和檔案可能可以由網際網路上面公開存取。Owncloud 所提供的 .htaccess 設定檔並未生效,我們強烈建議您設定您的網頁伺服器以防止資料目錄被公開存取,或將您的資料目錄移出網頁伺服器的 document root 。",
"Error occurred while checking server setup" : "檢查伺服器配置時發生錯誤",
"Shared" : "已分享",
"Shared with {recipients}" : "與 {recipients} 分享",
@@ -79,11 +79,12 @@ OC.L10N.register(
"Share link" : "分享連結",
"The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效",
"Password protect" : "密碼保護",
+ "Password" : "密碼",
"Choose a password for the public link" : "為公開連結選一個密碼",
- "Allow Public Upload" : "允許任何人上傳",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Set expiration date" : "指定到期日",
+ "Expiration" : "過期",
"Expiration date" : "到期日",
"Adding user..." : "新增使用者……",
"group" : "群組",
@@ -95,7 +96,6 @@ OC.L10N.register(
"can edit" : "可編輯",
"access control" : "存取控制",
"create" : "建立",
- "update" : "更新",
"delete" : "刪除",
"Password protected" : "受密碼保護",
"Error unsetting expiration date" : "取消到期日設定失敗",
@@ -113,20 +113,15 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 到版本 {version} ,請稍候",
"Please reload the page." : "請重新整理頁面",
- "The update was unsuccessful." : "更新失敗",
"The update was successful. Redirecting you to ownCloud now." : "升級成功,正將您重新導向至 ownCloud 。",
"Couldn't reset password because the token is invalid" : "無法重設密碼因為 token 無效",
"Couldn't send reset email. Please make sure your username is correct." : "無法寄送重設 email ,請確認您的帳號輸入正確",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "無法寄送重設 email ,因為這個帳號沒有設定 email 地址,請聯絡您的系統管理員",
"%s password reset" : "%s 密碼重設",
"Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
- "You will receive a link to reset your password via Email." : "重設密碼的連結將會寄到您的電子郵件信箱。",
- "Username" : "使用者名稱",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的檔案已加密,如果您沒有設定還原金鑰,未來重設密碼後將無法取回您的資料。如果您不確定該怎麼做,請洽詢系統管理員後再繼續。您確定要現在繼續嗎?",
- "Yes, I really want to reset my password now" : "對,我現在想要重設我的密碼。",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"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 伺服器以取得最好的效果",
"Personal" : "個人",
@@ -165,7 +160,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "請參考<a href=\"%s\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。",
"Create an <strong>admin account</strong>" : "建立一個<strong>管理者帳號</strong>",
- "Password" : "密碼",
+ "Username" : "使用者名稱",
"Storage & database" : "儲存空間和資料庫",
"Data folder" : "資料儲存位置",
"Configure the database" : "設定資料庫",
@@ -181,6 +176,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "這個應用程式需要 Javascript 才能正常運作,請<a href=\"http://enable-javascript.com/\" target=\"_blank\">啟用 Javascript</a> 然後重新整理。",
"%s is available. Get more information on how to update." : "%s 已經釋出,瞭解更多資訊以進行更新。",
"Log out" : "登出",
+ "Search" : "搜尋",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員。",
"Forgot your password? Reset it!" : "忘了密碼?重設它!",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 875b5b5af4a..a9981bef2b7 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
"I know what I'm doing" : "我知道我在幹嘛",
- "Reset password" : "重設密碼",
"Password can not be changed. Please contact your administrator." : "無法變更密碼,請聯絡您的系統管理員",
"No" : "否",
"Yes" : "是",
@@ -63,6 +62,7 @@
"Strong password" : "很強的密碼",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "這臺 ownCloud 伺服器沒有連接到網際網路,因此有些功能像是掛載外部儲存空間、更新 ownCloud 或應用程式的通知沒有辦法運作。透過網際網路存取檔案還有電子郵件通知可能也無法運作。如果想要 ownCloud 完整的功能,建議您將這臺伺服器連接至網際網路。",
+ "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的資料目錄 (Data Directory) 和檔案可能可以由網際網路上面公開存取。Owncloud 所提供的 .htaccess 設定檔並未生效,我們強烈建議您設定您的網頁伺服器以防止資料目錄被公開存取,或將您的資料目錄移出網頁伺服器的 document root 。",
"Error occurred while checking server setup" : "檢查伺服器配置時發生錯誤",
"Shared" : "已分享",
"Shared with {recipients}" : "與 {recipients} 分享",
@@ -77,11 +77,12 @@
"Share link" : "分享連結",
"The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效",
"Password protect" : "密碼保護",
+ "Password" : "密碼",
"Choose a password for the public link" : "為公開連結選一個密碼",
- "Allow Public Upload" : "允許任何人上傳",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Set expiration date" : "指定到期日",
+ "Expiration" : "過期",
"Expiration date" : "到期日",
"Adding user..." : "新增使用者……",
"group" : "群組",
@@ -93,7 +94,6 @@
"can edit" : "可編輯",
"access control" : "存取控制",
"create" : "建立",
- "update" : "更新",
"delete" : "刪除",
"Password protected" : "受密碼保護",
"Error unsetting expiration date" : "取消到期日設定失敗",
@@ -111,20 +111,15 @@
"_download %n file_::_download %n files_" : [""],
"Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 到版本 {version} ,請稍候",
"Please reload the page." : "請重新整理頁面",
- "The update was unsuccessful." : "更新失敗",
"The update was successful. Redirecting you to ownCloud now." : "升級成功,正將您重新導向至 ownCloud 。",
"Couldn't reset password because the token is invalid" : "無法重設密碼因為 token 無效",
"Couldn't send reset email. Please make sure your username is correct." : "無法寄送重設 email ,請確認您的帳號輸入正確",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "無法寄送重設 email ,因為這個帳號沒有設定 email 地址,請聯絡您的系統管理員",
"%s password reset" : "%s 密碼重設",
"Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
- "You will receive a link to reset your password via Email." : "重設密碼的連結將會寄到您的電子郵件信箱。",
- "Username" : "使用者名稱",
- "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. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的檔案已加密,如果您沒有設定還原金鑰,未來重設密碼後將無法取回您的資料。如果您不確定該怎麼做,請洽詢系統管理員後再繼續。您確定要現在繼續嗎?",
- "Yes, I really want to reset my password now" : "對,我現在想要重設我的密碼。",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"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 伺服器以取得最好的效果",
"Personal" : "個人",
@@ -163,7 +158,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "請參考<a href=\"%s\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。",
"Create an <strong>admin account</strong>" : "建立一個<strong>管理者帳號</strong>",
- "Password" : "密碼",
+ "Username" : "使用者名稱",
"Storage & database" : "儲存空間和資料庫",
"Data folder" : "資料儲存位置",
"Configure the database" : "設定資料庫",
@@ -179,6 +174,7 @@
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "這個應用程式需要 Javascript 才能正常運作,請<a href=\"http://enable-javascript.com/\" target=\"_blank\">啟用 Javascript</a> 然後重新整理。",
"%s is available. Get more information on how to update." : "%s 已經釋出,瞭解更多資訊以進行更新。",
"Log out" : "登出",
+ "Search" : "搜尋",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員。",
"Forgot your password? Reset it!" : "忘了密碼?重設它!",
diff --git a/core/lostpassword/controller/lostcontroller.php b/core/lostpassword/controller/lostcontroller.php
index e4d51fde077..aee4001ed37 100644
--- a/core/lostpassword/controller/lostcontroller.php
+++ b/core/lostpassword/controller/lostcontroller.php
@@ -9,68 +9,73 @@
namespace OC\Core\LostPassword\Controller;
use \OCP\AppFramework\Controller;
-use \OCP\AppFramework\Http\JSONResponse;
use \OCP\AppFramework\Http\TemplateResponse;
use \OCP\IURLGenerator;
use \OCP\IRequest;
use \OCP\IL10N;
use \OCP\IConfig;
-use \OCP\IUserSession;
-use \OC\Core\LostPassword\EncryptedDataException;
+use OCP\IUserManager;
+use OCP\Security\ISecureRandom;
+use \OC_Defaults;
+use OCP\Security\StringUtils;
+/**
+ * Class LostController
+ *
+ * Successfully changing a password will emit the post_passwordReset hook.
+ *
+ * @package OC\Core\LostPassword\Controller
+ */
class LostController extends Controller {
- /**
- * @var \OCP\IURLGenerator
- */
+ /** @var IURLGenerator */
protected $urlGenerator;
-
- /**
- * @var \OCP\IUserManager
- */
+ /** @var IUserManager */
protected $userManager;
-
- /**
- * @var \OC_Defaults
- */
+ /** @var OC_Defaults */
protected $defaults;
-
- /**
- * @var IL10N
- */
+ /** @var IL10N */
protected $l10n;
+ /** @var string */
protected $from;
+ /** @var bool */
protected $isDataEncrypted;
-
- /**
- * @var IConfig
- */
+ /** @var IConfig */
protected $config;
+ /** @var ISecureRandom */
+ protected $secureRandom;
/**
- * @var IUserSession
+ * @param string $appName
+ * @param IRequest $request
+ * @param IURLGenerator $urlGenerator
+ * @param IUserManager $userManager
+ * @param OC_Defaults $defaults
+ * @param IL10N $l10n
+ * @param IConfig $config
+ * @param ISecureRandom $secureRandom
+ * @param string $from
+ * @param string $isDataEncrypted
*/
- protected $userSession;
-
public function __construct($appName,
- IRequest $request,
- IURLGenerator $urlGenerator,
- $userManager,
- $defaults,
- IL10N $l10n,
- IConfig $config,
- IUserSession $userSession,
- $from,
- $isDataEncrypted) {
+ IRequest $request,
+ IURLGenerator $urlGenerator,
+ IUserManager $userManager,
+ OC_Defaults $defaults,
+ IL10N $l10n,
+ IConfig $config,
+ ISecureRandom $secureRandom,
+ $from,
+ $isDataEncrypted) {
parent::__construct($appName, $request);
$this->urlGenerator = $urlGenerator;
$this->userManager = $userManager;
$this->defaults = $defaults;
$this->l10n = $l10n;
+ $this->secureRandom = $secureRandom;
$this->from = $from;
$this->isDataEncrypted = $isDataEncrypted;
$this->config = $config;
- $this->userSession = $userSession;
}
/**
@@ -81,23 +86,31 @@ class LostController extends Controller {
*
* @param string $token
* @param string $userId
+ * @return TemplateResponse
*/
public function resetform($token, $userId) {
return new TemplateResponse(
'core/lostpassword',
'resetpassword',
array(
- 'isEncrypted' => $this->isDataEncrypted,
- 'link' => $this->getLink('core.lost.setPassword', $userId, $token),
+ 'link' => $this->urlGenerator->linkToRouteAbsolute('core.lost.setPassword', array('userId' => $userId, 'token' => $token)),
),
'guest'
);
}
+ /**
+ * @param $message
+ * @param array $additional
+ * @return array
+ */
private function error($message, array $additional=array()) {
return array_merge(array('status' => 'error', 'msg' => $message), $additional);
}
+ /**
+ * @return array
+ */
private function success() {
return array('status'=>'success');
}
@@ -106,14 +119,12 @@ class LostController extends Controller {
* @PublicPage
*
* @param string $user
- * @param bool $proceed
+ * @return array
*/
- public function email($user, $proceed){
+ public function email($user){
// FIXME: use HTTP error codes
try {
- $this->sendEmail($user, $proceed);
- } catch (EncryptedDataException $e){
- return $this->error('', array('encryption' => '1'));
+ $this->sendEmail($user);
} catch (\Exception $e){
return $this->error($e->getMessage());
}
@@ -121,15 +132,23 @@ class LostController extends Controller {
return $this->success();
}
-
/**
* @PublicPage
+ * @param string $token
+ * @param string $userId
+ * @param string $password
+ * @param boolean $proceed
+ * @return array
*/
- public function setPassword($token, $userId, $password) {
+ public function setPassword($token, $userId, $password, $proceed) {
+ if ($this->isDataEncrypted && !$proceed){
+ return $this->error('', array('encryption' => true));
+ }
+
try {
$user = $this->userManager->get($userId);
- if (!$this->checkToken($userId, $token)) {
+ if (!StringUtils::equals($this->config->getUserValue($userId, 'owncloud', 'lostpassword'), $token)) {
throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is invalid'));
}
@@ -137,9 +156,10 @@ class LostController extends Controller {
throw new \Exception();
}
- // FIXME: should be added to the all config at some point
- \OC_Preferences::deleteKey($userId, 'owncloud', 'lostpassword');
- $this->userSession->unsetMagicInCookie();
+ \OC_Hook::emit('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', array('uid' => $userId, 'password' => $password));
+
+ $this->config->deleteUserValue($userId, 'owncloud', 'lostpassword');
+ @\OC_User::unsetMagicInCookie();
} catch (\Exception $e){
return $this->error($e->getMessage());
@@ -148,36 +168,32 @@ class LostController extends Controller {
return $this->success();
}
-
- protected function sendEmail($user, $proceed) {
- if ($this->isDataEncrypted && !$proceed){
- throw new EncryptedDataException();
- }
-
+ /**
+ * @param string $user
+ * @throws \Exception
+ */
+ protected function sendEmail($user) {
if (!$this->userManager->userExists($user)) {
- throw new \Exception(
- $this->l10n->t('Couldn\'t send reset email. Please make sure '.
- 'your username is correct.'));
+ throw new \Exception($this->l10n->t('Couldn\'t send reset email. Please make sure your username is correct.'));
}
- $token = hash('sha256', \OC_Util::generateRandomBytes(30));
-
- // Hash the token again to prevent timing attacks
- $this->config->setUserValue(
- $user, 'owncloud', 'lostpassword', hash('sha256', $token)
- );
-
$email = $this->config->getUserValue($user, 'settings', 'email');
if (empty($email)) {
throw new \Exception(
$this->l10n->t('Couldn\'t send reset email because there is no '.
- 'email address for this username. Please ' .
- 'contact your administrator.')
+ 'email address for this username. Please ' .
+ 'contact your administrator.')
);
}
- $link = $this->getLink('core.lost.resetform', $user, $token);
+ $token = $this->secureRandom->getMediumStrengthGenerator()->generate(21,
+ ISecureRandom::CHAR_DIGITS.
+ ISecureRandom::CHAR_LOWER.
+ ISecureRandom::CHAR_UPPER);
+ $this->config->setUserValue($user, 'owncloud', 'lostpassword', $token);
+
+ $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user, 'token' => $token));
$tmpl = new \OC_Template('core/lostpassword', 'email');
$tmpl->assign('link', $link, false);
@@ -200,23 +216,4 @@ class LostController extends Controller {
}
}
-
- protected function getLink($route, $user, $token){
- $parameters = array(
- 'token' => $token,
- 'userId' => $user
- );
- $link = $this->urlGenerator->linkToRoute($route, $parameters);
-
- return $this->urlGenerator->getAbsoluteUrl($link);
- }
-
-
- protected function checkToken($user, $token) {
- return $this->config->getUserValue(
- $user, 'owncloud', 'lostpassword'
- ) === hash('sha256', $token);
- }
-
-
}
diff --git a/core/lostpassword/css/resetpassword.css b/core/lostpassword/css/resetpassword.css
index 012af672d97..29a7e875537 100644
--- a/core/lostpassword/css/resetpassword.css
+++ b/core/lostpassword/css/resetpassword.css
@@ -2,6 +2,10 @@
position: relative;
}
+.text-center {
+ text-align: center;
+}
+
#password-icon {
top: 20px;
}
diff --git a/core/lostpassword/encrypteddataexception.php b/core/lostpassword/encrypteddataexception.php
deleted file mode 100644
index 99d19445b6c..00000000000
--- a/core/lostpassword/encrypteddataexception.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * @author Victor Dubiniuk
- * @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
- *
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace OC\Core\LostPassword;
-
-class EncryptedDataException extends \Exception{
-}
diff --git a/core/lostpassword/templates/lostpassword.php b/core/lostpassword/templates/lostpassword.php
deleted file mode 100644
index 00dd139e71f..00000000000
--- a/core/lostpassword/templates/lostpassword.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-//load the file we need
-OCP\Util::addStyle('lostpassword', 'lostpassword'); ?>
-<form action="<?php print_unescaped($_['link']) ?>" method="post">
- <fieldset>
- <div class="update"><?php p($l->t('You will receive a link to reset your password via Email.')); ?></div>
- <p>
- <input type="text" name="user" id="user" placeholder="<?php p($l->t( 'Username' )); ?>" value="" autocomplete="off" required autofocus />
- <label for="user" class="infield"><?php p($l->t( 'Username' )); ?></label>
- <img class="svg" src="<?php print_unescaped(image_path('', 'actions/user.svg')); ?>" alt=""/>
- <?php if ($_['isEncrypted']): ?>
- <br />
- <p class="warning"><?php p($l->t("Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?")); ?><br />
- <input type="checkbox" name="continue" value="Yes" />
- <?php p($l->t('Yes, I really want to reset my password now')); ?></p>
- <?php endif; ?>
- </p>
- <input type="submit" id="submit" value="<?php p($l->t('Reset')); ?>" />
- </fieldset>
-</form>
diff --git a/core/lostpassword/templates/resetpassword.php b/core/lostpassword/templates/resetpassword.php
index 118fe787116..498c692f12e 100644
--- a/core/lostpassword/templates/resetpassword.php
+++ b/core/lostpassword/templates/resetpassword.php
@@ -1,4 +1,10 @@
-<?php OCP\Util::addStyle('lostpassword', 'resetpassword'); ?>
+<?php
+/** @var array $_ */
+/** @var $l OC_L10N */
+style('lostpassword', 'resetpassword');
+script('core', 'lostpassword');
+?>
+
<form action="<?php print_unescaped($_['link']) ?>" id="reset-password" method="post">
<fieldset>
<p>
@@ -7,6 +13,8 @@
<img class="svg" id="password-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt=""/>
</p>
<input type="submit" id="submit" value="<?php p($l->t('Reset password')); ?>" />
+ <p class="text-center">
+ <img class="hidden" id="float-spinner" src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>"/>
+ </p>
</fieldset>
</form>
-<?php OCP\Util::addScript('core', 'lostpassword'); ?>
diff --git a/core/register_command.php b/core/register_command.php
index c5d9b6e342d..5aa55be3e2c 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -11,16 +11,17 @@ $repair = new \OC\Repair(\OC\Repair::getRepairSteps());
/** @var $application Symfony\Component\Console\Application */
$application->add(new OC\Core\Command\Status);
$application->add(new OC\Core\Command\Db\GenerateChangeScript());
-$application->add(new OC\Core\Command\Db\ConvertType(OC_Config::getObject(), new \OC\DB\ConnectionFactory()));
+$application->add(new OC\Core\Command\Db\ConvertType(\OC::$server->getConfig(), new \OC\DB\ConnectionFactory()));
$application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\Maintenance\SingleUser());
-$application->add(new OC\Core\Command\Maintenance\Mode(OC_Config::getObject()));
+$application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\App\Disable());
$application->add(new OC\Core\Command\App\Enable());
$application->add(new OC\Core\Command\App\ListApps());
-$application->add(new OC\Core\Command\Maintenance\Repair($repair, OC_Config::getObject()));
+$application->add(new OC\Core\Command\Maintenance\Repair($repair, \OC::$server->getConfig()));
$application->add(new OC\Core\Command\User\Report());
$application->add(new OC\Core\Command\User\ResetPassword(\OC::$server->getUserManager()));
$application->add(new OC\Core\Command\User\LastSeen());
+$application->add(new OC\Core\Command\User\Delete(\OC::$server->getUserManager()));
$application->add(new OC\Core\Command\L10n\CreateJs());
diff --git a/core/routes.php b/core/routes.php
index 92545d0322e..ced70898f50 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -95,9 +95,22 @@ $this->create('core_avatar_post_cropped', '/avatar/cropped')
->action('OC\Core\Avatar\Controller', 'postCroppedAvatar');
// Sharing routes
-$this->create('core_share_show_share', '/s/{token}')
- ->get()
- ->action('OC\Core\Share\Controller', 'showShare');
+$this->create('files_sharing.sharecontroller.showShare', '/s/{token}')->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'showShare');
+});
+$this->create('files_sharing.sharecontroller.authenticate', '/s/{token}/authenticate')->post()->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'authenticate');
+});
+$this->create('files_sharing.sharecontroller.showAuthenticate', '/s/{token}/authenticate')->get()->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'showAuthenticate');
+});
+$this->create('files_sharing.sharecontroller.downloadShare', '/s/{token}/download')->get()->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'downloadShare');
+});
// used for heartbeat
$this->create('heartbeat', '/heartbeat')->action(function(){
diff --git a/core/setup/controller.php b/core/setup/controller.php
index f5f05348fd1..ab4c351b1a0 100644
--- a/core/setup/controller.php
+++ b/core/setup/controller.php
@@ -9,19 +9,47 @@
namespace OC\Core\Setup;
+use bantu\IniGetWrapper\IniGetWrapper;
use OCP\IConfig;
+use OCP\IL10N;
class Controller {
- /** @var \OCP\IConfig */
+ /**
+ * @var \OCP\IConfig
+ */
protected $config;
+ /** @var IniGetWrapper */
+ protected $iniWrapper;
+ /** @var IL10N */
+ protected $l10n;
+ /** @var \OC_Defaults */
+ protected $defaults;
+
+ /**
+ * @var string
+ */
+ private $autoConfigFile;
/**
* @param IConfig $config
+ * @param IniGetWrapper $iniWrapper
+ * @param IL10N $l10n
+ * @param \OC_Defaults $defaults
*/
- function __construct(IConfig $config) {
+ function __construct(IConfig $config,
+ IniGetWrapper $iniWrapper,
+ IL10N $l10n,
+ \OC_Defaults $defaults) {
+ $this->autoConfigFile = \OC::$SERVERROOT.'/config/autoconfig.php';
$this->config = $config;
+ $this->iniWrapper = $iniWrapper;
+ $this->l10n = $l10n;
+ $this->defaults = $defaults;
}
+ /**
+ * @param $post
+ */
public function run($post) {
// Check for autosetup:
$post = $this->loadAutoConfig($post);
@@ -57,22 +85,24 @@ class Controller {
);
$parameters = array_merge($defaults, $post);
- \OC_Util::addScript( '3rdparty', 'strengthify/jquery.strengthify' );
- \OC_Util::addStyle( '3rdparty', 'strengthify/strengthify' );
+ \OC_Util::addVendorScript('strengthify/jquery.strengthify');
+ \OC_Util::addVendorStyle('strengthify/strengthify');
\OC_Util::addScript('setup');
\OC_Template::printGuestPage('', 'installation', $parameters);
}
public function finishSetup() {
+ if( file_exists( $this->autoConfigFile )) {
+ unlink($this->autoConfigFile);
+ }
\OC_Util::redirectToDefaultPage();
}
public function loadAutoConfig($post) {
- $autosetup_file = \OC::$SERVERROOT.'/config/autoconfig.php';
- if( file_exists( $autosetup_file )) {
+ if( file_exists($this->autoConfigFile)) {
\OC_Log::write('core', 'Autoconfig file found, setting up owncloud...', \OC_Log::INFO);
$AUTOCONFIG = array();
- include $autosetup_file;
+ include $this->autoConfigFile;
$post = array_merge ($post, $AUTOCONFIG);
}
@@ -82,9 +112,6 @@ class Controller {
if ($dbIsSet AND $directoryIsSet AND $adminAccountIsSet) {
$post['install'] = 'true';
- if( file_exists( $autosetup_file )) {
- unlink($autosetup_file);
- }
}
$post['dbIsSet'] = $dbIsSet;
$post['directoryIsSet'] = $directoryIsSet;
@@ -131,23 +158,43 @@ class Controller {
}
}
+
if (\OC_Util::runningOnMac()) {
- $l10n = \OC::$server->getL10N('core');
- $theme = new \OC_Defaults();
$errors[] = array(
- 'error' => $l10n->t(
+ 'error' => $this->l10n->t(
'Mac OS X is not supported and %s will not work properly on this platform. ' .
'Use it at your own risk! ',
- $theme->getName()
+ $this->defaults->getName()
+ ),
+ 'hint' => $this->l10n->t('For the best results, please consider using a GNU/Linux server instead.')
+ );
+ }
+
+ if($this->iniWrapper->getString('open_basedir') !== '' && PHP_INT_SIZE === 4) {
+ $errors[] = array(
+ 'error' => $this->l10n->t(
+ 'It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. ' .
+ 'This will lead to problems with files over 4GB and is highly discouraged.',
+ $this->defaults->getName()
+ ),
+ 'hint' => $this->l10n->t('Please remove the open_basedir setting within your php.ini or switch to 64bit PHP.')
+ );
+ }
+ if(!function_exists('curl_init') && PHP_INT_SIZE === 4) {
+ $errors[] = array(
+ 'error' => $this->l10n->t(
+ 'It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. ' .
+ 'This will lead to problems with files over 4GB and is highly discouraged.',
+ $this->defaults->getName()
),
- 'hint' => $l10n->t('For the best results, please consider using a GNU/Linux server instead.')
+ 'hint' => $this->l10n->t('Please install the cURL extension and restart your webserver.')
);
}
return array(
'hasSQLite' => isset($databases['sqlite']),
'hasMySQL' => isset($databases['mysql']),
- 'hasPostgreSQL' => isset($databases['postgre']),
+ 'hasPostgreSQL' => isset($databases['pgsql']),
'hasOracle' => isset($databases['oci']),
'hasMSSQL' => isset($databases['mssql']),
'databases' => $databases,
diff --git a/core/share/controller.php b/core/share/controller.php
deleted file mode 100644
index c1741af0d98..00000000000
--- a/core/share/controller.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Copyright (c) 2014 Christopher Schäpers <christopher@schaepers.it>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace OC\Core\Share;
-
-class Controller {
- public static function showShare($args) {
- \OC_Util::checkAppEnabled('files_sharing');
-
- $token = $args['token'];
-
- \OC_App::loadApp('files_sharing');
- \OC_User::setIncognitoMode(true);
-
- require_once \OC_App::getAppPath('files_sharing') .'/public.php';
- }
-}
-?>
diff --git a/core/templates/filetemplates/template.odt b/core/templates/filetemplates/template.odt
index 9bdb351b92e..cbb49a1cf3e 100644
--- a/core/templates/filetemplates/template.odt
+++ b/core/templates/filetemplates/template.odt
Binary files differ
diff --git a/core/templates/installation.php b/core/templates/installation.php
index 9ef63dbfe8c..0b3b0d46c5c 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -1,3 +1,9 @@
+<?php
+script('core', [
+ 'jquery-showpassword',
+ 'installation'
+]);
+?>
<input type='hidden' id='hasMySQL' value='<?php p($_['hasMySQL']) ?>'>
<input type='hidden' id='hasSQLite' value='<?php p($_['hasSQLite']) ?>'>
<input type='hidden' id='hasPostgreSQL' value='<?php p($_['hasPostgreSQL']) ?>'>
diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php
index 2b496c23246..96229fd370a 100644
--- a/core/templates/layout.base.php
+++ b/core/templates/layout.base.php
@@ -6,7 +6,7 @@
<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
- <head>
+ <head data-requesttoken="<?php p($_['requesttoken']); ?>">
<title>
<?php p($theme->getTitle()); ?>
</title>
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index 763af4dc1d2..c799205b7cf 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -31,7 +31,11 @@
<?php if ($_['bodyid'] === 'body-login' ): ?>
<header>
<div id="header">
- <div class="logo svg"></div>
+ <div class="logo svg">
+ <h1 class="hidden-visually">
+ <?php p($theme->getName()); ?>
+ </h1>
+ </div>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
</div>
</header>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index f7f2b3dc735..4ffec917c9b 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -40,11 +40,17 @@
<?php endif; ?>
</div>
<header><div id="header">
- <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" title="" id="owncloud">
- <div class="logo-icon svg"></div>
+ <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
+ title="" id="owncloud" tabindex="-1">
+ <div class="logo-icon svg">
+ <h1 class="hidden-visually">
+ <?php p($theme->getName()); ?>
+ </h1>
+ </div>
</a>
- <a href="#" class="menutoggle">
- <div class="header-appname">
+
+ <a href="#" class="menutoggle" tabindex="2">
+ <h1 class="header-appname">
<?php
if(OC_Util::getEditionString() === '') {
p(!empty($_['application'])?$_['application']: $l->t('Apps'));
@@ -52,16 +58,18 @@
print_unescaped($theme->getHTMLName());
}
?>
- </div>
+ </h1>
<div class="icon-caret svg"></div>
</a>
+
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
<div id="settings" class="svg">
- <div id="expand" tabindex="0" role="link">
+ <div id="expand" tabindex="4" role="link">
<?php if ($_['enableAvatars']): ?>
<div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown"'); } else { print_unescaped('" style="display: none"'); } ?>>
<?php if ($_['userAvatarSet']): ?>
- <img src="<?php p(link_to('', 'index.php').'/avatar/'.$_['user_uid'].'/32?requesttoken='.$_['requesttoken']); ?>">
+ <img src="<?php p(link_to('', 'index.php').'/avatar/'.$_['user_uid'].'/32?requesttoken='.$_['requesttoken']); ?>"
+ alt="" />
<?php endif; ?>
</div>
<?php endif; ?>
@@ -90,9 +98,12 @@
</div>
<form class="searchbox" action="#" method="post">
+ <label for="searchbox" class="hidden-visually">
+ <?php p($l->t('Search'));?>
+ </label>
<input id="searchbox" class="svg" type="search" name="query"
value="<?php if(isset($_POST['query'])) {p($_POST['query']);};?>"
- autocomplete="off" />
+ autocomplete="off" tabindex="3" />
</form>
</div></header>
diff --git a/core/templates/login.php b/core/templates/login.php
index ad9db14bac1..2198f063dbc 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -1,5 +1,11 @@
<?php /** @var $l OC_L10N */ ?>
-<?php script('core', 'jstz') ?>
+<?php
+vendor_script('jsTimezoneDetect/jstz');
+script('core', [
+ 'visitortimezone',
+ 'lostpassword'
+]);
+?>
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
<form method="post" name="login">
@@ -14,7 +20,8 @@
</div>
<?php endif; ?>
<p id="message" class="hidden">
- <img class="float-spinner" src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>"/>
+ <img class="float-spinner" alt=""
+ src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>" />
<span id="messageText"></span>
<!-- the following div ensures that the spinner is always inside the #message div -->
<div style="clear: both;"></div>
@@ -64,8 +71,5 @@
</ul>
</fieldset>
</form>
-<?php } ?>
+<?php }
-<?php
-OCP\Util::addscript('core', 'visitortimezone');
-OCP\Util::addScript('core', 'lostpassword');
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index c2c71a145ba..0d2ad861dee 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -1,15 +1,20 @@
test/
src/
-.bower.json
+bower.json
.gitignore
.jshintrc
.travis.yml
+CHANGELOG*
Gemfile
gruntfile.js
-README.md
+Gruntfile.js
+Makefile
+package.json
+README*
# underscore
underscore/**
+!underscore/.bower.json
!underscore/underscore.js
!underscore/LICENSE
@@ -17,42 +22,77 @@ underscore/**
blueimp-md5/css
blueimp-md5/js/*
!blueimp-md5/js/md5.js
-blueimp-md5/.*
-blueimp-md5/*.json
blueimp-md5/index.html
-blueimp-md5/Makefile
-blueimp-md5/README.md
-blueimp-md5/package.json
# momentjs - ignore all files except the two listed below
moment/benchmarks
moment/locale
moment/min/**
-moment/*.js*
-moment/*.md
-!moment/LICENSE
+moment/moment.js
+moment/scripts
!moment/min/moment-with-locales.js
# jquery
jquery/**
+!jquery/.bower.json
!jquery/jquery*
!jquery/MIT-LICENSE.txt
+# jquery-ui
+jquery-ui/themes/base/minified
+jquery-ui/themes/base/images/**
+!jquery-ui/themes/base/images/animated-overlay.gif
+!jquery-ui/themes/base/images/ui-icons_222222_256x240.png
+jquery-ui/themes/base/jquery.ui.*
+jquery-ui/themes/black-tie
+jquery-ui/themes/blitzer
+jquery-ui/themes/cupertino
+jquery-ui/themes/dark-hive
+jquery-ui/themes/dot-luv
+jquery-ui/themes/eggplant
+jquery-ui/themes/excite-bike
+jquery-ui/themes/flick
+jquery-ui/themes/hot-sneaks
+jquery-ui/themes/humanity
+jquery-ui/themes/le-frog
+jquery-ui/themes/mint-choc
+jquery-ui/themes/overcast
+jquery-ui/themes/pepper-grinder
+jquery-ui/themes/redmond
+jquery-ui/themes/smoothness
+jquery-ui/themes/south-street
+jquery-ui/themes/start
+jquery-ui/themes/sunny
+jquery-ui/themes/swanky-purse
+jquery-ui/themes/trontastic
+jquery-ui/themes/ui-darkness
+jquery-ui/themes/ui-lightness
+jquery-ui/themes/vader
+jquery-ui/ui/**
+!jquery-ui/ui/jquery-ui.custom.js
+jquery-ui/*.json
+jquery-ui/AUTHORS.txt
+jquery-ui/MANIFEST
+jquery-ui/README.md
+
# jcrop
-jcrop/.bower.json
jcrop/index.html
-jcrop/README.md
jcrop/demos
jcrop/css/jquery.Jcrop.min.css
jcrop/js/**
!jcrop/js/jquery.Jcrop.js
+# jsTimezoneDetect
+jsTimezoneDetect/jstz.min.js
+
# handlebars
handlebars/**
+!handlebars/.bower.json
!handlebars/handlebars.js
# select2
select2/**
+!select2/.bower.json
!select2/select2.js
!select2/select2.css
!select2/select2.png
@@ -62,6 +102,7 @@ select2/**
#zxcvbn
zxcvbn/**
+!zxcvbn/.bower.json
!zxcvbn/zxcvbn.js
!zxcvbn/LICENSE.txt
@@ -71,4 +112,3 @@ snapjs/dist/2.0.0-rc1
snapjs/dist/latest/snap.css
snapjs/dist/latest/snap.min.js
snapjs/scripts
-snapjs/*.json
diff --git a/core/vendor/blueimp-md5/.bower.json b/core/vendor/blueimp-md5/.bower.json
new file mode 100644
index 00000000000..89288baad76
--- /dev/null
+++ b/core/vendor/blueimp-md5/.bower.json
@@ -0,0 +1,53 @@
+{
+ "name": "blueimp-md5",
+ "version": "1.0.3",
+ "title": "JavaScript MD5",
+ "description": "JavaScript MD5 implementation.",
+ "keywords": [
+ "javascript",
+ "md5"
+ ],
+ "homepage": "https://github.com/blueimp/JavaScript-MD5",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ],
+ "contributors": [
+ {
+ "name": "Paul Johnston",
+ "url": "http://pajhome.org.uk/crypt/md5"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blueimp/JavaScript-MD5.git"
+ },
+ "bugs": "https://github.com/blueimp/JavaScript-MD5/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "devDependencies": {
+ "mocha": "1.11.0",
+ "expect.js": "0.2.0",
+ "uglify-js": "2.3.6"
+ },
+ "main": "js/md5.js",
+ "_release": "1.0.3",
+ "_resolution": {
+ "type": "version",
+ "tag": "1.0.3",
+ "commit": "299407012031ac6f60f832d3b5fa975fcb88b550"
+ },
+ "_source": "git://github.com/blueimp/JavaScript-MD5.git",
+ "_target": "~1.0.1",
+ "_originalSource": "blueimp-md5"
+} \ No newline at end of file
diff --git a/core/vendor/handlebars/.bower.json b/core/vendor/handlebars/.bower.json
new file mode 100644
index 00000000000..2d17a2faacb
--- /dev/null
+++ b/core/vendor/handlebars/.bower.json
@@ -0,0 +1,16 @@
+{
+ "name": "handlebars",
+ "version": "1.3.0",
+ "main": "handlebars.js",
+ "dependencies": {},
+ "homepage": "https://github.com/components/handlebars.js",
+ "_release": "1.3.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.3.0",
+ "commit": "ddd21a44be399ae4de486ddd868bacf84e92b9c4"
+ },
+ "_source": "git://github.com/components/handlebars.js.git",
+ "_target": "~1.3.0",
+ "_originalSource": "handlebars"
+} \ No newline at end of file
diff --git a/core/vendor/jcrop/.bower.json b/core/vendor/jcrop/.bower.json
new file mode 100644
index 00000000000..4fba44732cf
--- /dev/null
+++ b/core/vendor/jcrop/.bower.json
@@ -0,0 +1,14 @@
+{
+ "name": "jcrop",
+ "homepage": "https://github.com/tapmodo/Jcrop",
+ "version": "0.9.12",
+ "_release": "0.9.12",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.9.12",
+ "commit": "1902fbc6afa14481dc019a17e0dcb7d62b808a98"
+ },
+ "_source": "git://github.com/tapmodo/Jcrop.git",
+ "_target": "~0.9.12",
+ "_originalSource": "jcrop"
+} \ No newline at end of file
diff --git a/core/vendor/jquery-ui/MIT-LICENSE.txt b/core/vendor/jquery-ui/MIT-LICENSE.txt
new file mode 100644
index 00000000000..1c693e3d44d
--- /dev/null
+++ b/core/vendor/jquery-ui/MIT-LICENSE.txt
@@ -0,0 +1,26 @@
+Copyright 2013 jQuery Foundation and other contributors,
+http://jqueryui.com/
+
+This software consists of voluntary contributions made by many
+individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
+contribution history, see the revision history and logs, available
+at http://jquery-ui.googlecode.com/svn/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/core/css/images/animated-overlay.gif b/core/vendor/jquery-ui/themes/base/images/animated-overlay.gif
index d441f75ebfb..d441f75ebfb 100644
--- a/core/css/images/animated-overlay.gif
+++ b/core/vendor/jquery-ui/themes/base/images/animated-overlay.gif
Binary files differ
diff --git a/core/vendor/jquery-ui/themes/base/images/ui-icons_222222_256x240.png b/core/vendor/jquery-ui/themes/base/images/ui-icons_222222_256x240.png
new file mode 100644
index 00000000000..ee039dc096a
--- /dev/null
+++ b/core/vendor/jquery-ui/themes/base/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/core/css/jquery-ui-1.10.0.custom.css b/core/vendor/jquery-ui/themes/base/jquery-ui.css
index a1e9895c776..55f91f4192d 100644
--- a/core/css/jquery-ui-1.10.0.custom.css
+++ b/core/vendor/jquery-ui/themes/base/jquery-ui.css
@@ -1,8 +1,7 @@
-/*! jQuery UI - v1.10.0 - 2013-01-22
+/*! jQuery UI - v1.10.0 - 2013-01-17
* http://jqueryui.com
-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=%22Lucida%20Grande%22%2C%20Arial%2C%20Verdana%2C%20sans-serif&fwDefault=bold&fsDefault=1em&cornerRadius=4px&bgColorHeader=1d2d44&bgTextureHeader=01_flat.png&bgImgOpacityHeader=35&borderColorHeader=1d2d44&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f8f8f8&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=ddd&fcDefault=555&iconColorDefault=1d2d44&bgColorHover=ffffff&bgTextureHover=01_flat.png&bgImgOpacityHover=100&borderColorHover=ddd&fcHover=333&iconColorHover=1d2d44&bgColorActive=f8f8f8&bgTextureActive=02_glass.png&bgImgOpacityActive=100&borderColorActive=1d2d44&fcActive=1d2d44&iconColorActive=1d2d44&bgColorHighlight=f8f8f8&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=100&borderColorHighlight=ddd&fcHighlight=555&iconColorHighlight=ffffff&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
-* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
+* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
+* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
/* Layout helpers
----------------------------------*/
@@ -85,79 +84,7 @@
width: 100%;
height: 100%;
}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
+
.ui-accordion .ui-accordion-header {
display: block;
cursor: pointer;
@@ -186,12 +113,14 @@
border-top: 0;
overflow: auto;
}
+
.ui-autocomplete {
position: absolute;
top: 0;
left: 0;
cursor: default;
}
+
.ui-button {
display: inline-block;
position: relative;
@@ -296,6 +225,7 @@ button.ui-button::-moz-focus-inner {
border: 0;
padding: 0;
}
+
.ui-datepicker {
width: 17em;
padding: .2em .2em 0;
@@ -464,6 +394,7 @@ button.ui-button::-moz-focus-inner {
border-right-width: 0;
border-left-width: 1px;
}
+
.ui-dialog {
position: absolute;
top: 0;
@@ -523,6 +454,7 @@ button.ui-button::-moz-focus-inner {
.ui-draggable .ui-dialog-titlebar {
cursor: move;
}
+
.ui-menu {
list-style: none;
padding: 2px;
@@ -590,6 +522,7 @@ button.ui-button::-moz-focus-inner {
position: static;
float: right;
}
+
.ui-progressbar {
height: 2em;
text-align: left;
@@ -608,6 +541,82 @@ button.ui-button::-moz-focus-inner {
.ui-progressbar-indeterminate .ui-progressbar-value {
background-image: none;
}
+
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+
.ui-slider {
position: relative;
text-align: left;
@@ -671,6 +680,7 @@ button.ui-button::-moz-focus-inner {
.ui-slider-vertical .ui-slider-range-max {
top: 0;
}
+
.ui-spinner {
position: relative;
display: inline-block;
@@ -726,6 +736,7 @@ button.ui-button::-moz-focus-inner {
/* need to fix icons sprite */
background-position: -65px -16px;
}
+
.ui-tabs {
position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
padding: .2em;
@@ -768,6 +779,7 @@ button.ui-button::-moz-focus-inner {
padding: 1em 1.4em;
background: none;
}
+
.ui-tooltip {
padding: 8px;
position: absolute;
@@ -783,8 +795,8 @@ body .ui-tooltip {
/* Component containers
----------------------------------*/
.ui-widget {
- font-family: "Lucida Grande", Arial, Verdana, sans-serif;
- font-size: 1em;
+ font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+ font-size: 1.1em/*{fsDefault}*/;
}
.ui-widget .ui-widget {
font-size: 1em;
@@ -793,25 +805,25 @@ body .ui-tooltip {
.ui-widget select,
.ui-widget textarea,
.ui-widget button {
- font-family: "Lucida Grande", Arial, Verdana, sans-serif;
+ font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
font-size: 1em;
}
.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;
+ border: 1px solid #aaaaaa/*{borderColorContent}*/;
+ background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
+ color: #222222/*{fcContent}*/;
}
.ui-widget-content a {
- color: #333333;
+ color: #222222/*{fcContent}*/;
}
.ui-widget-header {
- border: 1px solid #1d2d44;
- background: #1d2d44 url(images/ui-bg_flat_35_1d2d44_40x100.png) 50% 50% repeat-x;
- color: #ffffff;
+ border: 1px solid #aaaaaa/*{borderColorHeader}*/;
+ background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
+ color: #222222/*{fcHeader}*/;
font-weight: bold;
}
.ui-widget-header a {
- color: #ffffff;
+ color: #222222/*{fcHeader}*/;
}
/* Interaction states
@@ -819,15 +831,15 @@ body .ui-tooltip {
.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;
+ border: 1px solid #d3d3d3/*{borderColorDefault}*/;
+ background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
+ font-weight: normal/*{fwDefault}*/;
+ color: #555555/*{fcDefault}*/;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited {
- color: #555;
+ color: #555555/*{fcDefault}*/;
text-decoration: none;
}
.ui-state-hover,
@@ -836,30 +848,30 @@ body .ui-tooltip {
.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;
+ border: 1px solid #999999/*{borderColorHover}*/;
+ background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
+ font-weight: normal/*{fwDefault}*/;
+ color: #212121/*{fcHover}*/;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited {
- color: #333;
+ color: #212121/*{fcHover}*/;
text-decoration: none;
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active {
- border: 1px solid #1d2d44;
- background: #f8f8f8 url(images/ui-bg_glass_100_f8f8f8_1x400.png) 50% 50% repeat-x;
- font-weight: bold;
- color: #1d2d44;
+ border: 1px solid #aaaaaa/*{borderColorActive}*/;
+ background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
+ font-weight: normal/*{fwDefault}*/;
+ color: #212121/*{fcActive}*/;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
- color: #1d2d44;
+ color: #212121/*{fcActive}*/;
text-decoration: none;
}
@@ -868,31 +880,31 @@ body .ui-tooltip {
.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;
+ border: 1px solid #fcefa1/*{borderColorHighlight}*/;
+ background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
+ color: #363636/*{fcHighlight}*/;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
- color: #555;
+ color: #363636/*{fcHighlight}*/;
}
.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;
+ border: 1px solid #cd0a0a/*{borderColorError}*/;
+ background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
+ color: #cd0a0a/*{fcError}*/;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
- color: #ffffff;
+ color: #cd0a0a/*{fcError}*/;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
- color: #ffffff;
+ color: #cd0a0a/*{fcError}*/;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
@@ -928,27 +940,27 @@ body .ui-tooltip {
}
.ui-icon,
.ui-widget-content .ui-icon {
- background-image: url(images/ui-icons_222222_256x240.png);
+ background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
}
.ui-widget-header .ui-icon {
- background-image: url(images/ui-icons_222222_256x240.png);
+ background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
}
.ui-state-default .ui-icon {
- background-image: url(images/ui-icons_1d2d44_256x240.png);
+ background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
}
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon {
- background-image: url(images/ui-icons_1d2d44_256x240.png);
+ background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
}
.ui-state-active .ui-icon {
- background-image: url(images/ui-icons_1d2d44_256x240.png);
+ background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
}
.ui-state-highlight .ui-icon {
- background-image: url(images/ui-icons_ffffff_256x240.png);
+ background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
}
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
- background-image: url(images/ui-icons_ffd27a_256x240.png);
+ background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
}
/* positioning */
@@ -1137,38 +1149,38 @@ body .ui-tooltip {
.ui-corner-top,
.ui-corner-left,
.ui-corner-tl {
- border-top-left-radius: 4px;
+ border-top-left-radius: 4px/*{cornerRadius}*/;
}
.ui-corner-all,
.ui-corner-top,
.ui-corner-right,
.ui-corner-tr {
- border-top-right-radius: 4px;
+ border-top-right-radius: 4px/*{cornerRadius}*/;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-left,
.ui-corner-bl {
- border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px/*{cornerRadius}*/;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-right,
.ui-corner-br {
- border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px/*{cornerRadius}*/;
}
/* Overlays */
.ui-widget-overlay {
- background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
- opacity: .5;
- filter: Alpha(Opacity=50);
+ background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
+ opacity: .3/*{opacityOverlay}*/;
+ filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
}
.ui-widget-shadow {
- margin: -5px 0 0 -5px;
- padding: 5px;
- background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
- opacity: .2;
- filter: Alpha(Opacity=20);
- border-radius: 5px;
+ margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
+ padding: 8px/*{thicknessShadow}*/;
+ background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
+ opacity: .3/*{opacityShadow}*/;
+ filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
+ border-radius: 8px/*{cornerRadiusShadow}*/;
}
diff --git a/core/js/jquery-ui-1.10.0.custom.js b/core/vendor/jquery-ui/ui/jquery-ui.custom.js
index ca57f47ede4..b34e6a37cc8 100644
--- a/core/js/jquery-ui-1.10.0.custom.js
+++ b/core/vendor/jquery-ui/ui/jquery-ui.custom.js
@@ -1,4 +1,4 @@
-/*! jQuery UI - v1.10.0 - 2013-01-22
+/*! jQuery UI - v1.10.0 - 2013-01-18
* http://jqueryui.com
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
diff --git a/core/vendor/jquery/.bower.json b/core/vendor/jquery/.bower.json
new file mode 100644
index 00000000000..72b99da7090
--- /dev/null
+++ b/core/vendor/jquery/.bower.json
@@ -0,0 +1,21 @@
+{
+ "name": "jquery",
+ "version": "1.10.2",
+ "description": "jQuery component",
+ "keywords": [
+ "jquery",
+ "component"
+ ],
+ "main": "jquery.js",
+ "license": "MIT",
+ "homepage": "https://github.com/jquery/jquery",
+ "_release": "1.10.2",
+ "_resolution": {
+ "type": "version",
+ "tag": "1.10.2",
+ "commit": "16b079b164d62bd807c612806842a13bf9b04d17"
+ },
+ "_source": "git://github.com/jquery/jquery.git",
+ "_target": "~1.10.0",
+ "_originalSource": "jquery"
+} \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/.bower.json b/core/vendor/jsTimezoneDetect/.bower.json
new file mode 100644
index 00000000000..2a3668ff309
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/.bower.json
@@ -0,0 +1,23 @@
+{
+ "name": "jstzdetect",
+ "version": "1.0.6",
+ "main": "jstz.min.js",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "components",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "homepage": "https://github.com/HenningM/jstimezonedetect",
+ "_release": "1.0.6",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.0.6",
+ "commit": "bd595ed253292934991a414979007f3d51a1547d"
+ },
+ "_source": "git://github.com/HenningM/jstimezonedetect.git",
+ "_target": "~1.0.5",
+ "_originalSource": "jsTimezoneDetect"
+} \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/LICENCE.txt b/core/vendor/jsTimezoneDetect/LICENCE.txt
new file mode 100644
index 00000000000..c48af16c647
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/LICENCE.txt
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2012 Jon Nylander, project maintained at
+https://bitbucket.org/pellepim/jstimezonedetect
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to
+do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/jstz.js b/core/vendor/jsTimezoneDetect/jstz.js
new file mode 100644
index 00000000000..6f38183f856
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/jstz.js
@@ -0,0 +1,358 @@
+/**
+ * This script gives you the zone info key representing your device's time zone setting.
+ *
+ * @name jsTimezoneDetect
+ * @version 1.0.5
+ * @author Jon Nylander
+ * @license MIT License - http://www.opensource.org/licenses/mit-license.php
+ *
+ * For usage and examples, visit:
+ * http://pellepim.bitbucket.org/jstz/
+ *
+ * Copyright (c) Jon Nylander
+ */
+
+/*jslint undef: true */
+/*global console, exports*/
+
+(function(root) {
+ /**
+ * Namespace to hold all the code for timezone detection.
+ */
+ var jstz = (function () {
+ 'use strict';
+ var HEMISPHERE_SOUTH = 's',
+
+ /**
+ * Gets the offset in minutes from UTC for a certain date.
+ * @param {Date} date
+ * @returns {Number}
+ */
+ get_date_offset = function (date) {
+ var offset = -date.getTimezoneOffset();
+ return (offset !== null ? offset : 0);
+ },
+
+ get_date = function (year, month, date) {
+ var d = new Date();
+ if (year !== undefined) {
+ d.setFullYear(year);
+ }
+ d.setMonth(month);
+ d.setDate(date);
+ return d;
+ },
+
+ get_january_offset = function (year) {
+ return get_date_offset(get_date(year, 0 ,2));
+ },
+
+ get_june_offset = function (year) {
+ return get_date_offset(get_date(year, 5, 2));
+ },
+
+ /**
+ * Private method.
+ * Checks whether a given date is in daylight saving time.
+ * If the date supplied is after august, we assume that we're checking
+ * for southern hemisphere DST.
+ * @param {Date} date
+ * @returns {Boolean}
+ */
+ date_is_dst = function (date) {
+ var is_southern = date.getMonth() > 7,
+ base_offset = is_southern ? get_june_offset(date.getFullYear()) :
+ get_january_offset(date.getFullYear()),
+ date_offset = get_date_offset(date),
+ is_west = base_offset < 0,
+ dst_offset = base_offset - date_offset;
+
+ if (!is_west && !is_southern) {
+ return dst_offset < 0;
+ }
+
+ return dst_offset !== 0;
+ },
+
+ /**
+ * This function does some basic calculations to create information about
+ * the user's timezone. It uses REFERENCE_YEAR as a solid year for which
+ * the script has been tested rather than depend on the year set by the
+ * client device.
+ *
+ * Returns a key that can be used to do lookups in jstz.olson.timezones.
+ * eg: "720,1,2".
+ *
+ * @returns {String}
+ */
+
+ lookup_key = function () {
+ var january_offset = get_january_offset(),
+ june_offset = get_june_offset(),
+ diff = january_offset - june_offset;
+
+ if (diff < 0) {
+ return january_offset + ",1";
+ } else if (diff > 0) {
+ return june_offset + ",1," + HEMISPHERE_SOUTH;
+ }
+
+ return january_offset + ",0";
+ },
+
+ /**
+ * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
+ *
+ * Returns a primitive object on the format:
+ * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
+ *
+ * @returns Object
+ */
+ determine = function () {
+ var key = lookup_key();
+ return new jstz.TimeZone(jstz.olson.timezones[key]);
+ },
+
+ /**
+ * This object contains information on when daylight savings starts for
+ * different timezones.
+ *
+ * The list is short for a reason. Often we do not have to be very specific
+ * to single out the correct timezone. But when we do, this list comes in
+ * handy.
+ *
+ * Each value is a date denoting when daylight savings starts for that timezone.
+ */
+ dst_start_for = function (tz_name) {
+
+ var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
+ dst_starts = {
+ 'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
+ 'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
+ 'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
+ 'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
+ 'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
+ 'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
+ 'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
+ 'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
+ 'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
+ 'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
+ 'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
+ 'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
+ 'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
+ 'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
+ 'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
+ 'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
+ 'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
+ 'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
+ 'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
+ 'Europe/Moscow': ru_pre_dst_change,
+ 'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
+ 'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
+ 'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
+ 'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
+ 'Asia/Yekaterinburg': ru_pre_dst_change,
+ 'Asia/Omsk': ru_pre_dst_change,
+ 'Asia/Krasnoyarsk': ru_pre_dst_change,
+ 'Asia/Irkutsk': ru_pre_dst_change,
+ 'Asia/Yakutsk': ru_pre_dst_change,
+ 'Asia/Vladivostok': ru_pre_dst_change,
+ 'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
+ 'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
+ 'Asia/Kamchatka': ru_pre_dst_change,
+ 'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
+ 'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
+ 'Europe/Minsk': ru_pre_dst_change,
+ 'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
+ 'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
+ 'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
+ };
+
+ return dst_starts[tz_name];
+ };
+
+ return {
+ determine: determine,
+ date_is_dst: date_is_dst,
+ dst_start_for: dst_start_for
+ };
+ }());
+
+ /**
+ * Simple object to perform ambiguity check and to return name of time zone.
+ */
+ jstz.TimeZone = function (tz_name) {
+ 'use strict';
+ /**
+ * The keys in this object are timezones that we know may be ambiguous after
+ * a preliminary scan through the olson_tz object.
+ *
+ * The array of timezones to compare must be in the order that daylight savings
+ * starts for the regions.
+ */
+ var AMBIGUITIES = {
+ 'America/Denver': ['America/Denver', 'America/Mazatlan'],
+ 'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
+ 'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
+ 'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
+ 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
+ 'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
+ 'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
+ 'America/New_York': ['America/Havana', 'America/New_York'],
+ 'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
+ 'America/Godthab': ['America/Miquelon', 'America/Godthab'],
+ 'Asia/Dubai': ['Europe/Moscow'],
+ 'Asia/Dhaka': ['Asia/Yekaterinburg'],
+ 'Asia/Jakarta': ['Asia/Omsk'],
+ 'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
+ 'Asia/Tokyo': ['Asia/Irkutsk'],
+ 'Australia/Brisbane': ['Asia/Yakutsk'],
+ 'Pacific/Noumea': ['Asia/Vladivostok'],
+ 'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
+ 'Pacific/Tongatapu': ['Pacific/Apia'],
+ 'Asia/Baghdad': ['Europe/Minsk'],
+ 'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
+ 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
+ },
+
+ timezone_name = tz_name,
+
+ /**
+ * Checks if a timezone has possible ambiguities. I.e timezones that are similar.
+ *
+ * For example, if the preliminary scan determines that we're in America/Denver.
+ * We double check here that we're really there and not in America/Mazatlan.
+ *
+ * This is done by checking known dates for when daylight savings start for different
+ * timezones during 2010 and 2011.
+ */
+ ambiguity_check = function () {
+ var ambiguity_list = AMBIGUITIES[timezone_name],
+ length = ambiguity_list.length,
+ i = 0,
+ tz = ambiguity_list[0];
+
+ for (; i < length; i += 1) {
+ tz = ambiguity_list[i];
+
+ if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
+ timezone_name = tz;
+ return;
+ }
+ }
+ },
+
+ /**
+ * Checks if it is possible that the timezone is ambiguous.
+ */
+ is_ambiguous = function () {
+ return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
+ };
+
+ if (is_ambiguous()) {
+ ambiguity_check();
+ }
+
+ return {
+ name: function () {
+ return timezone_name;
+ }
+ };
+ };
+
+ jstz.olson = {};
+
+ /*
+ * The keys in this dictionary are comma separated as such:
+ *
+ * First the offset compared to UTC time in minutes.
+ *
+ * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
+ * does.
+ *
+ * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
+ * only interesting for timezones with DST.
+ *
+ * The mapped arrays is used for constructing the jstz.TimeZone object from within
+ * jstz.determine_timezone();
+ */
+ jstz.olson.timezones = {
+ '-720,0' : 'Pacific/Majuro',
+ '-660,0' : 'Pacific/Pago_Pago',
+ '-600,1' : 'America/Adak',
+ '-600,0' : 'Pacific/Honolulu',
+ '-570,0' : 'Pacific/Marquesas',
+ '-540,0' : 'Pacific/Gambier',
+ '-540,1' : 'America/Anchorage',
+ '-480,1' : 'America/Los_Angeles',
+ '-480,0' : 'Pacific/Pitcairn',
+ '-420,0' : 'America/Phoenix',
+ '-420,1' : 'America/Denver',
+ '-360,0' : 'America/Guatemala',
+ '-360,1' : 'America/Chicago',
+ '-360,1,s' : 'Pacific/Easter',
+ '-300,0' : 'America/Bogota',
+ '-300,1' : 'America/New_York',
+ '-270,0' : 'America/Caracas',
+ '-240,1' : 'America/Halifax',
+ '-240,0' : 'America/Santo_Domingo',
+ '-240,1,s' : 'America/Santiago',
+ '-210,1' : 'America/St_Johns',
+ '-180,1' : 'America/Godthab',
+ '-180,0' : 'America/Argentina/Buenos_Aires',
+ '-180,1,s' : 'America/Montevideo',
+ '-120,0' : 'America/Noronha',
+ '-120,1' : 'America/Noronha',
+ '-60,1' : 'Atlantic/Azores',
+ '-60,0' : 'Atlantic/Cape_Verde',
+ '0,0' : 'Etc/UTC',
+ '0,1' : 'Europe/London',
+ '60,1' : 'Europe/Berlin',
+ '60,0' : 'Africa/Lagos',
+ '60,1,s' : 'Africa/Windhoek',
+ '120,1' : 'Asia/Beirut',
+ '120,0' : 'Africa/Johannesburg',
+ '180,0' : 'Asia/Baghdad',
+ '180,1' : 'Europe/Moscow',
+ '210,1' : 'Asia/Tehran',
+ '240,0' : 'Asia/Dubai',
+ '240,1' : 'Asia/Baku',
+ '270,0' : 'Asia/Kabul',
+ '300,1' : 'Asia/Yekaterinburg',
+ '300,0' : 'Asia/Karachi',
+ '330,0' : 'Asia/Kolkata',
+ '345,0' : 'Asia/Kathmandu',
+ '360,0' : 'Asia/Dhaka',
+ '360,1' : 'Asia/Omsk',
+ '390,0' : 'Asia/Rangoon',
+ '420,1' : 'Asia/Krasnoyarsk',
+ '420,0' : 'Asia/Jakarta',
+ '480,0' : 'Asia/Shanghai',
+ '480,1' : 'Asia/Irkutsk',
+ '525,0' : 'Australia/Eucla',
+ '525,1,s' : 'Australia/Eucla',
+ '540,1' : 'Asia/Yakutsk',
+ '540,0' : 'Asia/Tokyo',
+ '570,0' : 'Australia/Darwin',
+ '570,1,s' : 'Australia/Adelaide',
+ '600,0' : 'Australia/Brisbane',
+ '600,1' : 'Asia/Vladivostok',
+ '600,1,s' : 'Australia/Sydney',
+ '630,1,s' : 'Australia/Lord_Howe',
+ '660,1' : 'Asia/Kamchatka',
+ '660,0' : 'Pacific/Noumea',
+ '690,0' : 'Pacific/Norfolk',
+ '720,1,s' : 'Pacific/Auckland',
+ '720,0' : 'Pacific/Tarawa',
+ '765,1,s' : 'Pacific/Chatham',
+ '780,0' : 'Pacific/Tongatapu',
+ '780,1,s' : 'Pacific/Apia',
+ '840,0' : 'Pacific/Kiritimati'
+ };
+
+ if (typeof exports !== 'undefined') {
+ exports.jstz = jstz;
+ } else {
+ root.jstz = jstz;
+ }
+})(this);
diff --git a/core/vendor/moment/.bower.json b/core/vendor/moment/.bower.json
new file mode 100644
index 00000000000..e9bdc9bda6f
--- /dev/null
+++ b/core/vendor/moment/.bower.json
@@ -0,0 +1,30 @@
+{
+ "name": "moment",
+ "version": "2.8.4",
+ "main": "moment.js",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "tasks",
+ "component.json",
+ "composer.json",
+ "CONTRIBUTING.md",
+ "ender.js",
+ "Gruntfile.js",
+ "package.js",
+ "package.json"
+ ],
+ "homepage": "https://github.com/moment/moment",
+ "_release": "2.8.4",
+ "_resolution": {
+ "type": "version",
+ "tag": "2.8.4",
+ "commit": "7ae59de2fc3a1298ae829f6369fe3589b2cd87f8"
+ },
+ "_source": "git://github.com/moment/moment.git",
+ "_target": "~2.8.3",
+ "_originalSource": "moment"
+} \ No newline at end of file
diff --git a/core/vendor/select2/.bower.json b/core/vendor/select2/.bower.json
new file mode 100644
index 00000000000..0c915721f10
--- /dev/null
+++ b/core/vendor/select2/.bower.json
@@ -0,0 +1,24 @@
+{
+ "name": "select2",
+ "version": "3.4.8",
+ "main": [
+ "select2.js",
+ "select2.css",
+ "select2.png",
+ "select2x2.png",
+ "select2-spinner.gif"
+ ],
+ "dependencies": {
+ "jquery": ">= 1.7.1"
+ },
+ "homepage": "https://github.com/ivaynberg/select2",
+ "_release": "3.4.8",
+ "_resolution": {
+ "type": "version",
+ "tag": "3.4.8",
+ "commit": "ee0f36a47e2133b23330fbec740b2d3a17a0d9c2"
+ },
+ "_source": "git://github.com/ivaynberg/select2.git",
+ "_target": "~3.4.8",
+ "_originalSource": "select2"
+} \ No newline at end of file
diff --git a/core/vendor/snapjs/.bower.json b/core/vendor/snapjs/.bower.json
new file mode 100644
index 00000000000..b10afbb2d87
--- /dev/null
+++ b/core/vendor/snapjs/.bower.json
@@ -0,0 +1,31 @@
+{
+ "name": "Snap.js",
+ "description": "A Library for creating beautiful mobile shelfs in Javascript (Facebook and Path style side menus)",
+ "version": "2.0.0-rc1",
+ "author": "Jacob Kelley <jakie8@gmail.com>",
+ "keywords": [
+ "mobile shelfs",
+ "nav",
+ "menu",
+ "mobile",
+ "side menu"
+ ],
+ "license": "MIT",
+ "main": [
+ "./dist/latest/snap.js",
+ "./dist/latest/snap.css"
+ ],
+ "scripts": [
+ "snap.js"
+ ],
+ "homepage": "https://github.com/jakiestfu/Snap.js",
+ "_release": "2.0.0-rc1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.0-rc1",
+ "commit": "15c77da330d9e8ca580a922bc748d88553838a73"
+ },
+ "_source": "git://github.com/jakiestfu/Snap.js.git",
+ "_target": "~2.0.0-rc1",
+ "_originalSource": "snapjs"
+} \ No newline at end of file
diff --git a/core/vendor/strengthify/.bower.json b/core/vendor/strengthify/.bower.json
new file mode 100644
index 00000000000..b86b43f17b7
--- /dev/null
+++ b/core/vendor/strengthify/.bower.json
@@ -0,0 +1,20 @@
+{
+ "name": "strengthify",
+ "version": "0.4.1",
+ "homepage": "https://github.com/MorrisJobke/strengthify",
+ "authors": [
+ "Morris Jobke <hey@morrisjobke.de>"
+ ],
+ "description": "Combine jQuery and zxcvbn to create a password strength meter.",
+ "main": "jquery.strengthify.js",
+ "license": "MIT",
+ "_release": "0.4.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.4.1",
+ "commit": "fe9d1c80156d3fcdd16434ebc789007d045c1d1f"
+ },
+ "_source": "git://github.com/MorrisJobke/strengthify.git",
+ "_target": "0.4.1",
+ "_originalSource": "strengthify"
+} \ No newline at end of file
diff --git a/core/vendor/strengthify/LICENSE b/core/vendor/strengthify/LICENSE
new file mode 100644
index 00000000000..3c04738f789
--- /dev/null
+++ b/core/vendor/strengthify/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Morris Jobke
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/core/vendor/strengthify/jquery.strengthify.js b/core/vendor/strengthify/jquery.strengthify.js
new file mode 100644
index 00000000000..21f5fa82956
--- /dev/null
+++ b/core/vendor/strengthify/jquery.strengthify.js
@@ -0,0 +1,134 @@
+/**
+ * Strengthify - show the weakness of a password (uses zxcvbn for this)
+ * https://github.com/kabum/strengthify
+ *
+ * Version: 0.4.1
+ * Author: Morris Jobke (github.com/kabum)
+ *
+ * License:
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2013 Morris Jobke <morris.jobke@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/* global jQuery */
+(function ($) {
+ $.fn.strengthify = function(paramOptions) {
+ var me = this,
+ defaults = {
+ zxcvbn: 'zxcvbn/zxcvbn.js',
+ titles: [
+ 'Weakest',
+ 'Weak',
+ 'So-so',
+ 'Good',
+ 'Perfect'
+ ]
+ },
+ options = $.extend(defaults, paramOptions);
+
+ // add elements
+ $('.strengthify-wrapper')
+ .append('<div class="strengthify-bg" />')
+ .append('<div class="strengthify-container" />')
+ .append('<div class="strengthify-separator" style="left: 25%" />')
+ .append('<div class="strengthify-separator" style="left: 50%" />')
+ .append('<div class="strengthify-separator" style="left: 75%" />');
+
+ $.ajax({
+ cache: true,
+ dataType: 'script',
+ url: options.zxcvbn
+ }).done(function() {
+ me.bind('keyup input', function() {
+ var password = $(this).val(),
+ // hide strengthigy if no input is provided
+ opacity = (password === '') ? 0 : 1,
+ // calculate result
+ result = zxcvbn(password),
+ css = '',
+ // cache jQuery selections
+ $container = $('.strengthify-container'),
+ $wrapper = $('.strengthify-wrapper');
+
+ $wrapper.children().css(
+ 'opacity',
+ opacity
+ ).css(
+ '-ms-filter',
+ '"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')"'
+ );
+
+ // style strengthify bar
+ // possible scores: 0-4
+ switch(result.score) {
+ case 0:
+ case 1:
+ css = 'password-bad';
+ break;
+ case 2:
+ css = 'password-medium';
+ break;
+ case 3:
+ case 4:
+ css = 'password-good';
+ break;
+ }
+
+ $container
+ .attr('class', css + ' strengthify-container')
+ // possible scores: 0-4
+ .css(
+ 'width',
+ // if score is '0' it will be changed to '1' to
+ // not hide strengthify if the password is extremely weak
+ ((result.score === 0 ? 1 : result.score) * 25) + '%'
+ );
+
+ // set a title for the wrapper
+ $wrapper.attr(
+ 'title',
+ options.titles[result.score]
+ ).tipsy({
+ trigger: 'manual',
+ opacity: opacity
+ }).tipsy(
+ 'show'
+ );
+
+ if(opacity === 0) {
+ $wrapper.tipsy(
+ 'hide'
+ );
+ }
+
+ // reset state for empty string password
+ if(password === '') {
+ $container.css('width', 0);
+ }
+
+ });
+ });
+
+ return me;
+ };
+
+}(jQuery));
diff --git a/core/vendor/strengthify/strengthify.css b/core/vendor/strengthify/strengthify.css
new file mode 100644
index 00000000000..9340270ecfb
--- /dev/null
+++ b/core/vendor/strengthify/strengthify.css
@@ -0,0 +1,48 @@
+/**
+ * Strengthify - show the weakness of a password (uses zxcvbn for this)
+ * https://github.com/kabum/strengthify
+ * Version: 0.3
+ * License: The MIT License (MIT)
+ * Copyright (c) 2013 Morris Jobke <morris.jobke@gmail.com>
+ */
+
+.strengthify-wrapper > * {
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+ -webkit-transition:all .5s ease-in-out;
+ -moz-transition:all .5s ease-in-out;
+ transition:all .5s ease-in-out;
+}
+
+.strengthify-bg, .strengthify-container, .strengthify-wrapper, .strengthify-separator {
+ height: 3px;
+}
+
+.strengthify-bg, .strengthify-container {
+ display: block;
+ position: absolute;
+ width: 100%;
+}
+
+.strengthify-bg {
+ background-color: #BBB;
+}
+
+.strengthify-separator {
+ display: inline-block;
+ position: absolute;
+ background-color: #FFF;
+ width: 1px;
+ z-index: 10;
+}
+
+.password-bad {
+ background-color: #C33;
+}
+.password-medium {
+ background-color: #F80;
+}
+.password-good {
+ background-color: #3C3;
+} \ No newline at end of file
diff --git a/core/vendor/underscore/.bower.json b/core/vendor/underscore/.bower.json
new file mode 100644
index 00000000000..2389206fd47
--- /dev/null
+++ b/core/vendor/underscore/.bower.json
@@ -0,0 +1,33 @@
+{
+ "name": "underscore",
+ "version": "1.6.0",
+ "main": "underscore.js",
+ "keywords": [
+ "util",
+ "functional",
+ "server",
+ "client",
+ "browser"
+ ],
+ "ignore": [
+ "underscore-min.js",
+ "docs",
+ "test",
+ "*.yml",
+ "*.map",
+ "CNAME",
+ "index.html",
+ "favicon.ico",
+ "CONTRIBUTING.md"
+ ],
+ "homepage": "https://github.com/jashkenas/underscore",
+ "_release": "1.6.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "1.6.0",
+ "commit": "1f4bf626f23a99f7a676f5076dc1b1475554c8f7"
+ },
+ "_source": "git://github.com/jashkenas/underscore.git",
+ "_target": "~1.6.0",
+ "_originalSource": "underscore"
+} \ No newline at end of file
diff --git a/core/vendor/zxcvbn/.bower.json b/core/vendor/zxcvbn/.bower.json
new file mode 100644
index 00000000000..8c86cd8c0e4
--- /dev/null
+++ b/core/vendor/zxcvbn/.bower.json
@@ -0,0 +1,14 @@
+{
+ "name": "zxcvbn",
+ "main": "zxcvbn.js",
+ "homepage": "https://github.com/lowe/zxcvbn",
+ "_release": "f2a8cda13d",
+ "_resolution": {
+ "type": "branch",
+ "branch": "master",
+ "commit": "f2a8cda13d247f4956d3334ee7cbae80a2c61a97"
+ },
+ "_source": "git://github.com/lowe/zxcvbn.git",
+ "_target": "*",
+ "_originalSource": "zxcvbn"
+} \ No newline at end of file
diff --git a/issue_template.md b/issue_template.md
index ec14a8b3463..45d5a7d1b5f 100644
--- a/issue_template.md
+++ b/issue_template.md
@@ -28,7 +28,7 @@ Tell us what happens instead
```
Insert your config.php content here
-(Without the database password and passwordsalt)
+(Without the database password, passwordsalt and secret)
```
**Are you using external storage, if yes which one:** local/smb/sftp/...
diff --git a/l10n/.gitignore b/l10n/.gitignore
index 6d609cec52b..72ab4b0e236 100644
--- a/l10n/.gitignore
+++ b/l10n/.gitignore
@@ -1 +1,2 @@
*.po
+*.pot
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
deleted file mode 100644
index dacc144fc01..00000000000
--- a/l10n/templates/core.pot
+++ /dev/null
@@ -1,944 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: ajax/share.php:118 ajax/share.php:160
-#, php-format
-msgid "Couldn't send mail to following users: %s "
-msgstr ""
-
-#: ajax/update.php:14
-msgid "Turned on maintenance mode"
-msgstr ""
-
-#: ajax/update.php:17
-msgid "Turned off maintenance mode"
-msgstr ""
-
-#: ajax/update.php:20
-msgid "Updated database"
-msgstr ""
-
-#: ajax/update.php:23
-msgid "Checked database schema update"
-msgstr ""
-
-#: ajax/update.php:26
-msgid "Checked database schema update for apps"
-msgstr ""
-
-#: ajax/update.php:29
-#, php-format
-msgid "Updated \"%s\" to %s"
-msgstr ""
-
-#: ajax/update.php:37
-#, php-format
-msgid "Disabled incompatible apps: %s"
-msgstr ""
-
-#: avatar/controller.php:70
-msgid "No image or file provided"
-msgstr ""
-
-#: avatar/controller.php:87
-msgid "Unknown filetype"
-msgstr ""
-
-#: avatar/controller.php:91
-msgid "Invalid image"
-msgstr ""
-
-#: avatar/controller.php:121 avatar/controller.php:148
-msgid "No temporary profile picture available, try again"
-msgstr ""
-
-#: avatar/controller.php:141
-msgid "No crop data provided"
-msgstr ""
-
-#: js/config.php:45
-msgid "Sunday"
-msgstr ""
-
-#: js/config.php:46
-msgid "Monday"
-msgstr ""
-
-#: js/config.php:47
-msgid "Tuesday"
-msgstr ""
-
-#: js/config.php:48
-msgid "Wednesday"
-msgstr ""
-
-#: js/config.php:49
-msgid "Thursday"
-msgstr ""
-
-#: js/config.php:50
-msgid "Friday"
-msgstr ""
-
-#: js/config.php:51
-msgid "Saturday"
-msgstr ""
-
-#: js/config.php:56
-msgid "January"
-msgstr ""
-
-#: js/config.php:57
-msgid "February"
-msgstr ""
-
-#: js/config.php:58
-msgid "March"
-msgstr ""
-
-#: js/config.php:59
-msgid "April"
-msgstr ""
-
-#: js/config.php:60
-msgid "May"
-msgstr ""
-
-#: js/config.php:61
-msgid "June"
-msgstr ""
-
-#: js/config.php:62
-msgid "July"
-msgstr ""
-
-#: js/config.php:63
-msgid "August"
-msgstr ""
-
-#: js/config.php:64
-msgid "September"
-msgstr ""
-
-#: js/config.php:65
-msgid "October"
-msgstr ""
-
-#: js/config.php:66
-msgid "November"
-msgstr ""
-
-#: js/config.php:67
-msgid "December"
-msgstr ""
-
-#: js/js.js:384
-msgid "Settings"
-msgstr ""
-
-#: js/js.js:483
-msgid "Saving..."
-msgstr ""
-
-#: js/lostpassword.js:3 lostpassword/controller/lostcontroller.php:198
-msgid "Couldn't send reset email. Please contact your administrator."
-msgstr ""
-
-#: js/lostpassword.js:5
-msgid ""
-"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."
-msgstr ""
-
-#: js/lostpassword.js:7
-msgid ""
-"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?"
-msgstr ""
-
-#: js/lostpassword.js:10
-msgid "I know what I'm doing"
-msgstr ""
-
-#: js/lostpassword.js:13 lostpassword/templates/resetpassword.php:9
-msgid "Reset password"
-msgstr ""
-
-#: js/lostpassword.js:16
-msgid "Password can not be changed. Please contact your administrator."
-msgstr ""
-
-#: js/oc-dialogs.js:108 js/oc-dialogs.js:255
-msgid "No"
-msgstr ""
-
-#: js/oc-dialogs.js:116 js/oc-dialogs.js:264
-msgid "Yes"
-msgstr ""
-
-#: js/oc-dialogs.js:202
-msgid "Choose"
-msgstr ""
-
-#: js/oc-dialogs.js:229
-msgid "Error loading file picker template: {error}"
-msgstr ""
-
-#: js/oc-dialogs.js:282
-msgid "Ok"
-msgstr ""
-
-#: js/oc-dialogs.js:302
-msgid "Error loading message template: {error}"
-msgstr ""
-
-#: js/oc-dialogs.js:430
-msgid "{count} file conflict"
-msgid_plural "{count} file conflicts"
-msgstr[0] ""
-msgstr[1] ""
-
-#: js/oc-dialogs.js:444
-msgid "One file conflict"
-msgstr ""
-
-#: js/oc-dialogs.js:450
-msgid "New Files"
-msgstr ""
-
-#: js/oc-dialogs.js:451
-msgid "Already existing files"
-msgstr ""
-
-#: js/oc-dialogs.js:453
-msgid "Which files do you want to keep?"
-msgstr ""
-
-#: js/oc-dialogs.js:454
-msgid ""
-"If you select both versions, the copied file will have a number added to its "
-"name."
-msgstr ""
-
-#: js/oc-dialogs.js:462
-msgid "Cancel"
-msgstr ""
-
-#: js/oc-dialogs.js:472
-msgid "Continue"
-msgstr ""
-
-#: js/oc-dialogs.js:519 js/oc-dialogs.js:532
-msgid "(all selected)"
-msgstr ""
-
-#: js/oc-dialogs.js:522 js/oc-dialogs.js:536
-msgid "({count} selected)"
-msgstr ""
-
-#: js/oc-dialogs.js:544
-msgid "Error loading file exists template"
-msgstr ""
-
-#: js/setup.js:99
-msgid "Very weak password"
-msgstr ""
-
-#: js/setup.js:100
-msgid "Weak password"
-msgstr ""
-
-#: js/setup.js:101
-msgid "So-so password"
-msgstr ""
-
-#: js/setup.js:102
-msgid "Good password"
-msgstr ""
-
-#: js/setup.js:103
-msgid "Strong password"
-msgstr ""
-
-#: js/setupchecks.js:24
-msgid ""
-"Your web server is not yet properly setup to allow files synchronization "
-"because the WebDAV interface seems to be broken."
-msgstr ""
-
-#: js/setupchecks.js:54
-msgid ""
-"This server has no working internet connection. This means that some of the "
-"features like mounting of external storage, notifications about updates or "
-"installation of 3rd party apps don´t work. Accessing files from remote and "
-"sending of notification emails might also not work. We suggest to enable "
-"internet connection for this server if you want to have all features."
-msgstr ""
-
-#: js/setupchecks.js:58
-msgid "Error occurred while checking server setup"
-msgstr ""
-
-#: js/share.js:129 js/share.js:251
-msgid "Shared"
-msgstr ""
-
-#: js/share.js:257
-msgid "Shared with {recipients}"
-msgstr ""
-
-#: js/share.js:266
-msgid "Share"
-msgstr ""
-
-#: js/share.js:326 js/share.js:340 js/share.js:347 js/share.js:1077
-#: templates/installation.php:10
-msgid "Error"
-msgstr ""
-
-#: js/share.js:328 js/share.js:1140
-msgid "Error while sharing"
-msgstr ""
-
-#: js/share.js:340
-msgid "Error while unsharing"
-msgstr ""
-
-#: js/share.js:347
-msgid "Error while changing permissions"
-msgstr ""
-
-#: js/share.js:357
-msgid "Shared with you and the group {group} by {owner}"
-msgstr ""
-
-#: js/share.js:359
-msgid "Shared with you by {owner}"
-msgstr ""
-
-#: js/share.js:383
-msgid "Share with user or group …"
-msgstr ""
-
-#: js/share.js:391
-msgid "Share link"
-msgstr ""
-
-#: js/share.js:396
-msgid ""
-"The public link will expire no later than {days} days after it is created"
-msgstr ""
-
-#: js/share.js:400
-msgid "Password protect"
-msgstr ""
-
-#: js/share.js:402 js/share.js:1028
-msgid "Choose a password for the public link"
-msgstr ""
-
-#: js/share.js:410
-msgid "Allow Public Upload"
-msgstr ""
-
-#: js/share.js:414
-msgid "Email link to person"
-msgstr ""
-
-#: js/share.js:415
-msgid "Send"
-msgstr ""
-
-#: js/share.js:420
-msgid "Set expiration date"
-msgstr ""
-
-#: js/share.js:421
-msgid "Expiration date"
-msgstr ""
-
-#: js/share.js:496
-msgid "Adding user..."
-msgstr ""
-
-#: js/share.js:513 js/share.js:581
-msgid "group"
-msgstr ""
-
-#: js/share.js:546
-msgid "Resharing is not allowed"
-msgstr ""
-
-#: js/share.js:597
-msgid "Shared in {item} with {user}"
-msgstr ""
-
-#: js/share.js:619
-msgid "Unshare"
-msgstr ""
-
-#: js/share.js:627
-msgid "notify by email"
-msgstr ""
-
-#: js/share.js:630
-msgid "can share"
-msgstr ""
-
-#: js/share.js:633
-msgid "can edit"
-msgstr ""
-
-#: js/share.js:635
-msgid "access control"
-msgstr ""
-
-#: js/share.js:638
-msgid "create"
-msgstr ""
-
-#: js/share.js:641
-msgid "update"
-msgstr ""
-
-#: js/share.js:644
-msgid "delete"
-msgstr ""
-
-#: js/share.js:1058
-msgid "Password protected"
-msgstr ""
-
-#: js/share.js:1077
-msgid "Error unsetting expiration date"
-msgstr ""
-
-#: js/share.js:1098
-msgid "Error setting expiration date"
-msgstr ""
-
-#: js/share.js:1127
-msgid "Sending ..."
-msgstr ""
-
-#: js/share.js:1138
-msgid "Email sent"
-msgstr ""
-
-#: js/share.js:1162
-msgid "Warning"
-msgstr ""
-
-#: js/tags.js:8
-msgid "The object type is not specified."
-msgstr ""
-
-#: js/tags.js:19
-msgid "Enter new"
-msgstr ""
-
-#: js/tags.js:33
-msgid "Delete"
-msgstr ""
-
-#: js/tags.js:43
-msgid "Add"
-msgstr ""
-
-#: js/tags.js:57
-msgid "Edit tags"
-msgstr ""
-
-#: js/tags.js:75
-msgid "Error loading dialog template: {error}"
-msgstr ""
-
-#: js/tags.js:288
-msgid "No tags selected for deletion."
-msgstr ""
-
-#: js/tests/specs/l10nSpec.js:28 js/tests/specs/l10nSpec.js:31
-msgid "unknown text"
-msgstr ""
-
-#: js/tests/specs/l10nSpec.js:34
-msgid "Hello world!"
-msgstr ""
-
-#: js/tests/specs/l10nSpec.js:38
-msgid "sunny"
-msgstr ""
-
-#: js/tests/specs/l10nSpec.js:38
-msgid "Hello {name}, the weather is {weather}"
-msgstr ""
-
-#: js/tests/specs/l10nSpec.js:45 js/tests/specs/l10nSpec.js:48
-#: js/tests/specs/l10nSpec.js:51 js/tests/specs/l10nSpec.js:54
-#: js/tests/specs/l10nSpec.js:62 js/tests/specs/l10nSpec.js:65
-#: js/tests/specs/l10nSpec.js:68 js/tests/specs/l10nSpec.js:71
-msgid "download %n file"
-msgid_plural "download %n files"
-msgstr[0] ""
-msgstr[1] ""
-
-#: js/update.js:30
-msgid "Updating {productName} to version {version}, this may take a while."
-msgstr ""
-
-#: js/update.js:43
-msgid "Please reload the page."
-msgstr ""
-
-#: js/update.js:52
-msgid "The update was unsuccessful."
-msgstr ""
-
-#: js/update.js:61
-msgid "The update was successful. Redirecting you to ownCloud now."
-msgstr ""
-
-#: lostpassword/controller/lostcontroller.php:133
-msgid "Couldn't reset password because the token is invalid"
-msgstr ""
-
-#: lostpassword/controller/lostcontroller.php:159
-msgid "Couldn't send reset email. Please make sure your username is correct."
-msgstr ""
-
-#: lostpassword/controller/lostcontroller.php:174
-msgid ""
-"Couldn't send reset email because there is no email address for this "
-"username. Please contact your administrator."
-msgstr ""
-
-#: lostpassword/controller/lostcontroller.php:191
-#, php-format
-msgid "%s password reset"
-msgstr ""
-
-#: lostpassword/templates/email.php:2
-msgid "Use the following link to reset your password: {link}"
-msgstr ""
-
-#: lostpassword/templates/lostpassword.php:6
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-
-#: lostpassword/templates/lostpassword.php:8
-#: lostpassword/templates/lostpassword.php:9 templates/installation.php:44
-#: templates/installation.php:47 templates/login.php:24 templates/login.php:28
-msgid "Username"
-msgstr ""
-
-#: lostpassword/templates/lostpassword.php:13
-msgid ""
-"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. If you "
-"are not sure what to do, please contact your administrator before you "
-"continue. Do you really want to continue?"
-msgstr ""
-
-#: lostpassword/templates/lostpassword.php:15
-msgid "Yes, I really want to reset my password now"
-msgstr ""
-
-#: lostpassword/templates/lostpassword.php:18
-msgid "Reset"
-msgstr ""
-
-#: lostpassword/templates/resetpassword.php:5
-msgid "New password"
-msgstr ""
-
-#: lostpassword/templates/resetpassword.php:6
-msgid "New Password"
-msgstr ""
-
-#: setup/controller.php:139
-#, php-format
-msgid ""
-"Mac OS X is not supported and %s will not work properly on this platform. "
-"Use it at your own risk! "
-msgstr ""
-
-#: setup/controller.php:143
-msgid "For the best results, please consider using a GNU/Linux server instead."
-msgstr ""
-
-#: strings.php:5
-msgid "Personal"
-msgstr ""
-
-#: strings.php:6
-msgid "Users"
-msgstr ""
-
-#: strings.php:7 templates/layout.user.php:50 templates/layout.user.php:123
-msgid "Apps"
-msgstr ""
-
-#: strings.php:8
-msgid "Admin"
-msgstr ""
-
-#: strings.php:9
-msgid "Help"
-msgstr ""
-
-#: tags/controller.php:22
-msgid "Error loading tags"
-msgstr ""
-
-#: tags/controller.php:48
-msgid "Tag already exists"
-msgstr ""
-
-#: tags/controller.php:64
-msgid "Error deleting tag(s)"
-msgstr ""
-
-#: tags/controller.php:75
-msgid "Error tagging"
-msgstr ""
-
-#: tags/controller.php:86
-msgid "Error untagging"
-msgstr ""
-
-#: tags/controller.php:97
-msgid "Error favoriting"
-msgstr ""
-
-#: tags/controller.php:108
-msgid "Error unfavoriting"
-msgstr ""
-
-#: templates/403.php:12
-msgid "Access forbidden"
-msgstr ""
-
-#: templates/404.php:17
-msgid "File not found"
-msgstr ""
-
-#: templates/404.php:18
-msgid "The specified document has not been found on the server."
-msgstr ""
-
-#: templates/404.php:19
-#, php-format
-msgid "You can click here to return to %s."
-msgstr ""
-
-#: templates/altmail.php:2
-#, php-format
-msgid ""
-"Hey there,\n"
-"\n"
-"just letting you know that %s shared %s with you.\n"
-"View it: %s\n"
-"\n"
-msgstr ""
-
-#: templates/altmail.php:4 templates/mail.php:17
-#, php-format
-msgid "The share will expire on %s."
-msgstr ""
-
-#. TRANSLATORS term at the end of a mail
-#: templates/altmail.php:8 templates/mail.php:21
-msgid "Cheers!"
-msgstr ""
-
-#: templates/exception.php:6
-msgid "Internal Server Error"
-msgstr ""
-
-#: templates/exception.php:7
-msgid ""
-"The server encountered an internal error and was unable to complete your "
-"request."
-msgstr ""
-
-#: templates/exception.php:8
-msgid ""
-"Please contact the server administrator if this error reappears multiple "
-"times, please include the technical details below in your report."
-msgstr ""
-
-#: templates/exception.php:9
-msgid "More details can be found in the server log."
-msgstr ""
-
-#: templates/exception.php:12
-msgid "Technical details"
-msgstr ""
-
-#: templates/exception.php:14
-#, php-format
-msgid "Remote Address: %s"
-msgstr ""
-
-#: templates/exception.php:15
-#, php-format
-msgid "Request ID: %s"
-msgstr ""
-
-#: templates/exception.php:17
-#, php-format
-msgid "Code: %s"
-msgstr ""
-
-#: templates/exception.php:18
-#, php-format
-msgid "Message: %s"
-msgstr ""
-
-#: templates/exception.php:19
-#, php-format
-msgid "File: %s"
-msgstr ""
-
-#: templates/exception.php:20
-#, php-format
-msgid "Line: %s"
-msgstr ""
-
-#: templates/exception.php:26
-msgid "Trace"
-msgstr ""
-
-#: templates/installation.php:25 templates/installation.php:32
-msgid "Security Warning"
-msgstr ""
-
-#: templates/installation.php:26
-msgid "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)"
-msgstr ""
-
-#: templates/installation.php:27
-#, php-format
-msgid "Please update your PHP installation to use %s securely."
-msgstr ""
-
-#: templates/installation.php:33
-msgid ""
-"Your data directory and files are probably accessible from the internet "
-"because the .htaccess file does not work."
-msgstr ""
-
-#: templates/installation.php:35
-#, php-format
-msgid ""
-"For information how to properly configure your server, please see the <a "
-"href=\"%s\" target=\"_blank\">documentation</a>."
-msgstr ""
-
-#: templates/installation.php:41
-msgid "Create an <strong>admin account</strong>"
-msgstr ""
-
-#: templates/installation.php:52 templates/installation.php:55
-#: templates/login.php:34 templates/login.php:37
-msgid "Password"
-msgstr ""
-
-#: templates/installation.php:65
-msgid "Storage & database"
-msgstr ""
-
-#: templates/installation.php:72
-msgid "Data folder"
-msgstr ""
-
-#: templates/installation.php:85
-msgid "Configure the database"
-msgstr ""
-
-#: templates/installation.php:89
-#, php-format
-msgid "Only %s is available."
-msgstr ""
-
-#: templates/installation.php:104 templates/installation.php:106
-msgid "Database user"
-msgstr ""
-
-#: templates/installation.php:112 templates/installation.php:115
-msgid "Database password"
-msgstr ""
-
-#: templates/installation.php:120 templates/installation.php:122
-msgid "Database name"
-msgstr ""
-
-#: templates/installation.php:130 templates/installation.php:132
-msgid "Database tablespace"
-msgstr ""
-
-#: templates/installation.php:139 templates/installation.php:141
-msgid "Database host"
-msgstr ""
-
-#: templates/installation.php:151
-msgid ""
-"SQLite will be used as database. For larger installations we recommend to "
-"change this."
-msgstr ""
-
-#: templates/installation.php:154
-msgid "Finish setup"
-msgstr ""
-
-#: templates/installation.php:154
-msgid "Finishing …"
-msgstr ""
-
-#: templates/layout.base.php:27 templates/layout.guest.php:28
-#: templates/layout.user.php:35
-msgid ""
-"This application requires JavaScript for correct operation. Please <a href="
-"\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> "
-"and reload the page."
-msgstr ""
-
-#: templates/layout.user.php:39
-#, php-format
-msgid "%s is available. Get more information on how to update."
-msgstr ""
-
-#: templates/layout.user.php:85 templates/singleuser.user.php:8
-msgid "Log out"
-msgstr ""
-
-#: templates/login.php:12
-msgid "Server side authentication failed!"
-msgstr ""
-
-#: templates/login.php:13
-msgid "Please contact your administrator."
-msgstr ""
-
-#: templates/login.php:43
-msgid "Forgot your password? Reset it!"
-msgstr ""
-
-#: templates/login.php:48
-msgid "remember"
-msgstr ""
-
-#: templates/login.php:53
-msgid "Log in"
-msgstr ""
-
-#: templates/login.php:59
-msgid "Alternative Logins"
-msgstr ""
-
-#: templates/mail.php:15
-#, php-format
-msgid ""
-"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>"
-msgstr ""
-
-#: templates/singleuser.user.php:3
-msgid "This ownCloud instance is currently in single user mode."
-msgstr ""
-
-#: templates/singleuser.user.php:4
-msgid "This means only administrators can use the instance."
-msgstr ""
-
-#: templates/singleuser.user.php:5 templates/update.user.php:5
-msgid ""
-"Contact your system administrator if this message persists or appeared "
-"unexpectedly."
-msgstr ""
-
-#: templates/singleuser.user.php:7 templates/update.user.php:6
-msgid "Thank you for your patience."
-msgstr ""
-
-#: templates/untrustedDomain.php:5
-msgid "You are accessing the server from an untrusted domain."
-msgstr ""
-
-#: templates/untrustedDomain.php:8
-msgid ""
-"Please contact your administrator. If you are an administrator of this "
-"instance, configure the \"trusted_domain\" setting in config/config.php. An "
-"example configuration is provided in config/config.sample.php."
-msgstr ""
-
-#: templates/untrustedDomain.php:10
-msgid ""
-"Depending on your configuration, as an administrator you might also be able "
-"to use the button below to trust this domain."
-msgstr ""
-
-#: templates/untrustedDomain.php:14
-#, php-format
-msgid "Add \"%s\" as trusted domain"
-msgstr ""
-
-#: templates/update.admin.php:3
-#, php-format
-msgid "%s will be updated to version %s."
-msgstr ""
-
-#: templates/update.admin.php:7
-msgid "The following apps will be disabled:"
-msgstr ""
-
-#: templates/update.admin.php:17
-#, php-format
-msgid "The theme %s has been disabled."
-msgstr ""
-
-#: templates/update.admin.php:21
-msgid ""
-"Please make sure that the database, the config folder and the data folder "
-"have been backed up before proceeding."
-msgstr ""
-
-#: templates/update.admin.php:23
-msgid "Start update"
-msgstr ""
-
-#: templates/update.admin.php:25
-msgid ""
-"To avoid timeouts with larger installations, you can instead run the "
-"following command from your installation directory:"
-msgstr ""
-
-#: templates/update.user.php:3
-#, php-format
-msgid "This %s instance is currently being updated, which may take a while."
-msgstr ""
-
-#: templates/update.user.php:4
-#, php-format
-msgid "This page will refresh itself when the %s instance is available again."
-msgstr ""
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
deleted file mode 100644
index c7f9ce54301..00000000000
--- a/l10n/templates/files.pot
+++ /dev/null
@@ -1,423 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: ajax/list.php:39
-msgid "Storage not available"
-msgstr ""
-
-#: ajax/list.php:47
-msgid "Storage invalid"
-msgstr ""
-
-#: ajax/list.php:55
-msgid "Unknown error"
-msgstr ""
-
-#: ajax/move.php:15
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:26 ajax/move.php:34
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/move.php:29
-msgid "Permission denied"
-msgstr ""
-
-#: ajax/newfile.php:59 js/files.js:103
-msgid "File name cannot be empty."
-msgstr ""
-
-#: ajax/newfile.php:64
-#, php-format
-msgid "\"%s\" is an invalid file name."
-msgstr ""
-
-#: ajax/newfile.php:70 ajax/newfolder.php:28 js/files.js:110
-msgid ""
-"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
-"allowed."
-msgstr ""
-
-#: ajax/newfile.php:77 ajax/newfolder.php:35 ajax/upload.php:161
-#: lib/app.php:87
-msgid "The target folder has been moved or deleted."
-msgstr ""
-
-#: ajax/newfile.php:89 ajax/newfolder.php:47 lib/app.php:96
-#, php-format
-msgid ""
-"The name %s is already used in the folder %s. Please choose a different name."
-msgstr ""
-
-#: ajax/newfile.php:99
-msgid "Not a valid source"
-msgstr ""
-
-#: ajax/newfile.php:104
-msgid ""
-"Server is not allowed to open URLs, please check the server configuration"
-msgstr ""
-
-#: ajax/newfile.php:131
-#, php-format
-msgid "The file exceeds your quota by %s"
-msgstr ""
-
-#: ajax/newfile.php:146
-#, php-format
-msgid "Error while downloading %s to %s"
-msgstr ""
-
-#: ajax/newfile.php:174
-msgid "Error when creating the file"
-msgstr ""
-
-#: ajax/newfolder.php:22
-msgid "Folder name cannot be empty."
-msgstr ""
-
-#: ajax/newfolder.php:66
-msgid "Error when creating the folder"
-msgstr ""
-
-#: ajax/upload.php:19 ajax/upload.php:59
-msgid "Unable to set upload directory."
-msgstr ""
-
-#: ajax/upload.php:35
-msgid "Invalid Token"
-msgstr ""
-
-#: ajax/upload.php:79
-msgid "No file was uploaded. Unknown error"
-msgstr ""
-
-#: ajax/upload.php:86
-msgid "There is no error, the file uploaded with success"
-msgstr ""
-
-#: ajax/upload.php:87
-msgid ""
-"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-msgstr ""
-
-#: ajax/upload.php:89
-msgid ""
-"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
-"the HTML form"
-msgstr ""
-
-#: ajax/upload.php:90
-msgid "The uploaded file was only partially uploaded"
-msgstr ""
-
-#: ajax/upload.php:91
-msgid "No file was uploaded"
-msgstr ""
-
-#: ajax/upload.php:92
-msgid "Missing a temporary folder"
-msgstr ""
-
-#: ajax/upload.php:93
-msgid "Failed to write to disk"
-msgstr ""
-
-#: ajax/upload.php:113
-msgid "Not enough storage available"
-msgstr ""
-
-#: ajax/upload.php:175
-msgid "Upload failed. Could not find uploaded file"
-msgstr ""
-
-#: ajax/upload.php:185
-msgid "Upload failed. Could not get file info."
-msgstr ""
-
-#: ajax/upload.php:200
-msgid "Invalid directory."
-msgstr ""
-
-#: appinfo/app.php:11 js/filelist.js:25
-msgid "Files"
-msgstr ""
-
-#: appinfo/app.php:27
-msgid "All files"
-msgstr ""
-
-#: js/file-upload.js:269
-msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
-msgstr ""
-
-#: js/file-upload.js:284
-msgid "Total file size {size1} exceeds upload limit {size2}"
-msgstr ""
-
-#: js/file-upload.js:295
-msgid ""
-"Not enough free space, you are uploading {size1} but only {size2} is left"
-msgstr ""
-
-#: js/file-upload.js:372
-msgid "Upload cancelled."
-msgstr ""
-
-#: js/file-upload.js:418
-msgid "Could not get result from server."
-msgstr ""
-
-#: js/file-upload.js:510
-msgid ""
-"File upload is in progress. Leaving the page now will cancel the upload."
-msgstr ""
-
-#: js/file-upload.js:575
-msgid "URL cannot be empty"
-msgstr ""
-
-#: js/file-upload.js:579 js/filelist.js:1310
-msgid "{new_name} already exists"
-msgstr ""
-
-#: js/file-upload.js:634
-msgid "Could not create file"
-msgstr ""
-
-#: js/file-upload.js:650
-msgid "Could not create folder"
-msgstr ""
-
-#: js/file-upload.js:697
-msgid "Error fetching URL"
-msgstr ""
-
-#: js/fileactions.js:285
-msgid "Share"
-msgstr ""
-
-#: js/fileactions.js:295 templates/list.php:77 templates/list.php:78
-msgid "Delete"
-msgstr ""
-
-#: js/fileactions.js:297
-msgid "Disconnect storage"
-msgstr ""
-
-#: js/fileactions.js:299
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:301
-msgid "Delete permanently"
-msgstr ""
-
-#: js/fileactions.js:342
-msgid "Rename"
-msgstr ""
-
-#: js/filelist.js:700 js/filelist.js:1856
-msgid "Pending"
-msgstr ""
-
-#: js/filelist.js:1261
-msgid "Error moving file."
-msgstr ""
-
-#: js/filelist.js:1269
-msgid "Error moving file"
-msgstr ""
-
-#: js/filelist.js:1269
-msgid "Error"
-msgstr ""
-
-#: js/filelist.js:1358
-msgid "Could not rename file"
-msgstr ""
-
-#: js/filelist.js:1480
-msgid "Error deleting file."
-msgstr ""
-
-#: js/filelist.js:1582 templates/list.php:61
-msgid "Name"
-msgstr ""
-
-#: js/filelist.js:1583 templates/list.php:72
-msgid "Size"
-msgstr ""
-
-#: js/filelist.js:1584 templates/list.php:75
-msgid "Modified"
-msgstr ""
-
-#: js/filelist.js:1594 js/filesummary.js:141 js/filesummary.js:168
-msgid "%n folder"
-msgid_plural "%n folders"
-msgstr[0] ""
-msgstr[1] ""
-
-#: js/filelist.js:1600 js/filesummary.js:142 js/filesummary.js:169
-msgid "%n file"
-msgid_plural "%n files"
-msgstr[0] ""
-msgstr[1] ""
-
-#: js/filelist.js:1657 templates/list.php:47
-msgid "You don’t have permission to upload or create files here"
-msgstr ""
-
-#: js/filelist.js:1749 js/filelist.js:1788
-msgid "Uploading %n file"
-msgid_plural "Uploading %n files"
-msgstr[0] ""
-msgstr[1] ""
-
-#: js/files.js:101
-msgid "\"{name}\" is an invalid file name."
-msgstr ""
-
-#: js/files.js:122
-msgid "Your storage is full, files can not be updated or synced anymore!"
-msgstr ""
-
-#: js/files.js:126
-msgid "Your storage is almost full ({usedSpacePercent}%)"
-msgstr ""
-
-#: js/files.js:140
-msgid ""
-"Encryption App is enabled but your keys are not initialized, please log-out "
-"and log-in again"
-msgstr ""
-
-#: js/files.js:144
-msgid ""
-"Invalid private key for Encryption App. Please update your private key "
-"password in your personal settings to recover access to your encrypted files."
-msgstr ""
-
-#: js/files.js:148
-msgid ""
-"Encryption was disabled but your files are still encrypted. Please go to "
-"your personal settings to decrypt your files."
-msgstr ""
-
-#: js/filesummary.js:182
-msgid "{dirs} and {files}"
-msgstr ""
-
-#: lib/app.php:80
-#, php-format
-msgid "%s could not be renamed as it has been deleted"
-msgstr ""
-
-#: lib/app.php:113
-#, php-format
-msgid "%s could not be renamed"
-msgstr ""
-
-#: lib/helper.php:25 templates/list.php:25
-#, php-format
-msgid "Upload (max. %s)"
-msgstr ""
-
-#: templates/admin.php:6
-msgid "File handling"
-msgstr ""
-
-#: templates/admin.php:7
-msgid "Maximum upload size"
-msgstr ""
-
-#: templates/admin.php:10
-msgid "max. possible: "
-msgstr ""
-
-#: templates/admin.php:15
-msgid "Save"
-msgstr ""
-
-#: templates/appnavigation.php:12
-msgid "WebDAV"
-msgstr ""
-
-#: templates/appnavigation.php:14
-#, php-format
-msgid ""
-"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via "
-"WebDAV</a>"
-msgstr ""
-
-#: templates/list.php:5
-msgid "New"
-msgstr ""
-
-#: templates/list.php:8
-msgid "New text file"
-msgstr ""
-
-#: templates/list.php:9
-msgid "Text file"
-msgstr ""
-
-#: templates/list.php:12
-msgid "New folder"
-msgstr ""
-
-#: templates/list.php:13
-msgid "Folder"
-msgstr ""
-
-#: templates/list.php:16
-msgid "From link"
-msgstr ""
-
-#: templates/list.php:52
-msgid "Nothing in here. Upload something!"
-msgstr ""
-
-#: templates/list.php:66
-msgid "Download"
-msgstr ""
-
-#: templates/list.php:91
-msgid "Upload too large"
-msgstr ""
-
-#: templates/list.php:93
-msgid ""
-"The files you are trying to upload exceed the maximum size for file uploads "
-"on this server."
-msgstr ""
-
-#: templates/list.php:98
-msgid "Files are being scanned, please wait."
-msgstr ""
-
-#: templates/list.php:101
-msgid "Currently scanning"
-msgstr ""
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
deleted file mode 100644
index a8046e6d05b..00000000000
--- a/l10n/templates/files_encryption.pot
+++ /dev/null
@@ -1,229 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ajax/adminrecovery.php:19
-msgid "Unknown error"
-msgstr ""
-
-#: ajax/adminrecovery.php:23
-msgid "Missing recovery key password"
-msgstr ""
-
-#: ajax/adminrecovery.php:29
-msgid "Please repeat the recovery key password"
-msgstr ""
-
-#: ajax/adminrecovery.php:35 ajax/changeRecoveryPassword.php:46
-msgid ""
-"Repeated recovery key password does not match the provided recovery key "
-"password"
-msgstr ""
-
-#: ajax/adminrecovery.php:49
-msgid "Recovery key successfully enabled"
-msgstr ""
-
-#: ajax/adminrecovery.php:51 ajax/adminrecovery.php:64
-msgid ""
-"Could not disable recovery key. Please check your recovery key password!"
-msgstr ""
-
-#: ajax/adminrecovery.php:62
-msgid "Recovery key successfully disabled"
-msgstr ""
-
-#: ajax/changeRecoveryPassword.php:28
-msgid "Please provide the old recovery password"
-msgstr ""
-
-#: ajax/changeRecoveryPassword.php:34
-msgid "Please provide a new recovery password"
-msgstr ""
-
-#: ajax/changeRecoveryPassword.php:40
-msgid "Please repeat the new recovery password"
-msgstr ""
-
-#: ajax/changeRecoveryPassword.php:76
-msgid "Password successfully changed."
-msgstr ""
-
-#: ajax/changeRecoveryPassword.php:78
-msgid "Could not change the password. Maybe the old password was not correct."
-msgstr ""
-
-#: ajax/updatePrivateKeyPassword.php:52
-msgid "Private key password successfully updated."
-msgstr ""
-
-#: ajax/updatePrivateKeyPassword.php:54
-msgid ""
-"Could not update the private key password. Maybe the old password was not "
-"correct."
-msgstr ""
-
-#: ajax/userrecovery.php:44
-msgid "File recovery settings updated"
-msgstr ""
-
-#: ajax/userrecovery.php:46
-msgid "Could not update file recovery"
-msgstr ""
-
-#: files/error.php:16
-msgid ""
-"Encryption app not initialized! Maybe the encryption app was re-enabled "
-"during your session. Please try to log out and log back in to initialize the "
-"encryption app."
-msgstr ""
-
-#: files/error.php:20
-#, php-format
-msgid ""
-"Your private key is not valid! Likely your password was changed outside of "
-"%s (e.g. your corporate directory). You can update your private key password "
-"in your personal settings to recover access to your encrypted files."
-msgstr ""
-
-#: files/error.php:23
-msgid ""
-"Can not decrypt this file, probably this is a shared file. Please ask the "
-"file owner to reshare the file with you."
-msgstr ""
-
-#: files/error.php:26 files/error.php:31
-msgid ""
-"Unknown error. Please check your system settings or contact your "
-"administrator"
-msgstr ""
-
-#: hooks/hooks.php:66
-msgid "Missing requirements."
-msgstr ""
-
-#: hooks/hooks.php:67
-msgid ""
-"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL "
-"together with the PHP extension is enabled and configured properly. For now, "
-"the encryption app has been disabled."
-msgstr ""
-
-#: hooks/hooks.php:300
-msgid "Following users are not set up for encryption:"
-msgstr ""
-
-#: js/detect-migration.js:21
-msgid "Initial encryption started... This can take some time. Please wait."
-msgstr ""
-
-#: js/detect-migration.js:25
-msgid "Initial encryption running... Please try again later."
-msgstr ""
-
-#: templates/invalid_private_key.php:8
-#, php-format
-msgid "Go directly to your %spersonal settings%s."
-msgstr ""
-
-#: templates/settings-admin.php:2 templates/settings-personal.php:2
-msgid "Encryption"
-msgstr ""
-
-#: templates/settings-admin.php:5 templates/settings-personal.php:6
-msgid ""
-"Encryption App is enabled but your keys are not initialized, please log-out "
-"and log-in again"
-msgstr ""
-
-#: templates/settings-admin.php:8
-msgid ""
-"Enable recovery key (allow to recover users files in case of password loss):"
-msgstr ""
-
-#: templates/settings-admin.php:13
-msgid "Recovery key password"
-msgstr ""
-
-#: templates/settings-admin.php:16
-msgid "Repeat Recovery key password"
-msgstr ""
-
-#: templates/settings-admin.php:24 templates/settings-personal.php:54
-msgid "Enabled"
-msgstr ""
-
-#: templates/settings-admin.php:33 templates/settings-personal.php:63
-msgid "Disabled"
-msgstr ""
-
-#: templates/settings-admin.php:38
-msgid "Change recovery key password:"
-msgstr ""
-
-#: templates/settings-admin.php:45
-msgid "Old Recovery key password"
-msgstr ""
-
-#: templates/settings-admin.php:52
-msgid "New Recovery key password"
-msgstr ""
-
-#: templates/settings-admin.php:58
-msgid "Repeat New Recovery key password"
-msgstr ""
-
-#: templates/settings-admin.php:63
-msgid "Change Password"
-msgstr ""
-
-#: templates/settings-personal.php:12
-msgid "Your private key password no longer matches your log-in password."
-msgstr ""
-
-#: templates/settings-personal.php:15
-msgid "Set your old private key password to your current log-in password:"
-msgstr ""
-
-#: templates/settings-personal.php:17
-msgid ""
-" If you don't remember your old password you can ask your administrator to "
-"recover your files."
-msgstr ""
-
-#: templates/settings-personal.php:24
-msgid "Old log-in password"
-msgstr ""
-
-#: templates/settings-personal.php:30
-msgid "Current log-in password"
-msgstr ""
-
-#: templates/settings-personal.php:35
-msgid "Update Private Key Password"
-msgstr ""
-
-#: templates/settings-personal.php:43
-msgid "Enable password recovery:"
-msgstr ""
-
-#: templates/settings-personal.php:46
-msgid ""
-"Enabling this option will allow you to reobtain access to your encrypted "
-"files in case of password loss"
-msgstr ""
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
deleted file mode 100644
index 6a044f6fb0e..00000000000
--- a/l10n/templates/files_external.pot
+++ /dev/null
@@ -1,313 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ajax/dropbox.php:27
-msgid ""
-"Fetching request tokens failed. Verify that your Dropbox app key and secret "
-"are correct."
-msgstr ""
-
-#: ajax/dropbox.php:40
-msgid ""
-"Fetching access tokens failed. Verify that your Dropbox app key and secret "
-"are correct."
-msgstr ""
-
-#: ajax/dropbox.php:48 js/dropbox.js:102
-msgid "Please provide a valid Dropbox app key and secret."
-msgstr ""
-
-#: ajax/google.php:27
-#, php-format
-msgid "Step 1 failed. Exception: %s"
-msgstr ""
-
-#: ajax/google.php:38
-#, php-format
-msgid "Step 2 failed. Exception: %s"
-msgstr ""
-
-#: appinfo/app.php:37 js/app.js:32 templates/settings.php:9
-msgid "External storage"
-msgstr ""
-
-#: appinfo/app.php:46
-msgid "Local"
-msgstr ""
-
-#: appinfo/app.php:49
-msgid "Location"
-msgstr ""
-
-#: appinfo/app.php:52
-msgid "Amazon S3"
-msgstr ""
-
-#: appinfo/app.php:55
-msgid "Key"
-msgstr ""
-
-#: appinfo/app.php:56
-msgid "Secret"
-msgstr ""
-
-#: appinfo/app.php:57 appinfo/app.php:66 appinfo/app.php:114
-msgid "Bucket"
-msgstr ""
-
-#: appinfo/app.php:61
-msgid "Amazon S3 and compliant"
-msgstr ""
-
-#: appinfo/app.php:64
-msgid "Access Key"
-msgstr ""
-
-#: appinfo/app.php:65
-msgid "Secret Key"
-msgstr ""
-
-#: appinfo/app.php:67
-msgid "Hostname"
-msgstr ""
-
-#: appinfo/app.php:68
-msgid "Port"
-msgstr ""
-
-#: appinfo/app.php:69
-msgid "Region"
-msgstr ""
-
-#: appinfo/app.php:70
-msgid "Enable SSL"
-msgstr ""
-
-#: appinfo/app.php:71
-msgid "Enable Path Style"
-msgstr ""
-
-#: appinfo/app.php:79
-msgid "App key"
-msgstr ""
-
-#: appinfo/app.php:80
-msgid "App secret"
-msgstr ""
-
-#: appinfo/app.php:90 appinfo/app.php:131 appinfo/app.php:142
-#: appinfo/app.php:175
-msgid "Host"
-msgstr ""
-
-#: appinfo/app.php:91 appinfo/app.php:113 appinfo/app.php:132
-#: appinfo/app.php:154 appinfo/app.php:165 appinfo/app.php:176
-msgid "Username"
-msgstr ""
-
-#: appinfo/app.php:92 appinfo/app.php:133 appinfo/app.php:155
-#: appinfo/app.php:166 appinfo/app.php:177
-msgid "Password"
-msgstr ""
-
-#: appinfo/app.php:93 appinfo/app.php:135 appinfo/app.php:145
-#: appinfo/app.php:156 appinfo/app.php:178
-msgid "Root"
-msgstr ""
-
-#: appinfo/app.php:94
-msgid "Secure ftps://"
-msgstr ""
-
-#: appinfo/app.php:102
-msgid "Client ID"
-msgstr ""
-
-#: appinfo/app.php:103
-msgid "Client secret"
-msgstr ""
-
-#: appinfo/app.php:110
-msgid "OpenStack Object Storage"
-msgstr ""
-
-#: appinfo/app.php:115
-msgid "Region (optional for OpenStack Object Storage)"
-msgstr ""
-
-#: appinfo/app.php:116
-msgid "API Key (required for Rackspace Cloud Files)"
-msgstr ""
-
-#: appinfo/app.php:117
-msgid "Tenantname (required for OpenStack Object Storage)"
-msgstr ""
-
-#: appinfo/app.php:118
-msgid "Password (required for OpenStack Object Storage)"
-msgstr ""
-
-#: appinfo/app.php:119
-msgid "Service Name (required for OpenStack Object Storage)"
-msgstr ""
-
-#: appinfo/app.php:120
-msgid "URL of identity endpoint (required for OpenStack Object Storage)"
-msgstr ""
-
-#: appinfo/app.php:121
-msgid "Timeout of HTTP requests in seconds"
-msgstr ""
-
-#: appinfo/app.php:134 appinfo/app.php:144
-msgid "Share"
-msgstr ""
-
-#: appinfo/app.php:139
-msgid "SMB / CIFS using OC login"
-msgstr ""
-
-#: appinfo/app.php:143
-msgid "Username as share"
-msgstr ""
-
-#: appinfo/app.php:153 appinfo/app.php:164
-msgid "URL"
-msgstr ""
-
-#: appinfo/app.php:157 appinfo/app.php:168
-msgid "Secure https://"
-msgstr ""
-
-#: appinfo/app.php:167
-msgid "Remote subfolder"
-msgstr ""
-
-#: js/dropbox.js:7 js/dropbox.js:29 js/google.js:8 js/google.js:40
-msgid "Access granted"
-msgstr ""
-
-#: js/dropbox.js:33 js/dropbox.js:97 js/dropbox.js:103
-msgid "Error configuring Dropbox storage"
-msgstr ""
-
-#: js/dropbox.js:68 js/google.js:89
-msgid "Grant access"
-msgstr ""
-
-#: js/google.js:45 js/google.js:122
-msgid "Error configuring Google Drive storage"
-msgstr ""
-
-#: js/mountsfilelist.js:34
-msgid "Personal"
-msgstr ""
-
-#: js/mountsfilelist.js:36
-msgid "System"
-msgstr ""
-
-#: js/settings.js:211
-msgid "All users. Type to select user or group."
-msgstr ""
-
-#: js/settings.js:294
-msgid "(group)"
-msgstr ""
-
-#: js/settings.js:471 js/settings.js:478
-msgid "Saved"
-msgstr ""
-
-#: lib/config.php:713
-msgid "<b>Note:</b> "
-msgstr ""
-
-#: lib/config.php:724
-msgid " and "
-msgstr ""
-
-#: lib/config.php:746
-#, php-format
-msgid ""
-"<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."
-msgstr ""
-
-#: lib/config.php:748
-#, php-format
-msgid ""
-"<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."
-msgstr ""
-
-#: lib/config.php:750
-#, php-format
-msgid ""
-"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please "
-"ask your system administrator to install it."
-msgstr ""
-
-#: templates/list.php:7
-msgid "You don't have any external storages"
-msgstr ""
-
-#: templates/list.php:16
-msgid "Name"
-msgstr ""
-
-#: templates/list.php:20
-msgid "Storage type"
-msgstr ""
-
-#: templates/list.php:23
-msgid "Scope"
-msgstr ""
-
-#: templates/settings.php:2
-msgid "External Storage"
-msgstr ""
-
-#: templates/settings.php:8 templates/settings.php:27
-msgid "Folder name"
-msgstr ""
-
-#: templates/settings.php:10
-msgid "Configuration"
-msgstr ""
-
-#: templates/settings.php:11
-msgid "Available for"
-msgstr ""
-
-#: templates/settings.php:33
-msgid "Add storage"
-msgstr ""
-
-#: templates/settings.php:96 templates/settings.php:97
-msgid "Delete"
-msgstr ""
-
-#: templates/settings.php:110
-msgid "Enable User External Storage"
-msgstr ""
-
-#: templates/settings.php:113
-msgid "Allow users to mount the following external storage"
-msgstr ""
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
deleted file mode 100644
index 08ebd45a43b..00000000000
--- a/l10n/templates/files_sharing.pot
+++ /dev/null
@@ -1,163 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ajax/external.php:17
-msgid "Server to server sharing is not enabled on this server"
-msgstr ""
-
-#: ajax/external.php:29
-msgid "The mountpoint name contains invalid characters."
-msgstr ""
-
-#: ajax/external.php:44
-msgid "Invalid or untrusted SSL certificate"
-msgstr ""
-
-#: ajax/external.php:58
-msgid "Couldn't add remote share"
-msgstr ""
-
-#: appinfo/app.php:40 js/app.js:34
-msgid "Shared with you"
-msgstr ""
-
-#: appinfo/app.php:52 js/app.js:53
-msgid "Shared with others"
-msgstr ""
-
-#: appinfo/app.php:61 js/app.js:72
-msgid "Shared by link"
-msgstr ""
-
-#: js/app.js:35
-msgid "No files have been shared with you yet."
-msgstr ""
-
-#: js/app.js:54
-msgid "You haven't shared any files yet."
-msgstr ""
-
-#: js/app.js:73
-msgid "You haven't shared any files by link yet."
-msgstr ""
-
-#: js/external.js:48 js/external.js:59
-msgid "Do you want to add the remote share {name} from {owner}@{remote}?"
-msgstr ""
-
-#: js/external.js:51 js/external.js:62
-msgid "Remote share"
-msgstr ""
-
-#: js/external.js:65
-msgid "Remote share password"
-msgstr ""
-
-#: js/external.js:76
-msgid "Cancel"
-msgstr ""
-
-#: js/external.js:77
-msgid "Add remote share"
-msgstr ""
-
-#: js/public.js:213
-msgid "No ownCloud installation found at {remote}"
-msgstr ""
-
-#: js/public.js:214
-msgid "Invalid ownCloud url"
-msgstr ""
-
-#: js/sharedfilelist.js:128
-msgid "Shared by"
-msgstr ""
-
-#: templates/authenticate.php:4
-msgid "This share is password-protected"
-msgstr ""
-
-#: templates/authenticate.php:7
-msgid "The password is wrong. Try again."
-msgstr ""
-
-#: templates/authenticate.php:10 templates/authenticate.php:12
-msgid "Password"
-msgstr ""
-
-#: templates/list.php:16
-msgid "Name"
-msgstr ""
-
-#: templates/list.php:20
-msgid "Share time"
-msgstr ""
-
-#: templates/part.404.php:3
-msgid "Sorry, this link doesn’t seem to work anymore."
-msgstr ""
-
-#: templates/part.404.php:4
-msgid "Reasons might be:"
-msgstr ""
-
-#: templates/part.404.php:6
-msgid "the item was removed"
-msgstr ""
-
-#: templates/part.404.php:7
-msgid "the link expired"
-msgstr ""
-
-#: templates/part.404.php:8
-msgid "sharing is disabled"
-msgstr ""
-
-#: templates/part.404.php:10
-msgid "For more info, please ask the person who sent this link."
-msgstr ""
-
-#: templates/public.php:38
-msgid "Add to your ownCloud"
-msgstr ""
-
-#: templates/public.php:47
-msgid "Download"
-msgstr ""
-
-#: templates/public.php:70
-#, php-format
-msgid "Download %s"
-msgstr ""
-
-#: templates/public.php:74
-msgid "Direct link"
-msgstr ""
-
-#: templates/settings-admin.php:7
-msgid "Server-to-Server Sharing"
-msgstr ""
-
-#: templates/settings-admin.php:12
-msgid "Allow users on this server to send shares to other servers"
-msgstr ""
-
-#: templates/settings-admin.php:18
-msgid "Allow users on this server to receive shares from other servers"
-msgstr ""
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
deleted file mode 100644
index 7b7b062bdc3..00000000000
--- a/l10n/templates/files_trashbin.pot
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ajax/delete.php:61
-#, php-format
-msgid "Couldn't delete %s permanently"
-msgstr ""
-
-#: ajax/undelete.php:65
-#, php-format
-msgid "Couldn't restore %s"
-msgstr ""
-
-#: appinfo/app.php:17 js/filelist.js:34
-msgid "Deleted files"
-msgstr ""
-
-#: js/app.js:52 templates/index.php:21 templates/index.php:23
-msgid "Restore"
-msgstr ""
-
-#: js/filelist.js:119 js/filelist.js:164 js/filelist.js:214
-msgid "Error"
-msgstr ""
-
-#: lib/trashbin.php:980 lib/trashbin.php:982
-msgid "restored"
-msgstr ""
-
-#: templates/index.php:7
-msgid "Nothing in here. Your trash bin is empty!"
-msgstr ""
-
-#: templates/index.php:18
-msgid "Name"
-msgstr ""
-
-#: templates/index.php:29
-msgid "Deleted"
-msgstr ""
-
-#: templates/index.php:32 templates/index.php:33
-msgid "Delete"
-msgstr ""
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
deleted file mode 100644
index 47edc7a17f5..00000000000
--- a/l10n/templates/files_versions.pot
+++ /dev/null
@@ -1,43 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ajax/rollbackVersion.php:13
-#, php-format
-msgid "Could not revert: %s"
-msgstr ""
-
-#: js/versions.js:48
-msgid "Versions"
-msgstr ""
-
-#: js/versions.js:70
-msgid "Failed to revert {file} to revision {timestamp}."
-msgstr ""
-
-#: js/versions.js:97
-msgid "More versions..."
-msgstr ""
-
-#: js/versions.js:135
-msgid "No other versions available"
-msgstr ""
-
-#: js/versions.js:165
-msgid "Restore"
-msgstr ""
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
deleted file mode 100644
index 74fc434fcc4..00000000000
--- a/l10n/templates/lib.pot
+++ /dev/null
@@ -1,621 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: base.php:201 base.php:208
-msgid "Cannot write into \"config\" directory!"
-msgstr ""
-
-#: base.php:202
-msgid ""
-"This can usually be fixed by giving the webserver write access to the config "
-"directory"
-msgstr ""
-
-#: base.php:204
-#, php-format
-msgid "See %s"
-msgstr ""
-
-#: base.php:209 private/util.php:502
-#, php-format
-msgid ""
-"This can usually be fixed by %sgiving the webserver write access to the "
-"config directory%s."
-msgstr ""
-
-#: base.php:592
-msgid "Sample configuration detected"
-msgstr ""
-
-#: base.php:593
-msgid ""
-"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"
-msgstr ""
-
-#: private/app.php:410
-msgid "Help"
-msgstr ""
-
-#: private/app.php:423
-msgid "Personal"
-msgstr ""
-
-#: private/app.php:434
-msgid "Settings"
-msgstr ""
-
-#: private/app.php:446
-msgid "Users"
-msgstr ""
-
-#: private/app.php:459
-msgid "Admin"
-msgstr ""
-
-#: private/app.php:865 private/app.php:976
-msgid "Recommended"
-msgstr ""
-
-#: private/app.php:1158
-#, php-format
-msgid ""
-"App \\\"%s\\\" can't be installed because it is not compatible with this "
-"version of ownCloud."
-msgstr ""
-
-#: private/app.php:1170
-msgid "No app name specified"
-msgstr ""
-
-#: private/avatar.php:66
-msgid "Unknown filetype"
-msgstr ""
-
-#: private/avatar.php:71
-msgid "Invalid image"
-msgstr ""
-
-#: private/defaults.php:44
-msgid "web services under your control"
-msgstr ""
-
-#: private/installer.php:77
-msgid "App directory already exists"
-msgstr ""
-
-#: private/installer.php:90
-#, php-format
-msgid "Can't create app folder. Please fix permissions. %s"
-msgstr ""
-
-#: private/installer.php:234
-msgid "No source specified when installing app"
-msgstr ""
-
-#: private/installer.php:242
-msgid "No href specified when installing app from http"
-msgstr ""
-
-#: private/installer.php:247
-msgid "No path specified when installing app from local file"
-msgstr ""
-
-#: private/installer.php:255
-#, php-format
-msgid "Archives of type %s are not supported"
-msgstr ""
-
-#: private/installer.php:269
-msgid "Failed to open archive when installing app"
-msgstr ""
-
-#: private/installer.php:307
-msgid "App does not provide an info.xml file"
-msgstr ""
-
-#: private/installer.php:313
-msgid "App can't be installed because of not allowed code in the App"
-msgstr ""
-
-#: private/installer.php:319
-msgid ""
-"App can't be installed because it is not compatible with this version of "
-"ownCloud"
-msgstr ""
-
-#: private/installer.php:325
-msgid ""
-"App can't be installed because it contains the <shipped>true</shipped> tag "
-"which is not allowed for non shipped apps"
-msgstr ""
-
-#: private/installer.php:338
-msgid ""
-"App can't be installed because the version in info.xml/version is not the "
-"same as the version reported from the app store"
-msgstr ""
-
-#: private/json.php:29
-msgid "Application is not enabled"
-msgstr ""
-
-#: private/json.php:40 private/json.php:62 private/json.php:87
-msgid "Authentication error"
-msgstr ""
-
-#: private/json.php:51
-msgid "Token expired. Please reload page."
-msgstr ""
-
-#: private/json.php:74
-msgid "Unknown user"
-msgstr ""
-
-#: private/setup/abstractdatabase.php:26 private/setup/oci.php:26
-#, php-format
-msgid "%s enter the database username."
-msgstr ""
-
-#: private/setup/abstractdatabase.php:29 private/setup/oci.php:29
-#, php-format
-msgid "%s enter the database name."
-msgstr ""
-
-#: private/setup/abstractdatabase.php:32
-#, php-format
-msgid "%s you may not use dots in the database name"
-msgstr ""
-
-#: private/setup/mssql.php:20
-#, php-format
-msgid "MS SQL username and/or password not valid: %s"
-msgstr ""
-
-#: private/setup/mssql.php:21 private/setup/mysql.php:13
-#: private/setup/oci.php:128 private/setup/postgresql.php:31
-#: private/setup/postgresql.php:84
-msgid "You need to enter either an existing account or the administrator."
-msgstr ""
-
-#: private/setup/mysql.php:12
-msgid "MySQL/MariaDB username and/or password not valid"
-msgstr ""
-
-#: private/setup/mysql.php:81 private/setup/oci.php:68
-#: private/setup/oci.php:135 private/setup/oci.php:158
-#: private/setup/oci.php:165 private/setup/oci.php:176
-#: private/setup/oci.php:183 private/setup/oci.php:192
-#: private/setup/oci.php:200 private/setup/oci.php:209
-#: private/setup/oci.php:215 private/setup/postgresql.php:103
-#: private/setup/postgresql.php:112 private/setup/postgresql.php:129
-#: private/setup/postgresql.php:139 private/setup/postgresql.php:148
-#, php-format
-msgid "DB Error: \"%s\""
-msgstr ""
-
-#: private/setup/mysql.php:82 private/setup/oci.php:69
-#: private/setup/oci.php:136 private/setup/oci.php:159
-#: private/setup/oci.php:166 private/setup/oci.php:177
-#: private/setup/oci.php:193 private/setup/oci.php:201
-#: private/setup/oci.php:210 private/setup/postgresql.php:104
-#: private/setup/postgresql.php:113 private/setup/postgresql.php:130
-#: private/setup/postgresql.php:140 private/setup/postgresql.php:149
-#, php-format
-msgid "Offending command was: \"%s\""
-msgstr ""
-
-#: private/setup/mysql.php:99
-#, php-format
-msgid "MySQL/MariaDB user '%s'@'localhost' exists already."
-msgstr ""
-
-#: private/setup/mysql.php:100
-msgid "Drop this user from MySQL/MariaDB"
-msgstr ""
-
-#: private/setup/mysql.php:105
-#, php-format
-msgid "MySQL/MariaDB user '%s'@'%%' already exists"
-msgstr ""
-
-#: private/setup/mysql.php:106
-msgid "Drop this user from MySQL/MariaDB."
-msgstr ""
-
-#: private/setup/oci.php:48
-msgid "Oracle connection could not be established"
-msgstr ""
-
-#: private/setup/oci.php:55 private/setup/oci.php:127
-msgid "Oracle username and/or password not valid"
-msgstr ""
-
-#: private/setup/oci.php:184 private/setup/oci.php:216
-#, php-format
-msgid "Offending command was: \"%s\", name: %s, password: %s"
-msgstr ""
-
-#: private/setup/postgresql.php:30 private/setup/postgresql.php:83
-msgid "PostgreSQL username and/or password not valid"
-msgstr ""
-
-#: private/setup.php:129
-msgid "Set an admin username."
-msgstr ""
-
-#: private/setup.php:132
-msgid "Set an admin password."
-msgstr ""
-
-#: private/setup.php:156
-#, php-format
-msgid "Can't create or write into the data directory %s"
-msgstr ""
-
-#: private/share/mailnotifications.php:91
-#: private/share/mailnotifications.php:142
-#, php-format
-msgid "%s shared »%s« with you"
-msgstr ""
-
-#: private/share/share.php:509
-#, php-format
-msgid "Sharing %s failed, because the file does not exist"
-msgstr ""
-
-#: private/share/share.php:516
-#, php-format
-msgid "You are not allowed to share %s"
-msgstr ""
-
-#: private/share/share.php:546
-#, php-format
-msgid "Sharing %s failed, because the user %s is the item owner"
-msgstr ""
-
-#: private/share/share.php:552
-#, php-format
-msgid "Sharing %s failed, because the user %s does not exist"
-msgstr ""
-
-#: private/share/share.php:561
-#, php-format
-msgid ""
-"Sharing %s failed, because the user %s is not a member of any groups that %s "
-"is a member of"
-msgstr ""
-
-#: private/share/share.php:574 private/share/share.php:602
-#, php-format
-msgid "Sharing %s failed, because this item is already shared with %s"
-msgstr ""
-
-#: private/share/share.php:582
-#, php-format
-msgid "Sharing %s failed, because the group %s does not exist"
-msgstr ""
-
-#: private/share/share.php:589
-#, php-format
-msgid "Sharing %s failed, because %s is not a member of the group %s"
-msgstr ""
-
-#: private/share/share.php:643
-msgid ""
-"You need to provide a password to create a public link, only protected links "
-"are allowed"
-msgstr ""
-
-#: private/share/share.php:672
-#, php-format
-msgid "Sharing %s failed, because sharing with links is not allowed"
-msgstr ""
-
-#: private/share/share.php:678
-#, php-format
-msgid "Share type %s is not valid for %s"
-msgstr ""
-
-#: private/share/share.php:902
-#, php-format
-msgid ""
-"Setting permissions for %s failed, because the permissions exceed "
-"permissions granted to %s"
-msgstr ""
-
-#: private/share/share.php:963
-#, php-format
-msgid "Setting permissions for %s failed, because the item was not found"
-msgstr ""
-
-#: private/share/share.php:1001
-#, php-format
-msgid ""
-"Cannot set expiration date. Shares cannot expire later than %s after they "
-"have been shared"
-msgstr ""
-
-#: private/share/share.php:1009
-msgid "Cannot set expiration date. Expiration date is in the past"
-msgstr ""
-
-#: private/share/share.php:1135
-#, php-format
-msgid "Sharing backend %s must implement the interface OCP\\Share_Backend"
-msgstr ""
-
-#: private/share/share.php:1142
-#, php-format
-msgid "Sharing backend %s not found"
-msgstr ""
-
-#: private/share/share.php:1148
-#, php-format
-msgid "Sharing backend for %s not found"
-msgstr ""
-
-#: private/share/share.php:1891
-#, php-format
-msgid "Sharing %s failed, because the user %s is the original sharer"
-msgstr ""
-
-#: private/share/share.php:1901
-#, php-format
-msgid ""
-"Sharing %s failed, because the permissions exceed permissions granted to %s"
-msgstr ""
-
-#: private/share/share.php:1927
-#, php-format
-msgid "Sharing %s failed, because resharing is not allowed"
-msgstr ""
-
-#: private/share/share.php:1941
-#, php-format
-msgid ""
-"Sharing %s failed, because the sharing backend for %s could not find its "
-"source"
-msgstr ""
-
-#: private/share/share.php:1955
-#, php-format
-msgid ""
-"Sharing %s failed, because the file could not be found in the file cache"
-msgstr ""
-
-#: private/tags.php:226
-#, php-format
-msgid "Could not find category \"%s\""
-msgstr ""
-
-#: private/template/functions.php:225
-msgid "seconds ago"
-msgstr ""
-
-#: private/template/functions.php:226
-msgid "%n minute ago"
-msgid_plural "%n minutes ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: private/template/functions.php:227
-msgid "%n hour ago"
-msgid_plural "%n hours ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: private/template/functions.php:228
-msgid "today"
-msgstr ""
-
-#: private/template/functions.php:229
-msgid "yesterday"
-msgstr ""
-
-#: private/template/functions.php:231
-msgid "%n day go"
-msgid_plural "%n days ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: private/template/functions.php:233
-msgid "last month"
-msgstr ""
-
-#: private/template/functions.php:234
-msgid "%n month ago"
-msgid_plural "%n months ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: private/template/functions.php:236
-msgid "last year"
-msgstr ""
-
-#: private/template/functions.php:237
-msgid "years ago"
-msgstr ""
-
-#: private/user/manager.php:244
-msgid ""
-"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", "
-"\"0-9\", and \"_.@-\""
-msgstr ""
-
-#: private/user/manager.php:249
-msgid "A valid username must be provided"
-msgstr ""
-
-#: private/user/manager.php:253
-msgid "A valid password must be provided"
-msgstr ""
-
-#: private/user/manager.php:258
-msgid "The username is already being used"
-msgstr ""
-
-#: private/util.php:487
-msgid "No database drivers (sqlite, mysql, or postgresql) installed."
-msgstr ""
-
-#: private/util.php:494
-#, php-format
-msgid ""
-"Permissions can usually be fixed by %sgiving the webserver write access to "
-"the root directory%s."
-msgstr ""
-
-#: private/util.php:501
-msgid "Cannot write into \"config\" directory"
-msgstr ""
-
-#: private/util.php:515
-msgid "Cannot write into \"apps\" directory"
-msgstr ""
-
-#: private/util.php:516
-#, php-format
-msgid ""
-"This can usually be fixed by %sgiving the webserver write access to the apps "
-"directory%s or disabling the appstore in the config file."
-msgstr ""
-
-#: private/util.php:531
-#, php-format
-msgid "Cannot create \"data\" directory (%s)"
-msgstr ""
-
-#: private/util.php:532
-#, php-format
-msgid ""
-"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the "
-"webserver write access to the root directory</a>."
-msgstr ""
-
-#: private/util.php:549
-#, php-format
-msgid "Setting locale to %s failed"
-msgstr ""
-
-#: private/util.php:552
-msgid ""
-"Please install one of these locales on your system and restart your "
-"webserver."
-msgstr ""
-
-#: private/util.php:581
-msgid "Please ask your server administrator to install the module."
-msgstr ""
-
-#: private/util.php:601
-#, php-format
-msgid "PHP module %s not installed."
-msgstr ""
-
-#: private/util.php:609
-#, php-format
-msgid "PHP %s or higher is required."
-msgstr ""
-
-#: private/util.php:610
-msgid ""
-"Please ask your server administrator to update PHP to the latest version. "
-"Your PHP version is no longer supported by ownCloud and the PHP community."
-msgstr ""
-
-#: private/util.php:621
-msgid ""
-"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work "
-"properly."
-msgstr ""
-
-#: private/util.php:622
-msgid ""
-"PHP Safe Mode is a deprecated and mostly useless setting that should be "
-"disabled. Please ask your server administrator to disable it in php.ini or "
-"in your webserver config."
-msgstr ""
-
-#: private/util.php:629
-msgid ""
-"Magic Quotes is enabled. ownCloud requires that it is disabled to work "
-"properly."
-msgstr ""
-
-#: private/util.php:630
-msgid ""
-"Magic Quotes is a deprecated and mostly useless setting that should be "
-"disabled. Please ask your server administrator to disable it in php.ini or "
-"in your webserver config."
-msgstr ""
-
-#: private/util.php:644
-msgid "PHP modules have been installed, but they are still listed as missing?"
-msgstr ""
-
-#: private/util.php:645
-msgid "Please ask your server administrator to restart the web server."
-msgstr ""
-
-#: private/util.php:675
-msgid "PostgreSQL >= 9 required"
-msgstr ""
-
-#: private/util.php:676
-msgid "Please upgrade your database version"
-msgstr ""
-
-#: private/util.php:683
-msgid "Error occurred while checking PostgreSQL version"
-msgstr ""
-
-#: private/util.php:684
-msgid ""
-"Please make sure you have PostgreSQL >= 9 or check the logs for more "
-"information about the error"
-msgstr ""
-
-#: private/util.php:749
-msgid ""
-"Please change the permissions to 0770 so that the directory cannot be listed "
-"by other users."
-msgstr ""
-
-#: private/util.php:758
-#, php-format
-msgid "Data directory (%s) is readable by other users"
-msgstr ""
-
-#: private/util.php:779
-#, php-format
-msgid "Data directory (%s) is invalid"
-msgstr ""
-
-#: private/util.php:780
-msgid ""
-"Please check that the data directory contains a file \".ocdata\" in its root."
-msgstr ""
-
-#: public/files/locknotacquiredexception.php:39
-#, php-format
-msgid "Could not obtain lock type %d on \"%s\"."
-msgstr ""
diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot
deleted file mode 100644
index d44e6ef00e3..00000000000
--- a/l10n/templates/private.pot
+++ /dev/null
@@ -1,582 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: app.php:410
-msgid "Help"
-msgstr ""
-
-#: app.php:423
-msgid "Personal"
-msgstr ""
-
-#: app.php:434
-msgid "Settings"
-msgstr ""
-
-#: app.php:446
-msgid "Users"
-msgstr ""
-
-#: app.php:459
-msgid "Admin"
-msgstr ""
-
-#: app.php:865 app.php:976
-msgid "Recommended"
-msgstr ""
-
-#: app.php:1158
-#, php-format
-msgid ""
-"App \\\"%s\\\" can't be installed because it is not compatible with this "
-"version of ownCloud."
-msgstr ""
-
-#: app.php:1170
-msgid "No app name specified"
-msgstr ""
-
-#: avatar.php:66
-msgid "Unknown filetype"
-msgstr ""
-
-#: avatar.php:71
-msgid "Invalid image"
-msgstr ""
-
-#: defaults.php:44
-msgid "web services under your control"
-msgstr ""
-
-#: installer.php:77
-msgid "App directory already exists"
-msgstr ""
-
-#: installer.php:90
-#, php-format
-msgid "Can't create app folder. Please fix permissions. %s"
-msgstr ""
-
-#: installer.php:234
-msgid "No source specified when installing app"
-msgstr ""
-
-#: installer.php:242
-msgid "No href specified when installing app from http"
-msgstr ""
-
-#: installer.php:247
-msgid "No path specified when installing app from local file"
-msgstr ""
-
-#: installer.php:255
-#, php-format
-msgid "Archives of type %s are not supported"
-msgstr ""
-
-#: installer.php:269
-msgid "Failed to open archive when installing app"
-msgstr ""
-
-#: installer.php:307
-msgid "App does not provide an info.xml file"
-msgstr ""
-
-#: installer.php:313
-msgid "App can't be installed because of not allowed code in the App"
-msgstr ""
-
-#: installer.php:319
-msgid ""
-"App can't be installed because it is not compatible with this version of "
-"ownCloud"
-msgstr ""
-
-#: installer.php:325
-msgid ""
-"App can't be installed because it contains the <shipped>true</shipped> tag "
-"which is not allowed for non shipped apps"
-msgstr ""
-
-#: installer.php:338
-msgid ""
-"App can't be installed because the version in info.xml/version is not the "
-"same as the version reported from the app store"
-msgstr ""
-
-#: json.php:29
-msgid "Application is not enabled"
-msgstr ""
-
-#: json.php:40 json.php:62 json.php:87
-msgid "Authentication error"
-msgstr ""
-
-#: json.php:51
-msgid "Token expired. Please reload page."
-msgstr ""
-
-#: json.php:74
-msgid "Unknown user"
-msgstr ""
-
-#: setup/abstractdatabase.php:26 setup/oci.php:26
-#, php-format
-msgid "%s enter the database username."
-msgstr ""
-
-#: setup/abstractdatabase.php:29 setup/oci.php:29
-#, php-format
-msgid "%s enter the database name."
-msgstr ""
-
-#: setup/abstractdatabase.php:32
-#, php-format
-msgid "%s you may not use dots in the database name"
-msgstr ""
-
-#: setup/mssql.php:20
-#, php-format
-msgid "MS SQL username and/or password not valid: %s"
-msgstr ""
-
-#: setup/mssql.php:21 setup/mysql.php:13 setup/oci.php:128
-#: setup/postgresql.php:31 setup/postgresql.php:84
-msgid "You need to enter either an existing account or the administrator."
-msgstr ""
-
-#: setup/mysql.php:12
-msgid "MySQL/MariaDB username and/or password not valid"
-msgstr ""
-
-#: setup/mysql.php:81 setup/oci.php:68 setup/oci.php:135 setup/oci.php:158
-#: setup/oci.php:165 setup/oci.php:176 setup/oci.php:183 setup/oci.php:192
-#: setup/oci.php:200 setup/oci.php:209 setup/oci.php:215
-#: setup/postgresql.php:103 setup/postgresql.php:112 setup/postgresql.php:129
-#: setup/postgresql.php:139 setup/postgresql.php:148
-#, php-format
-msgid "DB Error: \"%s\""
-msgstr ""
-
-#: setup/mysql.php:82 setup/oci.php:69 setup/oci.php:136 setup/oci.php:159
-#: setup/oci.php:166 setup/oci.php:177 setup/oci.php:193 setup/oci.php:201
-#: setup/oci.php:210 setup/postgresql.php:104 setup/postgresql.php:113
-#: setup/postgresql.php:130 setup/postgresql.php:140 setup/postgresql.php:149
-#, php-format
-msgid "Offending command was: \"%s\""
-msgstr ""
-
-#: setup/mysql.php:99
-#, php-format
-msgid "MySQL/MariaDB user '%s'@'localhost' exists already."
-msgstr ""
-
-#: setup/mysql.php:100
-msgid "Drop this user from MySQL/MariaDB"
-msgstr ""
-
-#: setup/mysql.php:105
-#, php-format
-msgid "MySQL/MariaDB user '%s'@'%%' already exists"
-msgstr ""
-
-#: setup/mysql.php:106
-msgid "Drop this user from MySQL/MariaDB."
-msgstr ""
-
-#: setup/oci.php:48
-msgid "Oracle connection could not be established"
-msgstr ""
-
-#: setup/oci.php:55 setup/oci.php:127
-msgid "Oracle username and/or password not valid"
-msgstr ""
-
-#: setup/oci.php:184 setup/oci.php:216
-#, php-format
-msgid "Offending command was: \"%s\", name: %s, password: %s"
-msgstr ""
-
-#: setup/postgresql.php:30 setup/postgresql.php:83
-msgid "PostgreSQL username and/or password not valid"
-msgstr ""
-
-#: setup.php:129
-msgid "Set an admin username."
-msgstr ""
-
-#: setup.php:132
-msgid "Set an admin password."
-msgstr ""
-
-#: setup.php:156
-#, php-format
-msgid "Can't create or write into the data directory %s"
-msgstr ""
-
-#: share/mailnotifications.php:91 share/mailnotifications.php:142
-#, php-format
-msgid "%s shared »%s« with you"
-msgstr ""
-
-#: share/share.php:509
-#, php-format
-msgid "Sharing %s failed, because the file does not exist"
-msgstr ""
-
-#: share/share.php:516
-#, php-format
-msgid "You are not allowed to share %s"
-msgstr ""
-
-#: share/share.php:546
-#, php-format
-msgid "Sharing %s failed, because the user %s is the item owner"
-msgstr ""
-
-#: share/share.php:552
-#, php-format
-msgid "Sharing %s failed, because the user %s does not exist"
-msgstr ""
-
-#: share/share.php:561
-#, php-format
-msgid ""
-"Sharing %s failed, because the user %s is not a member of any groups that %s "
-"is a member of"
-msgstr ""
-
-#: share/share.php:574 share/share.php:602
-#, php-format
-msgid "Sharing %s failed, because this item is already shared with %s"
-msgstr ""
-
-#: share/share.php:582
-#, php-format
-msgid "Sharing %s failed, because the group %s does not exist"
-msgstr ""
-
-#: share/share.php:589
-#, php-format
-msgid "Sharing %s failed, because %s is not a member of the group %s"
-msgstr ""
-
-#: share/share.php:643
-msgid ""
-"You need to provide a password to create a public link, only protected links "
-"are allowed"
-msgstr ""
-
-#: share/share.php:672
-#, php-format
-msgid "Sharing %s failed, because sharing with links is not allowed"
-msgstr ""
-
-#: share/share.php:678
-#, php-format
-msgid "Share type %s is not valid for %s"
-msgstr ""
-
-#: share/share.php:902
-#, php-format
-msgid ""
-"Setting permissions for %s failed, because the permissions exceed "
-"permissions granted to %s"
-msgstr ""
-
-#: share/share.php:963
-#, php-format
-msgid "Setting permissions for %s failed, because the item was not found"
-msgstr ""
-
-#: share/share.php:1001
-#, php-format
-msgid ""
-"Cannot set expiration date. Shares cannot expire later than %s after they "
-"have been shared"
-msgstr ""
-
-#: share/share.php:1009
-msgid "Cannot set expiration date. Expiration date is in the past"
-msgstr ""
-
-#: share/share.php:1135
-#, php-format
-msgid "Sharing backend %s must implement the interface OCP\\Share_Backend"
-msgstr ""
-
-#: share/share.php:1142
-#, php-format
-msgid "Sharing backend %s not found"
-msgstr ""
-
-#: share/share.php:1148
-#, php-format
-msgid "Sharing backend for %s not found"
-msgstr ""
-
-#: share/share.php:1891
-#, php-format
-msgid "Sharing %s failed, because the user %s is the original sharer"
-msgstr ""
-
-#: share/share.php:1901
-#, php-format
-msgid ""
-"Sharing %s failed, because the permissions exceed permissions granted to %s"
-msgstr ""
-
-#: share/share.php:1927
-#, php-format
-msgid "Sharing %s failed, because resharing is not allowed"
-msgstr ""
-
-#: share/share.php:1941
-#, php-format
-msgid ""
-"Sharing %s failed, because the sharing backend for %s could not find its "
-"source"
-msgstr ""
-
-#: share/share.php:1955
-#, php-format
-msgid ""
-"Sharing %s failed, because the file could not be found in the file cache"
-msgstr ""
-
-#: tags.php:226
-#, php-format
-msgid "Could not find category \"%s\""
-msgstr ""
-
-#: template/functions.php:225
-msgid "seconds ago"
-msgstr ""
-
-#: template/functions.php:226
-msgid "%n minute ago"
-msgid_plural "%n minutes ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/functions.php:227
-msgid "%n hour ago"
-msgid_plural "%n hours ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/functions.php:228
-msgid "today"
-msgstr ""
-
-#: template/functions.php:229
-msgid "yesterday"
-msgstr ""
-
-#: template/functions.php:231
-msgid "%n day go"
-msgid_plural "%n days ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/functions.php:233
-msgid "last month"
-msgstr ""
-
-#: template/functions.php:234
-msgid "%n month ago"
-msgid_plural "%n months ago"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/functions.php:236
-msgid "last year"
-msgstr ""
-
-#: template/functions.php:237
-msgid "years ago"
-msgstr ""
-
-#: user/manager.php:244
-msgid ""
-"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", "
-"\"0-9\", and \"_.@-\""
-msgstr ""
-
-#: user/manager.php:249
-msgid "A valid username must be provided"
-msgstr ""
-
-#: user/manager.php:253
-msgid "A valid password must be provided"
-msgstr ""
-
-#: user/manager.php:258
-msgid "The username is already being used"
-msgstr ""
-
-#: util.php:487
-msgid "No database drivers (sqlite, mysql, or postgresql) installed."
-msgstr ""
-
-#: util.php:494
-#, php-format
-msgid ""
-"Permissions can usually be fixed by %sgiving the webserver write access to "
-"the root directory%s."
-msgstr ""
-
-#: util.php:501
-msgid "Cannot write into \"config\" directory"
-msgstr ""
-
-#: util.php:502
-#, php-format
-msgid ""
-"This can usually be fixed by %sgiving the webserver write access to the "
-"config directory%s."
-msgstr ""
-
-#: util.php:515
-msgid "Cannot write into \"apps\" directory"
-msgstr ""
-
-#: util.php:516
-#, php-format
-msgid ""
-"This can usually be fixed by %sgiving the webserver write access to the apps "
-"directory%s or disabling the appstore in the config file."
-msgstr ""
-
-#: util.php:531
-#, php-format
-msgid "Cannot create \"data\" directory (%s)"
-msgstr ""
-
-#: util.php:532
-#, php-format
-msgid ""
-"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the "
-"webserver write access to the root directory</a>."
-msgstr ""
-
-#: util.php:549
-#, php-format
-msgid "Setting locale to %s failed"
-msgstr ""
-
-#: util.php:552
-msgid ""
-"Please install one of these locales on your system and restart your "
-"webserver."
-msgstr ""
-
-#: util.php:581
-msgid "Please ask your server administrator to install the module."
-msgstr ""
-
-#: util.php:601
-#, php-format
-msgid "PHP module %s not installed."
-msgstr ""
-
-#: util.php:609
-#, php-format
-msgid "PHP %s or higher is required."
-msgstr ""
-
-#: util.php:610
-msgid ""
-"Please ask your server administrator to update PHP to the latest version. "
-"Your PHP version is no longer supported by ownCloud and the PHP community."
-msgstr ""
-
-#: util.php:621
-msgid ""
-"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work "
-"properly."
-msgstr ""
-
-#: util.php:622
-msgid ""
-"PHP Safe Mode is a deprecated and mostly useless setting that should be "
-"disabled. Please ask your server administrator to disable it in php.ini or "
-"in your webserver config."
-msgstr ""
-
-#: util.php:629
-msgid ""
-"Magic Quotes is enabled. ownCloud requires that it is disabled to work "
-"properly."
-msgstr ""
-
-#: util.php:630
-msgid ""
-"Magic Quotes is a deprecated and mostly useless setting that should be "
-"disabled. Please ask your server administrator to disable it in php.ini or "
-"in your webserver config."
-msgstr ""
-
-#: util.php:644
-msgid "PHP modules have been installed, but they are still listed as missing?"
-msgstr ""
-
-#: util.php:645
-msgid "Please ask your server administrator to restart the web server."
-msgstr ""
-
-#: util.php:675
-msgid "PostgreSQL >= 9 required"
-msgstr ""
-
-#: util.php:676
-msgid "Please upgrade your database version"
-msgstr ""
-
-#: util.php:683
-msgid "Error occurred while checking PostgreSQL version"
-msgstr ""
-
-#: util.php:684
-msgid ""
-"Please make sure you have PostgreSQL >= 9 or check the logs for more "
-"information about the error"
-msgstr ""
-
-#: util.php:749
-msgid ""
-"Please change the permissions to 0770 so that the directory cannot be listed "
-"by other users."
-msgstr ""
-
-#: util.php:758
-#, php-format
-msgid "Data directory (%s) is readable by other users"
-msgstr ""
-
-#: util.php:779
-#, php-format
-msgid "Data directory (%s) is invalid"
-msgstr ""
-
-#: util.php:780
-msgid ""
-"Please check that the data directory contains a file \".ocdata\" in its root."
-msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
deleted file mode 100644
index 2ba8eb33c0c..00000000000
--- a/l10n/templates/settings.pot
+++ /dev/null
@@ -1,1048 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: admin.php:84
-msgid "Security & Setup Warnings"
-msgstr ""
-
-#: admin.php:108 templates/admin.php:227
-msgid "Cron"
-msgstr ""
-
-#: admin.php:109 templates/admin.php:272
-msgid "Sharing"
-msgstr ""
-
-#: admin.php:110 templates/admin.php:334
-msgid "Security"
-msgstr ""
-
-#: admin.php:111 templates/admin.php:364
-msgid "Email Server"
-msgstr ""
-
-#: admin.php:112 templates/admin.php:448
-msgid "Log"
-msgstr ""
-
-#: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
-#: ajax/togglegroups.php:20 changepassword/controller.php:49
-msgid "Authentication error"
-msgstr ""
-
-#: ajax/changedisplayname.php:31
-msgid "Your full name has been changed."
-msgstr ""
-
-#: ajax/changedisplayname.php:34
-msgid "Unable to change full name"
-msgstr ""
-
-#: ajax/creategroup.php:11
-msgid "Group already exists"
-msgstr ""
-
-#: ajax/creategroup.php:20
-msgid "Unable to add group"
-msgstr ""
-
-#: ajax/decryptall.php:31
-msgid "Files decrypted successfully"
-msgstr ""
-
-#: ajax/decryptall.php:33
-msgid ""
-"Couldn't decrypt your files, please check your owncloud.log or ask your "
-"administrator"
-msgstr ""
-
-#: ajax/decryptall.php:36
-msgid "Couldn't decrypt your files, check your password and try again"
-msgstr ""
-
-#: ajax/deletekeys.php:14
-msgid "Encryption keys deleted permanently"
-msgstr ""
-
-#: ajax/deletekeys.php:16
-msgid ""
-"Couldn't permanently delete your encryption keys, please check your owncloud."
-"log or ask your administrator"
-msgstr ""
-
-#: ajax/installapp.php:18 ajax/uninstallapp.php:18
-msgid "Couldn't remove app."
-msgstr ""
-
-#: ajax/lostpassword.php:12
-msgid "Email saved"
-msgstr ""
-
-#: ajax/lostpassword.php:14
-msgid "Invalid email"
-msgstr ""
-
-#: ajax/removegroup.php:13
-msgid "Unable to delete group"
-msgstr ""
-
-#: ajax/removeuser.php:25
-msgid "Unable to delete user"
-msgstr ""
-
-#: ajax/restorekeys.php:14
-msgid "Backups restored successfully"
-msgstr ""
-
-#: ajax/restorekeys.php:23
-msgid ""
-"Couldn't restore your encryption keys, please check your owncloud.log or ask "
-"your administrator"
-msgstr ""
-
-#: ajax/setlanguage.php:15
-msgid "Language changed"
-msgstr ""
-
-#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
-#: ajax/togglegroups.php:12
-msgid "Admins can't remove themself from the admin group"
-msgstr ""
-
-#: ajax/togglegroups.php:30
-#, php-format
-msgid "Unable to add user to group %s"
-msgstr ""
-
-#: ajax/togglegroups.php:36
-#, php-format
-msgid "Unable to remove user from group %s"
-msgstr ""
-
-#: ajax/updateapp.php:47
-msgid "Couldn't update app."
-msgstr ""
-
-#: changepassword/controller.php:17
-msgid "Wrong password"
-msgstr ""
-
-#: changepassword/controller.php:36
-msgid "No user supplied"
-msgstr ""
-
-#: changepassword/controller.php:68
-msgid ""
-"Please provide an admin recovery password, otherwise all user data will be "
-"lost"
-msgstr ""
-
-#: changepassword/controller.php:73
-msgid "Wrong admin recovery password. Please check the password and try again."
-msgstr ""
-
-#: changepassword/controller.php:81
-msgid ""
-"Back-end doesn't support password change, but the users encryption key was "
-"successfully updated."
-msgstr ""
-
-#: changepassword/controller.php:86 changepassword/controller.php:97
-msgid "Unable to change password"
-msgstr ""
-
-#: controller/appsettingscontroller.php:51
-msgid "Enabled"
-msgstr ""
-
-#: controller/appsettingscontroller.php:52
-msgid "Not enabled"
-msgstr ""
-
-#: controller/appsettingscontroller.php:56
-msgid "Recommended"
-msgstr ""
-
-#: controller/mailsettingscontroller.php:103
-#: controller/mailsettingscontroller.php:121
-msgid "Saved"
-msgstr ""
-
-#: controller/mailsettingscontroller.php:136
-msgid "test email settings"
-msgstr ""
-
-#: controller/mailsettingscontroller.php:137
-msgid "If you received this email, the settings seem to be correct."
-msgstr ""
-
-#: controller/mailsettingscontroller.php:144
-msgid ""
-"A problem occurred while sending the email. Please revise your settings."
-msgstr ""
-
-#: controller/mailsettingscontroller.php:152
-msgid "Email sent"
-msgstr ""
-
-#: controller/mailsettingscontroller.php:160
-msgid "You need to set your user email before being able to send test emails."
-msgstr ""
-
-#: js/admin.js:6
-msgid "Are you really sure you want add \"{domain}\" as trusted domain?"
-msgstr ""
-
-#: js/admin.js:8
-msgid "Add trusted domain"
-msgstr ""
-
-#: js/admin.js:124
-msgid "Sending..."
-msgstr ""
-
-#: js/apps.js:17 templates/apps.php:62
-msgid "All"
-msgstr ""
-
-#: js/apps.js:146
-msgid "Please wait...."
-msgstr ""
-
-#: js/apps.js:154 js/apps.js:155 js/apps.js:181
-msgid "Error while disabling app"
-msgstr ""
-
-#: js/apps.js:157 js/apps.js:190 templates/apps.php:58
-msgid "Disable"
-msgstr ""
-
-#: js/apps.js:165 js/apps.js:183 js/apps.js:220 templates/apps.php:64
-msgid "Enable"
-msgstr ""
-
-#: js/apps.js:180 js/apps.js:215 js/apps.js:216
-msgid "Error while enabling app"
-msgstr ""
-
-#: js/apps.js:227
-msgid "Updating...."
-msgstr ""
-
-#: js/apps.js:231
-msgid "Error while updating app"
-msgstr ""
-
-#: js/apps.js:235
-msgid "Updated"
-msgstr ""
-
-#: js/apps.js:243
-msgid "Uninstalling ...."
-msgstr ""
-
-#: js/apps.js:246
-msgid "Error while uninstalling app"
-msgstr ""
-
-#: js/apps.js:247
-msgid "Uninstall"
-msgstr ""
-
-#: js/personal.js:256
-msgid "Select a profile picture"
-msgstr ""
-
-#: js/personal.js:287
-msgid "Very weak password"
-msgstr ""
-
-#: js/personal.js:288
-msgid "Weak password"
-msgstr ""
-
-#: js/personal.js:289
-msgid "So-so password"
-msgstr ""
-
-#: js/personal.js:290
-msgid "Good password"
-msgstr ""
-
-#: js/personal.js:291
-msgid "Strong password"
-msgstr ""
-
-#: js/personal.js:328
-msgid "Valid until {date}"
-msgstr ""
-
-#: js/personal.js:333 js/personal.js:334 js/users/users.js:75
-#: templates/personal.php:195 templates/personal.php:196
-#: templates/users/part.grouplist.php:46 templates/users/part.userlist.php:108
-msgid "Delete"
-msgstr ""
-
-#: js/personal.js:350
-msgid "Decrypting files... Please wait, this can take some time."
-msgstr ""
-
-#: js/personal.js:364
-msgid "Delete encryption keys permanently."
-msgstr ""
-
-#: js/personal.js:378
-msgid "Restore encryption keys."
-msgstr ""
-
-#: js/settings.js:27 js/users/users.js:49
-#: templates/users/part.createuser.php:12 templates/users/part.userlist.php:10
-msgid "Groups"
-msgstr ""
-
-#: js/users/deleteHandler.js:205
-msgid "Unable to delete {objName}"
-msgstr ""
-
-#: js/users/groups.js:94 js/users/groups.js:202
-msgid "Error creating group"
-msgstr ""
-
-#: js/users/groups.js:201
-msgid "A valid group name must be provided"
-msgstr ""
-
-#: js/users/groups.js:229
-msgid "deleted {groupName}"
-msgstr ""
-
-#: js/users/groups.js:230 js/users/users.js:301
-msgid "undo"
-msgstr ""
-
-#: js/users/users.js:53 templates/users/part.userlist.php:41
-#: templates/users/part.userlist.php:57
-msgid "no group"
-msgstr ""
-
-#: js/users/users.js:96 templates/users/part.userlist.php:98
-msgid "never"
-msgstr ""
-
-#: js/users/users.js:300
-msgid "deleted {userName}"
-msgstr ""
-
-#: js/users/users.js:436
-msgid "add group"
-msgstr ""
-
-#: js/users/users.js:657
-msgid "A valid username must be provided"
-msgstr ""
-
-#: js/users/users.js:658 js/users/users.js:664 js/users/users.js:679
-msgid "Error creating user"
-msgstr ""
-
-#: js/users/users.js:663
-msgid "A valid password must be provided"
-msgstr ""
-
-#: js/users/users.js:695
-msgid "Warning: Home directory for user \"{user}\" already exists"
-msgstr ""
-
-#: personal.php:49 personal.php:50
-msgid "__language_name__"
-msgstr ""
-
-#: personal.php:105
-msgid "Personal Info"
-msgstr ""
-
-#: personal.php:130 templates/personal.php:173
-msgid "SSL root certificates"
-msgstr ""
-
-#: personal.php:132 templates/admin.php:382 templates/personal.php:214
-msgid "Encryption"
-msgstr ""
-
-#: templates/admin.php:23
-msgid "Everything (fatal issues, errors, warnings, info, debug)"
-msgstr ""
-
-#: templates/admin.php:24
-msgid "Info, warnings, errors and fatal issues"
-msgstr ""
-
-#: templates/admin.php:25
-msgid "Warnings, errors and fatal issues"
-msgstr ""
-
-#: templates/admin.php:26
-msgid "Errors and fatal issues"
-msgstr ""
-
-#: templates/admin.php:27
-msgid "Fatal issues only"
-msgstr ""
-
-#: templates/admin.php:31 templates/admin.php:38
-msgid "None"
-msgstr ""
-
-#: templates/admin.php:32
-msgid "Login"
-msgstr ""
-
-#: templates/admin.php:33
-msgid "Plain"
-msgstr ""
-
-#: templates/admin.php:34
-msgid "NT LAN Manager"
-msgstr ""
-
-#: templates/admin.php:39
-msgid "SSL"
-msgstr ""
-
-#: templates/admin.php:40
-msgid "TLS"
-msgstr ""
-
-#: templates/admin.php:76 templates/admin.php:90
-msgid "Security Warning"
-msgstr ""
-
-#: templates/admin.php:79
-#, php-format
-msgid ""
-"You are accessing %s via HTTP. We strongly suggest you configure your server "
-"to require using HTTPS instead."
-msgstr ""
-
-#: templates/admin.php:93
-msgid ""
-"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 webserver in a way that the data directory is no longer "
-"accessible or you move the data directory outside the webserver document "
-"root."
-msgstr ""
-
-#: templates/admin.php:103
-msgid "Setup Warning"
-msgstr ""
-
-#: templates/admin.php:106
-msgid ""
-"PHP is apparently setup to strip inline doc blocks. This will make several "
-"core apps inaccessible."
-msgstr ""
-
-#: templates/admin.php:107
-msgid ""
-"This is probably caused by a cache/accelerator such as Zend OPcache or "
-"eAccelerator."
-msgstr ""
-
-#: templates/admin.php:118
-msgid "Database Performance Info"
-msgstr ""
-
-#: templates/admin.php:121
-msgid ""
-"SQLite is used as database. For larger installations we recommend to change "
-"this. To migrate to another database use the command line tool: 'occ db:"
-"convert-type'"
-msgstr ""
-
-#: templates/admin.php:132
-msgid "Module 'fileinfo' missing"
-msgstr ""
-
-#: templates/admin.php:135
-msgid ""
-"The PHP module 'fileinfo' is missing. We strongly recommend to enable this "
-"module to get best results with mime-type detection."
-msgstr ""
-
-#: templates/admin.php:146
-msgid "Your PHP version is outdated"
-msgstr ""
-
-#: templates/admin.php:149
-msgid ""
-"Your PHP version is outdated. We strongly recommend to update to 5.3.8 or "
-"newer because older versions are known to be broken. It is possible that "
-"this installation is not working correctly."
-msgstr ""
-
-#: templates/admin.php:160
-msgid "PHP charset is not set to UTF-8"
-msgstr ""
-
-#: templates/admin.php:163
-msgid ""
-"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII "
-"characters in file names. We highly recommend to change the value of "
-"'default_charset' php.ini to 'UTF-8'."
-msgstr ""
-
-#: templates/admin.php:174
-msgid "Locale not working"
-msgstr ""
-
-#: templates/admin.php:179
-msgid "System locale can not be set to a one which supports UTF-8."
-msgstr ""
-
-#: templates/admin.php:183
-msgid ""
-"This means that there might be problems with certain characters in file "
-"names."
-msgstr ""
-
-#: templates/admin.php:187
-#, php-format
-msgid ""
-"We strongly suggest to install the required packages on your system to "
-"support one of the following locales: %s."
-msgstr ""
-
-#: templates/admin.php:198
-msgid "URL generation in notification emails"
-msgstr ""
-
-#: templates/admin.php:201
-#, php-format
-msgid ""
-"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 \"overwritewebroot\" option in your config.php file "
-"to the webroot path of your installation (Suggested: \"%s\")"
-msgstr ""
-
-#: templates/admin.php:209
-msgid "Connectivity Checks"
-msgstr ""
-
-#: templates/admin.php:211
-msgid "No problems found"
-msgstr ""
-
-#: templates/admin.php:215
-#, php-format
-msgid "Please double check the <a href='%s'>installation guides</a>."
-msgstr ""
-
-#: templates/admin.php:234
-#, php-format
-msgid "Last cron was executed at %s."
-msgstr ""
-
-#: templates/admin.php:237
-#, php-format
-msgid ""
-"Last cron was executed at %s. This is more than an hour ago, something seems "
-"wrong."
-msgstr ""
-
-#: templates/admin.php:241
-msgid "Cron was not executed yet!"
-msgstr ""
-
-#: templates/admin.php:251
-msgid "Execute one task with each page loaded"
-msgstr ""
-
-#: templates/admin.php:259
-msgid ""
-"cron.php is registered at a webcron service to call cron.php every 15 "
-"minutes over http."
-msgstr ""
-
-#: templates/admin.php:267
-msgid "Use system's cron service to call the cron.php file every 15 minutes."
-msgstr ""
-
-#: templates/admin.php:276
-msgid "Allow apps to use the Share API"
-msgstr ""
-
-#: templates/admin.php:281
-msgid "Allow users to share via link"
-msgstr ""
-
-#: templates/admin.php:287
-msgid "Enforce password protection"
-msgstr ""
-
-#: templates/admin.php:290
-msgid "Allow public uploads"
-msgstr ""
-
-#: templates/admin.php:294
-msgid "Set default expiration date"
-msgstr ""
-
-#: templates/admin.php:298
-msgid "Expire after "
-msgstr ""
-
-#: templates/admin.php:301
-msgid "days"
-msgstr ""
-
-#: templates/admin.php:304
-msgid "Enforce expiration date"
-msgstr ""
-
-#: templates/admin.php:309
-msgid "Allow resharing"
-msgstr ""
-
-#: templates/admin.php:314
-msgid "Restrict users to only share with users in their groups"
-msgstr ""
-
-#: templates/admin.php:319
-msgid "Allow users to send mail notification for shared files"
-msgstr ""
-
-#: templates/admin.php:324
-msgid "Exclude groups from sharing"
-msgstr ""
-
-#: templates/admin.php:329
-msgid ""
-"These groups will still be able to receive shares, but not to initiate them."
-msgstr ""
-
-#: templates/admin.php:345
-msgid "Enforce HTTPS"
-msgstr ""
-
-#: templates/admin.php:347
-#, php-format
-msgid "Forces the clients to connect to %s via an encrypted connection."
-msgstr ""
-
-#: templates/admin.php:353
-#, php-format
-msgid ""
-"Please connect to your %s via HTTPS to enable or disable the SSL enforcement."
-msgstr ""
-
-#: templates/admin.php:366
-msgid "This is used for sending out notifications."
-msgstr ""
-
-#: templates/admin.php:369
-msgid "Send mode"
-msgstr ""
-
-#: templates/admin.php:397
-msgid "From address"
-msgstr ""
-
-#: templates/admin.php:398
-msgid "mail"
-msgstr ""
-
-#: templates/admin.php:405
-msgid "Authentication method"
-msgstr ""
-
-#: templates/admin.php:418
-msgid "Authentication required"
-msgstr ""
-
-#: templates/admin.php:422
-msgid "Server address"
-msgstr ""
-
-#: templates/admin.php:426
-msgid "Port"
-msgstr ""
-
-#: templates/admin.php:432
-msgid "Credentials"
-msgstr ""
-
-#: templates/admin.php:433
-msgid "SMTP Username"
-msgstr ""
-
-#: templates/admin.php:436
-msgid "SMTP Password"
-msgstr ""
-
-#: templates/admin.php:437
-msgid "Store credentials"
-msgstr ""
-
-#: templates/admin.php:442
-msgid "Test email settings"
-msgstr ""
-
-#: templates/admin.php:443
-msgid "Send email"
-msgstr ""
-
-#: templates/admin.php:449
-msgid "Log level"
-msgstr ""
-
-#: templates/admin.php:481
-msgid "More"
-msgstr ""
-
-#: templates/admin.php:482
-msgid "Less"
-msgstr ""
-
-#: templates/admin.php:488 templates/personal.php:263
-msgid "Version"
-msgstr ""
-
-#: templates/admin.php:492 templates/personal.php:266
-msgid ""
-"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank"
-"\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" "
-"target=\"_blank\">source code</a> is licensed under the <a href=\"http://www."
-"gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero "
-"General Public License\">AGPL</abbr></a>."
-msgstr ""
-
-#: templates/apps.php:8
-msgid "More apps"
-msgstr ""
-
-#: templates/apps.php:11
-msgid "Add your app"
-msgstr ""
-
-#: templates/apps.php:24
-msgid "by"
-msgstr ""
-
-#: templates/apps.php:26
-msgid "licensed"
-msgstr ""
-
-#: templates/apps.php:40
-msgid "Documentation:"
-msgstr ""
-
-#: templates/apps.php:43 templates/help.php:7
-msgid "User Documentation"
-msgstr ""
-
-#: templates/apps.php:49
-msgid "Admin Documentation"
-msgstr ""
-
-#: templates/apps.php:55
-#, php-format
-msgid "Update to %s"
-msgstr ""
-
-#: templates/apps.php:60
-msgid "Enable only for specific groups"
-msgstr ""
-
-#: templates/apps.php:67
-msgid "Uninstall App"
-msgstr ""
-
-#: templates/help.php:13
-msgid "Administrator Documentation"
-msgstr ""
-
-#: templates/help.php:20
-msgid "Online Documentation"
-msgstr ""
-
-#: templates/help.php:25
-msgid "Forum"
-msgstr ""
-
-#: templates/help.php:33
-msgid "Bugtracker"
-msgstr ""
-
-#: templates/help.php:40
-msgid "Commercial Support"
-msgstr ""
-
-#: templates/personal.php:25
-msgid "Get the apps to sync your files"
-msgstr ""
-
-#: templates/personal.php:38
-msgid ""
-"If you want to support the project\n"
-"\t\t<a href=\"https://owncloud.org/contribute\"\n"
-"\t\t\ttarget=\"_blank\">join development</a>\n"
-"\t\tor\n"
-"\t\t<a href=\"https://owncloud.org/promote\"\n"
-"\t\t\ttarget=\"_blank\">spread the word</a>!"
-msgstr ""
-
-#: templates/personal.php:48
-msgid "Show First Run Wizard again"
-msgstr ""
-
-#: templates/personal.php:57
-#, php-format
-msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
-msgstr ""
-
-#: templates/personal.php:68 templates/users/part.createuser.php:8
-#: templates/users/part.userlist.php:9
-msgid "Password"
-msgstr ""
-
-#: templates/personal.php:69
-msgid "Your password was changed"
-msgstr ""
-
-#: templates/personal.php:70
-msgid "Unable to change your password"
-msgstr ""
-
-#: templates/personal.php:72
-msgid "Current password"
-msgstr ""
-
-#: templates/personal.php:75
-msgid "New password"
-msgstr ""
-
-#: templates/personal.php:79
-msgid "Change password"
-msgstr ""
-
-#: templates/personal.php:91 templates/users/part.userlist.php:8
-msgid "Full Name"
-msgstr ""
-
-#: templates/personal.php:106
-msgid "Email"
-msgstr ""
-
-#: templates/personal.php:108
-msgid "Your email address"
-msgstr ""
-
-#: templates/personal.php:111
-msgid ""
-"Fill in an email address to enable password recovery and receive "
-"notifications"
-msgstr ""
-
-#: templates/personal.php:119
-msgid "Profile picture"
-msgstr ""
-
-#: templates/personal.php:124
-msgid "Upload new"
-msgstr ""
-
-#: templates/personal.php:126
-msgid "Select new from Files"
-msgstr ""
-
-#: templates/personal.php:127
-msgid "Remove image"
-msgstr ""
-
-#: templates/personal.php:128
-msgid "Either png or jpg. Ideally square but you will be able to crop it."
-msgstr ""
-
-#: templates/personal.php:130
-msgid "Your avatar is provided by your original account."
-msgstr ""
-
-#: templates/personal.php:134
-msgid "Cancel"
-msgstr ""
-
-#: templates/personal.php:135
-msgid "Choose as profile image"
-msgstr ""
-
-#: templates/personal.php:141 templates/personal.php:142
-msgid "Language"
-msgstr ""
-
-#: templates/personal.php:161
-msgid "Help translate"
-msgstr ""
-
-#: templates/personal.php:176
-msgid "Common Name"
-msgstr ""
-
-#: templates/personal.php:177
-msgid "Valid until"
-msgstr ""
-
-#: templates/personal.php:178
-msgid "Issued By"
-msgstr ""
-
-#: templates/personal.php:187
-#, php-format
-msgid "Valid until %s"
-msgstr ""
-
-#: templates/personal.php:206
-msgid "Import Root Certificate"
-msgstr ""
-
-#: templates/personal.php:220
-msgid "The encryption app is no longer enabled, please decrypt all your files"
-msgstr ""
-
-#: templates/personal.php:226
-msgid "Log-in password"
-msgstr ""
-
-#: templates/personal.php:231
-msgid "Decrypt all Files"
-msgstr ""
-
-#: templates/personal.php:241
-msgid ""
-"Your encryption keys are moved to a backup location. If something went wrong "
-"you can restore the keys. Only delete them permanently if you are sure that "
-"all files are decrypted correctly."
-msgstr ""
-
-#: templates/personal.php:245
-msgid "Restore Encryption Keys"
-msgstr ""
-
-#: templates/personal.php:249
-msgid "Delete Encryption Keys"
-msgstr ""
-
-#: templates/users/main.php:36
-msgid "Show storage location"
-msgstr ""
-
-#: templates/users/main.php:40
-msgid "Show last log in"
-msgstr ""
-
-#: templates/users/part.createuser.php:4
-msgid "Login Name"
-msgstr ""
-
-#: templates/users/part.createuser.php:20
-msgid "Create"
-msgstr ""
-
-#: templates/users/part.createuser.php:26
-msgid "Admin Recovery Password"
-msgstr ""
-
-#: templates/users/part.createuser.php:27
-#: templates/users/part.createuser.php:28
-msgid ""
-"Enter the recovery password in order to recover the users files during "
-"password change"
-msgstr ""
-
-#: templates/users/part.createuser.php:32
-msgid "Search Users and Groups"
-msgstr ""
-
-#: templates/users/part.grouplist.php:5
-msgid "Add Group"
-msgstr ""
-
-#: templates/users/part.grouplist.php:10
-msgid "Group"
-msgstr ""
-
-#: templates/users/part.grouplist.php:18
-msgid "Everyone"
-msgstr ""
-
-#: templates/users/part.grouplist.php:31
-msgid "Admins"
-msgstr ""
-
-#: templates/users/part.setquota.php:3
-msgid "Default Quota"
-msgstr ""
-
-#: templates/users/part.setquota.php:5 templates/users/part.userlist.php:66
-msgid "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")"
-msgstr ""
-
-#: templates/users/part.setquota.php:7 templates/users/part.userlist.php:75
-msgid "Unlimited"
-msgstr ""
-
-#: templates/users/part.setquota.php:22 templates/users/part.userlist.php:90
-msgid "Other"
-msgstr ""
-
-#: templates/users/part.userlist.php:7
-msgid "Username"
-msgstr ""
-
-#: templates/users/part.userlist.php:12
-msgid "Group Admin for"
-msgstr ""
-
-#: templates/users/part.userlist.php:14
-msgid "Quota"
-msgstr ""
-
-#: templates/users/part.userlist.php:15
-msgid "Storage Location"
-msgstr ""
-
-#: templates/users/part.userlist.php:16
-msgid "Last Login"
-msgstr ""
-
-#: templates/users/part.userlist.php:30
-msgid "change full name"
-msgstr ""
-
-#: templates/users/part.userlist.php:34
-msgid "set new password"
-msgstr ""
-
-#: templates/users/part.userlist.php:70
-msgid "Default"
-msgstr ""
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
deleted file mode 100644
index 57a1d792ee4..00000000000
--- a/l10n/templates/user_ldap.pot
+++ /dev/null
@@ -1,609 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: ajax/clearMappings.php:34
-msgid "Failed to clear the mappings."
-msgstr ""
-
-#: ajax/deleteConfiguration.php:34
-msgid "Failed to delete the server configuration"
-msgstr ""
-
-#: ajax/testConfiguration.php:39
-msgid "The configuration is valid and the connection could be established!"
-msgstr ""
-
-#: ajax/testConfiguration.php:42
-msgid ""
-"The configuration is valid, but the Bind failed. Please check the server "
-"settings and credentials."
-msgstr ""
-
-#: ajax/testConfiguration.php:46
-msgid ""
-"The configuration is invalid. Please have a look at the logs for further "
-"details."
-msgstr ""
-
-#: ajax/wizard.php:32
-msgid "No action specified"
-msgstr ""
-
-#: ajax/wizard.php:38
-msgid "No configuration specified"
-msgstr ""
-
-#: ajax/wizard.php:97
-msgid "No data specified"
-msgstr ""
-
-#: ajax/wizard.php:105
-#, php-format
-msgid " Could not set configuration %s"
-msgstr ""
-
-#: js/settings.js:67
-msgid "Deletion failed"
-msgstr ""
-
-#: js/settings.js:83
-msgid "Take over settings from recent server configuration?"
-msgstr ""
-
-#: js/settings.js:84
-msgid "Keep settings?"
-msgstr ""
-
-#: js/settings.js:93
-msgid "{nthServer}. Server"
-msgstr ""
-
-#: js/settings.js:99
-msgid "Cannot add server configuration"
-msgstr ""
-
-#: js/settings.js:127
-msgid "mappings cleared"
-msgstr ""
-
-#: js/settings.js:128
-msgid "Success"
-msgstr ""
-
-#: js/settings.js:133
-msgid "Error"
-msgstr ""
-
-#: js/settings.js:266
-msgid "Please specify a Base DN"
-msgstr ""
-
-#: js/settings.js:267
-msgid "Could not determine Base DN"
-msgstr ""
-
-#: js/settings.js:299
-msgid "Please specify the port"
-msgstr ""
-
-#: js/settings.js:937
-msgid "Configuration OK"
-msgstr ""
-
-#: js/settings.js:946
-msgid "Configuration incorrect"
-msgstr ""
-
-#: js/settings.js:955
-msgid "Configuration incomplete"
-msgstr ""
-
-#: js/settings.js:972 js/settings.js:981
-msgid "Select groups"
-msgstr ""
-
-#: js/settings.js:975 js/settings.js:984
-msgid "Select object classes"
-msgstr ""
-
-#: js/settings.js:978
-msgid "Select attributes"
-msgstr ""
-
-#: js/settings.js:1006
-msgid "Connection test succeeded"
-msgstr ""
-
-#: js/settings.js:1013
-msgid "Connection test failed"
-msgstr ""
-
-#: js/settings.js:1022
-msgid "Do you really want to delete the current Server Configuration?"
-msgstr ""
-
-#: js/settings.js:1023
-msgid "Confirm Deletion"
-msgstr ""
-
-#: lib/wizard.php:98 lib/wizard.php:113
-#, php-format
-msgid "%s group found"
-msgid_plural "%s groups found"
-msgstr[0] ""
-msgstr[1] ""
-
-#: lib/wizard.php:127
-#, php-format
-msgid "%s user found"
-msgid_plural "%s users found"
-msgstr[0] ""
-msgstr[1] ""
-
-#: lib/wizard.php:394 lib/wizard.php:1131
-msgid "Could not find the desired feature"
-msgstr ""
-
-#: lib/wizard.php:938 lib/wizard.php:950
-msgid "Invalid Host"
-msgstr ""
-
-#: settings.php:53
-msgid "Server"
-msgstr ""
-
-#: settings.php:54
-msgid "User Filter"
-msgstr ""
-
-#: settings.php:55
-msgid "Login Filter"
-msgstr ""
-
-#: settings.php:56
-msgid "Group Filter"
-msgstr ""
-
-#: templates/part.settingcontrols.php:2
-msgid "Save"
-msgstr ""
-
-#: templates/part.settingcontrols.php:4
-msgid "Test Configuration"
-msgstr ""
-
-#: templates/part.settingcontrols.php:10 templates/part.wizardcontrols.php:15
-msgid "Help"
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:4
-#, php-format
-msgid "Groups meeting these criteria are available in %s:"
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:8
-#: templates/part.wizard-userfilter.php:8
-msgid "only those object classes:"
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:17
-#: templates/part.wizard-userfilter.php:17
-msgid "only from those groups:"
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:25
-#: templates/part.wizard-loginfilter.php:32
-#: templates/part.wizard-userfilter.php:25
-msgid "Edit raw filter instead"
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:30
-#: templates/part.wizard-loginfilter.php:37
-#: templates/part.wizard-userfilter.php:30
-msgid "Raw LDAP filter"
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:31
-#, php-format
-msgid ""
-"The filter specifies which LDAP groups shall have access to the %s instance."
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:34
-#: templates/part.wizard-userfilter.php:34
-msgid "Test Filter"
-msgstr ""
-
-#: templates/part.wizard-groupfilter.php:41
-msgid "groups found"
-msgstr ""
-
-#: templates/part.wizard-loginfilter.php:4
-msgid "Users login with this attribute:"
-msgstr ""
-
-#: templates/part.wizard-loginfilter.php:8
-msgid "LDAP Username:"
-msgstr ""
-
-#: templates/part.wizard-loginfilter.php:16
-msgid "LDAP Email Address:"
-msgstr ""
-
-#: templates/part.wizard-loginfilter.php:24
-msgid "Other Attributes:"
-msgstr ""
-
-#: templates/part.wizard-loginfilter.php:38
-#, php-format
-msgid ""
-"Defines the filter to apply, when login is attempted. %%uid replaces the "
-"username in the login action. Example: \"uid=%%uid\""
-msgstr ""
-
-#: templates/part.wizard-server.php:13
-msgid "1. Server"
-msgstr ""
-
-#: templates/part.wizard-server.php:20
-#, php-format
-msgid "%s. Server:"
-msgstr ""
-
-#: templates/part.wizard-server.php:25
-msgid "Add Server Configuration"
-msgstr ""
-
-#: templates/part.wizard-server.php:28
-msgid "Delete Configuration"
-msgstr ""
-
-#: templates/part.wizard-server.php:37
-msgid "Host"
-msgstr ""
-
-#: templates/part.wizard-server.php:38
-msgid ""
-"You can omit the protocol, except you require SSL. Then start with ldaps://"
-msgstr ""
-
-#: templates/part.wizard-server.php:43
-msgid "Port"
-msgstr ""
-
-#: templates/part.wizard-server.php:51
-msgid "User DN"
-msgstr ""
-
-#: templates/part.wizard-server.php:52
-msgid ""
-"The DN of the client user with which the bind shall be done, e.g. uid=agent,"
-"dc=example,dc=com. For anonymous access, leave DN and Password empty."
-msgstr ""
-
-#: templates/part.wizard-server.php:59
-msgid "Password"
-msgstr ""
-
-#: templates/part.wizard-server.php:60
-msgid "For anonymous access, leave DN and Password empty."
-msgstr ""
-
-#: templates/part.wizard-server.php:67
-msgid "One Base DN per line"
-msgstr ""
-
-#: templates/part.wizard-server.php:68
-msgid "You can specify Base DN for users and groups in the Advanced tab"
-msgstr ""
-
-#: templates/part.wizard-server.php:75
-msgid ""
-"Avoids automatic LDAP requests. Better for bigger setups, but requires some "
-"LDAP knowledge."
-msgstr ""
-
-#: templates/part.wizard-server.php:78
-msgid "Manually enter LDAP filters (recommended for large directories)"
-msgstr ""
-
-#: templates/part.wizard-userfilter.php:4
-#, php-format
-msgid "Limit %s access to users meeting these criteria:"
-msgstr ""
-
-#: templates/part.wizard-userfilter.php:31
-#, php-format
-msgid ""
-"The filter specifies which LDAP users shall have access to the %s instance."
-msgstr ""
-
-#: templates/part.wizard-userfilter.php:41
-msgid "users found"
-msgstr ""
-
-#: templates/part.wizardcontrols.php:2
-msgid "Saving"
-msgstr ""
-
-#: templates/part.wizardcontrols.php:6
-msgid "Back"
-msgstr ""
-
-#: templates/part.wizardcontrols.php:9
-msgid "Continue"
-msgstr ""
-
-#: templates/settings.php:2
-msgid "LDAP"
-msgstr ""
-
-#: templates/settings.php:9
-msgid "Expert"
-msgstr ""
-
-#: templates/settings.php:10
-msgid "Advanced"
-msgstr ""
-
-#: templates/settings.php:13
-msgid ""
-"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may "
-"experience unexpected behavior. Please ask your system administrator to "
-"disable one of them."
-msgstr ""
-
-#: templates/settings.php:16
-msgid ""
-"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
-"work. Please ask your system administrator to install it."
-msgstr ""
-
-#: templates/settings.php:22
-msgid "Connection Settings"
-msgstr ""
-
-#: templates/settings.php:24
-msgid "Configuration Active"
-msgstr ""
-
-#: templates/settings.php:24
-msgid "When unchecked, this configuration will be skipped."
-msgstr ""
-
-#: templates/settings.php:25
-msgid "Backup (Replica) Host"
-msgstr ""
-
-#: templates/settings.php:25
-msgid ""
-"Give an optional backup host. It must be a replica of the main LDAP/AD "
-"server."
-msgstr ""
-
-#: templates/settings.php:26
-msgid "Backup (Replica) Port"
-msgstr ""
-
-#: templates/settings.php:27
-msgid "Disable Main Server"
-msgstr ""
-
-#: templates/settings.php:27
-msgid "Only connect to the replica server."
-msgstr ""
-
-#: templates/settings.php:28
-msgid "Case insensitive LDAP server (Windows)"
-msgstr ""
-
-#: templates/settings.php:29
-msgid "Turn off SSL certificate validation."
-msgstr ""
-
-#: templates/settings.php:29
-#, php-format
-msgid ""
-"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."
-msgstr ""
-
-#: templates/settings.php:30
-msgid "Cache Time-To-Live"
-msgstr ""
-
-#: templates/settings.php:30
-msgid "in seconds. A change empties the cache."
-msgstr ""
-
-#: templates/settings.php:32
-msgid "Directory Settings"
-msgstr ""
-
-#: templates/settings.php:34
-msgid "User Display Name Field"
-msgstr ""
-
-#: templates/settings.php:34
-msgid "The LDAP attribute to use to generate the user's display name."
-msgstr ""
-
-#: templates/settings.php:35
-msgid "Base User Tree"
-msgstr ""
-
-#: templates/settings.php:35
-msgid "One User Base DN per line"
-msgstr ""
-
-#: templates/settings.php:36
-msgid "User Search Attributes"
-msgstr ""
-
-#: templates/settings.php:36 templates/settings.php:39
-msgid "Optional; one attribute per line"
-msgstr ""
-
-#: templates/settings.php:37
-msgid "Group Display Name Field"
-msgstr ""
-
-#: templates/settings.php:37
-msgid "The LDAP attribute to use to generate the groups's display name."
-msgstr ""
-
-#: templates/settings.php:38
-msgid "Base Group Tree"
-msgstr ""
-
-#: templates/settings.php:38
-msgid "One Group Base DN per line"
-msgstr ""
-
-#: templates/settings.php:39
-msgid "Group Search Attributes"
-msgstr ""
-
-#: templates/settings.php:40
-msgid "Group-Member association"
-msgstr ""
-
-#: templates/settings.php:41
-msgid "Nested Groups"
-msgstr ""
-
-#: templates/settings.php:41
-msgid ""
-"When switched on, groups that contain groups are supported. (Only works if "
-"the group member attribute contains DNs.)"
-msgstr ""
-
-#: templates/settings.php:42
-msgid "Paging chunksize"
-msgstr ""
-
-#: templates/settings.php:42
-msgid ""
-"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.)"
-msgstr ""
-
-#: templates/settings.php:44
-msgid "Special Attributes"
-msgstr ""
-
-#: templates/settings.php:46
-msgid "Quota Field"
-msgstr ""
-
-#: templates/settings.php:47
-msgid "Quota Default"
-msgstr ""
-
-#: templates/settings.php:47
-msgid "in bytes"
-msgstr ""
-
-#: templates/settings.php:48
-msgid "Email Field"
-msgstr ""
-
-#: templates/settings.php:49
-msgid "User Home Folder Naming Rule"
-msgstr ""
-
-#: templates/settings.php:49
-msgid ""
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute."
-msgstr ""
-
-#: templates/settings.php:55
-msgid "Internal Username"
-msgstr ""
-
-#: templates/settings.php:56
-msgid ""
-"By default the internal username will be created from the UUID attribute. It "
-"makes sure that the username is unique and characters do not need to be "
-"converted. The internal username has the restriction that only these "
-"characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced "
-"with their ASCII correspondence or simply omitted. On collisions a number "
-"will be added/increased. The internal username is used to identify a user "
-"internally. It is also the default name for the user home folder. It is also "
-"a part of remote URLs, for instance for all *DAV services. With this "
-"setting, the default behavior can be overridden. To achieve a similar "
-"behavior as before ownCloud 5 enter the user display name attribute in the "
-"following field. Leave it empty for default behavior. Changes will have "
-"effect only on newly mapped (added) LDAP users."
-msgstr ""
-
-#: templates/settings.php:57
-msgid "Internal Username Attribute:"
-msgstr ""
-
-#: templates/settings.php:58
-msgid "Override UUID detection"
-msgstr ""
-
-#: templates/settings.php:59
-msgid ""
-"By default, the UUID attribute is automatically detected. The UUID attribute "
-"is used to doubtlessly identify LDAP users and groups. Also, the internal "
-"username will be created based on the UUID, if not specified otherwise "
-"above. You can override the setting and pass an attribute of your choice. "
-"You must make sure that the attribute of your choice can be fetched for both "
-"users and groups and it is unique. Leave it empty for default behavior. "
-"Changes will have effect only on newly mapped (added) LDAP users and groups."
-msgstr ""
-
-#: templates/settings.php:60
-msgid "UUID Attribute for Users:"
-msgstr ""
-
-#: templates/settings.php:61
-msgid "UUID Attribute for Groups:"
-msgstr ""
-
-#: templates/settings.php:62
-msgid "Username-LDAP User Mapping"
-msgstr ""
-
-#: templates/settings.php:63
-msgid ""
-"Usernames are used to store and assign (meta) data. In order to precisely "
-"identify and recognize users, each LDAP user will have a internal username. "
-"This requires a mapping from username to LDAP user. The created username is "
-"mapped to the UUID of the LDAP user. Additionally the DN is cached as well "
-"to reduce LDAP interaction, but it is not used for identification. If the DN "
-"changes, the changes will be found. The internal username is used all over. "
-"Clearing the mappings will have leftovers everywhere. Clearing the mappings "
-"is not configuration sensitive, it affects all LDAP configurations! Never "
-"clear the mappings in a production environment, only in a testing or "
-"experimental stage."
-msgstr ""
-
-#: templates/settings.php:64
-msgid "Clear Username-LDAP User Mapping"
-msgstr ""
-
-#: templates/settings.php:64
-msgid "Clear Groupname-LDAP Group Mapping"
-msgstr ""
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
deleted file mode 100644
index 7d7831082f0..00000000000
--- a/l10n/templates/user_webdavauth.pot
+++ /dev/null
@@ -1,37 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: ownCloud Core 8.0.0\n"
-"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-11-06 01:54-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: templates/settings.php:2
-msgid "WebDAV Authentication"
-msgstr ""
-
-#: templates/settings.php:3
-msgid "Address:"
-msgstr ""
-
-#: templates/settings.php:5
-msgid "Save"
-msgstr ""
-
-#: templates/settings.php:6
-msgid ""
-"The user credentials will be sent to this address. This plugin checks the "
-"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
-"credentials, and all other responses as valid credentials."
-msgstr ""
diff --git a/lib/base.php b/lib/base.php
index 9ccbc4aeb22..34fa178ebf7 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -66,17 +66,11 @@ class OC {
public static $REQUESTEDAPP = '';
/**
- * check if owncloud runs in cli mode
+ * check if ownCloud runs in cli mode
*/
public static $CLI = false;
/**
- * @deprecated use \OC::$server->getSession() instead
- * @var \OC\Session\Session
- */
- public static $session = null;
-
- /**
* @var \OC\Autoloader $loader
*/
public static $loader = null;
@@ -194,9 +188,17 @@ class OC {
public static function checkConfig() {
$l = \OC::$server->getL10N('lib');
- if (file_exists(self::$configDir . "/config.php")
- and !is_writable(self::$configDir . "/config.php")
- ) {
+
+ // Create config in case it does not already exists
+ $configFilePath = self::$configDir .'/config.php';
+ if(!file_exists($configFilePath)) {
+ @touch($configFilePath);
+ }
+
+ // Check if config is writable
+ $configFileWritable = is_writable($configFilePath);
+ if (!$configFileWritable && !OC_Helper::isReadOnlyConfigEnabled()
+ || !$configFileWritable && \OCP\Util::needUpgrade()) {
if (self::$CLI) {
echo $l->t('Cannot write into "config" directory!')."\n";
echo $l->t('This can usually be fixed by giving the webserver write access to the config directory')."\n";
@@ -216,7 +218,7 @@ class OC {
public static function checkInstalled() {
// Redirect to installer if not installed
- if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') {
+ if (!\OC::$server->getSystemConfig()->getValue('installed', false) && OC::$SUBURI != '/index.php') {
if (OC::$CLI) {
throw new Exception('Not installed');
} else {
@@ -229,11 +231,18 @@ class OC {
public static function checkSSL() {
// redirect to https site if configured
- if (OC_Config::getValue("forcessl", false)) {
- header('Strict-Transport-Security: max-age=31536000');
- ini_set("session.cookie_secure", "on");
+ if (\OC::$server->getSystemConfig()->getValue('forcessl', false)) {
+ // Default HSTS policy
+ $header = 'Strict-Transport-Security: max-age=31536000';
+
+ // If SSL for subdomains is enabled add "; includeSubDomains" to the header
+ if(\OC::$server->getSystemConfig()->getValue('forceSSLforSubdomains', false)) {
+ $header .= '; includeSubDomains';
+ }
+ header($header);
+ ini_set('session.cookie_secure', 'on');
if (OC_Request::serverProtocol() <> 'https' and !OC::$CLI) {
- $url = "https://" . OC_Request::serverHost() . OC_Request::requestUri();
+ $url = 'https://' . OC_Request::serverHost() . OC_Request::requestUri();
header("Location: $url");
exit();
}
@@ -247,7 +256,7 @@ class OC {
public static function checkMaintenanceMode() {
// Allow ajax update script to execute without being stopped
- if (OC_Config::getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') {
+ if (\OC::$server->getSystemConfig()->getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') {
// send http status 503
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
@@ -264,7 +273,7 @@ class OC {
public static function checkSingleUserMode() {
$user = OC_User::getUserSession()->getUser();
$group = OC_Group::getManager()->get('admin');
- if ($user && OC_Config::getValue('singleuser', false) && !$group->inGroup($user)) {
+ if ($user && \OC::$server->getSystemConfig()->getValue('singleuser', false) && !$group->inGroup($user)) {
// send http status 503
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
@@ -294,10 +303,11 @@ class OC {
*/
public static function checkUpgrade($showTemplate = true) {
if (\OCP\Util::needUpgrade()) {
- if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
+ $systemConfig = \OC::$server->getSystemConfig();
+ if ($showTemplate && !$systemConfig->getValue('maintenance', false)) {
$version = OC_Util::getVersion();
- $oldTheme = OC_Config::getValue('theme');
- OC_Config::setValue('theme', '');
+ $oldTheme = $systemConfig->getValue('theme');
+ $systemConfig->setValue('theme', '');
OC_Util::addScript('config'); // needed for web root
OC_Util::addScript('update');
$tmpl = new OC_Template('', 'update.admin', 'guest');
@@ -326,15 +336,23 @@ class OC {
public static function initTemplateEngine() {
// Add the stuff we need always
- // TODO: read from core/js/core.json
- OC_Util::addVendorScript('jquery/jquery.min');
- OC_Util::addVendorScript('jquery/jquery-migrate.min');
- OC_Util::addScript("jquery-ui-1.10.0.custom");
- OC_Util::addScript("jquery-showpassword");
+ // following logic will import all vendor libraries that are
+ // specified in core/js/core.json
+ $fileContent = file_get_contents(OC::$SERVERROOT . '/core/js/core.json');
+ if($fileContent !== false) {
+ $coreDependencies = json_decode($fileContent, true);
+ foreach($coreDependencies['vendor'] as $vendorLibrary) {
+ // remove trailing ".js" as addVendorScript will append it
+ OC_Util::addVendorScript(
+ substr($vendorLibrary, 0, strlen($vendorLibrary) - 3));
+ }
+ } else {
+ throw new \Exception('Cannot read core/js/core.json');
+ }
+
OC_Util::addScript("placeholders");
OC_Util::addScript("jquery-tipsy");
OC_Util::addScript("compatibility");
- OC_Util::addVendorScript("underscore/underscore");
OC_Util::addScript("jquery.ocdialog");
OC_Util::addScript("oc-dialogs");
OC_Util::addScript("js");
@@ -344,14 +362,13 @@ class OC {
OC_Util::addScript("eventsource");
OC_Util::addScript("config");
//OC_Util::addScript( "multiselect" );
- OC_Util::addScript('search', 'result');
+ OC_Util::addScript('search', 'search');
OC_Util::addScript("oc-requesttoken");
OC_Util::addScript("apps");
OC_Util::addVendorScript('snapjs/dist/latest/snap');
- OC_Util::addVendorScript('moment/min/moment-with-locales');
// avatars
- if (\OC_Config::getValue('enable_avatars', true) === true) {
+ if (\OC::$server->getSystemConfig()->getValue('enable_avatars', true) === true) {
\OC_Util::addScript('placeholder');
\OC_Util::addVendorScript('blueimp-md5/js/md5');
\OC_Util::addScript('jquery.avatar');
@@ -366,7 +383,8 @@ class OC {
OC_Util::addStyle("apps");
OC_Util::addStyle("fixes");
OC_Util::addStyle("multiselect");
- OC_Util::addStyle("jquery-ui-1.10.0.custom");
+ OC_Util::addVendorStyle('jquery-ui/themes/base/jquery-ui');
+ OC_Util::addStyle('jquery-ui-fixes');
OC_Util::addStyle("jquery-tipsy");
OC_Util::addStyle("jquery.ocdialog");
}
@@ -431,7 +449,7 @@ class OC {
* @return string
*/
private static function getSessionLifeTime() {
- return OC_Config::getValue('session_lifetime', 60 * 60 * 24);
+ return \OC::$server->getConfig()->getSystemValue('session_lifetime', 60 * 60 * 24);
}
public static function loadAppClassPaths() {
@@ -464,7 +482,7 @@ class OC {
}
// setup the basic server
- self::$server = new \OC\Server();
+ self::$server = new \OC\Server(\OC::$WEBROOT);
\OC::$server->getEventLogger()->log('autoloader', 'Autoloader', $loaderStart, $loaderEnd);
\OC::$server->getEventLogger()->start('boot', 'Initialize');
@@ -479,10 +497,6 @@ class OC {
date_default_timezone_set('UTC');
ini_set('arg_separator.output', '&amp;');
- // try to switch magic quotes off.
- if (get_magic_quotes_gpc() == 1) {
- ini_set('magic_quotes_runtime', 0);
- }
//try to configure php to enable big file uploads.
//this doesn´t work always depending on the webserver and php configuration.
//Let´s try to overwrite some defaults anyways
@@ -523,9 +537,7 @@ class OC {
\OC::$server->getEventLogger()->start('init_session', 'Initialize session');
OC_App::loadApps(array('session'));
- if (self::$CLI) {
- self::$session = new \OC\Session\Memory('');
- } else {
+ if (!self::$CLI) {
self::initSession();
}
\OC::$server->getEventLogger()->end('init_session');
@@ -553,8 +565,10 @@ class OC {
$sessionLifeTime = self::getSessionLifeTime();
@ini_set('gc_maxlifetime', (string)$sessionLifeTime);
+ $systemConfig = \OC::$server->getSystemConfig();
+
// User and Groups
- if (!OC_Config::getValue("installed", false)) {
+ if (!$systemConfig->getValue("installed", false)) {
self::$server->getSession()->set('user_id', '');
}
@@ -577,14 +591,14 @@ class OC {
$tmpManager = \OC::$server->getTempManager();
register_shutdown_function(array($tmpManager, 'clean'));
- if (OC_Config::getValue('installed', false) && !self::checkUpgrade(false)) {
- if (\OC::$server->getAppConfig()->getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
+ if ($systemConfig->getValue('installed', false) && !self::checkUpgrade(false)) {
+ if (\OC::$server->getConfig()->getAppValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
OC_Util::addScript('backgroundjobs');
}
}
// Check whether the sample configuration has been copied
- if(OC_Config::getValue('copied_sample_config', false)) {
+ if($systemConfig->getValue('copied_sample_config', false)) {
$l = \OC::$server->getL10N('lib');
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
@@ -605,14 +619,8 @@ class OC {
header('HTTP/1.1 400 Bad Request');
header('Status: 400 Bad Request');
- $domain = $_SERVER['SERVER_NAME'];
- // Append port to domain in case it is not
- if($_SERVER['SERVER_PORT'] !== '80' && $_SERVER['SERVER_PORT'] !== '443') {
- $domain .= ':'.$_SERVER['SERVER_PORT'];
- }
-
$tmpl = new OCP\Template('core', 'untrustedDomain', 'guest');
- $tmpl->assign('domain', $domain);
+ $tmpl->assign('domain', $_SERVER['SERVER_NAME']);
$tmpl->printPage();
exit();
@@ -632,7 +640,7 @@ class OC {
* register hooks for the cache
*/
public static function registerCacheHooks() {
- if (OC_Config::getValue('installed', false) && !\OCP\Util::needUpgrade()) { //don't try to do this before we are properly setup
+ if (\OC::$server->getSystemConfig()->getValue('installed', false) && !\OCP\Util::needUpgrade()) { //don't try to do this before we are properly setup
\OCP\BackgroundJob::registerJob('OC\Cache\FileGlobalGC');
// NOTE: This will be replaced to use OCP
@@ -645,10 +653,11 @@ class OC {
* register hooks for the cache
*/
public static function registerLogRotate() {
- if (OC_Config::getValue('installed', false) && OC_Config::getValue('log_rotate_size', false) && !\OCP\Util::needUpgrade()) {
+ $systemConfig = \OC::$server->getSystemConfig();
+ if ($systemConfig->getValue('installed', false) && $systemConfig->getValue('log_rotate_size', false) && !\OCP\Util::needUpgrade()) {
//don't try to do this before we are properly setup
//use custom logfile path if defined, otherwise use default of owncloud.log in data directory
- \OCP\BackgroundJob::registerJob('OC\Log\Rotate', OC_Config::getValue('logfile', OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/owncloud.log'));
+ \OCP\BackgroundJob::registerJob('OC\Log\Rotate', $systemConfig->getValue('logfile', $systemConfig->getValue('datadirectory', OC::$SERVERROOT . '/data') . '/owncloud.log'));
}
}
@@ -678,7 +687,7 @@ class OC {
* register hooks for sharing
*/
public static function registerShareHooks() {
- if (\OC_Config::getValue('installed')) {
+ if (\OC::$server->getSystemConfig()->getValue('installed')) {
OC_Hook::connect('OC_User', 'post_deleteUser', 'OC\Share\Hooks', 'post_deleteUser');
OC_Hook::connect('OC_User', 'post_addToGroup', 'OC\Share\Hooks', 'post_addToGroup');
OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OC\Share\Hooks', 'post_removeFromGroup');
@@ -693,7 +702,7 @@ class OC {
// generate an instanceid via \OC_Util::getInstanceId() because the
// config file may not be writable. As such, we only register a class
// loader cache if instanceid is available without trying to create one.
- $instanceId = OC_Config::getValue('instanceid', null);
+ $instanceId = \OC::$server->getSystemConfig()->getValue('instanceid', null);
if ($instanceId) {
try {
$memcacheFactory = new \OC\Memcache\Factory($instanceId);
@@ -708,13 +717,15 @@ class OC {
*/
public static function handleRequest() {
\OC::$server->getEventLogger()->start('handle_request', 'Handle request');
+ $systemConfig = \OC::$server->getSystemConfig();
// load all the classpaths from the enabled apps so they are available
// in the routing files of each app
OC::loadAppClassPaths();
// Check if ownCloud is installed or in maintenance (update) mode
- if (!OC_Config::getValue('installed', false)) {
- $controller = new OC\Core\Setup\Controller(\OC::$server->getConfig());
+ if (!$systemConfig->getValue('installed', false)) {
+ \OC::$server->getSession()->clear();
+ $controller = new OC\Core\Setup\Controller(\OC::$server->getConfig(), \OC::$server->getIniWrapper(), \OC::$server->getL10N('core'), new \OC_Defaults());
$controller->run($_POST);
exit();
}
@@ -727,7 +738,7 @@ class OC {
if (!self::$CLI and (!isset($_GET["logout"]) or ($_GET["logout"] !== 'true'))) {
try {
- if (!OC_Config::getValue('maintenance', false) && !\OCP\Util::needUpgrade()) {
+ if (!$systemConfig->getValue('maintenance', false) && !\OCP\Util::needUpgrade()) {
OC_App::loadApps(array('authentication'));
OC_App::loadApps(array('filesystem', 'logging'));
OC_App::loadApps();
@@ -753,6 +764,7 @@ class OC {
// For guests: Load only authentication, filesystem and logging
OC_App::loadApps(array('authentication'));
OC_App::loadApps(array('filesystem', 'logging'));
+ \OC_User::tryBasicAuthLogin();
}
}
@@ -793,7 +805,7 @@ class OC {
if (isset($_GET["logout"]) and ($_GET["logout"])) {
OC_JSON::callCheck();
if (isset($_COOKIE['oc_token'])) {
- OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']);
+ \OC::$server->getConfig()->deleteUserValue(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']);
}
OC_User::logout();
// redirect to webroot and add slash if webroot is empty
@@ -852,12 +864,13 @@ class OC {
* @param string $user
*/
protected static function cleanupLoginTokens($user) {
- $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
- $tokens = OC_Preferences::getKeys($user, 'login_token');
+ $config = \OC::$server->getConfig();
+ $cutoff = time() - $config->getSystemValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
+ $tokens = $config->getUserKeys($user, 'login_token');
foreach ($tokens as $token) {
- $time = OC_Preferences::getValue($user, 'login_token', $token);
+ $time = $config->getUserValue($user, 'login_token', $token);
if ($time < $cutoff) {
- OC_Preferences::deleteKey($user, 'login_token', $token);
+ $config->deleteUserValue($user, 'login_token', $token);
}
}
}
diff --git a/lib/l10n/ach.js b/lib/l10n/ach.js
index 9ac3e05d6c6..9408adc0dc3 100644
--- a/lib/l10n/ach.js
+++ b/lib/l10n/ach.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/ach.json b/lib/l10n/ach.json
index 82a8a99d300..2a227e468c7 100644
--- a/lib/l10n/ach.json
+++ b/lib/l10n/ach.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ady.js b/lib/l10n/ady.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/ady.js
+++ b/lib/l10n/ady.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ady.json b/lib/l10n/ady.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/ady.json
+++ b/lib/l10n/ady.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/af_ZA.js b/lib/l10n/af_ZA.js
index fd0ff979e2c..953186be7fe 100644
--- a/lib/l10n/af_ZA.js
+++ b/lib/l10n/af_ZA.js
@@ -8,11 +8,13 @@ OC.L10N.register(
"Admin" : "Admin",
"Unknown filetype" : "Onbekende leertipe",
"Invalid image" : "Ongeldige prent",
- "web services under your control" : "webdienste onder jou beheer",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["","%n ure gelede"],
"today" : "vandag",
- "_%n day go_::_%n days ago_" : ["","%n dae gelede"],
- "_%n month ago_::_%n months ago_" : ["","%n maande gelede"]
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["","%n maande gelede"],
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n ure gelede"],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "sekondes gelede",
+ "web services under your control" : "webdienste onder jou beheer"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/af_ZA.json b/lib/l10n/af_ZA.json
index 0a2bd668866..7dd4d1ef718 100644
--- a/lib/l10n/af_ZA.json
+++ b/lib/l10n/af_ZA.json
@@ -6,11 +6,13 @@
"Admin" : "Admin",
"Unknown filetype" : "Onbekende leertipe",
"Invalid image" : "Ongeldige prent",
- "web services under your control" : "webdienste onder jou beheer",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["","%n ure gelede"],
"today" : "vandag",
- "_%n day go_::_%n days ago_" : ["","%n dae gelede"],
- "_%n month ago_::_%n months ago_" : ["","%n maande gelede"]
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["","%n maande gelede"],
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n ure gelede"],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "sekondes gelede",
+ "web services under your control" : "webdienste onder jou beheer"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ak.js b/lib/l10n/ak.js
index 27ded1c7f3b..0f475bd29e9 100644
--- a/lib/l10n/ak.js
+++ b/lib/l10n/ak.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=n > 1;");
diff --git a/lib/l10n/ak.json b/lib/l10n/ak.json
index a488fce3cc6..e760ab2823c 100644
--- a/lib/l10n/ak.json
+++ b/lib/l10n/ak.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=n > 1;"
} \ No newline at end of file
diff --git a/lib/l10n/am_ET.js b/lib/l10n/am_ET.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/am_ET.js
+++ b/lib/l10n/am_ET.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/am_ET.json b/lib/l10n/am_ET.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/am_ET.json
+++ b/lib/l10n/am_ET.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ar.js b/lib/l10n/ar.js
index 5fec5a1a818..246bffb979c 100644
--- a/lib/l10n/ar.js
+++ b/lib/l10n/ar.js
@@ -9,6 +9,16 @@ OC.L10N.register(
"No app name specified" : "لا يوجد برنامج بهذا الاسم",
"Unknown filetype" : "نوع الملف غير معروف",
"Invalid image" : "الصورة غير صالحة",
+ "today" : "اليوم",
+ "yesterday" : "يوم أمس",
+ "_%n day ago_::_%n days ago_" : ["","","","","",""],
+ "last month" : "الشهر الماضي",
+ "_%n month ago_::_%n months ago_" : ["","","","","",""],
+ "last year" : "السنةالماضية",
+ "_%n year ago_::_%n years ago_" : ["","","","","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","","","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","","","","",""],
+ "seconds ago" : "منذ ثواني",
"web services under your control" : "خدمات الشبكة تحت سيطرتك",
"App directory already exists" : "مجلد التطبيق موجود مسبقا",
"Can't create app folder. Please fix permissions. %s" : "لا يمكن إنشاء مجلد التطبيق. يرجى تعديل الصلاحيات. %s",
@@ -37,16 +47,6 @@ OC.L10N.register(
"Set an admin password." : "اعداد كلمة مرور للمدير",
"%s shared »%s« with you" : "%s شارك »%s« معك",
"Could not find category \"%s\"" : "تعذر العثور على المجلد \"%s\"",
- "seconds ago" : "منذ ثواني",
- "_%n minute ago_::_%n minutes ago_" : ["","","","","",""],
- "_%n hour ago_::_%n hours ago_" : ["","","","","",""],
- "today" : "اليوم",
- "yesterday" : "يوم أمس",
- "_%n day go_::_%n days ago_" : ["","","","","",""],
- "last month" : "الشهر الماضي",
- "_%n month ago_::_%n months ago_" : ["","","","","",""],
- "last year" : "السنةالماضية",
- "years ago" : "سنة مضت",
"A valid username must be provided" : "يجب ادخال اسم مستخدم صحيح",
"A valid password must be provided" : "يجب ادخال كلمة مرور صحيحة"
},
diff --git a/lib/l10n/ar.json b/lib/l10n/ar.json
index 64af68df990..e2eb4272c3e 100644
--- a/lib/l10n/ar.json
+++ b/lib/l10n/ar.json
@@ -7,6 +7,16 @@
"No app name specified" : "لا يوجد برنامج بهذا الاسم",
"Unknown filetype" : "نوع الملف غير معروف",
"Invalid image" : "الصورة غير صالحة",
+ "today" : "اليوم",
+ "yesterday" : "يوم أمس",
+ "_%n day ago_::_%n days ago_" : ["","","","","",""],
+ "last month" : "الشهر الماضي",
+ "_%n month ago_::_%n months ago_" : ["","","","","",""],
+ "last year" : "السنةالماضية",
+ "_%n year ago_::_%n years ago_" : ["","","","","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","","","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","","","","",""],
+ "seconds ago" : "منذ ثواني",
"web services under your control" : "خدمات الشبكة تحت سيطرتك",
"App directory already exists" : "مجلد التطبيق موجود مسبقا",
"Can't create app folder. Please fix permissions. %s" : "لا يمكن إنشاء مجلد التطبيق. يرجى تعديل الصلاحيات. %s",
@@ -35,16 +45,6 @@
"Set an admin password." : "اعداد كلمة مرور للمدير",
"%s shared »%s« with you" : "%s شارك »%s« معك",
"Could not find category \"%s\"" : "تعذر العثور على المجلد \"%s\"",
- "seconds ago" : "منذ ثواني",
- "_%n minute ago_::_%n minutes ago_" : ["","","","","",""],
- "_%n hour ago_::_%n hours ago_" : ["","","","","",""],
- "today" : "اليوم",
- "yesterday" : "يوم أمس",
- "_%n day go_::_%n days ago_" : ["","","","","",""],
- "last month" : "الشهر الماضي",
- "_%n month ago_::_%n months ago_" : ["","","","","",""],
- "last year" : "السنةالماضية",
- "years ago" : "سنة مضت",
"A valid username must be provided" : "يجب ادخال اسم مستخدم صحيح",
"A valid password must be provided" : "يجب ادخال كلمة مرور صحيحة"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
diff --git a/lib/l10n/ast.js b/lib/l10n/ast.js
index 7c1dd6ed304..e98d8604551 100644
--- a/lib/l10n/ast.js
+++ b/lib/l10n/ast.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Davezu esto pue iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu de configuración%s.",
"Sample configuration detected" : "Configuración d'amuesa 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" : "Detectose que la configuración d'amuesa copiose. Esto pue encaboxar la instalación y dexala ensín soporte. Llee la documentación enantes de facer cambéos en config.php",
+ "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Axustes",
@@ -17,6 +18,16 @@ OC.L10N.register(
"No app name specified" : "Nun s'especificó nome de l'aplicación",
"Unknown filetype" : "Triba de ficheru desconocida",
"Invalid image" : "Imaxe inválida",
+ "today" : "güei",
+ "yesterday" : "ayeri",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "mes caberu",
+ "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
+ "last year" : "añu caberu",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n hores"],
+ "_%n minute ago_::_%n minutes ago_" : ["hai %n minutu","hai %n minutos"],
+ "seconds ago" : "hai segundos",
"web services under your control" : "servicios web baxo'l to control",
"App directory already exists" : "El direutoriu de l'aplicación yá esiste",
"Can't create app folder. Please fix permissions. %s" : "Nun pue crease la carpeta de l'aplicación. Por favor, igua los permisos. %s",
@@ -78,16 +89,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartir %s falló porque'l motor compartíu pa %s podría nun atopar el so orixe",
"Sharing %s failed, because the file could not be found in the file cache" : "Compartir %s falló, yá que'l ficheru nun pudo atopase na caché de ficheru",
"Could not find category \"%s\"" : "Nun pudo alcontrase la estaya \"%s.\"",
- "seconds ago" : "hai segundos",
- "_%n minute ago_::_%n minutes ago_" : ["hai %n minutu","hai %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n hores"],
- "today" : "güei",
- "yesterday" : "ayeri",
- "_%n day go_::_%n days ago_" : ["hai %n día","hai %n díes"],
- "last month" : "mes caberu",
- "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
- "last year" : "añu caberu",
- "years ago" : "hai años",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Namái tan permitíos los siguientes caráuteres nun nome d'usuariu: \"a-z\", \"A-Z\", \"0-9\", y \"_.@-\"",
"A valid username must be provided" : "Tien d'apurrise un nome d'usuariu válidu",
"A valid password must be provided" : "Tien d'apurrise una contraseña válida",
@@ -103,12 +104,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Instala ún d'estos locales nel to sistema y reanicia'l sirvidor web",
"Please ask your server administrator to install the module." : "Por favor, entrúga-y al to alministrador del sirvidor pa instalar el módulu.",
"PHP module %s not installed." : "Nun ta instaláu'l módulu PHP %s",
- "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, entrúga-y al to alministrador del sirvidor p'anovar PHP a la cabera versión. La to versión PHP nun ta sofitada por ownCloud y la comunidá PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Ta habilitáu'l mou seguru de PHP. ownCloud requier que tea deshabilitáu pa furrular afayadízamente",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Mou seguru de PHP ye un entornu en desusu que tien de desactivase. Contauta col alministrador del sirvidor pa desactivalu en php.ini o na configuración del sirvidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Tán habilitaes les Magic Quotes. ownCloud requier que les deshabilites pa funcionar afayadizamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ye un entornu en desusu y tien de desactivase. Consulta col alministrador del sirvidor pa desactivalu en php.ini o na configuración del sirvidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Instaláronse los módulos PHP, ¿pero tán entá llistaos como faltantes?",
"Please ask your server administrator to restart the web server." : "Por favor, entruga al to alministrador pa reaniciar el sirvidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requeríu",
diff --git a/lib/l10n/ast.json b/lib/l10n/ast.json
index 8585975ac12..29db56cf04c 100644
--- a/lib/l10n/ast.json
+++ b/lib/l10n/ast.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Davezu esto pue iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu de configuración%s.",
"Sample configuration detected" : "Configuración d'amuesa 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" : "Detectose que la configuración d'amuesa copiose. Esto pue encaboxar la instalación y dexala ensín soporte. Llee la documentación enantes de facer cambéos en config.php",
+ "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Axustes",
@@ -15,6 +16,16 @@
"No app name specified" : "Nun s'especificó nome de l'aplicación",
"Unknown filetype" : "Triba de ficheru desconocida",
"Invalid image" : "Imaxe inválida",
+ "today" : "güei",
+ "yesterday" : "ayeri",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "mes caberu",
+ "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
+ "last year" : "añu caberu",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n hores"],
+ "_%n minute ago_::_%n minutes ago_" : ["hai %n minutu","hai %n minutos"],
+ "seconds ago" : "hai segundos",
"web services under your control" : "servicios web baxo'l to control",
"App directory already exists" : "El direutoriu de l'aplicación yá esiste",
"Can't create app folder. Please fix permissions. %s" : "Nun pue crease la carpeta de l'aplicación. Por favor, igua los permisos. %s",
@@ -76,16 +87,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartir %s falló porque'l motor compartíu pa %s podría nun atopar el so orixe",
"Sharing %s failed, because the file could not be found in the file cache" : "Compartir %s falló, yá que'l ficheru nun pudo atopase na caché de ficheru",
"Could not find category \"%s\"" : "Nun pudo alcontrase la estaya \"%s.\"",
- "seconds ago" : "hai segundos",
- "_%n minute ago_::_%n minutes ago_" : ["hai %n minutu","hai %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n hores"],
- "today" : "güei",
- "yesterday" : "ayeri",
- "_%n day go_::_%n days ago_" : ["hai %n día","hai %n díes"],
- "last month" : "mes caberu",
- "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
- "last year" : "añu caberu",
- "years ago" : "hai años",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Namái tan permitíos los siguientes caráuteres nun nome d'usuariu: \"a-z\", \"A-Z\", \"0-9\", y \"_.@-\"",
"A valid username must be provided" : "Tien d'apurrise un nome d'usuariu válidu",
"A valid password must be provided" : "Tien d'apurrise una contraseña válida",
@@ -101,12 +102,7 @@
"Please install one of these locales on your system and restart your webserver." : "Instala ún d'estos locales nel to sistema y reanicia'l sirvidor web",
"Please ask your server administrator to install the module." : "Por favor, entrúga-y al to alministrador del sirvidor pa instalar el módulu.",
"PHP module %s not installed." : "Nun ta instaláu'l módulu PHP %s",
- "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, entrúga-y al to alministrador del sirvidor p'anovar PHP a la cabera versión. La to versión PHP nun ta sofitada por ownCloud y la comunidá PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Ta habilitáu'l mou seguru de PHP. ownCloud requier que tea deshabilitáu pa furrular afayadízamente",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Mou seguru de PHP ye un entornu en desusu que tien de desactivase. Contauta col alministrador del sirvidor pa desactivalu en php.ini o na configuración del sirvidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Tán habilitaes les Magic Quotes. ownCloud requier que les deshabilites pa funcionar afayadizamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ye un entornu en desusu y tien de desactivase. Consulta col alministrador del sirvidor pa desactivalu en php.ini o na configuración del sirvidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Instaláronse los módulos PHP, ¿pero tán entá llistaos como faltantes?",
"Please ask your server administrator to restart the web server." : "Por favor, entruga al to alministrador pa reaniciar el sirvidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requeríu",
diff --git a/lib/l10n/az.js b/lib/l10n/az.js
index 700c3353556..3d5793ef799 100644
--- a/lib/l10n/az.js
+++ b/lib/l10n/az.js
@@ -14,6 +14,11 @@ OC.L10N.register(
"No app name specified" : "Proqram adı təyin edilməyib",
"Unknown filetype" : "Fayl tipi bəlli deyil.",
"Invalid image" : "Yalnış şəkil",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
"App directory already exists" : "Proqram təminatı qovluğu artıq mövcuddur.",
"Can't create app folder. Please fix permissions. %s" : "Proqram təminatı qovluğunu yaratmaq mümkün olmadı. Xahiş edilir yetkiləri düzgün təyin edəsiniz. %s",
"Application is not enabled" : "Proqram təminatı aktiv edilməyib",
@@ -35,10 +40,6 @@ OC.L10N.register(
"Sharing %s failed, because the file does not exist" : "%s yayımlanmasında səhv baş verdi ona görə ki, fayl mövcud deyil.",
"You are not allowed to share %s" : "%s-in yayimlanmasına sizə izin verilmir",
"Share type %s is not valid for %s" : "Yayımlanma tipi %s etibarlı deyil %s üçün",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""],
"A valid username must be provided" : "Düzgün istifadəçi adı daxil edilməlidir",
"A valid password must be provided" : "Düzgün şifrə daxil edilməlidir"
},
diff --git a/lib/l10n/az.json b/lib/l10n/az.json
index b0348a52ef3..49d2df41c96 100644
--- a/lib/l10n/az.json
+++ b/lib/l10n/az.json
@@ -12,6 +12,11 @@
"No app name specified" : "Proqram adı təyin edilməyib",
"Unknown filetype" : "Fayl tipi bəlli deyil.",
"Invalid image" : "Yalnış şəkil",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
"App directory already exists" : "Proqram təminatı qovluğu artıq mövcuddur.",
"Can't create app folder. Please fix permissions. %s" : "Proqram təminatı qovluğunu yaratmaq mümkün olmadı. Xahiş edilir yetkiləri düzgün təyin edəsiniz. %s",
"Application is not enabled" : "Proqram təminatı aktiv edilməyib",
@@ -33,10 +38,6 @@
"Sharing %s failed, because the file does not exist" : "%s yayımlanmasında səhv baş verdi ona görə ki, fayl mövcud deyil.",
"You are not allowed to share %s" : "%s-in yayimlanmasına sizə izin verilmir",
"Share type %s is not valid for %s" : "Yayımlanma tipi %s etibarlı deyil %s üçün",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""],
"A valid username must be provided" : "Düzgün istifadəçi adı daxil edilməlidir",
"A valid password must be provided" : "Düzgün şifrə daxil edilməlidir"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/lib/l10n/be.js b/lib/l10n/be.js
index b75e4fa2e67..f34545ade21 100644
--- a/lib/l10n/be.js
+++ b/lib/l10n/be.js
@@ -2,15 +2,15 @@ OC.L10N.register(
"lib",
{
"Settings" : "Налады",
- "seconds ago" : "Секунд таму",
- "_%n minute ago_::_%n minutes ago_" : ["","","",""],
- "_%n hour ago_::_%n hours ago_" : ["","","",""],
"today" : "Сёння",
"yesterday" : "Ўчора",
- "_%n day go_::_%n days ago_" : ["","","",""],
+ "_%n day ago_::_%n days ago_" : ["","","",""],
"last month" : "У мінулым месяцы",
"_%n month ago_::_%n months ago_" : ["","","",""],
"last year" : "У мінулым годзе",
- "years ago" : "Гадоў таму"
+ "_%n year ago_::_%n years ago_" : ["","","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","","",""],
+ "seconds ago" : "Секунд таму"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/be.json b/lib/l10n/be.json
index 891b64361dc..91f99445d7a 100644
--- a/lib/l10n/be.json
+++ b/lib/l10n/be.json
@@ -1,14 +1,14 @@
{ "translations": {
"Settings" : "Налады",
- "seconds ago" : "Секунд таму",
- "_%n minute ago_::_%n minutes ago_" : ["","","",""],
- "_%n hour ago_::_%n hours ago_" : ["","","",""],
"today" : "Сёння",
"yesterday" : "Ўчора",
- "_%n day go_::_%n days ago_" : ["","","",""],
+ "_%n day ago_::_%n days ago_" : ["","","",""],
"last month" : "У мінулым месяцы",
"_%n month ago_::_%n months ago_" : ["","","",""],
"last year" : "У мінулым годзе",
- "years ago" : "Гадоў таму"
+ "_%n year ago_::_%n years ago_" : ["","","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","","",""],
+ "seconds ago" : "Секунд таму"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/bg_BG.js b/lib/l10n/bg_BG.js
index 82f0f3e51fc..ad881bb4c38 100644
--- a/lib/l10n/bg_BG.js
+++ b/lib/l10n/bg_BG.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"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",
+ "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Help" : "Помощ",
"Personal" : "Лични",
"Settings" : "Настройки",
@@ -17,6 +18,18 @@ OC.L10N.register(
"No app name specified" : "Не е зададено име на преложението",
"Unknown filetype" : "Непознат тип файл.",
"Invalid image" : "Невалидно изображение.",
+ "today" : "днес",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "миналия месец",
+ "_%n month ago_::_%n months ago_" : ["","преди %n месеца"],
+ "last year" : "миналата година",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","преди %n часа"],
+ "_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"],
+ "seconds ago" : "преди секунди",
+ "Database Error" : "Грешка в базата данни",
+ "Please contact your system administrator." : "Моля, свържи се с админстратора.",
"web services under your control" : "уеб услуги под твой контрол",
"App directory already exists" : "Папката на приложението вече съществува.",
"Can't create app folder. Please fix permissions. %s" : "Неуспешно създаване на папката за приложението. Моля, оправете разрешенията. %s",
@@ -78,16 +91,6 @@ OC.L10N.register(
"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\".",
- "seconds ago" : "преди секунди",
- "_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"],
- "_%n hour ago_::_%n hours ago_" : ["","преди %n часа"],
- "today" : "днес",
- "yesterday" : "вчера",
- "_%n day go_::_%n days ago_" : ["","преди %n дена"],
- "last month" : "миналия месец",
- "_%n month ago_::_%n months ago_" : ["","преди %n месеца"],
- "last year" : "миналата година",
- "years ago" : "преди години",
"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" : "Валидно потребителско име трябва да бъде зададено.",
"A valid password must be provided" : "Валидна парола трябва да бъде зададена.",
@@ -103,12 +106,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.",
"Please ask your server administrator to install the module." : "Моля, поискай твоят администратор да инсталира модула.",
"PHP module %s not installed." : "PHP модулът %s не е инсталиран.",
- "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Моля, поискай твоят администратор да обнови PHP до най-новата верския. Твоята PHP версия вече не се поддържа от ownCloud и PHP общността.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode е включен. ownCloud изисква този режим да бъде изключен, за да функионира нормално.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode е непропръчителна и общо взето безсмислена настройка и трябва да бъде изключена. Моля, поискай твоя администратор да я изключи ви php.ini или в конфигурацията на уве сървъра.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes е включен. ownCloud изисква да е изключен, за да функнионира нормално.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes е непропръчителна и общо взето безсмислена настройка и трябва да бъде изключена. Моля, поискай твоя администратор да я изключи ви php.ini или в конфигурацията на уве сървъра.",
"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",
diff --git a/lib/l10n/bg_BG.json b/lib/l10n/bg_BG.json
index 62c0ea60f07..f92811686d7 100644
--- a/lib/l10n/bg_BG.json
+++ b/lib/l10n/bg_BG.json
@@ -5,6 +5,7 @@
"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",
+ "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Help" : "Помощ",
"Personal" : "Лични",
"Settings" : "Настройки",
@@ -15,6 +16,18 @@
"No app name specified" : "Не е зададено име на преложението",
"Unknown filetype" : "Непознат тип файл.",
"Invalid image" : "Невалидно изображение.",
+ "today" : "днес",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "миналия месец",
+ "_%n month ago_::_%n months ago_" : ["","преди %n месеца"],
+ "last year" : "миналата година",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","преди %n часа"],
+ "_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"],
+ "seconds ago" : "преди секунди",
+ "Database Error" : "Грешка в базата данни",
+ "Please contact your system administrator." : "Моля, свържи се с админстратора.",
"web services under your control" : "уеб услуги под твой контрол",
"App directory already exists" : "Папката на приложението вече съществува.",
"Can't create app folder. Please fix permissions. %s" : "Неуспешно създаване на папката за приложението. Моля, оправете разрешенията. %s",
@@ -76,16 +89,6 @@
"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\".",
- "seconds ago" : "преди секунди",
- "_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"],
- "_%n hour ago_::_%n hours ago_" : ["","преди %n часа"],
- "today" : "днес",
- "yesterday" : "вчера",
- "_%n day go_::_%n days ago_" : ["","преди %n дена"],
- "last month" : "миналия месец",
- "_%n month ago_::_%n months ago_" : ["","преди %n месеца"],
- "last year" : "миналата година",
- "years ago" : "преди години",
"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" : "Валидно потребителско име трябва да бъде зададено.",
"A valid password must be provided" : "Валидна парола трябва да бъде зададена.",
@@ -101,12 +104,7 @@
"Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.",
"Please ask your server administrator to install the module." : "Моля, поискай твоят администратор да инсталира модула.",
"PHP module %s not installed." : "PHP модулът %s не е инсталиран.",
- "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Моля, поискай твоят администратор да обнови PHP до най-новата верския. Твоята PHP версия вече не се поддържа от ownCloud и PHP общността.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode е включен. ownCloud изисква този режим да бъде изключен, за да функионира нормално.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode е непропръчителна и общо взето безсмислена настройка и трябва да бъде изключена. Моля, поискай твоя администратор да я изключи ви php.ini или в конфигурацията на уве сървъра.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes е включен. ownCloud изисква да е изключен, за да функнионира нормално.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes е непропръчителна и общо взето безсмислена настройка и трябва да бъде изключена. Моля, поискай твоя администратор да я изключи ви php.ini или в конфигурацията на уве сървъра.",
"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",
diff --git a/lib/l10n/bn_BD.js b/lib/l10n/bn_BD.js
index ea94de9912e..432d033352f 100644
--- a/lib/l10n/bn_BD.js
+++ b/lib/l10n/bn_BD.js
@@ -14,6 +14,16 @@ OC.L10N.register(
"No app name specified" : "কোন অ্যাপ নাম সুনির্দিষ্ট নয়",
"Unknown filetype" : "অজানা প্রকৃতির ফাইল",
"Invalid image" : "অবৈধ চিত্র",
+ "today" : "আজ",
+ "yesterday" : "গতকাল",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "গত মাস",
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "last year" : "গত বছর",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "সেকেন্ড পূর্বে",
"web services under your control" : "ওয়েব সার্ভিস আপনার হাতের মুঠোয়",
"App directory already exists" : "এই অ্যাপ ডিরেক্টরিটি পূর্ব থেকেই বিদ্যমান",
"Can't create app folder. Please fix permissions. %s" : "অ্যাপ ফোল্ডার বানানো হেলনা। অনুমতি নির্ধারণ করুন। %s",
@@ -29,17 +39,6 @@ OC.L10N.register(
"Unknown user" : "অপরিচিত ব্যবহারকারী",
"%s shared »%s« with you" : "%s আপনার সাথে »%s« ভাগাভাগি করেছে",
"Sharing %s failed, because the file does not exist" : "%s ভাগাভাগি ব্যার্থ, কারণ ফাইলটি নেই",
- "You are not allowed to share %s" : "আপনি %s ভাগাভাগি করতে পারবেননা",
- "seconds ago" : "সেকেন্ড পূর্বে",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
- "today" : "আজ",
- "yesterday" : "গতকাল",
- "_%n day go_::_%n days ago_" : ["",""],
- "last month" : "গত মাস",
- "_%n month ago_::_%n months ago_" : ["",""],
- "last year" : "গত বছর",
- "years ago" : "বছর পূর্বে",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "পিএইচপি সেফ মোড কার্যকর আছে। গউনক্লাউড সঠিকভাবে কাজ করতে হলে এটি অকার্যকর করা প্রয়োজন।"
+ "You are not allowed to share %s" : "আপনি %s ভাগাভাগি করতে পারবেননা"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/bn_BD.json b/lib/l10n/bn_BD.json
index bcf7ae8e1b7..08e5edc50d2 100644
--- a/lib/l10n/bn_BD.json
+++ b/lib/l10n/bn_BD.json
@@ -12,6 +12,16 @@
"No app name specified" : "কোন অ্যাপ নাম সুনির্দিষ্ট নয়",
"Unknown filetype" : "অজানা প্রকৃতির ফাইল",
"Invalid image" : "অবৈধ চিত্র",
+ "today" : "আজ",
+ "yesterday" : "গতকাল",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "গত মাস",
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "last year" : "গত বছর",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "সেকেন্ড পূর্বে",
"web services under your control" : "ওয়েব সার্ভিস আপনার হাতের মুঠোয়",
"App directory already exists" : "এই অ্যাপ ডিরেক্টরিটি পূর্ব থেকেই বিদ্যমান",
"Can't create app folder. Please fix permissions. %s" : "অ্যাপ ফোল্ডার বানানো হেলনা। অনুমতি নির্ধারণ করুন। %s",
@@ -27,17 +37,6 @@
"Unknown user" : "অপরিচিত ব্যবহারকারী",
"%s shared »%s« with you" : "%s আপনার সাথে »%s« ভাগাভাগি করেছে",
"Sharing %s failed, because the file does not exist" : "%s ভাগাভাগি ব্যার্থ, কারণ ফাইলটি নেই",
- "You are not allowed to share %s" : "আপনি %s ভাগাভাগি করতে পারবেননা",
- "seconds ago" : "সেকেন্ড পূর্বে",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
- "today" : "আজ",
- "yesterday" : "গতকাল",
- "_%n day go_::_%n days ago_" : ["",""],
- "last month" : "গত মাস",
- "_%n month ago_::_%n months ago_" : ["",""],
- "last year" : "গত বছর",
- "years ago" : "বছর পূর্বে",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "পিএইচপি সেফ মোড কার্যকর আছে। গউনক্লাউড সঠিকভাবে কাজ করতে হলে এটি অকার্যকর করা প্রয়োজন।"
+ "You are not allowed to share %s" : "আপনি %s ভাগাভাগি করতে পারবেননা"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/bn_IN.js b/lib/l10n/bn_IN.js
index e8129c3586d..9933281c8d8 100644
--- a/lib/l10n/bn_IN.js
+++ b/lib/l10n/bn_IN.js
@@ -2,9 +2,10 @@ OC.L10N.register(
"lib",
{
"Settings" : "সেটিংস",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/bn_IN.json b/lib/l10n/bn_IN.json
index 052226c8728..239478adca6 100644
--- a/lib/l10n/bn_IN.json
+++ b/lib/l10n/bn_IN.json
@@ -1,8 +1,9 @@
{ "translations": {
"Settings" : "সেটিংস",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/bs.js b/lib/l10n/bs.js
index e977f036b3c..a5b30189b3e 100644
--- a/lib/l10n/bs.js
+++ b/lib/l10n/bs.js
@@ -1,9 +1,21 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "Help" : "Pomoć",
+ "Personal" : "Osobno",
+ "Settings" : "Postavke",
+ "Users" : "Korisnici",
+ "Admin" : "Admin",
+ "Recommended" : "Preporučljivo",
+ "Unknown filetype" : "Nepoznat tip datoteke",
+ "Invalid image" : "Nevažeća datoteka",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "_%n month ago_::_%n months ago_" : ["","",""],
+ "_%n year ago_::_%n years ago_" : ["","",""],
"_%n hour ago_::_%n hours ago_" : ["","",""],
- "_%n day go_::_%n days ago_" : ["","",""],
- "_%n month ago_::_%n months ago_" : ["","",""]
+ "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "Authentication error" : "Grešna autentifikacije",
+ "A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
+ "A valid password must be provided" : "Nužno je navesti valjanu lozinku"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/bs.json b/lib/l10n/bs.json
index e6627bb2354..1a9a07c7245 100644
--- a/lib/l10n/bs.json
+++ b/lib/l10n/bs.json
@@ -1,7 +1,19 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "Help" : "Pomoć",
+ "Personal" : "Osobno",
+ "Settings" : "Postavke",
+ "Users" : "Korisnici",
+ "Admin" : "Admin",
+ "Recommended" : "Preporučljivo",
+ "Unknown filetype" : "Nepoznat tip datoteke",
+ "Invalid image" : "Nevažeća datoteka",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "_%n month ago_::_%n months ago_" : ["","",""],
+ "_%n year ago_::_%n years ago_" : ["","",""],
"_%n hour ago_::_%n hours ago_" : ["","",""],
- "_%n day go_::_%n days ago_" : ["","",""],
- "_%n month ago_::_%n months ago_" : ["","",""]
+ "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "Authentication error" : "Grešna autentifikacije",
+ "A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
+ "A valid password must be provided" : "Nužno je navesti valjanu lozinku"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js
index d416b93503a..25946231692 100644
--- a/lib/l10n/ca.js
+++ b/lib/l10n/ca.js
@@ -7,15 +7,27 @@ OC.L10N.register(
"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",
+ "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Help" : "Ajuda",
"Personal" : "Personal",
"Settings" : "Configuració",
"Users" : "Usuaris",
"Admin" : "Administració",
+ "Recommended" : "Recomanat",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'aplicació \\\"%s\\\" no es pot instal·lar perquè no es compatible amb aquesta versió de ownCloud.",
"No app name specified" : "No heu especificat cap nom d'aplicació",
"Unknown filetype" : "Tipus de fitxer desconegut",
"Invalid image" : "Imatge no vàlida",
+ "today" : "avui",
+ "yesterday" : "ahir",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "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_" : ["",""],
+ "_%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",
"web services under your control" : "controleu els vostres serveis web",
"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",
@@ -76,16 +88,6 @@ OC.L10N.register(
"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\"",
- "seconds ago" : "segons enrere",
- "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"],
- "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"],
- "today" : "avui",
- "yesterday" : "ahir",
- "_%n day go_::_%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",
- "years ago" : "anys enrere",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Només els caràcters següents estan permesos en el nom d'usuari: \"a-z\", \"A-Z\", \"0-9\" i \"_.@-\"",
"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",
@@ -101,12 +103,7 @@ OC.L10N.register(
"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.",
- "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Demaneu a l'administrador que actualitzi PHP a l'última versió. La versió que teniu instal·lada no té suport d'ownCloud ni de la comunitat PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "El mode segur de PHP està activat. OwnCloud requereix que es desactivi per funcionar correctament.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "El mode segur de PHP està desfasat i és principalment inútil i hauria de desactivar-se. Demaneu a l'administrador que el desactivi a php.ini o a la configuració del servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Les Magic Quotes estan activades. OwnCloud requereix que les desactiveu per funcionar correctament.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes està desfassat i és principalment inútil i hauria de desactivar-se. Demaneu a l'administrador que el desactivi a php.ini o a la configuració del servidor web.",
"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",
diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json
index 2698ed1846f..ed6dc3883ff 100644
--- a/lib/l10n/ca.json
+++ b/lib/l10n/ca.json
@@ -5,15 +5,27 @@
"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",
+ "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Help" : "Ajuda",
"Personal" : "Personal",
"Settings" : "Configuració",
"Users" : "Usuaris",
"Admin" : "Administració",
+ "Recommended" : "Recomanat",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'aplicació \\\"%s\\\" no es pot instal·lar perquè no es compatible amb aquesta versió de ownCloud.",
"No app name specified" : "No heu especificat cap nom d'aplicació",
"Unknown filetype" : "Tipus de fitxer desconegut",
"Invalid image" : "Imatge no vàlida",
+ "today" : "avui",
+ "yesterday" : "ahir",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "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_" : ["",""],
+ "_%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",
"web services under your control" : "controleu els vostres serveis web",
"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",
@@ -74,16 +86,6 @@
"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\"",
- "seconds ago" : "segons enrere",
- "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"],
- "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"],
- "today" : "avui",
- "yesterday" : "ahir",
- "_%n day go_::_%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",
- "years ago" : "anys enrere",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Només els caràcters següents estan permesos en el nom d'usuari: \"a-z\", \"A-Z\", \"0-9\" i \"_.@-\"",
"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",
@@ -99,12 +101,7 @@
"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.",
- "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Demaneu a l'administrador que actualitzi PHP a l'última versió. La versió que teniu instal·lada no té suport d'ownCloud ni de la comunitat PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "El mode segur de PHP està activat. OwnCloud requereix que es desactivi per funcionar correctament.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "El mode segur de PHP està desfasat i és principalment inútil i hauria de desactivar-se. Demaneu a l'administrador que el desactivi a php.ini o a la configuració del servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Les Magic Quotes estan activades. OwnCloud requereix que les desactiveu per funcionar correctament.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes està desfassat i és principalment inútil i hauria de desactivar-se. Demaneu a l'administrador que el desactivi a php.ini o a la configuració del servidor web.",
"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",
diff --git a/lib/l10n/ca@valencia.js b/lib/l10n/ca@valencia.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/ca@valencia.js
+++ b/lib/l10n/ca@valencia.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ca@valencia.json b/lib/l10n/ca@valencia.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/ca@valencia.json
+++ b/lib/l10n/ca@valencia.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js
index 113f32d40c5..bd84e624e07 100644
--- a/lib/l10n/cs_CZ.js
+++ b/lib/l10n/cs_CZ.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do konfiguračního adresáře%s.",
"Sample configuration detected" : "Byla detekována vzorová konfigurace",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Pravděpodobně byla zkopírována konfigurační nastavení ze vzorových souborů. Toto není podporováno a může poškodit vaši instalaci. Nahlédněte prosím do dokumentace před prováděním změn v souboru config.php",
+ "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
+ "PHP with a version lower than %s is required." : "Je vyžadováno PHP ve verzi nižší než %s.",
+ "Following databases are supported: %s" : "Jsou podporovány následující databáze: %s",
+ "The command line tool %s could not be found" : "Nástroj příkazového řádku %s nebyl nalezen",
+ "The library %s is not available." : "Knihovna %s není dostupná.",
+ "Library %s with a version higher than %s is required - available version %s." : "Je vyžadována knihovna %s ve verzi vyšší než %s - dostupná verze %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Je vyžadována knihovna %s ve verzi nižší než %s - dostupná verze %s.",
+ "Following platforms are supported: %s" : "Jsou podporovány následující systémy: %s",
+ "ownCloud %s or higher is required." : "Je vyžadován ownCloud %s nebo vyšší.",
+ "ownCloud with a version lower than %s is required." : "Je vyžadován ownCloud ve verzi nižší než %s.",
"Help" : "Nápověda",
"Personal" : "Osobní",
"Settings" : "Nastavení",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Administrace",
"Recommended" : "Doporučené",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Aplikace \\\"%s\\\" nemůže být nainstalována, protože není kompatibilní s touto verzí ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikaci \\\"%s\\\" nelze nainstalovat, protože nejsou splněny následující závislosti: %s",
"No app name specified" : "Nebyl zadan název aplikace",
"Unknown filetype" : "Neznámý typ souboru",
"Invalid image" : "Chybný obrázek",
+ "today" : "dnes",
+ "yesterday" : "včera",
+ "_%n day ago_::_%n days ago_" : ["včera","před %n dny","před %n dny"],
+ "last month" : "minulý měsíc",
+ "_%n month ago_::_%n months ago_" : ["před %n měsícem","před %n měsíci","před %n měsíci"],
+ "last year" : "minulý rok",
+ "_%n year ago_::_%n years ago_" : ["před rokem","před %n lety","před %n lety"],
+ "_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
+ "_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
+ "seconds ago" : "před pár sekundami",
+ "Database Error" : "Chyba databáze",
+ "Please contact your system administrator." : "Kontaktujte prosím svého správce systému.",
"web services under your control" : "webové služby pod Vaší kontrolou",
"App directory already exists" : "Adresář aplikace již existuje",
"Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Zadejte heslo správce.",
"Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s",
"%s shared »%s« with you" : "%s s vámi sdílí »%s«",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %i",
"Sharing %s failed, because the file does not exist" : "Sdílení %s selhalo, protože soubor neexistuje",
"You are not allowed to share %s" : "Nemáte povoleno sdílet %s",
"Sharing %s failed, because the user %s is the item owner" : "Sdílení položky %s selhalo, protože uživatel %s je jejím vlastníkem",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Sdílení položky %s selhalo, protože uživatel %s není členem skupiny %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Pro vytvoření veřejného odkazu je nutné zadat heslo, jsou povoleny pouze chráněné odkazy",
"Sharing %s failed, because sharing with links is not allowed" : "Sdílení položky %s selhalo, protože sdílení pomocí linků není povoleno",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sdílení %s selhalo, %s se nepodařilo nalézt, server pravděpodobně právě není dostupný.",
"Share type %s is not valid for %s" : "Sdílení typu %s není korektní pro %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavení oprávnění pro %s selhalo, protože jsou k tomu nutná vyšší oprávnění, než jaká byla povolena pro %s",
"Setting permissions for %s failed, because the item was not found" : "Nastavení práv pro %s selhalo, protože položka nebyla nalezena",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Sdílení položky %s selhalo, protože úložiště sdílení %s nenalezla zdroj",
"Sharing %s failed, because the file could not be found in the file cache" : "Sdílení položky %s selhalo, protože soubor nebyl nalezen ve vyrovnávací paměti",
"Could not find category \"%s\"" : "Nelze nalézt kategorii \"%s\"",
- "seconds ago" : "před pár sekundami",
- "_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
- "_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
- "today" : "dnes",
- "yesterday" : "včera",
- "_%n day go_::_%n days ago_" : ["před %n dnem","před %n dny","před %n dny"],
- "last month" : "minulý měsíc",
- "_%n month ago_::_%n months ago_" : ["před %n měsícem","před %n měsíci","před %n měsíci"],
- "last year" : "minulý rok",
- "years ago" : "před lety",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Pouze následující znaky jsou povoleny v uživatelském jménu: \"a-z\", \"A-Z\", \"0-9\" a \"_.@-\"",
"A valid username must be provided" : "Musíte zadat platné uživatelské jméno",
"A valid password must be provided" : "Musíte zadat platné heslo",
@@ -101,16 +116,11 @@ OC.L10N.register(
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "To lze obvykle vyřešit <a href=\"%s\" target=\"_blank\">povolením zápisu webovému serveru do kořenového adresáře</a>.",
"Setting locale to %s failed" : "Nastavení jazyka na %s selhalo",
"Please install one of these locales on your system and restart your webserver." : "Prosím nainstalujte alespoň jeden z těchto jazyků do svého systému a restartujte webový server.",
- "Please ask your server administrator to install the module." : "Požádejte svého administrátora o instalaci tohoto modulu.",
+ "Please ask your server administrator to install the module." : "Požádejte svého správce systému o instalaci tohoto modulu.",
"PHP module %s not installed." : "PHP modul %s není nainstalován.",
- "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
- "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Požádejte svého administrátora o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Je zapnut PHP Safe Mode. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Je povoleno nastavení Magic Quotes. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
+ "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Požádejte svého správce systému o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly jsou nainstalovány, ale stále se tváří jako chybějící?",
- "Please ask your server administrator to restart the web server." : "Požádejte svého administrátora o restart webového serveru.",
+ "Please ask your server administrator to restart the web server." : "Požádejte svého správce systému o restart webového serveru.",
"PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9",
"Please upgrade your database version" : "Aktualizujte prosím verzi své databáze",
"Error occurred while checking PostgreSQL version" : "Při zjišťování verze PostgreSQL došlo k chybě",
diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json
index e8806f406ae..6d856795aa2 100644
--- a/lib/l10n/cs_CZ.json
+++ b/lib/l10n/cs_CZ.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do konfiguračního adresáře%s.",
"Sample configuration detected" : "Byla detekována vzorová konfigurace",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Pravděpodobně byla zkopírována konfigurační nastavení ze vzorových souborů. Toto není podporováno a může poškodit vaši instalaci. Nahlédněte prosím do dokumentace před prováděním změn v souboru config.php",
+ "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
+ "PHP with a version lower than %s is required." : "Je vyžadováno PHP ve verzi nižší než %s.",
+ "Following databases are supported: %s" : "Jsou podporovány následující databáze: %s",
+ "The command line tool %s could not be found" : "Nástroj příkazového řádku %s nebyl nalezen",
+ "The library %s is not available." : "Knihovna %s není dostupná.",
+ "Library %s with a version higher than %s is required - available version %s." : "Je vyžadována knihovna %s ve verzi vyšší než %s - dostupná verze %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Je vyžadována knihovna %s ve verzi nižší než %s - dostupná verze %s.",
+ "Following platforms are supported: %s" : "Jsou podporovány následující systémy: %s",
+ "ownCloud %s or higher is required." : "Je vyžadován ownCloud %s nebo vyšší.",
+ "ownCloud with a version lower than %s is required." : "Je vyžadován ownCloud ve verzi nižší než %s.",
"Help" : "Nápověda",
"Personal" : "Osobní",
"Settings" : "Nastavení",
@@ -12,9 +22,22 @@
"Admin" : "Administrace",
"Recommended" : "Doporučené",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Aplikace \\\"%s\\\" nemůže být nainstalována, protože není kompatibilní s touto verzí ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikaci \\\"%s\\\" nelze nainstalovat, protože nejsou splněny následující závislosti: %s",
"No app name specified" : "Nebyl zadan název aplikace",
"Unknown filetype" : "Neznámý typ souboru",
"Invalid image" : "Chybný obrázek",
+ "today" : "dnes",
+ "yesterday" : "včera",
+ "_%n day ago_::_%n days ago_" : ["včera","před %n dny","před %n dny"],
+ "last month" : "minulý měsíc",
+ "_%n month ago_::_%n months ago_" : ["před %n měsícem","před %n měsíci","před %n měsíci"],
+ "last year" : "minulý rok",
+ "_%n year ago_::_%n years ago_" : ["před rokem","před %n lety","před %n lety"],
+ "_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
+ "_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
+ "seconds ago" : "před pár sekundami",
+ "Database Error" : "Chyba databáze",
+ "Please contact your system administrator." : "Kontaktujte prosím svého správce systému.",
"web services under your control" : "webové služby pod Vaší kontrolou",
"App directory already exists" : "Adresář aplikace již existuje",
"Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Zadejte heslo správce.",
"Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s",
"%s shared »%s« with you" : "%s s vámi sdílí »%s«",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %i",
"Sharing %s failed, because the file does not exist" : "Sdílení %s selhalo, protože soubor neexistuje",
"You are not allowed to share %s" : "Nemáte povoleno sdílet %s",
"Sharing %s failed, because the user %s is the item owner" : "Sdílení položky %s selhalo, protože uživatel %s je jejím vlastníkem",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Sdílení položky %s selhalo, protože uživatel %s není členem skupiny %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Pro vytvoření veřejného odkazu je nutné zadat heslo, jsou povoleny pouze chráněné odkazy",
"Sharing %s failed, because sharing with links is not allowed" : "Sdílení položky %s selhalo, protože sdílení pomocí linků není povoleno",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sdílení %s selhalo, %s se nepodařilo nalézt, server pravděpodobně právě není dostupný.",
"Share type %s is not valid for %s" : "Sdílení typu %s není korektní pro %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavení oprávnění pro %s selhalo, protože jsou k tomu nutná vyšší oprávnění, než jaká byla povolena pro %s",
"Setting permissions for %s failed, because the item was not found" : "Nastavení práv pro %s selhalo, protože položka nebyla nalezena",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Sdílení položky %s selhalo, protože úložiště sdílení %s nenalezla zdroj",
"Sharing %s failed, because the file could not be found in the file cache" : "Sdílení položky %s selhalo, protože soubor nebyl nalezen ve vyrovnávací paměti",
"Could not find category \"%s\"" : "Nelze nalézt kategorii \"%s\"",
- "seconds ago" : "před pár sekundami",
- "_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
- "_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
- "today" : "dnes",
- "yesterday" : "včera",
- "_%n day go_::_%n days ago_" : ["před %n dnem","před %n dny","před %n dny"],
- "last month" : "minulý měsíc",
- "_%n month ago_::_%n months ago_" : ["před %n měsícem","před %n měsíci","před %n měsíci"],
- "last year" : "minulý rok",
- "years ago" : "před lety",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Pouze následující znaky jsou povoleny v uživatelském jménu: \"a-z\", \"A-Z\", \"0-9\" a \"_.@-\"",
"A valid username must be provided" : "Musíte zadat platné uživatelské jméno",
"A valid password must be provided" : "Musíte zadat platné heslo",
@@ -99,16 +114,11 @@
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "To lze obvykle vyřešit <a href=\"%s\" target=\"_blank\">povolením zápisu webovému serveru do kořenového adresáře</a>.",
"Setting locale to %s failed" : "Nastavení jazyka na %s selhalo",
"Please install one of these locales on your system and restart your webserver." : "Prosím nainstalujte alespoň jeden z těchto jazyků do svého systému a restartujte webový server.",
- "Please ask your server administrator to install the module." : "Požádejte svého administrátora o instalaci tohoto modulu.",
+ "Please ask your server administrator to install the module." : "Požádejte svého správce systému o instalaci tohoto modulu.",
"PHP module %s not installed." : "PHP modul %s není nainstalován.",
- "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
- "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Požádejte svého administrátora o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Je zapnut PHP Safe Mode. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Je povoleno nastavení Magic Quotes. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
+ "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Požádejte svého správce systému o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly jsou nainstalovány, ale stále se tváří jako chybějící?",
- "Please ask your server administrator to restart the web server." : "Požádejte svého administrátora o restart webového serveru.",
+ "Please ask your server administrator to restart the web server." : "Požádejte svého správce systému o restart webového serveru.",
"PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9",
"Please upgrade your database version" : "Aktualizujte prosím verzi své databáze",
"Error occurred while checking PostgreSQL version" : "Při zjišťování verze PostgreSQL došlo k chybě",
diff --git a/lib/l10n/cy_GB.js b/lib/l10n/cy_GB.js
index 1e9cae3d483..cd3772cd7c1 100644
--- a/lib/l10n/cy_GB.js
+++ b/lib/l10n/cy_GB.js
@@ -6,6 +6,16 @@ OC.L10N.register(
"Settings" : "Gosodiadau",
"Users" : "Defnyddwyr",
"Admin" : "Gweinyddu",
+ "today" : "heddiw",
+ "yesterday" : "ddoe",
+ "_%n day ago_::_%n days ago_" : ["","","",""],
+ "last month" : "mis diwethaf",
+ "_%n month ago_::_%n months ago_" : ["","","",""],
+ "last year" : "y llynedd",
+ "_%n year ago_::_%n years ago_" : ["","","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","","",""],
+ "seconds ago" : "eiliad yn ôl",
"web services under your control" : "gwasanaethau gwe a reolir gennych",
"Application is not enabled" : "Nid yw'r pecyn wedi'i alluogi",
"Authentication error" : "Gwall dilysu",
@@ -22,16 +32,6 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "Enw a/neu gyfrinair PostgreSQL annilys",
"Set an admin username." : "Creu enw defnyddiwr i'r gweinyddwr.",
"Set an admin password." : "Gosod cyfrinair y gweinyddwr.",
- "Could not find category \"%s\"" : "Methu canfod categori \"%s\"",
- "seconds ago" : "eiliad yn ôl",
- "_%n minute ago_::_%n minutes ago_" : ["","","",""],
- "_%n hour ago_::_%n hours ago_" : ["","","",""],
- "today" : "heddiw",
- "yesterday" : "ddoe",
- "_%n day go_::_%n days ago_" : ["","","",""],
- "last month" : "mis diwethaf",
- "_%n month ago_::_%n months ago_" : ["","","",""],
- "last year" : "y llynedd",
- "years ago" : "blwyddyn yn ôl"
+ "Could not find category \"%s\"" : "Methu canfod categori \"%s\""
},
"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;");
diff --git a/lib/l10n/cy_GB.json b/lib/l10n/cy_GB.json
index c60d5ea976b..3d88f8b876b 100644
--- a/lib/l10n/cy_GB.json
+++ b/lib/l10n/cy_GB.json
@@ -4,6 +4,16 @@
"Settings" : "Gosodiadau",
"Users" : "Defnyddwyr",
"Admin" : "Gweinyddu",
+ "today" : "heddiw",
+ "yesterday" : "ddoe",
+ "_%n day ago_::_%n days ago_" : ["","","",""],
+ "last month" : "mis diwethaf",
+ "_%n month ago_::_%n months ago_" : ["","","",""],
+ "last year" : "y llynedd",
+ "_%n year ago_::_%n years ago_" : ["","","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","","",""],
+ "seconds ago" : "eiliad yn ôl",
"web services under your control" : "gwasanaethau gwe a reolir gennych",
"Application is not enabled" : "Nid yw'r pecyn wedi'i alluogi",
"Authentication error" : "Gwall dilysu",
@@ -20,16 +30,6 @@
"PostgreSQL username and/or password not valid" : "Enw a/neu gyfrinair PostgreSQL annilys",
"Set an admin username." : "Creu enw defnyddiwr i'r gweinyddwr.",
"Set an admin password." : "Gosod cyfrinair y gweinyddwr.",
- "Could not find category \"%s\"" : "Methu canfod categori \"%s\"",
- "seconds ago" : "eiliad yn ôl",
- "_%n minute ago_::_%n minutes ago_" : ["","","",""],
- "_%n hour ago_::_%n hours ago_" : ["","","",""],
- "today" : "heddiw",
- "yesterday" : "ddoe",
- "_%n day go_::_%n days ago_" : ["","","",""],
- "last month" : "mis diwethaf",
- "_%n month ago_::_%n months ago_" : ["","","",""],
- "last year" : "y llynedd",
- "years ago" : "blwyddyn yn ôl"
+ "Could not find category \"%s\"" : "Methu canfod categori \"%s\""
},"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"
} \ No newline at end of file
diff --git a/lib/l10n/da.js b/lib/l10n/da.js
index 6c49ba9b038..56ac9a4f14f 100644
--- a/lib/l10n/da.js
+++ b/lib/l10n/da.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan som regel rettes ved at %sgive webserveren skriveadgang til config-mappen%s.",
"Sample configuration detected" : "Eksempel for konfiguration registreret",
"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" : "Der er registreret at eksempel for konfiguration er blevet kopieret. Dette kan ødelægge din installation og understøttes ikke. Læs venligst dokumentationen før der foretages ændringer i config.php",
+ "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
+ "PHP with a version lower than %s is required." : "Der kræves PHP %s eller ældre.",
+ "Following databases are supported: %s" : "Følgende databaser understøttes: %s",
+ "The command line tool %s could not be found" : "Kommandolinjeværktøjet %s blev ikke fundet",
+ "The library %s is not available." : "Biblioteket %s er ikke tilgængeligt.",
+ "Library %s with a version higher than %s is required - available version %s." : "Der kræves en version af biblioteket %s, der er højere end %s - tilgængelig version er %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Der kræves en version af biblioteket %s, der er lavere end %s - tilgængelig version er %s.",
+ "Following platforms are supported: %s" : "Følgende platforme understøttes: %s",
+ "ownCloud %s or higher is required." : "Der kræves ownCloud %s eller højere.",
+ "ownCloud with a version lower than %s is required." : "Der kræves ownCloud i en version som er lavere end %s.",
"Help" : "Hjælp",
"Personal" : "Personligt",
"Settings" : "Indstillinger",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Admin",
"Recommended" : "Anbefalet",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App'en \\\"%s\\\" kan ikke installeres, da den ikke er kompatible med denne version af ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \\\"%s\\\" kan ikke installeres, da følgende afhængigheder ikke er opfyldt: %s",
"No app name specified" : "Intet app-navn angivet",
"Unknown filetype" : "Ukendt filtype",
"Invalid image" : "Ugyldigt billede",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag siden","%n dage siden"],
+ "last month" : "sidste måned",
+ "_%n month ago_::_%n months ago_" : ["%n måned siden","%n måneder siden"],
+ "last year" : "sidste år",
+ "_%n year ago_::_%n years ago_" : ["%n år siden","%n år siden"],
+ "_%n hour ago_::_%n hours ago_" : ["%n time siden","%n timer siden"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minut siden","%n minutter siden"],
+ "seconds ago" : "sekunder siden",
+ "Database Error" : "Databasefejl",
+ "Please contact your system administrator." : "Kontakt venligst din systemadministrator.",
"web services under your control" : "Webtjenester under din kontrol",
"App directory already exists" : "App-mappe findes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke oprette app-mappe. Ret tilladelser. %s",
@@ -28,7 +51,7 @@ OC.L10N.register(
"App does not provide an info.xml file" : "Der følger ingen info.xml-fil med appen",
"App can't be installed because of not allowed code in the App" : "Appen kan ikke installeres, da den indeholder ikke-tilladt kode",
"App can't be installed because it is not compatible with this version of ownCloud" : "Appen kan ikke installeres, da den ikke er kompatibel med denne version af ownCloud.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder taget\n<shipped>\n\ntrue\n</shipped>\n\nhvilket ikke er tilladt for ikke-medfølgende apps",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder mærket <shipped>true</shipped>, hvilket ikke er tilladt for ikke-medfølgende apps",
"App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres, da versionen i info.xml/version ikke er den samme som versionen rapporteret fra app-storen",
"Application is not enabled" : "Programmet er ikke aktiveret",
"Authentication error" : "Adgangsfejl",
@@ -53,7 +76,8 @@ OC.L10N.register(
"Set an admin username." : "Angiv et admin brugernavn.",
"Set an admin password." : "Angiv et admin kodeord.",
"Can't create or write into the data directory %s" : "Kan ikke oprette eller skrive ind i datamappen %s",
- "%s shared »%s« with you" : "%s delte »%s« med sig",
+ "%s shared »%s« with you" : "%s delte »%s« med dig",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling af %s mislykkedes, fordi backenden ikke tillader delinger fra typen %i",
"Sharing %s failed, because the file does not exist" : "Deling af %s mislykkedes, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke tilladelse til at dele %s",
"Sharing %s failed, because the user %s is the item owner" : "Der skete en fejl ved deling af %s, brugeren %s er ejer af objektet",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Der skete en fejl ved deling af %s, fordi %s ikke er medlem af gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du skal angive et kodeord for at oprette et offentligt link - kun beskyttede links er tilladt",
"Sharing %s failed, because sharing with links is not allowed" : "Der skete en fejl ved deling af %s, det er ikke tilladt at dele links",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling af %s mislykkedes - kunne ikke finde %s. Måske er serveren ikke tilgængelig i øjeblikket.",
"Share type %s is not valid for %s" : "Delingstypen %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Angivelse af tilladelser for %s mislykkedes, fordi tilladelserne overskred de som var tildelt %s",
"Setting permissions for %s failed, because the item was not found" : "Angivelse af tilladelser for %s mislykkedes, fordi artiklen ikke blev fundet",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling af %s mislykkedes, fordi back-enden ikke kunne finde kilden til %s",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling af %s mislykkedes, fordi filen ikke kunne findes i fil-cachen",
"Could not find category \"%s\"" : "Kunne ikke finde kategorien \"%s\"",
- "seconds ago" : "sekunder siden",
- "_%n minute ago_::_%n minutes ago_" : ["%n minut siden","%n minutter siden"],
- "_%n hour ago_::_%n hours ago_" : ["%n time siden","%n timer siden"],
- "today" : "i dag",
- "yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["%n dag siden","%n dage siden"],
- "last month" : "sidste måned",
- "_%n month ago_::_%n months ago_" : ["%n måned siden","%n måneder siden"],
- "last year" : "sidste år",
- "years ago" : "år siden",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Det er kun tilladt at benytte følgene karakterer i et brugernavn \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Et gyldigt brugernavn skal angives",
"A valid password must be provided" : "En gyldig adgangskode skal angives",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Installér venligst én af disse lokaliteter på dit system, og genstart din webserver.",
"Please ask your server administrator to install the module." : "Du bedes anmode din serveradministrator om at installere modulet.",
"PHP module %s not installed." : "PHP-modulet %s er ikke installeret.",
- "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bed venligst din serveradministrator om at opdatere PHP til seneste version. Din PHP-version understøttes ikke længere af ownCload og PHP-fællesskabet.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er slået til. ownCload kræver at denne er slået fra, for at fungere ordentligt.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er udgået og stort set en ubrugelig indstilling, der bør slås fra. Spørg venligst din serveradministrator om at slå den fra i php.ini eller din webeserver-konfiguration.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes er slået til. ownCloud kræver at denne er slået fra, for at fungere ordentligt.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes er udgået og stort set en ubrugelig indstilling, der bør slås fra. Spørg venligst din serveradministrator om at slå den fra i php.ini eller din webeserver-konfiguration.",
"PHP modules have been installed, but they are still listed as missing?" : "Der er installeret PHP-moduler, men de fremgår stadig som fraværende?",
"Please ask your server administrator to restart the web server." : "Du bedes anmode din serveradministrator om at genstarte webserveren.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kræves",
diff --git a/lib/l10n/da.json b/lib/l10n/da.json
index fe2858f182d..e49698c30d8 100644
--- a/lib/l10n/da.json
+++ b/lib/l10n/da.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan som regel rettes ved at %sgive webserveren skriveadgang til config-mappen%s.",
"Sample configuration detected" : "Eksempel for konfiguration registreret",
"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" : "Der er registreret at eksempel for konfiguration er blevet kopieret. Dette kan ødelægge din installation og understøttes ikke. Læs venligst dokumentationen før der foretages ændringer i config.php",
+ "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
+ "PHP with a version lower than %s is required." : "Der kræves PHP %s eller ældre.",
+ "Following databases are supported: %s" : "Følgende databaser understøttes: %s",
+ "The command line tool %s could not be found" : "Kommandolinjeværktøjet %s blev ikke fundet",
+ "The library %s is not available." : "Biblioteket %s er ikke tilgængeligt.",
+ "Library %s with a version higher than %s is required - available version %s." : "Der kræves en version af biblioteket %s, der er højere end %s - tilgængelig version er %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Der kræves en version af biblioteket %s, der er lavere end %s - tilgængelig version er %s.",
+ "Following platforms are supported: %s" : "Følgende platforme understøttes: %s",
+ "ownCloud %s or higher is required." : "Der kræves ownCloud %s eller højere.",
+ "ownCloud with a version lower than %s is required." : "Der kræves ownCloud i en version som er lavere end %s.",
"Help" : "Hjælp",
"Personal" : "Personligt",
"Settings" : "Indstillinger",
@@ -12,9 +22,22 @@
"Admin" : "Admin",
"Recommended" : "Anbefalet",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App'en \\\"%s\\\" kan ikke installeres, da den ikke er kompatible med denne version af ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \\\"%s\\\" kan ikke installeres, da følgende afhængigheder ikke er opfyldt: %s",
"No app name specified" : "Intet app-navn angivet",
"Unknown filetype" : "Ukendt filtype",
"Invalid image" : "Ugyldigt billede",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag siden","%n dage siden"],
+ "last month" : "sidste måned",
+ "_%n month ago_::_%n months ago_" : ["%n måned siden","%n måneder siden"],
+ "last year" : "sidste år",
+ "_%n year ago_::_%n years ago_" : ["%n år siden","%n år siden"],
+ "_%n hour ago_::_%n hours ago_" : ["%n time siden","%n timer siden"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minut siden","%n minutter siden"],
+ "seconds ago" : "sekunder siden",
+ "Database Error" : "Databasefejl",
+ "Please contact your system administrator." : "Kontakt venligst din systemadministrator.",
"web services under your control" : "Webtjenester under din kontrol",
"App directory already exists" : "App-mappe findes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke oprette app-mappe. Ret tilladelser. %s",
@@ -26,7 +49,7 @@
"App does not provide an info.xml file" : "Der følger ingen info.xml-fil med appen",
"App can't be installed because of not allowed code in the App" : "Appen kan ikke installeres, da den indeholder ikke-tilladt kode",
"App can't be installed because it is not compatible with this version of ownCloud" : "Appen kan ikke installeres, da den ikke er kompatibel med denne version af ownCloud.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder taget\n<shipped>\n\ntrue\n</shipped>\n\nhvilket ikke er tilladt for ikke-medfølgende apps",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder mærket <shipped>true</shipped>, hvilket ikke er tilladt for ikke-medfølgende apps",
"App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres, da versionen i info.xml/version ikke er den samme som versionen rapporteret fra app-storen",
"Application is not enabled" : "Programmet er ikke aktiveret",
"Authentication error" : "Adgangsfejl",
@@ -51,7 +74,8 @@
"Set an admin username." : "Angiv et admin brugernavn.",
"Set an admin password." : "Angiv et admin kodeord.",
"Can't create or write into the data directory %s" : "Kan ikke oprette eller skrive ind i datamappen %s",
- "%s shared »%s« with you" : "%s delte »%s« med sig",
+ "%s shared »%s« with you" : "%s delte »%s« med dig",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling af %s mislykkedes, fordi backenden ikke tillader delinger fra typen %i",
"Sharing %s failed, because the file does not exist" : "Deling af %s mislykkedes, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke tilladelse til at dele %s",
"Sharing %s failed, because the user %s is the item owner" : "Der skete en fejl ved deling af %s, brugeren %s er ejer af objektet",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Der skete en fejl ved deling af %s, fordi %s ikke er medlem af gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du skal angive et kodeord for at oprette et offentligt link - kun beskyttede links er tilladt",
"Sharing %s failed, because sharing with links is not allowed" : "Der skete en fejl ved deling af %s, det er ikke tilladt at dele links",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling af %s mislykkedes - kunne ikke finde %s. Måske er serveren ikke tilgængelig i øjeblikket.",
"Share type %s is not valid for %s" : "Delingstypen %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Angivelse af tilladelser for %s mislykkedes, fordi tilladelserne overskred de som var tildelt %s",
"Setting permissions for %s failed, because the item was not found" : "Angivelse af tilladelser for %s mislykkedes, fordi artiklen ikke blev fundet",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling af %s mislykkedes, fordi back-enden ikke kunne finde kilden til %s",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling af %s mislykkedes, fordi filen ikke kunne findes i fil-cachen",
"Could not find category \"%s\"" : "Kunne ikke finde kategorien \"%s\"",
- "seconds ago" : "sekunder siden",
- "_%n minute ago_::_%n minutes ago_" : ["%n minut siden","%n minutter siden"],
- "_%n hour ago_::_%n hours ago_" : ["%n time siden","%n timer siden"],
- "today" : "i dag",
- "yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["%n dag siden","%n dage siden"],
- "last month" : "sidste måned",
- "_%n month ago_::_%n months ago_" : ["%n måned siden","%n måneder siden"],
- "last year" : "sidste år",
- "years ago" : "år siden",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Det er kun tilladt at benytte følgene karakterer i et brugernavn \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Et gyldigt brugernavn skal angives",
"A valid password must be provided" : "En gyldig adgangskode skal angives",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Installér venligst én af disse lokaliteter på dit system, og genstart din webserver.",
"Please ask your server administrator to install the module." : "Du bedes anmode din serveradministrator om at installere modulet.",
"PHP module %s not installed." : "PHP-modulet %s er ikke installeret.",
- "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bed venligst din serveradministrator om at opdatere PHP til seneste version. Din PHP-version understøttes ikke længere af ownCload og PHP-fællesskabet.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er slået til. ownCload kræver at denne er slået fra, for at fungere ordentligt.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er udgået og stort set en ubrugelig indstilling, der bør slås fra. Spørg venligst din serveradministrator om at slå den fra i php.ini eller din webeserver-konfiguration.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes er slået til. ownCloud kræver at denne er slået fra, for at fungere ordentligt.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes er udgået og stort set en ubrugelig indstilling, der bør slås fra. Spørg venligst din serveradministrator om at slå den fra i php.ini eller din webeserver-konfiguration.",
"PHP modules have been installed, but they are still listed as missing?" : "Der er installeret PHP-moduler, men de fremgår stadig som fraværende?",
"Please ask your server administrator to restart the web server." : "Du bedes anmode din serveradministrator om at genstarte webserveren.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kræves",
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index e512c9d1d4c..27715389389 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -1,12 +1,22 @@
OC.L10N.register(
"lib",
{
- "Cannot write into \"config\" directory!" : "Das Schreiben in das \"config\"-Verzeichnis nicht möglich!",
+ "Cannot write into \"config\" directory!" : "Das Schreiben in das \"config\"-Verzeichnis ist nicht möglich!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Dies kann normalerweise repariert werden, indem dem Webserver Schreibzugriff auf das config-Verzeichnis gegeben wird",
"See %s" : "Siehe %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
- "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" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lese die Dokumentation vor der Änderung an der config.php.",
+ "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" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde. Dies wird nicht unterstützt und kann zum Abruch Ihrer Installation führen. Bitte lies die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
+ "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.",
+ "Following databases are supported: %s" : "Die folgenden Datenbanken werden unterstützt: %s",
+ "The command line tool %s could not be found" : "Das Kommandozeilenwerkzeug %s konnte nicht gefunden werden",
+ "The library %s is not available." : "Die Bibliothek %s ist nicht verfügbar.",
+ "Library %s with a version higher than %s is required - available version %s." : "Die Bibliothek %s wird in einer neueren Version als %s benötigt - verfügbare Version ist %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Die Bibliothek %s wird in einer früheren Version als %s benötigt - verfügbare Version ist %s.",
+ "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s oder höher wird benötigt.",
+ "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Administration",
"Recommended" : "Empfohlen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Applikation \\\"%s\\\" kann nicht installiert werden, da sie mit dieser ownCloud Version nicht kompatibel ist.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s",
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "today" : "Heute",
+ "yesterday" : "Gestern",
+ "_%n day ago_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
+ "last month" : "Letzten Monat",
+ "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
+ "last year" : "Letztes Jahr",
+ "_%n year ago_::_%n years ago_" : ["Vor %n Jahr","Vor %n Jahren"],
+ "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
+ "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
+ "seconds ago" : "Gerade eben",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.",
"web services under your control" : "Web-Services unter Deiner Kontrolle",
"App directory already exists" : "Das Applikationsverzeichnis existiert bereits",
"Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Setze Administrator Passwort",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden",
"%s shared »%s« with you" : "%s teilte »%s« mit Dir",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.",
"Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert",
"You are not allowed to share %s" : "Die Freigabe von %s ist Dir nicht erlaubt",
"Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s Besitzer des Objektes ist",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Freigabe von %s fehlgeschlagen, da %s kein Mitglied der Gruppe %s ist",
"You need to provide a password to create a public link, only protected links are allowed" : "Es sind nur geschützte Links zulässig, daher müssen Sie ein Passwort angeben, um einen öffentlichen Link zu generieren",
"Sharing %s failed, because sharing with links is not allowed" : "Freigabe von %s fehlgeschlagen, da das Teilen von Verknüpfungen nicht erlaubt ist",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Freigabe von %s fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.",
"Share type %s is not valid for %s" : "Freigabetyp %s ist nicht gültig für %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da die Berechtigungen, die erteilten Berechtigungen %s überschreiten",
"Setting permissions for %s failed, because the item was not found" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da das Objekt nicht gefunden wurde",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte",
"Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte",
"Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.",
- "seconds ago" : "Gerade eben",
- "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
- "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
- "today" : "Heute",
- "yesterday" : "Gestern",
- "_%n day go_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
- "last month" : "Letzten Monat",
- "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
- "last year" : "Letztes Jahr",
- "years ago" : "Vor Jahren",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: \"a-z\", \"A-Z\", \"0-9\" und \"_.@-\"",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Bitte installiere eine dieser Sprachen auf Deinem System und starte den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte frage, für die Installation des Moduls, Deinen Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte frage zur Aktualisierung von PHP auf die letzte Version Deinen Server-Administrator. Deine PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte frage Deinen Server-Administrator zur Deaktivierung in der php.ini oder Deiner Webserver-Konfiguration.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte frage Deinen Server-Administrator zur Deaktivierung in der php.ini oder Deiner Webserver-Konfiguration.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-Module wurden installiert, werden aber als noch fehlend gelistet?",
"Please ask your server administrator to restart the web server." : "Bitte frage Deinen Server-Administrator zum Neustart des Webservers.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index 27dd6781ae7..9410d0cb783 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -1,10 +1,20 @@
{ "translations": {
- "Cannot write into \"config\" directory!" : "Das Schreiben in das \"config\"-Verzeichnis nicht möglich!",
+ "Cannot write into \"config\" directory!" : "Das Schreiben in das \"config\"-Verzeichnis ist nicht möglich!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Dies kann normalerweise repariert werden, indem dem Webserver Schreibzugriff auf das config-Verzeichnis gegeben wird",
"See %s" : "Siehe %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
- "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" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lese die Dokumentation vor der Änderung an der config.php.",
+ "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" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde. Dies wird nicht unterstützt und kann zum Abruch Ihrer Installation führen. Bitte lies die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
+ "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.",
+ "Following databases are supported: %s" : "Die folgenden Datenbanken werden unterstützt: %s",
+ "The command line tool %s could not be found" : "Das Kommandozeilenwerkzeug %s konnte nicht gefunden werden",
+ "The library %s is not available." : "Die Bibliothek %s ist nicht verfügbar.",
+ "Library %s with a version higher than %s is required - available version %s." : "Die Bibliothek %s wird in einer neueren Version als %s benötigt - verfügbare Version ist %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Die Bibliothek %s wird in einer früheren Version als %s benötigt - verfügbare Version ist %s.",
+ "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s oder höher wird benötigt.",
+ "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -12,9 +22,22 @@
"Admin" : "Administration",
"Recommended" : "Empfohlen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Applikation \\\"%s\\\" kann nicht installiert werden, da sie mit dieser ownCloud Version nicht kompatibel ist.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s",
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "today" : "Heute",
+ "yesterday" : "Gestern",
+ "_%n day ago_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
+ "last month" : "Letzten Monat",
+ "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
+ "last year" : "Letztes Jahr",
+ "_%n year ago_::_%n years ago_" : ["Vor %n Jahr","Vor %n Jahren"],
+ "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
+ "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
+ "seconds ago" : "Gerade eben",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.",
"web services under your control" : "Web-Services unter Deiner Kontrolle",
"App directory already exists" : "Das Applikationsverzeichnis existiert bereits",
"Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Setze Administrator Passwort",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden",
"%s shared »%s« with you" : "%s teilte »%s« mit Dir",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.",
"Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert",
"You are not allowed to share %s" : "Die Freigabe von %s ist Dir nicht erlaubt",
"Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s Besitzer des Objektes ist",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Freigabe von %s fehlgeschlagen, da %s kein Mitglied der Gruppe %s ist",
"You need to provide a password to create a public link, only protected links are allowed" : "Es sind nur geschützte Links zulässig, daher müssen Sie ein Passwort angeben, um einen öffentlichen Link zu generieren",
"Sharing %s failed, because sharing with links is not allowed" : "Freigabe von %s fehlgeschlagen, da das Teilen von Verknüpfungen nicht erlaubt ist",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Freigabe von %s fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.",
"Share type %s is not valid for %s" : "Freigabetyp %s ist nicht gültig für %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da die Berechtigungen, die erteilten Berechtigungen %s überschreiten",
"Setting permissions for %s failed, because the item was not found" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da das Objekt nicht gefunden wurde",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte",
"Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte",
"Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.",
- "seconds ago" : "Gerade eben",
- "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
- "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
- "today" : "Heute",
- "yesterday" : "Gestern",
- "_%n day go_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
- "last month" : "Letzten Monat",
- "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
- "last year" : "Letztes Jahr",
- "years ago" : "Vor Jahren",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: \"a-z\", \"A-Z\", \"0-9\" und \"_.@-\"",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Bitte installiere eine dieser Sprachen auf Deinem System und starte den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte frage, für die Installation des Moduls, Deinen Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte frage zur Aktualisierung von PHP auf die letzte Version Deinen Server-Administrator. Deine PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte frage Deinen Server-Administrator zur Deaktivierung in der php.ini oder Deiner Webserver-Konfiguration.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte frage Deinen Server-Administrator zur Deaktivierung in der php.ini oder Deiner Webserver-Konfiguration.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-Module wurden installiert, werden aber als noch fehlend gelistet?",
"Please ask your server administrator to restart the web server." : "Bitte frage Deinen Server-Administrator zum Neustart des Webservers.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
diff --git a/lib/l10n/de_AT.js b/lib/l10n/de_AT.js
index c36f0b9371d..3c567ba4d2d 100644
--- a/lib/l10n/de_AT.js
+++ b/lib/l10n/de_AT.js
@@ -4,9 +4,10 @@ OC.L10N.register(
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/de_AT.json b/lib/l10n/de_AT.json
index da5c7feaad2..6e81c34cf1a 100644
--- a/lib/l10n/de_AT.json
+++ b/lib/l10n/de_AT.json
@@ -2,9 +2,10 @@
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 48f236f3e04..d40ddc91236 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
"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" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lesen Sie die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
+ "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.",
+ "Following databases are supported: %s" : "Die folgenden Datenbanken werden unterstützt: %s",
+ "The command line tool %s could not be found" : "Das Kommandozeilenwerkzeug %s konnte nicht gefunden werden",
+ "The library %s is not available." : "Die Bibliothek %s ist nicht verfügbar.",
+ "Library %s with a version higher than %s is required - available version %s." : "Die Bibliothek %s wird in einer neueren Version als %s benötigt - vorhanden ist Version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Die Bibliothek %s wird in einer früheren Version als %s benötigt - vorhanden ist Version %s.",
+ "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s oder höher wird benötigt.",
+ "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Administrator",
"Recommended" : "Empfohlen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App »%s« kann nicht installiert werden, da sie mit dieser ownCloud-Version nicht kompatibel ist.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s",
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "today" : "Heute",
+ "yesterday" : "Gestern",
+ "_%n day ago_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
+ "last month" : "Letzten Monat",
+ "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
+ "last year" : "Letztes Jahr",
+ "_%n year ago_::_%n years ago_" : ["Vor %n Jahr","Vor %n Jahren"],
+ "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
+ "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
+ "seconds ago" : "Gerade eben",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.",
"web services under your control" : "Web-Services unter Ihrer Kontrolle",
"App directory already exists" : "Der Ordner für die Anwendung ist bereits vorhanden.",
"Can't create app folder. Please fix permissions. %s" : "Der Ordner für die Anwendung konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Setze Administrator Passwort",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden",
"%s shared »%s« with you" : "%s hat »%s« mit Ihnen geteilt",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.",
"Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert",
"You are not allowed to share %s" : "Die Freigabe von %s ist Ihnen nicht erlaubt",
"Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s Besitzer des Objektes ist",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Freigabe von %s fehlgeschlagen, da %s kein Mitglied der Gruppe %s ist",
"You need to provide a password to create a public link, only protected links are allowed" : "Es sind nur geschützte Links zulässig, daher müssen Sie ein Passwort angeben, um einen öffentlichen Link zu generieren",
"Sharing %s failed, because sharing with links is not allowed" : "Freigabe von %s fehlgeschlagen, da das Teilen von Verknüpfungen nicht erlaubt ist",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Freigabe von %s fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.",
"Share type %s is not valid for %s" : "Freigabetyp %s ist nicht gültig für %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da die Berechtigungen, die erteilten Berechtigungen %s überschreiten",
"Setting permissions for %s failed, because the item was not found" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da das Objekt nicht gefunden wurde",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte",
"Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte",
"Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.",
- "seconds ago" : "Gerade eben",
- "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
- "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
- "today" : "Heute",
- "yesterday" : "Gestern",
- "_%n day go_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
- "last month" : "Letzten Monat",
- "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
- "last year" : "Letztes Jahr",
- "years ago" : "Vor Jahren",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: »a-z«, »A-Z«, »0-9« und »_.@-«",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte fragen Sie, für die Installation des Moduls, Ihren Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte fragen Sie zur Aktualisierung von PHP auf die letzte Version Ihren Server-Administrator. Ihre PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte fragen Sie Ihren Server-Administrator zur Deaktivierung in der php.ini oder Ihrer Webserver-Konfiguration.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte fragen Sie Ihren Server-Administrator zur Deaktivierung in der php.ini oder Ihrer Webserver-Konfiguration.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-Module wurden installiert, werden aber als noch fehlend gelistet?",
"Please ask your server administrator to restart the web server." : "Bitte fragen Sie Ihren Server-Administrator zum Neustart des Webservers.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index e67d2ccc57c..857ec81175f 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
"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" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lesen Sie die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
+ "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.",
+ "Following databases are supported: %s" : "Die folgenden Datenbanken werden unterstützt: %s",
+ "The command line tool %s could not be found" : "Das Kommandozeilenwerkzeug %s konnte nicht gefunden werden",
+ "The library %s is not available." : "Die Bibliothek %s ist nicht verfügbar.",
+ "Library %s with a version higher than %s is required - available version %s." : "Die Bibliothek %s wird in einer neueren Version als %s benötigt - vorhanden ist Version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Die Bibliothek %s wird in einer früheren Version als %s benötigt - vorhanden ist Version %s.",
+ "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s oder höher wird benötigt.",
+ "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -12,9 +22,22 @@
"Admin" : "Administrator",
"Recommended" : "Empfohlen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App »%s« kann nicht installiert werden, da sie mit dieser ownCloud-Version nicht kompatibel ist.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s",
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "today" : "Heute",
+ "yesterday" : "Gestern",
+ "_%n day ago_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
+ "last month" : "Letzten Monat",
+ "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
+ "last year" : "Letztes Jahr",
+ "_%n year ago_::_%n years ago_" : ["Vor %n Jahr","Vor %n Jahren"],
+ "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
+ "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
+ "seconds ago" : "Gerade eben",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.",
"web services under your control" : "Web-Services unter Ihrer Kontrolle",
"App directory already exists" : "Der Ordner für die Anwendung ist bereits vorhanden.",
"Can't create app folder. Please fix permissions. %s" : "Der Ordner für die Anwendung konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Setze Administrator Passwort",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden",
"%s shared »%s« with you" : "%s hat »%s« mit Ihnen geteilt",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.",
"Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert",
"You are not allowed to share %s" : "Die Freigabe von %s ist Ihnen nicht erlaubt",
"Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s Besitzer des Objektes ist",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Freigabe von %s fehlgeschlagen, da %s kein Mitglied der Gruppe %s ist",
"You need to provide a password to create a public link, only protected links are allowed" : "Es sind nur geschützte Links zulässig, daher müssen Sie ein Passwort angeben, um einen öffentlichen Link zu generieren",
"Sharing %s failed, because sharing with links is not allowed" : "Freigabe von %s fehlgeschlagen, da das Teilen von Verknüpfungen nicht erlaubt ist",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Freigabe von %s fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.",
"Share type %s is not valid for %s" : "Freigabetyp %s ist nicht gültig für %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da die Berechtigungen, die erteilten Berechtigungen %s überschreiten",
"Setting permissions for %s failed, because the item was not found" : "Das Setzen der Berechtigungen für %s ist fehlgeschlagen, da das Objekt nicht gefunden wurde",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte",
"Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte",
"Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.",
- "seconds ago" : "Gerade eben",
- "_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
- "_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
- "today" : "Heute",
- "yesterday" : "Gestern",
- "_%n day go_::_%n days ago_" : ["Vor %n Tag","Vor %n Tagen"],
- "last month" : "Letzten Monat",
- "_%n month ago_::_%n months ago_" : ["Vor %n Monat","Vor %n Monaten"],
- "last year" : "Letztes Jahr",
- "years ago" : "Vor Jahren",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: »a-z«, »A-Z«, »0-9« und »_.@-«",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte fragen Sie, für die Installation des Moduls, Ihren Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte fragen Sie zur Aktualisierung von PHP auf die letzte Version Ihren Server-Administrator. Ihre PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte fragen Sie Ihren Server-Administrator zur Deaktivierung in der php.ini oder Ihrer Webserver-Konfiguration.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte fragen Sie Ihren Server-Administrator zur Deaktivierung in der php.ini oder Ihrer Webserver-Konfiguration.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-Module wurden installiert, werden aber als noch fehlend gelistet?",
"Please ask your server administrator to restart the web server." : "Bitte fragen Sie Ihren Server-Administrator zum Neustart des Webservers.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
index 5d0048837fb..be184d26a12 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"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",
+ "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Help" : "Βοήθεια",
"Personal" : "Προσωπικά",
"Settings" : "Ρυθμίσεις",
@@ -17,6 +18,18 @@ OC.L10N.register(
"No app name specified" : "Δεν προδιορίστηκε όνομα εφαρμογής",
"Unknown filetype" : "Άγνωστος τύπος αρχείου",
"Invalid image" : "Μη έγκυρη εικόνα",
+ "today" : "σήμερα",
+ "yesterday" : "χτες",
+ "_%n day ago_::_%n days ago_" : ["%n ημέρα πριν","%n ημέρες πριν"],
+ "last month" : "τελευταίο μήνα",
+ "_%n month ago_::_%n months ago_" : ["","%n μήνες πριν"],
+ "last year" : "τελευταίο χρόνο",
+ "_%n year ago_::_%n years ago_" : ["%n χρόνο πριν","%n χρόνια πριν"],
+ "_%n hour ago_::_%n hours ago_" : ["","%n ώρες πριν"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n λεπτά πριν"],
+ "seconds ago" : "δευτερόλεπτα πριν",
+ "Database Error" : "Σφάλμα βάσης δεδομένων",
+ "Please contact your system administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή συστήματος.",
"web services under your control" : "υπηρεσίες δικτύου υπό τον έλεγχό σας",
"App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη",
"Can't create app folder. Please fix permissions. %s" : "Δεν είναι δυνατόν να δημιουργηθεί ο φάκελος εφαρμογής. Παρακαλώ διορθώστε τις άδειες πρόσβασης. %s",
@@ -78,16 +91,6 @@ OC.L10N.register(
"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\"",
- "seconds ago" : "δευτερόλεπτα πριν",
- "_%n minute ago_::_%n minutes ago_" : ["","%n λεπτά πριν"],
- "_%n hour ago_::_%n hours ago_" : ["","%n ώρες πριν"],
- "today" : "σήμερα",
- "yesterday" : "χτες",
- "_%n day go_::_%n days ago_" : ["","%n ημέρες πριν"],
- "last month" : "τελευταίο μήνα",
- "_%n month ago_::_%n months ago_" : ["","%n μήνες πριν"],
- "last year" : "τελευταίο χρόνο",
- "years ago" : "χρόνια πριν",
"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" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
@@ -103,12 +106,7 @@ OC.L10N.register(
"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 %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να ενημερώσει τον PHP στη νεώτερη έκδοση. Η έκδοση του PHP σας δεν υποστηρίζεται πλεον από το ownCloud και την κοινότητα PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Η Ασφαλής Λειτουργία PHP έχει ενεργοποιηθεί. Το ownCloud απαιτεί να είναι απενεργοποιημένη για να λειτουργεί σωστά.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Η Ασφαλής Λειτουργεία PHP είναι μια ξεπερασμένη και κατά κύριο λόγο άχρηστη ρύθμιση που θα πρέπει να είναι απενεργοποιημένη. Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να την απενεργοποιήσει στο php.ini ή στις ρυθμίσεις του διακομιστή δικτύου σας.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Οι Magic Quotes είναι ενεργοποιημένες. Το ownCloud απαιτεί να είναι απενεργοποιημένες για να λειτουργεί σωστά.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Οι Magic Quotes είναι μια ξεπερασμένη και κατά κύριο λόγο άχρηστη ρύθμιση που θα πρέπει να είναι απενεργοποιημένη. Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να την απενεργοποιήσει στο php.ini ή στις ρυθμίσεις του διακομιστή δικτύου σας.",
"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",
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index 65ff3ab3aa1..d2dd35998eb 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -5,6 +5,7 @@
"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",
+ "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Help" : "Βοήθεια",
"Personal" : "Προσωπικά",
"Settings" : "Ρυθμίσεις",
@@ -15,6 +16,18 @@
"No app name specified" : "Δεν προδιορίστηκε όνομα εφαρμογής",
"Unknown filetype" : "Άγνωστος τύπος αρχείου",
"Invalid image" : "Μη έγκυρη εικόνα",
+ "today" : "σήμερα",
+ "yesterday" : "χτες",
+ "_%n day ago_::_%n days ago_" : ["%n ημέρα πριν","%n ημέρες πριν"],
+ "last month" : "τελευταίο μήνα",
+ "_%n month ago_::_%n months ago_" : ["","%n μήνες πριν"],
+ "last year" : "τελευταίο χρόνο",
+ "_%n year ago_::_%n years ago_" : ["%n χρόνο πριν","%n χρόνια πριν"],
+ "_%n hour ago_::_%n hours ago_" : ["","%n ώρες πριν"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n λεπτά πριν"],
+ "seconds ago" : "δευτερόλεπτα πριν",
+ "Database Error" : "Σφάλμα βάσης δεδομένων",
+ "Please contact your system administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή συστήματος.",
"web services under your control" : "υπηρεσίες δικτύου υπό τον έλεγχό σας",
"App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη",
"Can't create app folder. Please fix permissions. %s" : "Δεν είναι δυνατόν να δημιουργηθεί ο φάκελος εφαρμογής. Παρακαλώ διορθώστε τις άδειες πρόσβασης. %s",
@@ -76,16 +89,6 @@
"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\"",
- "seconds ago" : "δευτερόλεπτα πριν",
- "_%n minute ago_::_%n minutes ago_" : ["","%n λεπτά πριν"],
- "_%n hour ago_::_%n hours ago_" : ["","%n ώρες πριν"],
- "today" : "σήμερα",
- "yesterday" : "χτες",
- "_%n day go_::_%n days ago_" : ["","%n ημέρες πριν"],
- "last month" : "τελευταίο μήνα",
- "_%n month ago_::_%n months ago_" : ["","%n μήνες πριν"],
- "last year" : "τελευταίο χρόνο",
- "years ago" : "χρόνια πριν",
"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" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
@@ -101,12 +104,7 @@
"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 %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να ενημερώσει τον PHP στη νεώτερη έκδοση. Η έκδοση του PHP σας δεν υποστηρίζεται πλεον από το ownCloud και την κοινότητα PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Η Ασφαλής Λειτουργία PHP έχει ενεργοποιηθεί. Το ownCloud απαιτεί να είναι απενεργοποιημένη για να λειτουργεί σωστά.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Η Ασφαλής Λειτουργεία PHP είναι μια ξεπερασμένη και κατά κύριο λόγο άχρηστη ρύθμιση που θα πρέπει να είναι απενεργοποιημένη. Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να την απενεργοποιήσει στο php.ini ή στις ρυθμίσεις του διακομιστή δικτύου σας.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Οι Magic Quotes είναι ενεργοποιημένες. Το ownCloud απαιτεί να είναι απενεργοποιημένες για να λειτουργεί σωστά.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Οι Magic Quotes είναι μια ξεπερασμένη και κατά κύριο λόγο άχρηστη ρύθμιση που θα πρέπει να είναι απενεργοποιημένη. Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να την απενεργοποιήσει στο php.ini ή στις ρυθμίσεις του διακομιστή δικτύου σας.",
"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",
diff --git a/lib/l10n/en@pirate.js b/lib/l10n/en@pirate.js
index ad57745199e..f1dac5a791a 100644
--- a/lib/l10n/en@pirate.js
+++ b/lib/l10n/en@pirate.js
@@ -1,10 +1,11 @@
OC.L10N.register(
"lib",
{
- "web services under your control" : "web services under your control",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "web services under your control" : "web services under your control"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/en@pirate.json b/lib/l10n/en@pirate.json
index c2cd03ea8f3..911734b3804 100644
--- a/lib/l10n/en@pirate.json
+++ b/lib/l10n/en@pirate.json
@@ -1,8 +1,9 @@
{ "translations": {
- "web services under your control" : "web services under your control",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "web services under your control" : "web services under your control"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js
index 43f7edb5258..c38e02fb308 100644
--- a/lib/l10n/en_GB.js
+++ b/lib/l10n/en_GB.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "This can usually be fixed by %sgiving the webserver write access to the config directory%s.",
"Sample configuration detected" : "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" : "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",
+ "PHP %s or higher is required." : "PHP %s or higher is required.",
+ "PHP with a version lower than %s is required." : "PHP with a version lower than %s is required.",
+ "Following databases are supported: %s" : "Following databases are supported: %s",
+ "The command line tool %s could not be found" : "The command line tool %s could not be found",
+ "The library %s is not available." : "The library %s is not available.",
+ "Library %s with a version higher than %s is required - available version %s." : "Library %s with a version higher than %s is required - available version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Library %s with a version lower than %s is required - available version %s.",
+ "Following platforms are supported: %s" : "Following platforms are supported: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s or higher is required.",
+ "ownCloud with a version lower than %s is required." : "ownCloud with a version lower than %s is required.",
"Help" : "Help",
"Personal" : "Personal",
"Settings" : "Settings",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Admin",
"Recommended" : "Recommended",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s",
"No app name specified" : "No app name specified",
"Unknown filetype" : "Unknown filetype",
"Invalid image" : "Invalid image",
+ "today" : "today",
+ "yesterday" : "yesterday",
+ "_%n day ago_::_%n days ago_" : ["%n day ago","%n days ago"],
+ "last month" : "last month",
+ "_%n month ago_::_%n months ago_" : ["%n month ago","%n months ago"],
+ "last year" : "last year",
+ "_%n year ago_::_%n years ago_" : ["%n year ago","%n years ago"],
+ "_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
+ "seconds ago" : "seconds ago",
+ "Database Error" : "Database Error",
+ "Please contact your system administrator." : "Please contact your system administrator.",
"web services under your control" : "web services under your control",
"App directory already exists" : "App directory already exists",
"Can't create app folder. Please fix permissions. %s" : "Can't create app folder. Please fix permissions. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Set an admin password.",
"Can't create or write into the data directory %s" : "Can't create or write into the data directory %s",
"%s shared »%s« with you" : "%s shared \"%s\" with you",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Sharing %s failed, because the backend does not allow shares from type %i",
"Sharing %s failed, because the file does not exist" : "Sharing %s failed, because the file does not exist",
"You are not allowed to share %s" : "You are not allowed to share %s",
"Sharing %s failed, because the user %s is the item owner" : "Sharing %s failed, because the user %s is the item owner",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Sharing %s failed, because %s is not a member of the group %s",
"You need to provide a password to create a public link, only protected links are allowed" : "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" : "Sharing %s failed, because sharing with links is not allowed",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sharing %s failed, could not find %s, maybe the server is currently unreachable.",
"Share type %s is not valid for %s" : "Share type %s is not valid for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting permissions for %s failed, because the permissions exceed permissions granted to %s",
"Setting permissions for %s failed, because the item was not found" : "Setting permissions for %s failed, because the item was not found",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Sharing %s failed, because the sharing backend for %s could not find its source",
"Sharing %s failed, because the file could not be found in the file cache" : "Sharing %s failed, because the file could not be found in the file cache",
"Could not find category \"%s\"" : "Could not find category \"%s\"",
- "seconds ago" : "seconds ago",
- "_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
- "_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
- "today" : "today",
- "yesterday" : "yesterday",
- "_%n day go_::_%n days ago_" : ["%n day go","%n days ago"],
- "last month" : "last month",
- "_%n month ago_::_%n months ago_" : ["%n month ago","%n months ago"],
- "last year" : "last year",
- "years ago" : "years ago",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "A valid username must be provided",
"A valid password must be provided" : "A valid password must be provided",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Please install one of these locales on your system and restart your webserver.",
"Please ask your server administrator to install the module." : "Please ask your server administrator to install the module.",
"PHP module %s not installed." : "PHP module %s not installed.",
- "PHP %s or higher is required." : "PHP %s or higher is required.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP modules have been installed, but they are still listed as missing?",
"Please ask your server administrator to restart the web server." : "Please ask your server administrator to restart the web server.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 required",
diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json
index 7e7756cec9c..9a59493491f 100644
--- a/lib/l10n/en_GB.json
+++ b/lib/l10n/en_GB.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "This can usually be fixed by %sgiving the webserver write access to the config directory%s.",
"Sample configuration detected" : "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" : "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",
+ "PHP %s or higher is required." : "PHP %s or higher is required.",
+ "PHP with a version lower than %s is required." : "PHP with a version lower than %s is required.",
+ "Following databases are supported: %s" : "Following databases are supported: %s",
+ "The command line tool %s could not be found" : "The command line tool %s could not be found",
+ "The library %s is not available." : "The library %s is not available.",
+ "Library %s with a version higher than %s is required - available version %s." : "Library %s with a version higher than %s is required - available version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Library %s with a version lower than %s is required - available version %s.",
+ "Following platforms are supported: %s" : "Following platforms are supported: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s or higher is required.",
+ "ownCloud with a version lower than %s is required." : "ownCloud with a version lower than %s is required.",
"Help" : "Help",
"Personal" : "Personal",
"Settings" : "Settings",
@@ -12,9 +22,22 @@
"Admin" : "Admin",
"Recommended" : "Recommended",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s",
"No app name specified" : "No app name specified",
"Unknown filetype" : "Unknown filetype",
"Invalid image" : "Invalid image",
+ "today" : "today",
+ "yesterday" : "yesterday",
+ "_%n day ago_::_%n days ago_" : ["%n day ago","%n days ago"],
+ "last month" : "last month",
+ "_%n month ago_::_%n months ago_" : ["%n month ago","%n months ago"],
+ "last year" : "last year",
+ "_%n year ago_::_%n years ago_" : ["%n year ago","%n years ago"],
+ "_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
+ "seconds ago" : "seconds ago",
+ "Database Error" : "Database Error",
+ "Please contact your system administrator." : "Please contact your system administrator.",
"web services under your control" : "web services under your control",
"App directory already exists" : "App directory already exists",
"Can't create app folder. Please fix permissions. %s" : "Can't create app folder. Please fix permissions. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Set an admin password.",
"Can't create or write into the data directory %s" : "Can't create or write into the data directory %s",
"%s shared »%s« with you" : "%s shared \"%s\" with you",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Sharing %s failed, because the backend does not allow shares from type %i",
"Sharing %s failed, because the file does not exist" : "Sharing %s failed, because the file does not exist",
"You are not allowed to share %s" : "You are not allowed to share %s",
"Sharing %s failed, because the user %s is the item owner" : "Sharing %s failed, because the user %s is the item owner",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Sharing %s failed, because %s is not a member of the group %s",
"You need to provide a password to create a public link, only protected links are allowed" : "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" : "Sharing %s failed, because sharing with links is not allowed",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sharing %s failed, could not find %s, maybe the server is currently unreachable.",
"Share type %s is not valid for %s" : "Share type %s is not valid for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting permissions for %s failed, because the permissions exceed permissions granted to %s",
"Setting permissions for %s failed, because the item was not found" : "Setting permissions for %s failed, because the item was not found",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Sharing %s failed, because the sharing backend for %s could not find its source",
"Sharing %s failed, because the file could not be found in the file cache" : "Sharing %s failed, because the file could not be found in the file cache",
"Could not find category \"%s\"" : "Could not find category \"%s\"",
- "seconds ago" : "seconds ago",
- "_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
- "_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
- "today" : "today",
- "yesterday" : "yesterday",
- "_%n day go_::_%n days ago_" : ["%n day go","%n days ago"],
- "last month" : "last month",
- "_%n month ago_::_%n months ago_" : ["%n month ago","%n months ago"],
- "last year" : "last year",
- "years ago" : "years ago",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "A valid username must be provided",
"A valid password must be provided" : "A valid password must be provided",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Please install one of these locales on your system and restart your webserver.",
"Please ask your server administrator to install the module." : "Please ask your server administrator to install the module.",
"PHP module %s not installed." : "PHP module %s not installed.",
- "PHP %s or higher is required." : "PHP %s or higher is required.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP modules have been installed, but they are still listed as missing?",
"Please ask your server administrator to restart the web server." : "Please ask your server administrator to restart the web server.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 required",
diff --git a/lib/l10n/en_NZ.js b/lib/l10n/en_NZ.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/en_NZ.js
+++ b/lib/l10n/en_NZ.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/en_NZ.json b/lib/l10n/en_NZ.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/en_NZ.json
+++ b/lib/l10n/en_NZ.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/eo.js b/lib/l10n/eo.js
index ea912c1cca0..fdf8d5b5ab0 100644
--- a/lib/l10n/eo.js
+++ b/lib/l10n/eo.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"lib",
{
"See %s" : "Vidi %s",
+ "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"Help" : "Helpo",
"Personal" : "Persona",
"Settings" : "Agordo",
@@ -10,6 +11,16 @@ OC.L10N.register(
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplikaĵo “%s” ne povas instaliĝi ĉar ĝi ne kongruas kun ĉi tiu eldono de ownCloud.",
"Unknown filetype" : "Ne konatas dosiertipo",
"Invalid image" : "Ne validas bildo",
+ "today" : "hodiaŭ",
+ "yesterday" : "hieraŭ",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "lastamonate",
+ "_%n month ago_::_%n months ago_" : ["","antaŭ %n monatoj"],
+ "last year" : "lastajare",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","antaŭ %n horoj"],
+ "_%n minute ago_::_%n minutes ago_" : ["","antaŭ %n minutoj"],
+ "seconds ago" : "sekundoj antaŭe",
"web services under your control" : "TTT-servoj regataj de vi",
"App directory already exists" : "La dosierujo de la aplikaĵo jam ekzistas",
"App does not provide an info.xml file" : "La aplikaĵo ne provizas dosieron info.xml",
@@ -34,23 +45,12 @@ OC.L10N.register(
"%s shared »%s« with you" : "%s kunhavigis “%s” kun vi",
"You are not allowed to share %s" : "Vi ne permesatas kunhavigi %s",
"Could not find category \"%s\"" : "Ne troviĝis kategorio “%s”",
- "seconds ago" : "sekundoj antaŭe",
- "_%n minute ago_::_%n minutes ago_" : ["","antaŭ %n minutoj"],
- "_%n hour ago_::_%n hours ago_" : ["","antaŭ %n horoj"],
- "today" : "hodiaŭ",
- "yesterday" : "hieraŭ",
- "_%n day go_::_%n days ago_" : ["","antaŭ %n tagoj"],
- "last month" : "lastamonate",
- "_%n month ago_::_%n months ago_" : ["","antaŭ %n monatoj"],
- "last year" : "lastajare",
- "years ago" : "jaroj antaŭe",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Nur la jenaj signoj permesatas en uzantonomo: «a-z», «A-Z», «0-9» kaj «_.@-»",
"A valid username must be provided" : "Valida uzantonomo devas proviziĝi",
"A valid password must be provided" : "Valida pasvorto devas proviziĝi",
"The username is already being used" : "La uzantonomo jam uzatas",
"Please ask your server administrator to install the module." : "Bonvolu peti vian sistemadministranton, ke ĝi instalu la modulon.",
"PHP module %s not installed." : "La PHP-modulo %s ne instalitas.",
- "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 necesas"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/eo.json b/lib/l10n/eo.json
index 7e1ed7bb813..bd433423828 100644
--- a/lib/l10n/eo.json
+++ b/lib/l10n/eo.json
@@ -1,5 +1,6 @@
{ "translations": {
"See %s" : "Vidi %s",
+ "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"Help" : "Helpo",
"Personal" : "Persona",
"Settings" : "Agordo",
@@ -8,6 +9,16 @@
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplikaĵo “%s” ne povas instaliĝi ĉar ĝi ne kongruas kun ĉi tiu eldono de ownCloud.",
"Unknown filetype" : "Ne konatas dosiertipo",
"Invalid image" : "Ne validas bildo",
+ "today" : "hodiaŭ",
+ "yesterday" : "hieraŭ",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "lastamonate",
+ "_%n month ago_::_%n months ago_" : ["","antaŭ %n monatoj"],
+ "last year" : "lastajare",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","antaŭ %n horoj"],
+ "_%n minute ago_::_%n minutes ago_" : ["","antaŭ %n minutoj"],
+ "seconds ago" : "sekundoj antaŭe",
"web services under your control" : "TTT-servoj regataj de vi",
"App directory already exists" : "La dosierujo de la aplikaĵo jam ekzistas",
"App does not provide an info.xml file" : "La aplikaĵo ne provizas dosieron info.xml",
@@ -32,23 +43,12 @@
"%s shared »%s« with you" : "%s kunhavigis “%s” kun vi",
"You are not allowed to share %s" : "Vi ne permesatas kunhavigi %s",
"Could not find category \"%s\"" : "Ne troviĝis kategorio “%s”",
- "seconds ago" : "sekundoj antaŭe",
- "_%n minute ago_::_%n minutes ago_" : ["","antaŭ %n minutoj"],
- "_%n hour ago_::_%n hours ago_" : ["","antaŭ %n horoj"],
- "today" : "hodiaŭ",
- "yesterday" : "hieraŭ",
- "_%n day go_::_%n days ago_" : ["","antaŭ %n tagoj"],
- "last month" : "lastamonate",
- "_%n month ago_::_%n months ago_" : ["","antaŭ %n monatoj"],
- "last year" : "lastajare",
- "years ago" : "jaroj antaŭe",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Nur la jenaj signoj permesatas en uzantonomo: «a-z», «A-Z», «0-9» kaj «_.@-»",
"A valid username must be provided" : "Valida uzantonomo devas proviziĝi",
"A valid password must be provided" : "Valida pasvorto devas proviziĝi",
"The username is already being used" : "La uzantonomo jam uzatas",
"Please ask your server administrator to install the module." : "Bonvolu peti vian sistemadministranton, ke ĝi instalu la modulon.",
"PHP module %s not installed." : "La PHP-modulo %s ne instalitas.",
- "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 necesas"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 76a44a4bed7..c86c601bee0 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -1,12 +1,22 @@
OC.L10N.register(
"lib",
{
- "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio de Configuración!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Esto puede ser facilmente solucionado, dando permisos de escritura al directorio de configuración en el servidor Web",
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio de configuración!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto puede solucionarse fácilmente dándole al servidor permisos de escritura del directorio de configuración",
"See %s" : "Mirar %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede ser facilmente solucionado, %sdando permisos de escritura al directorio de configuración en el servidor Web%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede solucionarse fácilmente %sotorgándole permisos de escritura al directorio de configuración%s.",
"Sample configuration detected" : "Ejemplo de configuración detectado",
"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" : "Se ha detectado que el ejemplo de configuración ha sido copiado. Esto puede arruinar su instalación y es un caso para el que no se brinda soporte. Lea la documentación antes de hacer cambios en config.php",
+ "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferior que %s la requerida.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No se encontró la herramienta %s de línea de comandos",
+ "The library %s is not available." : "La librería %s no está disponible",
+ "Library %s with a version higher than %s is required - available version %s." : "Biblioteca %s con una versión superior que %s la requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Biblioteca %s con una versión inferior que %s la requerida - versión disponible %s.",
+ "Following platforms are supported: %s" : "Las siguientes plataformas son soportadas: %s",
+ "ownCloud %s or higher is required." : "Se requiere ownCloud %s o superior.",
+ "ownCloud with a version lower than %s is required." : "ownCloud con una versión inferior que %s la requerida.",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Ajustes",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Administración",
"Recommended" : "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplicación \\\"%s\\\" no se puede instalar porque no es compatible con esta versión de ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \\\"%s\\\" no puede instalarse porque las siguientes dependencias no están cumplimentadas: %s",
"No app name specified" : "No se ha especificado nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["Hace %n día","Hace %n días"],
+ "last month" : "mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "año pasado",
+ "_%n year ago_::_%n years ago_" : ["Hace %n año","Hace %n años"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "hace segundos",
+ "Database Error" : "Error en la base de datos",
+ "Please contact your system administrator." : "Por favor contacte al administrador del sistema.",
"web services under your control" : "Servicios web bajo su control",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
@@ -54,66 +77,53 @@ OC.L10N.register(
"Set an admin password." : "Configurar la contraseña del administrador.",
"Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
"%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "No se pudo compartir %s porque el repositorio no permite recursos compartidos del tipo %i",
"Sharing %s failed, because the file does not exist" : "No se pudo compartir %s porque el archivo no existe",
"You are not allowed to share %s" : "Usted no está autorizado para compartir %s",
- "Sharing %s failed, because the user %s is the item owner" : "Compartiendo %s ha fallado, ya que el usuario %s es el dueño del elemento",
- "Sharing %s failed, because the user %s does not exist" : "Compartiendo %s ha fallado, ya que el usuario %s no existe",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Compartiendo %s ha fallado, ya que el usuario %s no es miembro de algún grupo que %s es miembro",
- "Sharing %s failed, because this item is already shared with %s" : "Compartiendo %s ha fallado, ya que este elemento ya está compartido con %s",
- "Sharing %s failed, because the group %s does not exist" : "Compartiendo %s ha fallado, ya que el grupo %s no existe",
- "Sharing %s failed, because %s is not a member of the group %s" : "Compartiendo %s ha fallado, ya que %s no es miembro del grupo %s",
+ "Sharing %s failed, because the user %s is the item owner" : "Se ha fallado al compartir %s, ya que el usuario %s es el dueño del elemento",
+ "Sharing %s failed, because the user %s does not exist" : "Se ha fallado al compartir %s, ya que el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se ha fallado al compartir %s, ya que el usuario %s no es miembro de ningún grupo del que %s sea miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se falló al compartir %s, ya que este elemento ya está compartido con %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se falló al compartir %s, ya que el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se falló al compartir %s, ya que %s no es miembro del grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Es necesario definir una contraseña para crear un enlace publico. Solo los enlaces protegidos están permitidos",
- "Sharing %s failed, because sharing with links is not allowed" : "Compartiendo %s ha fallado, ya que compartir con enlaces no está permitido",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se falló al compartir %s, ya que no está permitida la compartición con enlaces",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se falló al compartir %s. No se pudo hallar %s, quizás haya un problema de conexión con el servidor.",
"Share type %s is not valid for %s" : "Compartir tipo %s no es válido para %s",
- "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Configuración de permisos para %s ha fallado, ya que los permisos superan los permisos dados a %s",
- "Setting permissions for %s failed, because the item was not found" : "Configuración de permisos para %s ha fallado, ya que el elemento no fue encontrado",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No se puede fijar fecha de caducidad. Archivos compartidos no pueden caducar luego de %s de ser compartidos",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "La configuración de permisos para %s ha fallado, ya que los permisos superan los permisos dados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "La configuración de permisos para %s ha fallado, ya que no se encontró el elemento ",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No se puede fijar fecha de caducidad. Los archivos compartidos no pueden caducar luego de %s de ser compartidos",
"Cannot set expiration date. Expiration date is in the past" : "No se puede fijar la fecha de caducidad. La fecha de caducidad está en el pasado.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "El motor compartido %s debe implementar la interfaz OCP\\Share_Backend",
"Sharing backend %s not found" : "El motor compartido %s no se ha encontrado",
"Sharing backend for %s not found" : "Motor compartido para %s no encontrado",
- "Sharing %s failed, because the user %s is the original sharer" : "Compartiendo %s ha fallado, ya que el usuario %s es el compartidor original",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartiendo %s ha fallado, ya que los permisos superan los permisos otorgados a %s",
- "Sharing %s failed, because resharing is not allowed" : "Compartiendo %s ha fallado, ya que volver a compartir no está permitido",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartir %s falló porque el motor compartido para %s podría no encontrar su origen",
- "Sharing %s failed, because the file could not be found in the file cache" : "Compartiendo %s ha fallado, ya que el archivo no pudo ser encontrado en el cache de archivo",
+ "Sharing %s failed, because the user %s is the original sharer" : "Se ha fallado al compartir %s, ya que el usuario %s es el compartidor original",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se ha fallado al compartir %s, ya que los permisos superan los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Se ha fallado al compartir %s, ya que volver a compartir no está permitido",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se ha fallado al compartir %s, porque el motor compartido para %s podría no encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se ha fallado al compartir %s, ya que el archivo no pudo ser encontrado en el cache de archivo",
"Could not find category \"%s\"" : "No puede encontrar la categoria \"%s\"",
- "seconds ago" : "hace segundos",
- "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
- "today" : "hoy",
- "yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["Hace %n día","Hace %n días"],
- "last month" : "mes pasado",
- "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
- "last year" : "año pasado",
- "years ago" : "hace años",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Solo los siguientes caracteres están permitidos en un nombre de usuario: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"The username is already being used" : "El nombre de usuario ya está en uso",
"No database drivers (sqlite, mysql, or postgresql) installed." : "No están instalados los drivers de BBDD (sqlite, mysql, o postgresql)",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos usualmente pueden ser solucionados, %sdando permisos de escritura al directorio de configuración en el servidor Web%s.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.",
"Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración",
"Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"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." : "Esto puede ser facilmente solucionado, %sdando permisos de escritura al servidor Web en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto puede solucionarse fácilmente %sdándole permisos de escritura al servidor en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.",
"Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto puede ser solucionado <a href=\"%s\" target=\"_blank\">dando al servidor web permisos de escritura en el directorio raíz</a>.",
"Setting locale to %s failed" : "Falló la activación del idioma %s ",
"Please install one of these locales on your system and restart your webserver." : "Instale uno de estos idiomas en su sistema y reinicie su servidor web.",
"Please ask your server administrator to install the module." : "Consulte al administrador de su servidor para instalar el módulo.",
- "PHP module %s not installed." : "El ódulo PHP %s no está instalado.",
- "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
+ "PHP module %s not installed." : "El módulo PHP %s no está instalado.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Consulte a su administrador del servidor para actualizar PHP a la versión más reciente. Su versión de PHP ya no es apoyado por ownCloud y la comunidad PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe mode está habilitado. ownCloud requiere que se desactive para que funcione correctamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Modo Seguro de PHP es un entorno en desuso y en su mayoría inútil que debe ser desactivada. Contacte al administrador del servidor para desactivarlo en php.ini o en la configuración del servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes está habilitado. ownCloud requiere que se desactive para que funcione correctamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes es un entorno en desuso y en su mayoría inútil que debe ser desactivada. Consulte a su administrador del servidor para desactivarlo en php.ini o en la configuración del servidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Los módulos PHP se han instalado, pero aparecen listados como si faltaran",
"Please ask your server administrator to restart the web server." : "Consulte al administrador de su servidor para reiniciar el servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL 9 o superior requerido.",
"Please upgrade your database version" : "Actualice su versión de base de datos.",
- "Error occurred while checking PostgreSQL version" : "Error ocurrido mientras se chequeaba la versión de PostgreSQL",
+ "Error occurred while checking PostgreSQL version" : "Ha ocurrido un error mientras se comprobaba la versión de PostgreSQL",
"Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Por favor, asegúrese de que tiene PostgreSQL 9 o superior, o revise los registros para obtener más información acerca del error.",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambie los permisos a 0770 para que el directorio no se pueda mostrar para otros usuarios.",
"Data directory (%s) is readable by other users" : "Directorio de datos (%s) se puede leer por otros usuarios.",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index a6bee7f24db..9a7a26d2d3e 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -1,10 +1,20 @@
{ "translations": {
- "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio de Configuración!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Esto puede ser facilmente solucionado, dando permisos de escritura al directorio de configuración en el servidor Web",
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio de configuración!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto puede solucionarse fácilmente dándole al servidor permisos de escritura del directorio de configuración",
"See %s" : "Mirar %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede ser facilmente solucionado, %sdando permisos de escritura al directorio de configuración en el servidor Web%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede solucionarse fácilmente %sotorgándole permisos de escritura al directorio de configuración%s.",
"Sample configuration detected" : "Ejemplo de configuración detectado",
"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" : "Se ha detectado que el ejemplo de configuración ha sido copiado. Esto puede arruinar su instalación y es un caso para el que no se brinda soporte. Lea la documentación antes de hacer cambios en config.php",
+ "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferior que %s la requerida.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No se encontró la herramienta %s de línea de comandos",
+ "The library %s is not available." : "La librería %s no está disponible",
+ "Library %s with a version higher than %s is required - available version %s." : "Biblioteca %s con una versión superior que %s la requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Biblioteca %s con una versión inferior que %s la requerida - versión disponible %s.",
+ "Following platforms are supported: %s" : "Las siguientes plataformas son soportadas: %s",
+ "ownCloud %s or higher is required." : "Se requiere ownCloud %s o superior.",
+ "ownCloud with a version lower than %s is required." : "ownCloud con una versión inferior que %s la requerida.",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Ajustes",
@@ -12,9 +22,22 @@
"Admin" : "Administración",
"Recommended" : "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplicación \\\"%s\\\" no se puede instalar porque no es compatible con esta versión de ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \\\"%s\\\" no puede instalarse porque las siguientes dependencias no están cumplimentadas: %s",
"No app name specified" : "No se ha especificado nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["Hace %n día","Hace %n días"],
+ "last month" : "mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "año pasado",
+ "_%n year ago_::_%n years ago_" : ["Hace %n año","Hace %n años"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "hace segundos",
+ "Database Error" : "Error en la base de datos",
+ "Please contact your system administrator." : "Por favor contacte al administrador del sistema.",
"web services under your control" : "Servicios web bajo su control",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
@@ -52,66 +75,53 @@
"Set an admin password." : "Configurar la contraseña del administrador.",
"Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
"%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "No se pudo compartir %s porque el repositorio no permite recursos compartidos del tipo %i",
"Sharing %s failed, because the file does not exist" : "No se pudo compartir %s porque el archivo no existe",
"You are not allowed to share %s" : "Usted no está autorizado para compartir %s",
- "Sharing %s failed, because the user %s is the item owner" : "Compartiendo %s ha fallado, ya que el usuario %s es el dueño del elemento",
- "Sharing %s failed, because the user %s does not exist" : "Compartiendo %s ha fallado, ya que el usuario %s no existe",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Compartiendo %s ha fallado, ya que el usuario %s no es miembro de algún grupo que %s es miembro",
- "Sharing %s failed, because this item is already shared with %s" : "Compartiendo %s ha fallado, ya que este elemento ya está compartido con %s",
- "Sharing %s failed, because the group %s does not exist" : "Compartiendo %s ha fallado, ya que el grupo %s no existe",
- "Sharing %s failed, because %s is not a member of the group %s" : "Compartiendo %s ha fallado, ya que %s no es miembro del grupo %s",
+ "Sharing %s failed, because the user %s is the item owner" : "Se ha fallado al compartir %s, ya que el usuario %s es el dueño del elemento",
+ "Sharing %s failed, because the user %s does not exist" : "Se ha fallado al compartir %s, ya que el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se ha fallado al compartir %s, ya que el usuario %s no es miembro de ningún grupo del que %s sea miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se falló al compartir %s, ya que este elemento ya está compartido con %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se falló al compartir %s, ya que el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se falló al compartir %s, ya que %s no es miembro del grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Es necesario definir una contraseña para crear un enlace publico. Solo los enlaces protegidos están permitidos",
- "Sharing %s failed, because sharing with links is not allowed" : "Compartiendo %s ha fallado, ya que compartir con enlaces no está permitido",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se falló al compartir %s, ya que no está permitida la compartición con enlaces",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se falló al compartir %s. No se pudo hallar %s, quizás haya un problema de conexión con el servidor.",
"Share type %s is not valid for %s" : "Compartir tipo %s no es válido para %s",
- "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Configuración de permisos para %s ha fallado, ya que los permisos superan los permisos dados a %s",
- "Setting permissions for %s failed, because the item was not found" : "Configuración de permisos para %s ha fallado, ya que el elemento no fue encontrado",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No se puede fijar fecha de caducidad. Archivos compartidos no pueden caducar luego de %s de ser compartidos",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "La configuración de permisos para %s ha fallado, ya que los permisos superan los permisos dados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "La configuración de permisos para %s ha fallado, ya que no se encontró el elemento ",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No se puede fijar fecha de caducidad. Los archivos compartidos no pueden caducar luego de %s de ser compartidos",
"Cannot set expiration date. Expiration date is in the past" : "No se puede fijar la fecha de caducidad. La fecha de caducidad está en el pasado.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "El motor compartido %s debe implementar la interfaz OCP\\Share_Backend",
"Sharing backend %s not found" : "El motor compartido %s no se ha encontrado",
"Sharing backend for %s not found" : "Motor compartido para %s no encontrado",
- "Sharing %s failed, because the user %s is the original sharer" : "Compartiendo %s ha fallado, ya que el usuario %s es el compartidor original",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartiendo %s ha fallado, ya que los permisos superan los permisos otorgados a %s",
- "Sharing %s failed, because resharing is not allowed" : "Compartiendo %s ha fallado, ya que volver a compartir no está permitido",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartir %s falló porque el motor compartido para %s podría no encontrar su origen",
- "Sharing %s failed, because the file could not be found in the file cache" : "Compartiendo %s ha fallado, ya que el archivo no pudo ser encontrado en el cache de archivo",
+ "Sharing %s failed, because the user %s is the original sharer" : "Se ha fallado al compartir %s, ya que el usuario %s es el compartidor original",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se ha fallado al compartir %s, ya que los permisos superan los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Se ha fallado al compartir %s, ya que volver a compartir no está permitido",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se ha fallado al compartir %s, porque el motor compartido para %s podría no encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se ha fallado al compartir %s, ya que el archivo no pudo ser encontrado en el cache de archivo",
"Could not find category \"%s\"" : "No puede encontrar la categoria \"%s\"",
- "seconds ago" : "hace segundos",
- "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
- "today" : "hoy",
- "yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["Hace %n día","Hace %n días"],
- "last month" : "mes pasado",
- "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
- "last year" : "año pasado",
- "years ago" : "hace años",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Solo los siguientes caracteres están permitidos en un nombre de usuario: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"The username is already being used" : "El nombre de usuario ya está en uso",
"No database drivers (sqlite, mysql, or postgresql) installed." : "No están instalados los drivers de BBDD (sqlite, mysql, o postgresql)",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos usualmente pueden ser solucionados, %sdando permisos de escritura al directorio de configuración en el servidor Web%s.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.",
"Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración",
"Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"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." : "Esto puede ser facilmente solucionado, %sdando permisos de escritura al servidor Web en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto puede solucionarse fácilmente %sdándole permisos de escritura al servidor en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.",
"Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto puede ser solucionado <a href=\"%s\" target=\"_blank\">dando al servidor web permisos de escritura en el directorio raíz</a>.",
"Setting locale to %s failed" : "Falló la activación del idioma %s ",
"Please install one of these locales on your system and restart your webserver." : "Instale uno de estos idiomas en su sistema y reinicie su servidor web.",
"Please ask your server administrator to install the module." : "Consulte al administrador de su servidor para instalar el módulo.",
- "PHP module %s not installed." : "El ódulo PHP %s no está instalado.",
- "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
+ "PHP module %s not installed." : "El módulo PHP %s no está instalado.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Consulte a su administrador del servidor para actualizar PHP a la versión más reciente. Su versión de PHP ya no es apoyado por ownCloud y la comunidad PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe mode está habilitado. ownCloud requiere que se desactive para que funcione correctamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Modo Seguro de PHP es un entorno en desuso y en su mayoría inútil que debe ser desactivada. Contacte al administrador del servidor para desactivarlo en php.ini o en la configuración del servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes está habilitado. ownCloud requiere que se desactive para que funcione correctamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes es un entorno en desuso y en su mayoría inútil que debe ser desactivada. Consulte a su administrador del servidor para desactivarlo en php.ini o en la configuración del servidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Los módulos PHP se han instalado, pero aparecen listados como si faltaran",
"Please ask your server administrator to restart the web server." : "Consulte al administrador de su servidor para reiniciar el servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL 9 o superior requerido.",
"Please upgrade your database version" : "Actualice su versión de base de datos.",
- "Error occurred while checking PostgreSQL version" : "Error ocurrido mientras se chequeaba la versión de PostgreSQL",
+ "Error occurred while checking PostgreSQL version" : "Ha ocurrido un error mientras se comprobaba la versión de PostgreSQL",
"Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Por favor, asegúrese de que tiene PostgreSQL 9 o superior, o revise los registros para obtener más información acerca del error.",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambie los permisos a 0770 para que el directorio no se pueda mostrar para otros usuarios.",
"Data directory (%s) is readable by other users" : "Directorio de datos (%s) se puede leer por otros usuarios.",
diff --git a/lib/l10n/es_AR.js b/lib/l10n/es_AR.js
index eb60e6eacbe..bc291ddb3b6 100644
--- a/lib/l10n/es_AR.js
+++ b/lib/l10n/es_AR.js
@@ -9,6 +9,16 @@ OC.L10N.register(
"No app name specified" : "No fue especificado el nombre de la app",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "el mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "el año pasado",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "segundos atrás",
"web services under your control" : "servicios web sobre los que tenés control",
"App directory already exists" : "El directorio de la app ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear el directorio para la app. Corregí los permisos. %s",
@@ -40,16 +50,6 @@ OC.L10N.register(
"Set an admin password." : "Configurar una contraseña de administrador.",
"%s shared »%s« with you" : "%s compartió \"%s\" con vos",
"Could not find category \"%s\"" : "No fue posible encontrar la categoría \"%s\"",
- "seconds ago" : "segundos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
- "today" : "hoy",
- "yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["Hace %n día","Hace %n días"],
- "last month" : "el mes pasado",
- "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
- "last year" : "el año pasado",
- "years ago" : "años atrás",
"A valid username must be provided" : "Debe ingresar un nombre de usuario válido",
"A valid password must be provided" : "Debe ingresar una contraseña válida"
},
diff --git a/lib/l10n/es_AR.json b/lib/l10n/es_AR.json
index 237819d2837..e1245fabfef 100644
--- a/lib/l10n/es_AR.json
+++ b/lib/l10n/es_AR.json
@@ -7,6 +7,16 @@
"No app name specified" : "No fue especificado el nombre de la app",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "el mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "el año pasado",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "segundos atrás",
"web services under your control" : "servicios web sobre los que tenés control",
"App directory already exists" : "El directorio de la app ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear el directorio para la app. Corregí los permisos. %s",
@@ -38,16 +48,6 @@
"Set an admin password." : "Configurar una contraseña de administrador.",
"%s shared »%s« with you" : "%s compartió \"%s\" con vos",
"Could not find category \"%s\"" : "No fue posible encontrar la categoría \"%s\"",
- "seconds ago" : "segundos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
- "today" : "hoy",
- "yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["Hace %n día","Hace %n días"],
- "last month" : "el mes pasado",
- "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
- "last year" : "el año pasado",
- "years ago" : "años atrás",
"A valid username must be provided" : "Debe ingresar un nombre de usuario válido",
"A valid password must be provided" : "Debe ingresar una contraseña válida"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/lib/l10n/es_BO.js b/lib/l10n/es_BO.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_BO.js
+++ b/lib/l10n/es_BO.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_BO.json b/lib/l10n/es_BO.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_BO.json
+++ b/lib/l10n/es_BO.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_CL.js b/lib/l10n/es_CL.js
index 12f107f8ddf..84e47673937 100644
--- a/lib/l10n/es_CL.js
+++ b/lib/l10n/es_CL.js
@@ -14,19 +14,19 @@ OC.L10N.register(
"No app name specified" : "No se especificó el nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen no válida",
- "web services under your control" : "Servicios Web bajo su control",
- "App directory already exists" : "El directorio de la aplicación ya existe",
- "Can't create app folder. Please fix permissions. %s" : "No se puede crear el directorio de aplicación. Por favor corregir los permisos. %s",
- "No source specified when installing app" : "No se especificó el origen al instalar la aplicación",
- "seconds ago" : "segundos antes",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "hoy",
"yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "mes anterior",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "último año",
- "years ago" : "años anteriores"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "segundos antes",
+ "web services under your control" : "Servicios Web bajo su control",
+ "App directory already exists" : "El directorio de la aplicación ya existe",
+ "Can't create app folder. Please fix permissions. %s" : "No se puede crear el directorio de aplicación. Por favor corregir los permisos. %s",
+ "No source specified when installing app" : "No se especificó el origen al instalar la aplicación"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_CL.json b/lib/l10n/es_CL.json
index 4c66ed935ac..946cf11dc09 100644
--- a/lib/l10n/es_CL.json
+++ b/lib/l10n/es_CL.json
@@ -12,19 +12,19 @@
"No app name specified" : "No se especificó el nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen no válida",
- "web services under your control" : "Servicios Web bajo su control",
- "App directory already exists" : "El directorio de la aplicación ya existe",
- "Can't create app folder. Please fix permissions. %s" : "No se puede crear el directorio de aplicación. Por favor corregir los permisos. %s",
- "No source specified when installing app" : "No se especificó el origen al instalar la aplicación",
- "seconds ago" : "segundos antes",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "hoy",
"yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "mes anterior",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "último año",
- "years ago" : "años anteriores"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "segundos antes",
+ "web services under your control" : "Servicios Web bajo su control",
+ "App directory already exists" : "El directorio de la aplicación ya existe",
+ "Can't create app folder. Please fix permissions. %s" : "No se puede crear el directorio de aplicación. Por favor corregir los permisos. %s",
+ "No source specified when installing app" : "No se especificó el origen al instalar la aplicación"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_CO.js b/lib/l10n/es_CO.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_CO.js
+++ b/lib/l10n/es_CO.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_CO.json b/lib/l10n/es_CO.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_CO.json
+++ b/lib/l10n/es_CO.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_CR.js b/lib/l10n/es_CR.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_CR.js
+++ b/lib/l10n/es_CR.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_CR.json b/lib/l10n/es_CR.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_CR.json
+++ b/lib/l10n/es_CR.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_EC.js b/lib/l10n/es_EC.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_EC.js
+++ b/lib/l10n/es_EC.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_EC.json b/lib/l10n/es_EC.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_EC.json
+++ b/lib/l10n/es_EC.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_MX.js b/lib/l10n/es_MX.js
index 2e2083415e5..e739b14c9fd 100644
--- a/lib/l10n/es_MX.js
+++ b/lib/l10n/es_MX.js
@@ -9,6 +9,16 @@ OC.L10N.register(
"No app name specified" : "No se ha especificado nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "año pasado",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "hace segundos",
"web services under your control" : "Servicios web bajo su control",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
@@ -40,16 +50,6 @@ OC.L10N.register(
"Set an admin password." : "Configurar la contraseña del administrador.",
"%s shared »%s« with you" : "%s ha compartido »%s« contigo",
"Could not find category \"%s\"" : "No puede encontrar la categoria \"%s\"",
- "seconds ago" : "hace segundos",
- "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
- "today" : "hoy",
- "yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["Hace %n día","Hace %n días"],
- "last month" : "mes pasado",
- "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
- "last year" : "año pasado",
- "years ago" : "hace años",
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida"
},
diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json
index b9fe48a6eea..9b63e52244c 100644
--- a/lib/l10n/es_MX.json
+++ b/lib/l10n/es_MX.json
@@ -7,6 +7,16 @@
"No app name specified" : "No se ha especificado nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "año pasado",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "hace segundos",
"web services under your control" : "Servicios web bajo su control",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
@@ -38,16 +48,6 @@
"Set an admin password." : "Configurar la contraseña del administrador.",
"%s shared »%s« with you" : "%s ha compartido »%s« contigo",
"Could not find category \"%s\"" : "No puede encontrar la categoria \"%s\"",
- "seconds ago" : "hace segundos",
- "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
- "today" : "hoy",
- "yesterday" : "ayer",
- "_%n day go_::_%n days ago_" : ["Hace %n día","Hace %n días"],
- "last month" : "mes pasado",
- "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
- "last year" : "año pasado",
- "years ago" : "hace años",
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/lib/l10n/es_PE.js b/lib/l10n/es_PE.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_PE.js
+++ b/lib/l10n/es_PE.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_PE.json b/lib/l10n/es_PE.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_PE.json
+++ b/lib/l10n/es_PE.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_PY.js b/lib/l10n/es_PY.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_PY.js
+++ b/lib/l10n/es_PY.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_PY.json b/lib/l10n/es_PY.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_PY.json
+++ b/lib/l10n/es_PY.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_US.js b/lib/l10n/es_US.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_US.js
+++ b/lib/l10n/es_US.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_US.json b/lib/l10n/es_US.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_US.json
+++ b/lib/l10n/es_US.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_UY.js b/lib/l10n/es_UY.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/es_UY.js
+++ b/lib/l10n/es_UY.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_UY.json b/lib/l10n/es_UY.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/es_UY.json
+++ b/lib/l10n/es_UY.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js
index 8fbc25c4403..1e48fc90216 100644
--- a/lib/l10n/et_EE.js
+++ b/lib/l10n/et_EE.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tavaliselt saab selle lahendada %s andes veebiserverile seadete kataloogile \"config\" kirjutusõigused %s",
"Sample configuration detected" : "Tuvastati näidisseaded",
"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" : "Tuvastati, et kopeeriti näidisseaded. See võib lõhkuda sinu saidi ja see pole toetatud. Palun loe enne faili config.php muutmist dokumentatsiooni",
+ "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Help" : "Abiinfo",
"Personal" : "Isiklik",
"Settings" : "Seaded",
@@ -17,6 +18,16 @@ OC.L10N.register(
"No app name specified" : "Ühegi rakendi nime pole määratletud",
"Unknown filetype" : "Tundmatu failitüüp",
"Invalid image" : "Vigane pilt",
+ "today" : "täna",
+ "yesterday" : "eile",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "viimasel kuul",
+ "_%n month ago_::_%n months ago_" : ["","%n kuud tagasi"],
+ "last year" : "viimasel aastal",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n tundi tagasi"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutit tagasi"],
+ "seconds ago" : "sekundit tagasi",
"web services under your control" : "veebitenused sinu kontrolli all",
"App directory already exists" : "Rakendi kataloog on juba olemas",
"Can't create app folder. Please fix permissions. %s" : "Ei saa luua rakendi kataloogi. Palun korrigeeri õigusi. %s",
@@ -78,16 +89,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s jagamine ebaõnnestus, kuna jagamise tagarakend ei suutnud leida %s jaoks lähteallikat",
"Sharing %s failed, because the file could not be found in the file cache" : "%s jagamine ebaõnnestus, kuna faili ei suudetud leida failide puhvrist",
"Could not find category \"%s\"" : "Ei leia kategooriat \"%s\"",
- "seconds ago" : "sekundit tagasi",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutit tagasi"],
- "_%n hour ago_::_%n hours ago_" : ["","%n tundi tagasi"],
- "today" : "täna",
- "yesterday" : "eile",
- "_%n day go_::_%n days ago_" : ["","%n päeva tagasi"],
- "last month" : "viimasel kuul",
- "_%n month ago_::_%n months ago_" : ["","%n kuud tagasi"],
- "last year" : "viimasel aastal",
- "years ago" : "aastat tagasi",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Kasutajanimes on lubatud ainult järgnevad tähemärgid: \"a-z\", \"A-Z\", \"0-9\" ja \"_.@-\"",
"A valid username must be provided" : "Sisesta nõuetele vastav kasutajatunnus",
"A valid password must be provided" : "Sisesta nõuetele vastav parool",
@@ -103,12 +104,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Palun paigalda mõni neist lokaatides oma süsteemi ning taaskäivita veebiserver.",
"Please ask your server administrator to install the module." : "Palu oma serveri haldajal moodul paigadalda.",
"PHP module %s not installed." : "PHP moodulit %s pole paigaldatud.",
- "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Palu oma serveri haldajal uuendada PHP viimasele versioonile. Sinu PHP versioon pole enam toetatud ownCloud-i ja PHP kogukonna poolt.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode on lubatud. ownCloud vajab normaalseks toimimiseks, et see oleks keelatud.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode on aegunud ja üldiselt kasutu seadistus, mis tuleks keelata. Palu oma serveri haldajal see keelata php.ini failis või veebiserveri seadetes.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes on lubatud. ownCloud vajab normaalseks toimimiseks, et see oleks keelatud.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes on aegunud ja üldiselt kasutu seadistus, mis tuleks keelata. Palu oma serveri haldajal see keelata php.ini failis või veebiserveri seadetes.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moodulid on paigaldatud, kuid neid näitatakse endiselt kui puuduolevad?",
"Please ask your server administrator to restart the web server." : "Palu oma serveri haldajal veebiserver taaskäivitada.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 on nõutav",
diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json
index 099000bd74a..05486f6d8a0 100644
--- a/lib/l10n/et_EE.json
+++ b/lib/l10n/et_EE.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tavaliselt saab selle lahendada %s andes veebiserverile seadete kataloogile \"config\" kirjutusõigused %s",
"Sample configuration detected" : "Tuvastati näidisseaded",
"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" : "Tuvastati, et kopeeriti näidisseaded. See võib lõhkuda sinu saidi ja see pole toetatud. Palun loe enne faili config.php muutmist dokumentatsiooni",
+ "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Help" : "Abiinfo",
"Personal" : "Isiklik",
"Settings" : "Seaded",
@@ -15,6 +16,16 @@
"No app name specified" : "Ühegi rakendi nime pole määratletud",
"Unknown filetype" : "Tundmatu failitüüp",
"Invalid image" : "Vigane pilt",
+ "today" : "täna",
+ "yesterday" : "eile",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "viimasel kuul",
+ "_%n month ago_::_%n months ago_" : ["","%n kuud tagasi"],
+ "last year" : "viimasel aastal",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n tundi tagasi"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutit tagasi"],
+ "seconds ago" : "sekundit tagasi",
"web services under your control" : "veebitenused sinu kontrolli all",
"App directory already exists" : "Rakendi kataloog on juba olemas",
"Can't create app folder. Please fix permissions. %s" : "Ei saa luua rakendi kataloogi. Palun korrigeeri õigusi. %s",
@@ -76,16 +87,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s jagamine ebaõnnestus, kuna jagamise tagarakend ei suutnud leida %s jaoks lähteallikat",
"Sharing %s failed, because the file could not be found in the file cache" : "%s jagamine ebaõnnestus, kuna faili ei suudetud leida failide puhvrist",
"Could not find category \"%s\"" : "Ei leia kategooriat \"%s\"",
- "seconds ago" : "sekundit tagasi",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutit tagasi"],
- "_%n hour ago_::_%n hours ago_" : ["","%n tundi tagasi"],
- "today" : "täna",
- "yesterday" : "eile",
- "_%n day go_::_%n days ago_" : ["","%n päeva tagasi"],
- "last month" : "viimasel kuul",
- "_%n month ago_::_%n months ago_" : ["","%n kuud tagasi"],
- "last year" : "viimasel aastal",
- "years ago" : "aastat tagasi",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Kasutajanimes on lubatud ainult järgnevad tähemärgid: \"a-z\", \"A-Z\", \"0-9\" ja \"_.@-\"",
"A valid username must be provided" : "Sisesta nõuetele vastav kasutajatunnus",
"A valid password must be provided" : "Sisesta nõuetele vastav parool",
@@ -101,12 +102,7 @@
"Please install one of these locales on your system and restart your webserver." : "Palun paigalda mõni neist lokaatides oma süsteemi ning taaskäivita veebiserver.",
"Please ask your server administrator to install the module." : "Palu oma serveri haldajal moodul paigadalda.",
"PHP module %s not installed." : "PHP moodulit %s pole paigaldatud.",
- "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Palu oma serveri haldajal uuendada PHP viimasele versioonile. Sinu PHP versioon pole enam toetatud ownCloud-i ja PHP kogukonna poolt.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode on lubatud. ownCloud vajab normaalseks toimimiseks, et see oleks keelatud.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode on aegunud ja üldiselt kasutu seadistus, mis tuleks keelata. Palu oma serveri haldajal see keelata php.ini failis või veebiserveri seadetes.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes on lubatud. ownCloud vajab normaalseks toimimiseks, et see oleks keelatud.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes on aegunud ja üldiselt kasutu seadistus, mis tuleks keelata. Palu oma serveri haldajal see keelata php.ini failis või veebiserveri seadetes.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moodulid on paigaldatud, kuid neid näitatakse endiselt kui puuduolevad?",
"Please ask your server administrator to restart the web server." : "Palu oma serveri haldajal veebiserver taaskäivitada.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 on nõutav",
diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js
index b5b6b7d364b..7af354cdf6c 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira config karpetan idazteko baimenak emanez%s.",
"Sample configuration detected" : "Adibide-ezarpena detektatua",
"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" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.",
+ "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Help" : "Laguntza",
"Personal" : "Pertsonala",
"Settings" : "Ezarpenak",
@@ -17,6 +18,16 @@ OC.L10N.register(
"No app name specified" : "Ez da aplikazioaren izena zehaztu",
"Unknown filetype" : "Fitxategi mota ezezaguna",
"Invalid image" : "Baliogabeko irudia",
+ "today" : "gaur",
+ "yesterday" : "atzo",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "joan den hilabetean",
+ "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"],
+ "last year" : "joan den urtean",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"],
+ "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"],
+ "seconds ago" : "segundu",
"web services under your control" : "web zerbitzuak zure kontrolpean",
"App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da",
"Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s",
@@ -78,16 +89,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s elkarbanatzeak huts egin du, %sren elkarbanaketa motorrak bere iturria aurkitu ezin duelako",
"Sharing %s failed, because the file could not be found in the file cache" : "%s elkarbanatzeak huts egin du, fitxategia katxean aurkitu ez delako",
"Could not find category \"%s\"" : "Ezin da \"%s\" kategoria aurkitu",
- "seconds ago" : "segundu",
- "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"],
- "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"],
- "today" : "gaur",
- "yesterday" : "atzo",
- "_%n day go_::_%n days ago_" : ["orain dela egun %n","orain dela %n egun"],
- "last month" : "joan den hilabetean",
- "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"],
- "last year" : "joan den urtean",
- "years ago" : "urte",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Bakarrik hurrengo karaketerak onartzen dira erabiltzaile izenean: \"a-z\", \"A-Z\", \"0-9\", eta \"_.@-\"",
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
@@ -103,12 +104,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.",
"Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.",
"PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.",
- "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari PHP azkenengo bertsiora eguneratzea. Zure PHP bertsioa ez dute ez ownCloud eta ez PHP komunitateek mantentzen.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP SafeMode gaitua dago. ownCloudek ongi funtzionatzeko desgaitua behar du.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode ia erabiligabeko ezarpen zahar bat da eta desgaituta egon beharko luke. Mesedez eskatu zerbitzariaren kudeatzaileari php.ini edo zure web zerbitzariaren konfigurazioan desgaitu dezan.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes gaitua dago. ownCloudek ongi funtzionatzeko desgaitua behar du.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ia erabiligabeko ezarpen zahar bat da eta desgaituta egon beharko luke. Mesedez eskatu zerbitzariaren kudeatzaileari php.ini edo zure web zerbitzariaren konfigurazioan desgaitu dezan.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduluak instalatu dira, baina oraindik faltan bezala markatuta daude?",
"Please ask your server administrator to restart the web server." : "Mesedez eskatu zerbitzariaren kudeatzaileari web zerbitzaria berrabiarazteko.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da",
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index 77a7f6f095e..3735988aab8 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira config karpetan idazteko baimenak emanez%s.",
"Sample configuration detected" : "Adibide-ezarpena detektatua",
"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" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.",
+ "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Help" : "Laguntza",
"Personal" : "Pertsonala",
"Settings" : "Ezarpenak",
@@ -15,6 +16,16 @@
"No app name specified" : "Ez da aplikazioaren izena zehaztu",
"Unknown filetype" : "Fitxategi mota ezezaguna",
"Invalid image" : "Baliogabeko irudia",
+ "today" : "gaur",
+ "yesterday" : "atzo",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "joan den hilabetean",
+ "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"],
+ "last year" : "joan den urtean",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"],
+ "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"],
+ "seconds ago" : "segundu",
"web services under your control" : "web zerbitzuak zure kontrolpean",
"App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da",
"Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s",
@@ -76,16 +87,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s elkarbanatzeak huts egin du, %sren elkarbanaketa motorrak bere iturria aurkitu ezin duelako",
"Sharing %s failed, because the file could not be found in the file cache" : "%s elkarbanatzeak huts egin du, fitxategia katxean aurkitu ez delako",
"Could not find category \"%s\"" : "Ezin da \"%s\" kategoria aurkitu",
- "seconds ago" : "segundu",
- "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"],
- "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"],
- "today" : "gaur",
- "yesterday" : "atzo",
- "_%n day go_::_%n days ago_" : ["orain dela egun %n","orain dela %n egun"],
- "last month" : "joan den hilabetean",
- "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"],
- "last year" : "joan den urtean",
- "years ago" : "urte",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Bakarrik hurrengo karaketerak onartzen dira erabiltzaile izenean: \"a-z\", \"A-Z\", \"0-9\", eta \"_.@-\"",
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
@@ -101,12 +102,7 @@
"Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.",
"Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.",
"PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.",
- "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari PHP azkenengo bertsiora eguneratzea. Zure PHP bertsioa ez dute ez ownCloud eta ez PHP komunitateek mantentzen.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP SafeMode gaitua dago. ownCloudek ongi funtzionatzeko desgaitua behar du.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode ia erabiligabeko ezarpen zahar bat da eta desgaituta egon beharko luke. Mesedez eskatu zerbitzariaren kudeatzaileari php.ini edo zure web zerbitzariaren konfigurazioan desgaitu dezan.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes gaitua dago. ownCloudek ongi funtzionatzeko desgaitua behar du.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes ia erabiligabeko ezarpen zahar bat da eta desgaituta egon beharko luke. Mesedez eskatu zerbitzariaren kudeatzaileari php.ini edo zure web zerbitzariaren konfigurazioan desgaitu dezan.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduluak instalatu dira, baina oraindik faltan bezala markatuta daude?",
"Please ask your server administrator to restart the web server." : "Mesedez eskatu zerbitzariaren kudeatzaileari web zerbitzaria berrabiarazteko.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da",
diff --git a/lib/l10n/eu_ES.js b/lib/l10n/eu_ES.js
index a9f41884d58..554bbf836a5 100644
--- a/lib/l10n/eu_ES.js
+++ b/lib/l10n/eu_ES.js
@@ -2,9 +2,10 @@ OC.L10N.register(
"lib",
{
"Personal" : "Pertsonala",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/eu_ES.json b/lib/l10n/eu_ES.json
index 9ac9f22cb92..eecaa4e9aea 100644
--- a/lib/l10n/eu_ES.json
+++ b/lib/l10n/eu_ES.json
@@ -1,8 +1,9 @@
{ "translations": {
"Personal" : "Pertsonala",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fa.js b/lib/l10n/fa.js
index 451274e4767..e5cacb279d4 100644
--- a/lib/l10n/fa.js
+++ b/lib/l10n/fa.js
@@ -8,6 +8,16 @@ OC.L10N.register(
"Admin" : "مدیر",
"Unknown filetype" : "نوع فایل ناشناخته",
"Invalid image" : "عکس نامعتبر",
+ "today" : "امروز",
+ "yesterday" : "دیروز",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "ماه قبل",
+ "_%n month ago_::_%n months ago_" : ["%n ماه قبل"],
+ "last year" : "سال قبل",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n ساعت قبل"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n دقیقه قبل"],
+ "seconds ago" : "ثانیه‌ها پیش",
"web services under your control" : "سرویس های تحت وب در کنترل شما",
"Application is not enabled" : "برنامه فعال نشده است",
"Authentication error" : "خطا در اعتبار سنجی",
@@ -27,16 +37,6 @@ OC.L10N.register(
"Set an admin password." : "یک رمزعبور برای مدیر تنظیم نمایید.",
"%s shared »%s« with you" : "%s به اشتراک گذاشته شده است »%s« توسط شما",
"Could not find category \"%s\"" : "دسته بندی %s یافت نشد",
- "seconds ago" : "ثانیه‌ها پیش",
- "_%n minute ago_::_%n minutes ago_" : ["%n دقیقه قبل"],
- "_%n hour ago_::_%n hours ago_" : ["%n ساعت قبل"],
- "today" : "امروز",
- "yesterday" : "دیروز",
- "_%n day go_::_%n days ago_" : ["%n روز قبل"],
- "last month" : "ماه قبل",
- "_%n month ago_::_%n months ago_" : ["%n ماه قبل"],
- "last year" : "سال قبل",
- "years ago" : "سال‌های قبل",
"A valid username must be provided" : "نام کاربری صحیح باید وارد شود",
"A valid password must be provided" : "رمز عبور صحیح باید وارد شود"
},
diff --git a/lib/l10n/fa.json b/lib/l10n/fa.json
index 9dfeaa59954..608d66645da 100644
--- a/lib/l10n/fa.json
+++ b/lib/l10n/fa.json
@@ -6,6 +6,16 @@
"Admin" : "مدیر",
"Unknown filetype" : "نوع فایل ناشناخته",
"Invalid image" : "عکس نامعتبر",
+ "today" : "امروز",
+ "yesterday" : "دیروز",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "ماه قبل",
+ "_%n month ago_::_%n months ago_" : ["%n ماه قبل"],
+ "last year" : "سال قبل",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n ساعت قبل"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n دقیقه قبل"],
+ "seconds ago" : "ثانیه‌ها پیش",
"web services under your control" : "سرویس های تحت وب در کنترل شما",
"Application is not enabled" : "برنامه فعال نشده است",
"Authentication error" : "خطا در اعتبار سنجی",
@@ -25,16 +35,6 @@
"Set an admin password." : "یک رمزعبور برای مدیر تنظیم نمایید.",
"%s shared »%s« with you" : "%s به اشتراک گذاشته شده است »%s« توسط شما",
"Could not find category \"%s\"" : "دسته بندی %s یافت نشد",
- "seconds ago" : "ثانیه‌ها پیش",
- "_%n minute ago_::_%n minutes ago_" : ["%n دقیقه قبل"],
- "_%n hour ago_::_%n hours ago_" : ["%n ساعت قبل"],
- "today" : "امروز",
- "yesterday" : "دیروز",
- "_%n day go_::_%n days ago_" : ["%n روز قبل"],
- "last month" : "ماه قبل",
- "_%n month ago_::_%n months ago_" : ["%n ماه قبل"],
- "last year" : "سال قبل",
- "years ago" : "سال‌های قبل",
"A valid username must be provided" : "نام کاربری صحیح باید وارد شود",
"A valid password must be provided" : "رمز عبور صحیح باید وارد شود"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/lib/l10n/fi.js b/lib/l10n/fi.js
new file mode 100644
index 00000000000..e8afca32c16
--- /dev/null
+++ b/lib/l10n/fi.js
@@ -0,0 +1,12 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Help" : "Apua",
+ "Settings" : "Asetukset",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json
new file mode 100644
index 00000000000..fb543139bb4
--- /dev/null
+++ b/lib/l10n/fi.json
@@ -0,0 +1,10 @@
+{ "translations": {
+ "Help" : "Apua",
+ "Settings" : "Asetukset",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js
index f387090da60..8dfa7fa9c03 100644
--- a/lib/l10n/fi_FI.js
+++ b/lib/l10n/fi_FI.js
@@ -6,6 +6,13 @@ OC.L10N.register(
"See %s" : "Katso %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tämän voi yleensä korjata antamalla %shttp-palvelimelle kirjoitusoikeuden asetushakemistoon%s.",
"Sample configuration detected" : "Esimerkkimääritykset havaittu",
+ "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
+ "Following databases are supported: %s" : "Seuraavat tietokannat ovat tuettuja: %s",
+ "The command line tool %s could not be found" : "Komentorivityökalua %s ei löytynyt",
+ "The library %s is not available." : "Kirjastoa %s ei ole käytettävissä.",
+ "Library %s with a version higher than %s is required - available version %s." : "Kirjasto %s versiota %s tai uudempi vaaditaan - käytettävissä oleva versio %s.",
+ "Following platforms are supported: %s" : "Seuraavat alustat ovat tuettuja: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s tai uudempi vaaditaan.",
"Help" : "Ohje",
"Personal" : "Henkilökohtainen",
"Settings" : "Asetukset",
@@ -16,6 +23,18 @@ OC.L10N.register(
"No app name specified" : "Sovelluksen nimeä ei määritelty",
"Unknown filetype" : "Tuntematon tiedostotyyppi",
"Invalid image" : "Virheellinen kuva",
+ "today" : "tänään",
+ "yesterday" : "eilen",
+ "_%n day ago_::_%n days ago_" : ["%n päivä sitten","%n päivää sitten"],
+ "last month" : "viime kuussa",
+ "_%n month ago_::_%n months ago_" : ["%n kuukausi sitten","%n kuukautta sitten"],
+ "last year" : "viime vuonna",
+ "_%n year ago_::_%n years ago_" : ["%n vuosi sitten","%n vuotta sitten"],
+ "_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
+ "seconds ago" : "sekuntia sitten",
+ "Database Error" : "Tietokantavirhe",
+ "Please contact your system administrator." : "Ole yhteydessä järjestelmän ylläpitäjään.",
"web services under your control" : "verkkopalvelut hallinnassasi",
"App directory already exists" : "Sovelluskansio on jo olemassa",
"Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
@@ -67,16 +86,6 @@ OC.L10N.register(
"Sharing %s failed, because resharing is not allowed" : "Kohteen %s jakaminen epäonnistui, koska jakaminen uudelleen ei ole sallittu",
"Sharing %s failed, because the file could not be found in the file cache" : "Kohteen %s jakaminen epäonnistui, koska tiedostoa ei löytynyt tiedostovälimuistista",
"Could not find category \"%s\"" : "Luokkaa \"%s\" ei löytynyt",
- "seconds ago" : "sekuntia sitten",
- "_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
- "_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
- "today" : "tänään",
- "yesterday" : "eilen",
- "_%n day go_::_%n days ago_" : ["%n päivä sitten","%n päivää sitten"],
- "last month" : "viime kuussa",
- "_%n month ago_::_%n months ago_" : ["%n kuukausi sitten","%n kuukautta sitten"],
- "last year" : "viime vuonna",
- "years ago" : "vuotta sitten",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Vain seuraavat merkit ovat sallittuja käyttäjätunnuksessa: \"a-z\", \"A-Z\", \"0-9\" ja \"_.@-\"",
"A valid username must be provided" : "Anna kelvollinen käyttäjätunnus",
"A valid password must be provided" : "Anna kelvollinen salasana",
@@ -90,12 +99,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.",
"Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.",
"PHP module %s not installed." : "PHP-moduulia %s ei ole asennettu.",
- "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pyydä palvelimen ylläpitäjää päivittämään PHP uusimpaan versioon. Käyttämäsi PHP-versio ei ole enää tuettu ownCloud- ja PHP-yhteisön toimesta.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP:n \"Safe Mode\" on käytössä. ownCloud vaatii toimiakseen \"Safe Moden\" poistamisen käytöstä.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP:n Safe Mode on vanhennettu ja muutenkin lähes hyödytön asetus, joka tulee poistaa käytöstä. Pyydä järjestelmän ylläpitäjää poistamaan ominaisuus käytöstä php.ini-tiedoston kautta tai http-palvelimen asetuksista.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes -asetus on käytössä. ownCloud vaatii toimiakseen kyseisen asetuksen poistamisen käytöstä.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes -asetus on vanhennettu ja pääosin hyödytön, joten se tulisi poistaa käytöstä. Pyydä palvelimen ylläpitäjää poistamaan asetus käytöstä php.ini-tiedoston avulla tai http-palvelimen asetuksista.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduulit on asennettu, mutta ovatko ne vieläkin listattu puuttuviksi?",
"Please ask your server administrator to restart the web server." : "Pyydä palvelimen ylläpitäjää käynnistämään web-palvelin uudelleen.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vaaditaan",
diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json
index 7c26af25f66..da126175e2f 100644
--- a/lib/l10n/fi_FI.json
+++ b/lib/l10n/fi_FI.json
@@ -4,6 +4,13 @@
"See %s" : "Katso %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tämän voi yleensä korjata antamalla %shttp-palvelimelle kirjoitusoikeuden asetushakemistoon%s.",
"Sample configuration detected" : "Esimerkkimääritykset havaittu",
+ "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
+ "Following databases are supported: %s" : "Seuraavat tietokannat ovat tuettuja: %s",
+ "The command line tool %s could not be found" : "Komentorivityökalua %s ei löytynyt",
+ "The library %s is not available." : "Kirjastoa %s ei ole käytettävissä.",
+ "Library %s with a version higher than %s is required - available version %s." : "Kirjasto %s versiota %s tai uudempi vaaditaan - käytettävissä oleva versio %s.",
+ "Following platforms are supported: %s" : "Seuraavat alustat ovat tuettuja: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s tai uudempi vaaditaan.",
"Help" : "Ohje",
"Personal" : "Henkilökohtainen",
"Settings" : "Asetukset",
@@ -14,6 +21,18 @@
"No app name specified" : "Sovelluksen nimeä ei määritelty",
"Unknown filetype" : "Tuntematon tiedostotyyppi",
"Invalid image" : "Virheellinen kuva",
+ "today" : "tänään",
+ "yesterday" : "eilen",
+ "_%n day ago_::_%n days ago_" : ["%n päivä sitten","%n päivää sitten"],
+ "last month" : "viime kuussa",
+ "_%n month ago_::_%n months ago_" : ["%n kuukausi sitten","%n kuukautta sitten"],
+ "last year" : "viime vuonna",
+ "_%n year ago_::_%n years ago_" : ["%n vuosi sitten","%n vuotta sitten"],
+ "_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
+ "seconds ago" : "sekuntia sitten",
+ "Database Error" : "Tietokantavirhe",
+ "Please contact your system administrator." : "Ole yhteydessä järjestelmän ylläpitäjään.",
"web services under your control" : "verkkopalvelut hallinnassasi",
"App directory already exists" : "Sovelluskansio on jo olemassa",
"Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
@@ -65,16 +84,6 @@
"Sharing %s failed, because resharing is not allowed" : "Kohteen %s jakaminen epäonnistui, koska jakaminen uudelleen ei ole sallittu",
"Sharing %s failed, because the file could not be found in the file cache" : "Kohteen %s jakaminen epäonnistui, koska tiedostoa ei löytynyt tiedostovälimuistista",
"Could not find category \"%s\"" : "Luokkaa \"%s\" ei löytynyt",
- "seconds ago" : "sekuntia sitten",
- "_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
- "_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
- "today" : "tänään",
- "yesterday" : "eilen",
- "_%n day go_::_%n days ago_" : ["%n päivä sitten","%n päivää sitten"],
- "last month" : "viime kuussa",
- "_%n month ago_::_%n months ago_" : ["%n kuukausi sitten","%n kuukautta sitten"],
- "last year" : "viime vuonna",
- "years ago" : "vuotta sitten",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Vain seuraavat merkit ovat sallittuja käyttäjätunnuksessa: \"a-z\", \"A-Z\", \"0-9\" ja \"_.@-\"",
"A valid username must be provided" : "Anna kelvollinen käyttäjätunnus",
"A valid password must be provided" : "Anna kelvollinen salasana",
@@ -88,12 +97,7 @@
"Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.",
"Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.",
"PHP module %s not installed." : "PHP-moduulia %s ei ole asennettu.",
- "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pyydä palvelimen ylläpitäjää päivittämään PHP uusimpaan versioon. Käyttämäsi PHP-versio ei ole enää tuettu ownCloud- ja PHP-yhteisön toimesta.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP:n \"Safe Mode\" on käytössä. ownCloud vaatii toimiakseen \"Safe Moden\" poistamisen käytöstä.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP:n Safe Mode on vanhennettu ja muutenkin lähes hyödytön asetus, joka tulee poistaa käytöstä. Pyydä järjestelmän ylläpitäjää poistamaan ominaisuus käytöstä php.ini-tiedoston kautta tai http-palvelimen asetuksista.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes -asetus on käytössä. ownCloud vaatii toimiakseen kyseisen asetuksen poistamisen käytöstä.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes -asetus on vanhennettu ja pääosin hyödytön, joten se tulisi poistaa käytöstä. Pyydä palvelimen ylläpitäjää poistamaan asetus käytöstä php.ini-tiedoston avulla tai http-palvelimen asetuksista.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduulit on asennettu, mutta ovatko ne vieläkin listattu puuttuviksi?",
"Please ask your server administrator to restart the web server." : "Pyydä palvelimen ylläpitäjää käynnistämään web-palvelin uudelleen.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vaaditaan",
diff --git a/lib/l10n/fil.js b/lib/l10n/fil.js
index 9ac3e05d6c6..9408adc0dc3 100644
--- a/lib/l10n/fil.js
+++ b/lib/l10n/fil.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/fil.json b/lib/l10n/fil.json
index 82a8a99d300..2a227e468c7 100644
--- a/lib/l10n/fil.json
+++ b/lib/l10n/fil.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"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 becc21ab649..24aac44d42d 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -2,11 +2,21 @@ OC.L10N.register(
"lib",
{
"Cannot write into \"config\" directory!" : "Impossible d’écrire dans le répertoire « config » !",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture à ce répertoire",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire \"config\"",
"See %s" : "Voir %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire de configuration%s.",
"Sample configuration detected" : "Configuration d'exemple détectée",
"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" : "Il a été détecté que la configuration donnée à titre d'exemple a été copiée. Cela peut rendre votre installation inopérante et n'est pas pris en charge. Veuillez lire la documentation avant d'effectuer des modifications dans config.php",
+ "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
+ "PHP with a version lower than %s is required." : "PHP avec une version antérieure à %s est requis.",
+ "Following databases are supported: %s" : "Les bases de données suivantes sont supportées: %s",
+ "The command line tool %s could not be found" : "La commande %s est introuvable",
+ "The library %s is not available." : "La librairie %s n'est pas disponible.",
+ "Library %s with a version higher than %s is required - available version %s." : "La librairie %s doit être au moins à la version %s. Version disponible : %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "La librairie %s doit avoir une version antérieure à %s. Version disponible : %s.",
+ "Following platforms are supported: %s" : "Les plateformes suivantes sont prises en charge: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s ou supérieur est requis.",
+ "ownCloud with a version lower than %s is required." : "Une version antérieure à %s d'ownCloud est requise.",
"Help" : "Aide",
"Personal" : "Personnel",
"Settings" : "Paramètres",
@@ -14,16 +24,29 @@ OC.L10N.register(
"Admin" : "Administration",
"Recommended" : "Recommandée",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'application \\\"%s\\\" ne peut pas être installée car elle n'est pas compatible avec cette version de ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "L'application \\\"%s\\\" ne peut être installée à cause des dépendances non satisfaites suivantes: %s",
"No app name specified" : "Aucun nom d'application spécifié",
"Unknown filetype" : "Type de fichier inconnu",
"Invalid image" : "Image non valable",
+ "today" : "aujourd'hui",
+ "yesterday" : "hier",
+ "_%n day ago_::_%n days ago_" : ["il y a %n jour","il y a %n jours"],
+ "last month" : "le mois dernier",
+ "_%n month ago_::_%n months ago_" : ["","Il y a %n mois"],
+ "last year" : "l'année dernière",
+ "_%n year ago_::_%n years ago_" : ["il y a %n an","il y a %n ans"],
+ "_%n hour ago_::_%n hours ago_" : ["","Il y a %n heures"],
+ "_%n minute ago_::_%n minutes ago_" : ["","il y a %n minutes"],
+ "seconds ago" : "il y a quelques secondes",
+ "Database Error" : "Erreur dans la base de données",
+ "Please contact your system administrator." : "Veuillez contacter votre administrateur système.",
"web services under your control" : "services web sous votre contrôle",
"App directory already exists" : "Le dossier de l'application existe déjà",
"Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
"No source specified when installing app" : "Aucune source spécifiée pour installer l'application",
"No href specified when installing app from http" : "Aucun href spécifié pour installer l'application par http",
"No path specified when installing app from local file" : "Aucun chemin spécifié pour installer l'application depuis un fichier local",
- "Archives of type %s are not supported" : "Les archives de type %s ne sont pas supportées",
+ "Archives of type %s are not supported" : "Les archives de type %s ne sont pas prises en charge",
"Failed to open archive when installing app" : "Échec de l'ouverture de l'archive lors de l'installation de l'application",
"App does not provide an info.xml file" : "L'application ne fournit pas de fichier info.xml",
"App can't be installed because of not allowed code in the App" : "L'application ne peut être installée car elle contient du code non-autorisé",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Spécifiez un mot de passe administrateur.",
"Can't create or write into the data directory %s" : "Impossible de créer ou d'écrire dans le répertoire des données %s",
"%s shared »%s« with you" : "%s partagé »%s« avec vous",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Le partage de %s a échoué car l’infrastructure n'autorise pas les partages de type %i",
"Sharing %s failed, because the file does not exist" : "Le partage de %s a échoué car le fichier n'existe pas",
"You are not allowed to share %s" : "Vous n'êtes pas autorisé à partager %s",
"Sharing %s failed, because the user %s is the item owner" : "Le partage de %s a échoué car l'utilisateur %s est le propriétaire de l'objet",
@@ -62,8 +86,9 @@ OC.L10N.register(
"Sharing %s failed, because this item is already shared with %s" : "Le partage de %s a échoué car cet objet est déjà partagé avec %s",
"Sharing %s failed, because the group %s does not exist" : "Le partage de %s a échoué car le groupe %s n'existe pas",
"Sharing %s failed, because %s is not a member of the group %s" : "Le partage de %s a échoué car %s n'est pas membre du groupe %s",
- "You need to provide a password to create a public link, only protected links are allowed" : "Vous devez fournir un mot de passe pour créer un lien public, seul les liens protégés sont autorisées.",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Vous devez fournir un mot de passe pour créer un lien public, seuls les liens protégés sont autorisées.",
"Sharing %s failed, because sharing with links is not allowed" : "Le partage de %s a échoué car le partage par lien n'est pas permis",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Le partage de %s a échoué : impossible de trouver %s. Peut-être le serveur est-il momentanément injoignable.",
"Share type %s is not valid for %s" : "Le type de partage %s n'est pas valide pour %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Le réglage des permissions pour %s a échoué car les permissions dépassent celles accordées à %s",
"Setting permissions for %s failed, because the item was not found" : "Le réglage des permissions pour %s a échoué car l'objet n'a pas été trouvé",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Le partage %s a échoué parce que la source n'a été trouvée pour le partage %s.",
"Sharing %s failed, because the file could not be found in the file cache" : "Le partage de %s a échoué car le fichier n'a pas été trouvé dans les fichiers mis en cache.",
"Could not find category \"%s\"" : "Impossible de trouver la catégorie \"%s\"",
- "seconds ago" : "il y a quelques secondes",
- "_%n minute ago_::_%n minutes ago_" : ["","il y a %n minutes"],
- "_%n hour ago_::_%n hours ago_" : ["","Il y a %n heures"],
- "today" : "aujourd'hui",
- "yesterday" : "hier",
- "_%n day go_::_%n days ago_" : ["","il y a %n jours"],
- "last month" : "le mois dernier",
- "_%n month ago_::_%n months ago_" : ["","Il y a %n mois"],
- "last year" : "l'année dernière",
- "years ago" : "il y a plusieurs années",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Seuls les caractères suivants sont autorisés dans un nom d'utilisateur : \"a-z\", \"A-Z\", \"0-9\", et \"_.@-\"",
"A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi",
"A valid password must be provided" : "Un mot de passe valide doit être saisi",
@@ -100,15 +115,10 @@ OC.L10N.register(
"Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\">en donnant au serveur web un accès en écriture au répertoire racine</a>.",
"Setting locale to %s failed" : "Le choix de la langue pour %s a échoué",
- "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'une de ces langues sur votre système et redémarrer votre serveur web.",
+ "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.",
"Please ask your server administrator to install the module." : "Veuillez demander à votre administrateur d’installer le module.",
"PHP module %s not installed." : "Le module PHP %s n’est pas installé.",
- "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
- "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Veuillez demander à votre administrateur de mettre à jour PHP vers sa dernière version disponible. La vôtre n’est plus supportée par ownCloud, de même que par la communauté PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode est activé. ownCloud requiert sa désactivation afin de fonctionner correctement.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode est déprécié, inutile la plupart du temps, et doit être désactivé. Veuillez demander à votre administrateur serveur de le désactiver dans le fichier php.ini ou dans votre configuration du serveur web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes est activé. ownCloud requiert sa désactivation afin de fonctionner correctement.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes est déprécié, inutile la plupart du temps, et doit être désactivé. Veuillez demander à votre administrateur serveur de le désactiver dans le fichier php.ini ou dans votre configuration du serveur web.",
+ "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Veuillez demander à votre administrateur de mettre à jour PHP vers sa dernière version disponible. La vôtre n’est plus prise en charge par ownCloud ni par la communauté PHP.",
"PHP modules have been installed, but they are still listed as missing?" : "Les modules PHP ont été installés mais sont toujours indiqués comme manquants ?",
"Please ask your server administrator to restart the web server." : "Veuillez demander à votre administrateur serveur de redémarrer le serveur web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requis",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 51452abce9e..527b58b909d 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -1,10 +1,20 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Impossible d’écrire dans le répertoire « config » !",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture à ce répertoire",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire \"config\"",
"See %s" : "Voir %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire de configuration%s.",
"Sample configuration detected" : "Configuration d'exemple détectée",
"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" : "Il a été détecté que la configuration donnée à titre d'exemple a été copiée. Cela peut rendre votre installation inopérante et n'est pas pris en charge. Veuillez lire la documentation avant d'effectuer des modifications dans config.php",
+ "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
+ "PHP with a version lower than %s is required." : "PHP avec une version antérieure à %s est requis.",
+ "Following databases are supported: %s" : "Les bases de données suivantes sont supportées: %s",
+ "The command line tool %s could not be found" : "La commande %s est introuvable",
+ "The library %s is not available." : "La librairie %s n'est pas disponible.",
+ "Library %s with a version higher than %s is required - available version %s." : "La librairie %s doit être au moins à la version %s. Version disponible : %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "La librairie %s doit avoir une version antérieure à %s. Version disponible : %s.",
+ "Following platforms are supported: %s" : "Les plateformes suivantes sont prises en charge: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s ou supérieur est requis.",
+ "ownCloud with a version lower than %s is required." : "Une version antérieure à %s d'ownCloud est requise.",
"Help" : "Aide",
"Personal" : "Personnel",
"Settings" : "Paramètres",
@@ -12,16 +22,29 @@
"Admin" : "Administration",
"Recommended" : "Recommandée",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'application \\\"%s\\\" ne peut pas être installée car elle n'est pas compatible avec cette version de ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "L'application \\\"%s\\\" ne peut être installée à cause des dépendances non satisfaites suivantes: %s",
"No app name specified" : "Aucun nom d'application spécifié",
"Unknown filetype" : "Type de fichier inconnu",
"Invalid image" : "Image non valable",
+ "today" : "aujourd'hui",
+ "yesterday" : "hier",
+ "_%n day ago_::_%n days ago_" : ["il y a %n jour","il y a %n jours"],
+ "last month" : "le mois dernier",
+ "_%n month ago_::_%n months ago_" : ["","Il y a %n mois"],
+ "last year" : "l'année dernière",
+ "_%n year ago_::_%n years ago_" : ["il y a %n an","il y a %n ans"],
+ "_%n hour ago_::_%n hours ago_" : ["","Il y a %n heures"],
+ "_%n minute ago_::_%n minutes ago_" : ["","il y a %n minutes"],
+ "seconds ago" : "il y a quelques secondes",
+ "Database Error" : "Erreur dans la base de données",
+ "Please contact your system administrator." : "Veuillez contacter votre administrateur système.",
"web services under your control" : "services web sous votre contrôle",
"App directory already exists" : "Le dossier de l'application existe déjà",
"Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
"No source specified when installing app" : "Aucune source spécifiée pour installer l'application",
"No href specified when installing app from http" : "Aucun href spécifié pour installer l'application par http",
"No path specified when installing app from local file" : "Aucun chemin spécifié pour installer l'application depuis un fichier local",
- "Archives of type %s are not supported" : "Les archives de type %s ne sont pas supportées",
+ "Archives of type %s are not supported" : "Les archives de type %s ne sont pas prises en charge",
"Failed to open archive when installing app" : "Échec de l'ouverture de l'archive lors de l'installation de l'application",
"App does not provide an info.xml file" : "L'application ne fournit pas de fichier info.xml",
"App can't be installed because of not allowed code in the App" : "L'application ne peut être installée car elle contient du code non-autorisé",
@@ -52,6 +75,7 @@
"Set an admin password." : "Spécifiez un mot de passe administrateur.",
"Can't create or write into the data directory %s" : "Impossible de créer ou d'écrire dans le répertoire des données %s",
"%s shared »%s« with you" : "%s partagé »%s« avec vous",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Le partage de %s a échoué car l’infrastructure n'autorise pas les partages de type %i",
"Sharing %s failed, because the file does not exist" : "Le partage de %s a échoué car le fichier n'existe pas",
"You are not allowed to share %s" : "Vous n'êtes pas autorisé à partager %s",
"Sharing %s failed, because the user %s is the item owner" : "Le partage de %s a échoué car l'utilisateur %s est le propriétaire de l'objet",
@@ -60,8 +84,9 @@
"Sharing %s failed, because this item is already shared with %s" : "Le partage de %s a échoué car cet objet est déjà partagé avec %s",
"Sharing %s failed, because the group %s does not exist" : "Le partage de %s a échoué car le groupe %s n'existe pas",
"Sharing %s failed, because %s is not a member of the group %s" : "Le partage de %s a échoué car %s n'est pas membre du groupe %s",
- "You need to provide a password to create a public link, only protected links are allowed" : "Vous devez fournir un mot de passe pour créer un lien public, seul les liens protégés sont autorisées.",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Vous devez fournir un mot de passe pour créer un lien public, seuls les liens protégés sont autorisées.",
"Sharing %s failed, because sharing with links is not allowed" : "Le partage de %s a échoué car le partage par lien n'est pas permis",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Le partage de %s a échoué : impossible de trouver %s. Peut-être le serveur est-il momentanément injoignable.",
"Share type %s is not valid for %s" : "Le type de partage %s n'est pas valide pour %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Le réglage des permissions pour %s a échoué car les permissions dépassent celles accordées à %s",
"Setting permissions for %s failed, because the item was not found" : "Le réglage des permissions pour %s a échoué car l'objet n'a pas été trouvé",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Le partage %s a échoué parce que la source n'a été trouvée pour le partage %s.",
"Sharing %s failed, because the file could not be found in the file cache" : "Le partage de %s a échoué car le fichier n'a pas été trouvé dans les fichiers mis en cache.",
"Could not find category \"%s\"" : "Impossible de trouver la catégorie \"%s\"",
- "seconds ago" : "il y a quelques secondes",
- "_%n minute ago_::_%n minutes ago_" : ["","il y a %n minutes"],
- "_%n hour ago_::_%n hours ago_" : ["","Il y a %n heures"],
- "today" : "aujourd'hui",
- "yesterday" : "hier",
- "_%n day go_::_%n days ago_" : ["","il y a %n jours"],
- "last month" : "le mois dernier",
- "_%n month ago_::_%n months ago_" : ["","Il y a %n mois"],
- "last year" : "l'année dernière",
- "years ago" : "il y a plusieurs années",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Seuls les caractères suivants sont autorisés dans un nom d'utilisateur : \"a-z\", \"A-Z\", \"0-9\", et \"_.@-\"",
"A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi",
"A valid password must be provided" : "Un mot de passe valide doit être saisi",
@@ -98,15 +113,10 @@
"Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\">en donnant au serveur web un accès en écriture au répertoire racine</a>.",
"Setting locale to %s failed" : "Le choix de la langue pour %s a échoué",
- "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'une de ces langues sur votre système et redémarrer votre serveur web.",
+ "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.",
"Please ask your server administrator to install the module." : "Veuillez demander à votre administrateur d’installer le module.",
"PHP module %s not installed." : "Le module PHP %s n’est pas installé.",
- "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
- "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Veuillez demander à votre administrateur de mettre à jour PHP vers sa dernière version disponible. La vôtre n’est plus supportée par ownCloud, de même que par la communauté PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode est activé. ownCloud requiert sa désactivation afin de fonctionner correctement.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode est déprécié, inutile la plupart du temps, et doit être désactivé. Veuillez demander à votre administrateur serveur de le désactiver dans le fichier php.ini ou dans votre configuration du serveur web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes est activé. ownCloud requiert sa désactivation afin de fonctionner correctement.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes est déprécié, inutile la plupart du temps, et doit être désactivé. Veuillez demander à votre administrateur serveur de le désactiver dans le fichier php.ini ou dans votre configuration du serveur web.",
+ "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Veuillez demander à votre administrateur de mettre à jour PHP vers sa dernière version disponible. La vôtre n’est plus prise en charge par ownCloud ni par la communauté PHP.",
"PHP modules have been installed, but they are still listed as missing?" : "Les modules PHP ont été installés mais sont toujours indiqués comme manquants ?",
"Please ask your server administrator to restart the web server." : "Veuillez demander à votre administrateur serveur de redémarrer le serveur web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requis",
diff --git a/lib/l10n/fr_CA.js b/lib/l10n/fr_CA.js
index 9ac3e05d6c6..9408adc0dc3 100644
--- a/lib/l10n/fr_CA.js
+++ b/lib/l10n/fr_CA.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/fr_CA.json b/lib/l10n/fr_CA.json
index 82a8a99d300..2a227e468c7 100644
--- a/lib/l10n/fr_CA.json
+++ b/lib/l10n/fr_CA.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fy_NL.js b/lib/l10n/fy_NL.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/fy_NL.js
+++ b/lib/l10n/fy_NL.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/fy_NL.json b/lib/l10n/fy_NL.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/fy_NL.json
+++ b/lib/l10n/fy_NL.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/gl.js b/lib/l10n/gl.js
index 24d4ba9a600..cd12866e002 100644
--- a/lib/l10n/gl.js
+++ b/lib/l10n/gl.js
@@ -5,15 +5,41 @@ OC.L10N.register(
"This can usually be fixed by giving the webserver write access to the config directory" : "Polo xeral, isto pode ser fixado para permitirlle ao servidor web acceso de escritura ao directorio «config»",
"See %s" : "Vexa %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «config»%s.",
+ "Sample configuration detected" : "Detectouse a configuración de exemplo",
+ "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" : "Detectouse que foi copiada a configuración de exemplo. Isto pode rachar a súa instalación e non é compatíbel. Lea a documentación antes de facer cambios en config.php",
+ "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
+ "PHP with a version lower than %s is required." : "Requírese PHP cunha versión inferior a %s.",
+ "Following databases are supported: %s" : "Admítense as seguintes bases de datos: %s",
+ "The command line tool %s could not be found" : "Non foi posíbel atopar a ferramenta de liña de ordes %s",
+ "The library %s is not available." : "Non está dispoñíbel a biblioteca %s.",
+ "Library %s with a version higher than %s is required - available version %s." : "Requírese a biblioteca %s cunha versión superior a %s - dispoñíbel a versión %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Requírese a biblioteca %s cunha versión inferior a %s - dispoñíbel a versión %s.",
+ "Following platforms are supported: %s" : "Admítense as seguintes plataformas: %s",
+ "ownCloud %s or higher is required." : "Requírese ownCloud %s ou superior.",
+ "ownCloud with a version lower than %s is required." : "Requírese ownCloud cunha versión inferior a %s.",
"Help" : "Axuda",
"Personal" : "Persoal",
"Settings" : "Axustes",
"Users" : "Usuarios",
"Admin" : "Administración",
+ "Recommended" : "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Non é posíbel instalar a aplicación «%s» por non seren compatíbel con esta versión do ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Non é posíbel instalar a aplicación «%s» por mor de non cumprirse as dependencias: %s",
"No app name specified" : "Non se especificou o nome da aplicación",
"Unknown filetype" : "Tipo de ficheiro descoñecido",
"Invalid image" : "Imaxe incorrecta",
+ "today" : "hoxe",
+ "yesterday" : "onte",
+ "_%n day ago_::_%n days ago_" : ["hai %n día","hai %n días"],
+ "last month" : "último mes",
+ "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
+ "last year" : "último ano",
+ "_%n year ago_::_%n years ago_" : ["hai %n ano","hai %n anos"],
+ "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["hai %n minuto","hai %n minutos"],
+ "seconds ago" : "segundos atrás",
+ "Database Error" : "Produciuse un erro na base de datos",
+ "Please contact your system administrator." : "Contacte co administrador.",
"web services under your control" : "servizos web baixo o seu control",
"App directory already exists" : "Xa existe o directorio da aplicación",
"Can't create app folder. Please fix permissions. %s" : "Non é posíbel crear o cartafol de aplicacións. Corrixa os permisos. %s",
@@ -44,12 +70,14 @@ OC.L10N.register(
"MySQL/MariaDB user '%s'@'%%' already exists" : "Xa existe o usuario «%s»@«%%» no MySQL/MariaDB",
"Drop this user from MySQL/MariaDB." : "Eliminar este usuario do MySQL/MariaDB.",
"Oracle connection could not be established" : "Non foi posíbel estabelecer a conexión con Oracle",
- "Oracle username and/or password not valid" : "Nome de usuario e/ou contrasinal de Oracle incorrecto",
+ "Oracle username and/or password not valid" : "O nome de usuario e/ou contrasinal de Oracle é incorrecto",
"Offending command was: \"%s\", name: %s, password: %s" : "A orde infractora foi: «%s», nome: %s, contrasinal: %s",
"PostgreSQL username and/or password not valid" : "Nome de usuario e/ou contrasinal de PostgreSQL incorrecto",
"Set an admin username." : "Estabeleza un nome de usuario administrador",
"Set an admin password." : "Estabeleza un contrasinal de administrador",
+ "Can't create or write into the data directory %s" : "Non é posíbel crear ou escribir o directorio «data» %s",
"%s shared »%s« with you" : "%s compartiu «%s» con vostede",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Fallou a compartición de %s, xa que a infraestrutura non permite accións do tipo %i",
"Sharing %s failed, because the file does not exist" : "Fallou a compartición de %s, o ficheiro non existe",
"You are not allowed to share %s" : "Non ten permiso para compartir %s",
"Sharing %s failed, because the user %s is the item owner" : "Fallou a compartición de %s, o propietario do elemento é o usuario %s",
@@ -60,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Fallou a compartición de %s, %s non é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Ten que fornecer un contrasinal para a ligazón pública, só se permiten ligazóns protexidas",
"Sharing %s failed, because sharing with links is not allowed" : "Fallou a compartición de %s, non está permitido compartir con ligazóns",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Fallou a compartición de %s, non foi posíbel atopar %s,é probábel que o servidor non estea accesíbel.",
"Share type %s is not valid for %s" : "Non se admite a compartición do tipo %s para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Non é posíbel estabelecer permisos para %s, os permisos superan os permisos concedidos a %s",
"Setting permissions for %s failed, because the item was not found" : "Non é posíbel estabelecer permisos para %s, non se atopa o elemento",
@@ -74,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Fallou a compartición de %s, a infraestrutura de compartición para %s non foi quen de atopar a orixe",
"Sharing %s failed, because the file could not be found in the file cache" : "Fallou a compartición de %s, non foi posíbel atopar o ficheiro na caché de ficheiros",
"Could not find category \"%s\"" : "Non foi posíbel atopar a categoría «%s»",
- "seconds ago" : "segundos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["hai %n minuto","hai %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n horas"],
- "today" : "hoxe",
- "yesterday" : "onte",
- "_%n day go_::_%n days ago_" : ["hai %n día","vai %n días"],
- "last month" : "último mes",
- "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
- "last year" : "último ano",
- "years ago" : "anos atrás",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Só se permiten os seguintes caracteres no nome de usuario: «a-z», «A-Z», «0-9», e «_.@-»",
"A valid username must be provided" : "Debe fornecer un nome de usuario",
"A valid password must be provided" : "Debe fornecer un contrasinal",
@@ -99,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Instale unha destas configuracións locais no seu sistema e reinicie o servidor web.",
"Please ask your server administrator to install the module." : "Pregúntelle ao administrador do servidor pola instalación do módulo.",
"PHP module %s not installed." : "O módulo PHP %s non está instalado.",
- "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pregúntelle ao administrador do servidor pola actualización de PHP á versión máis recente. A súa versión de PHP xa non é asistida polas comunidades de ownCloud e PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activado. ownCloud precisa que estea desactivado para traballar doadamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro de PHP é un entorno en desuso e maiormente inútil que ten que seren desactivado. Pregúntelle ao administrador do servidor pola desactivación en php.ini ou na configuración do servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "«Magic Quotes» está activado. ownCloud precisa que estea desactivado para traballar doadamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "«Magic Quotes» é un entorno en desuso e maiormente inútil que ten que seren desactivado. Pregúntelle ao administrador do servidor pola desactivación en php.ini ou na configuración do servidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Instaláronse os módulos de PHP, mais aínda aparecen listados como perdidos?",
"Please ask your server administrator to restart the web server." : "Pregúntelle ao administrador do servidor polo reinicio do servidor web..",
"PostgreSQL >= 9 required" : "Requírese PostgreSQL >= 9",
diff --git a/lib/l10n/gl.json b/lib/l10n/gl.json
index 24815e3a085..1b8900c95f6 100644
--- a/lib/l10n/gl.json
+++ b/lib/l10n/gl.json
@@ -3,15 +3,41 @@
"This can usually be fixed by giving the webserver write access to the config directory" : "Polo xeral, isto pode ser fixado para permitirlle ao servidor web acceso de escritura ao directorio «config»",
"See %s" : "Vexa %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «config»%s.",
+ "Sample configuration detected" : "Detectouse a configuración de exemplo",
+ "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" : "Detectouse que foi copiada a configuración de exemplo. Isto pode rachar a súa instalación e non é compatíbel. Lea a documentación antes de facer cambios en config.php",
+ "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
+ "PHP with a version lower than %s is required." : "Requírese PHP cunha versión inferior a %s.",
+ "Following databases are supported: %s" : "Admítense as seguintes bases de datos: %s",
+ "The command line tool %s could not be found" : "Non foi posíbel atopar a ferramenta de liña de ordes %s",
+ "The library %s is not available." : "Non está dispoñíbel a biblioteca %s.",
+ "Library %s with a version higher than %s is required - available version %s." : "Requírese a biblioteca %s cunha versión superior a %s - dispoñíbel a versión %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Requírese a biblioteca %s cunha versión inferior a %s - dispoñíbel a versión %s.",
+ "Following platforms are supported: %s" : "Admítense as seguintes plataformas: %s",
+ "ownCloud %s or higher is required." : "Requírese ownCloud %s ou superior.",
+ "ownCloud with a version lower than %s is required." : "Requírese ownCloud cunha versión inferior a %s.",
"Help" : "Axuda",
"Personal" : "Persoal",
"Settings" : "Axustes",
"Users" : "Usuarios",
"Admin" : "Administración",
+ "Recommended" : "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Non é posíbel instalar a aplicación «%s» por non seren compatíbel con esta versión do ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Non é posíbel instalar a aplicación «%s» por mor de non cumprirse as dependencias: %s",
"No app name specified" : "Non se especificou o nome da aplicación",
"Unknown filetype" : "Tipo de ficheiro descoñecido",
"Invalid image" : "Imaxe incorrecta",
+ "today" : "hoxe",
+ "yesterday" : "onte",
+ "_%n day ago_::_%n days ago_" : ["hai %n día","hai %n días"],
+ "last month" : "último mes",
+ "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
+ "last year" : "último ano",
+ "_%n year ago_::_%n years ago_" : ["hai %n ano","hai %n anos"],
+ "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["hai %n minuto","hai %n minutos"],
+ "seconds ago" : "segundos atrás",
+ "Database Error" : "Produciuse un erro na base de datos",
+ "Please contact your system administrator." : "Contacte co administrador.",
"web services under your control" : "servizos web baixo o seu control",
"App directory already exists" : "Xa existe o directorio da aplicación",
"Can't create app folder. Please fix permissions. %s" : "Non é posíbel crear o cartafol de aplicacións. Corrixa os permisos. %s",
@@ -42,12 +68,14 @@
"MySQL/MariaDB user '%s'@'%%' already exists" : "Xa existe o usuario «%s»@«%%» no MySQL/MariaDB",
"Drop this user from MySQL/MariaDB." : "Eliminar este usuario do MySQL/MariaDB.",
"Oracle connection could not be established" : "Non foi posíbel estabelecer a conexión con Oracle",
- "Oracle username and/or password not valid" : "Nome de usuario e/ou contrasinal de Oracle incorrecto",
+ "Oracle username and/or password not valid" : "O nome de usuario e/ou contrasinal de Oracle é incorrecto",
"Offending command was: \"%s\", name: %s, password: %s" : "A orde infractora foi: «%s», nome: %s, contrasinal: %s",
"PostgreSQL username and/or password not valid" : "Nome de usuario e/ou contrasinal de PostgreSQL incorrecto",
"Set an admin username." : "Estabeleza un nome de usuario administrador",
"Set an admin password." : "Estabeleza un contrasinal de administrador",
+ "Can't create or write into the data directory %s" : "Non é posíbel crear ou escribir o directorio «data» %s",
"%s shared »%s« with you" : "%s compartiu «%s» con vostede",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Fallou a compartición de %s, xa que a infraestrutura non permite accións do tipo %i",
"Sharing %s failed, because the file does not exist" : "Fallou a compartición de %s, o ficheiro non existe",
"You are not allowed to share %s" : "Non ten permiso para compartir %s",
"Sharing %s failed, because the user %s is the item owner" : "Fallou a compartición de %s, o propietario do elemento é o usuario %s",
@@ -58,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Fallou a compartición de %s, %s non é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Ten que fornecer un contrasinal para a ligazón pública, só se permiten ligazóns protexidas",
"Sharing %s failed, because sharing with links is not allowed" : "Fallou a compartición de %s, non está permitido compartir con ligazóns",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Fallou a compartición de %s, non foi posíbel atopar %s,é probábel que o servidor non estea accesíbel.",
"Share type %s is not valid for %s" : "Non se admite a compartición do tipo %s para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Non é posíbel estabelecer permisos para %s, os permisos superan os permisos concedidos a %s",
"Setting permissions for %s failed, because the item was not found" : "Non é posíbel estabelecer permisos para %s, non se atopa o elemento",
@@ -72,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Fallou a compartición de %s, a infraestrutura de compartición para %s non foi quen de atopar a orixe",
"Sharing %s failed, because the file could not be found in the file cache" : "Fallou a compartición de %s, non foi posíbel atopar o ficheiro na caché de ficheiros",
"Could not find category \"%s\"" : "Non foi posíbel atopar a categoría «%s»",
- "seconds ago" : "segundos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["hai %n minuto","hai %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n horas"],
- "today" : "hoxe",
- "yesterday" : "onte",
- "_%n day go_::_%n days ago_" : ["hai %n día","vai %n días"],
- "last month" : "último mes",
- "_%n month ago_::_%n months ago_" : ["hai %n mes","hai %n meses"],
- "last year" : "último ano",
- "years ago" : "anos atrás",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Só se permiten os seguintes caracteres no nome de usuario: «a-z», «A-Z», «0-9», e «_.@-»",
"A valid username must be provided" : "Debe fornecer un nome de usuario",
"A valid password must be provided" : "Debe fornecer un contrasinal",
@@ -97,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Instale unha destas configuracións locais no seu sistema e reinicie o servidor web.",
"Please ask your server administrator to install the module." : "Pregúntelle ao administrador do servidor pola instalación do módulo.",
"PHP module %s not installed." : "O módulo PHP %s non está instalado.",
- "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pregúntelle ao administrador do servidor pola actualización de PHP á versión máis recente. A súa versión de PHP xa non é asistida polas comunidades de ownCloud e PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activado. ownCloud precisa que estea desactivado para traballar doadamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro de PHP é un entorno en desuso e maiormente inútil que ten que seren desactivado. Pregúntelle ao administrador do servidor pola desactivación en php.ini ou na configuración do servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "«Magic Quotes» está activado. ownCloud precisa que estea desactivado para traballar doadamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "«Magic Quotes» é un entorno en desuso e maiormente inútil que ten que seren desactivado. Pregúntelle ao administrador do servidor pola desactivación en php.ini ou na configuración do servidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Instaláronse os módulos de PHP, mais aínda aparecen listados como perdidos?",
"Please ask your server administrator to restart the web server." : "Pregúntelle ao administrador do servidor polo reinicio do servidor web..",
"PostgreSQL >= 9 required" : "Requírese PostgreSQL >= 9",
diff --git a/lib/l10n/gu.js b/lib/l10n/gu.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/gu.js
+++ b/lib/l10n/gu.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/gu.json b/lib/l10n/gu.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/gu.json
+++ b/lib/l10n/gu.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/he.js b/lib/l10n/he.js
index c34ce27bb01..200d3d7035a 100644
--- a/lib/l10n/he.js
+++ b/lib/l10n/he.js
@@ -6,22 +6,22 @@ OC.L10N.register(
"Settings" : "הגדרות",
"Users" : "משתמשים",
"Admin" : "מנהל",
+ "today" : "היום",
+ "yesterday" : "אתמול",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "חודש שעבר",
+ "_%n month ago_::_%n months ago_" : ["","לפני %n חודשים"],
+ "last year" : "שנה שעברה",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","לפני %n שעות"],
+ "_%n minute ago_::_%n minutes ago_" : ["","לפני %n דקות"],
+ "seconds ago" : "שניות",
"web services under your control" : "שירותי רשת תחת השליטה שלך",
"Application is not enabled" : "יישומים אינם מופעלים",
"Authentication error" : "שגיאת הזדהות",
"Token expired. Please reload page." : "פג תוקף. נא לטעון שוב את הדף.",
"%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
"Could not find category \"%s\"" : "לא ניתן למצוא את הקטגוריה „%s“",
- "seconds ago" : "שניות",
- "_%n minute ago_::_%n minutes ago_" : ["","לפני %n דקות"],
- "_%n hour ago_::_%n hours ago_" : ["","לפני %n שעות"],
- "today" : "היום",
- "yesterday" : "אתמול",
- "_%n day go_::_%n days ago_" : ["","לפני %n ימים"],
- "last month" : "חודש שעבר",
- "_%n month ago_::_%n months ago_" : ["","לפני %n חודשים"],
- "last year" : "שנה שעברה",
- "years ago" : "שנים",
"A valid username must be provided" : "יש לספק שם משתמש תקני",
"A valid password must be provided" : "יש לספק ססמה תקנית"
},
diff --git a/lib/l10n/he.json b/lib/l10n/he.json
index c97d585b901..0cadc7beba2 100644
--- a/lib/l10n/he.json
+++ b/lib/l10n/he.json
@@ -4,22 +4,22 @@
"Settings" : "הגדרות",
"Users" : "משתמשים",
"Admin" : "מנהל",
+ "today" : "היום",
+ "yesterday" : "אתמול",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "חודש שעבר",
+ "_%n month ago_::_%n months ago_" : ["","לפני %n חודשים"],
+ "last year" : "שנה שעברה",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","לפני %n שעות"],
+ "_%n minute ago_::_%n minutes ago_" : ["","לפני %n דקות"],
+ "seconds ago" : "שניות",
"web services under your control" : "שירותי רשת תחת השליטה שלך",
"Application is not enabled" : "יישומים אינם מופעלים",
"Authentication error" : "שגיאת הזדהות",
"Token expired. Please reload page." : "פג תוקף. נא לטעון שוב את הדף.",
"%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
"Could not find category \"%s\"" : "לא ניתן למצוא את הקטגוריה „%s“",
- "seconds ago" : "שניות",
- "_%n minute ago_::_%n minutes ago_" : ["","לפני %n דקות"],
- "_%n hour ago_::_%n hours ago_" : ["","לפני %n שעות"],
- "today" : "היום",
- "yesterday" : "אתמול",
- "_%n day go_::_%n days ago_" : ["","לפני %n ימים"],
- "last month" : "חודש שעבר",
- "_%n month ago_::_%n months ago_" : ["","לפני %n חודשים"],
- "last year" : "שנה שעברה",
- "years ago" : "שנים",
"A valid username must be provided" : "יש לספק שם משתמש תקני",
"A valid password must be provided" : "יש לספק ססמה תקנית"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/lib/l10n/hi.js b/lib/l10n/hi.js
index cc987c48024..fdc0ecac1a2 100644
--- a/lib/l10n/hi.js
+++ b/lib/l10n/hi.js
@@ -5,9 +5,10 @@ OC.L10N.register(
"Personal" : "यक्तिगत",
"Settings" : "सेटिंग्स",
"Users" : "उपयोगकर्ता",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/hi.json b/lib/l10n/hi.json
index bf18b7731ad..b231ead2917 100644
--- a/lib/l10n/hi.json
+++ b/lib/l10n/hi.json
@@ -3,9 +3,10 @@
"Personal" : "यक्तिगत",
"Settings" : "सेटिंग्स",
"Users" : "उपयोगकर्ता",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/hi_IN.php b/lib/l10n/hi_IN.php
deleted file mode 100644
index 15f78e0bce6..00000000000
--- a/lib/l10n/hi_IN.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
-"_%n day go_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/hr.js b/lib/l10n/hr.js
index ead1e15d2cf..03323882399 100644
--- a/lib/l10n/hr.js
+++ b/lib/l10n/hr.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ovo se obično može popraviti %sdavanjem pristupa web poslužitelju za pisanje u config direktoriju%s.",
"Sample configuration detected" : "Nađena ogledna konfiguracija",
"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" : "Otkriveno je da je ogledna konfiguracija kopirana. To može vašu instalaciju prekinuti i nije podržano.Molimo pročitajte dokumentaciju prije nego li izvršite promjene na config.php",
+ "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Help" : "Pomoć",
"Personal" : "Osobno",
"Settings" : "Postavke",
@@ -16,6 +17,16 @@ OC.L10N.register(
"No app name specified" : "Nikakav naziv aplikacije nije naveden",
"Unknown filetype" : "Vrsta datoteke nepoznata",
"Invalid image" : "Neispravna slika",
+ "today" : "Danas",
+ "yesterday" : "Jučer",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "Prošli mjesec",
+ "_%n month ago_::_%n months ago_" : ["prije %n mjeseca","prije %n mjeseci","prije %n mjeseci"],
+ "last year" : "Prošle godine",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["prije %n sata","prije %n sati","prije %n sati"],
+ "_%n minute ago_::_%n minutes ago_" : ["prije %n minute","prije %n minuta","prije %n minuta"],
+ "seconds ago" : "prije par sekundi",
"web services under your control" : "web usluge pod vašom kontrolom",
"App directory already exists" : "Direktorij aplikacije već postoji",
"Can't create app folder. Please fix permissions. %s" : "Nije moguće kreirati mapu aplikacija. molimo popravite dozvole. %s",
@@ -76,16 +87,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Dijeljenje %s nije uspjelo jer pozadina za %s nije mogla pronaći svoj izvor",
"Sharing %s failed, because the file could not be found in the file cache" : "Dijeljenje %s nije uspjelo jer u predmemoriji datoteke datoteka nije nađena.",
"Could not find category \"%s\"" : "Kategorija \"%s\" nije nađena",
- "seconds ago" : "prije par sekundi",
- "_%n minute ago_::_%n minutes ago_" : ["prije %n minute","prije %n minuta","prije %n minuta"],
- "_%n hour ago_::_%n hours ago_" : ["prije %n sata","prije %n sati","prije %n sati"],
- "today" : "Danas",
- "yesterday" : "Jučer",
- "_%n day go_::_%n days ago_" : ["prije %n dana","prije %n dana","prije %n dana"],
- "last month" : "Prošli mjesec",
- "_%n month ago_::_%n months ago_" : ["prije %n mjeseca","prije %n mjeseci","prije %n mjeseci"],
- "last year" : "Prošle godine",
- "years ago" : "Prije više godina",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Samo su sljedeći znakovi dopušteni u korisničkom imenu: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Nužno je navesti ispravno korisničko ime",
"A valid password must be provided" : "Nužno je navesti ispravnu lozinku",
@@ -101,12 +102,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Molimo instalirajte jednu od ovih regionalnih shema u svoj sustav i ponovno pokrenite svoj web poslužitelj.",
"Please ask your server administrator to install the module." : "Molimo zamolite svog administratora poslužitelja da instalira modul.",
"PHP module %s not installed." : "PHP modul %s nije instaliran.",
- "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Molimo zamolite svog administratora poslužitelja da ažurira PHP na najnoviju verziju.Vašu PHP verziju ownCloud i PHP zajednica više ne podržavaju.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Aktiviran je PHP siguran način rada. Da bi ownCloud radio kako treba, taj mod treba oemogućiti.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP siguran način rada je zastarjela i uglavnom beskorisna postavka koju treba onemogućiti. Molimo zamolite svogadministratora poslužitelja da je onemogući, bilo u php.ini ili u vašoj konfiguraciji web poslužitelja.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Postavka Magic Quotes je omogućena. Da bi ownCloud radio kako treba, tu postavku treba onemogućiti.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes je zastarjela i uglavnom beskorisna postavka koju treba onemogućiti. MOlimo zamolite svogadministratora poslužitelja da je onemogući, bilo u php.ini ili u vašoj konfiguraciji web poslužitelja.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduli su instalirani, ali još uvijek su na popisu onih koji nedostaju?",
"Please ask your server administrator to restart the web server." : "Molimo zamolite svog administratora poslužitelja da ponovno pokrene web poslužitelj.",
"PostgreSQL >= 9 required" : "Potreban je PostgreSQL >= 9",
diff --git a/lib/l10n/hr.json b/lib/l10n/hr.json
index 01bd54eccfc..22beeba3f94 100644
--- a/lib/l10n/hr.json
+++ b/lib/l10n/hr.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ovo se obično može popraviti %sdavanjem pristupa web poslužitelju za pisanje u config direktoriju%s.",
"Sample configuration detected" : "Nađena ogledna konfiguracija",
"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" : "Otkriveno je da je ogledna konfiguracija kopirana. To može vašu instalaciju prekinuti i nije podržano.Molimo pročitajte dokumentaciju prije nego li izvršite promjene na config.php",
+ "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Help" : "Pomoć",
"Personal" : "Osobno",
"Settings" : "Postavke",
@@ -14,6 +15,16 @@
"No app name specified" : "Nikakav naziv aplikacije nije naveden",
"Unknown filetype" : "Vrsta datoteke nepoznata",
"Invalid image" : "Neispravna slika",
+ "today" : "Danas",
+ "yesterday" : "Jučer",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "Prošli mjesec",
+ "_%n month ago_::_%n months ago_" : ["prije %n mjeseca","prije %n mjeseci","prije %n mjeseci"],
+ "last year" : "Prošle godine",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["prije %n sata","prije %n sati","prije %n sati"],
+ "_%n minute ago_::_%n minutes ago_" : ["prije %n minute","prije %n minuta","prije %n minuta"],
+ "seconds ago" : "prije par sekundi",
"web services under your control" : "web usluge pod vašom kontrolom",
"App directory already exists" : "Direktorij aplikacije već postoji",
"Can't create app folder. Please fix permissions. %s" : "Nije moguće kreirati mapu aplikacija. molimo popravite dozvole. %s",
@@ -74,16 +85,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Dijeljenje %s nije uspjelo jer pozadina za %s nije mogla pronaći svoj izvor",
"Sharing %s failed, because the file could not be found in the file cache" : "Dijeljenje %s nije uspjelo jer u predmemoriji datoteke datoteka nije nađena.",
"Could not find category \"%s\"" : "Kategorija \"%s\" nije nađena",
- "seconds ago" : "prije par sekundi",
- "_%n minute ago_::_%n minutes ago_" : ["prije %n minute","prije %n minuta","prije %n minuta"],
- "_%n hour ago_::_%n hours ago_" : ["prije %n sata","prije %n sati","prije %n sati"],
- "today" : "Danas",
- "yesterday" : "Jučer",
- "_%n day go_::_%n days ago_" : ["prije %n dana","prije %n dana","prije %n dana"],
- "last month" : "Prošli mjesec",
- "_%n month ago_::_%n months ago_" : ["prije %n mjeseca","prije %n mjeseci","prije %n mjeseci"],
- "last year" : "Prošle godine",
- "years ago" : "Prije više godina",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Samo su sljedeći znakovi dopušteni u korisničkom imenu: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Nužno je navesti ispravno korisničko ime",
"A valid password must be provided" : "Nužno je navesti ispravnu lozinku",
@@ -99,12 +100,7 @@
"Please install one of these locales on your system and restart your webserver." : "Molimo instalirajte jednu od ovih regionalnih shema u svoj sustav i ponovno pokrenite svoj web poslužitelj.",
"Please ask your server administrator to install the module." : "Molimo zamolite svog administratora poslužitelja da instalira modul.",
"PHP module %s not installed." : "PHP modul %s nije instaliran.",
- "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Molimo zamolite svog administratora poslužitelja da ažurira PHP na najnoviju verziju.Vašu PHP verziju ownCloud i PHP zajednica više ne podržavaju.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Aktiviran je PHP siguran način rada. Da bi ownCloud radio kako treba, taj mod treba oemogućiti.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP siguran način rada je zastarjela i uglavnom beskorisna postavka koju treba onemogućiti. Molimo zamolite svogadministratora poslužitelja da je onemogući, bilo u php.ini ili u vašoj konfiguraciji web poslužitelja.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Postavka Magic Quotes je omogućena. Da bi ownCloud radio kako treba, tu postavku treba onemogućiti.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes je zastarjela i uglavnom beskorisna postavka koju treba onemogućiti. MOlimo zamolite svogadministratora poslužitelja da je onemogući, bilo u php.ini ili u vašoj konfiguraciji web poslužitelja.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduli su instalirani, ali još uvijek su na popisu onih koji nedostaju?",
"Please ask your server administrator to restart the web server." : "Molimo zamolite svog administratora poslužitelja da ponovno pokrene web poslužitelj.",
"PostgreSQL >= 9 required" : "Potreban je PostgreSQL >= 9",
diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js
index be14e2d1f66..55581474e8f 100644
--- a/lib/l10n/hu_HU.js
+++ b/lib/l10n/hu_HU.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek a config könyvtárra%s.",
"Sample configuration detected" : "A példabeállítások vannak beállítva",
"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" : "Úgy tűnik a példakonfigurációt próbálja ténylegesen használni. Ez nem támogatott, és működésképtelenné teheti a telepítést. Kérjük olvassa el a dokumentációt és azt követően változtasson a config.php-n!",
+ "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Help" : "Súgó",
"Personal" : "Személyes",
"Settings" : "Beállítások",
@@ -17,6 +18,16 @@ OC.L10N.register(
"No app name specified" : "Nincs az alkalmazás név megadva.",
"Unknown filetype" : "Ismeretlen file tipús",
"Invalid image" : "Hibás kép",
+ "today" : "ma",
+ "yesterday" : "tegnap",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "múlt hónapban",
+ "_%n month ago_::_%n months ago_" : ["%n hónappal ezelőtt","%n hónappal ezelőtt"],
+ "last year" : "tavaly",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["%n órával ezelőtt","%n órával ezelőtt"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n perccel ezelőtt"],
+ "seconds ago" : "pár másodperce",
"web services under your control" : "webszolgáltatások saját kézben",
"App directory already exists" : "Az alkalmazás mappája már létezik",
"Can't create app folder. Please fix permissions. %s" : "Nem lehetett létrehozni az alkalmazás mappáját. Kérem ellenőrizze a jogosultságokat. %s",
@@ -78,16 +89,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s megosztása nem sikerült, mert %s megosztási alrendszere nem találja",
"Sharing %s failed, because the file could not be found in the file cache" : "%s megosztása nem sikerült, mert a fájl nem található a gyorsítótárban",
"Could not find category \"%s\"" : "Ez a kategória nem található: \"%s\"",
- "seconds ago" : "pár másodperce",
- "_%n minute ago_::_%n minutes ago_" : ["","%n perccel ezelőtt"],
- "_%n hour ago_::_%n hours ago_" : ["%n órával ezelőtt","%n órával ezelőtt"],
- "today" : "ma",
- "yesterday" : "tegnap",
- "_%n day go_::_%n days ago_" : ["%n nappal ezelőtt","%n nappal ezelőtt"],
- "last month" : "múlt hónapban",
- "_%n month ago_::_%n months ago_" : ["%n hónappal ezelőtt","%n hónappal ezelőtt"],
- "last year" : "tavaly",
- "years ago" : "több éve",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "A felhasználónévben csak a következő karakterek fordulhatnak elő: \"a-z\", \"A-Z\", \"0-9\", és \"_.@-\"",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
@@ -103,12 +104,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!",
"Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!",
"PHP module %s not installed." : "A %s PHP modul nincs telepítve.",
- "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Kérje meg a rendszergazdát, hogy frissítse a PHP-t újabb változatra! Ezt a PHP változatot már nem támogatja az ownCloud és a PHP fejlesztői közösség.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Be van állítva a PHP Safe Mode. Az ownCloud megfelelő működéséhez szükséges, hogy ez ki legyen kapcsolva.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "A PHP Safe Mode egy régi, már nem támogatott és haszontalan üzemmód, amit érdemes letiltani. Kérje meg a rendszergazdát, hogy tiltsa le vagy a php.ini-ben, vagy a webszerver beállításokban!",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Be van álltva a Magic Quotes. Az ownCloud megfelelő működéséhez szükséges, hogy ez le legyen tiltva.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "A Magic Quotes egy régi, már nem támogatott és haszontalan üzemmód, amit érdemes letiltani. Kérje meg a rendszergazdát, hogy tiltsa le vagy a php.ini-ben, vagy a webszerver beállításokban!",
"PHP modules have been installed, but they are still listed as missing?" : "A PHP modulok telepítve vannak, de a listában mégsincsenek felsorolva?",
"Please ask your server administrator to restart the web server." : "Kérje meg a rendszergazdát, hogy indítsa újra a webszervert!",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 szükséges",
diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json
index 434b2bbde9b..cc95cceae5e 100644
--- a/lib/l10n/hu_HU.json
+++ b/lib/l10n/hu_HU.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek a config könyvtárra%s.",
"Sample configuration detected" : "A példabeállítások vannak beállítva",
"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" : "Úgy tűnik a példakonfigurációt próbálja ténylegesen használni. Ez nem támogatott, és működésképtelenné teheti a telepítést. Kérjük olvassa el a dokumentációt és azt követően változtasson a config.php-n!",
+ "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Help" : "Súgó",
"Personal" : "Személyes",
"Settings" : "Beállítások",
@@ -15,6 +16,16 @@
"No app name specified" : "Nincs az alkalmazás név megadva.",
"Unknown filetype" : "Ismeretlen file tipús",
"Invalid image" : "Hibás kép",
+ "today" : "ma",
+ "yesterday" : "tegnap",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "múlt hónapban",
+ "_%n month ago_::_%n months ago_" : ["%n hónappal ezelőtt","%n hónappal ezelőtt"],
+ "last year" : "tavaly",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["%n órával ezelőtt","%n órával ezelőtt"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n perccel ezelőtt"],
+ "seconds ago" : "pár másodperce",
"web services under your control" : "webszolgáltatások saját kézben",
"App directory already exists" : "Az alkalmazás mappája már létezik",
"Can't create app folder. Please fix permissions. %s" : "Nem lehetett létrehozni az alkalmazás mappáját. Kérem ellenőrizze a jogosultságokat. %s",
@@ -76,16 +87,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s megosztása nem sikerült, mert %s megosztási alrendszere nem találja",
"Sharing %s failed, because the file could not be found in the file cache" : "%s megosztása nem sikerült, mert a fájl nem található a gyorsítótárban",
"Could not find category \"%s\"" : "Ez a kategória nem található: \"%s\"",
- "seconds ago" : "pár másodperce",
- "_%n minute ago_::_%n minutes ago_" : ["","%n perccel ezelőtt"],
- "_%n hour ago_::_%n hours ago_" : ["%n órával ezelőtt","%n órával ezelőtt"],
- "today" : "ma",
- "yesterday" : "tegnap",
- "_%n day go_::_%n days ago_" : ["%n nappal ezelőtt","%n nappal ezelőtt"],
- "last month" : "múlt hónapban",
- "_%n month ago_::_%n months ago_" : ["%n hónappal ezelőtt","%n hónappal ezelőtt"],
- "last year" : "tavaly",
- "years ago" : "több éve",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "A felhasználónévben csak a következő karakterek fordulhatnak elő: \"a-z\", \"A-Z\", \"0-9\", és \"_.@-\"",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
@@ -101,12 +102,7 @@
"Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!",
"Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!",
"PHP module %s not installed." : "A %s PHP modul nincs telepítve.",
- "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Kérje meg a rendszergazdát, hogy frissítse a PHP-t újabb változatra! Ezt a PHP változatot már nem támogatja az ownCloud és a PHP fejlesztői közösség.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Be van állítva a PHP Safe Mode. Az ownCloud megfelelő működéséhez szükséges, hogy ez ki legyen kapcsolva.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "A PHP Safe Mode egy régi, már nem támogatott és haszontalan üzemmód, amit érdemes letiltani. Kérje meg a rendszergazdát, hogy tiltsa le vagy a php.ini-ben, vagy a webszerver beállításokban!",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Be van álltva a Magic Quotes. Az ownCloud megfelelő működéséhez szükséges, hogy ez le legyen tiltva.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "A Magic Quotes egy régi, már nem támogatott és haszontalan üzemmód, amit érdemes letiltani. Kérje meg a rendszergazdát, hogy tiltsa le vagy a php.ini-ben, vagy a webszerver beállításokban!",
"PHP modules have been installed, but they are still listed as missing?" : "A PHP modulok telepítve vannak, de a listában mégsincsenek felsorolva?",
"Please ask your server administrator to restart the web server." : "Kérje meg a rendszergazdát, hogy indítsa újra a webszervert!",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 szükséges",
diff --git a/lib/l10n/hy.js b/lib/l10n/hy.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/hy.js
+++ b/lib/l10n/hy.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/hy.json b/lib/l10n/hy.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/hy.json
+++ b/lib/l10n/hy.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ia.js b/lib/l10n/ia.js
index 938d9c4a680..345df54ec33 100644
--- a/lib/l10n/ia.js
+++ b/lib/l10n/ia.js
@@ -8,16 +8,16 @@ OC.L10N.register(
"Admin" : "Administration",
"Unknown filetype" : "Typo de file incognite",
"Invalid image" : "Imagine invalide",
- "web services under your control" : "servicios web sub tu controlo",
- "seconds ago" : "secundas passate",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutas passate"],
- "_%n hour ago_::_%n hours ago_" : ["","%n horas passate"],
"today" : "hodie",
"yesterday" : "heri",
- "_%n day go_::_%n days ago_" : ["","%n dies ante"],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "ultime mense",
"_%n month ago_::_%n months ago_" : ["","%n menses ante"],
"last year" : "ultime anno",
- "years ago" : "annos passate"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n horas passate"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutas passate"],
+ "seconds ago" : "secundas passate",
+ "web services under your control" : "servicios web sub tu controlo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ia.json b/lib/l10n/ia.json
index 21c437af71a..3f722b77a0d 100644
--- a/lib/l10n/ia.json
+++ b/lib/l10n/ia.json
@@ -6,16 +6,16 @@
"Admin" : "Administration",
"Unknown filetype" : "Typo de file incognite",
"Invalid image" : "Imagine invalide",
- "web services under your control" : "servicios web sub tu controlo",
- "seconds ago" : "secundas passate",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutas passate"],
- "_%n hour ago_::_%n hours ago_" : ["","%n horas passate"],
"today" : "hodie",
"yesterday" : "heri",
- "_%n day go_::_%n days ago_" : ["","%n dies ante"],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "ultime mense",
"_%n month ago_::_%n months ago_" : ["","%n menses ante"],
"last year" : "ultime anno",
- "years ago" : "annos passate"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n horas passate"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutas passate"],
+ "seconds ago" : "secundas passate",
+ "web services under your control" : "servicios web sub tu controlo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/id.js b/lib/l10n/id.js
index 368cb6b7921..0ad97244098 100644
--- a/lib/l10n/id.js
+++ b/lib/l10n/id.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori config.",
"Sample configuration detected" : "Konfigurasi sampel ditemukan",
"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" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php",
+ "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Help" : "Bantuan",
"Personal" : "Pribadi",
"Settings" : "Pengaturan",
@@ -17,6 +18,16 @@ OC.L10N.register(
"No app name specified" : "Tidak ada nama apl yang ditentukan",
"Unknown filetype" : "Tipe berkas tak dikenal",
"Invalid image" : "Gambar tidak sah",
+ "today" : "hari ini",
+ "yesterday" : "kemarin",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "bulan kemarin",
+ "_%n month ago_::_%n months ago_" : ["%n bulan yang lalu"],
+ "last year" : "tahun kemarin",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"],
+ "seconds ago" : "beberapa detik yang lalu",
"web services under your control" : "layanan web dalam kendali anda",
"App directory already exists" : "Direktori Apl sudah ada",
"Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s",
@@ -74,16 +85,6 @@ OC.L10N.register(
"Sharing %s failed, because resharing is not allowed" : "Gagal berbagi %s, karena membagikan ulang tidak diizinkan",
"Sharing %s failed, because the file could not be found in the file cache" : "Gagal berbagi %s, karena berkas tidak ditemukan di berkas cache",
"Could not find category \"%s\"" : "Tidak menemukan kategori \"%s\"",
- "seconds ago" : "beberapa detik yang lalu",
- "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"],
- "_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"],
- "today" : "hari ini",
- "yesterday" : "kemarin",
- "_%n day go_::_%n days ago_" : ["%n hari yang lalu"],
- "last month" : "bulan kemarin",
- "_%n month ago_::_%n months ago_" : ["%n bulan yang lalu"],
- "last year" : "tahun kemarin",
- "years ago" : "beberapa tahun lalu",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Hanya karakter berikut yang diizinkan dalam nama pengguna: \"a-z\", \"A-Z\", \"0-9\", dan \"_.@-\"",
"A valid username must be provided" : "Tuliskan nama pengguna yang valid",
"A valid password must be provided" : "Tuliskan sandi yang valid",
@@ -99,9 +100,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.",
"Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.",
"PHP module %s not installed." : "Module PHP %s tidak terinstal.",
- "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mohon tanyakan administrator Anda untuk memperbarui PHP ke versi terkini. Versi PHP Anda tidak lagi didukung oleh ownCloud dan komunitas PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode diaktifkan. ownCloud memerlukan ini untuk dinonaktifkan untuk dapat bekerja dengan banar.",
"PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?",
"Please ask your server administrator to restart the web server." : "Mohon minta administrator Anda untuk menjalankan ulang server web.",
"PostgreSQL >= 9 required" : "Diperlukan PostgreSQL >= 9",
diff --git a/lib/l10n/id.json b/lib/l10n/id.json
index e2b1712e1c5..26add369e59 100644
--- a/lib/l10n/id.json
+++ b/lib/l10n/id.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori config.",
"Sample configuration detected" : "Konfigurasi sampel ditemukan",
"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" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php",
+ "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Help" : "Bantuan",
"Personal" : "Pribadi",
"Settings" : "Pengaturan",
@@ -15,6 +16,16 @@
"No app name specified" : "Tidak ada nama apl yang ditentukan",
"Unknown filetype" : "Tipe berkas tak dikenal",
"Invalid image" : "Gambar tidak sah",
+ "today" : "hari ini",
+ "yesterday" : "kemarin",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "bulan kemarin",
+ "_%n month ago_::_%n months ago_" : ["%n bulan yang lalu"],
+ "last year" : "tahun kemarin",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"],
+ "seconds ago" : "beberapa detik yang lalu",
"web services under your control" : "layanan web dalam kendali anda",
"App directory already exists" : "Direktori Apl sudah ada",
"Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s",
@@ -72,16 +83,6 @@
"Sharing %s failed, because resharing is not allowed" : "Gagal berbagi %s, karena membagikan ulang tidak diizinkan",
"Sharing %s failed, because the file could not be found in the file cache" : "Gagal berbagi %s, karena berkas tidak ditemukan di berkas cache",
"Could not find category \"%s\"" : "Tidak menemukan kategori \"%s\"",
- "seconds ago" : "beberapa detik yang lalu",
- "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"],
- "_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"],
- "today" : "hari ini",
- "yesterday" : "kemarin",
- "_%n day go_::_%n days ago_" : ["%n hari yang lalu"],
- "last month" : "bulan kemarin",
- "_%n month ago_::_%n months ago_" : ["%n bulan yang lalu"],
- "last year" : "tahun kemarin",
- "years ago" : "beberapa tahun lalu",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Hanya karakter berikut yang diizinkan dalam nama pengguna: \"a-z\", \"A-Z\", \"0-9\", dan \"_.@-\"",
"A valid username must be provided" : "Tuliskan nama pengguna yang valid",
"A valid password must be provided" : "Tuliskan sandi yang valid",
@@ -97,9 +98,7 @@
"Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.",
"Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.",
"PHP module %s not installed." : "Module PHP %s tidak terinstal.",
- "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mohon tanyakan administrator Anda untuk memperbarui PHP ke versi terkini. Versi PHP Anda tidak lagi didukung oleh ownCloud dan komunitas PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode diaktifkan. ownCloud memerlukan ini untuk dinonaktifkan untuk dapat bekerja dengan banar.",
"PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?",
"Please ask your server administrator to restart the web server." : "Mohon minta administrator Anda untuk menjalankan ulang server web.",
"PostgreSQL >= 9 required" : "Diperlukan PostgreSQL >= 9",
diff --git a/lib/l10n/io.js b/lib/l10n/io.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/io.js
+++ b/lib/l10n/io.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/io.json b/lib/l10n/io.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/io.json
+++ b/lib/l10n/io.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/is.js b/lib/l10n/is.js
index 8a9b95c6120..712b8bbd10a 100644
--- a/lib/l10n/is.js
+++ b/lib/l10n/is.js
@@ -6,20 +6,20 @@ OC.L10N.register(
"Settings" : "Stillingar",
"Users" : "Notendur",
"Admin" : "Stjórnun",
- "web services under your control" : "vefþjónusta undir þinni stjórn",
- "Application is not enabled" : "Forrit ekki virkt",
- "Authentication error" : "Villa við auðkenningu",
- "Token expired. Please reload page." : "Auðkenning útrunnin. Vinsamlegast skráðu þig aftur inn.",
- "Could not find category \"%s\"" : "Fann ekki flokkinn \"%s\"",
- "seconds ago" : "sek.",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "í dag",
"yesterday" : "í gær",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "síðasta mánuði",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "síðasta ári",
- "years ago" : "einhverjum árum"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "sek.",
+ "web services under your control" : "vefþjónusta undir þinni stjórn",
+ "Application is not enabled" : "Forrit ekki virkt",
+ "Authentication error" : "Villa við auðkenningu",
+ "Token expired. Please reload page." : "Auðkenning útrunnin. Vinsamlegast skráðu þig aftur inn.",
+ "Could not find category \"%s\"" : "Fann ekki flokkinn \"%s\""
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/is.json b/lib/l10n/is.json
index 9d168fc2aca..fd0291c96c3 100644
--- a/lib/l10n/is.json
+++ b/lib/l10n/is.json
@@ -4,20 +4,20 @@
"Settings" : "Stillingar",
"Users" : "Notendur",
"Admin" : "Stjórnun",
- "web services under your control" : "vefþjónusta undir þinni stjórn",
- "Application is not enabled" : "Forrit ekki virkt",
- "Authentication error" : "Villa við auðkenningu",
- "Token expired. Please reload page." : "Auðkenning útrunnin. Vinsamlegast skráðu þig aftur inn.",
- "Could not find category \"%s\"" : "Fann ekki flokkinn \"%s\"",
- "seconds ago" : "sek.",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "í dag",
"yesterday" : "í gær",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "síðasta mánuði",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "síðasta ári",
- "years ago" : "einhverjum árum"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "sek.",
+ "web services under your control" : "vefþjónusta undir þinni stjórn",
+ "Application is not enabled" : "Forrit ekki virkt",
+ "Authentication error" : "Villa við auðkenningu",
+ "Token expired. Please reload page." : "Auðkenning útrunnin. Vinsamlegast skráðu þig aftur inn.",
+ "Could not find category \"%s\"" : "Fann ekki flokkinn \"%s\""
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index 2874653823b..0d619211f0d 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"config\"%s",
"Sample configuration detected" : "Configurazione di esempio rilevata",
"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" : "È stato rilevato che la configurazione di esempio è stata copiata. Ciò può compromettere la tua installazione e non è supportato. Leggi la documentazione prima di modificare il file config.php",
+ "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
+ "PHP with a version lower than %s is required." : "Richiesta una versione di PHP minore di %s.",
+ "Following databases are supported: %s" : "I seguenti database sono supportati: %s",
+ "The command line tool %s could not be found" : "Lo strumento da riga di comando %s non è stato trovato",
+ "The library %s is not available." : "La libreria %s non è disponibile.",
+ "Library %s with a version higher than %s is required - available version %s." : "Richiesta una versione della libreria %s maggiore di %s - versione disponibile %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Richiesta una versione della libreria %s minore di %s - versione disponibile %s.",
+ "Following platforms are supported: %s" : "Sono supportate le seguenti piattaforme: %s",
+ "ownCloud %s or higher is required." : "Richiesto ownCloud %s o superiore.",
+ "ownCloud with a version lower than %s is required." : "Richiesta una versione di ownCloud minore di %s.",
"Help" : "Aiuto",
"Personal" : "Personale",
"Settings" : "Impostazioni",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Admin",
"Recommended" : "Consigliata",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'applicazione \\\"%s\\\" non può essere installata poiché non è compatibile con questa versione di ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "L'applicazione \\\"%s\\\" non può essere installata poiché le seguenti dipendenze non sono soddisfatte: %s",
"No app name specified" : "Il nome dell'applicazione non è specificato",
"Unknown filetype" : "Tipo di file sconosciuto",
"Invalid image" : "Immagine non valida",
+ "today" : "oggi",
+ "yesterday" : "ieri",
+ "_%n day ago_::_%n days ago_" : ["%d giorno fa","%n giorni fa"],
+ "last month" : "mese scorso",
+ "_%n month ago_::_%n months ago_" : ["%n mese fa","%n mesi fa"],
+ "last year" : "anno scorso",
+ "_%n year ago_::_%n years ago_" : ["%n anno fa","%n anni fa"],
+ "_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
+ "seconds ago" : "secondi fa",
+ "Database Error" : "Errore del database",
+ "Please contact your system administrator." : "Contatta il tuo amministratore di sistema.",
"web services under your control" : "servizi web nelle tue mani",
"App directory already exists" : "La cartella dell'applicazione esiste già",
"Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Imposta una password di amministrazione.",
"Can't create or write into the data directory %s" : "Impossibile creare o scrivere nella cartella dei dati %s",
"%s shared »%s« with you" : "%s ha condiviso «%s» con te",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Condivisione di %s non riuscita, poiché il motore non consente condivisioni del tipo %i",
"Sharing %s failed, because the file does not exist" : "Condivisione di %s non riuscita, poiché il file non esiste",
"You are not allowed to share %s" : "Non ti è consentito condividere %s",
"Sharing %s failed, because the user %s is the item owner" : "Condivisione di %s non riuscita, poiché l'utente %s è il proprietario dell'oggetto",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti",
"Sharing %s failed, because sharing with links is not allowed" : "Condivisione di %s non riuscita, poiché i collegamenti non sono consentiti",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La condivisione di %s non è riuscita, impossibile trovare %s, è probabile che il server non sia al momento raggiungibile.",
"Share type %s is not valid for %s" : "Il tipo di condivisione %s non è valido per %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Impostazione permessi per %s non riuscita, poiché i permessi superano i permessi accordati a %s",
"Setting permissions for %s failed, because the item was not found" : "Impostazione permessi per %s non riuscita, poiché l'elemento non è stato trovato",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Condivisione di %s non riuscita, poiché il motore di condivisione per %s non riesce a trovare la sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "Condivisione di %s non riuscita, poiché il file non è stato trovato nella cache",
"Could not find category \"%s\"" : "Impossibile trovare la categoria \"%s\"",
- "seconds ago" : "secondi fa",
- "_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
- "_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
- "today" : "oggi",
- "yesterday" : "ieri",
- "_%n day go_::_%n days ago_" : ["%n giorno fa","%n giorni fa"],
- "last month" : "mese scorso",
- "_%n month ago_::_%n months ago_" : ["%n mese fa","%n mesi fa"],
- "last year" : "anno scorso",
- "years ago" : "anni fa",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Solo i seguenti caratteri sono ammessi in un nome utente: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-\"",
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"A valid password must be provided" : "Deve essere fornita una password valida",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Installa una delle seguenti localizzazioni sul tuo sistema e riavvia il server web.",
"Please ask your server administrator to install the module." : "Chiedi all'amministratore del tuo server di installare il modulo.",
"PHP module %s not installed." : "Il modulo PHP %s non è installato.",
- "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Chiedi al tuo amministratore di aggiornare PHP all'ultima versione. La tua versione di PHP non è più supportata da ownCloud e dalla comunità di PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode è abilitato. ownCloud richiede che sia disabilitato per funzionare correttamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode è un'impostazione sconsigliata e solitamente inutile che dovrebbe essere disabilitata. Chiedi al tuo amministratore di disabilitarlo nel file php.ini o nella configurazione del server web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes è abilitato. ownCloud richiede che sia disabilitato per funzionare correttamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes è un'impostazione sconsigliata e solitamente inutile che dovrebbe essere disabilitata. Chiedi al tuo amministratore di disabilitarlo nel file php.ini o nella configurazione del server web.",
"PHP modules have been installed, but they are still listed as missing?" : "Sono stati installati moduli PHP, ma sono elencati ancora come mancanti?",
"Please ask your server administrator to restart the web server." : "Chiedi all'amministratore di riavviare il server web.",
"PostgreSQL >= 9 required" : "Richiesto PostgreSQL >= 9",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index ca5beb1b802..aea35699411 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"config\"%s",
"Sample configuration detected" : "Configurazione di esempio rilevata",
"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" : "È stato rilevato che la configurazione di esempio è stata copiata. Ciò può compromettere la tua installazione e non è supportato. Leggi la documentazione prima di modificare il file config.php",
+ "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
+ "PHP with a version lower than %s is required." : "Richiesta una versione di PHP minore di %s.",
+ "Following databases are supported: %s" : "I seguenti database sono supportati: %s",
+ "The command line tool %s could not be found" : "Lo strumento da riga di comando %s non è stato trovato",
+ "The library %s is not available." : "La libreria %s non è disponibile.",
+ "Library %s with a version higher than %s is required - available version %s." : "Richiesta una versione della libreria %s maggiore di %s - versione disponibile %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Richiesta una versione della libreria %s minore di %s - versione disponibile %s.",
+ "Following platforms are supported: %s" : "Sono supportate le seguenti piattaforme: %s",
+ "ownCloud %s or higher is required." : "Richiesto ownCloud %s o superiore.",
+ "ownCloud with a version lower than %s is required." : "Richiesta una versione di ownCloud minore di %s.",
"Help" : "Aiuto",
"Personal" : "Personale",
"Settings" : "Impostazioni",
@@ -12,9 +22,22 @@
"Admin" : "Admin",
"Recommended" : "Consigliata",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'applicazione \\\"%s\\\" non può essere installata poiché non è compatibile con questa versione di ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "L'applicazione \\\"%s\\\" non può essere installata poiché le seguenti dipendenze non sono soddisfatte: %s",
"No app name specified" : "Il nome dell'applicazione non è specificato",
"Unknown filetype" : "Tipo di file sconosciuto",
"Invalid image" : "Immagine non valida",
+ "today" : "oggi",
+ "yesterday" : "ieri",
+ "_%n day ago_::_%n days ago_" : ["%d giorno fa","%n giorni fa"],
+ "last month" : "mese scorso",
+ "_%n month ago_::_%n months ago_" : ["%n mese fa","%n mesi fa"],
+ "last year" : "anno scorso",
+ "_%n year ago_::_%n years ago_" : ["%n anno fa","%n anni fa"],
+ "_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
+ "seconds ago" : "secondi fa",
+ "Database Error" : "Errore del database",
+ "Please contact your system administrator." : "Contatta il tuo amministratore di sistema.",
"web services under your control" : "servizi web nelle tue mani",
"App directory already exists" : "La cartella dell'applicazione esiste già",
"Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Imposta una password di amministrazione.",
"Can't create or write into the data directory %s" : "Impossibile creare o scrivere nella cartella dei dati %s",
"%s shared »%s« with you" : "%s ha condiviso «%s» con te",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Condivisione di %s non riuscita, poiché il motore non consente condivisioni del tipo %i",
"Sharing %s failed, because the file does not exist" : "Condivisione di %s non riuscita, poiché il file non esiste",
"You are not allowed to share %s" : "Non ti è consentito condividere %s",
"Sharing %s failed, because the user %s is the item owner" : "Condivisione di %s non riuscita, poiché l'utente %s è il proprietario dell'oggetto",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti",
"Sharing %s failed, because sharing with links is not allowed" : "Condivisione di %s non riuscita, poiché i collegamenti non sono consentiti",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La condivisione di %s non è riuscita, impossibile trovare %s, è probabile che il server non sia al momento raggiungibile.",
"Share type %s is not valid for %s" : "Il tipo di condivisione %s non è valido per %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Impostazione permessi per %s non riuscita, poiché i permessi superano i permessi accordati a %s",
"Setting permissions for %s failed, because the item was not found" : "Impostazione permessi per %s non riuscita, poiché l'elemento non è stato trovato",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Condivisione di %s non riuscita, poiché il motore di condivisione per %s non riesce a trovare la sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "Condivisione di %s non riuscita, poiché il file non è stato trovato nella cache",
"Could not find category \"%s\"" : "Impossibile trovare la categoria \"%s\"",
- "seconds ago" : "secondi fa",
- "_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
- "_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
- "today" : "oggi",
- "yesterday" : "ieri",
- "_%n day go_::_%n days ago_" : ["%n giorno fa","%n giorni fa"],
- "last month" : "mese scorso",
- "_%n month ago_::_%n months ago_" : ["%n mese fa","%n mesi fa"],
- "last year" : "anno scorso",
- "years ago" : "anni fa",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Solo i seguenti caratteri sono ammessi in un nome utente: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-\"",
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"A valid password must be provided" : "Deve essere fornita una password valida",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Installa una delle seguenti localizzazioni sul tuo sistema e riavvia il server web.",
"Please ask your server administrator to install the module." : "Chiedi all'amministratore del tuo server di installare il modulo.",
"PHP module %s not installed." : "Il modulo PHP %s non è installato.",
- "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Chiedi al tuo amministratore di aggiornare PHP all'ultima versione. La tua versione di PHP non è più supportata da ownCloud e dalla comunità di PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode è abilitato. ownCloud richiede che sia disabilitato per funzionare correttamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode è un'impostazione sconsigliata e solitamente inutile che dovrebbe essere disabilitata. Chiedi al tuo amministratore di disabilitarlo nel file php.ini o nella configurazione del server web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes è abilitato. ownCloud richiede che sia disabilitato per funzionare correttamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes è un'impostazione sconsigliata e solitamente inutile che dovrebbe essere disabilitata. Chiedi al tuo amministratore di disabilitarlo nel file php.ini o nella configurazione del server web.",
"PHP modules have been installed, but they are still listed as missing?" : "Sono stati installati moduli PHP, ma sono elencati ancora come mancanti?",
"Please ask your server administrator to restart the web server." : "Chiedi all'amministratore di riavviare il server web.",
"PostgreSQL >= 9 required" : "Richiesto PostgreSQL >= 9",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 38aa3de36d6..0d52b2c28e6 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "多くの場合、これは %s Webサーバーに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を変更する前にドキュメントを確認してください。",
+ "PHP %s or higher is required." : "PHP %s 以上が必要です。",
+ "PHP with a version lower than %s is 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",
+ "ownCloud %s or higher is required." : "ownCloud %s 以上が必要です。",
+ "ownCloud with a version lower than %s is required." : "ownCloud %s 以下が必要です。",
"Help" : "ヘルプ",
"Personal" : "個人",
"Settings" : "設定",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "管理",
"Recommended" : "推奨",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "アプリ \\\"%s\\\" をインストールできません。現在のownCloudのバージョンと互換性がありません。",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "次の依存関係は無いため\\\"%s\\\"のアプリをインストールできません:%s",
"No app name specified" : "アプリ名が未指定",
"Unknown filetype" : "不明なファイルタイプ",
"Invalid image" : "無効な画像",
+ "today" : "今日",
+ "yesterday" : "1日前",
+ "_%n day ago_::_%n days ago_" : ["%n 日前"],
+ "last month" : "1ヶ月前",
+ "_%n month ago_::_%n months ago_" : ["%nヶ月前"],
+ "last year" : "1年前",
+ "_%n year ago_::_%n years ago_" : ["%n 年前"],
+ "_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
+ "seconds ago" : "数秒前",
+ "Database Error" : "データベースエラー",
+ "Please contact your system administrator." : "システム管理者に問い合わせてください。",
"web services under your control" : "あなたの管理下のウェブサービス",
"App directory already exists" : "アプリディレクトリはすでに存在します",
"Can't create app folder. Please fix permissions. %s" : "アプリフォルダーを作成できませんでした。%s のパーミッションを修正してください。",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "管理者のパスワードを設定。",
"Can't create or write into the data directory %s" : "%s データディレクトリに作成、書き込みができません",
"%s shared »%s« with you" : "%sが あなたと »%s«を共有しました",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "%s の共有に失敗しました。%i タイプからの共有は許可されていないからです。",
"Sharing %s failed, because the file does not exist" : "%s の共有に失敗しました。そのようなファイルは存在しないからです。",
"You are not allowed to share %s" : "%s を共有することを許可されていません。",
"Sharing %s failed, because the user %s is the item owner" : "%s の共有に失敗しました。ユーザー %s がアイテム所有者です。",
@@ -64,6 +88,7 @@ OC.L10N.register(
"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 の権限設定に失敗しました。アイテムが存在しません。",
@@ -78,16 +103,6 @@ OC.L10N.register(
"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\" が見つかりませんでした",
- "seconds ago" : "数秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
- "today" : "今日",
- "yesterday" : "1日前",
- "_%n day go_::_%n days ago_" : ["%n日前"],
- "last month" : "1ヶ月前",
- "_%n month ago_::_%n months ago_" : ["%nヶ月前"],
- "last year" : "1年前",
- "years ago" : "年前",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "ユーザー名で利用できる文字列は、次のものです: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "有効なユーザー名を指定する必要があります",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
@@ -103,12 +118,7 @@ OC.L10N.register(
"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 %s or higher is required." : "PHP %s 以上が必要です。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "PHPを最新バージョンに更新するようサーバー管理者に依頼してください。現在のPHPのバージョンは、ownCloudおよびPHPコミュニティでサポートされていません。",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHPセーフモードは有効です。ownCloudを適切に動作させるには無効化する必要があります。",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHPセーフモードは推奨されておらず、ほとんど役に立たない設定のため、無効化すべきです。サーバー管理者に、php.iniもしくはWebサーバー設定で無効化するよう依頼してください。",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "マジッククォートは有効です。ownCloudを適切に動作させるには無効にする必要があります。",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "マジッククォートは推奨されておらず、ほとんど役に立たない設定のため、無効化すべきです。サーバー管理者に、php.iniもしくはWebサーバー設定で無効化するよう依頼してください。",
"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 が必要です",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index 8a0db934683..c33f9f2419d 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "多くの場合、これは %s Webサーバーに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を変更する前にドキュメントを確認してください。",
+ "PHP %s or higher is required." : "PHP %s 以上が必要です。",
+ "PHP with a version lower than %s is 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",
+ "ownCloud %s or higher is required." : "ownCloud %s 以上が必要です。",
+ "ownCloud with a version lower than %s is required." : "ownCloud %s 以下が必要です。",
"Help" : "ヘルプ",
"Personal" : "個人",
"Settings" : "設定",
@@ -12,9 +22,22 @@
"Admin" : "管理",
"Recommended" : "推奨",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "アプリ \\\"%s\\\" をインストールできません。現在のownCloudのバージョンと互換性がありません。",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "次の依存関係は無いため\\\"%s\\\"のアプリをインストールできません:%s",
"No app name specified" : "アプリ名が未指定",
"Unknown filetype" : "不明なファイルタイプ",
"Invalid image" : "無効な画像",
+ "today" : "今日",
+ "yesterday" : "1日前",
+ "_%n day ago_::_%n days ago_" : ["%n 日前"],
+ "last month" : "1ヶ月前",
+ "_%n month ago_::_%n months ago_" : ["%nヶ月前"],
+ "last year" : "1年前",
+ "_%n year ago_::_%n years ago_" : ["%n 年前"],
+ "_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
+ "seconds ago" : "数秒前",
+ "Database Error" : "データベースエラー",
+ "Please contact your system administrator." : "システム管理者に問い合わせてください。",
"web services under your control" : "あなたの管理下のウェブサービス",
"App directory already exists" : "アプリディレクトリはすでに存在します",
"Can't create app folder. Please fix permissions. %s" : "アプリフォルダーを作成できませんでした。%s のパーミッションを修正してください。",
@@ -52,6 +75,7 @@
"Set an admin password." : "管理者のパスワードを設定。",
"Can't create or write into the data directory %s" : "%s データディレクトリに作成、書き込みができません",
"%s shared »%s« with you" : "%sが あなたと »%s«を共有しました",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "%s の共有に失敗しました。%i タイプからの共有は許可されていないからです。",
"Sharing %s failed, because the file does not exist" : "%s の共有に失敗しました。そのようなファイルは存在しないからです。",
"You are not allowed to share %s" : "%s を共有することを許可されていません。",
"Sharing %s failed, because the user %s is the item owner" : "%s の共有に失敗しました。ユーザー %s がアイテム所有者です。",
@@ -62,6 +86,7 @@
"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 の権限設定に失敗しました。アイテムが存在しません。",
@@ -76,16 +101,6 @@
"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\" が見つかりませんでした",
- "seconds ago" : "数秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
- "today" : "今日",
- "yesterday" : "1日前",
- "_%n day go_::_%n days ago_" : ["%n日前"],
- "last month" : "1ヶ月前",
- "_%n month ago_::_%n months ago_" : ["%nヶ月前"],
- "last year" : "1年前",
- "years ago" : "年前",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "ユーザー名で利用できる文字列は、次のものです: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "有効なユーザー名を指定する必要があります",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
@@ -101,12 +116,7 @@
"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 %s or higher is required." : "PHP %s 以上が必要です。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "PHPを最新バージョンに更新するようサーバー管理者に依頼してください。現在のPHPのバージョンは、ownCloudおよびPHPコミュニティでサポートされていません。",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHPセーフモードは有効です。ownCloudを適切に動作させるには無効化する必要があります。",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHPセーフモードは推奨されておらず、ほとんど役に立たない設定のため、無効化すべきです。サーバー管理者に、php.iniもしくはWebサーバー設定で無効化するよう依頼してください。",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "マジッククォートは有効です。ownCloudを適切に動作させるには無効にする必要があります。",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "マジッククォートは推奨されておらず、ほとんど役に立たない設定のため、無効化すべきです。サーバー管理者に、php.iniもしくはWebサーバー設定で無効化するよう依頼してください。",
"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 が必要です",
diff --git a/lib/l10n/jv.js b/lib/l10n/jv.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/jv.js
+++ b/lib/l10n/jv.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/jv.json b/lib/l10n/jv.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/jv.json
+++ b/lib/l10n/jv.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ka_GE.js b/lib/l10n/ka_GE.js
index 756f13f67b9..63b886e6ce1 100644
--- a/lib/l10n/ka_GE.js
+++ b/lib/l10n/ka_GE.js
@@ -6,6 +6,16 @@ OC.L10N.register(
"Settings" : "პარამეტრები",
"Users" : "მომხმარებელი",
"Admin" : "ადმინისტრატორი",
+ "today" : "დღეს",
+ "yesterday" : "გუშინ",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "გასულ თვეში",
+ "_%n month ago_::_%n months ago_" : [""],
+ "last year" : "ბოლო წელს",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "seconds ago" : "წამის წინ",
"web services under your control" : "web services under your control",
"Application is not enabled" : "აპლიკაცია არ არის აქტიური",
"Authentication error" : "ავთენტიფიკაციის შეცდომა",
@@ -23,16 +33,6 @@ OC.L10N.register(
"Set an admin username." : "დააყენეთ ადმინისტრატორის სახელი.",
"Set an admin password." : "დააყენეთ ადმინისტრატორის პაროლი.",
"Could not find category \"%s\"" : "\"%s\" კატეგორიის მოძებნა ვერ მოხერხდა",
- "seconds ago" : "წამის წინ",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
- "today" : "დღეს",
- "yesterday" : "გუშინ",
- "_%n day go_::_%n days ago_" : [""],
- "last month" : "გასულ თვეში",
- "_%n month ago_::_%n months ago_" : [""],
- "last year" : "ბოლო წელს",
- "years ago" : "წლის წინ",
"A valid username must be provided" : "უნდა მიუთითოთ არსებული მომხმარებლის სახელი",
"A valid password must be provided" : "უნდა მიუთითოთ არსებული პაროლი"
},
diff --git a/lib/l10n/ka_GE.json b/lib/l10n/ka_GE.json
index a9e86ecb1ab..0371cfcfc90 100644
--- a/lib/l10n/ka_GE.json
+++ b/lib/l10n/ka_GE.json
@@ -4,6 +4,16 @@
"Settings" : "პარამეტრები",
"Users" : "მომხმარებელი",
"Admin" : "ადმინისტრატორი",
+ "today" : "დღეს",
+ "yesterday" : "გუშინ",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "გასულ თვეში",
+ "_%n month ago_::_%n months ago_" : [""],
+ "last year" : "ბოლო წელს",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "seconds ago" : "წამის წინ",
"web services under your control" : "web services under your control",
"Application is not enabled" : "აპლიკაცია არ არის აქტიური",
"Authentication error" : "ავთენტიფიკაციის შეცდომა",
@@ -21,16 +31,6 @@
"Set an admin username." : "დააყენეთ ადმინისტრატორის სახელი.",
"Set an admin password." : "დააყენეთ ადმინისტრატორის პაროლი.",
"Could not find category \"%s\"" : "\"%s\" კატეგორიის მოძებნა ვერ მოხერხდა",
- "seconds ago" : "წამის წინ",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
- "today" : "დღეს",
- "yesterday" : "გუშინ",
- "_%n day go_::_%n days ago_" : [""],
- "last month" : "გასულ თვეში",
- "_%n month ago_::_%n months ago_" : [""],
- "last year" : "ბოლო წელს",
- "years ago" : "წლის წინ",
"A valid username must be provided" : "უნდა მიუთითოთ არსებული მომხმარებლის სახელი",
"A valid password must be provided" : "უნდა მიუთითოთ არსებული პაროლი"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/lib/l10n/km.js b/lib/l10n/km.js
index cfa1ea89ebb..4f96e661179 100644
--- a/lib/l10n/km.js
+++ b/lib/l10n/km.js
@@ -9,6 +9,16 @@ OC.L10N.register(
"No app name specified" : "មិន​បាន​បញ្ជាក់​ឈ្មោះ​កម្មវិធី",
"Unknown filetype" : "មិន​ស្គាល់​ប្រភេទ​ឯកសារ",
"Invalid image" : "រូបភាព​មិន​ត្រឹម​ត្រូវ",
+ "today" : "ថ្ងៃនេះ",
+ "yesterday" : "ម្សិលមិញ",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "ខែមុន",
+ "_%n month ago_::_%n months ago_" : ["%n ខែ​មុន"],
+ "last year" : "ឆ្នាំ​មុន",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n ម៉ោង​មុន"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n នាទី​មុន"],
+ "seconds ago" : "វិនាទី​មុន",
"web services under your control" : "សេវាកម្ម​វេប​ក្រោម​ការ​ការ​បញ្ជា​របស់​អ្នក",
"App directory already exists" : "មាន​ទីតាំង​ផ្ទុក​កម្មវិធី​រួច​ហើយ",
"Can't create app folder. Please fix permissions. %s" : "មិន​អាច​បង្កើត​ថត​កម្មវិធី។ សូម​កែ​សម្រួល​សិទ្ធិ។ %s",
@@ -24,16 +34,6 @@ OC.L10N.register(
"Set an admin username." : "កំណត់​ឈ្មោះ​អ្នក​គ្រប់គ្រង។",
"Set an admin password." : "កំណត់​ពាក្យ​សម្ងាត់​អ្នក​គ្រប់គ្រង។",
"Could not find category \"%s\"" : "រក​មិន​ឃើញ​ចំណាត់​ក្រុម \"%s\"",
- "seconds ago" : "វិនាទី​មុន",
- "_%n minute ago_::_%n minutes ago_" : ["%n នាទី​មុន"],
- "_%n hour ago_::_%n hours ago_" : ["%n ម៉ោង​មុន"],
- "today" : "ថ្ងៃនេះ",
- "yesterday" : "ម្សិលមិញ",
- "_%n day go_::_%n days ago_" : ["%n ថ្ងៃ​មុន"],
- "last month" : "ខែមុន",
- "_%n month ago_::_%n months ago_" : ["%n ខែ​មុន"],
- "last year" : "ឆ្នាំ​មុន",
- "years ago" : "ឆ្នាំ​មុន",
"A valid username must be provided" : "ត្រូវ​ផ្ដល់​ឈ្មោះ​អ្នក​ប្រើ​ឲ្យ​បាន​ត្រឹម​ត្រូវ",
"A valid password must be provided" : "ត្រូវ​ផ្ដល់​ពាក្យ​សម្ងាត់​ឲ្យ​បាន​ត្រឹម​ត្រូវ"
},
diff --git a/lib/l10n/km.json b/lib/l10n/km.json
index 32b6173ba0d..9c1010b0020 100644
--- a/lib/l10n/km.json
+++ b/lib/l10n/km.json
@@ -7,6 +7,16 @@
"No app name specified" : "មិន​បាន​បញ្ជាក់​ឈ្មោះ​កម្មវិធី",
"Unknown filetype" : "មិន​ស្គាល់​ប្រភេទ​ឯកសារ",
"Invalid image" : "រូបភាព​មិន​ត្រឹម​ត្រូវ",
+ "today" : "ថ្ងៃនេះ",
+ "yesterday" : "ម្សិលមិញ",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "ខែមុន",
+ "_%n month ago_::_%n months ago_" : ["%n ខែ​មុន"],
+ "last year" : "ឆ្នាំ​មុន",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n ម៉ោង​មុន"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n នាទី​មុន"],
+ "seconds ago" : "វិនាទី​មុន",
"web services under your control" : "សេវាកម្ម​វេប​ក្រោម​ការ​ការ​បញ្ជា​របស់​អ្នក",
"App directory already exists" : "មាន​ទីតាំង​ផ្ទុក​កម្មវិធី​រួច​ហើយ",
"Can't create app folder. Please fix permissions. %s" : "មិន​អាច​បង្កើត​ថត​កម្មវិធី។ សូម​កែ​សម្រួល​សិទ្ធិ។ %s",
@@ -22,16 +32,6 @@
"Set an admin username." : "កំណត់​ឈ្មោះ​អ្នក​គ្រប់គ្រង។",
"Set an admin password." : "កំណត់​ពាក្យ​សម្ងាត់​អ្នក​គ្រប់គ្រង។",
"Could not find category \"%s\"" : "រក​មិន​ឃើញ​ចំណាត់​ក្រុម \"%s\"",
- "seconds ago" : "វិនាទី​មុន",
- "_%n minute ago_::_%n minutes ago_" : ["%n នាទី​មុន"],
- "_%n hour ago_::_%n hours ago_" : ["%n ម៉ោង​មុន"],
- "today" : "ថ្ងៃនេះ",
- "yesterday" : "ម្សិលមិញ",
- "_%n day go_::_%n days ago_" : ["%n ថ្ងៃ​មុន"],
- "last month" : "ខែមុន",
- "_%n month ago_::_%n months ago_" : ["%n ខែ​មុន"],
- "last year" : "ឆ្នាំ​មុន",
- "years ago" : "ឆ្នាំ​មុន",
"A valid username must be provided" : "ត្រូវ​ផ្ដល់​ឈ្មោះ​អ្នក​ប្រើ​ឲ្យ​បាន​ត្រឹម​ត្រូវ",
"A valid password must be provided" : "ត្រូវ​ផ្ដល់​ពាក្យ​សម្ងាត់​ឲ្យ​បាន​ត្រឹម​ត្រូវ"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/lib/l10n/kn.js b/lib/l10n/kn.js
index 0f4a002019e..75314b0abea 100644
--- a/lib/l10n/kn.js
+++ b/lib/l10n/kn.js
@@ -1,9 +1,21 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "Help" : "ಸಹಾಯ",
+ "Personal" : "ವೈಯಕ್ತಿಕ",
+ "Settings" : "ಆಯ್ಕೆ",
+ "Users" : "ಬಳಕೆದಾರರು",
+ "Admin" : "ನಿರ್ವಹಕ",
+ "Recommended" : "ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ",
+ "Unknown filetype" : "ಅಪರಿಚಿತ ಕಡತ ಮಾದರಿ",
+ "Invalid image" : "ಅಸಾಮರ್ಥ್ಯ ಚಿತ್ರ",
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
+ "A valid username must be provided" : "ಮಾನ್ಯ ಬಳಕೆದಾರ ಹೆಸರು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "A valid password must be provided" : "ಸರಿಯಾದ ಬಳಕೆದಾರ ಗುಪ್ತಪದ ಒದಗಿಸಬೇಕಾಗಿದೆ"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/kn.json b/lib/l10n/kn.json
index 4a03cf5047e..ae5f3359a13 100644
--- a/lib/l10n/kn.json
+++ b/lib/l10n/kn.json
@@ -1,7 +1,19 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "Help" : "ಸಹಾಯ",
+ "Personal" : "ವೈಯಕ್ತಿಕ",
+ "Settings" : "ಆಯ್ಕೆ",
+ "Users" : "ಬಳಕೆದಾರರು",
+ "Admin" : "ನಿರ್ವಹಕ",
+ "Recommended" : "ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ",
+ "Unknown filetype" : "ಅಪರಿಚಿತ ಕಡತ ಮಾದರಿ",
+ "Invalid image" : "ಅಸಾಮರ್ಥ್ಯ ಚಿತ್ರ",
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
+ "A valid username must be provided" : "ಮಾನ್ಯ ಬಳಕೆದಾರ ಹೆಸರು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "A valid password must be provided" : "ಸರಿಯಾದ ಬಳಕೆದಾರ ಗುಪ್ತಪದ ಒದಗಿಸಬೇಕಾಗಿದೆ"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/ko.js b/lib/l10n/ko.js
index 22f8cb191ae..2ae43854873 100644
--- a/lib/l10n/ko.js
+++ b/lib/l10n/ko.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"lib",
{
+ "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"Help" : "도움말",
"Personal" : "개인",
"Settings" : "설정",
@@ -9,6 +10,16 @@ OC.L10N.register(
"No app name specified" : "앱 이름이 지정되지 않았습니다.",
"Unknown filetype" : "알 수 없는 파일 형식",
"Invalid image" : "잘못된 그림",
+ "today" : "오늘",
+ "yesterday" : "어제",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "지난 달",
+ "_%n month ago_::_%n months ago_" : ["%n달 전 "],
+ "last year" : "작년",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n시간 전 "],
+ "_%n minute ago_::_%n minutes ago_" : ["%n분 전 "],
+ "seconds ago" : "초 전",
"web services under your control" : "내가 관리하는 웹 서비스",
"App directory already exists" : "앱 디렉터리가 이미 존재합니다.",
"Can't create app folder. Please fix permissions. %s" : "앱 폴더를 만들 수 없습니다. 권한을 수정하십시오. %s",
@@ -46,22 +57,11 @@ OC.L10N.register(
"Set an admin password." : "관리자의 암호를 설정합니다.",
"%s shared »%s« with you" : "%s 님이 %s을(를) 공유하였습니다",
"Could not find category \"%s\"" : "분류 \"%s\"을(를) 찾을 수 없습니다.",
- "seconds ago" : "초 전",
- "_%n minute ago_::_%n minutes ago_" : ["%n분 전 "],
- "_%n hour ago_::_%n hours ago_" : ["%n시간 전 "],
- "today" : "오늘",
- "yesterday" : "어제",
- "_%n day go_::_%n days ago_" : ["%n일 전 "],
- "last month" : "지난 달",
- "_%n month ago_::_%n months ago_" : ["%n달 전 "],
- "last year" : "작년",
- "years ago" : "년 전",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "사용자 명에는 다음과 같은 문자만 사용이 가능합니다: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "올바른 사용자 이름을 입력해야 함",
"A valid password must be provided" : "올바른 암호를 입력해야 함",
"The username is already being used" : "이 사용자명은 현재 사용중입니다",
"PHP module %s not installed." : "%s PHP 모듈이 설치되지 않았습니다.",
- "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"PostgreSQL >= 9 required" : "PostgreSQL 9 혹은 이상 버전을 필요로합니다",
"Please upgrade your database version" : "데이터베이스 버전을 업그레이드 하십시오",
"Error occurred while checking PostgreSQL version" : "PostgreSQL 버전을 확인하던중 오류가 발생하였습니다"
diff --git a/lib/l10n/ko.json b/lib/l10n/ko.json
index 4743476540c..a021fb34dd2 100644
--- a/lib/l10n/ko.json
+++ b/lib/l10n/ko.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"Help" : "도움말",
"Personal" : "개인",
"Settings" : "설정",
@@ -7,6 +8,16 @@
"No app name specified" : "앱 이름이 지정되지 않았습니다.",
"Unknown filetype" : "알 수 없는 파일 형식",
"Invalid image" : "잘못된 그림",
+ "today" : "오늘",
+ "yesterday" : "어제",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "지난 달",
+ "_%n month ago_::_%n months ago_" : ["%n달 전 "],
+ "last year" : "작년",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n시간 전 "],
+ "_%n minute ago_::_%n minutes ago_" : ["%n분 전 "],
+ "seconds ago" : "초 전",
"web services under your control" : "내가 관리하는 웹 서비스",
"App directory already exists" : "앱 디렉터리가 이미 존재합니다.",
"Can't create app folder. Please fix permissions. %s" : "앱 폴더를 만들 수 없습니다. 권한을 수정하십시오. %s",
@@ -44,22 +55,11 @@
"Set an admin password." : "관리자의 암호를 설정합니다.",
"%s shared »%s« with you" : "%s 님이 %s을(를) 공유하였습니다",
"Could not find category \"%s\"" : "분류 \"%s\"을(를) 찾을 수 없습니다.",
- "seconds ago" : "초 전",
- "_%n minute ago_::_%n minutes ago_" : ["%n분 전 "],
- "_%n hour ago_::_%n hours ago_" : ["%n시간 전 "],
- "today" : "오늘",
- "yesterday" : "어제",
- "_%n day go_::_%n days ago_" : ["%n일 전 "],
- "last month" : "지난 달",
- "_%n month ago_::_%n months ago_" : ["%n달 전 "],
- "last year" : "작년",
- "years ago" : "년 전",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "사용자 명에는 다음과 같은 문자만 사용이 가능합니다: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "올바른 사용자 이름을 입력해야 함",
"A valid password must be provided" : "올바른 암호를 입력해야 함",
"The username is already being used" : "이 사용자명은 현재 사용중입니다",
"PHP module %s not installed." : "%s PHP 모듈이 설치되지 않았습니다.",
- "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"PostgreSQL >= 9 required" : "PostgreSQL 9 혹은 이상 버전을 필요로합니다",
"Please upgrade your database version" : "데이터베이스 버전을 업그레이드 하십시오",
"Error occurred while checking PostgreSQL version" : "PostgreSQL 버전을 확인하던중 오류가 발생하였습니다"
diff --git a/lib/l10n/ku_IQ.js b/lib/l10n/ku_IQ.js
index 11313e28323..eea2d55138e 100644
--- a/lib/l10n/ku_IQ.js
+++ b/lib/l10n/ku_IQ.js
@@ -5,10 +5,11 @@ OC.L10N.register(
"Settings" : "ده‌ستكاری",
"Users" : "به‌كارهێنه‌ر",
"Admin" : "به‌ڕێوه‌به‌ری سه‌ره‌كی",
- "web services under your control" : "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "web services under your control" : "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ku_IQ.json b/lib/l10n/ku_IQ.json
index 6a40446ac9d..b2ab2dc219d 100644
--- a/lib/l10n/ku_IQ.json
+++ b/lib/l10n/ku_IQ.json
@@ -3,10 +3,11 @@
"Settings" : "ده‌ستكاری",
"Users" : "به‌كارهێنه‌ر",
"Admin" : "به‌ڕێوه‌به‌ری سه‌ره‌كی",
- "web services under your control" : "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "web services under your control" : "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/lb.js b/lib/l10n/lb.js
index 4a8b8277bbc..470652f4017 100644
--- a/lib/l10n/lb.js
+++ b/lib/l10n/lb.js
@@ -8,18 +8,18 @@ OC.L10N.register(
"Admin" : "Admin",
"Unknown filetype" : "Onbekannten Fichier Typ",
"Invalid image" : "Ongülteg d'Bild",
- "web services under your control" : "Web-Servicer ënnert denger Kontroll",
- "Authentication error" : "Authentifikatioun's Fehler",
- "%s shared »%s« with you" : "Den/D' %s huet »%s« mat dir gedeelt",
- "seconds ago" : "Sekonnen hir",
- "_%n minute ago_::_%n minutes ago_" : ["","%n Minutten hir"],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "haut",
"yesterday" : "gëschter",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "Läschte Mount",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "Läscht Joer",
- "years ago" : "Joren hier"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n Minutten hir"],
+ "seconds ago" : "Sekonnen hir",
+ "web services under your control" : "Web-Servicer ënnert denger Kontroll",
+ "Authentication error" : "Authentifikatioun's Fehler",
+ "%s shared »%s« with you" : "Den/D' %s huet »%s« mat dir gedeelt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/lb.json b/lib/l10n/lb.json
index e205f5e2fc3..2f63f042538 100644
--- a/lib/l10n/lb.json
+++ b/lib/l10n/lb.json
@@ -6,18 +6,18 @@
"Admin" : "Admin",
"Unknown filetype" : "Onbekannten Fichier Typ",
"Invalid image" : "Ongülteg d'Bild",
- "web services under your control" : "Web-Servicer ënnert denger Kontroll",
- "Authentication error" : "Authentifikatioun's Fehler",
- "%s shared »%s« with you" : "Den/D' %s huet »%s« mat dir gedeelt",
- "seconds ago" : "Sekonnen hir",
- "_%n minute ago_::_%n minutes ago_" : ["","%n Minutten hir"],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "haut",
"yesterday" : "gëschter",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "Läschte Mount",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "Läscht Joer",
- "years ago" : "Joren hier"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n Minutten hir"],
+ "seconds ago" : "Sekonnen hir",
+ "web services under your control" : "Web-Servicer ënnert denger Kontroll",
+ "Authentication error" : "Authentifikatioun's Fehler",
+ "%s shared »%s« with you" : "Den/D' %s huet »%s« mat dir gedeelt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/lo.js b/lib/l10n/lo.js
new file mode 100644
index 00000000000..784e8271ef3
--- /dev/null
+++ b/lib/l10n/lo.js
@@ -0,0 +1,10 @@
+OC.L10N.register(
+ "lib",
+ {
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""]
+},
+"nplurals=1; plural=0;");
diff --git a/lib/l10n/lo.json b/lib/l10n/lo.json
new file mode 100644
index 00000000000..3a3512d508d
--- /dev/null
+++ b/lib/l10n/lo.json
@@ -0,0 +1,8 @@
+{ "translations": {
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""]
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/lib/l10n/lt_LT.js b/lib/l10n/lt_LT.js
index 999be472453..1f05855b77e 100644
--- a/lib/l10n/lt_LT.js
+++ b/lib/l10n/lt_LT.js
@@ -9,6 +9,16 @@ OC.L10N.register(
"No app name specified" : "Nenurodytas programos pavadinimas",
"Unknown filetype" : "Nežinomas failo tipas",
"Invalid image" : "Netinkamas paveikslėlis",
+ "today" : "šiandien",
+ "yesterday" : "vakar",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "praeitą mėnesį",
+ "_%n month ago_::_%n months ago_" : ["Prieš %n mėnesį","Prieš %n mėnesius","Prieš %n mėnesių"],
+ "last year" : "praeitais metais",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["Prieš %n valandą","Prieš %n valandas","Prieš %n valandų"],
+ "_%n minute ago_::_%n minutes ago_" : ["prieš %n min.","Prieš % minutes","Prieš %n minučių"],
+ "seconds ago" : "prieš sekundę",
"web services under your control" : "jūsų valdomos web paslaugos",
"App directory already exists" : "Programos aplankas jau egzistuoja",
"Can't create app folder. Please fix permissions. %s" : "Nepavyksta sukurti aplanko. Prašome pataisyti leidimus. %s",
@@ -40,16 +50,6 @@ OC.L10N.register(
"Set an admin password." : "Nustatyti administratoriaus slaptažodį.",
"%s shared »%s« with you" : "%s pasidalino »%s« su tavimi",
"Could not find category \"%s\"" : "Nepavyko rasti kategorijos „%s“",
- "seconds ago" : "prieš sekundę",
- "_%n minute ago_::_%n minutes ago_" : ["prieš %n min.","Prieš % minutes","Prieš %n minučių"],
- "_%n hour ago_::_%n hours ago_" : ["Prieš %n valandą","Prieš %n valandas","Prieš %n valandų"],
- "today" : "šiandien",
- "yesterday" : "vakar",
- "_%n day go_::_%n days ago_" : ["Prieš %n dieną","Prieš %n dienas","Prieš %n dienų"],
- "last month" : "praeitą mėnesį",
- "_%n month ago_::_%n months ago_" : ["Prieš %n mėnesį","Prieš %n mėnesius","Prieš %n mėnesių"],
- "last year" : "praeitais metais",
- "years ago" : "prieš metus",
"A valid username must be provided" : "Vartotojo vardas turi būti tinkamas",
"A valid password must be provided" : "Slaptažodis turi būti tinkamas"
},
diff --git a/lib/l10n/lt_LT.json b/lib/l10n/lt_LT.json
index fb4908440fb..a3a53baf010 100644
--- a/lib/l10n/lt_LT.json
+++ b/lib/l10n/lt_LT.json
@@ -7,6 +7,16 @@
"No app name specified" : "Nenurodytas programos pavadinimas",
"Unknown filetype" : "Nežinomas failo tipas",
"Invalid image" : "Netinkamas paveikslėlis",
+ "today" : "šiandien",
+ "yesterday" : "vakar",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "praeitą mėnesį",
+ "_%n month ago_::_%n months ago_" : ["Prieš %n mėnesį","Prieš %n mėnesius","Prieš %n mėnesių"],
+ "last year" : "praeitais metais",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["Prieš %n valandą","Prieš %n valandas","Prieš %n valandų"],
+ "_%n minute ago_::_%n minutes ago_" : ["prieš %n min.","Prieš % minutes","Prieš %n minučių"],
+ "seconds ago" : "prieš sekundę",
"web services under your control" : "jūsų valdomos web paslaugos",
"App directory already exists" : "Programos aplankas jau egzistuoja",
"Can't create app folder. Please fix permissions. %s" : "Nepavyksta sukurti aplanko. Prašome pataisyti leidimus. %s",
@@ -38,16 +48,6 @@
"Set an admin password." : "Nustatyti administratoriaus slaptažodį.",
"%s shared »%s« with you" : "%s pasidalino »%s« su tavimi",
"Could not find category \"%s\"" : "Nepavyko rasti kategorijos „%s“",
- "seconds ago" : "prieš sekundę",
- "_%n minute ago_::_%n minutes ago_" : ["prieš %n min.","Prieš % minutes","Prieš %n minučių"],
- "_%n hour ago_::_%n hours ago_" : ["Prieš %n valandą","Prieš %n valandas","Prieš %n valandų"],
- "today" : "šiandien",
- "yesterday" : "vakar",
- "_%n day go_::_%n days ago_" : ["Prieš %n dieną","Prieš %n dienas","Prieš %n dienų"],
- "last month" : "praeitą mėnesį",
- "_%n month ago_::_%n months ago_" : ["Prieš %n mėnesį","Prieš %n mėnesius","Prieš %n mėnesių"],
- "last year" : "praeitais metais",
- "years ago" : "prieš metus",
"A valid username must be provided" : "Vartotojo vardas turi būti tinkamas",
"A valid password must be provided" : "Slaptažodis turi būti tinkamas"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/lib/l10n/lv.js b/lib/l10n/lv.js
index 666d2e9d5f6..1f381ecb9bf 100644
--- a/lib/l10n/lv.js
+++ b/lib/l10n/lv.js
@@ -6,6 +6,19 @@ OC.L10N.register(
"Settings" : "Iestatījumi",
"Users" : "Lietotāji",
"Admin" : "Administratori",
+ "Recommended" : "Rekomendēts",
+ "Unknown filetype" : "Nezināms datnes tips",
+ "Invalid image" : "Nederīgs attēls",
+ "today" : "šodien",
+ "yesterday" : "vakar",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "pagājušajā mēnesī",
+ "_%n month ago_::_%n months ago_" : ["","","Pirms %n mēnešiem"],
+ "last year" : "gājušajā gadā",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","Pirms %n stundām"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","Pirms %n minūtēm"],
+ "seconds ago" : "sekundes atpakaļ",
"web services under your control" : "tīmekļa servisi tavā varā",
"Application is not enabled" : "Lietotne nav aktivēta",
"Authentication error" : "Autentifikācijas kļūda",
@@ -25,16 +38,6 @@ OC.L10N.register(
"Set an admin password." : "Iestatiet administratora paroli.",
"%s shared »%s« with you" : "%s kopīgots »%s« ar jums",
"Could not find category \"%s\"" : "Nevarēja atrast kategoriju “%s”",
- "seconds ago" : "sekundes atpakaļ",
- "_%n minute ago_::_%n minutes ago_" : ["","","Pirms %n minūtēm"],
- "_%n hour ago_::_%n hours ago_" : ["","","Pirms %n stundām"],
- "today" : "šodien",
- "yesterday" : "vakar",
- "_%n day go_::_%n days ago_" : ["","","Pirms %n dienām"],
- "last month" : "pagājušajā mēnesī",
- "_%n month ago_::_%n months ago_" : ["","","Pirms %n mēnešiem"],
- "last year" : "gājušajā gadā",
- "years ago" : "gadus atpakaļ",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
"A valid password must be provided" : "Jānorāda derīga parole",
"The username is already being used" : "Šāds lietotājvārds jau tiek izmantots"
diff --git a/lib/l10n/lv.json b/lib/l10n/lv.json
index 42bcc70e12d..a729e3a40b9 100644
--- a/lib/l10n/lv.json
+++ b/lib/l10n/lv.json
@@ -4,6 +4,19 @@
"Settings" : "Iestatījumi",
"Users" : "Lietotāji",
"Admin" : "Administratori",
+ "Recommended" : "Rekomendēts",
+ "Unknown filetype" : "Nezināms datnes tips",
+ "Invalid image" : "Nederīgs attēls",
+ "today" : "šodien",
+ "yesterday" : "vakar",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "pagājušajā mēnesī",
+ "_%n month ago_::_%n months ago_" : ["","","Pirms %n mēnešiem"],
+ "last year" : "gājušajā gadā",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","Pirms %n stundām"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","Pirms %n minūtēm"],
+ "seconds ago" : "sekundes atpakaļ",
"web services under your control" : "tīmekļa servisi tavā varā",
"Application is not enabled" : "Lietotne nav aktivēta",
"Authentication error" : "Autentifikācijas kļūda",
@@ -23,16 +36,6 @@
"Set an admin password." : "Iestatiet administratora paroli.",
"%s shared »%s« with you" : "%s kopīgots »%s« ar jums",
"Could not find category \"%s\"" : "Nevarēja atrast kategoriju “%s”",
- "seconds ago" : "sekundes atpakaļ",
- "_%n minute ago_::_%n minutes ago_" : ["","","Pirms %n minūtēm"],
- "_%n hour ago_::_%n hours ago_" : ["","","Pirms %n stundām"],
- "today" : "šodien",
- "yesterday" : "vakar",
- "_%n day go_::_%n days ago_" : ["","","Pirms %n dienām"],
- "last month" : "pagājušajā mēnesī",
- "_%n month ago_::_%n months ago_" : ["","","Pirms %n mēnešiem"],
- "last year" : "gājušajā gadā",
- "years ago" : "gadus atpakaļ",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
"A valid password must be provided" : "Jānorāda derīga parole",
"The username is already being used" : "Šāds lietotājvārds jau tiek izmantots"
diff --git a/lib/l10n/mg.js b/lib/l10n/mg.js
index 9ac3e05d6c6..9408adc0dc3 100644
--- a/lib/l10n/mg.js
+++ b/lib/l10n/mg.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/mg.json b/lib/l10n/mg.json
index 82a8a99d300..2a227e468c7 100644
--- a/lib/l10n/mg.json
+++ b/lib/l10n/mg.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/mk.js b/lib/l10n/mk.js
index 35166454dd2..5ab596f4c95 100644
--- a/lib/l10n/mk.js
+++ b/lib/l10n/mk.js
@@ -9,6 +9,16 @@ OC.L10N.register(
"No app name specified" : "Не е специфицирано име на апликацијата",
"Unknown filetype" : "Непознат тип на датотека",
"Invalid image" : "Невалидна фотографија",
+ "today" : "денеска",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "минатиот месец",
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "last year" : "минатата година",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "пред секунди",
"web services under your control" : "веб сервиси под Ваша контрола",
"Application is not enabled" : "Апликацијата не е овозможена",
"Authentication error" : "Грешка во автентикација",
@@ -25,16 +35,6 @@ OC.L10N.register(
"Set an admin password." : "Постави администраторска лозинка.",
"%s shared »%s« with you" : "%s споделено »%s« со вас",
"Could not find category \"%s\"" : "Не можам да најдам категорија „%s“",
- "seconds ago" : "пред секунди",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
- "today" : "денеска",
- "yesterday" : "вчера",
- "_%n day go_::_%n days ago_" : ["",""],
- "last month" : "минатиот месец",
- "_%n month ago_::_%n months ago_" : ["",""],
- "last year" : "минатата година",
- "years ago" : "пред години",
"A valid username must be provided" : "Мора да се обезбеди валидно корисничко име ",
"A valid password must be provided" : "Мора да се обезбеди валидна лозинка",
"The username is already being used" : "Корисничкото име е веќе во употреба"
diff --git a/lib/l10n/mk.json b/lib/l10n/mk.json
index 89e839919b9..de9fff6b1a1 100644
--- a/lib/l10n/mk.json
+++ b/lib/l10n/mk.json
@@ -7,6 +7,16 @@
"No app name specified" : "Не е специфицирано име на апликацијата",
"Unknown filetype" : "Непознат тип на датотека",
"Invalid image" : "Невалидна фотографија",
+ "today" : "денеска",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "минатиот месец",
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "last year" : "минатата година",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "пред секунди",
"web services under your control" : "веб сервиси под Ваша контрола",
"Application is not enabled" : "Апликацијата не е овозможена",
"Authentication error" : "Грешка во автентикација",
@@ -23,16 +33,6 @@
"Set an admin password." : "Постави администраторска лозинка.",
"%s shared »%s« with you" : "%s споделено »%s« со вас",
"Could not find category \"%s\"" : "Не можам да најдам категорија „%s“",
- "seconds ago" : "пред секунди",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
- "today" : "денеска",
- "yesterday" : "вчера",
- "_%n day go_::_%n days ago_" : ["",""],
- "last month" : "минатиот месец",
- "_%n month ago_::_%n months ago_" : ["",""],
- "last year" : "минатата година",
- "years ago" : "пред години",
"A valid username must be provided" : "Мора да се обезбеди валидно корисничко име ",
"A valid password must be provided" : "Мора да се обезбеди валидна лозинка",
"The username is already being used" : "Корисничкото име е веќе во употреба"
diff --git a/lib/l10n/ml.js b/lib/l10n/ml.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/ml.js
+++ b/lib/l10n/ml.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ml.json b/lib/l10n/ml.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/ml.json
+++ b/lib/l10n/ml.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ml_IN.js b/lib/l10n/ml_IN.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/ml_IN.js
+++ b/lib/l10n/ml_IN.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ml_IN.json b/lib/l10n/ml_IN.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/ml_IN.json
+++ b/lib/l10n/ml_IN.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/mn.js b/lib/l10n/mn.js
index da0dcc6bdde..3d8b52309d6 100644
--- a/lib/l10n/mn.js
+++ b/lib/l10n/mn.js
@@ -1,9 +1,12 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "Settings" : "Тохиргоо",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "Authentication error" : "Нотолгооны алдаа"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/mn.json b/lib/l10n/mn.json
index 4286553dd0c..8b0f4650d50 100644
--- a/lib/l10n/mn.json
+++ b/lib/l10n/mn.json
@@ -1,7 +1,10 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "Settings" : "Тохиргоо",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "Authentication error" : "Нотолгооны алдаа"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ms_MY.js b/lib/l10n/ms_MY.js
index 2a74f51e2f6..a501399af5c 100644
--- a/lib/l10n/ms_MY.js
+++ b/lib/l10n/ms_MY.js
@@ -6,11 +6,12 @@ OC.L10N.register(
"Settings" : "Tetapan",
"Users" : "Pengguna",
"Admin" : "Admin",
- "web services under your control" : "Perkhidmatan web di bawah kawalan anda",
- "Authentication error" : "Ralat pengesahan",
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "web services under your control" : "Perkhidmatan web di bawah kawalan anda",
+ "Authentication error" : "Ralat pengesahan"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/ms_MY.json b/lib/l10n/ms_MY.json
index 5285610e70a..8c2a83136ee 100644
--- a/lib/l10n/ms_MY.json
+++ b/lib/l10n/ms_MY.json
@@ -4,11 +4,12 @@
"Settings" : "Tetapan",
"Users" : "Pengguna",
"Admin" : "Admin",
- "web services under your control" : "Perkhidmatan web di bawah kawalan anda",
- "Authentication error" : "Ralat pengesahan",
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "web services under your control" : "Perkhidmatan web di bawah kawalan anda",
+ "Authentication error" : "Ralat pengesahan"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/mt_MT.js b/lib/l10n/mt_MT.js
index 9112b35ebe4..b26809fe0cb 100644
--- a/lib/l10n/mt_MT.js
+++ b/lib/l10n/mt_MT.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["","","",""],
+ "_%n day ago_::_%n days ago_" : ["","","",""],
+ "_%n month ago_::_%n months ago_" : ["","","",""],
+ "_%n year ago_::_%n years ago_" : ["","","",""],
"_%n hour ago_::_%n hours ago_" : ["","","",""],
- "_%n day go_::_%n days ago_" : ["","","",""],
- "_%n month ago_::_%n months ago_" : ["","","",""]
+ "_%n minute ago_::_%n minutes ago_" : ["","","",""]
},
"nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);");
diff --git a/lib/l10n/mt_MT.json b/lib/l10n/mt_MT.json
index 6b794297014..e87af1606cd 100644
--- a/lib/l10n/mt_MT.json
+++ b/lib/l10n/mt_MT.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["","","",""],
+ "_%n day ago_::_%n days ago_" : ["","","",""],
+ "_%n month ago_::_%n months ago_" : ["","","",""],
+ "_%n year ago_::_%n years ago_" : ["","","",""],
"_%n hour ago_::_%n hours ago_" : ["","","",""],
- "_%n day go_::_%n days ago_" : ["","","",""],
- "_%n month ago_::_%n months ago_" : ["","","",""]
+ "_%n minute ago_::_%n minutes ago_" : ["","","",""]
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);"
} \ No newline at end of file
diff --git a/lib/l10n/my_MM.js b/lib/l10n/my_MM.js
index c08021fdbd3..50489cd16c2 100644
--- a/lib/l10n/my_MM.js
+++ b/lib/l10n/my_MM.js
@@ -4,18 +4,18 @@ OC.L10N.register(
"Help" : "အကူအညီ",
"Users" : "သုံးစွဲသူ",
"Admin" : "အက်ဒမင်",
- "web services under your control" : "သင်၏ထိန်းချုပ်မှု့အောက်တွင်ရှိသော Web services",
- "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
- "Could not find category \"%s\"" : "\"%s\"ခေါင်းစဉ်ကို ရှာမတွေ့ပါ",
- "seconds ago" : "စက္ကန့်အနည်းငယ်က",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
"today" : "ယနေ့",
"yesterday" : "မနေ့က",
- "_%n day go_::_%n days ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "ပြီးခဲ့သောလ",
"_%n month ago_::_%n months ago_" : [""],
"last year" : "မနှစ်က",
- "years ago" : "နှစ် အရင်က"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "seconds ago" : "စက္ကန့်အနည်းငယ်က",
+ "web services under your control" : "သင်၏ထိန်းချုပ်မှု့အောက်တွင်ရှိသော Web services",
+ "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
+ "Could not find category \"%s\"" : "\"%s\"ခေါင်းစဉ်ကို ရှာမတွေ့ပါ"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/my_MM.json b/lib/l10n/my_MM.json
index 3756c65ae0b..c0b2bd97df3 100644
--- a/lib/l10n/my_MM.json
+++ b/lib/l10n/my_MM.json
@@ -2,18 +2,18 @@
"Help" : "အကူအညီ",
"Users" : "သုံးစွဲသူ",
"Admin" : "အက်ဒမင်",
- "web services under your control" : "သင်၏ထိန်းချုပ်မှု့အောက်တွင်ရှိသော Web services",
- "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
- "Could not find category \"%s\"" : "\"%s\"ခေါင်းစဉ်ကို ရှာမတွေ့ပါ",
- "seconds ago" : "စက္ကန့်အနည်းငယ်က",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
"today" : "ယနေ့",
"yesterday" : "မနေ့က",
- "_%n day go_::_%n days ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "ပြီးခဲ့သောလ",
"_%n month ago_::_%n months ago_" : [""],
"last year" : "မနှစ်က",
- "years ago" : "နှစ် အရင်က"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "seconds ago" : "စက္ကန့်အနည်းငယ်က",
+ "web services under your control" : "သင်၏ထိန်းချုပ်မှု့အောက်တွင်ရှိသော Web services",
+ "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်",
+ "Could not find category \"%s\"" : "\"%s\"ခေါင်းစဉ်ကို ရှာမတွေ့ပါ"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js
index c50537ce67d..d3140df2694 100644
--- a/lib/l10n/nb_NO.js
+++ b/lib/l10n/nb_NO.js
@@ -7,15 +7,39 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til config-mappen%s.",
"Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
+ "PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.",
+ "Following databases are supported: %s" : "Følgende databaser støttes: %s",
+ "The command line tool %s could not be found" : "Kommandolinjeverktøyet %s ble ikke funnet",
+ "The library %s is not available." : "Biblioteket %s er ikke tilgjengelig.",
+ "Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med en versjon høyere enn %s kreves - tilgjengelig versjon %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med en versjon lavere nn %s kreves - tilgjengelig version %s.",
+ "Following platforms are supported: %s" : "Følgende plattformer støttes: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s eller høyere kreves.",
+ "ownCloud with a version lower than %s is required." : "ownCloud med en versjon lavere enn %s kreves.",
"Help" : "Hjelp",
"Personal" : "Personlig",
"Settings" : "Innstillinger",
"Users" : "Brukere",
"Admin" : "Admin",
+ "Recommended" : "Anbefalt",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App \\\"%s\\\" kan ikke installeres fordi den ikke er kompatibel med denne versjoen av ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \\\"%s\\\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"No app name specified" : "Intet app-navn spesifisert",
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag siden","%n dager siden"],
+ "last month" : "forrige måned",
+ "_%n month ago_::_%n months ago_" : ["for %n måned siden","for %n måneder siden"],
+ "last year" : "forrige år",
+ "_%n year ago_::_%n years ago_" : ["%n år siden","%n år siden"],
+ "_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
+ "_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
+ "seconds ago" : "for få sekunder siden",
+ "Database Error" : "Databasefeil",
+ "Please contact your system administrator." : "Vennligst kontakt systemadministratoren.",
"web services under your control" : "webtjenester som du kontrollerer",
"App directory already exists" : "App-mappe finnes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke opprette app-mappe. Vennligst ordne opp i tillatelser. %s",
@@ -53,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
"%s shared »%s« with you" : "%s delte »%s« med deg",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi serveren ikke tillater delinger fra type %i",
"Sharing %s failed, because the file does not exist" : "Deling av %s feilet, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke lov til å dele %s",
"Sharing %s failed, because the user %s is the item owner" : "Deling av %s feilet, fordi brukeren %s er eier av elementet",
@@ -63,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s feilet, fordi %s ikke er medlem av gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
"Setting permissions for %s failed, because the item was not found" : "Setting av tillatelser for %s feilet, fordi elementet ikke ble funnet",
@@ -77,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
- "seconds ago" : "for få sekunder siden",
- "_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
- "_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
- "today" : "i dag",
- "yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["for %n dag siden","for %n dager siden"],
- "last month" : "forrige måned",
- "_%n month ago_::_%n months ago_" : ["for %n måned siden","for %n måneder siden"],
- "last year" : "forrige år",
- "years ago" : "årevis siden",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-\"",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"A valid password must be provided" : "Oppgi et gyldig passord",
@@ -102,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.",
"Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
- "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Be server-administratoren om å oppdatere PHP til nyeste versjon. PHP-versjonen du bruker støttes ikke lenger av ownCloud og PHP-fellesskapet.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er aktivert. ownCloud krever at det deaktiveres for å fungere korrekt.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er en avskrevet og stort sett unyttig innstilling som bør deaktiveres. Be server-administratoren om å deaktivere det i php.ini eller i konfigurasjonen for web-serveren.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes er aktivert. ownCloud krever at det deaktiveres for å fungere korrekt.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes er en avskrevet og stort sett unyttig innstilling som bør deaktiveres. Be server-administratoren om å deaktivere det i php.ini eller i konfigurasjonen for web-serveren.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?",
"Please ask your server administrator to restart the web server." : "Be server-administratoren om å starte web-serveren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json
index 4fe3148dc19..07caa219df7 100644
--- a/lib/l10n/nb_NO.json
+++ b/lib/l10n/nb_NO.json
@@ -5,15 +5,39 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til config-mappen%s.",
"Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
+ "PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.",
+ "Following databases are supported: %s" : "Følgende databaser støttes: %s",
+ "The command line tool %s could not be found" : "Kommandolinjeverktøyet %s ble ikke funnet",
+ "The library %s is not available." : "Biblioteket %s er ikke tilgjengelig.",
+ "Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med en versjon høyere enn %s kreves - tilgjengelig versjon %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med en versjon lavere nn %s kreves - tilgjengelig version %s.",
+ "Following platforms are supported: %s" : "Følgende plattformer støttes: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s eller høyere kreves.",
+ "ownCloud with a version lower than %s is required." : "ownCloud med en versjon lavere enn %s kreves.",
"Help" : "Hjelp",
"Personal" : "Personlig",
"Settings" : "Innstillinger",
"Users" : "Brukere",
"Admin" : "Admin",
+ "Recommended" : "Anbefalt",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App \\\"%s\\\" kan ikke installeres fordi den ikke er kompatibel med denne versjoen av ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \\\"%s\\\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"No app name specified" : "Intet app-navn spesifisert",
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag siden","%n dager siden"],
+ "last month" : "forrige måned",
+ "_%n month ago_::_%n months ago_" : ["for %n måned siden","for %n måneder siden"],
+ "last year" : "forrige år",
+ "_%n year ago_::_%n years ago_" : ["%n år siden","%n år siden"],
+ "_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
+ "_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
+ "seconds ago" : "for få sekunder siden",
+ "Database Error" : "Databasefeil",
+ "Please contact your system administrator." : "Vennligst kontakt systemadministratoren.",
"web services under your control" : "webtjenester som du kontrollerer",
"App directory already exists" : "App-mappe finnes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke opprette app-mappe. Vennligst ordne opp i tillatelser. %s",
@@ -51,6 +75,7 @@
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
"%s shared »%s« with you" : "%s delte »%s« med deg",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi serveren ikke tillater delinger fra type %i",
"Sharing %s failed, because the file does not exist" : "Deling av %s feilet, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke lov til å dele %s",
"Sharing %s failed, because the user %s is the item owner" : "Deling av %s feilet, fordi brukeren %s er eier av elementet",
@@ -61,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s feilet, fordi %s ikke er medlem av gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
"Setting permissions for %s failed, because the item was not found" : "Setting av tillatelser for %s feilet, fordi elementet ikke ble funnet",
@@ -75,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
- "seconds ago" : "for få sekunder siden",
- "_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
- "_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
- "today" : "i dag",
- "yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["for %n dag siden","for %n dager siden"],
- "last month" : "forrige måned",
- "_%n month ago_::_%n months ago_" : ["for %n måned siden","for %n måneder siden"],
- "last year" : "forrige år",
- "years ago" : "årevis siden",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-\"",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"A valid password must be provided" : "Oppgi et gyldig passord",
@@ -100,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.",
"Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
- "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Be server-administratoren om å oppdatere PHP til nyeste versjon. PHP-versjonen du bruker støttes ikke lenger av ownCloud og PHP-fellesskapet.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er aktivert. ownCloud krever at det deaktiveres for å fungere korrekt.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er en avskrevet og stort sett unyttig innstilling som bør deaktiveres. Be server-administratoren om å deaktivere det i php.ini eller i konfigurasjonen for web-serveren.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes er aktivert. ownCloud krever at det deaktiveres for å fungere korrekt.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes er en avskrevet og stort sett unyttig innstilling som bør deaktiveres. Be server-administratoren om å deaktivere det i php.ini eller i konfigurasjonen for web-serveren.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?",
"Please ask your server administrator to restart the web server." : "Be server-administratoren om å starte web-serveren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
diff --git a/lib/l10n/nds.js b/lib/l10n/nds.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/nds.js
+++ b/lib/l10n/nds.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/nds.json b/lib/l10n/nds.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/nds.json
+++ b/lib/l10n/nds.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ne.js b/lib/l10n/ne.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/ne.js
+++ b/lib/l10n/ne.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ne.json b/lib/l10n/ne.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/ne.json
+++ b/lib/l10n/ne.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index 9ec355862f3..848fcb03d22 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -4,9 +4,19 @@ OC.L10N.register(
"Cannot write into \"config\" directory!" : "Kan niet schrijven naar de \"config\" directory!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Dit kan hersteld worden door de webserver schrijfrechten te geven op de de config directory",
"See %s" : "Zie %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %sgeven op de de config directory%s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver %sschrijfrechten te geven op de de config directory%s",
"Sample configuration detected" : "Voorbeeldconfiguratie gevonden",
"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" : "Blijkbaar is de voorbeeldconfiguratie gekopieerd. Dit kan uw installatie beschadigen en wordt niet dan ook ondersteund. Lees de documentatie voordat u wijzigingen aan config.php doorvoert",
+ "PHP %s or higher is required." : "PHP %s of hoger vereist.",
+ "PHP with a version lower than %s is required." : "PHP met een versie lager dan %s is vereist.",
+ "Following databases are supported: %s" : "De volgende databases worden ondersteund: %s",
+ "The command line tool %s could not be found" : "Commandoregel tool %s is niet gevonden",
+ "The library %s is not available." : "Library %s is niet beschikbaar.",
+ "Library %s with a version higher than %s is required - available version %s." : "Library %s met een versienummer hoger dan %s is vereist - beschikbare versie %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Library %s met een versienummer lager dan %s is vereist - beschikbare versie %s.",
+ "Following platforms are supported: %s" : "De volgende platformen worden ondersteund: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s of hoger vereist.",
+ "ownCloud with a version lower than %s is required." : "ownCloud met een versie lager dan %s is vereist.",
"Help" : "Help",
"Personal" : "Persoonlijk",
"Settings" : "Instellingen",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Beheerder",
"Recommended" : "Aanbevolen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App \\\"%s\\\" kan niet worden geïnstalleerd omdat de app niet compatible is met deze versie van ownCloud.",
- "No app name specified" : "De app naam is niet gespecificeerd.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \\\"%s\\\" kan niet worden geïnstalleerd omdat de volgende afhankelijkheden niet zijn ingevuld: %s",
+ "No app name specified" : "Geen app naam opgegeven.",
"Unknown filetype" : "Onbekend bestandsformaat",
"Invalid image" : "Ongeldige afbeelding",
+ "today" : "vandaag",
+ "yesterday" : "gisteren",
+ "_%n day ago_::_%n days ago_" : ["%n dag geleden","%n dagen geleden"],
+ "last month" : "vorige maand",
+ "_%n month ago_::_%n months ago_" : ["%n maand geleden","%n maanden geleden"],
+ "last year" : "vorig jaar",
+ "_%n year ago_::_%n years ago_" : ["%n jaar geleden","%n jaar geleden"],
+ "_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
+ "seconds ago" : "seconden geleden",
+ "Database Error" : "Database fout",
+ "Please contact your system administrator." : "Neem contact op met uw systeembeheerder.",
"web services under your control" : "Webdiensten in eigen beheer",
"App directory already exists" : "App directory bestaat al",
"Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Stel een beheerderswachtwoord in.",
"Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s",
"%s shared »%s« with you" : "%s deelde »%s« met u",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Delen van %s is mislukt, omdat de share-backend niet toestaat om type %i te delen",
"Sharing %s failed, because the file does not exist" : "Delen van %s is mislukt, omdat het bestand niet bestaat",
"You are not allowed to share %s" : "U bent niet bevoegd om %s te delen",
"Sharing %s failed, because the user %s is the item owner" : "Delen van %s is mislukt, omdat de gebruiker %s de eigenaar is",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s",
"You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan",
"Sharing %s failed, because sharing with links is not allowed" : "Delen van %s is mislukt, omdat het delen met links niet is toegestaan",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.",
"Share type %s is not valid for %s" : "Delen van type %s is niet geldig voor %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Instellen van de permissies voor %s is mislukt, omdat de permissies hoger zijn dan de aan %s toegekende permissies",
"Setting permissions for %s failed, because the item was not found" : "Instellen van de permissies voor %s is mislukt, omdat het object niet is gevonden",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Delen van %s is mislukt, omdat de share-backend voor %s de bron niet kon vinden",
"Sharing %s failed, because the file could not be found in the file cache" : "Delen van %s is mislukt, omdat het bestand niet in de bestandscache kon worden gevonden",
"Could not find category \"%s\"" : "Kon categorie \"%s\" niet vinden",
- "seconds ago" : "seconden geleden",
- "_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
- "_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
- "today" : "vandaag",
- "yesterday" : "gisteren",
- "_%n day go_::_%n days ago_" : ["%n dag terug","%n dagen geleden"],
- "last month" : "vorige maand",
- "_%n month ago_::_%n months ago_" : ["%n maand geleden","%n maanden geleden"],
- "last year" : "vorig jaar",
- "years ago" : "jaar geleden",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Alleen de volgende tekens zijn toegestaan in een gebruikersnaam: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Installeer één van de talen op uw systeem en herstart uw webserver.",
"Please ask your server administrator to install the module." : "Vraag uw beheerder om de module te installeren.",
"PHP module %s not installed." : "PHP module %s niet geïnstalleerd.",
- "PHP %s or higher is required." : "PHP %s of hoger vereist.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vraag uw beheerder om PHP bij te werken tot de laatste versie. Uw PHP versie wordt niet langer ondersteund door ownCloud en de PHP community.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is ingeschakeld. Voor een goede werking van ownCloud moet die modus zijn uitgeschakeld.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is niet langer zinvol en zou eigenlijk gedeactiveerd moeten worden. Vraag uw beheerder om Safe Mode in php.ini of in de webserver configuratie te deactiveren.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes is geactiveerd. Voor een goede werking van ownCloud moet dit zijn uitgeschakeld.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes is niet langer zinvol en zou eigenlijk gedeactiveerd moeten worden. Vraag uw beheerder om Safe Mode in php.ini of in de webserver configuratie te deactiveren.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP modules zijn geïnstalleerd, maar worden ze nog steeds als ontbrekend aangegeven?",
"Please ask your server administrator to restart the web server." : "Vraag uw beheerder de webserver opnieuw op te starten.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index 43c46b25704..706ecc301a9 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -2,9 +2,19 @@
"Cannot write into \"config\" directory!" : "Kan niet schrijven naar de \"config\" directory!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Dit kan hersteld worden door de webserver schrijfrechten te geven op de de config directory",
"See %s" : "Zie %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %sgeven op de de config directory%s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver %sschrijfrechten te geven op de de config directory%s",
"Sample configuration detected" : "Voorbeeldconfiguratie gevonden",
"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" : "Blijkbaar is de voorbeeldconfiguratie gekopieerd. Dit kan uw installatie beschadigen en wordt niet dan ook ondersteund. Lees de documentatie voordat u wijzigingen aan config.php doorvoert",
+ "PHP %s or higher is required." : "PHP %s of hoger vereist.",
+ "PHP with a version lower than %s is required." : "PHP met een versie lager dan %s is vereist.",
+ "Following databases are supported: %s" : "De volgende databases worden ondersteund: %s",
+ "The command line tool %s could not be found" : "Commandoregel tool %s is niet gevonden",
+ "The library %s is not available." : "Library %s is niet beschikbaar.",
+ "Library %s with a version higher than %s is required - available version %s." : "Library %s met een versienummer hoger dan %s is vereist - beschikbare versie %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Library %s met een versienummer lager dan %s is vereist - beschikbare versie %s.",
+ "Following platforms are supported: %s" : "De volgende platformen worden ondersteund: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s of hoger vereist.",
+ "ownCloud with a version lower than %s is required." : "ownCloud met een versie lager dan %s is vereist.",
"Help" : "Help",
"Personal" : "Persoonlijk",
"Settings" : "Instellingen",
@@ -12,9 +22,22 @@
"Admin" : "Beheerder",
"Recommended" : "Aanbevolen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App \\\"%s\\\" kan niet worden geïnstalleerd omdat de app niet compatible is met deze versie van ownCloud.",
- "No app name specified" : "De app naam is niet gespecificeerd.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \\\"%s\\\" kan niet worden geïnstalleerd omdat de volgende afhankelijkheden niet zijn ingevuld: %s",
+ "No app name specified" : "Geen app naam opgegeven.",
"Unknown filetype" : "Onbekend bestandsformaat",
"Invalid image" : "Ongeldige afbeelding",
+ "today" : "vandaag",
+ "yesterday" : "gisteren",
+ "_%n day ago_::_%n days ago_" : ["%n dag geleden","%n dagen geleden"],
+ "last month" : "vorige maand",
+ "_%n month ago_::_%n months ago_" : ["%n maand geleden","%n maanden geleden"],
+ "last year" : "vorig jaar",
+ "_%n year ago_::_%n years ago_" : ["%n jaar geleden","%n jaar geleden"],
+ "_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
+ "seconds ago" : "seconden geleden",
+ "Database Error" : "Database fout",
+ "Please contact your system administrator." : "Neem contact op met uw systeembeheerder.",
"web services under your control" : "Webdiensten in eigen beheer",
"App directory already exists" : "App directory bestaat al",
"Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Stel een beheerderswachtwoord in.",
"Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s",
"%s shared »%s« with you" : "%s deelde »%s« met u",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Delen van %s is mislukt, omdat de share-backend niet toestaat om type %i te delen",
"Sharing %s failed, because the file does not exist" : "Delen van %s is mislukt, omdat het bestand niet bestaat",
"You are not allowed to share %s" : "U bent niet bevoegd om %s te delen",
"Sharing %s failed, because the user %s is the item owner" : "Delen van %s is mislukt, omdat de gebruiker %s de eigenaar is",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s",
"You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan",
"Sharing %s failed, because sharing with links is not allowed" : "Delen van %s is mislukt, omdat het delen met links niet is toegestaan",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.",
"Share type %s is not valid for %s" : "Delen van type %s is niet geldig voor %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Instellen van de permissies voor %s is mislukt, omdat de permissies hoger zijn dan de aan %s toegekende permissies",
"Setting permissions for %s failed, because the item was not found" : "Instellen van de permissies voor %s is mislukt, omdat het object niet is gevonden",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Delen van %s is mislukt, omdat de share-backend voor %s de bron niet kon vinden",
"Sharing %s failed, because the file could not be found in the file cache" : "Delen van %s is mislukt, omdat het bestand niet in de bestandscache kon worden gevonden",
"Could not find category \"%s\"" : "Kon categorie \"%s\" niet vinden",
- "seconds ago" : "seconden geleden",
- "_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
- "_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
- "today" : "vandaag",
- "yesterday" : "gisteren",
- "_%n day go_::_%n days ago_" : ["%n dag terug","%n dagen geleden"],
- "last month" : "vorige maand",
- "_%n month ago_::_%n months ago_" : ["%n maand geleden","%n maanden geleden"],
- "last year" : "vorig jaar",
- "years ago" : "jaar geleden",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Alleen de volgende tekens zijn toegestaan in een gebruikersnaam: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Installeer één van de talen op uw systeem en herstart uw webserver.",
"Please ask your server administrator to install the module." : "Vraag uw beheerder om de module te installeren.",
"PHP module %s not installed." : "PHP module %s niet geïnstalleerd.",
- "PHP %s or higher is required." : "PHP %s of hoger vereist.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vraag uw beheerder om PHP bij te werken tot de laatste versie. Uw PHP versie wordt niet langer ondersteund door ownCloud en de PHP community.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is ingeschakeld. Voor een goede werking van ownCloud moet die modus zijn uitgeschakeld.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is niet langer zinvol en zou eigenlijk gedeactiveerd moeten worden. Vraag uw beheerder om Safe Mode in php.ini of in de webserver configuratie te deactiveren.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes is geactiveerd. Voor een goede werking van ownCloud moet dit zijn uitgeschakeld.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes is niet langer zinvol en zou eigenlijk gedeactiveerd moeten worden. Vraag uw beheerder om Safe Mode in php.ini of in de webserver configuratie te deactiveren.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP modules zijn geïnstalleerd, maar worden ze nog steeds als ontbrekend aangegeven?",
"Please ask your server administrator to restart the web server." : "Vraag uw beheerder de webserver opnieuw op te starten.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist",
diff --git a/lib/l10n/nn_NO.js b/lib/l10n/nn_NO.js
index a8424759edd..b16dd54cc18 100644
--- a/lib/l10n/nn_NO.js
+++ b/lib/l10n/nn_NO.js
@@ -8,19 +8,19 @@ OC.L10N.register(
"Admin" : "Administrer",
"Unknown filetype" : "Ukjend filtype",
"Invalid image" : "Ugyldig bilete",
- "web services under your control" : "Vev tjenester under din kontroll",
- "Authentication error" : "Feil i autentisering",
- "%s shared »%s« with you" : "%s delte «%s» med deg",
- "seconds ago" : "sekund sidan",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutt sidan"],
- "_%n hour ago_::_%n hours ago_" : ["","%n timar sidan"],
"today" : "i dag",
"yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["","%n dagar sidan"],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "førre månad",
"_%n month ago_::_%n months ago_" : ["","%n månadar sidan"],
"last year" : "i fjor",
- "years ago" : "år sidan",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n timar sidan"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutt sidan"],
+ "seconds ago" : "sekund sidan",
+ "web services under your control" : "Vev tjenester under din kontroll",
+ "Authentication error" : "Feil i autentisering",
+ "%s shared »%s« with you" : "%s delte «%s» med deg",
"A valid username must be provided" : "Du må oppgje eit gyldig brukarnamn",
"A valid password must be provided" : "Du må oppgje eit gyldig passord"
},
diff --git a/lib/l10n/nn_NO.json b/lib/l10n/nn_NO.json
index 582a7289718..6dad7797027 100644
--- a/lib/l10n/nn_NO.json
+++ b/lib/l10n/nn_NO.json
@@ -6,19 +6,19 @@
"Admin" : "Administrer",
"Unknown filetype" : "Ukjend filtype",
"Invalid image" : "Ugyldig bilete",
- "web services under your control" : "Vev tjenester under din kontroll",
- "Authentication error" : "Feil i autentisering",
- "%s shared »%s« with you" : "%s delte «%s» med deg",
- "seconds ago" : "sekund sidan",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutt sidan"],
- "_%n hour ago_::_%n hours ago_" : ["","%n timar sidan"],
"today" : "i dag",
"yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["","%n dagar sidan"],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "førre månad",
"_%n month ago_::_%n months ago_" : ["","%n månadar sidan"],
"last year" : "i fjor",
- "years ago" : "år sidan",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n timar sidan"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutt sidan"],
+ "seconds ago" : "sekund sidan",
+ "web services under your control" : "Vev tjenester under din kontroll",
+ "Authentication error" : "Feil i autentisering",
+ "%s shared »%s« with you" : "%s delte «%s» med deg",
"A valid username must be provided" : "Du må oppgje eit gyldig brukarnamn",
"A valid password must be provided" : "Du må oppgje eit gyldig passord"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/lib/l10n/nqo.js b/lib/l10n/nqo.js
index 0f4a002019e..784e8271ef3 100644
--- a/lib/l10n/nqo.js
+++ b/lib/l10n/nqo.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""]
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/nqo.json b/lib/l10n/nqo.json
index 4a03cf5047e..3a3512d508d 100644
--- a/lib/l10n/nqo.json
+++ b/lib/l10n/nqo.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""]
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/oc.js b/lib/l10n/oc.js
index b6419372101..4c16d7ec821 100644
--- a/lib/l10n/oc.js
+++ b/lib/l10n/oc.js
@@ -6,17 +6,17 @@ OC.L10N.register(
"Settings" : "Configuracion",
"Users" : "Usancièrs",
"Admin" : "Admin",
- "web services under your control" : "Services web jos ton contraròtle",
- "Authentication error" : "Error d'autentificacion",
- "seconds ago" : "segonda a",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "uèi",
"yesterday" : "ièr",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "mes passat",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "an passat",
- "years ago" : "ans a"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "segonda a",
+ "web services under your control" : "Services web jos ton contraròtle",
+ "Authentication error" : "Error d'autentificacion"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/oc.json b/lib/l10n/oc.json
index df72d194def..9ebedb6f913 100644
--- a/lib/l10n/oc.json
+++ b/lib/l10n/oc.json
@@ -4,17 +4,17 @@
"Settings" : "Configuracion",
"Users" : "Usancièrs",
"Admin" : "Admin",
- "web services under your control" : "Services web jos ton contraròtle",
- "Authentication error" : "Error d'autentificacion",
- "seconds ago" : "segonda a",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "uèi",
"yesterday" : "ièr",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "mes passat",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "an passat",
- "years ago" : "ans a"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "segonda a",
+ "web services under your control" : "Services web jos ton contraròtle",
+ "Authentication error" : "Error d'autentificacion"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/or_IN.js b/lib/l10n/or_IN.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/or_IN.js
+++ b/lib/l10n/or_IN.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/or_IN.json b/lib/l10n/or_IN.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/or_IN.json
+++ b/lib/l10n/or_IN.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/pa.js b/lib/l10n/pa.js
index 0c3dd4c553e..5b3f0a80f6a 100644
--- a/lib/l10n/pa.js
+++ b/lib/l10n/pa.js
@@ -2,15 +2,15 @@ OC.L10N.register(
"lib",
{
"Settings" : "ਸੈਟਿੰਗ",
- "seconds ago" : "ਸਕਿੰਟ ਪਹਿਲਾਂ",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "ਅੱਜ",
"yesterday" : "ਕੱਲ੍ਹ",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "ਪਿਛਲੇ ਮਹੀਨੇ",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "ਪਿਛਲੇ ਸਾਲ",
- "years ago" : "ਸਾਲਾਂ ਪਹਿਲਾਂ"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "ਸਕਿੰਟ ਪਹਿਲਾਂ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/pa.json b/lib/l10n/pa.json
index 4fc6757c692..254909bc8b4 100644
--- a/lib/l10n/pa.json
+++ b/lib/l10n/pa.json
@@ -1,14 +1,14 @@
{ "translations": {
"Settings" : "ਸੈਟਿੰਗ",
- "seconds ago" : "ਸਕਿੰਟ ਪਹਿਲਾਂ",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "ਅੱਜ",
"yesterday" : "ਕੱਲ੍ਹ",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "ਪਿਛਲੇ ਮਹੀਨੇ",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "ਪਿਛਲੇ ਸਾਲ",
- "years ago" : "ਸਾਲਾਂ ਪਹਿਲਾਂ"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "ਸਕਿੰਟ ਪਹਿਲਾਂ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index a766151eab2..4382655be43 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu config%s.",
"Sample configuration detected" : "Wykryto przykładową konfigurację",
"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" : "Wykryto skopiowanie przykładowej konfiguracji. To może popsuć Twoją instalację i nie jest wspierane. Proszę przeczytać dokumentację przed dokonywaniem zmian w config.php",
+ "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Help" : "Pomoc",
"Personal" : "Osobiste",
"Settings" : "Ustawienia",
@@ -17,6 +18,16 @@ OC.L10N.register(
"No app name specified" : "Nie określono nazwy aplikacji",
"Unknown filetype" : "Nieznany typ pliku",
"Invalid image" : "Błędne zdjęcie",
+ "today" : "dziś",
+ "yesterday" : "wczoraj",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "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"],
+ "last year" : "w zeszłym roku",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%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"],
+ "seconds ago" : "sekund temu",
"web services under your control" : "Kontrolowane serwisy",
"App directory already exists" : "Katalog aplikacji już isnieje",
"Can't create app folder. Please fix permissions. %s" : "Nie mogę utworzyć katalogu aplikacji. Proszę popraw uprawnienia. %s",
@@ -78,16 +89,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Współdzielenie %s nie powiodło się, ponieważ zaplecze współdzielenia dla %s nie mogło znaleźć jego źródła",
"Sharing %s failed, because the file could not be found in the file cache" : "Współdzielenie %s nie powiodło się, ponieważ plik nie może zostać odnaleziony w buforze plików",
"Could not find category \"%s\"" : "Nie można odnaleźć kategorii \"%s\"",
- "seconds ago" : "sekund temu",
- "_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu"],
- "_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu"],
- "today" : "dziś",
- "yesterday" : "wczoraj",
- "_%n day go_::_%n days ago_" : ["%n dzień 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"],
- "last year" : "w zeszłym roku",
- "years ago" : "lat temu",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "W nazwach użytkowników dozwolone są wyłącznie następujące znaki: \"a-z\", \"A-Z\", \"0-9\", oraz \"_.@-\"",
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
@@ -103,12 +104,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Proszę zainstalować jedno z poniższych locale w Twoim systemie i uruchomić ponownie serwer www.",
"Please ask your server administrator to install the module." : "Proszę poproś administratora serwera aby zainstalował ten moduł.",
"PHP module %s not installed." : "Moduł PHP %s nie jest zainstalowany.",
- "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Proszę poproś administratora serwera aby zaktualizował PHP do najnowszej wersji. Twoja wersja PHP nie jest już dłużej wspierana przez ownCloud i społeczność PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Bezpieczny tryb PHP jest aktywny. ownCloud do poprawnej pracy wymaga aby był on wyłączony.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Bezpieczny tryb PHP jest przestarzały i w większości bezużyteczny i powinien być wyłączony. Proszę poproś administratora serwera aby wyłączył go w php.ini lub w pliku konfiguracyjnym serwera www.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes są włączone. Do poprawnego działania ownCloud wymagane jest ich wyłączenie.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes to przestarzałe i zasadniczo bezużyteczne ustawienie, które powinno być wyłączone. Poproś administratora serwera, by wyłączył je w php.ini albo w konfiguracji serwera www.",
"PHP modules have been installed, but they are still listed as missing?" : "Moduły PHP zostały zainstalowane, ale nadal brakuje ich na liście?",
"Please ask your server administrator to restart the web server." : "Poproś administratora serwera o restart serwera www.",
"PostgreSQL >= 9 required" : "Wymagany PostgreSQL >= 9",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index c546a115f5e..05da756aff4 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu config%s.",
"Sample configuration detected" : "Wykryto przykładową konfigurację",
"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" : "Wykryto skopiowanie przykładowej konfiguracji. To może popsuć Twoją instalację i nie jest wspierane. Proszę przeczytać dokumentację przed dokonywaniem zmian w config.php",
+ "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Help" : "Pomoc",
"Personal" : "Osobiste",
"Settings" : "Ustawienia",
@@ -15,6 +16,16 @@
"No app name specified" : "Nie określono nazwy aplikacji",
"Unknown filetype" : "Nieznany typ pliku",
"Invalid image" : "Błędne zdjęcie",
+ "today" : "dziś",
+ "yesterday" : "wczoraj",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "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"],
+ "last year" : "w zeszłym roku",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%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"],
+ "seconds ago" : "sekund temu",
"web services under your control" : "Kontrolowane serwisy",
"App directory already exists" : "Katalog aplikacji już isnieje",
"Can't create app folder. Please fix permissions. %s" : "Nie mogę utworzyć katalogu aplikacji. Proszę popraw uprawnienia. %s",
@@ -76,16 +87,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Współdzielenie %s nie powiodło się, ponieważ zaplecze współdzielenia dla %s nie mogło znaleźć jego źródła",
"Sharing %s failed, because the file could not be found in the file cache" : "Współdzielenie %s nie powiodło się, ponieważ plik nie może zostać odnaleziony w buforze plików",
"Could not find category \"%s\"" : "Nie można odnaleźć kategorii \"%s\"",
- "seconds ago" : "sekund temu",
- "_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu"],
- "_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu"],
- "today" : "dziś",
- "yesterday" : "wczoraj",
- "_%n day go_::_%n days ago_" : ["%n dzień 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"],
- "last year" : "w zeszłym roku",
- "years ago" : "lat temu",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "W nazwach użytkowników dozwolone są wyłącznie następujące znaki: \"a-z\", \"A-Z\", \"0-9\", oraz \"_.@-\"",
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
@@ -101,12 +102,7 @@
"Please install one of these locales on your system and restart your webserver." : "Proszę zainstalować jedno z poniższych locale w Twoim systemie i uruchomić ponownie serwer www.",
"Please ask your server administrator to install the module." : "Proszę poproś administratora serwera aby zainstalował ten moduł.",
"PHP module %s not installed." : "Moduł PHP %s nie jest zainstalowany.",
- "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Proszę poproś administratora serwera aby zaktualizował PHP do najnowszej wersji. Twoja wersja PHP nie jest już dłużej wspierana przez ownCloud i społeczność PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Bezpieczny tryb PHP jest aktywny. ownCloud do poprawnej pracy wymaga aby był on wyłączony.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Bezpieczny tryb PHP jest przestarzały i w większości bezużyteczny i powinien być wyłączony. Proszę poproś administratora serwera aby wyłączył go w php.ini lub w pliku konfiguracyjnym serwera www.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes są włączone. Do poprawnego działania ownCloud wymagane jest ich wyłączenie.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes to przestarzałe i zasadniczo bezużyteczne ustawienie, które powinno być wyłączone. Poproś administratora serwera, by wyłączył je w php.ini albo w konfiguracji serwera www.",
"PHP modules have been installed, but they are still listed as missing?" : "Moduły PHP zostały zainstalowane, ale nadal brakuje ich na liście?",
"Please ask your server administrator to restart the web server." : "Poproś administratora serwera o restart serwera www.",
"PostgreSQL >= 9 required" : "Wymagany PostgreSQL >= 9",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 8537b31d543..2de16fc9669 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
"Sample configuration detected" : "Exemplo de configuração 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" : "Foi detectado que a configuração exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
+ "PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .",
+ "Following databases are supported: %s" : "Following databases are supported: %s",
+ "The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pode ser encontrada",
+ "The library %s is not available." : "A biblioteca %s não está disponível.",
+ "Library %s with a version higher than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão maior que %s - versão disponível %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão menor que %s - versão disponível %s.",
+ "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s",
+ "ownCloud %s or higher is required." : "É necessário um ownCloud %s ou superior.",
+ "ownCloud with a version lower than %s is required." : "É necessário um ownCloud com uma versão menor que %s.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Admin",
"Recommended" : "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Aplicação \\\"%s\\\" não pode ser instalada porque não é compatível com esta versão do ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "O app \\\"%s\\\" não pode ser instalado porque as seguintes dependências não forão cumpridas: %s",
"No app name specified" : "O nome do aplicativo não foi especificado.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
+ "today" : "hoje",
+ "yesterday" : "ontem",
+ "_%n day ago_::_%n days ago_" : ["%n dia atrás","%n dias atrás"],
+ "last month" : "último mês",
+ "_%n month ago_::_%n months ago_" : ["","ha %n meses"],
+ "last year" : "último ano",
+ "_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"],
+ "_%n hour ago_::_%n hours ago_" : ["","ha %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["","ha %n minutos"],
+ "seconds ago" : "segundos atrás",
+ "Database Error" : "Erro no Banco de Dados",
+ "Please contact your system administrator." : "Por favor cotactar seu administrador do sistema.",
"web services under your control" : "serviços web sob seu controle",
"App directory already exists" : "Diretório App já existe",
"Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Defina uma senha de administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
"%s shared »%s« with you" : "%s compartilhou »%s« com você",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou, porque o processo interno não permite ações de tipo %i",
"Sharing %s failed, because the file does not exist" : "Compartilhamento %s falhou, porque o arquivo não existe",
"You are not allowed to share %s" : "Você não tem permissão para compartilhar %s",
"Sharing %s failed, because the user %s is the item owner" : "Compartilhamento %s falhou, porque o usuário %s é o proprietário do item",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
"Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
"Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s",
"Setting permissions for %s failed, because the item was not found" : "Definir permissões para %s falhou, porque o item não foi encontrado",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infra-estrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pôde ser encontrado no cache de arquivos",
"Could not find category \"%s\"" : "Impossível localizar categoria \"%s\"",
- "seconds ago" : "segundos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["","ha %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["","ha %n horas"],
- "today" : "hoje",
- "yesterday" : "ontem",
- "_%n day go_::_%n days ago_" : ["","ha %n dias"],
- "last month" : "último mês",
- "_%n month ago_::_%n months ago_" : ["","ha %n meses"],
- "last year" : "último ano",
- "years ago" : "anos atrás",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Somente os seguintes caracteres são permitidos no nome do usuário: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-\"",
"A valid username must be provided" : "Forneça um nome de usuário válido",
"A valid password must be provided" : "Forneça uma senha válida",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, peça ao seu administrador do servidor para atualizar o PHP para a versão mais recente. A sua versão do PHP não é mais suportado pelo ownCloud e a comunidade PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode está habilitado. ownCloud exige que ele esteja desativado para funcionar corretamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode é um cenário obsoleto e praticamente inútil que deve ser desativado. Por favor, peça ao seu administrador do servidor para desativá-lo no php.ini ou na sua configuração webserver.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes está habilitado. ownCloud exige que ele esteja desativado para funcionar corretamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes é um cenário obsoleto e praticamente inútil que deve ser desativado. Por favor, peça ao seu administrador do servidor para desativá-lo no php.ini ou na sua configuração webserver.",
"PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
"Please ask your server administrator to restart the web server." : "Por favor, peça ao seu administrador do servidor para reiniciar o servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index a9e272afc18..cb9493386d0 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
"Sample configuration detected" : "Exemplo de configuração 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" : "Foi detectado que a configuração exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
+ "PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .",
+ "Following databases are supported: %s" : "Following databases are supported: %s",
+ "The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pode ser encontrada",
+ "The library %s is not available." : "A biblioteca %s não está disponível.",
+ "Library %s with a version higher than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão maior que %s - versão disponível %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão menor que %s - versão disponível %s.",
+ "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s",
+ "ownCloud %s or higher is required." : "É necessário um ownCloud %s ou superior.",
+ "ownCloud with a version lower than %s is required." : "É necessário um ownCloud com uma versão menor que %s.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -12,9 +22,22 @@
"Admin" : "Admin",
"Recommended" : "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Aplicação \\\"%s\\\" não pode ser instalada porque não é compatível com esta versão do ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "O app \\\"%s\\\" não pode ser instalado porque as seguintes dependências não forão cumpridas: %s",
"No app name specified" : "O nome do aplicativo não foi especificado.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
+ "today" : "hoje",
+ "yesterday" : "ontem",
+ "_%n day ago_::_%n days ago_" : ["%n dia atrás","%n dias atrás"],
+ "last month" : "último mês",
+ "_%n month ago_::_%n months ago_" : ["","ha %n meses"],
+ "last year" : "último ano",
+ "_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"],
+ "_%n hour ago_::_%n hours ago_" : ["","ha %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["","ha %n minutos"],
+ "seconds ago" : "segundos atrás",
+ "Database Error" : "Erro no Banco de Dados",
+ "Please contact your system administrator." : "Por favor cotactar seu administrador do sistema.",
"web services under your control" : "serviços web sob seu controle",
"App directory already exists" : "Diretório App já existe",
"Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Defina uma senha de administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
"%s shared »%s« with you" : "%s compartilhou »%s« com você",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou, porque o processo interno não permite ações de tipo %i",
"Sharing %s failed, because the file does not exist" : "Compartilhamento %s falhou, porque o arquivo não existe",
"You are not allowed to share %s" : "Você não tem permissão para compartilhar %s",
"Sharing %s failed, because the user %s is the item owner" : "Compartilhamento %s falhou, porque o usuário %s é o proprietário do item",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
"Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
"Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s",
"Setting permissions for %s failed, because the item was not found" : "Definir permissões para %s falhou, porque o item não foi encontrado",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infra-estrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pôde ser encontrado no cache de arquivos",
"Could not find category \"%s\"" : "Impossível localizar categoria \"%s\"",
- "seconds ago" : "segundos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["","ha %n minutos"],
- "_%n hour ago_::_%n hours ago_" : ["","ha %n horas"],
- "today" : "hoje",
- "yesterday" : "ontem",
- "_%n day go_::_%n days ago_" : ["","ha %n dias"],
- "last month" : "último mês",
- "_%n month ago_::_%n months ago_" : ["","ha %n meses"],
- "last year" : "último ano",
- "years ago" : "anos atrás",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Somente os seguintes caracteres são permitidos no nome do usuário: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-\"",
"A valid username must be provided" : "Forneça um nome de usuário válido",
"A valid password must be provided" : "Forneça uma senha válida",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, peça ao seu administrador do servidor para atualizar o PHP para a versão mais recente. A sua versão do PHP não é mais suportado pelo ownCloud e a comunidade PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode está habilitado. ownCloud exige que ele esteja desativado para funcionar corretamente.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode é um cenário obsoleto e praticamente inútil que deve ser desativado. Por favor, peça ao seu administrador do servidor para desativá-lo no php.ini ou na sua configuração webserver.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes está habilitado. ownCloud exige que ele esteja desativado para funcionar corretamente.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes é um cenário obsoleto e praticamente inútil que deve ser desativado. Por favor, peça ao seu administrador do servidor para desativá-lo no php.ini ou na sua configuração webserver.",
"PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
"Please ask your server administrator to restart the web server." : "Por favor, peça ao seu administrador do servidor para reiniciar o servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido",
diff --git a/lib/l10n/pt_PT.js b/lib/l10n/pt_PT.js
index c70e373a11c..5629ffc2037 100644
--- a/lib/l10n/pt_PT.js
+++ b/lib/l10n/pt_PT.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isto pode ser resolvido normalmente %sdando ao servidor web direitos de escrita no directório de configuração%s.",
"Sample configuration detected" : "Exemplo de configuração 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" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -17,6 +18,18 @@ OC.L10N.register(
"No app name specified" : "O nome da aplicação não foi especificado",
"Unknown filetype" : "Ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
+ "today" : "hoje",
+ "yesterday" : "ontem",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "ultímo mês",
+ "_%n month ago_::_%n months ago_" : ["","%n meses atrás"],
+ "last year" : "ano passado",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"],
+ "seconds ago" : "Minutos atrás",
+ "Database Error" : "Erro da Base de Dados",
+ "Please contact your system administrator." : "Por favor contacte o administrador do sistema.",
"web services under your control" : "serviços web sob o seu controlo",
"App directory already exists" : "A directoria da aplicação já existe",
"Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s",
@@ -78,16 +91,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "A partilha %s falhou, devido a partilha em segundo plano para %s não conseguir encontrar a sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "A partilha %s falhou, devido ao ficheiro não poder ser encontrado na cache de ficheiros",
"Could not find category \"%s\"" : "Não foi encontrado a categoria \"%s\"",
- "seconds ago" : "Minutos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"],
- "_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"],
- "today" : "hoje",
- "yesterday" : "ontem",
- "_%n day go_::_%n days ago_" : ["","%n dias atrás"],
- "last month" : "ultímo mês",
- "_%n month ago_::_%n months ago_" : ["","%n meses atrás"],
- "last year" : "ano passado",
- "years ago" : "anos atrás",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Apenas os seguintes caracteres são permitidos no nome de utilizador: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-\"",
"A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
"A valid password must be provided" : "Uma password válida deve ser fornecida",
@@ -103,12 +106,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.",
"PHP module %s not installed." : "O modulo %s PHP não está instalado.",
- "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor pessa ao seu administrador de servidor para actualizar o PHP para a ultima versão. A sua versão de PHP não é mais suportada pelo owncloud e a comunidade PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activo. O ownCloud requer que isto esteja desactivado para funcionar em condições.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro PHP está obsoleto e a maior parte das definições inúteis devem ser desactivadas. Por favor pessa ao seu administrador de servidor para desactivar isto em php.ini ou no seu config do servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Aspas mágicas estão activadas. O ownCloud requere que isto esteja desactivado para trabalhar em condições.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "As aspas mágicas é uma definição obsoleta e inútil que deve ser desactivada. Por favor pessa ao seu administrador do servidor para desactivar isto em php.ini ou no config do seu servidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Os módulos PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
"Please ask your server administrator to restart the web server." : "Pro favor pergunte ao seu administrador do servidor para reiniciar o servidor da internet.",
"PostgreSQL >= 9 required" : "Necessita PostgreSQL >= 9",
diff --git a/lib/l10n/pt_PT.json b/lib/l10n/pt_PT.json
index 85461b0fae6..7f1a1e5e1bf 100644
--- a/lib/l10n/pt_PT.json
+++ b/lib/l10n/pt_PT.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isto pode ser resolvido normalmente %sdando ao servidor web direitos de escrita no directório de configuração%s.",
"Sample configuration detected" : "Exemplo de configuração 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" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -15,6 +16,18 @@
"No app name specified" : "O nome da aplicação não foi especificado",
"Unknown filetype" : "Ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
+ "today" : "hoje",
+ "yesterday" : "ontem",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "ultímo mês",
+ "_%n month ago_::_%n months ago_" : ["","%n meses atrás"],
+ "last year" : "ano passado",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"],
+ "seconds ago" : "Minutos atrás",
+ "Database Error" : "Erro da Base de Dados",
+ "Please contact your system administrator." : "Por favor contacte o administrador do sistema.",
"web services under your control" : "serviços web sob o seu controlo",
"App directory already exists" : "A directoria da aplicação já existe",
"Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s",
@@ -76,16 +89,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "A partilha %s falhou, devido a partilha em segundo plano para %s não conseguir encontrar a sua fonte",
"Sharing %s failed, because the file could not be found in the file cache" : "A partilha %s falhou, devido ao ficheiro não poder ser encontrado na cache de ficheiros",
"Could not find category \"%s\"" : "Não foi encontrado a categoria \"%s\"",
- "seconds ago" : "Minutos atrás",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"],
- "_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"],
- "today" : "hoje",
- "yesterday" : "ontem",
- "_%n day go_::_%n days ago_" : ["","%n dias atrás"],
- "last month" : "ultímo mês",
- "_%n month ago_::_%n months ago_" : ["","%n meses atrás"],
- "last year" : "ano passado",
- "years ago" : "anos atrás",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Apenas os seguintes caracteres são permitidos no nome de utilizador: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-\"",
"A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
"A valid password must be provided" : "Uma password válida deve ser fornecida",
@@ -101,12 +104,7 @@
"Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.",
"PHP module %s not installed." : "O modulo %s PHP não está instalado.",
- "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor pessa ao seu administrador de servidor para actualizar o PHP para a ultima versão. A sua versão de PHP não é mais suportada pelo owncloud e a comunidade PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activo. O ownCloud requer que isto esteja desactivado para funcionar em condições.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro PHP está obsoleto e a maior parte das definições inúteis devem ser desactivadas. Por favor pessa ao seu administrador de servidor para desactivar isto em php.ini ou no seu config do servidor web.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Aspas mágicas estão activadas. O ownCloud requere que isto esteja desactivado para trabalhar em condições.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "As aspas mágicas é uma definição obsoleta e inútil que deve ser desactivada. Por favor pessa ao seu administrador do servidor para desactivar isto em php.ini ou no config do seu servidor web.",
"PHP modules have been installed, but they are still listed as missing?" : "Os módulos PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
"Please ask your server administrator to restart the web server." : "Pro favor pergunte ao seu administrador do servidor para reiniciar o servidor da internet.",
"PostgreSQL >= 9 required" : "Necessita PostgreSQL >= 9",
diff --git a/lib/l10n/ro.js b/lib/l10n/ro.js
index baedf6b6f51..08d5d9bb5b4 100644
--- a/lib/l10n/ro.js
+++ b/lib/l10n/ro.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Cannot write into \"config\" directory!" : "Nu se poate scrie în folderul \"config\"!",
"See %s" : "Vezi %s",
+ "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"Help" : "Ajutor",
"Personal" : "Personal",
"Settings" : "Setări",
@@ -12,6 +13,16 @@ OC.L10N.register(
"No app name specified" : "Niciun nume de aplicație specificat",
"Unknown filetype" : "Tip fișier necunoscut",
"Invalid image" : "Imagine invalidă",
+ "today" : "astăzi",
+ "yesterday" : "ieri",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "ultima lună",
+ "_%n month ago_::_%n months ago_" : ["%n lună în urmă","%n luni în urmă","%n luni în urmă"],
+ "last year" : "ultimul an",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","acum %n ore"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","acum %n minute"],
+ "seconds ago" : "secunde în urmă",
"web services under your control" : "servicii web controlate de tine",
"Application is not enabled" : "Aplicația nu este activată",
"Authentication error" : "Eroare la autentificare",
@@ -33,23 +44,12 @@ OC.L10N.register(
"You are not allowed to share %s" : "Nu există permisiunea de partajare %s",
"Share type %s is not valid for %s" : "Tipul partajării %s nu este valid pentru %s",
"Could not find category \"%s\"" : "Cloud nu a gasit categoria \"%s\"",
- "seconds ago" : "secunde în urmă",
- "_%n minute ago_::_%n minutes ago_" : ["","","acum %n minute"],
- "_%n hour ago_::_%n hours ago_" : ["","","acum %n ore"],
- "today" : "astăzi",
- "yesterday" : "ieri",
- "_%n day go_::_%n days ago_" : ["","","acum %n zile"],
- "last month" : "ultima lună",
- "_%n month ago_::_%n months ago_" : ["%n lună în urmă","%n luni în urmă","%n luni în urmă"],
- "last year" : "ultimul an",
- "years ago" : "ani în urmă",
"A valid username must be provided" : "Trebuie să furnizaţi un nume de utilizator valid",
"A valid password must be provided" : "Trebuie să furnizaţi o parolă validă",
"The username is already being used" : "Numele de utilizator este deja folosit",
"Cannot write into \"config\" directory" : "Nu se poate scrie în folderul \"config\"",
"Cannot write into \"apps\" directory" : "Nu se poate scrie în folderul \"apps\"",
"PHP module %s not installed." : "Modulul PHP %s nu este instalat.",
- "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"PHP modules have been installed, but they are still listed as missing?" : "Modulele PHP au fost instalate, dar apar ca lipsind?",
"PostgreSQL >= 9 required" : "Este necesară versiunea 9 sau mai mare a PostgreSQL",
"Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă",
diff --git a/lib/l10n/ro.json b/lib/l10n/ro.json
index ba971437442..9a0a316a57d 100644
--- a/lib/l10n/ro.json
+++ b/lib/l10n/ro.json
@@ -1,6 +1,7 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Nu se poate scrie în folderul \"config\"!",
"See %s" : "Vezi %s",
+ "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"Help" : "Ajutor",
"Personal" : "Personal",
"Settings" : "Setări",
@@ -10,6 +11,16 @@
"No app name specified" : "Niciun nume de aplicație specificat",
"Unknown filetype" : "Tip fișier necunoscut",
"Invalid image" : "Imagine invalidă",
+ "today" : "astăzi",
+ "yesterday" : "ieri",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "ultima lună",
+ "_%n month ago_::_%n months ago_" : ["%n lună în urmă","%n luni în urmă","%n luni în urmă"],
+ "last year" : "ultimul an",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","acum %n ore"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","acum %n minute"],
+ "seconds ago" : "secunde în urmă",
"web services under your control" : "servicii web controlate de tine",
"Application is not enabled" : "Aplicația nu este activată",
"Authentication error" : "Eroare la autentificare",
@@ -31,23 +42,12 @@
"You are not allowed to share %s" : "Nu există permisiunea de partajare %s",
"Share type %s is not valid for %s" : "Tipul partajării %s nu este valid pentru %s",
"Could not find category \"%s\"" : "Cloud nu a gasit categoria \"%s\"",
- "seconds ago" : "secunde în urmă",
- "_%n minute ago_::_%n minutes ago_" : ["","","acum %n minute"],
- "_%n hour ago_::_%n hours ago_" : ["","","acum %n ore"],
- "today" : "astăzi",
- "yesterday" : "ieri",
- "_%n day go_::_%n days ago_" : ["","","acum %n zile"],
- "last month" : "ultima lună",
- "_%n month ago_::_%n months ago_" : ["%n lună în urmă","%n luni în urmă","%n luni în urmă"],
- "last year" : "ultimul an",
- "years ago" : "ani în urmă",
"A valid username must be provided" : "Trebuie să furnizaţi un nume de utilizator valid",
"A valid password must be provided" : "Trebuie să furnizaţi o parolă validă",
"The username is already being used" : "Numele de utilizator este deja folosit",
"Cannot write into \"config\" directory" : "Nu se poate scrie în folderul \"config\"",
"Cannot write into \"apps\" directory" : "Nu se poate scrie în folderul \"apps\"",
"PHP module %s not installed." : "Modulul PHP %s nu este instalat.",
- "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"PHP modules have been installed, but they are still listed as missing?" : "Modulele PHP au fost instalate, dar apar ca lipsind?",
"PostgreSQL >= 9 required" : "Este necesară versiunea 9 sau mai mare a PostgreSQL",
"Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă",
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 20ed5013853..90d9ae45421 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -2,11 +2,21 @@ 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" : "Обычно это можно исправить, предоставив веб-серверу права на запись в папке конфигурации",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Обычно это можно исправить, предоставив веб-серверу права на запись в каталоге конфигурации",
"See %s" : "Просмотр %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в папке конфигурации%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в каталоге конфигурации%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",
+ "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",
+ "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",
+ "ownCloud %s or higher is required." : "Требуется ownCloud %s или выше.",
+ "ownCloud with a version lower than %s is required." : "Требуется версия ownCloud ниже %s.",
"Help" : "Помощь",
"Personal" : "Личное",
"Settings" : "Настройки",
@@ -14,12 +24,25 @@ OC.L10N.register(
"Admin" : "Администрирование",
"Recommended" : "Рекомендовано",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Невозможно установить приложение \\\"%s\\\", т.к. оно несовместимо с этой версией ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Следующие зависимости не удовлетворены: %s, без них приложение \\\"%s\\\" не может быть установлено",
"No app name specified" : "Не указано имя приложения",
"Unknown filetype" : "Неизвестный тип файла",
"Invalid image" : "Изображение повреждено",
+ "today" : "сегодня",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["%n день назад","%n дня назад","%n дней назад"],
+ "last month" : "в прошлом месяце",
+ "_%n month ago_::_%n months ago_" : ["%n месяц назад","%n месяца назад","%n месяцев назад"],
+ "last year" : "в прошлом году",
+ "_%n year ago_::_%n years ago_" : ["%n год назад","%n года назад","%n лет назад"],
+ "_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад"],
+ "seconds ago" : "менее минуты",
+ "Database Error" : "Ошибка базы данных",
+ "Please contact your system administrator." : "Пожалуйста, свяжитесь с вашим администратором.",
"web services under your control" : "веб-сервисы под вашим управлением",
- "App directory already exists" : "Папка приложения уже существует",
- "Can't create app folder. Please fix permissions. %s" : "Не удалось создать директорию. Исправьте права доступа. %s",
+ "App directory already exists" : "Каталог приложения уже существует",
+ "Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог. Исправьте права доступа. %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
"No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
"No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
@@ -54,71 +77,58 @@ OC.L10N.register(
"Set an admin password." : "Задать пароль для admin.",
"Can't create or write into the data directory %s" : "Невозможно создать или записать в каталог данных %s",
"%s shared »%s« with you" : "%s поделился »%s« с вами",
- "Sharing %s failed, because the file does not exist" : "Публикация %s неудачна, т.к. файл не существует",
- "You are not allowed to share %s" : "Вам запрещено публиковать %s",
- "Sharing %s failed, because the user %s is the item owner" : "Не удалось установить общий доступ для %s, пользователь %s уже является владельцем",
- "Sharing %s failed, because the user %s does not exist" : "Не удалось установить общий доступ для %s, пользователь %s не существует.",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Не удалось опубликовать %s, т.к. пользователь %s не является членом какой-либо группы в которую входит %s",
- "Sharing %s failed, because this item is already shared with %s" : "Не удалось установить общий доступ для %s ,в виду того что, объект уже находиться в общем доступе с %s",
- "Sharing %s failed, because the group %s does not exist" : "Не удалось установить общий доступ для %s, группа %s не существует.",
- "Sharing %s failed, because %s is not a member of the group %s" : "Не удалось установить общий доступ для %s, %s не является членом группы %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Не удалось поделиться %s, бекэнд общего доступа не допускает публикации из элементов типа %i",
+ "Sharing %s failed, because the file does not exist" : "Не удалось поделиться %s, файл не существует",
+ "You are not allowed to share %s" : "Вам запрещено делиться %s",
+ "Sharing %s failed, because the user %s is the item owner" : "Не удалось поделиться %s, пользователь %s - владелец этого элемента",
+ "Sharing %s failed, because the user %s does not exist" : "Не удалось поделиться %s, пользователь %s не существует.",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Не удалось поделиться %s, пользователь %s не состоит в какой-либо группе в которой состоит %s",
+ "Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу",
+ "Sharing %s failed, because the group %s does not exist" : "Не удалось поделиться %s, группа %s не существует",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Не удалось поделиться %s, пользователь %s не является членом группы %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Вам нужно задать пароль для создания публичной ссылки. Разрешены только защищённые ссылки",
- "Sharing %s failed, because sharing with links is not allowed" : "Не удалось установить общий доступ для %s, потому что обмен со ссылками не допускается",
- "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 с момента их публикации.",
+ "Sharing %s failed, because sharing with links is not allowed" : "Не удалось поделиться %s, открытие доступа по ссылке запрещено",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Не удалось поделиться %s, не удалось найти %s, возможно, сервер не доступен.",
+ "Share type %s is not valid for %s" : "Тип общего доступа %s недопустим для %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Не удалось настроить права доступа для %s, указанные права доступа превышают предоставленные для %s права доступа",
+ "Setting permissions for %s failed, because the item was not found" : "Не удалось настроить права доступа для %s , элемент не найден.",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Невозможно установить дату устаревания. Общие ресурсы не могут устареть позже, чем %s с момента их публикации.",
"Cannot set expiration date. Expiration date is in the past" : "Невозможно установить дату окончания. Дата окончания в прошлом.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Бэкенд для опубликования %s должен реализовывать интерфейс OCP\\Share_Backend",
- "Sharing backend %s not found" : "Бэкэнд для общего доступа %s не найден",
- "Sharing backend for %s not found" : "Бэкэнд для общего доступа к %s не найден",
- "Sharing %s failed, because the user %s is the original sharer" : "Публикация %s неудачна, т.к. пользователь %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, т.к. файл не был обнаружен в файловом кеше.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Бэкенд общего доступа %s должен реализовывать интерфейс OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Бэкенд общего доступа для %s не найден",
+ "Sharing backend for %s not found" : "Бэкенд общего доступа для %s не найден",
+ "Sharing %s failed, because the user %s is the original sharer" : "Не удалось поделиться %s, первоначально элементом поделился %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\" не найдена",
- "seconds ago" : "несколько секунд назад",
- "_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад"],
- "_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад"],
- "today" : "сегодня",
- "yesterday" : "вчера",
- "_%n day go_::_%n days ago_" : ["%n день назад","%n дня назад","%n дней назад"],
- "last month" : "в прошлом месяце",
- "_%n month ago_::_%n months ago_" : ["%n месяц назад","%n месяца назад","%n месяцев назад"],
- "last year" : "в прошлом году",
- "years ago" : "несколько лет назад",
"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" : "Укажите правильное имя пользователя",
"A valid password must be provided" : "Укажите валидный пароль",
"The username is already being used" : "Имя пользователя уже используется",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Не установлены драйвера баз данных (sqlite, mysql или postgresql)",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой папке%s.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.",
"Cannot write into \"config\" directory" : "Запись в каталог \"config\" невозможна",
"Cannot write into \"apps\" directory" : "Запись в каталог \"app\" невозможна",
- "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 или отключив appstore в файле конфигурации.",
+ "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 или отключив appstore в файле конфигурации.",
"Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневой папке.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневом каталоге.",
"Setting locale to %s failed" : "Установка локали в %s не удалась",
- "Please install one of these locales on your system and restart your webserver." : "Установите одну из этих локалей на вашей системе и перезапустите веб-сервер.",
+ "Please install one of these locales on your system and restart your webserver." : "Установите один из этих языковых пакетов на вашу систему и перезапустите веб-сервер.",
"Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.",
"PHP module %s not installed." : "Не установлен PHP-модуль %s.",
- "PHP %s or higher is required." : "Требуется PHP %s или выше",
- "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Пожалуйста, обратитесь к администратору сервера, чтобы обновить PHP до последней версии. Ваша версия PHP больше не поддерживается ownCloud и сообществом PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Включен безопасный режим PHP. ownCloud требует, чтобы он был выключен для корректной работы.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Безопасный режим PHP не поддерживается и его следует выключить как практически бесполезную настройку. Пожалуйста, попросите администратора сервера выключить его в php.ini либо в вашей конфигурации веб-сервера.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Включен режим Magic Quotes. ownCloud требует, чтобы он был выключен для корректной работы.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes не поддерживается и его следует выключить как практически бесполезную настройку. Пожалуйста, попросите администратора сервера выключить его в php.ini либо в вашей конфигурации веб-сервера.",
+ "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Пожалуйста, обратитесь к администратору сервера, чтобы обновить PHP до последней версии. Установленная версия PHP больше не поддерживается ownCloud и сообществом PHP.",
"PHP modules have been installed, but they are still listed as missing?" : "Модули PHP был установлены, но все еще в списке как недостающие?",
- "Please ask your server administrator to restart the web server." : "Пожалуйста, попросите администратора вашего сервера перезапустить веб-сервер.",
+ "Please ask your server administrator to restart the web server." : "Пожалуйста, попросите вашего администратора перезапустить веб-сервер.",
"PostgreSQL >= 9 required" : "Требуется PostgreSQL >= 9",
- "Please upgrade your database version" : "Пожалуйста, обновите вашу версию базы данных",
+ "Please upgrade your database version" : "Обновите базу данных",
"Error occurred while checking PostgreSQL version" : "Произошла ошибка при проверке версии PostgreSQL",
- "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Пожалуйста, обедитесь что версия PostgreSQL >= 9 или проверьте логи за дополнительной информацией об ошибке",
- "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) is invalid" : "Папка данных (%s) не верна",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Пожалуйста, убедитесь, что папка данных содержит в корне файл \".ocdata\".",
+ "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Убедитесь что версия PostgreSQL >= 9 или проверьте журналы для получения дополнительной информацией об ошибке",
+ "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) 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\""
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index a8636cf4c35..03b3f3fd2fb 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -1,10 +1,20 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Запись в каталог \"config\" невозможна",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Обычно это можно исправить, предоставив веб-серверу права на запись в папке конфигурации",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Обычно это можно исправить, предоставив веб-серверу права на запись в каталоге конфигурации",
"See %s" : "Просмотр %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в папке конфигурации%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в каталоге конфигурации%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",
+ "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",
+ "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",
+ "ownCloud %s or higher is required." : "Требуется ownCloud %s или выше.",
+ "ownCloud with a version lower than %s is required." : "Требуется версия ownCloud ниже %s.",
"Help" : "Помощь",
"Personal" : "Личное",
"Settings" : "Настройки",
@@ -12,12 +22,25 @@
"Admin" : "Администрирование",
"Recommended" : "Рекомендовано",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Невозможно установить приложение \\\"%s\\\", т.к. оно несовместимо с этой версией ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Следующие зависимости не удовлетворены: %s, без них приложение \\\"%s\\\" не может быть установлено",
"No app name specified" : "Не указано имя приложения",
"Unknown filetype" : "Неизвестный тип файла",
"Invalid image" : "Изображение повреждено",
+ "today" : "сегодня",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["%n день назад","%n дня назад","%n дней назад"],
+ "last month" : "в прошлом месяце",
+ "_%n month ago_::_%n months ago_" : ["%n месяц назад","%n месяца назад","%n месяцев назад"],
+ "last year" : "в прошлом году",
+ "_%n year ago_::_%n years ago_" : ["%n год назад","%n года назад","%n лет назад"],
+ "_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад"],
+ "seconds ago" : "менее минуты",
+ "Database Error" : "Ошибка базы данных",
+ "Please contact your system administrator." : "Пожалуйста, свяжитесь с вашим администратором.",
"web services under your control" : "веб-сервисы под вашим управлением",
- "App directory already exists" : "Папка приложения уже существует",
- "Can't create app folder. Please fix permissions. %s" : "Не удалось создать директорию. Исправьте права доступа. %s",
+ "App directory already exists" : "Каталог приложения уже существует",
+ "Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог. Исправьте права доступа. %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
"No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
"No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
@@ -52,71 +75,58 @@
"Set an admin password." : "Задать пароль для admin.",
"Can't create or write into the data directory %s" : "Невозможно создать или записать в каталог данных %s",
"%s shared »%s« with you" : "%s поделился »%s« с вами",
- "Sharing %s failed, because the file does not exist" : "Публикация %s неудачна, т.к. файл не существует",
- "You are not allowed to share %s" : "Вам запрещено публиковать %s",
- "Sharing %s failed, because the user %s is the item owner" : "Не удалось установить общий доступ для %s, пользователь %s уже является владельцем",
- "Sharing %s failed, because the user %s does not exist" : "Не удалось установить общий доступ для %s, пользователь %s не существует.",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Не удалось опубликовать %s, т.к. пользователь %s не является членом какой-либо группы в которую входит %s",
- "Sharing %s failed, because this item is already shared with %s" : "Не удалось установить общий доступ для %s ,в виду того что, объект уже находиться в общем доступе с %s",
- "Sharing %s failed, because the group %s does not exist" : "Не удалось установить общий доступ для %s, группа %s не существует.",
- "Sharing %s failed, because %s is not a member of the group %s" : "Не удалось установить общий доступ для %s, %s не является членом группы %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Не удалось поделиться %s, бекэнд общего доступа не допускает публикации из элементов типа %i",
+ "Sharing %s failed, because the file does not exist" : "Не удалось поделиться %s, файл не существует",
+ "You are not allowed to share %s" : "Вам запрещено делиться %s",
+ "Sharing %s failed, because the user %s is the item owner" : "Не удалось поделиться %s, пользователь %s - владелец этого элемента",
+ "Sharing %s failed, because the user %s does not exist" : "Не удалось поделиться %s, пользователь %s не существует.",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Не удалось поделиться %s, пользователь %s не состоит в какой-либо группе в которой состоит %s",
+ "Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу",
+ "Sharing %s failed, because the group %s does not exist" : "Не удалось поделиться %s, группа %s не существует",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Не удалось поделиться %s, пользователь %s не является членом группы %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Вам нужно задать пароль для создания публичной ссылки. Разрешены только защищённые ссылки",
- "Sharing %s failed, because sharing with links is not allowed" : "Не удалось установить общий доступ для %s, потому что обмен со ссылками не допускается",
- "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 с момента их публикации.",
+ "Sharing %s failed, because sharing with links is not allowed" : "Не удалось поделиться %s, открытие доступа по ссылке запрещено",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Не удалось поделиться %s, не удалось найти %s, возможно, сервер не доступен.",
+ "Share type %s is not valid for %s" : "Тип общего доступа %s недопустим для %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Не удалось настроить права доступа для %s, указанные права доступа превышают предоставленные для %s права доступа",
+ "Setting permissions for %s failed, because the item was not found" : "Не удалось настроить права доступа для %s , элемент не найден.",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Невозможно установить дату устаревания. Общие ресурсы не могут устареть позже, чем %s с момента их публикации.",
"Cannot set expiration date. Expiration date is in the past" : "Невозможно установить дату окончания. Дата окончания в прошлом.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Бэкенд для опубликования %s должен реализовывать интерфейс OCP\\Share_Backend",
- "Sharing backend %s not found" : "Бэкэнд для общего доступа %s не найден",
- "Sharing backend for %s not found" : "Бэкэнд для общего доступа к %s не найден",
- "Sharing %s failed, because the user %s is the original sharer" : "Публикация %s неудачна, т.к. пользователь %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, т.к. файл не был обнаружен в файловом кеше.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Бэкенд общего доступа %s должен реализовывать интерфейс OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Бэкенд общего доступа для %s не найден",
+ "Sharing backend for %s not found" : "Бэкенд общего доступа для %s не найден",
+ "Sharing %s failed, because the user %s is the original sharer" : "Не удалось поделиться %s, первоначально элементом поделился %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\" не найдена",
- "seconds ago" : "несколько секунд назад",
- "_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад"],
- "_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад"],
- "today" : "сегодня",
- "yesterday" : "вчера",
- "_%n day go_::_%n days ago_" : ["%n день назад","%n дня назад","%n дней назад"],
- "last month" : "в прошлом месяце",
- "_%n month ago_::_%n months ago_" : ["%n месяц назад","%n месяца назад","%n месяцев назад"],
- "last year" : "в прошлом году",
- "years ago" : "несколько лет назад",
"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" : "Укажите правильное имя пользователя",
"A valid password must be provided" : "Укажите валидный пароль",
"The username is already being used" : "Имя пользователя уже используется",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Не установлены драйвера баз данных (sqlite, mysql или postgresql)",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой папке%s.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.",
"Cannot write into \"config\" directory" : "Запись в каталог \"config\" невозможна",
"Cannot write into \"apps\" directory" : "Запись в каталог \"app\" невозможна",
- "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 или отключив appstore в файле конфигурации.",
+ "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 или отключив appstore в файле конфигурации.",
"Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневой папке.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневом каталоге.",
"Setting locale to %s failed" : "Установка локали в %s не удалась",
- "Please install one of these locales on your system and restart your webserver." : "Установите одну из этих локалей на вашей системе и перезапустите веб-сервер.",
+ "Please install one of these locales on your system and restart your webserver." : "Установите один из этих языковых пакетов на вашу систему и перезапустите веб-сервер.",
"Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.",
"PHP module %s not installed." : "Не установлен PHP-модуль %s.",
- "PHP %s or higher is required." : "Требуется PHP %s или выше",
- "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Пожалуйста, обратитесь к администратору сервера, чтобы обновить PHP до последней версии. Ваша версия PHP больше не поддерживается ownCloud и сообществом PHP.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Включен безопасный режим PHP. ownCloud требует, чтобы он был выключен для корректной работы.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Безопасный режим PHP не поддерживается и его следует выключить как практически бесполезную настройку. Пожалуйста, попросите администратора сервера выключить его в php.ini либо в вашей конфигурации веб-сервера.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Включен режим Magic Quotes. ownCloud требует, чтобы он был выключен для корректной работы.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes не поддерживается и его следует выключить как практически бесполезную настройку. Пожалуйста, попросите администратора сервера выключить его в php.ini либо в вашей конфигурации веб-сервера.",
+ "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Пожалуйста, обратитесь к администратору сервера, чтобы обновить PHP до последней версии. Установленная версия PHP больше не поддерживается ownCloud и сообществом PHP.",
"PHP modules have been installed, but they are still listed as missing?" : "Модули PHP был установлены, но все еще в списке как недостающие?",
- "Please ask your server administrator to restart the web server." : "Пожалуйста, попросите администратора вашего сервера перезапустить веб-сервер.",
+ "Please ask your server administrator to restart the web server." : "Пожалуйста, попросите вашего администратора перезапустить веб-сервер.",
"PostgreSQL >= 9 required" : "Требуется PostgreSQL >= 9",
- "Please upgrade your database version" : "Пожалуйста, обновите вашу версию базы данных",
+ "Please upgrade your database version" : "Обновите базу данных",
"Error occurred while checking PostgreSQL version" : "Произошла ошибка при проверке версии PostgreSQL",
- "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Пожалуйста, обедитесь что версия PostgreSQL >= 9 или проверьте логи за дополнительной информацией об ошибке",
- "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) is invalid" : "Папка данных (%s) не верна",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Пожалуйста, убедитесь, что папка данных содержит в корне файл \".ocdata\".",
+ "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Убедитесь что версия PostgreSQL >= 9 или проверьте журналы для получения дополнительной информацией об ошибке",
+ "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) 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\""
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/si_LK.js b/lib/l10n/si_LK.js
index 76ad1716ce2..09d5d0c84da 100644
--- a/lib/l10n/si_LK.js
+++ b/lib/l10n/si_LK.js
@@ -6,19 +6,19 @@ OC.L10N.register(
"Settings" : "සිටුවම්",
"Users" : "පරිශීලකයන්",
"Admin" : "පරිපාලක",
- "web services under your control" : "ඔබට පාලනය කළ හැකි වෙබ් සේවාවන්",
- "Application is not enabled" : "යෙදුම සක්‍රිය කර නොමැත",
- "Authentication error" : "සත්‍යාපන දෝෂයක්",
- "Token expired. Please reload page." : "ටෝකනය කල් ඉකුත් වී ඇත. පිටුව නැවුම් කරන්න",
- "seconds ago" : "තත්පරයන්ට පෙර",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "අද",
"yesterday" : "ඊයේ",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "පෙර මාසයේ",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "පෙර අවුරුද්දේ",
- "years ago" : "අවුරුදු කීපයකට පෙර"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "තත්පරයන්ට පෙර",
+ "web services under your control" : "ඔබට පාලනය කළ හැකි වෙබ් සේවාවන්",
+ "Application is not enabled" : "යෙදුම සක්‍රිය කර නොමැත",
+ "Authentication error" : "සත්‍යාපන දෝෂයක්",
+ "Token expired. Please reload page." : "ටෝකනය කල් ඉකුත් වී ඇත. පිටුව නැවුම් කරන්න"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/si_LK.json b/lib/l10n/si_LK.json
index 0bfa32a0754..6c65802af2e 100644
--- a/lib/l10n/si_LK.json
+++ b/lib/l10n/si_LK.json
@@ -4,19 +4,19 @@
"Settings" : "සිටුවම්",
"Users" : "පරිශීලකයන්",
"Admin" : "පරිපාලක",
- "web services under your control" : "ඔබට පාලනය කළ හැකි වෙබ් සේවාවන්",
- "Application is not enabled" : "යෙදුම සක්‍රිය කර නොමැත",
- "Authentication error" : "සත්‍යාපන දෝෂයක්",
- "Token expired. Please reload page." : "ටෝකනය කල් ඉකුත් වී ඇත. පිටුව නැවුම් කරන්න",
- "seconds ago" : "තත්පරයන්ට පෙර",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "අද",
"yesterday" : "ඊයේ",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "පෙර මාසයේ",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "පෙර අවුරුද්දේ",
- "years ago" : "අවුරුදු කීපයකට පෙර"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "තත්පරයන්ට පෙර",
+ "web services under your control" : "ඔබට පාලනය කළ හැකි වෙබ් සේවාවන්",
+ "Application is not enabled" : "යෙදුම සක්‍රිය කර නොමැත",
+ "Authentication error" : "සත්‍යාපන දෝෂයක්",
+ "Token expired. Please reload page." : "ටෝකනය කල් ඉකුත් වී ඇත. පිටුව නැවුම් කරන්න"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/sk.php b/lib/l10n/sk.php
deleted file mode 100644
index 5cfafe6ca0c..00000000000
--- a/lib/l10n/sk.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Personal" => "Osobné",
-"Settings" => "Nastavenia",
-"_%n minute ago_::_%n minutes ago_" => array("","",""),
-"_%n hour ago_::_%n hours ago_" => array("","",""),
-"_%n day go_::_%n days ago_" => array("","",""),
-"_%n month ago_::_%n months ago_" => array("","","")
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
index a2e87c5b631..1a4ad8c6293 100644
--- a/lib/l10n/sk_SK.js
+++ b/lib/l10n/sk_SK.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis k adresáru s konfiguráciou%s.",
"Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
+ "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Help" : "Pomoc",
"Personal" : "Osobné",
"Settings" : "Nastavenia",
@@ -17,6 +18,18 @@ OC.L10N.register(
"No app name specified" : "Nešpecifikované meno aplikácie",
"Unknown filetype" : "Neznámy typ súboru",
"Invalid image" : "Chybný obrázok",
+ "today" : "dnes",
+ "yesterday" : "včera",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "minulý mesiac",
+ "_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
+ "last year" : "minulý rok",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
+ "_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
+ "seconds ago" : "pred sekundami",
+ "Database Error" : "Error databázy",
+ "Please contact your system administrator." : "Prosím kontaktujte administrátora.",
"web services under your control" : "webové služby pod Vašou kontrolou",
"App directory already exists" : "Aplikačný priečinok už existuje",
"Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
@@ -77,16 +90,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Zdieľanie %s zlyhalo, backend zdieľania nenašiel zdrojový %s",
"Sharing %s failed, because the file could not be found in the file cache" : "Zdieľanie %s zlyhalo, pretože súbor sa nenašiel vo vyrovnávacej pamäti súborov",
"Could not find category \"%s\"" : "Nemožno nájsť danú kategóriu \"%s\"",
- "seconds ago" : "pred sekundami",
- "_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
- "_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
- "today" : "dnes",
- "yesterday" : "včera",
- "_%n day go_::_%n days ago_" : ["pred %n dňom","pred %n dňami","pred %n dňami"],
- "last month" : "minulý mesiac",
- "_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
- "last year" : "minulý rok",
- "years ago" : "pred rokmi",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "V mene používateľa sú povolené len nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"A valid password must be provided" : "Musíte zadať platné heslo",
@@ -102,12 +105,7 @@ OC.L10N.register(
"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 %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Prosím, požiadajte administrátora vášho servera o aktualizáciu PHP na najnovšiu verziu. Vaša verzia PHP už nie je podporovaná ownCloud-om a PHP komunitou.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode je zapnutý. ownCloud pre správnu funkčnosť vyžaduje, aby bol vypnutý.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastarané a väčšinou zbytočné nastavenie, ktoré by malo byť vypnuté. Prosím, požiadajte administrátora vášho serveru o jeho vypnutie v php.ini alebo v nastaveniach webového servera.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes sú povolené. ownCloud pre správnu funkčnosť vyžaduje, aby boli vypnuté.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes je zavrhovanou a zbytočnou voľbou, ktorú by ste mali ponechať vypnutú. Prosím, požiadajte správcu svojho servera, aby ju vypol v php.ini alebo v konfigurácii vášho webového servera.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sú uvedené ako chýbajúce?",
"Please ask your server administrator to restart the web server." : "Prosím, požiadajte administrátora vášho servera o reštartovanie webového servera.",
"PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9",
diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json
index 84ab8c4a007..3d7fb6e7c83 100644
--- a/lib/l10n/sk_SK.json
+++ b/lib/l10n/sk_SK.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis k adresáru s konfiguráciou%s.",
"Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
+ "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Help" : "Pomoc",
"Personal" : "Osobné",
"Settings" : "Nastavenia",
@@ -15,6 +16,18 @@
"No app name specified" : "Nešpecifikované meno aplikácie",
"Unknown filetype" : "Neznámy typ súboru",
"Invalid image" : "Chybný obrázok",
+ "today" : "dnes",
+ "yesterday" : "včera",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "minulý mesiac",
+ "_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
+ "last year" : "minulý rok",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
+ "_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
+ "seconds ago" : "pred sekundami",
+ "Database Error" : "Error databázy",
+ "Please contact your system administrator." : "Prosím kontaktujte administrátora.",
"web services under your control" : "webové služby pod Vašou kontrolou",
"App directory already exists" : "Aplikačný priečinok už existuje",
"Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
@@ -75,16 +88,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Zdieľanie %s zlyhalo, backend zdieľania nenašiel zdrojový %s",
"Sharing %s failed, because the file could not be found in the file cache" : "Zdieľanie %s zlyhalo, pretože súbor sa nenašiel vo vyrovnávacej pamäti súborov",
"Could not find category \"%s\"" : "Nemožno nájsť danú kategóriu \"%s\"",
- "seconds ago" : "pred sekundami",
- "_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
- "_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
- "today" : "dnes",
- "yesterday" : "včera",
- "_%n day go_::_%n days ago_" : ["pred %n dňom","pred %n dňami","pred %n dňami"],
- "last month" : "minulý mesiac",
- "_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
- "last year" : "minulý rok",
- "years ago" : "pred rokmi",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "V mene používateľa sú povolené len nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"A valid password must be provided" : "Musíte zadať platné heslo",
@@ -100,12 +103,7 @@
"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 %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Prosím, požiadajte administrátora vášho servera o aktualizáciu PHP na najnovšiu verziu. Vaša verzia PHP už nie je podporovaná ownCloud-om a PHP komunitou.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode je zapnutý. ownCloud pre správnu funkčnosť vyžaduje, aby bol vypnutý.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastarané a väčšinou zbytočné nastavenie, ktoré by malo byť vypnuté. Prosím, požiadajte administrátora vášho serveru o jeho vypnutie v php.ini alebo v nastaveniach webového servera.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes sú povolené. ownCloud pre správnu funkčnosť vyžaduje, aby boli vypnuté.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes je zavrhovanou a zbytočnou voľbou, ktorú by ste mali ponechať vypnutú. Prosím, požiadajte správcu svojho servera, aby ju vypol v php.ini alebo v konfigurácii vášho webového servera.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sú uvedené ako chýbajúce?",
"Please ask your server administrator to restart the web server." : "Prosím, požiadajte administrátora vášho servera o reštartovanie webového servera.",
"PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9",
diff --git a/lib/l10n/sl.js b/lib/l10n/sl.js
index aa783fbd69e..91efdf6d6eb 100644
--- a/lib/l10n/sl.js
+++ b/lib/l10n/sl.js
@@ -7,6 +7,16 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Napako je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje v nastavitveno mapo%s.",
"Sample configuration detected" : "Zaznana je neustrezna preizkusna nastavitev",
"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" : "Zaznano je, da je bila v sistem kopirana datoteka z enostavno nastavitvijo. To lahko vpliva na namestitev in zato možnost ni podprta. Pred spremembami datoteke config.php si natančno preberite dokumentacijo.",
+ "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
+ "PHP with a version lower than %s is required." : "Zahtevana je različica PHP manj kot %s.",
+ "Following databases are supported: %s" : "Podprte so navedene podatkovne zbirke: %s",
+ "The command line tool %s could not be found" : "Orodja ukazne vrstice %s ni mogoče najti",
+ "The library %s is not available." : "Knjižnica %s ni na voljo.",
+ "Library %s with a version higher than %s is required - available version %s." : "Zahtevana je knjižnica %s z različico, višjo od %s – na voljo je različica %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Zahtevana je knjižnica %s z različico, manjšo od %s – na voljo je različica %s.",
+ "Following platforms are supported: %s" : "Podprta so okolja: %s",
+ "ownCloud %s or higher is required." : "Zahtevana je različica ownCloud %s ali višja.",
+ "ownCloud with a version lower than %s is required." : "Zahtevana je različica ownCloud %s ali nižja.",
"Help" : "Pomoč",
"Personal" : "Osebno",
"Settings" : "Nastavitve",
@@ -14,9 +24,22 @@ OC.L10N.register(
"Admin" : "Skrbništvo",
"Recommended" : "Priporočljivo",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Programnika \\\"%s\\\" ni mogoče namestiti, ker različica programa ni skladna z različico okolja ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programa \\\"%s\\\" ni mogoče namestiti zaradi nerešenih odvisnosti: %s",
"No app name specified" : "Ni podanega imena programa",
"Unknown filetype" : "Neznana vrsta datoteke",
"Invalid image" : "Neveljavna slika",
+ "today" : "danes",
+ "yesterday" : "včeraj",
+ "_%n day ago_::_%n days ago_" : ["pred %n dnevom","pred %n dnevoma","pred %n dnevi","pred %n dnevi"],
+ "last month" : "zadnji mesec",
+ "_%n month ago_::_%n months ago_" : ["pred %n mesecem","pred %n mesecema","pred %n meseci","pred %n meseci"],
+ "last year" : "lansko leto",
+ "_%n year ago_::_%n years ago_" : ["pred %n letom","pred %n letoma","pred %n leti","pred %n leti"],
+ "_%n hour ago_::_%n hours ago_" : ["pred %n uro","pred %n urama","pred %n urami","pred %n urami"],
+ "_%n minute ago_::_%n minutes ago_" : ["pred %n minuto","pred %n minutama","pred %n minutami","pred %n minutami"],
+ "seconds ago" : "pred nekaj sekundami",
+ "Database Error" : "Napaka podatkovne zbirke",
+ "Please contact your system administrator." : "Stopite v stik s skrbnikom sistema.",
"web services under your control" : "spletne storitve pod vašim nadzorom",
"App directory already exists" : "Programska mapa že obstaja",
"Can't create app folder. Please fix permissions. %s" : "Programske mape ni mogoče ustvariti. Ni ustreznih dovoljenj. %s",
@@ -54,6 +77,7 @@ OC.L10N.register(
"Set an admin password." : "Nastavi geslo skrbnika.",
"Can't create or write into the data directory %s" : "Ni mogoče zapisati podatkov v podatkovno mapo %s",
"%s shared »%s« with you" : "%s je omogočil souporabo »%s«",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Omogočanje souporabe %s je spodletelo, ker ozadnji program ne dopušča souporabe vrste %i.",
"Sharing %s failed, because the file does not exist" : "Souporaba %s je spodletela, ker ta datoteka ne obstaja",
"You are not allowed to share %s" : "Omogočanje souporabe %s brez ustreznih dovoljenj ni mogoče.",
"Sharing %s failed, because the user %s is the item owner" : "Nastavljanje souporabe %s je spodletelo, ker je uporabnik %s lastnik predmeta.",
@@ -64,6 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Nastavljanje souporabe %s je spodletelo, ker uporabnik %s ni član skupine %s.",
"You need to provide a password to create a public link, only protected links are allowed" : "Navesti je treba geslo za ustvarjanje javne povezave, saj so dovoljene le zaščitene.",
"Sharing %s failed, because sharing with links is not allowed" : "Nastavljanje souporabe %s je spodletelo, ker souporaba preko povezave ni dovoljena.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Omogočanje souporabe %s je spodletelo, ker ni mogoče najti %s. Najverjetneje je strežnik nedosegljiv.",
"Share type %s is not valid for %s" : "Vrsta souporabe %s za %s ni veljavna.",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavljanje dovoljenj za %s je spodletelo, saj ta presegajo dovoljenja dodeljena uporabniku %s.",
"Setting permissions for %s failed, because the item was not found" : "Nastavljanje dovoljenj za %s je spodletelo, ker predmeta ni mogoče najti.",
@@ -78,16 +103,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Nastavljanje souporabe %s je spodletelo, ker ozadnji program %s ne upravlja z viri.",
"Sharing %s failed, because the file could not be found in the file cache" : "Nastavljanje souporabe %s je spodletelo, ker v predpomnilniku zahtevana datoteka ne obstaja.",
"Could not find category \"%s\"" : "Kategorije \"%s\" ni mogoče najti.",
- "seconds ago" : "pred nekaj sekundami",
- "_%n minute ago_::_%n minutes ago_" : ["pred %n minuto","pred %n minutama","pred %n minutami","pred %n minutami"],
- "_%n hour ago_::_%n hours ago_" : ["pred %n uro","pred %n urama","pred %n urami","pred %n urami"],
- "today" : "danes",
- "yesterday" : "včeraj",
- "_%n day go_::_%n days ago_" : ["pred %n dnevom","pred %n dnevoma","pred %n dnevi","pred %n dnevi"],
- "last month" : "zadnji mesec",
- "_%n month ago_::_%n months ago_" : ["pred %n mesecem","pred %n mesecema","pred %n meseci","pred %n meseci"],
- "last year" : "lansko leto",
- "years ago" : "let nazaj",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "V uporabniškem imenu je dovoljeno uporabiti le znake: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Navedeno mora biti veljavno uporabniško ime",
"A valid password must be provided" : "Navedeno mora biti veljavno geslo",
@@ -103,12 +118,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Namestiti je treba podporo za vsaj eno od navedenih jezikovnih določil v sistemu in nato ponovno zagnati spletni strežnik.",
"Please ask your server administrator to install the module." : "Obvestite skrbnika strežnika, da je treba namestiti manjkajoč modul.",
"PHP module %s not installed." : "Modul PHP %s ni nameščen.",
- "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Obvestite skrbnika strežnika, da je treba posodobiti okolje PHP na najnovejšo različico. Trenutno nameščene različice skupnost PHP in ownCloud ne podpira več.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Omogočen je varni način PHP. Za pravilno delovanje system ownCloud je treba možnost onemogočiti.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Možnost varnega načina PHP je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Omogočena je možnost Magic Quotes. Za pravilno delovanje sistema ownCloud je treba možnost onemogočiti.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Možnost Magic Quotes je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
"PHP modules have been installed, but they are still listed as missing?" : "Ali so bili moduli PHP nameščeni, pa so še vedno označeni kot manjkajoči?",
"Please ask your server administrator to restart the web server." : "Obvestite skrbnika strežnika, da je treba ponovno zagnati spletni strežnik.",
"PostgreSQL >= 9 required" : "Zahtevana je različica PostgreSQL >= 9.",
diff --git a/lib/l10n/sl.json b/lib/l10n/sl.json
index c0cbf41f719..3c70d01bc66 100644
--- a/lib/l10n/sl.json
+++ b/lib/l10n/sl.json
@@ -5,6 +5,16 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Napako je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje v nastavitveno mapo%s.",
"Sample configuration detected" : "Zaznana je neustrezna preizkusna nastavitev",
"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" : "Zaznano je, da je bila v sistem kopirana datoteka z enostavno nastavitvijo. To lahko vpliva na namestitev in zato možnost ni podprta. Pred spremembami datoteke config.php si natančno preberite dokumentacijo.",
+ "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
+ "PHP with a version lower than %s is required." : "Zahtevana je različica PHP manj kot %s.",
+ "Following databases are supported: %s" : "Podprte so navedene podatkovne zbirke: %s",
+ "The command line tool %s could not be found" : "Orodja ukazne vrstice %s ni mogoče najti",
+ "The library %s is not available." : "Knjižnica %s ni na voljo.",
+ "Library %s with a version higher than %s is required - available version %s." : "Zahtevana je knjižnica %s z različico, višjo od %s – na voljo je različica %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Zahtevana je knjižnica %s z različico, manjšo od %s – na voljo je različica %s.",
+ "Following platforms are supported: %s" : "Podprta so okolja: %s",
+ "ownCloud %s or higher is required." : "Zahtevana je različica ownCloud %s ali višja.",
+ "ownCloud with a version lower than %s is required." : "Zahtevana je različica ownCloud %s ali nižja.",
"Help" : "Pomoč",
"Personal" : "Osebno",
"Settings" : "Nastavitve",
@@ -12,9 +22,22 @@
"Admin" : "Skrbništvo",
"Recommended" : "Priporočljivo",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Programnika \\\"%s\\\" ni mogoče namestiti, ker različica programa ni skladna z različico okolja ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programa \\\"%s\\\" ni mogoče namestiti zaradi nerešenih odvisnosti: %s",
"No app name specified" : "Ni podanega imena programa",
"Unknown filetype" : "Neznana vrsta datoteke",
"Invalid image" : "Neveljavna slika",
+ "today" : "danes",
+ "yesterday" : "včeraj",
+ "_%n day ago_::_%n days ago_" : ["pred %n dnevom","pred %n dnevoma","pred %n dnevi","pred %n dnevi"],
+ "last month" : "zadnji mesec",
+ "_%n month ago_::_%n months ago_" : ["pred %n mesecem","pred %n mesecema","pred %n meseci","pred %n meseci"],
+ "last year" : "lansko leto",
+ "_%n year ago_::_%n years ago_" : ["pred %n letom","pred %n letoma","pred %n leti","pred %n leti"],
+ "_%n hour ago_::_%n hours ago_" : ["pred %n uro","pred %n urama","pred %n urami","pred %n urami"],
+ "_%n minute ago_::_%n minutes ago_" : ["pred %n minuto","pred %n minutama","pred %n minutami","pred %n minutami"],
+ "seconds ago" : "pred nekaj sekundami",
+ "Database Error" : "Napaka podatkovne zbirke",
+ "Please contact your system administrator." : "Stopite v stik s skrbnikom sistema.",
"web services under your control" : "spletne storitve pod vašim nadzorom",
"App directory already exists" : "Programska mapa že obstaja",
"Can't create app folder. Please fix permissions. %s" : "Programske mape ni mogoče ustvariti. Ni ustreznih dovoljenj. %s",
@@ -52,6 +75,7 @@
"Set an admin password." : "Nastavi geslo skrbnika.",
"Can't create or write into the data directory %s" : "Ni mogoče zapisati podatkov v podatkovno mapo %s",
"%s shared »%s« with you" : "%s je omogočil souporabo »%s«",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Omogočanje souporabe %s je spodletelo, ker ozadnji program ne dopušča souporabe vrste %i.",
"Sharing %s failed, because the file does not exist" : "Souporaba %s je spodletela, ker ta datoteka ne obstaja",
"You are not allowed to share %s" : "Omogočanje souporabe %s brez ustreznih dovoljenj ni mogoče.",
"Sharing %s failed, because the user %s is the item owner" : "Nastavljanje souporabe %s je spodletelo, ker je uporabnik %s lastnik predmeta.",
@@ -62,6 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Nastavljanje souporabe %s je spodletelo, ker uporabnik %s ni član skupine %s.",
"You need to provide a password to create a public link, only protected links are allowed" : "Navesti je treba geslo za ustvarjanje javne povezave, saj so dovoljene le zaščitene.",
"Sharing %s failed, because sharing with links is not allowed" : "Nastavljanje souporabe %s je spodletelo, ker souporaba preko povezave ni dovoljena.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Omogočanje souporabe %s je spodletelo, ker ni mogoče najti %s. Najverjetneje je strežnik nedosegljiv.",
"Share type %s is not valid for %s" : "Vrsta souporabe %s za %s ni veljavna.",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavljanje dovoljenj za %s je spodletelo, saj ta presegajo dovoljenja dodeljena uporabniku %s.",
"Setting permissions for %s failed, because the item was not found" : "Nastavljanje dovoljenj za %s je spodletelo, ker predmeta ni mogoče najti.",
@@ -76,16 +101,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Nastavljanje souporabe %s je spodletelo, ker ozadnji program %s ne upravlja z viri.",
"Sharing %s failed, because the file could not be found in the file cache" : "Nastavljanje souporabe %s je spodletelo, ker v predpomnilniku zahtevana datoteka ne obstaja.",
"Could not find category \"%s\"" : "Kategorije \"%s\" ni mogoče najti.",
- "seconds ago" : "pred nekaj sekundami",
- "_%n minute ago_::_%n minutes ago_" : ["pred %n minuto","pred %n minutama","pred %n minutami","pred %n minutami"],
- "_%n hour ago_::_%n hours ago_" : ["pred %n uro","pred %n urama","pred %n urami","pred %n urami"],
- "today" : "danes",
- "yesterday" : "včeraj",
- "_%n day go_::_%n days ago_" : ["pred %n dnevom","pred %n dnevoma","pred %n dnevi","pred %n dnevi"],
- "last month" : "zadnji mesec",
- "_%n month ago_::_%n months ago_" : ["pred %n mesecem","pred %n mesecema","pred %n meseci","pred %n meseci"],
- "last year" : "lansko leto",
- "years ago" : "let nazaj",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "V uporabniškem imenu je dovoljeno uporabiti le znake: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"",
"A valid username must be provided" : "Navedeno mora biti veljavno uporabniško ime",
"A valid password must be provided" : "Navedeno mora biti veljavno geslo",
@@ -101,12 +116,7 @@
"Please install one of these locales on your system and restart your webserver." : "Namestiti je treba podporo za vsaj eno od navedenih jezikovnih določil v sistemu in nato ponovno zagnati spletni strežnik.",
"Please ask your server administrator to install the module." : "Obvestite skrbnika strežnika, da je treba namestiti manjkajoč modul.",
"PHP module %s not installed." : "Modul PHP %s ni nameščen.",
- "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Obvestite skrbnika strežnika, da je treba posodobiti okolje PHP na najnovejšo različico. Trenutno nameščene različice skupnost PHP in ownCloud ne podpira več.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Omogočen je varni način PHP. Za pravilno delovanje system ownCloud je treba možnost onemogočiti.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Možnost varnega načina PHP je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Omogočena je možnost Magic Quotes. Za pravilno delovanje sistema ownCloud je treba možnost onemogočiti.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Možnost Magic Quotes je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
"PHP modules have been installed, but they are still listed as missing?" : "Ali so bili moduli PHP nameščeni, pa so še vedno označeni kot manjkajoči?",
"Please ask your server administrator to restart the web server." : "Obvestite skrbnika strežnika, da je treba ponovno zagnati spletni strežnik.",
"PostgreSQL >= 9 required" : "Zahtevana je različica PostgreSQL >= 9.",
diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js
index 6328972ac8a..a92d868f116 100644
--- a/lib/l10n/sq.js
+++ b/lib/l10n/sq.js
@@ -6,6 +6,19 @@ OC.L10N.register(
"Settings" : "Parametra",
"Users" : "Përdoruesit",
"Admin" : "Admin",
+ "Recommended" : "E rekomanduar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
+ "today" : "sot",
+ "yesterday" : "dje",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "muajin e shkuar",
+ "_%n month ago_::_%n months ago_" : ["","%n muaj më parë"],
+ "last year" : "vitin e shkuar",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n orë më parë"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minuta më parë"],
+ "seconds ago" : "sekonda më parë",
"web services under your control" : "shërbime web nën kontrollin tënd",
"Application is not enabled" : "Programi nuk është i aktivizuar.",
"Authentication error" : "Veprim i gabuar gjatë vërtetimit të identitetit",
@@ -24,16 +37,6 @@ OC.L10N.register(
"Set an admin password." : "Cakto kodin e administratorit.",
"%s shared »%s« with you" : "%s ndau »%s« me ju",
"Could not find category \"%s\"" : "Kategoria \"%s\" nuk u gjet",
- "seconds ago" : "sekonda më parë",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minuta më parë"],
- "_%n hour ago_::_%n hours ago_" : ["","%n orë më parë"],
- "today" : "sot",
- "yesterday" : "dje",
- "_%n day go_::_%n days ago_" : ["","%n ditë më parë"],
- "last month" : "muajin e shkuar",
- "_%n month ago_::_%n months ago_" : ["","%n muaj më parë"],
- "last year" : "vitin e shkuar",
- "years ago" : "vite më parë",
"A valid username must be provided" : "Duhet të jepni një emër të vlefshëm përdoruesi",
"A valid password must be provided" : "Duhet të jepni një fjalëkalim te vlefshëm"
},
diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json
index 7df63e8ff84..4903e1be195 100644
--- a/lib/l10n/sq.json
+++ b/lib/l10n/sq.json
@@ -4,6 +4,19 @@
"Settings" : "Parametra",
"Users" : "Përdoruesit",
"Admin" : "Admin",
+ "Recommended" : "E rekomanduar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
+ "today" : "sot",
+ "yesterday" : "dje",
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "last month" : "muajin e shkuar",
+ "_%n month ago_::_%n months ago_" : ["","%n muaj më parë"],
+ "last year" : "vitin e shkuar",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n orë më parë"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n minuta më parë"],
+ "seconds ago" : "sekonda më parë",
"web services under your control" : "shërbime web nën kontrollin tënd",
"Application is not enabled" : "Programi nuk është i aktivizuar.",
"Authentication error" : "Veprim i gabuar gjatë vërtetimit të identitetit",
@@ -22,16 +35,6 @@
"Set an admin password." : "Cakto kodin e administratorit.",
"%s shared »%s« with you" : "%s ndau »%s« me ju",
"Could not find category \"%s\"" : "Kategoria \"%s\" nuk u gjet",
- "seconds ago" : "sekonda më parë",
- "_%n minute ago_::_%n minutes ago_" : ["","%n minuta më parë"],
- "_%n hour ago_::_%n hours ago_" : ["","%n orë më parë"],
- "today" : "sot",
- "yesterday" : "dje",
- "_%n day go_::_%n days ago_" : ["","%n ditë më parë"],
- "last month" : "muajin e shkuar",
- "_%n month ago_::_%n months ago_" : ["","%n muaj më parë"],
- "last year" : "vitin e shkuar",
- "years ago" : "vite më parë",
"A valid username must be provided" : "Duhet të jepni një emër të vlefshëm përdoruesi",
"A valid password must be provided" : "Duhet të jepni një fjalëkalim te vlefshëm"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/lib/l10n/sr.js b/lib/l10n/sr.js
index 94cb2dfce47..4b2b401c127 100644
--- a/lib/l10n/sr.js
+++ b/lib/l10n/sr.js
@@ -6,21 +6,21 @@ OC.L10N.register(
"Settings" : "Поставке",
"Users" : "Корисници",
"Admin" : "Администратор",
- "web services under your control" : "веб сервиси под контролом",
- "Application is not enabled" : "Апликација није омогућена",
- "Authentication error" : "Грешка при провери идентитета",
- "Token expired. Please reload page." : "Жетон је истекао. Поново учитајте страницу.",
- "Could not find category \"%s\"" : "Не могу да пронађем категорију „%s“.",
- "seconds ago" : "пре неколико секунди",
- "_%n minute ago_::_%n minutes ago_" : ["","",""],
- "_%n hour ago_::_%n hours ago_" : ["","",""],
"today" : "данас",
"yesterday" : "јуче",
- "_%n day go_::_%n days ago_" : ["","",""],
+ "_%n day ago_::_%n days ago_" : ["","",""],
"last month" : "прошлог месеца",
"_%n month ago_::_%n months ago_" : ["","",""],
"last year" : "прошле године",
- "years ago" : "година раније",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "seconds ago" : "пре неколико секунди",
+ "web services under your control" : "веб сервиси под контролом",
+ "Application is not enabled" : "Апликација није омогућена",
+ "Authentication error" : "Грешка при провери идентитета",
+ "Token expired. Please reload page." : "Жетон је истекао. Поново учитајте страницу.",
+ "Could not find category \"%s\"" : "Не могу да пронађем категорију „%s“.",
"A valid username must be provided" : "Морате унети исправно корисничко име",
"A valid password must be provided" : "Морате унети исправну лозинку"
},
diff --git a/lib/l10n/sr.json b/lib/l10n/sr.json
index 6fd8fa308a6..a9d28c1ea5a 100644
--- a/lib/l10n/sr.json
+++ b/lib/l10n/sr.json
@@ -4,21 +4,21 @@
"Settings" : "Поставке",
"Users" : "Корисници",
"Admin" : "Администратор",
- "web services under your control" : "веб сервиси под контролом",
- "Application is not enabled" : "Апликација није омогућена",
- "Authentication error" : "Грешка при провери идентитета",
- "Token expired. Please reload page." : "Жетон је истекао. Поново учитајте страницу.",
- "Could not find category \"%s\"" : "Не могу да пронађем категорију „%s“.",
- "seconds ago" : "пре неколико секунди",
- "_%n minute ago_::_%n minutes ago_" : ["","",""],
- "_%n hour ago_::_%n hours ago_" : ["","",""],
"today" : "данас",
"yesterday" : "јуче",
- "_%n day go_::_%n days ago_" : ["","",""],
+ "_%n day ago_::_%n days ago_" : ["","",""],
"last month" : "прошлог месеца",
"_%n month ago_::_%n months ago_" : ["","",""],
"last year" : "прошле године",
- "years ago" : "година раније",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "seconds ago" : "пре неколико секунди",
+ "web services under your control" : "веб сервиси под контролом",
+ "Application is not enabled" : "Апликација није омогућена",
+ "Authentication error" : "Грешка при провери идентитета",
+ "Token expired. Please reload page." : "Жетон је истекао. Поново учитајте страницу.",
+ "Could not find category \"%s\"" : "Не могу да пронађем категорију „%s“.",
"A valid username must be provided" : "Морате унети исправно корисничко име",
"A valid password must be provided" : "Морате унети исправну лозинку"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/lib/l10n/sr@latin.js b/lib/l10n/sr@latin.js
index 11a536224d1..be1a41c85ff 100644
--- a/lib/l10n/sr@latin.js
+++ b/lib/l10n/sr@latin.js
@@ -6,16 +6,18 @@ OC.L10N.register(
"Settings" : "Podešavanja",
"Users" : "Korisnici",
"Admin" : "Adninistracija",
- "Authentication error" : "Greška pri autentifikaciji",
- "seconds ago" : "Pre par sekundi",
- "_%n minute ago_::_%n minutes ago_" : ["","","pre %n minuta"],
- "_%n hour ago_::_%n hours ago_" : ["","","pre %n sati"],
+ "Unknown filetype" : "Nepoznat tip fajla",
+ "Invalid image" : "Neispravna slika",
"today" : "Danas",
"yesterday" : "juče",
- "_%n day go_::_%n days ago_" : ["","","Prije %n dana."],
+ "_%n day ago_::_%n days ago_" : ["","",""],
"last month" : "prošlog meseca",
"_%n month ago_::_%n months ago_" : ["","",""],
"last year" : "prošle godine",
- "years ago" : "pre nekoliko godina"
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","pre %n sati"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","pre %n minuta"],
+ "seconds ago" : "Pre par sekundi",
+ "Authentication error" : "Greška pri autentifikaciji"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/sr@latin.json b/lib/l10n/sr@latin.json
index ce429467aee..b6aeff717c0 100644
--- a/lib/l10n/sr@latin.json
+++ b/lib/l10n/sr@latin.json
@@ -4,16 +4,18 @@
"Settings" : "Podešavanja",
"Users" : "Korisnici",
"Admin" : "Adninistracija",
- "Authentication error" : "Greška pri autentifikaciji",
- "seconds ago" : "Pre par sekundi",
- "_%n minute ago_::_%n minutes ago_" : ["","","pre %n minuta"],
- "_%n hour ago_::_%n hours ago_" : ["","","pre %n sati"],
+ "Unknown filetype" : "Nepoznat tip fajla",
+ "Invalid image" : "Neispravna slika",
"today" : "Danas",
"yesterday" : "juče",
- "_%n day go_::_%n days ago_" : ["","","Prije %n dana."],
+ "_%n day ago_::_%n days ago_" : ["","",""],
"last month" : "prošlog meseca",
"_%n month ago_::_%n months ago_" : ["","",""],
"last year" : "prošle godine",
- "years ago" : "pre nekoliko godina"
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","pre %n sati"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","pre %n minuta"],
+ "seconds ago" : "Pre par sekundi",
+ "Authentication error" : "Greška pri autentifikaciji"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/su.js b/lib/l10n/su.js
index 0f4a002019e..784e8271ef3 100644
--- a/lib/l10n/su.js
+++ b/lib/l10n/su.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""]
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/su.json b/lib/l10n/su.json
index 4a03cf5047e..3a3512d508d 100644
--- a/lib/l10n/su.json
+++ b/lib/l10n/su.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""]
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
index 9bfaa59074c..c4b5483e151 100644
--- a/lib/l10n/sv.js
+++ b/lib/l10n/sv.js
@@ -4,6 +4,19 @@ OC.L10N.register(
"Cannot write into \"config\" directory!" : "Kan inte skriva till \"config\" katalogen!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Detta kan vanligtvis åtgärdas genom att ge skrivrättigheter till config katalgogen",
"See %s" : "Se %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till konfigurations-katalogen %s.",
+ "Sample configuration detected" : "Exempel-konfiguration detekterad",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det har detekterats att exempel-konfigurationen har kopierats. Detta kan förstöra din installation och stöds ej. Vänligen läs dokumentationen innan ändringar på config.php utförs",
+ "PHP %s or higher is required." : "PHP %s eller högre krävs.",
+ "PHP with a version lower than %s is required." : "PHP med version lägre än %s krävs.",
+ "Following databases are supported: %s" : "Följande databastyper stödjs: %s",
+ "The command line tool %s could not be found" : "Kommandoradsverktyget %s hittades inte.",
+ "The library %s is not available." : "Biblioteket %s är inte tillgängligt.",
+ "Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med version högre än %s krävs - tillgänglig version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med version lägre än %s krävs - tillgänglig version %s.",
+ "Following platforms are supported: %s" : "Följande plattformar stödjs: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s eller högre krävs.",
+ "ownCloud with a version lower than %s is required." : "ownCloud med version lägre än %s krävs.",
"Help" : "Hjälp",
"Personal" : "Personligt",
"Settings" : "Inställningar",
@@ -11,9 +24,22 @@ OC.L10N.register(
"Admin" : "Admin",
"Recommended" : "Rekomenderad",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Applikationen \\\"%s\\\" kan inte installeras då en inte är kompatibel med denna version utav ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Appen \\\"%s\\\" kan inte installerad då följande beroenden inte är uppfyllda: %s",
"No app name specified" : "Inget appnamn angivet",
"Unknown filetype" : "Okänd filtyp",
"Invalid image" : "Ogiltig bild",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag sedan","%n dagar sedan"],
+ "last month" : "förra månaden",
+ "_%n month ago_::_%n months ago_" : ["%n månad sedan","%n månader sedan"],
+ "last year" : "förra året",
+ "_%n year ago_::_%n years ago_" : ["%n år sedan","%n år sedan"],
+ "_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
+ "seconds ago" : "sekunder sedan",
+ "Database Error" : "Databasfel",
+ "Please contact your system administrator." : "Vänligen kontakta din systemadmiistratör",
"web services under your control" : "webbtjänster under din kontroll",
"App directory already exists" : "Appens mapp finns redan",
"Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
@@ -37,7 +63,7 @@ OC.L10N.register(
"MS SQL username and/or password not valid: %s" : "MS SQL-användaren och/eller lösenordet var inte giltigt: %s",
"You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
"MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB användarnamn och/eller lösenord är felaktigt",
- "DB Error: \"%s\"" : "DB error: \"%s\"",
+ "DB Error: \"%s\"" : "DB fel: \"%s\"",
"Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"",
"MySQL/MariaDB user '%s'@'localhost' exists already." : "MySQL/MariaDB användare '%s'@'localhost' existerar redan.",
"Drop this user from MySQL/MariaDB" : "Radera denna användare från MySQL/MariaDB",
@@ -49,7 +75,9 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
"Set an admin username." : "Ange ett användarnamn för administratören.",
"Set an admin password." : "Ange ett administratörslösenord.",
+ "Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
"%s shared »%s« with you" : "%s delade »%s« med dig",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Misslyckades dela ut %s då backend inte tillåter delningar från typ %i",
"Sharing %s failed, because the file does not exist" : "Delning av %s misslyckades på grund av att filen inte existerar",
"You are not allowed to share %s" : "Du har inte rätt att dela %s",
"Sharing %s failed, because the user %s is the item owner" : "Delning %s misslyckades därför att användaren %s är den som äger objektet",
@@ -60,9 +88,12 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Delning %s misslyckades därför att %s inte ingår i gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du måste ange ett lösenord för att skapa en offentlig länk, endast skyddade länkar är tillåtna",
"Sharing %s failed, because sharing with links is not allowed" : "Delning %s misslyckades därför att delning utav länkar inte är tillåtet",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
"Share type %s is not valid for %s" : "Delningstyp %s är inte giltig för %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Misslyckades att sätta rättigheter för %s därför att rättigheterna överskrider de som är tillåtna för %s",
"Setting permissions for %s failed, because the item was not found" : "Att sätta rättigheterna för %s misslyckades därför att objektet inte hittades",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan inte sätta utgångsdatum. Utdelningar kan inte utgå senare än %s efter de har delats ut",
+ "Cannot set expiration date. Expiration date is in the past" : "Kan inte sätta utgångsdatum. Utgångsdatumet är i det förflutna.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delningsgränssnittet %s måste implementera gränssnittet OCP\\Share_Backend",
"Sharing backend %s not found" : "Delningsgränssnittet %s hittades inte",
"Sharing backend for %s not found" : "Delningsgränssnittet för %s hittades inte",
@@ -72,31 +103,23 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Delning %s misslyckades därför att delningsgränsnittet för %s inte kunde hitta sin källa",
"Sharing %s failed, because the file could not be found in the file cache" : "Delning %s misslyckades därför att filen inte kunde hittas i filcachen",
"Could not find category \"%s\"" : "Kunde inte hitta kategorin \"%s\"",
- "seconds ago" : "sekunder sedan",
- "_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
- "_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
- "today" : "i dag",
- "yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["%n dag sedan","%n dagar sedan"],
- "last month" : "förra månaden",
- "_%n month ago_::_%n months ago_" : ["%n månad sedan","%n månader sedan"],
- "last year" : "förra året",
- "years ago" : "år sedan",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Endast följande tecken är tillåtna i ett användarnamn: \"az\", \"AZ\", \"0-9\", och \"_ @ -.\"",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"The username is already being used" : "Användarnamnet används redan",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Inga databasdrivrutiner (sqlite, mysql, eller postgresql) installerade.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.",
"Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen",
"Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.",
"Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att ge <a href=\"%s\" target=\"_blank\">webservern skrivrättigheter till rootkatalogen</a>.",
+ "Setting locale to %s failed" : "Sätta locale till %s misslyckades",
+ "Please install one of these locales on your system and restart your webserver." : "Vänligen installera en av dessa locale på din server och starta om dinn webbserver,",
"Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.",
"PHP module %s not installed." : "PHP modulen %s är inte installerad.",
- "PHP %s or higher is required." : "PHP %s eller högre krävs.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vänligen be serveradministratören uppdatera PHP till den senaste versionen. Din PHP-version stöds inte längre av ownCloud.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har installerats, men de listas fortfarande som saknade?",
"Please ask your server administrator to restart the web server." : "Vänligen be din serveradministratör att starta om webservern.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs",
"Please upgrade your database version" : "Vänligen uppgradera din databas-version",
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
index 299911142a3..ee6b12f09e2 100644
--- a/lib/l10n/sv.json
+++ b/lib/l10n/sv.json
@@ -2,6 +2,19 @@
"Cannot write into \"config\" directory!" : "Kan inte skriva till \"config\" katalogen!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Detta kan vanligtvis åtgärdas genom att ge skrivrättigheter till config katalgogen",
"See %s" : "Se %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till konfigurations-katalogen %s.",
+ "Sample configuration detected" : "Exempel-konfiguration detekterad",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det har detekterats att exempel-konfigurationen har kopierats. Detta kan förstöra din installation och stöds ej. Vänligen läs dokumentationen innan ändringar på config.php utförs",
+ "PHP %s or higher is required." : "PHP %s eller högre krävs.",
+ "PHP with a version lower than %s is required." : "PHP med version lägre än %s krävs.",
+ "Following databases are supported: %s" : "Följande databastyper stödjs: %s",
+ "The command line tool %s could not be found" : "Kommandoradsverktyget %s hittades inte.",
+ "The library %s is not available." : "Biblioteket %s är inte tillgängligt.",
+ "Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med version högre än %s krävs - tillgänglig version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med version lägre än %s krävs - tillgänglig version %s.",
+ "Following platforms are supported: %s" : "Följande plattformar stödjs: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s eller högre krävs.",
+ "ownCloud with a version lower than %s is required." : "ownCloud med version lägre än %s krävs.",
"Help" : "Hjälp",
"Personal" : "Personligt",
"Settings" : "Inställningar",
@@ -9,9 +22,22 @@
"Admin" : "Admin",
"Recommended" : "Rekomenderad",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Applikationen \\\"%s\\\" kan inte installeras då en inte är kompatibel med denna version utav ownCloud.",
+ "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Appen \\\"%s\\\" kan inte installerad då följande beroenden inte är uppfyllda: %s",
"No app name specified" : "Inget appnamn angivet",
"Unknown filetype" : "Okänd filtyp",
"Invalid image" : "Ogiltig bild",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag sedan","%n dagar sedan"],
+ "last month" : "förra månaden",
+ "_%n month ago_::_%n months ago_" : ["%n månad sedan","%n månader sedan"],
+ "last year" : "förra året",
+ "_%n year ago_::_%n years ago_" : ["%n år sedan","%n år sedan"],
+ "_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
+ "seconds ago" : "sekunder sedan",
+ "Database Error" : "Databasfel",
+ "Please contact your system administrator." : "Vänligen kontakta din systemadmiistratör",
"web services under your control" : "webbtjänster under din kontroll",
"App directory already exists" : "Appens mapp finns redan",
"Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
@@ -35,7 +61,7 @@
"MS SQL username and/or password not valid: %s" : "MS SQL-användaren och/eller lösenordet var inte giltigt: %s",
"You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
"MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB användarnamn och/eller lösenord är felaktigt",
- "DB Error: \"%s\"" : "DB error: \"%s\"",
+ "DB Error: \"%s\"" : "DB fel: \"%s\"",
"Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"",
"MySQL/MariaDB user '%s'@'localhost' exists already." : "MySQL/MariaDB användare '%s'@'localhost' existerar redan.",
"Drop this user from MySQL/MariaDB" : "Radera denna användare från MySQL/MariaDB",
@@ -47,7 +73,9 @@
"PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
"Set an admin username." : "Ange ett användarnamn för administratören.",
"Set an admin password." : "Ange ett administratörslösenord.",
+ "Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
"%s shared »%s« with you" : "%s delade »%s« med dig",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Misslyckades dela ut %s då backend inte tillåter delningar från typ %i",
"Sharing %s failed, because the file does not exist" : "Delning av %s misslyckades på grund av att filen inte existerar",
"You are not allowed to share %s" : "Du har inte rätt att dela %s",
"Sharing %s failed, because the user %s is the item owner" : "Delning %s misslyckades därför att användaren %s är den som äger objektet",
@@ -58,9 +86,12 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Delning %s misslyckades därför att %s inte ingår i gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du måste ange ett lösenord för att skapa en offentlig länk, endast skyddade länkar är tillåtna",
"Sharing %s failed, because sharing with links is not allowed" : "Delning %s misslyckades därför att delning utav länkar inte är tillåtet",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
"Share type %s is not valid for %s" : "Delningstyp %s är inte giltig för %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Misslyckades att sätta rättigheter för %s därför att rättigheterna överskrider de som är tillåtna för %s",
"Setting permissions for %s failed, because the item was not found" : "Att sätta rättigheterna för %s misslyckades därför att objektet inte hittades",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan inte sätta utgångsdatum. Utdelningar kan inte utgå senare än %s efter de har delats ut",
+ "Cannot set expiration date. Expiration date is in the past" : "Kan inte sätta utgångsdatum. Utgångsdatumet är i det förflutna.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delningsgränssnittet %s måste implementera gränssnittet OCP\\Share_Backend",
"Sharing backend %s not found" : "Delningsgränssnittet %s hittades inte",
"Sharing backend for %s not found" : "Delningsgränssnittet för %s hittades inte",
@@ -70,31 +101,23 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Delning %s misslyckades därför att delningsgränsnittet för %s inte kunde hitta sin källa",
"Sharing %s failed, because the file could not be found in the file cache" : "Delning %s misslyckades därför att filen inte kunde hittas i filcachen",
"Could not find category \"%s\"" : "Kunde inte hitta kategorin \"%s\"",
- "seconds ago" : "sekunder sedan",
- "_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
- "_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
- "today" : "i dag",
- "yesterday" : "i går",
- "_%n day go_::_%n days ago_" : ["%n dag sedan","%n dagar sedan"],
- "last month" : "förra månaden",
- "_%n month ago_::_%n months ago_" : ["%n månad sedan","%n månader sedan"],
- "last year" : "förra året",
- "years ago" : "år sedan",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Endast följande tecken är tillåtna i ett användarnamn: \"az\", \"AZ\", \"0-9\", och \"_ @ -.\"",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"The username is already being used" : "Användarnamnet används redan",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Inga databasdrivrutiner (sqlite, mysql, eller postgresql) installerade.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.",
"Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen",
"Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.",
"Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att ge <a href=\"%s\" target=\"_blank\">webservern skrivrättigheter till rootkatalogen</a>.",
+ "Setting locale to %s failed" : "Sätta locale till %s misslyckades",
+ "Please install one of these locales on your system and restart your webserver." : "Vänligen installera en av dessa locale på din server och starta om dinn webbserver,",
"Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.",
"PHP module %s not installed." : "PHP modulen %s är inte installerad.",
- "PHP %s or higher is required." : "PHP %s eller högre krävs.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vänligen be serveradministratören uppdatera PHP till den senaste versionen. Din PHP-version stöds inte längre av ownCloud.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har installerats, men de listas fortfarande som saknade?",
"Please ask your server administrator to restart the web server." : "Vänligen be din serveradministratör att starta om webservern.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs",
"Please upgrade your database version" : "Vänligen uppgradera din databas-version",
diff --git a/lib/l10n/sw_KE.js b/lib/l10n/sw_KE.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/sw_KE.js
+++ b/lib/l10n/sw_KE.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sw_KE.json b/lib/l10n/sw_KE.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/sw_KE.json
+++ b/lib/l10n/sw_KE.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ta_IN.js b/lib/l10n/ta_IN.js
index e026954a573..27a3f155da1 100644
--- a/lib/l10n/ta_IN.js
+++ b/lib/l10n/ta_IN.js
@@ -2,9 +2,10 @@ OC.L10N.register(
"lib",
{
"Settings" : "அமைப்புகள்",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ta_IN.json b/lib/l10n/ta_IN.json
index 3f9f5882968..937923e8068 100644
--- a/lib/l10n/ta_IN.json
+++ b/lib/l10n/ta_IN.json
@@ -1,8 +1,9 @@
{ "translations": {
"Settings" : "அமைப்புகள்",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ta_LK.js b/lib/l10n/ta_LK.js
index 5f2d310c40b..758ad47a78d 100644
--- a/lib/l10n/ta_LK.js
+++ b/lib/l10n/ta_LK.js
@@ -6,20 +6,20 @@ OC.L10N.register(
"Settings" : "அமைப்புகள்",
"Users" : "பயனாளர்",
"Admin" : "நிர்வாகம்",
- "web services under your control" : "வலைய சேவைகள் உங்களுடைய கட்டுப்பாட்டின் கீழ் உள்ளது",
- "Application is not enabled" : "செயலி இயலுமைப்படுத்தப்படவில்லை",
- "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
- "Token expired. Please reload page." : "அடையாளவில்லை காலாவதியாகிவிட்டது. தயவுசெய்து பக்கத்தை மீள் ஏற்றுக.",
- "Could not find category \"%s\"" : "பிரிவு \"%s\" ஐ கண்டுப்பிடிக்க முடியவில்லை",
- "seconds ago" : "செக்கன்களுக்கு முன்",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "இன்று",
"yesterday" : "நேற்று",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "கடந்த மாதம்",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "கடந்த வருடம்",
- "years ago" : "வருடங்களுக்கு முன்"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "செக்கன்களுக்கு முன்",
+ "web services under your control" : "வலைய சேவைகள் உங்களுடைய கட்டுப்பாட்டின் கீழ் உள்ளது",
+ "Application is not enabled" : "செயலி இயலுமைப்படுத்தப்படவில்லை",
+ "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
+ "Token expired. Please reload page." : "அடையாளவில்லை காலாவதியாகிவிட்டது. தயவுசெய்து பக்கத்தை மீள் ஏற்றுக.",
+ "Could not find category \"%s\"" : "பிரிவு \"%s\" ஐ கண்டுப்பிடிக்க முடியவில்லை"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ta_LK.json b/lib/l10n/ta_LK.json
index e5191020433..378f926337e 100644
--- a/lib/l10n/ta_LK.json
+++ b/lib/l10n/ta_LK.json
@@ -4,20 +4,20 @@
"Settings" : "அமைப்புகள்",
"Users" : "பயனாளர்",
"Admin" : "நிர்வாகம்",
- "web services under your control" : "வலைய சேவைகள் உங்களுடைய கட்டுப்பாட்டின் கீழ் உள்ளது",
- "Application is not enabled" : "செயலி இயலுமைப்படுத்தப்படவில்லை",
- "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
- "Token expired. Please reload page." : "அடையாளவில்லை காலாவதியாகிவிட்டது. தயவுசெய்து பக்கத்தை மீள் ஏற்றுக.",
- "Could not find category \"%s\"" : "பிரிவு \"%s\" ஐ கண்டுப்பிடிக்க முடியவில்லை",
- "seconds ago" : "செக்கன்களுக்கு முன்",
- "_%n minute ago_::_%n minutes ago_" : ["",""],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "இன்று",
"yesterday" : "நேற்று",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "கடந்த மாதம்",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "கடந்த வருடம்",
- "years ago" : "வருடங்களுக்கு முன்"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "seconds ago" : "செக்கன்களுக்கு முன்",
+ "web services under your control" : "வலைய சேவைகள் உங்களுடைய கட்டுப்பாட்டின் கீழ் உள்ளது",
+ "Application is not enabled" : "செயலி இயலுமைப்படுத்தப்படவில்லை",
+ "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
+ "Token expired. Please reload page." : "அடையாளவில்லை காலாவதியாகிவிட்டது. தயவுசெய்து பக்கத்தை மீள் ஏற்றுக.",
+ "Could not find category \"%s\"" : "பிரிவு \"%s\" ஐ கண்டுப்பிடிக்க முடியவில்லை"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/te.js b/lib/l10n/te.js
index e1a3602f617..615c6bd68ca 100644
--- a/lib/l10n/te.js
+++ b/lib/l10n/te.js
@@ -5,15 +5,15 @@ OC.L10N.register(
"Personal" : "వ్యక్తిగతం",
"Settings" : "అమరికలు",
"Users" : "వాడుకరులు",
- "seconds ago" : "క్షణాల క్రితం",
- "_%n minute ago_::_%n minutes ago_" : ["","%n నిమిషాల క్రితం"],
- "_%n hour ago_::_%n hours ago_" : ["","%n గంటల క్రితం"],
"today" : "ఈరోజు",
"yesterday" : "నిన్న",
- "_%n day go_::_%n days ago_" : ["","%n రోజుల క్రితం"],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "పోయిన నెల",
"_%n month ago_::_%n months ago_" : ["","%n నెలల క్రితం"],
"last year" : "పోయిన సంవత్సరం",
- "years ago" : "సంవత్సరాల క్రితం"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n గంటల క్రితం"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n నిమిషాల క్రితం"],
+ "seconds ago" : "క్షణాల క్రితం"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/te.json b/lib/l10n/te.json
index 1e9669c12b3..4b243366da1 100644
--- a/lib/l10n/te.json
+++ b/lib/l10n/te.json
@@ -3,15 +3,15 @@
"Personal" : "వ్యక్తిగతం",
"Settings" : "అమరికలు",
"Users" : "వాడుకరులు",
- "seconds ago" : "క్షణాల క్రితం",
- "_%n minute ago_::_%n minutes ago_" : ["","%n నిమిషాల క్రితం"],
- "_%n hour ago_::_%n hours ago_" : ["","%n గంటల క్రితం"],
"today" : "ఈరోజు",
"yesterday" : "నిన్న",
- "_%n day go_::_%n days ago_" : ["","%n రోజుల క్రితం"],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "పోయిన నెల",
"_%n month ago_::_%n months ago_" : ["","%n నెలల క్రితం"],
"last year" : "పోయిన సంవత్సరం",
- "years ago" : "సంవత్సరాల క్రితం"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n గంటల క్రితం"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n నిమిషాల క్రితం"],
+ "seconds ago" : "క్షణాల క్రితం"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/tg_TJ.js b/lib/l10n/tg_TJ.js
index da0dcc6bdde..a12702211c2 100644
--- a/lib/l10n/tg_TJ.js
+++ b/lib/l10n/tg_TJ.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/tg_TJ.json b/lib/l10n/tg_TJ.json
index 4286553dd0c..b994fa289eb 100644
--- a/lib/l10n/tg_TJ.json
+++ b/lib/l10n/tg_TJ.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/th_TH.js b/lib/l10n/th_TH.js
index 8a58554c53b..9ab8b29e5a0 100644
--- a/lib/l10n/th_TH.js
+++ b/lib/l10n/th_TH.js
@@ -6,20 +6,20 @@ OC.L10N.register(
"Settings" : "ตั้งค่า",
"Users" : "ผู้ใช้งาน",
"Admin" : "ผู้ดูแล",
- "web services under your control" : "เว็บเซอร์วิสที่คุณควบคุมการใช้งานได้",
- "Application is not enabled" : "แอพพลิเคชั่นดังกล่าวยังไม่ได้เปิดใช้งาน",
- "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน",
- "Token expired. Please reload page." : "รหัสยืนยันความถูกต้องหมดอายุแล้ว กรุณาโหลดหน้าเว็บใหม่อีกครั้ง",
- "Could not find category \"%s\"" : "ไม่พบหมวดหมู่ \"%s\"",
- "seconds ago" : "วินาที ก่อนหน้านี้",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
"today" : "วันนี้",
"yesterday" : "เมื่อวานนี้",
- "_%n day go_::_%n days ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "เดือนที่แล้ว",
"_%n month ago_::_%n months ago_" : [""],
"last year" : "ปีที่แล้ว",
- "years ago" : "ปี ที่ผ่านมา"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "seconds ago" : "วินาที ก่อนหน้านี้",
+ "web services under your control" : "เว็บเซอร์วิสที่คุณควบคุมการใช้งานได้",
+ "Application is not enabled" : "แอพพลิเคชั่นดังกล่าวยังไม่ได้เปิดใช้งาน",
+ "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน",
+ "Token expired. Please reload page." : "รหัสยืนยันความถูกต้องหมดอายุแล้ว กรุณาโหลดหน้าเว็บใหม่อีกครั้ง",
+ "Could not find category \"%s\"" : "ไม่พบหมวดหมู่ \"%s\""
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/th_TH.json b/lib/l10n/th_TH.json
index dde903b4a3f..13452ec720a 100644
--- a/lib/l10n/th_TH.json
+++ b/lib/l10n/th_TH.json
@@ -4,20 +4,20 @@
"Settings" : "ตั้งค่า",
"Users" : "ผู้ใช้งาน",
"Admin" : "ผู้ดูแล",
- "web services under your control" : "เว็บเซอร์วิสที่คุณควบคุมการใช้งานได้",
- "Application is not enabled" : "แอพพลิเคชั่นดังกล่าวยังไม่ได้เปิดใช้งาน",
- "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน",
- "Token expired. Please reload page." : "รหัสยืนยันความถูกต้องหมดอายุแล้ว กรุณาโหลดหน้าเว็บใหม่อีกครั้ง",
- "Could not find category \"%s\"" : "ไม่พบหมวดหมู่ \"%s\"",
- "seconds ago" : "วินาที ก่อนหน้านี้",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
"today" : "วันนี้",
"yesterday" : "เมื่อวานนี้",
- "_%n day go_::_%n days ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "เดือนที่แล้ว",
"_%n month ago_::_%n months ago_" : [""],
"last year" : "ปีที่แล้ว",
- "years ago" : "ปี ที่ผ่านมา"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "seconds ago" : "วินาที ก่อนหน้านี้",
+ "web services under your control" : "เว็บเซอร์วิสที่คุณควบคุมการใช้งานได้",
+ "Application is not enabled" : "แอพพลิเคชั่นดังกล่าวยังไม่ได้เปิดใช้งาน",
+ "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน",
+ "Token expired. Please reload page." : "รหัสยืนยันความถูกต้องหมดอายุแล้ว กรุณาโหลดหน้าเว็บใหม่อีกครั้ง",
+ "Could not find category \"%s\"" : "ไม่พบหมวดหมู่ \"%s\""
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/tl_PH.js b/lib/l10n/tl_PH.js
index 9ac3e05d6c6..9408adc0dc3 100644
--- a/lib/l10n/tl_PH.js
+++ b/lib/l10n/tl_PH.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/tl_PH.json b/lib/l10n/tl_PH.json
index 82a8a99d300..2a227e468c7 100644
--- a/lib/l10n/tl_PH.json
+++ b/lib/l10n/tl_PH.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index 0f6a40a7ef2..8b31e25ca22 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -7,6 +7,8 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Bu genellikle, %sweb sunucusuna config dizinine yazma erişimi verilerek%s çözülebilir",
"Sample configuration detected" : "Örnek yapılandırma tespit edildi",
"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" : "Örnek yapılandırmanın kopyalanmış olabileceği tespit edildi. Bu kurulumunuzu bozabilir ve desteklenmemektedir. Lütfen config.php dosyasında değişiklik yapmadan önce belgelendirmeyi okuyun",
+ "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
+ "Following databases are supported: %s" : "Şu veritabanları desteklenmekte: %s",
"Help" : "Yardım",
"Personal" : "Kişisel",
"Settings" : "Ayarlar",
@@ -17,6 +19,18 @@ OC.L10N.register(
"No app name specified" : "Uygulama adı belirtilmedi",
"Unknown filetype" : "Bilinmeyen dosya türü",
"Invalid image" : "Geçersiz resim",
+ "today" : "bugün",
+ "yesterday" : "dün",
+ "_%n day ago_::_%n days ago_" : ["%n gün önce","%n gün önce"],
+ "last month" : "geçen ay",
+ "_%n month ago_::_%n months ago_" : ["","%n ay önce"],
+ "last year" : "geçen yıl",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n saat önce"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n dakika önce"],
+ "seconds ago" : "saniyeler önce",
+ "Database Error" : "Veritabanı Hatası",
+ "Please contact your system administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"web services under your control" : "denetiminizdeki web hizmetleri",
"App directory already exists" : "Uygulama dizini zaten mevcut",
"Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s",
@@ -78,16 +92,6 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s paylaşımı, %s için arka ucun kaynağını bulamamasından dolayı başarısız oldu",
"Sharing %s failed, because the file could not be found in the file cache" : "%s paylaşımı, dosyanın dosya önbelleğinde bulunamamasınndan dolayı başarısız oldu",
"Could not find category \"%s\"" : "\"%s\" kategorisi bulunamadı",
- "seconds ago" : "saniyeler önce",
- "_%n minute ago_::_%n minutes ago_" : ["","%n dakika önce"],
- "_%n hour ago_::_%n hours ago_" : ["","%n saat önce"],
- "today" : "bugün",
- "yesterday" : "dün",
- "_%n day go_::_%n days ago_" : ["","%n gün önce"],
- "last month" : "geçen ay",
- "_%n month ago_::_%n months ago_" : ["","%n ay önce"],
- "last year" : "geçen yıl",
- "years ago" : "yıllar önce",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Kullanıcı adında sadece bu karakterlere izin verilmektedir: \"a-z\", \"A-Z\", \"0-9\", ve \"_.@-\"",
"A valid username must be provided" : "Geçerli bir kullanıcı adı mutlaka sağlanmalı",
"A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı",
@@ -103,12 +107,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Lütfen bu yerellerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.",
"PHP module %s not installed." : "PHP modülü %s yüklü değil.",
- "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Lütfen PHP'yi en son sürüme güncellemesi için sunucu yönetinize danışın. PHP sürümünüz ownCloud ve PHP topluluğu tarafından artık desteklenmemektedir.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Güvenli Kip (Safe Mode) etkin. ownCloud düzgün çalışabilmesi için bunun devre dışı olmasını gerektirir.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Güvenli Kip (Safe Mode), eskimiş ve devre dışı bırakılması gereken en kullanışsız ayardır. Lütfen php.ini veya web sunucu yapılandırması içerisinde devre dışı bırakması için sunucu yöneticinize danışın.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Sihirli Tırnaklar (Magic Quotes) etkin. ownCloud çalışabilmesi için bunun devre dışı bırakılması gerekli.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Sihirli Tırnaklar (Magic Quotes), eskimiş ve devre dışı bırakılması gereken en kullanışsız ayardır. Lütfen php.ini veya web sunucu yapılandırması içerisinde devre dışı bırakması için sunucu yöneticinize danışın.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP modülleri yüklü, ancak hala eksik olarak mı görünüyorlar?",
"Please ask your server administrator to restart the web server." : "Lütfen web sunucusunu yeniden başlatması için sunucu yöneticinize danışın.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 gerekli",
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index 52bad09e9cf..c2e979de98f 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -5,6 +5,8 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Bu genellikle, %sweb sunucusuna config dizinine yazma erişimi verilerek%s çözülebilir",
"Sample configuration detected" : "Örnek yapılandırma tespit edildi",
"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" : "Örnek yapılandırmanın kopyalanmış olabileceği tespit edildi. Bu kurulumunuzu bozabilir ve desteklenmemektedir. Lütfen config.php dosyasında değişiklik yapmadan önce belgelendirmeyi okuyun",
+ "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
+ "Following databases are supported: %s" : "Şu veritabanları desteklenmekte: %s",
"Help" : "Yardım",
"Personal" : "Kişisel",
"Settings" : "Ayarlar",
@@ -15,6 +17,18 @@
"No app name specified" : "Uygulama adı belirtilmedi",
"Unknown filetype" : "Bilinmeyen dosya türü",
"Invalid image" : "Geçersiz resim",
+ "today" : "bugün",
+ "yesterday" : "dün",
+ "_%n day ago_::_%n days ago_" : ["%n gün önce","%n gün önce"],
+ "last month" : "geçen ay",
+ "_%n month ago_::_%n months ago_" : ["","%n ay önce"],
+ "last year" : "geçen yıl",
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["","%n saat önce"],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n dakika önce"],
+ "seconds ago" : "saniyeler önce",
+ "Database Error" : "Veritabanı Hatası",
+ "Please contact your system administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"web services under your control" : "denetiminizdeki web hizmetleri",
"App directory already exists" : "Uygulama dizini zaten mevcut",
"Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s",
@@ -76,16 +90,6 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s paylaşımı, %s için arka ucun kaynağını bulamamasından dolayı başarısız oldu",
"Sharing %s failed, because the file could not be found in the file cache" : "%s paylaşımı, dosyanın dosya önbelleğinde bulunamamasınndan dolayı başarısız oldu",
"Could not find category \"%s\"" : "\"%s\" kategorisi bulunamadı",
- "seconds ago" : "saniyeler önce",
- "_%n minute ago_::_%n minutes ago_" : ["","%n dakika önce"],
- "_%n hour ago_::_%n hours ago_" : ["","%n saat önce"],
- "today" : "bugün",
- "yesterday" : "dün",
- "_%n day go_::_%n days ago_" : ["","%n gün önce"],
- "last month" : "geçen ay",
- "_%n month ago_::_%n months ago_" : ["","%n ay önce"],
- "last year" : "geçen yıl",
- "years ago" : "yıllar önce",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Kullanıcı adında sadece bu karakterlere izin verilmektedir: \"a-z\", \"A-Z\", \"0-9\", ve \"_.@-\"",
"A valid username must be provided" : "Geçerli bir kullanıcı adı mutlaka sağlanmalı",
"A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı",
@@ -101,12 +105,7 @@
"Please install one of these locales on your system and restart your webserver." : "Lütfen bu yerellerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.",
"PHP module %s not installed." : "PHP modülü %s yüklü değil.",
- "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Lütfen PHP'yi en son sürüme güncellemesi için sunucu yönetinize danışın. PHP sürümünüz ownCloud ve PHP topluluğu tarafından artık desteklenmemektedir.",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Güvenli Kip (Safe Mode) etkin. ownCloud düzgün çalışabilmesi için bunun devre dışı olmasını gerektirir.",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Güvenli Kip (Safe Mode), eskimiş ve devre dışı bırakılması gereken en kullanışsız ayardır. Lütfen php.ini veya web sunucu yapılandırması içerisinde devre dışı bırakması için sunucu yöneticinize danışın.",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Sihirli Tırnaklar (Magic Quotes) etkin. ownCloud çalışabilmesi için bunun devre dışı bırakılması gerekli.",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Sihirli Tırnaklar (Magic Quotes), eskimiş ve devre dışı bırakılması gereken en kullanışsız ayardır. Lütfen php.ini veya web sunucu yapılandırması içerisinde devre dışı bırakması için sunucu yöneticinize danışın.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP modülleri yüklü, ancak hala eksik olarak mı görünüyorlar?",
"Please ask your server administrator to restart the web server." : "Lütfen web sunucusunu yeniden başlatması için sunucu yöneticinize danışın.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 gerekli",
diff --git a/lib/l10n/tzm.js b/lib/l10n/tzm.js
index d0485468f71..326649ad645 100644
--- a/lib/l10n/tzm.js
+++ b/lib/l10n/tzm.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},
"nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;");
diff --git a/lib/l10n/tzm.json b/lib/l10n/tzm.json
index 73b35cf4dfa..8a960ea6b66 100644
--- a/lib/l10n/tzm.json
+++ b/lib/l10n/tzm.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
+ "_%n month ago_::_%n months ago_" : ["",""],
+ "_%n year ago_::_%n years ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["",""],
- "_%n day go_::_%n days ago_" : ["",""],
- "_%n month ago_::_%n months ago_" : ["",""]
+ "_%n minute ago_::_%n minutes ago_" : ["",""]
},"pluralForm" :"nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;"
} \ No newline at end of file
diff --git a/lib/l10n/ug.js b/lib/l10n/ug.js
index 977cdcab5d8..5ee6ccadd82 100644
--- a/lib/l10n/ug.js
+++ b/lib/l10n/ug.js
@@ -5,13 +5,14 @@ OC.L10N.register(
"Personal" : "شەخسىي",
"Settings" : "تەڭشەكلەر",
"Users" : "ئىشلەتكۈچىلەر",
- "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
"today" : "بۈگۈن",
"yesterday" : "تۈنۈگۈن",
- "_%n day go_::_%n days ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
"_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"A valid username must be provided" : "چوقۇم ئىناۋەتلىك ئىشلەتكۈچى ئىسمىدىن بىرنى تەمىنلەش كېرەك",
"A valid password must be provided" : "چوقۇم ئىناۋەتلىك ئىم تەمىنلەش كېرەك"
},
diff --git a/lib/l10n/ug.json b/lib/l10n/ug.json
index 89719afc30a..b73fb7e1b35 100644
--- a/lib/l10n/ug.json
+++ b/lib/l10n/ug.json
@@ -3,13 +3,14 @@
"Personal" : "شەخسىي",
"Settings" : "تەڭشەكلەر",
"Users" : "ئىشلەتكۈچىلەر",
- "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
- "_%n minute ago_::_%n minutes ago_" : [""],
- "_%n hour ago_::_%n hours ago_" : [""],
"today" : "بۈگۈن",
"yesterday" : "تۈنۈگۈن",
- "_%n day go_::_%n days ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
"_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : [""],
+ "_%n minute ago_::_%n minutes ago_" : [""],
+ "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"A valid username must be provided" : "چوقۇم ئىناۋەتلىك ئىشلەتكۈچى ئىسمىدىن بىرنى تەمىنلەش كېرەك",
"A valid password must be provided" : "چوقۇم ئىناۋەتلىك ئىم تەمىنلەش كېرەك"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js
index 6e742fc0b98..aecbc8327db 100644
--- a/lib/l10n/uk.js
+++ b/lib/l10n/uk.js
@@ -17,6 +17,18 @@ OC.L10N.register(
"No app name specified" : "Не вказано ім'я додатку",
"Unknown filetype" : "Невідомий тип файлу",
"Invalid image" : "Невірне зображення",
+ "today" : "сьогодні",
+ "yesterday" : "вчора",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "минулого місяця",
+ "_%n month ago_::_%n months ago_" : ["","","%n місяців тому"],
+ "last year" : "минулого року",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","%n годин тому"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","%n хвилин тому"],
+ "seconds ago" : "секунди тому",
+ "Database Error" : "Помилка бази даних",
+ "Please contact your system administrator." : "Будь ласка, зверніться до системного адміністратора.",
"web services under your control" : "підконтрольні Вам веб-сервіси",
"App directory already exists" : "Тека додатку вже існує",
"Can't create app folder. Please fix permissions. %s" : "Неможливо створити теку додатку. Будь ласка, виправте права доступу. %s",
@@ -65,17 +77,14 @@ OC.L10N.register(
"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, оскільки публічний доступ через посилання заборонений",
"Could not find category \"%s\"" : "Не вдалося знайти категорію \"%s\"",
- "seconds ago" : "секунди тому",
- "_%n minute ago_::_%n minutes ago_" : ["","","%n хвилин тому"],
- "_%n hour ago_::_%n hours ago_" : ["","","%n годин тому"],
- "today" : "сьогодні",
- "yesterday" : "вчора",
- "_%n day go_::_%n days ago_" : ["","","%n днів тому"],
- "last month" : "минулого місяця",
- "_%n month ago_::_%n months ago_" : ["","","%n місяців тому"],
- "last year" : "минулого року",
- "years ago" : "роки тому",
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
- "A valid password must be provided" : "Потрібно задати вірний пароль"
+ "A valid password must be provided" : "Потрібно задати вірний пароль",
+ "The username is already being used" : "Ім'я користувача вже використовується",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Не встановлено драйвер бази даних (sqlite, mysql, or postgresql).",
+ "Cannot write into \"config\" directory" : "Не можу писати у теку \"config\"",
+ "Cannot write into \"apps\" directory" : "Не можу писати у теку \"apps\"",
+ "Please ask your server administrator to install the module." : "Будь ласка, зверніться до адміністратора, щоб встановити модуль.",
+ "PHP module %s not installed." : "%s модуль PHP не встановлено.",
+ "Please ask your server administrator to restart the web server." : "Будь ласка, зверніться до адміністратора, щоб перезавантажити сервер."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json
index a08191e745a..841e61216bc 100644
--- a/lib/l10n/uk.json
+++ b/lib/l10n/uk.json
@@ -15,6 +15,18 @@
"No app name specified" : "Не вказано ім'я додатку",
"Unknown filetype" : "Невідомий тип файлу",
"Invalid image" : "Невірне зображення",
+ "today" : "сьогодні",
+ "yesterday" : "вчора",
+ "_%n day ago_::_%n days ago_" : ["","",""],
+ "last month" : "минулого місяця",
+ "_%n month ago_::_%n months ago_" : ["","","%n місяців тому"],
+ "last year" : "минулого року",
+ "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n hour ago_::_%n hours ago_" : ["","","%n годин тому"],
+ "_%n minute ago_::_%n minutes ago_" : ["","","%n хвилин тому"],
+ "seconds ago" : "секунди тому",
+ "Database Error" : "Помилка бази даних",
+ "Please contact your system administrator." : "Будь ласка, зверніться до системного адміністратора.",
"web services under your control" : "підконтрольні Вам веб-сервіси",
"App directory already exists" : "Тека додатку вже існує",
"Can't create app folder. Please fix permissions. %s" : "Неможливо створити теку додатку. Будь ласка, виправте права доступу. %s",
@@ -63,17 +75,14 @@
"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, оскільки публічний доступ через посилання заборонений",
"Could not find category \"%s\"" : "Не вдалося знайти категорію \"%s\"",
- "seconds ago" : "секунди тому",
- "_%n minute ago_::_%n minutes ago_" : ["","","%n хвилин тому"],
- "_%n hour ago_::_%n hours ago_" : ["","","%n годин тому"],
- "today" : "сьогодні",
- "yesterday" : "вчора",
- "_%n day go_::_%n days ago_" : ["","","%n днів тому"],
- "last month" : "минулого місяця",
- "_%n month ago_::_%n months ago_" : ["","","%n місяців тому"],
- "last year" : "минулого року",
- "years ago" : "роки тому",
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
- "A valid password must be provided" : "Потрібно задати вірний пароль"
+ "A valid password must be provided" : "Потрібно задати вірний пароль",
+ "The username is already being used" : "Ім'я користувача вже використовується",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Не встановлено драйвер бази даних (sqlite, mysql, or postgresql).",
+ "Cannot write into \"config\" directory" : "Не можу писати у теку \"config\"",
+ "Cannot write into \"apps\" directory" : "Не можу писати у теку \"apps\"",
+ "Please ask your server administrator to install the module." : "Будь ласка, зверніться до адміністратора, щоб встановити модуль.",
+ "PHP module %s not installed." : "%s модуль PHP не встановлено.",
+ "Please ask your server administrator to restart the web server." : "Будь ласка, зверніться до адміністратора, щоб перезавантажити сервер."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/ur.php b/lib/l10n/ur.php
deleted file mode 100644
index 15f78e0bce6..00000000000
--- a/lib/l10n/ur.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
-"_%n day go_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/ur_PK.js b/lib/l10n/ur_PK.js
index 266e0b11135..d02b480fd13 100644
--- a/lib/l10n/ur_PK.js
+++ b/lib/l10n/ur_PK.js
@@ -8,16 +8,16 @@ OC.L10N.register(
"Admin" : "ایڈمن",
"Unknown filetype" : "غیر معرروف قسم کی فائل",
"Invalid image" : "غلط تصویر",
- "web services under your control" : "آپ کے اختیار میں ویب سروسیز",
- "seconds ago" : "سیکنڈز پہلے",
- "_%n minute ago_::_%n minutes ago_" : ["","%n منٹس پہلے"],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "آج",
"yesterday" : "کل",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "پچھلے مہنیے",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "پچھلے سال",
- "years ago" : "سالوں پہلے"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n منٹس پہلے"],
+ "seconds ago" : "سیکنڈز پہلے",
+ "web services under your control" : "آپ کے اختیار میں ویب سروسیز"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ur_PK.json b/lib/l10n/ur_PK.json
index f00429f3432..bbe6e221b2a 100644
--- a/lib/l10n/ur_PK.json
+++ b/lib/l10n/ur_PK.json
@@ -6,16 +6,16 @@
"Admin" : "ایڈمن",
"Unknown filetype" : "غیر معرروف قسم کی فائل",
"Invalid image" : "غلط تصویر",
- "web services under your control" : "آپ کے اختیار میں ویب سروسیز",
- "seconds ago" : "سیکنڈز پہلے",
- "_%n minute ago_::_%n minutes ago_" : ["","%n منٹس پہلے"],
- "_%n hour ago_::_%n hours ago_" : ["",""],
"today" : "آج",
"yesterday" : "کل",
- "_%n day go_::_%n days ago_" : ["",""],
+ "_%n day ago_::_%n days ago_" : ["",""],
"last month" : "پچھلے مہنیے",
"_%n month ago_::_%n months ago_" : ["",""],
"last year" : "پچھلے سال",
- "years ago" : "سالوں پہلے"
+ "_%n year ago_::_%n years ago_" : ["",""],
+ "_%n hour ago_::_%n hours ago_" : ["",""],
+ "_%n minute ago_::_%n minutes ago_" : ["","%n منٹس پہلے"],
+ "seconds ago" : "سیکنڈز پہلے",
+ "web services under your control" : "آپ کے اختیار میں ویب سروسیز"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/uz.js b/lib/l10n/uz.js
index 0f4a002019e..784e8271ef3 100644
--- a/lib/l10n/uz.js
+++ b/lib/l10n/uz.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"lib",
{
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""]
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/uz.json b/lib/l10n/uz.json
index 4a03cf5047e..3a3512d508d 100644
--- a/lib/l10n/uz.json
+++ b/lib/l10n/uz.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n minute ago_::_%n minutes ago_" : [""],
+ "_%n day ago_::_%n days ago_" : [""],
+ "_%n month ago_::_%n months ago_" : [""],
+ "_%n year ago_::_%n years ago_" : [""],
"_%n hour ago_::_%n hours ago_" : [""],
- "_%n day go_::_%n days ago_" : [""],
- "_%n month ago_::_%n months ago_" : [""]
+ "_%n minute ago_::_%n minutes ago_" : [""]
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/vi.js b/lib/l10n/vi.js
index 7cb2deb0629..a7e68528166 100644
--- a/lib/l10n/vi.js
+++ b/lib/l10n/vi.js
@@ -8,21 +8,21 @@ OC.L10N.register(
"Admin" : "Quản trị",
"Unknown filetype" : "Không biết kiểu tập tin",
"Invalid image" : "Hình ảnh không hợp lệ",
- "web services under your control" : "dịch vụ web dưới sự kiểm soát của bạn",
- "Application is not enabled" : "Ứng dụng không được BẬT",
- "Authentication error" : "Lỗi xác thực",
- "Token expired. Please reload page." : "Mã Token đã hết hạn. Hãy tải lại trang.",
- "%s shared »%s« with you" : "%s đã chia sẻ »%s« với bạn",
- "Could not find category \"%s\"" : "không thể tìm thấy mục \"%s\"",
- "seconds ago" : "vài giây trước",
- "_%n minute ago_::_%n minutes ago_" : ["%n phút trước"],
- "_%n hour ago_::_%n hours ago_" : ["%n giờ trước"],
"today" : "hôm nay",
"yesterday" : "hôm qua",
- "_%n day go_::_%n days ago_" : ["%n ngày trước"],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "tháng trước",
"_%n month ago_::_%n months ago_" : ["%n tháng trước"],
"last year" : "năm trước",
- "years ago" : "năm trước"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n giờ trước"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n phút trước"],
+ "seconds ago" : "vài giây trước",
+ "web services under your control" : "dịch vụ web dưới sự kiểm soát của bạn",
+ "Application is not enabled" : "Ứng dụng không được BẬT",
+ "Authentication error" : "Lỗi xác thực",
+ "Token expired. Please reload page." : "Mã Token đã hết hạn. Hãy tải lại trang.",
+ "%s shared »%s« with you" : "%s đã chia sẻ »%s« với bạn",
+ "Could not find category \"%s\"" : "không thể tìm thấy mục \"%s\""
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/vi.json b/lib/l10n/vi.json
index 434c1b8a67b..a7a29de350a 100644
--- a/lib/l10n/vi.json
+++ b/lib/l10n/vi.json
@@ -6,21 +6,21 @@
"Admin" : "Quản trị",
"Unknown filetype" : "Không biết kiểu tập tin",
"Invalid image" : "Hình ảnh không hợp lệ",
- "web services under your control" : "dịch vụ web dưới sự kiểm soát của bạn",
- "Application is not enabled" : "Ứng dụng không được BẬT",
- "Authentication error" : "Lỗi xác thực",
- "Token expired. Please reload page." : "Mã Token đã hết hạn. Hãy tải lại trang.",
- "%s shared »%s« with you" : "%s đã chia sẻ »%s« với bạn",
- "Could not find category \"%s\"" : "không thể tìm thấy mục \"%s\"",
- "seconds ago" : "vài giây trước",
- "_%n minute ago_::_%n minutes ago_" : ["%n phút trước"],
- "_%n hour ago_::_%n hours ago_" : ["%n giờ trước"],
"today" : "hôm nay",
"yesterday" : "hôm qua",
- "_%n day go_::_%n days ago_" : ["%n ngày trước"],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "tháng trước",
"_%n month ago_::_%n months ago_" : ["%n tháng trước"],
"last year" : "năm trước",
- "years ago" : "năm trước"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n giờ trước"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n phút trước"],
+ "seconds ago" : "vài giây trước",
+ "web services under your control" : "dịch vụ web dưới sự kiểm soát của bạn",
+ "Application is not enabled" : "Ứng dụng không được BẬT",
+ "Authentication error" : "Lỗi xác thực",
+ "Token expired. Please reload page." : "Mã Token đã hết hạn. Hãy tải lại trang.",
+ "%s shared »%s« with you" : "%s đã chia sẻ »%s« với bạn",
+ "Could not find category \"%s\"" : "không thể tìm thấy mục \"%s\""
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index 54d9afc315b..874327fc7d9 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Cannot write into \"config\" directory!" : "无法写入“config”目录!",
"See %s" : "查看 %s",
+ "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Help" : "帮助",
"Personal" : "个人",
"Settings" : "设置",
@@ -11,6 +12,16 @@ OC.L10N.register(
"No app name specified" : "没有指定的 App 名称",
"Unknown filetype" : "未知的文件类型",
"Invalid image" : "无效的图像",
+ "today" : "今天",
+ "yesterday" : "昨天",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "上月",
+ "_%n month ago_::_%n months ago_" : ["%n 月前"],
+ "last year" : "去年",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
+ "seconds ago" : "秒前",
"web services under your control" : "您控制的网络服务",
"App directory already exists" : "应用程序目录已存在",
"Can't create app folder. Please fix permissions. %s" : "无法创建应用程序文件夹。请修正权限。%s",
@@ -68,16 +79,6 @@ OC.L10N.register(
"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\"",
- "seconds ago" : "秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
- "today" : "今天",
- "yesterday" : "昨天",
- "_%n day go_::_%n days ago_" : ["%n 天前"],
- "last month" : "上月",
- "_%n month ago_::_%n months ago_" : ["%n 月前"],
- "last year" : "去年",
- "years ago" : "年前",
"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" : "必须提供合法的用户名",
"A valid password must be provided" : "必须提供合法的密码",
@@ -89,12 +90,7 @@ OC.L10N.register(
"Setting locale to %s failed" : "设置语言为 %s 失败",
"Please ask your server administrator to install the module." : "请联系服务器管理员安装模块。",
"PHP module %s not installed." : "PHP %s 模块未安装。",
- "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "请联系服务器管理员升级 PHP 到最新的版本。ownCloud 和 PHP 社区已经不再支持此版本的 PHP。",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode 已经启用,ownCloud 需要 Safe Mode 停用以正常工作。",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode 已经被废弃并且应当被停用。请联系服务器管理员在 php.ini 或您的服务器设置中停用 Safe Mode。",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes 已经启用,ownCloud 需要 Magic Quotes 停用以正常工作。",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes 已经被废弃并且应当被停用。请联系服务器管理员在 php.ini 或您的服务器设置中停用 Magic Quotes。",
"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",
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index 3168f94af58..d51c420d55c 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -1,6 +1,7 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "无法写入“config”目录!",
"See %s" : "查看 %s",
+ "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Help" : "帮助",
"Personal" : "个人",
"Settings" : "设置",
@@ -9,6 +10,16 @@
"No app name specified" : "没有指定的 App 名称",
"Unknown filetype" : "未知的文件类型",
"Invalid image" : "无效的图像",
+ "today" : "今天",
+ "yesterday" : "昨天",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "上月",
+ "_%n month ago_::_%n months ago_" : ["%n 月前"],
+ "last year" : "去年",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
+ "seconds ago" : "秒前",
"web services under your control" : "您控制的网络服务",
"App directory already exists" : "应用程序目录已存在",
"Can't create app folder. Please fix permissions. %s" : "无法创建应用程序文件夹。请修正权限。%s",
@@ -66,16 +77,6 @@
"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\"",
- "seconds ago" : "秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
- "today" : "今天",
- "yesterday" : "昨天",
- "_%n day go_::_%n days ago_" : ["%n 天前"],
- "last month" : "上月",
- "_%n month ago_::_%n months ago_" : ["%n 月前"],
- "last year" : "去年",
- "years ago" : "年前",
"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" : "必须提供合法的用户名",
"A valid password must be provided" : "必须提供合法的密码",
@@ -87,12 +88,7 @@
"Setting locale to %s failed" : "设置语言为 %s 失败",
"Please ask your server administrator to install the module." : "请联系服务器管理员安装模块。",
"PHP module %s not installed." : "PHP %s 模块未安装。",
- "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "请联系服务器管理员升级 PHP 到最新的版本。ownCloud 和 PHP 社区已经不再支持此版本的 PHP。",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode 已经启用,ownCloud 需要 Safe Mode 停用以正常工作。",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode 已经被废弃并且应当被停用。请联系服务器管理员在 php.ini 或您的服务器设置中停用 Safe Mode。",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes 已经启用,ownCloud 需要 Magic Quotes 停用以正常工作。",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes 已经被废弃并且应当被停用。请联系服务器管理员在 php.ini 或您的服务器设置中停用 Magic Quotes。",
"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",
diff --git a/lib/l10n/zh_HK.js b/lib/l10n/zh_HK.js
index 7cef6525bc2..1fa04277511 100644
--- a/lib/l10n/zh_HK.js
+++ b/lib/l10n/zh_HK.js
@@ -6,15 +6,16 @@ OC.L10N.register(
"Settings" : "設定",
"Users" : "用戶",
"Admin" : "管理",
- "seconds ago" : "秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
+ "Recommended" : "建議",
"today" : "今日",
"yesterday" : "昨日",
- "_%n day go_::_%n days ago_" : ["%n 日前"],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "前一月",
"_%n month ago_::_%n months ago_" : ["%n 月前"],
"last year" : "上年",
- "years ago" : "年前"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
+ "seconds ago" : "秒前"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_HK.json b/lib/l10n/zh_HK.json
index 856b288a6b9..3ad83045700 100644
--- a/lib/l10n/zh_HK.json
+++ b/lib/l10n/zh_HK.json
@@ -4,15 +4,16 @@
"Settings" : "設定",
"Users" : "用戶",
"Admin" : "管理",
- "seconds ago" : "秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
+ "Recommended" : "建議",
"today" : "今日",
"yesterday" : "昨日",
- "_%n day go_::_%n days ago_" : ["%n 日前"],
+ "_%n day ago_::_%n days ago_" : [""],
"last month" : "前一月",
"_%n month ago_::_%n months ago_" : ["%n 月前"],
"last year" : "上年",
- "years ago" : "年前"
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
+ "seconds ago" : "秒前"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index ffb82213e7d..477fa6bda3a 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -7,15 +7,27 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "%s允許網頁伺服器寫入設定目錄%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 進行適當的修改",
+ "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Help" : "說明",
"Personal" : "個人",
"Settings" : "設定",
"Users" : "使用者",
"Admin" : "管理",
+ "Recommended" : "建議",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "無法安裝應用程式 %s 因為它和此版本的 ownCloud 不相容。",
"No app name specified" : "沒有指定應用程式名稱",
"Unknown filetype" : "未知的檔案類型",
"Invalid image" : "無效的圖片",
+ "today" : "今天",
+ "yesterday" : "昨天",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "上個月",
+ "_%n month ago_::_%n months ago_" : ["%n 個月前"],
+ "last year" : "去年",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
+ "seconds ago" : "幾秒前",
"web services under your control" : "由您控制的網路服務",
"App directory already exists" : "應用程式目錄已經存在",
"Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s",
@@ -77,16 +89,6 @@ OC.L10N.register(
"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\"",
- "seconds ago" : "幾秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
- "today" : "今天",
- "yesterday" : "昨天",
- "_%n day go_::_%n days ago_" : ["%n 天前"],
- "last month" : "上個月",
- "_%n month ago_::_%n months ago_" : ["%n 個月前"],
- "last year" : "去年",
- "years ago" : "幾年前",
"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" : "必須提供一個有效的用戶名",
"A valid password must be provided" : "一定要提供一個有效的密碼",
@@ -102,12 +104,7 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器",
"Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組",
"PHP module %s not installed." : "未安裝 PHP 模組 %s",
- "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "請詢問系統管理員將 PHP 升級至最新版,目前的 PHP 版本已經不再被 ownCloud 和 PHP 社群支援",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP 安全模式已經啟動,ownCloud 需要您將它關閉才能正常運作",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP 安全模式已經被棄用,並且在大多數狀況下無助於提升安全性,它應該被關閉。請詢問系統管理員將其在 php.ini 或網頁伺服器當中關閉。",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes 已經被啟用,ownCloud 需要您將其關閉以正常運作",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes 功能在大多數狀況下不會使用到,已經被上游棄用,因此它應該被停用。請詢問系統管理員將其在 php.ini 或網頁伺服器當中停用。",
"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",
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index 6c6b572dd50..685214cbc06 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -5,15 +5,27 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "%s允許網頁伺服器寫入設定目錄%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 進行適當的修改",
+ "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Help" : "說明",
"Personal" : "個人",
"Settings" : "設定",
"Users" : "使用者",
"Admin" : "管理",
+ "Recommended" : "建議",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "無法安裝應用程式 %s 因為它和此版本的 ownCloud 不相容。",
"No app name specified" : "沒有指定應用程式名稱",
"Unknown filetype" : "未知的檔案類型",
"Invalid image" : "無效的圖片",
+ "today" : "今天",
+ "yesterday" : "昨天",
+ "_%n day ago_::_%n days ago_" : [""],
+ "last month" : "上個月",
+ "_%n month ago_::_%n months ago_" : ["%n 個月前"],
+ "last year" : "去年",
+ "_%n year ago_::_%n years ago_" : [""],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
+ "seconds ago" : "幾秒前",
"web services under your control" : "由您控制的網路服務",
"App directory already exists" : "應用程式目錄已經存在",
"Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s",
@@ -75,16 +87,6 @@
"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\"",
- "seconds ago" : "幾秒前",
- "_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
- "_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
- "today" : "今天",
- "yesterday" : "昨天",
- "_%n day go_::_%n days ago_" : ["%n 天前"],
- "last month" : "上個月",
- "_%n month ago_::_%n months ago_" : ["%n 個月前"],
- "last year" : "去年",
- "years ago" : "幾年前",
"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" : "必須提供一個有效的用戶名",
"A valid password must be provided" : "一定要提供一個有效的密碼",
@@ -100,12 +102,7 @@
"Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器",
"Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組",
"PHP module %s not installed." : "未安裝 PHP 模組 %s",
- "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "請詢問系統管理員將 PHP 升級至最新版,目前的 PHP 版本已經不再被 ownCloud 和 PHP 社群支援",
- "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP 安全模式已經啟動,ownCloud 需要您將它關閉才能正常運作",
- "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP 安全模式已經被棄用,並且在大多數狀況下無助於提升安全性,它應該被關閉。請詢問系統管理員將其在 php.ini 或網頁伺服器當中關閉。",
- "Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes 已經被啟用,ownCloud 需要您將其關閉以正常運作",
- "Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Magic Quotes 功能在大多數狀況下不會使用到,已經被上游棄用,因此它應該被停用。請詢問系統管理員將其在 php.ini 或網頁伺服器當中停用。",
"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",
diff --git a/lib/private/activitymanager.php b/lib/private/activitymanager.php
index f31b121c8e8..70bd227b417 100644
--- a/lib/private/activitymanager.php
+++ b/lib/private/activitymanager.php
@@ -168,6 +168,25 @@ class ActivityManager implements IManager {
}
/**
+ * @param string $app
+ * @param string $text
+ * @return array|false
+ */
+ function getSpecialParameterList($app, $text) {
+ foreach($this->extensions as $extension) {
+ $c = $extension();
+ if ($c instanceof IExtension) {
+ $specialParameter = $c->getSpecialParameterList($app, $text);
+ if (is_array($specialParameter)) {
+ return $specialParameter;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
* @param string $type
* @return string
*/
@@ -247,16 +266,28 @@ class ActivityManager implements IManager {
* @return array
*/
function getQueryForFilter($filter) {
+
+ $conditions = array();
+ $parameters = array();
+
foreach($this->extensions as $extension) {
$c = $extension();
if ($c instanceof IExtension) {
$result = $c->getQueryForFilter($filter);
if (is_array($result)) {
- return $result;
+ list($condition, $parameter) = $result;
+ if ($condition && is_array($parameter)) {
+ $conditions[] = $condition;
+ $parameters = array_merge($parameters, $parameter);
+ }
}
}
}
- return array(null, null);
+ if (empty($conditions)) {
+ return array(null, null);
+ }
+
+ return array(' and ((' . implode(') or (', $conditions) . '))', $parameters);
}
}
diff --git a/lib/private/allconfig.php b/lib/private/allconfig.php
index 7ebff7cf2db..d4b4ed6fb6a 100644
--- a/lib/private/allconfig.php
+++ b/lib/private/allconfig.php
@@ -8,11 +8,67 @@
*/
namespace OC;
+use OCP\IDBConnection;
+use OCP\PreConditionNotMetException;
/**
* Class to combine all the configuration options ownCloud offers
*/
class AllConfig implements \OCP\IConfig {
+ /** @var SystemConfig */
+ private $systemConfig;
+
+ /** @var IDBConnection */
+ private $connection;
+
+ /**
+ * 3 dimensional array with the following structure:
+ * [ $userId =>
+ * [ $appId =>
+ * [ $key => $value ]
+ * ]
+ * ]
+ *
+ * database table: preferences
+ *
+ * methods that use this:
+ * - setUserValue
+ * - getUserValue
+ * - getUserKeys
+ * - deleteUserValue
+ * - deleteAllUserValues
+ * - deleteAppFromAllUsers
+ *
+ * @var array $userCache
+ */
+ private $userCache = array();
+
+ /**
+ * @param SystemConfig $systemConfig
+ */
+ function __construct(SystemConfig $systemConfig) {
+ $this->systemConfig = $systemConfig;
+ }
+
+ /**
+ * TODO - FIXME This fixes an issue with base.php that cause cyclic
+ * dependencies, especially with autoconfig setup
+ *
+ * Replace this by properly injected database connection. Currently the
+ * base.php triggers the getDatabaseConnection too early which causes in
+ * autoconfig setup case a too early distributed database connection and
+ * the autoconfig then needs to reinit all already initialized dependencies
+ * that use the database connection.
+ *
+ * otherwise a SQLite database is created in the wrong directory
+ * because the database connection was created with an uninitialized config
+ */
+ private function fixDIInit() {
+ if($this->connection === null) {
+ $this->connection = \OC::$server->getDatabaseConnection();
+ }
+ }
+
/**
* Sets a new system wide value
*
@@ -20,7 +76,7 @@ class AllConfig implements \OCP\IConfig {
* @param mixed $value the value that should be stored
*/
public function setSystemValue($key, $value) {
- \OCP\Config::setSystemValue($key, $value);
+ $this->systemConfig->setValue($key, $value);
}
/**
@@ -31,7 +87,7 @@ class AllConfig implements \OCP\IConfig {
* @return mixed the value or $default
*/
public function getSystemValue($key, $default = '') {
- return \OCP\Config::getSystemValue($key, $default);
+ return $this->systemConfig->getValue($key, $default);
}
/**
@@ -40,7 +96,7 @@ class AllConfig implements \OCP\IConfig {
* @param string $key the key of the value, under which it was saved
*/
public function deleteSystemValue($key) {
- \OCP\Config::deleteSystemValue($key);
+ $this->systemConfig->deleteValue($key);
}
/**
@@ -61,7 +117,7 @@ class AllConfig implements \OCP\IConfig {
* @param string $value the value that should be stored
*/
public function setAppValue($appName, $key, $value) {
- \OCP\Config::setAppValue($appName, $key, $value);
+ \OC::$server->getAppConfig()->setValue($appName, $key, $value);
}
/**
@@ -73,7 +129,7 @@ class AllConfig implements \OCP\IConfig {
* @return string the saved value
*/
public function getAppValue($appName, $key, $default = '') {
- return \OCP\Config::getAppValue($appName, $key, $default);
+ return \OC::$server->getAppConfig()->getValue($appName, $key, $default);
}
/**
@@ -83,7 +139,16 @@ class AllConfig implements \OCP\IConfig {
* @param string $key the key of the value, under which it was saved
*/
public function deleteAppValue($appName, $key) {
- \OC_Appconfig::deleteKey($appName, $key);
+ \OC::$server->getAppConfig()->deleteKey($appName, $key);
+ }
+
+ /**
+ * Removes all keys in appconfig belonging to the app
+ *
+ * @param string $appName the appName the configs are stored under
+ */
+ public function deleteAppValues($appName) {
+ \OC::$server->getAppConfig()->deleteApp($appName);
}
@@ -94,13 +159,60 @@ class AllConfig implements \OCP\IConfig {
* @param string $appName the appName that we want to store the value under
* @param string $key the key under which the value is being stored
* @param string $value the value that you want to store
+ * @param string $preCondition only update if the config value was previously the value passed as $preCondition
+ * @throws \OCP\PreConditionNotMetException if a precondition is specified and is not met
*/
- public function setUserValue($userId, $appName, $key, $value) {
- \OCP\Config::setUserValue($userId, $appName, $key, $value);
+ public function setUserValue($userId, $appName, $key, $value, $preCondition = null) {
+ // TODO - FIXME
+ $this->fixDIInit();
+
+ // Check if the key does exist
+ $sql = 'SELECT `configvalue` FROM `*PREFIX*preferences` '.
+ 'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?';
+ $result = $this->connection->executeQuery($sql, array($userId, $appName, $key));
+ $oldValue = $result->fetchColumn();
+ $exists = $oldValue !== false;
+
+ if($oldValue === strval($value)) {
+ // no changes
+ return;
+ }
+
+ $data = array($value, $userId, $appName, $key);
+ if (!$exists && $preCondition === null) {
+ $sql = 'INSERT INTO `*PREFIX*preferences` (`configvalue`, `userid`, `appid`, `configkey`)'.
+ 'VALUES (?, ?, ?, ?)';
+ } elseif ($exists) {
+ $sql = 'UPDATE `*PREFIX*preferences` SET `configvalue` = ? '.
+ 'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? ';
+
+ if($preCondition !== null) {
+ if($this->getSystemValue('dbtype', 'sqlite') === 'oci') {
+ //oracle hack: need to explicitly cast CLOB to CHAR for comparison
+ $sql .= 'AND to_char(`configvalue`) = ?';
+ } else {
+ $sql .= 'AND `configvalue` = ?';
+ }
+ $data[] = $preCondition;
+ }
+ }
+ $affectedRows = $this->connection->executeUpdate($sql, $data);
+
+ // only add to the cache if we already loaded data for the user
+ if ($affectedRows > 0 && isset($this->userCache[$userId])) {
+ if (!isset($this->userCache[$userId][$appName])) {
+ $this->userCache[$userId][$appName] = array();
+ }
+ $this->userCache[$userId][$appName][$key] = $value;
+ }
+
+ if ($preCondition !== null && $affectedRows === 0) {
+ throw new PreConditionNotMetException;
+ }
}
/**
- * Shortcut for getting a user defined value
+ * Getting a user defined value
*
* @param string $userId the userId of the user that we want to store the value under
* @param string $appName the appName that we stored the value under
@@ -109,7 +221,12 @@ class AllConfig implements \OCP\IConfig {
* @return string
*/
public function getUserValue($userId, $appName, $key, $default = '') {
- return \OCP\Config::getUserValue($userId, $appName, $key, $default);
+ $data = $this->getUserValues($userId);
+ if (isset($data[$appName]) and isset($data[$appName][$key])) {
+ return $data[$appName][$key];
+ } else {
+ return $default;
+ }
}
/**
@@ -120,7 +237,12 @@ class AllConfig implements \OCP\IConfig {
* @return string[]
*/
public function getUserKeys($userId, $appName) {
- return \OC_Preferences::getKeys($userId, $appName);
+ $data = $this->getUserValues($userId);
+ if (isset($data[$appName])) {
+ return array_keys($data[$appName]);
+ } else {
+ return array();
+ }
}
/**
@@ -131,6 +253,153 @@ class AllConfig implements \OCP\IConfig {
* @param string $key the key under which the value is being stored
*/
public function deleteUserValue($userId, $appName, $key) {
- \OC_Preferences::deleteKey($userId, $appName, $key);
+ // TODO - FIXME
+ $this->fixDIInit();
+
+ $sql = 'DELETE FROM `*PREFIX*preferences` '.
+ 'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?';
+ $this->connection->executeUpdate($sql, array($userId, $appName, $key));
+
+ if (isset($this->userCache[$userId]) and isset($this->userCache[$userId][$appName])) {
+ unset($this->userCache[$userId][$appName][$key]);
+ }
+ }
+
+ /**
+ * Delete all user values
+ *
+ * @param string $userId the userId of the user that we want to remove all values from
+ */
+ public function deleteAllUserValues($userId) {
+ // TODO - FIXME
+ $this->fixDIInit();
+
+ $sql = 'DELETE FROM `*PREFIX*preferences` '.
+ 'WHERE `userid` = ?';
+ $this->connection->executeUpdate($sql, array($userId));
+
+ unset($this->userCache[$userId]);
+ }
+
+ /**
+ * Delete all user related values of one app
+ *
+ * @param string $appName the appName of the app that we want to remove all values from
+ */
+ public function deleteAppFromAllUsers($appName) {
+ // TODO - FIXME
+ $this->fixDIInit();
+
+ $sql = 'DELETE FROM `*PREFIX*preferences` '.
+ 'WHERE `appid` = ?';
+ $this->connection->executeUpdate($sql, array($appName));
+
+ foreach ($this->userCache as &$userCache) {
+ unset($userCache[$appName]);
+ }
+ }
+
+ /**
+ * Returns all user configs sorted by app of one user
+ *
+ * @param string $userId the user ID to get the app configs from
+ * @return array[] - 2 dimensional array with the following structure:
+ * [ $appId =>
+ * [ $key => $value ]
+ * ]
+ */
+ private function getUserValues($userId) {
+ // TODO - FIXME
+ $this->fixDIInit();
+
+ if (isset($this->userCache[$userId])) {
+ return $this->userCache[$userId];
+ }
+ $data = array();
+ $query = 'SELECT `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?';
+ $result = $this->connection->executeQuery($query, array($userId));
+ while ($row = $result->fetch()) {
+ $appId = $row['appid'];
+ if (!isset($data[$appId])) {
+ $data[$appId] = array();
+ }
+ $data[$appId][$row['configkey']] = $row['configvalue'];
+ }
+ $this->userCache[$userId] = $data;
+ return $data;
+ }
+
+ /**
+ * Fetches a mapped list of userId -> value, for a specified app and key and a list of user IDs.
+ *
+ * @param string $appName app to get the value for
+ * @param string $key the key to get the value for
+ * @param array $userIds the user IDs to fetch the values for
+ * @return array Mapped values: userId => value
+ */
+ public function getUserValueForUsers($appName, $key, $userIds) {
+ // TODO - FIXME
+ $this->fixDIInit();
+
+ if (empty($userIds) || !is_array($userIds)) {
+ return array();
+ }
+
+ $chunkedUsers = array_chunk($userIds, 50, true);
+ $placeholders50 = implode(',', array_fill(0, 50, '?'));
+
+ $userValues = array();
+ foreach ($chunkedUsers as $chunk) {
+ $queryParams = $chunk;
+ // create [$app, $key, $chunkedUsers]
+ array_unshift($queryParams, $key);
+ array_unshift($queryParams, $appName);
+
+ $placeholders = (sizeof($chunk) == 50) ? $placeholders50 : implode(',', array_fill(0, sizeof($chunk), '?'));
+
+ $query = 'SELECT `userid`, `configvalue` ' .
+ 'FROM `*PREFIX*preferences` ' .
+ 'WHERE `appid` = ? AND `configkey` = ? ' .
+ 'AND `userid` IN (' . $placeholders . ')';
+ $result = $this->connection->executeQuery($query, $queryParams);
+
+ while ($row = $result->fetch()) {
+ $userValues[$row['userid']] = $row['configvalue'];
+ }
+ }
+
+ return $userValues;
+ }
+
+ /**
+ * Determines the users that have the given value set for a specific app-key-pair
+ *
+ * @param string $appName the app to get the user for
+ * @param string $key the key to get the user for
+ * @param string $value the value to get the user for
+ * @return array of user IDs
+ */
+ public function getUsersForUserValue($appName, $key, $value) {
+ // TODO - FIXME
+ $this->fixDIInit();
+
+ $sql = 'SELECT `userid` FROM `*PREFIX*preferences` ' .
+ 'WHERE `appid` = ? AND `configkey` = ? ';
+
+ if($this->getSystemValue('dbtype', 'sqlite') === 'oci') {
+ //oracle hack: need to explicitly cast CLOB to CHAR for comparison
+ $sql .= 'AND to_char(`configvalue`) = ?';
+ } else {
+ $sql .= 'AND `configvalue` = ?';
+ }
+
+ $result = $this->connection->executeQuery($sql, array($appName, $key, $value));
+
+ $userIDs = array();
+ while ($row = $result->fetch()) {
+ $userIDs[] = $row['userid'];
+ }
+
+ return $userIDs;
}
}
diff --git a/lib/private/api.php b/lib/private/api.php
index f5576af2ad8..c58d2620684 100644
--- a/lib/private/api.php
+++ b/lib/private/api.php
@@ -47,6 +47,7 @@ class OC_API {
*/
protected static $actions = array();
private static $logoutRequired = false;
+ private static $isLoggedIn = false;
/**
* registers an api call
@@ -132,7 +133,7 @@ class OC_API {
* @return array|\OC_OCS_Result
*/
public static function mergeResponses($responses) {
- // Sort into shipped and thirdparty
+ // Sort into shipped and third-party
$shipped = array(
'succeeded' => array(),
'failed' => array(),
@@ -162,7 +163,7 @@ class OC_API {
if(!empty($shipped['failed'])) {
// Which shipped response do we use if they all failed?
// They may have failed for different reasons (different status codes)
- // Which reponse code should we return?
+ // Which response code should we return?
// Maybe any that are not OC_API::RESPOND_SERVER_ERROR
// Merge failed responses if more than one
$data = array();
@@ -269,30 +270,41 @@ class OC_API {
* http basic auth
* @return string|false (username, or false on failure)
*/
- private static function loginUser(){
+ private static function loginUser() {
+ if(self::$isLoggedIn === true) {
+ return \OC_User::getUser();
+ }
// reuse existing login
$loggedIn = OC_User::isLoggedIn();
- $ocsApiRequest = isset($_SERVER['HTTP_OCS_APIREQUEST']) ? $_SERVER['HTTP_OCS_APIREQUEST'] === 'true' : false;
- if ($loggedIn === true && $ocsApiRequest) {
+ if ($loggedIn === true) {
+ $ocsApiRequest = isset($_SERVER['HTTP_OCS_APIREQUEST']) ? $_SERVER['HTTP_OCS_APIREQUEST'] === 'true' : false;
+ if ($ocsApiRequest) {
- // initialize the user's filesystem
- \OC_Util::setUpFS(\OC_User::getUser());
+ // initialize the user's filesystem
+ \OC_Util::setUpFS(\OC_User::getUser());
+ self::$isLoggedIn = true;
- return OC_User::getUser();
+ return OC_User::getUser();
+ }
+ return false;
}
- // basic auth
- $authUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
- $authPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
- $return = OC_User::login($authUser, $authPw);
- if ($return === true) {
- self::$logoutRequired = true;
+ // basic auth - because OC_User::login will create a new session we shall only try to login
+ // if user and pass are set
+ if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) ) {
+ $authUser = $_SERVER['PHP_AUTH_USER'];
+ $authPw = $_SERVER['PHP_AUTH_PW'];
+ $return = OC_User::login($authUser, $authPw);
+ if ($return === true) {
+ self::$logoutRequired = true;
- // initialize the user's filesystem
- \OC_Util::setUpFS(\OC_User::getUser());
+ // initialize the user's filesystem
+ \OC_Util::setUpFS(\OC_User::getUser());
+ self::$isLoggedIn = true;
- return $authUser;
+ return \OC_User::getUser();
+ }
}
return false;
diff --git a/lib/private/app.php b/lib/private/app.php
index 73576088d15..ecdc8ca8320 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -25,6 +25,8 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
+use OC\App\DependencyAnalyzer;
+use OC\App\Platform;
/**
* This class manages the apps. It allows them to register and integrate in the
@@ -635,63 +637,10 @@ class OC_App {
}
$file = self::getAppPath($appId) . '/appinfo/info.xml';
}
- $data = array();
- if (!file_exists($file)) {
- return null;
- }
- $content = @file_get_contents($file);
- if (!$content) {
- return null;
- }
- $xml = new SimpleXMLElement($content);
- $data['info'] = array();
- $data['remote'] = array();
- $data['public'] = array();
- foreach ($xml->children() as $child) {
- /**
- * @var $child SimpleXMLElement
- */
- if ($child->getName() == 'remote') {
- foreach ($child->children() as $remote) {
- /**
- * @var $remote SimpleXMLElement
- */
- $data['remote'][$remote->getName()] = (string)$remote;
- }
- } elseif ($child->getName() == 'public') {
- foreach ($child->children() as $public) {
- /**
- * @var $public SimpleXMLElement
- */
- $data['public'][$public->getName()] = (string)$public;
- }
- } elseif ($child->getName() == 'types') {
- $data['types'] = array();
- foreach ($child->children() as $type) {
- /**
- * @var $type SimpleXMLElement
- */
- $data['types'][] = $type->getName();
- }
- } elseif ($child->getName() == 'description') {
- $xml = (string)$child->asXML();
- $data[$child->getName()] = substr($xml, 13, -14); //script <description> tags
- } elseif ($child->getName() == 'documentation') {
- foreach ($child as $subChild) {
- $url = (string) $subChild;
-
- // If it is not an absolute URL we assume it is a key
- // i.e. admin-ldap will get converted to go.php?to=admin-ldap
- if(!\OC::$server->getHTTPHelper()->isHTTPURL($url)) {
- $url = OC_Helper::linkToDocs($url);
- }
- $data["documentation"][$subChild->getName()] = $url;
- }
- } else {
- $data[$child->getName()] = (string)$child;
- }
- }
+ $parser = new \OC\App\InfoParser(\OC::$server->getHTTPHelper(), \OC::$server->getURLGenerator());
+ $data = $parser->parse($file);
+
self::$appInfo[$appId] = $data;
return $data;
@@ -862,7 +811,7 @@ class OC_App {
if(isset($info['shipped']) and ($info['shipped'] == 'true')) {
$info['internal'] = true;
- $info['internallabel'] = $l->t('Recommended');
+ $info['internallabel'] = (string)$l->t('Recommended');
$info['internalclass'] = 'recommendedapp';
$info['removable'] = false;
} else {
@@ -973,7 +922,7 @@ class OC_App {
$app1[$i]['score'] = $app['score'];
$app1[$i]['removable'] = false;
if ($app['label'] == 'recommended') {
- $app1[$i]['internallabel'] = $l->t('Recommended');
+ $app1[$i]['internallabel'] = (string)$l->t('Recommended');
$app1[$i]['internalclass'] = 'recommendedapp';
}
@@ -1135,6 +1084,7 @@ class OC_App {
*/
public static function installApp($app) {
$l = \OC::$server->getL10N('core');
+ $config = \OC::$server->getConfig();
$appData=OC_OCSClient::getApplication($app);
// check if app is a shipped app or not. OCS apps have an integer as id, shipped apps use a string
@@ -1159,13 +1109,25 @@ class OC_App {
array($info['name'])
)
);
- }else{
- OC_Appconfig::setValue( $app, 'enabled', 'yes' );
- if(isset($appData['id'])) {
- OC_Appconfig::setValue( $app, 'ocsid', $appData['id'] );
- }
- \OC_Hook::emit('OC_App', 'post_enable', array('app' => $app));
}
+
+ // check for required dependencies
+ $dependencyAnalyzer = new DependencyAnalyzer(new Platform($config), $l);
+ $missing = $dependencyAnalyzer->analyze($app);
+ if(!empty($missing)) {
+ $missingMsg = join(PHP_EOL, $missing);
+ throw new \Exception(
+ $l->t('App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s',
+ array($info['name'], $missingMsg)
+ )
+ );
+ }
+
+ $config->setAppValue($app, 'enabled', 'yes');
+ if(isset($appData['id'])) {
+ $config->setAppValue($app, 'ocsid', $appData['id'] );
+ }
+ \OC_Hook::emit('OC_App', 'post_enable', array('app' => $app));
}else{
throw new \Exception($l->t("No app name specified"));
}
@@ -1180,10 +1142,6 @@ class OC_App {
* @return bool
*/
public static function updateApp($appId) {
- if (file_exists(self::getAppPath($appId) . '/appinfo/preupdate.php')) {
- self::loadApp($appId, false);
- include self::getAppPath($appId) . '/appinfo/preupdate.php';
- }
if (file_exists(self::getAppPath($appId) . '/appinfo/database.xml')) {
OC_DB::updateDbFromStructure(self::getAppPath($appId) . '/appinfo/database.xml');
}
diff --git a/lib/private/app/appmanager.php b/lib/private/app/appmanager.php
new file mode 100644
index 00000000000..6d9aa0bfe37
--- /dev/null
+++ b/lib/private/app/appmanager.php
@@ -0,0 +1,138 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\App;
+
+use OCP\App\IAppManager;
+use OCP\IAppConfig;
+use OCP\IGroupManager;
+use OCP\IUserSession;
+
+class AppManager implements IAppManager {
+ /**
+ * @var \OCP\IUserSession
+ */
+ private $userSession;
+
+ /**
+ * @var \OCP\IAppConfig
+ */
+ private $appConfig;
+
+ /**
+ * @var \OCP\IGroupManager
+ */
+ private $groupManager;
+
+ /**
+ * @var string[] $appId => $enabled
+ */
+ private $installedAppsCache;
+
+ /**
+ * @param \OCP\IUserSession $userSession
+ * @param \OCP\IAppConfig $appConfig
+ * @param \OCP\IGroupManager $groupManager
+ */
+ public function __construct(IUserSession $userSession, IAppConfig $appConfig, IGroupManager $groupManager) {
+ $this->userSession = $userSession;
+ $this->appConfig = $appConfig;
+ $this->groupManager = $groupManager;
+ }
+
+ /**
+ * @return string[] $appId => $enabled
+ */
+ private function getInstalledApps() {
+ if (!$this->installedAppsCache) {
+ $values = $this->appConfig->getValues(false, 'enabled');
+ $this->installedAppsCache = array_filter($values, function ($value) {
+ return $value !== 'no';
+ });
+ ksort($this->installedAppsCache);
+ }
+ return $this->installedAppsCache;
+ }
+
+ /**
+ * Check if an app is enabled for user
+ *
+ * @param string $appId
+ * @param \OCP\IUser $user (optional) if not defined, the currently logged in user will be used
+ * @return bool
+ */
+ public function isEnabledForUser($appId, $user = null) {
+ if (is_null($user)) {
+ $user = $this->userSession->getUser();
+ }
+ $installedApps = $this->getInstalledApps();
+ if (isset($installedApps[$appId])) {
+ $enabled = $installedApps[$appId];
+ if ($enabled === 'yes') {
+ return true;
+ } elseif (is_null($user)) {
+ return false;
+ } else {
+ $groupIds = json_decode($enabled);
+ $userGroups = $this->groupManager->getUserGroupIds($user);
+ foreach ($userGroups as $groupId) {
+ if (array_search($groupId, $groupIds) !== false) {
+ return true;
+ }
+ }
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Check if an app is installed in the instance
+ *
+ * @param string $appId
+ * @return bool
+ */
+ public function isInstalled($appId) {
+ $installedApps = $this->getInstalledApps();
+ return isset($installedApps[$appId]);
+ }
+
+ /**
+ * Enable an app for every user
+ *
+ * @param string $appId
+ */
+ public function enableApp($appId) {
+ $this->appConfig->setValue($appId, 'enabled', 'yes');
+ }
+
+ /**
+ * Enable an app only for specific groups
+ *
+ * @param string $appId
+ * @param \OCP\IGroup[] $groups
+ */
+ public function enableAppForGroups($appId, $groups) {
+ $groupIds = array_map(function ($group) {
+ /** @var \OCP\IGroup $group */
+ return $group->getGID();
+ }, $groups);
+ $this->appConfig->setValue($appId, 'enabled', json_encode($groupIds));
+ }
+
+ /**
+ * Disable an app for every user
+ *
+ * @param string $appId
+ */
+ public function disableApp($appId) {
+ $this->appConfig->setValue($appId, 'enabled', 'no');
+ }
+}
diff --git a/lib/private/app/dependencyanalyzer.php b/lib/private/app/dependencyanalyzer.php
new file mode 100644
index 00000000000..ae40e8523fc
--- /dev/null
+++ b/lib/private/app/dependencyanalyzer.php
@@ -0,0 +1,215 @@
+<?php
+/**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\App;
+
+use OCP\IL10N;
+
+class DependencyAnalyzer {
+
+ /** @var Platform */
+ private $platform;
+
+ /** @var \OCP\IL10N */
+ private $l;
+
+ /**
+ * @param Platform $platform
+ * @param \OCP\IL10N $l
+ */
+ function __construct(Platform $platform, IL10N $l) {
+ $this->platform = $platform;
+ $this->l = $l;
+ }
+
+ /**
+ * @param array $app
+ * @returns array of missing dependencies
+ */
+ public function analyze($app) {
+ $this->appInfo = $app;
+ if (isset($app['dependencies'])) {
+ $dependencies = $app['dependencies'];
+ } else {
+ $dependencies = [];
+ }
+
+ return array_merge(
+ $this->analyzePhpVersion($dependencies),
+ $this->analyzeDatabases($dependencies),
+ $this->analyzeCommands($dependencies),
+ $this->analyzeLibraries($dependencies),
+ $this->analyzeOS($dependencies),
+ $this->analyzeOC($dependencies, $app));
+ }
+
+ private function analyzePhpVersion($dependencies) {
+ $missing = [];
+ if (isset($dependencies['php']['@attributes']['min-version'])) {
+ $minVersion = $dependencies['php']['@attributes']['min-version'];
+ if (version_compare($this->platform->getPhpVersion(), $minVersion, '<')) {
+ $missing[] = (string)$this->l->t('PHP %s or higher is required.', $minVersion);
+ }
+ }
+ if (isset($dependencies['php']['@attributes']['max-version'])) {
+ $maxVersion = $dependencies['php']['@attributes']['max-version'];
+ if (version_compare($this->platform->getPhpVersion(), $maxVersion, '>')) {
+ $missing[] = (string)$this->l->t('PHP with a version lower than %s is required.', $maxVersion);
+ }
+ }
+ return $missing;
+ }
+
+ private function analyzeDatabases($dependencies) {
+ $missing = [];
+ if (!isset($dependencies['database'])) {
+ return $missing;
+ }
+
+ $supportedDatabases = $dependencies['database'];
+ if (empty($supportedDatabases)) {
+ return $missing;
+ }
+ if (!is_array($supportedDatabases)) {
+ $supportedDatabases = array($supportedDatabases);
+ }
+ $supportedDatabases = array_map(function ($db) {
+ return $this->getValue($db);
+ }, $supportedDatabases);
+ $currentDatabase = $this->platform->getDatabase();
+ if (!in_array($currentDatabase, $supportedDatabases)) {
+ $missing[] = (string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases));
+ }
+ return $missing;
+ }
+
+ private function analyzeCommands($dependencies) {
+ $missing = [];
+ if (!isset($dependencies['command'])) {
+ return $missing;
+ }
+
+ $commands = $dependencies['command'];
+ if (!is_array($commands)) {
+ $commands = array($commands);
+ }
+ $os = $this->platform->getOS();
+ foreach ($commands as $command) {
+ if (isset($command['@attributes']['os']) && $command['@attributes']['os'] !== $os) {
+ continue;
+ }
+ $commandName = $this->getValue($command);
+ if (!$this->platform->isCommandKnown($commandName)) {
+ $missing[] = (string)$this->l->t('The command line tool %s could not be found', $commandName);
+ }
+ }
+ return $missing;
+ }
+
+ private function analyzeLibraries($dependencies) {
+ $missing = [];
+ if (!isset($dependencies['lib'])) {
+ return $missing;
+ }
+
+ $libs = $dependencies['lib'];
+ if (!is_array($libs)) {
+ $libs = array($libs);
+ }
+ foreach ($libs as $lib) {
+ $libName = $this->getValue($lib);
+ $libVersion = $this->platform->getLibraryVersion($libName);
+ if (is_null($libVersion)) {
+ $missing[] = (string)$this->l->t('The library %s is not available.', $libName);
+ continue;
+ }
+
+ if (is_array($lib)) {
+ if (isset($lib['@attributes']['min-version'])) {
+ $minVersion = $lib['@attributes']['min-version'];
+ if (version_compare($libVersion, $minVersion, '<')) {
+ $missing[] = (string)$this->l->t('Library %s with a version higher than %s is required - available version %s.',
+ array($libName, $minVersion, $libVersion));
+ }
+ }
+ if (isset($lib['@attributes']['max-version'])) {
+ $maxVersion = $lib['@attributes']['max-version'];
+ if (version_compare($libVersion, $maxVersion, '>')) {
+ $missing[] = (string)$this->l->t('Library %s with a version lower than %s is required - available version %s.',
+ array($libName, $maxVersion, $libVersion));
+ }
+ }
+ }
+ }
+ return $missing;
+ }
+
+ private function analyzeOS($dependencies) {
+ $missing = [];
+ if (!isset($dependencies['os'])) {
+ return $missing;
+ }
+
+ $oss = $dependencies['os'];
+ if (empty($oss)) {
+ return $missing;
+ }
+ if (is_array($oss)) {
+ $oss = array_map(function ($os) {
+ return $this->getValue($os);
+ }, $oss);
+ } else {
+ $oss = array($oss);
+ }
+ $currentOS = $this->platform->getOS();
+ if (!in_array($currentOS, $oss)) {
+ $missing[] = (string)$this->l->t('Following platforms are supported: %s', join(', ', $oss));
+ }
+ return $missing;
+ }
+
+ private function analyzeOC($dependencies, $appInfo) {
+ $missing = [];
+ $minVersion = null;
+ if (isset($dependencies['owncloud']['@attributes']['min-version'])) {
+ $minVersion = $dependencies['owncloud']['@attributes']['min-version'];
+ } elseif (isset($appInfo['requiremin'])) {
+ $minVersion = $appInfo['requiremin'];
+ }
+ $maxVersion = null;
+ if (isset($dependencies['owncloud']['@attributes']['max-version'])) {
+ $maxVersion = $dependencies['owncloud']['@attributes']['max-version'];
+ } elseif (isset($appInfo['requiremax'])) {
+ $maxVersion = $appInfo['requiremax'];
+ }
+
+ if (!is_null($minVersion)) {
+ if (version_compare($this->platform->getOcVersion(), $minVersion, '<')) {
+ $missing[] = (string)$this->l->t('ownCloud %s or higher is required.', $minVersion);
+ }
+ }
+ if (!is_null($maxVersion)) {
+ if (version_compare($this->platform->getOcVersion(), $maxVersion, '>')) {
+ $missing[] = (string)$this->l->t('ownCloud with a version lower than %s is required.', $maxVersion);
+ }
+ }
+ return $missing;
+ }
+
+ /**
+ * @param $element
+ * @return mixed
+ */
+ private function getValue($element) {
+ if (isset($element['@value']))
+ return $element['@value'];
+ return (string)$element;
+ }
+}
diff --git a/lib/private/app/infoparser.php b/lib/private/app/infoparser.php
new file mode 100644
index 00000000000..0603a7a7b7f
--- /dev/null
+++ b/lib/private/app/infoparser.php
@@ -0,0 +1,149 @@
+<?php
+ /**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\App;
+
+use OCP\IURLGenerator;
+
+class InfoParser {
+ /**
+ * @var \OC\HTTPHelper
+ */
+ private $httpHelper;
+
+ /**
+ * @var IURLGenerator
+ */
+ private $urlGenerator;
+
+ /**
+ * @param \OC\HTTPHelper $httpHelper
+ * @param IURLGenerator $urlGenerator
+ */
+ public function __construct(\OC\HTTPHelper $httpHelper, IURLGenerator $urlGenerator) {
+ $this->httpHelper = $httpHelper;
+ $this->urlGenerator = $urlGenerator;
+ }
+
+ /**
+ * @param string $file the xml file to be loaded
+ * @return null|array where null is an indicator for an error
+ */
+ public function parse($file) {
+ if (!file_exists($file)) {
+ return null;
+ }
+
+ libxml_use_internal_errors(true);
+ $loadEntities = libxml_disable_entity_loader(false);
+ $xml = simplexml_load_file($file);
+ libxml_disable_entity_loader($loadEntities);
+ if ($xml == false) {
+ return null;
+ }
+ $array = $this->xmlToArray($xml, false);
+ if (is_null($array)) {
+ return null;
+ }
+ if (!array_key_exists('info', $array)) {
+ $array['info'] = array();
+ }
+ if (!array_key_exists('remote', $array)) {
+ $array['remote'] = array();
+ }
+ if (!array_key_exists('public', $array)) {
+ $array['public'] = array();
+ }
+ if (!array_key_exists('types', $array)) {
+ $array['types'] = array();
+ }
+
+ if (array_key_exists('documentation', $array) && is_array($array['documentation'])) {
+ foreach ($array['documentation'] as $key => $url) {
+ // If it is not an absolute URL we assume it is a key
+ // i.e. admin-ldap will get converted to go.php?to=admin-ldap
+ if (!$this->httpHelper->isHTTPURL($url)) {
+ $url = $this->urlGenerator->linkToDocs($url);
+ }
+
+ $array['documentation'][$key] = $url;
+ }
+ }
+ if (array_key_exists('types', $array)) {
+ if (is_array($array['types'])) {
+ foreach ($array['types'] as $type => $v) {
+ unset($array['types'][$type]);
+ if (is_string($type)) {
+ $array['types'][] = $type;
+ }
+ }
+ } else {
+ $array['types'] = array();
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * @param \SimpleXMLElement $xml
+ * @return array
+ */
+ function xmlToArray($xml) {
+ if (!$xml->children()) {
+ return (string)$xml;
+ }
+
+ $array = array();
+ foreach ($xml->children() as $element => $node) {
+ $totalElement = count($xml->{$element});
+
+ if (!isset($array[$element])) {
+ $array[$element] = "";
+ }
+ /**
+ * @var \SimpleXMLElement $node
+ */
+
+ // Has attributes
+ if ($attributes = $node->attributes()) {
+ $data = array(
+ '@attributes' => array(),
+ );
+ if (!count($node->children())){
+ $value = (string)$node;
+ if (!empty($value)) {
+ $data['@value'] = (string)$node;
+ }
+ } else {
+ $data = array_merge($data, $this->xmlToArray($node));
+ }
+ foreach ($attributes as $attr => $value) {
+ $data['@attributes'][$attr] = (string)$value;
+ }
+
+ if ($totalElement > 1) {
+ $array[$element][] = $data;
+ } else {
+ $array[$element] = $data;
+ }
+ // Just a value
+ } else {
+ if ($totalElement > 1) {
+ $array[$element][] = $this->xmlToArray($node);
+ } else {
+ $array[$element] = $this->xmlToArray($node);
+ }
+ }
+ }
+
+ return $array;
+ }
+}
diff --git a/lib/private/app/platform.php b/lib/private/app/platform.php
new file mode 100644
index 00000000000..578f541e5d2
--- /dev/null
+++ b/lib/private/app/platform.php
@@ -0,0 +1,80 @@
+<?php
+ /**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\App;
+
+use OC_Util;
+use OCP\IConfig;
+
+/**
+ * Class Platform
+ *
+ * This class basically abstracts any kind of information which can be retrieved from the underlying system.
+ *
+ * @package OC\App
+ */
+class Platform {
+
+ /**
+ * @param IConfig $config
+ */
+ function __construct(IConfig $config) {
+ $this->config = $config;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPhpVersion() {
+ return phpversion();
+ }
+
+ /**
+ * @return string
+ */
+ public function getOcVersion() {
+ $v = OC_Util::getVersion();
+ return join('.', $v);
+ }
+
+ /**
+ * @return string
+ */
+ public function getDatabase() {
+ $dbType = $this->config->getSystemValue('dbtype', 'sqlite');
+ if ($dbType === 'sqlite3') {
+ $dbType = 'sqlite';
+ }
+
+ return $dbType;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOS() {
+ return php_uname('s');
+ }
+
+ /**
+ * @param $command
+ * @return bool
+ */
+ public function isCommandKnown($command) {
+ $path = \OC_Helper::findBinaryPath($command);
+ return ($path !== null);
+ }
+
+ public function getLibraryVersion($name) {
+ $repo = new PlatformRepository();
+ $lib = $repo->findLibrary($name);
+ return $lib;
+ }
+}
diff --git a/lib/private/app/platformrepository.php b/lib/private/app/platformrepository.php
new file mode 100644
index 00000000000..96d04ec2e42
--- /dev/null
+++ b/lib/private/app/platformrepository.php
@@ -0,0 +1,210 @@
+<?php
+
+namespace OC\App;
+
+/**
+ * Class PlatformRepository
+ *
+ * Inspired by the composer project - licensed under MIT
+ * https://github.com/composer/composer/blob/master/src/Composer/Repository/PlatformRepository.php#L82
+ *
+ * @package OC\App
+ */
+class PlatformRepository {
+ public function __construct() {
+ $this->packages = $this->initialize();
+ }
+
+ protected function initialize() {
+ $loadedExtensions = get_loaded_extensions();
+ $packages = array();
+
+ // Extensions scanning
+ foreach ($loadedExtensions as $name) {
+ if (in_array($name, array('standard', 'Core'))) {
+ continue;
+ }
+
+ $ext = new \ReflectionExtension($name);
+ try {
+ $prettyVersion = $ext->getVersion();
+ } catch (\UnexpectedValueException $e) {
+ $prettyVersion = '0';
+ }
+ try {
+ $prettyVersion = $this->normalizeVersion($prettyVersion);
+ } catch (\UnexpectedValueException $e) {
+ continue;
+ }
+
+ $packages[$this->buildPackageName($name)] = $prettyVersion;
+ }
+
+ foreach ($loadedExtensions as $name) {
+ $prettyVersion = null;
+ switch ($name) {
+ case 'curl':
+ $curlVersion = curl_version();
+ $prettyVersion = $curlVersion['version'];
+ break;
+
+ case 'iconv':
+ $prettyVersion = ICONV_VERSION;
+ break;
+
+ case 'intl':
+ $name = 'ICU';
+ if (defined('INTL_ICU_VERSION')) {
+ $prettyVersion = INTL_ICU_VERSION;
+ } else {
+ $reflector = new \ReflectionExtension('intl');
+
+ ob_start();
+ $reflector->info();
+ $output = ob_get_clean();
+
+ preg_match('/^ICU version => (.*)$/m', $output, $matches);
+ $prettyVersion = $matches[1];
+ }
+
+ break;
+
+ case 'libxml':
+ $prettyVersion = LIBXML_DOTTED_VERSION;
+ break;
+
+ case 'openssl':
+ $prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]?).*}', function ($match) {
+ return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96));
+ }, OPENSSL_VERSION_TEXT);
+ break;
+
+ case 'pcre':
+ $prettyVersion = preg_replace('{^(\S+).*}', '$1', PCRE_VERSION);
+ break;
+
+ case 'uuid':
+ $prettyVersion = phpversion('uuid');
+ break;
+
+ case 'xsl':
+ $prettyVersion = LIBXSLT_DOTTED_VERSION;
+ break;
+
+ default:
+ // None handled extensions have no special cases, skip
+ continue 2;
+ }
+
+ try {
+ $prettyVersion = $this->normalizeVersion($prettyVersion);
+ } catch (\UnexpectedValueException $e) {
+ continue;
+ }
+
+ $packages[$this->buildPackageName($name)] = $prettyVersion;
+ }
+
+ return $packages;
+ }
+
+ private function buildPackageName($name) {
+ return str_replace(' ', '-', $name);
+ }
+
+ /**
+ * @param $name
+ * @return string
+ */
+ public function findLibrary($name) {
+ $extName = $this->buildPackageName($name);
+ if (isset($this->packages[$extName])) {
+ return $this->packages[$extName];
+ }
+ return null;
+ }
+
+ private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
+
+ /**
+ * Normalizes a version string to be able to perform comparisons on it
+ *
+ * https://github.com/composer/composer/blob/master/src/Composer/Package/Version/VersionParser.php#L94
+ *
+ * @param string $version
+ * @param string $fullVersion optional complete version string to give more context
+ * @throws \UnexpectedValueException
+ * @return string
+ */
+ public function normalizeVersion($version, $fullVersion = null) {
+ $version = trim($version);
+ if (null === $fullVersion) {
+ $fullVersion = $version;
+ }
+ // ignore aliases and just assume the alias is required instead of the source
+ if (preg_match('{^([^,\s]+) +as +([^,\s]+)$}', $version, $match)) {
+ $version = $match[1];
+ }
+ // match master-like branches
+ if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) {
+ return '9999999-dev';
+ }
+ if ('dev-' === strtolower(substr($version, 0, 4))) {
+ return 'dev-' . substr($version, 4);
+ }
+ // match classical versioning
+ if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
+ $version = $matches[1]
+ . (!empty($matches[2]) ? $matches[2] : '.0')
+ . (!empty($matches[3]) ? $matches[3] : '.0')
+ . (!empty($matches[4]) ? $matches[4] : '.0');
+ $index = 5;
+ } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) { // match date-based versioning
+ $version = preg_replace('{\D}', '-', $matches[1]);
+ $index = 2;
+ } elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
+ $version = $matches[1]
+ . (!empty($matches[2]) ? $matches[2] : '.0')
+ . (!empty($matches[3]) ? $matches[3] : '.0')
+ . (!empty($matches[4]) ? $matches[4] : '.0');
+ $index = 5;
+ }
+ // add version modifiers if a version was matched
+ if (isset($index)) {
+ if (!empty($matches[$index])) {
+ if ('stable' === $matches[$index]) {
+ return $version;
+ }
+ $version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? $matches[$index + 1] : '');
+ }
+ if (!empty($matches[$index + 2])) {
+ $version .= '-dev';
+ }
+ return $version;
+ }
+ $extraMessage = '';
+ if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
+ $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
+ } elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
+ $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
+ }
+ throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
+ }
+
+ private function expandStability($stability) {
+ $stability = strtolower($stability);
+ switch ($stability) {
+ case 'a':
+ return 'alpha';
+ case 'b':
+ return 'beta';
+ case 'p':
+ case 'pl':
+ return 'patch';
+ case 'rc':
+ return 'RC';
+ default:
+ return $stability;
+ }
+ }
+}
diff --git a/lib/private/appframework/app.php b/lib/private/appframework/app.php
index baf52d02054..b94c7bd9957 100644
--- a/lib/private/appframework/app.php
+++ b/lib/private/appframework/app.php
@@ -24,8 +24,9 @@
namespace OC\AppFramework;
-use OC\AppFramework\DependencyInjection\DIContainer;
-
+use \OC_App;
+use \OC\AppFramework\DependencyInjection\DIContainer;
+use \OCP\AppFramework\QueryException;
/**
* Entry point for every request in your app. You can consider this as your
@@ -37,6 +38,34 @@ class App {
/**
+ * Turns an app id into a namespace by either reading the appinfo.xml's
+ * namespace tag or uppercasing the appid's first letter
+ * @param string $appId the app id
+ * @param string $topNamespace the namespace which should be prepended to
+ * the transformed app id, defaults to OCA\
+ * @return string the starting namespace for the app
+ */
+ public static function buildAppNamespace($appId, $topNamespace='OCA\\') {
+ // first try to parse the app's appinfo/info.xml <namespace> tag
+ $filePath = OC_App::getAppPath($appId) . '/appinfo/info.xml';
+ $loadEntities = libxml_disable_entity_loader(false);
+ $xml = @simplexml_load_file($filePath);
+ libxml_disable_entity_loader($loadEntities);
+
+ if ($xml) {
+ $result = $xml->xpath('/info/namespace');
+ if ($result && count($result) > 0) {
+ // take first namespace result
+ return $topNamespace . trim((string) $result[0]);
+ }
+ }
+
+ // if the tag is not found, fall back to uppercasing the first letter
+ return $topNamespace . ucfirst($appId);
+ }
+
+
+ /**
* Shortcut for calling a controller method and printing the result
* @param string $controllerName the name of the controller under which it is
* stored in the DI container
@@ -48,12 +77,21 @@ class App {
if (!is_null($urlParams)) {
$container['urlParams'] = $urlParams;
}
- $controller = $container[$controllerName];
+ $appName = $container['AppName'];
+
+ // first try $controllerName then go for \OCA\AppName\Controller\$controllerName
+ try {
+ $controller = $container->query($controllerName);
+ } catch(QueryException $e) {
+ $appNameSpace = self::buildAppNamespace($appName);
+ $controllerName = $appNameSpace . '\\Controller\\' . $controllerName;
+ $controller = $container->query($controllerName);
+ }
// initialize the dispatcher and run all the middleware before the controller
$dispatcher = $container['Dispatcher'];
- list($httpHeaders, $responseHeaders, $output) =
+ list($httpHeaders, $responseHeaders, $responseCookies, $output) =
$dispatcher->dispatch($controller, $methodName);
if(!is_null($httpHeaders)) {
@@ -64,6 +102,14 @@ class App {
header($name . ': ' . $value);
}
+ foreach($responseCookies as $name => $value) {
+ $expireDate = null;
+ if($value['expireDate'] instanceof \DateTime) {
+ $expireDate = $value['expireDate']->getTimestamp();
+ }
+ setcookie($name, $value['value'], $expireDate, $container->getServer()->getWebRoot(), null, $container->getServer()->getConfig()->getSystemValue('forcessl', false), true);
+ }
+
if(!is_null($output)) {
header('Content-Length: ' . strlen($output));
print($output);
diff --git a/lib/private/appframework/core/api.php b/lib/private/appframework/core/api.php
index 279f4bf97f7..2f01015bb15 100644
--- a/lib/private/appframework/core/api.php
+++ b/lib/private/appframework/core/api.php
@@ -32,6 +32,7 @@ use OCP\AppFramework\IApi;
*
* Should you find yourself in need for more methods, simply inherit from this
* class and add your methods
+ * @deprecated
*/
class API implements IApi{
@@ -49,6 +50,7 @@ class API implements IApi{
/**
* Gets the userid of the current user
* @return string the user id of the current user
+ * @deprecated Use \OC::$server->getUserSession()->getUser()->getUID()
*/
public function getUserId(){
return \OCP\User::getUser();
@@ -57,6 +59,7 @@ class API implements IApi{
/**
* Adds a new javascript file
+ * @deprecated include javascript and css in template files
* @param string $scriptName the name of the javascript in js/ without the suffix
* @param string $appName the name of the app, defaults to the current one
*/
@@ -70,6 +73,7 @@ class API implements IApi{
/**
* Adds a new css file
+ * @deprecated include javascript and css in template files
* @param string $styleName the name of the css file in css/without the suffix
* @param string $appName the name of the app, defaults to the current one
*/
@@ -82,6 +86,7 @@ class API implements IApi{
/**
+ * @deprecated include javascript and css in template files
* shorthand for addScript for files in the 3rdparty directory
* @param string $name the name of the file without the suffix
*/
@@ -91,6 +96,7 @@ class API implements IApi{
/**
+ * @deprecated include javascript and css in template files
* shorthand for addStyle for files in the 3rdparty directory
* @param string $name the name of the file without the suffix
*/
@@ -100,7 +106,10 @@ class API implements IApi{
/**
+ * @deprecated communication between apps should happen over built in
+ * callbacks or interfaces (check the contacts and calendar managers)
* Checks if an app is enabled
+ * also use \OC::$server->getAppManager()->isEnabledForUser($appName)
* @param string $appName the name of an app
* @return bool true if app is enabled
*/
@@ -112,12 +121,14 @@ class API implements IApi{
/**
* used to return and open a new event source
* @return \OCP\IEventSource a new open EventSource class
+ * @deprecated Use \OC::$server->createEventSource();
*/
public function openEventSource(){
return \OC::$server->createEventSource();
}
/**
+ * @deprecated register hooks directly for class that build in hook interfaces
* connects a function to a hook
* @param string $signalClass class name of emitter
* @param string $signalName name of signal
@@ -132,6 +143,7 @@ class API implements IApi{
}
/**
+ * @deprecated implement the emitter interface instead
* Emits a signal. To get data from the slot use references!
* @param string $signalClass class name of emitter
* @param string $signalName name of signal
@@ -144,6 +156,7 @@ class API implements IApi{
/**
* clear hooks
+ * @deprecated clear hooks directly for class that build in hook interfaces
* @param string $signalClass
* @param string $signalName
*/
@@ -159,6 +172,7 @@ class API implements IApi{
* @param string $className full namespace and class name of the class
* @param string $methodName the name of the static method that should be
* called
+ * @deprecated Use \OC::$server->getJobList()->add();
*/
public function addRegularTask($className, $methodName) {
\OCP\Backgroundjob::addRegularTask($className, $methodName);
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php
index 98525ed3202..f6a0c0c4974 100644
--- a/lib/private/appframework/dependencyinjection/dicontainer.php
+++ b/lib/private/appframework/dependencyinjection/dicontainer.php
@@ -36,12 +36,13 @@ use OC\AppFramework\Utility\SimpleContainer;
use OC\AppFramework\Utility\TimeFactory;
use OC\AppFramework\Utility\ControllerMethodReflector;
use OCP\AppFramework\IApi;
+use OCP\AppFramework\QueryException;
use OCP\AppFramework\IAppContainer;
use OCP\AppFramework\Middleware;
use OCP\IServerContainer;
-class DIContainer extends SimpleContainer implements IAppContainer{
+class DIContainer extends SimpleContainer implements IAppContainer {
/**
* @var array
@@ -53,19 +54,181 @@ class DIContainer extends SimpleContainer implements IAppContainer{
* @param string $appName the name of the app
*/
public function __construct($appName, $urlParams = array()){
-
$this['AppName'] = $appName;
$this['urlParams'] = $urlParams;
- $this->registerParameter('ServerContainer', \OC::$server);
+ /**
+ * Core services
+ */
+ $this->registerService('OCP\\IAppConfig', function($c) {
+ return \OC::$server->getAppConfig();
+ });
- $this->registerService('API', function($c){
- return new API($c['AppName']);
+ $this->registerService('OCP\\IAppManager', function($c) {
+ return \OC::$server->getAppManager();
+ });
+
+ $this->registerService('OCP\\IAvatarManager', function($c) {
+ return \OC::$server->getAvatarManager();
+ });
+
+ $this->registerService('OCP\\Activity\\IManager', function($c) {
+ return \OC::$server->getActivityManager();
+ });
+
+ $this->registerService('OCP\\ICache', function($c) {
+ return \OC::$server->getCache();
+ });
+
+ $this->registerService('OCP\\ICacheFactory', function($c) {
+ return \OC::$server->getMemCacheFactory();
+ });
+
+ $this->registerService('OCP\\IConfig', function($c) {
+ return \OC::$server->getConfig();
+ });
+
+ $this->registerService('OCP\\Contacts\\IManager', function($c) {
+ return \OC::$server->getContactsManager();
+ });
+
+ $this->registerService('OCP\\IDateTimeZone', function($c) {
+ return \OC::$server->getDateTimeZone();
+ });
+
+ $this->registerService('OCP\\IDb', function($c) {
+ return \OC::$server->getDb();
+ });
+
+ $this->registerService('OCP\\IDBConnection', function($c) {
+ return \OC::$server->getDatabaseConnection();
+ });
+
+ $this->registerService('OCP\\Diagnostics\\IEventLogger', function($c) {
+ return \OC::$server->getEventLogger();
+ });
+
+ $this->registerService('OCP\\Diagnostics\\IQueryLogger', function($c) {
+ return \OC::$server->getQueryLogger();
+ });
+
+ $this->registerService('OCP\\Files\\Config\\IMountProviderCollection', function($c) {
+ return \OC::$server->getMountProviderCollection();
+ });
+
+ $this->registerService('OCP\\Files\\IRootFolder', function($c) {
+ return \OC::$server->getRootFolder();
+ });
+
+ $this->registerService('OCP\\IGroupManager', function($c) {
+ return \OC::$server->getGroupManager();
+ });
+
+ $this->registerService('OCP\\IL10N', function($c) {
+ return \OC::$server->getL10N($c->query('AppName'));
+ });
+
+ $this->registerService('OCP\\ILogger', function($c) {
+ return \OC::$server->getLogger();
+ });
+
+ $this->registerService('OCP\\BackgroundJob\\IJobList', function($c) {
+ return \OC::$server->getJobList();
+ });
+
+ $this->registerService('OCP\\AppFramework\\Utility\\IControllerMethodReflector', function($c) {
+ return $c->query('ControllerMethodReflector');
+ });
+
+ $this->registerService('OCP\\INavigationManager', function($c) {
+ return \OC::$server->getNavigationManager();
});
+ $this->registerService('OCP\\IPreview', function($c) {
+ return \OC::$server->getPreviewManager();
+ });
+
+ $this->registerService('OCP\\IRequest', function($c) {
+ return $c->query('Request');
+ });
+
+ $this->registerService('OCP\\ITagManager', function($c) {
+ return \OC::$server->getTagManager();
+ });
+
+ $this->registerService('OCP\\ITempManager', function($c) {
+ return \OC::$server->getTempManager();
+ });
+
+ $this->registerService('OCP\\AppFramework\\Utility\\ITimeFactory', function($c) {
+ return $c->query('TimeFactory');
+ });
+
+ $this->registerService('OCP\\Route\\IRouter', function($c) {
+ return \OC::$server->getRouter();
+ });
+
+ $this->registerService('OCP\\ISearch', function($c) {
+ return \OC::$server->getSearch();
+ });
+
+ $this->registerService('OCP\\ISearch', function($c) {
+ return \OC::$server->getSearch();
+ });
+
+ $this->registerService('OCP\\Security\\ICrypto', function($c) {
+ return \OC::$server->getCrypto();
+ });
+
+ $this->registerService('OCP\\Security\\IHasher', function($c) {
+ return \OC::$server->getHasher();
+ });
+
+ $this->registerService('OCP\\Security\\ISecureRandom', function($c) {
+ return \OC::$server->getSecureRandom();
+ });
+
+ $this->registerService('OCP\\IURLGenerator', function($c) {
+ return \OC::$server->getURLGenerator();
+ });
+
+ $this->registerService('OCP\\IUserManager', function($c) {
+ return \OC::$server->getUserManager();
+ });
+
+ $this->registerService('OCP\\IUserSession', function($c) {
+ return \OC::$server->getUserSession();
+ });
+
+ $this->registerService('ServerContainer', function ($c) {
+ $c->query('OCP\\ILogger')->debug(
+ 'Accessing the server container is deprecated. Use type ' .
+ 'annotations to inject core services instead!'
+ );
+ return \OC::$server;
+ });
+
+ // commonly used attributes
+ $this->registerService('UserId', function ($c) {
+ return $c->query('OCP\\IUserSession')->getSession()->get('user_id');
+ });
+
+ $this->registerService('WebRoot', function ($c) {
+ return $c->query('ServerContainer')->getWebRoot();
+ });
+
+
/**
- * Http
+ * App Framework APIs
*/
+ $this->registerService('API', function($c){
+ $c->query('OCP\\ILogger')->debug(
+ 'Accessing the API class is deprecated! Use the appropriate ' .
+ 'services instead!'
+ );
+ return new API($c['AppName']);
+ });
+
$this->registerService('Request', function($c) {
/** @var $c SimpleContainer */
/** @var $server SimpleContainer */
@@ -155,6 +318,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
/**
+ * @deprecated implements only deprecated methods
* @return IApi
*/
function getCoreApi()
@@ -187,6 +351,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
}
/**
+ * @deprecated use IUserSession->isLoggedIn()
* @return boolean
*/
function isLoggedIn() {
@@ -194,6 +359,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
}
/**
+ * @deprecated use IGroupManager->isAdmin($userId)
* @return boolean
*/
function isAdminUser() {
@@ -206,6 +372,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
}
/**
+ * @deprecated use the ILogger instead
* @param string $message
* @param string $level
* @return mixed
@@ -230,4 +397,6 @@ class DIContainer extends SimpleContainer implements IAppContainer{
}
\OCP\Util::writeLog($this->getAppName(), $message, $level);
}
+
+
}
diff --git a/lib/private/appframework/http/dispatcher.php b/lib/private/appframework/http/dispatcher.php
index 29a661d5743..24540ef3c94 100644
--- a/lib/private/appframework/http/dispatcher.php
+++ b/lib/private/appframework/http/dispatcher.php
@@ -48,7 +48,7 @@ class Dispatcher {
* @param Http $protocol the http protocol with contains all status headers
* @param MiddlewareDispatcher $middlewareDispatcher the dispatcher which
* runs the middleware
- * @param ControllerMethodReflector the reflector that is used to inject
+ * @param ControllerMethodReflector $reflector the reflector that is used to inject
* the arguments for the controller
* @param IRequest $request the incoming request
*/
@@ -71,6 +71,7 @@ class Dispatcher {
* @return array $array[0] contains a string with the http main header,
* $array[1] contains headers in the form: $key => value, $array[2] contains
* the response output
+ * @throws \Exception
*/
public function dispatch(Controller $controller, $methodName) {
$out = array(null, array(), null);
@@ -102,13 +103,14 @@ class Dispatcher {
// get the output which should be printed and run the after output
// middleware to modify the response
$output = $response->render();
- $out[2] = $this->middlewareDispatcher->beforeOutput(
+ $out[3] = $this->middlewareDispatcher->beforeOutput(
$controller, $methodName, $output);
// depending on the cache object the headers need to be changed
$out[0] = $this->protocol->getStatusHeader($response->getStatus(),
$response->getLastModified(), $response->getETag());
- $out[1] = $response->getHeaders();
+ $out[1] = array_merge($response->getHeaders());
+ $out[2] = $response->getCookies();
return $out;
}
diff --git a/lib/private/appframework/middleware/security/securitymiddleware.php b/lib/private/appframework/middleware/security/securitymiddleware.php
index 948a43ce0f4..8c5ca5891ad 100644
--- a/lib/private/appframework/middleware/security/securitymiddleware.php
+++ b/lib/private/appframework/middleware/security/securitymiddleware.php
@@ -34,6 +34,8 @@ use OCP\INavigationManager;
use OCP\IURLGenerator;
use OCP\IRequest;
use OCP\ILogger;
+use OCP\AppFramework\Controller;
+use OCP\Util;
/**
@@ -110,12 +112,24 @@ class SecurityMiddleware extends Middleware {
}
}
+ // CSRF check - also registers the CSRF token since the session may be closed later
+ Util::callRegister();
if(!$this->reflector->hasAnnotation('NoCSRFRequired')) {
if(!$this->request->passesCSRFCheck()) {
throw new SecurityException('CSRF check failed', Http::STATUS_PRECONDITION_FAILED);
}
}
+ /**
+ * FIXME: Use DI once available
+ * Checks if app is enabled (also inclues a check whether user is allowed to access the resource)
+ * The getAppPath() check is here since components such as settings also use the AppFramework and
+ * therefore won't pass this check.
+ */
+ if(\OC_App::getAppPath($this->appName) !== false && !\OC_App::isEnabled($this->appName)) {
+ throw new SecurityException('App is not enabled', Http::STATUS_PRECONDITION_FAILED);
+ }
+
}
diff --git a/lib/private/appframework/routing/routeconfig.php b/lib/private/appframework/routing/routeconfig.php
index 91687b9c83c..9816b062b8d 100644
--- a/lib/private/appframework/routing/routeconfig.php
+++ b/lib/private/appframework/routing/routeconfig.php
@@ -69,6 +69,12 @@ class RouteConfig {
$simpleRoutes = isset($routes['routes']) ? $routes['routes'] : array();
foreach ($simpleRoutes as $simpleRoute) {
$name = $simpleRoute['name'];
+ $postfix = '';
+
+ if (isset($simpleRoute['postfix'])) {
+ $postfix = $simpleRoute['postfix'];
+ }
+
$url = $simpleRoute['url'];
$verb = isset($simpleRoute['verb']) ? strtoupper($simpleRoute['verb']) : 'GET';
@@ -84,7 +90,7 @@ class RouteConfig {
// register the route
$handler = new RouteActionHandler($this->container, $controllerName, $actionName);
- $router = $this->router->create($this->appName.'.'.$controller.'.'.$action, $url)
+ $router = $this->router->create($this->appName.'.'.$controller.'.'.$action . $postfix, $url)
->method($verb)
->action($handler);
diff --git a/lib/private/appframework/utility/controllermethodreflector.php b/lib/private/appframework/utility/controllermethodreflector.php
index c49dd80091e..00d6e1f1573 100644
--- a/lib/private/appframework/utility/controllermethodreflector.php
+++ b/lib/private/appframework/utility/controllermethodreflector.php
@@ -24,11 +24,13 @@
namespace OC\AppFramework\Utility;
+use \OCP\AppFramework\Utility\IControllerMethodReflector;
+
/**
* Reads and parses annotations from doc comments
*/
-class ControllerMethodReflector {
+class ControllerMethodReflector implements IControllerMethodReflector{
private $annotations;
private $types;
@@ -54,7 +56,7 @@ class ControllerMethodReflector {
$this->annotations = $matches[1];
// extract type parameter information
- preg_match_all('/@param (?<type>\w+) \$(?<var>\w+)/', $docs, $matches);
+ preg_match_all('/@param (?P<type>\w+) \$(?P<var>\w+)/', $docs, $matches);
// this is just a fix for PHP 5.3 (array_combine raises warning if called with
// two empty arrays
if($matches['var'] === array() && $matches['type'] === array()) {
diff --git a/lib/private/appframework/utility/simplecontainer.php b/lib/private/appframework/utility/simplecontainer.php
index c6effed5b4b..68d52d759e0 100644
--- a/lib/private/appframework/utility/simplecontainer.php
+++ b/lib/private/appframework/utility/simplecontainer.php
@@ -1,7 +1,29 @@
<?php
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OC\AppFramework\Utility;
+use \OCP\AppFramework\QueryException;
+
/**
* Class SimpleContainer
*
@@ -9,12 +31,71 @@ namespace OC\AppFramework\Utility;
*/
class SimpleContainer extends \Pimple\Container implements \OCP\IContainer {
+
+ /**
+ * @param ReflectionClass $class the class to instantiate
+ * @return stdClass the created class
+ */
+ private function buildClass(\ReflectionClass $class) {
+ $constructor = $class->getConstructor();
+ if ($constructor === null) {
+ return $class->newInstance();
+ } else {
+ $parameters = [];
+ foreach ($constructor->getParameters() as $parameter) {
+ $parameterClass = $parameter->getClass();
+
+ // try to find out if it is a class or a simple parameter
+ if ($parameterClass === null) {
+ $resolveName = $parameter->getName();
+ } else {
+ $resolveName = $parameterClass->name;
+ }
+
+ $parameters[] = $this->query($resolveName);
+ }
+ return $class->newInstanceArgs($parameters);
+ }
+ }
+
+
+ /**
+ * If a parameter is not registered in the container try to instantiate it
+ * by using reflection to find out how to build the class
+ * @param string $name the class name to resolve
+ * @throws QueryException if the class could not be found or instantiated
+ */
+ private function resolve($name) {
+ $baseMsg = 'Could not resolve ' . $name . '!';
+ try {
+ $class = new \ReflectionClass($name);
+ if ($class->isInstantiable()) {
+ return $this->buildClass($class);
+ } else {
+ throw new QueryException($baseMsg .
+ ' Class can not be instantiated');
+ }
+ } catch(\ReflectionException $e) {
+ throw new QueryException($baseMsg . ' ' . $e->getMessage());
+ }
+ }
+
+
/**
* @param string $name name of the service to query for
* @return mixed registered service for the given $name
+ * @throws QueryExcpetion if the query could not be resolved
*/
public function query($name) {
- return $this->offsetGet($name);
+ if ($this->offsetExists($name)) {
+ return $this->offsetGet($name);
+ } else {
+ $object = $this->resolve($name);
+ $this->registerService($name, function () use ($object) {
+ return $object;
+ });
+ return $object;
+ }
}
/**
@@ -35,7 +116,7 @@ class SimpleContainer extends \Pimple\Container implements \OCP\IContainer {
* @param bool $shared
*/
function registerService($name, \Closure $closure, $shared = true) {
- if (!empty($this[$name])) {
+ if (isset($this[$name])) {
unset($this[$name]);
}
if ($shared) {
@@ -44,4 +125,6 @@ class SimpleContainer extends \Pimple\Container implements \OCP\IContainer {
$this[$name] = parent::factory($closure);
}
}
+
+
}
diff --git a/lib/private/appframework/utility/timefactory.php b/lib/private/appframework/utility/timefactory.php
index a9b07a356e3..f13b73407ab 100644
--- a/lib/private/appframework/utility/timefactory.php
+++ b/lib/private/appframework/utility/timefactory.php
@@ -24,11 +24,13 @@
namespace OC\AppFramework\Utility;
+use OCP\AppFramework\Utility\ITimeFactory;
+
/**
* Needed to mock calls to time()
*/
-class TimeFactory {
+class TimeFactory implements ITimeFactory {
/**
diff --git a/lib/private/arrayparser.php b/lib/private/arrayparser.php
index dab1817c2ed..1cf3355d6fa 100644
--- a/lib/private/arrayparser.php
+++ b/lib/private/arrayparser.php
@@ -21,9 +21,6 @@
namespace OC;
-class SyntaxException extends \Exception {
-}
-
class ArrayParser {
const TYPE_NUM = 1;
const TYPE_BOOL = 2;
@@ -209,7 +206,7 @@ class ArrayParser {
$bracketDepth++;
} elseif ($char === ')') {
if ($bracketDepth <= 0) {
- throw new SyntaxException;
+ throw new UnexpectedValueException();
} else {
$bracketDepth--;
}
diff --git a/lib/private/assetic/separatorfilter.php b/lib/private/assetic/separatorfilter.php
new file mode 100644
index 00000000000..fb1a4e7f00c
--- /dev/null
+++ b/lib/private/assetic/separatorfilter.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * Copyright (C) 2014 Robin McCorkell <rmccorkell@karoshi.org.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Assetic;
+
+use Assetic\Filter\FilterInterface;
+use Assetic\Asset\AssetInterface;
+
+/**
+ * Inserts a separator between assets to prevent merge failures
+ * e.g. missing semicolon at the end of a JS file
+ */
+class SeparatorFilter implements FilterInterface
+{
+ /**
+ * @var string
+ */
+ private $separator;
+
+ /**
+ * Constructor.
+ *
+ * @param string $separator Separator to use between assets
+ */
+ public function __construct($separator = ';')
+ {
+ $this->separator = $separator;
+ }
+
+ public function filterLoad(AssetInterface $asset)
+ {
+ }
+
+ public function filterDump(AssetInterface $asset)
+ {
+ $asset->setContent($asset->getContent() . $this->separator);
+ }
+}
diff --git a/lib/private/config.php b/lib/private/config.php
index f0548442ab5..8544de34b72 100644
--- a/lib/private/config.php
+++ b/lib/private/config.php
@@ -40,24 +40,6 @@ class Config {
}
/**
- * Enables or disables the debug mode
- * @param bool $state True to enable, false to disable
- */
- public function setDebugMode($state) {
- $this->debugMode = $state;
- $this->writeData();
- $this->cache;
- }
-
- /**
- * Returns whether the debug mode is enabled or disabled
- * @return bool True when enabled, false otherwise
- */
- public function isDebugMode() {
- return $this->debugMode;
- }
-
- /**
* Lists all available config keys
* @return array an array of key names
*
@@ -138,12 +120,12 @@ class Config {
// Include file and merge config
foreach ($configFiles as $file) {
- if($file === $this->configFilePath && !@touch($file)) {
- // Writing to the main config might not be possible, e.g. if the wrong
+ $filePointer = @fopen($file, 'r');
+ if($file === $this->configFilePath && $filePointer === false) {
+ // Opening the main config might not be possible, e.g. if the wrong
// permissions are set (likely on a new installation)
continue;
}
- $filePointer = fopen($file, 'r');
// Try to acquire a file lock
if(!flock($filePointer, LOCK_SH)) {
diff --git a/lib/private/connector/sabre/appenabledplugin.php b/lib/private/connector/sabre/appenabledplugin.php
new file mode 100644
index 00000000000..61f5170658d
--- /dev/null
+++ b/lib/private/connector/sabre/appenabledplugin.php
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Connector\Sabre;
+
+use OCP\App\IAppManager;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\ServerPlugin;
+
+/**
+ * Plugin to check if an app is enabled for the current user
+ */
+class AppEnabledPlugin extends ServerPlugin {
+
+ /**
+ * Reference to main server object
+ *
+ * @var \Sabre\DAV\Server
+ */
+ private $server;
+
+ /**
+ * @var string
+ */
+ private $app;
+
+ /**
+ * @var \OCP\App\IAppManager
+ */
+ private $appManager;
+
+ /**
+ * @param string $app
+ * @param \OCP\App\IAppManager $appManager
+ */
+ public function __construct($app, IAppManager $appManager) {
+ $this->app = $app;
+ $this->appManager = $appManager;
+ }
+
+ /**
+ * This initializes the plugin.
+ *
+ * This function is called by \Sabre\DAV\Server, after
+ * addPlugin is called.
+ *
+ * This method should set up the required event subscriptions.
+ *
+ * @param \Sabre\DAV\Server $server
+ * @return void
+ */
+ public function initialize(\Sabre\DAV\Server $server) {
+
+ $this->server = $server;
+ $this->server->subscribeEvent('beforeMethod', array($this, 'checkAppEnabled'), 30);
+ }
+
+ /**
+ * This method is called before any HTTP after auth and checks if the user has access to the app
+ *
+ * @throws \Sabre\DAV\Exception\Forbidden
+ * @return bool
+ */
+ public function checkAppEnabled() {
+ if (!$this->appManager->isEnabledForUser($this->app)) {
+ throw new Forbidden();
+ }
+ }
+}
diff --git a/lib/private/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php
index 0d35c7d528e..c878e5ee4b4 100644
--- a/lib/private/connector/sabre/directory.php
+++ b/lib/private/connector/sabre/directory.php
@@ -25,6 +25,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node
implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuota {
/**
+ * Cached directory content
+ *
+ * @var \OCP\Files\FileInfo[]
+ */
+ private $dirContent;
+
+ /**
* Creates a new file in the directory
*
* Data will either be supplied as a stream resource, or in certain cases
@@ -51,29 +58,33 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node
*/
public function createFile($name, $data = null) {
- // for chunked upload also updating a existing file is a "createFile"
- // because we create all the chunks before re-assemble them to the existing file.
- if (isset($_SERVER['HTTP_OC_CHUNKED'])) {
+ try {
+ // for chunked upload also updating a existing file is a "createFile"
+ // because we create all the chunks before re-assemble them to the existing file.
+ if (isset($_SERVER['HTTP_OC_CHUNKED'])) {
- // exit if we can't create a new file and we don't updatable existing file
- $info = OC_FileChunking::decodeName($name);
- if (!$this->fileView->isCreatable($this->path) &&
- !$this->fileView->isUpdatable($this->path . '/' . $info['name'])) {
- throw new \Sabre\DAV\Exception\Forbidden();
- }
+ // exit if we can't create a new file and we don't updatable existing file
+ $info = OC_FileChunking::decodeName($name);
+ if (!$this->fileView->isCreatable($this->path) &&
+ !$this->fileView->isUpdatable($this->path . '/' . $info['name'])) {
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
- } else {
- // For non-chunked upload it is enough to check if we can create a new file
- if (!$this->fileView->isCreatable($this->path)) {
- throw new \Sabre\DAV\Exception\Forbidden();
+ } else {
+ // For non-chunked upload it is enough to check if we can create a new file
+ if (!$this->fileView->isCreatable($this->path)) {
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
}
- }
- $path = $this->fileView->getAbsolutePath($this->path) . '/' . $name;
- // using a dummy FileInfo is acceptable here since it will be refreshed after the put is complete
- $info = new \OC\Files\FileInfo($path, null, null, array());
- $node = new OC_Connector_Sabre_File($this->fileView, $info);
- return $node->put($data);
+ $path = $this->fileView->getAbsolutePath($this->path) . '/' . $name;
+ // using a dummy FileInfo is acceptable here since it will be refreshed after the put is complete
+ $info = new \OC\Files\FileInfo($path, null, null, array(), null);
+ $node = new OC_Connector_Sabre_File($this->fileView, $info);
+ return $node->put($data);
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
+ }
}
/**
@@ -84,15 +95,18 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node
* @return void
*/
public function createDirectory($name) {
- if (!$this->info->isCreatable()) {
- throw new \Sabre\DAV\Exception\Forbidden();
- }
+ try {
+ if (!$this->info->isCreatable()) {
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
- $newPath = $this->path . '/' . $name;
- if(!$this->fileView->mkdir($newPath)) {
- throw new \Sabre\DAV\Exception\Forbidden('Could not create directory '.$newPath);
+ $newPath = $this->path . '/' . $name;
+ if(!$this->fileView->mkdir($newPath)) {
+ throw new \Sabre\DAV\Exception\Forbidden('Could not create directory '.$newPath);
+ }
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
}
-
}
/**
@@ -104,10 +118,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node
* @return \Sabre\DAV\INode
*/
public function getChild($name, $info = null) {
-
$path = $this->path . '/' . $name;
if (is_null($info)) {
- $info = $this->fileView->getFileInfo($path);
+ try {
+ $info = $this->fileView->getFileInfo($path);
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
+ }
}
if (!$info) {
@@ -128,13 +145,20 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node
* @return \Sabre\DAV\INode[]
*/
public function getChildren() {
+ if (!is_null($this->dirContent)) {
+ return $this->dirContent;
+ }
+ $folderContent = $this->fileView->getDirectoryContent($this->path);
- $folder_content = $this->fileView->getDirectoryContent($this->path);
+ $properties = array();
$paths = array();
- foreach($folder_content as $info) {
- $paths[] = $this->path.'/'.$info['name'];
- $properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = '"' . $info['etag'] . '"';
+ foreach($folderContent as $info) {
+ $name = $info->getName();
+ $paths[] = $this->path . '/' . $name;
+ $properties[$this->path.'/' . $name][self::GETETAG_PROPERTYNAME] = '"' . $info->getEtag() . '"';
}
+ // TODO: move this to a beforeGetPropertiesForPath event to pre-cache properties
+ // TODO: only fetch the requested properties
if(count($paths)>0) {
//
// the number of arguments within IN conditions are limited in most databases
@@ -159,12 +183,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node
}
$nodes = array();
- foreach($folder_content as $info) {
+ foreach($folderContent as $info) {
$node = $this->getChild($info->getName(), $info);
- $node->setPropertyCache($properties[$this->path.'/'.$info['name']]);
+ $node->setPropertyCache($properties[$this->path . '/' . $info->getName()]);
$nodes[] = $node;
}
- return $nodes;
+ $this->dirContent = $nodes;
+ return $this->dirContent;
}
/**
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php
index 903c3447b56..76ebe3ed9fe 100644
--- a/lib/private/connector/sabre/file.php
+++ b/lib/private/connector/sabre/file.php
@@ -50,14 +50,18 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
* @return string|null
*/
public function put($data) {
- if ($this->info && $this->fileView->file_exists($this->path) &&
- !$this->info->isUpdateable()) {
- throw new \Sabre\DAV\Exception\Forbidden();
+ try {
+ if ($this->info && $this->fileView->file_exists($this->path) &&
+ !$this->info->isUpdateable()) {
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("File is not updatable: ".$e->getMessage());
}
// throw an exception if encryption was disabled but the files are still encrypted
if (\OC_Util::encryptedFiles()) {
- throw new \Sabre\DAV\Exception\ServiceUnavailable();
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("Encryption is disabled");
}
$fileName = basename($this->path);
@@ -100,43 +104,51 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
} catch (\OCP\Files\LockNotAcquiredException $e) {
// the file is currently being written to by another process
throw new OC_Connector_Sabre_Exception_FileLocked($e->getMessage(), $e->getCode(), $e);
+ } catch (\OCA\Files_Encryption\Exception\EncryptionException $e) {
+ throw new \Sabre\DAV\Exception\Forbidden($e->getMessage());
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("Failed to write file contents: ".$e->getMessage());
}
- // if content length is sent by client:
- // double check if the file was fully received
- // compare expected and actual size
- if (isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['REQUEST_METHOD'] !== 'LOCK') {
- $expected = $_SERVER['CONTENT_LENGTH'];
- $actual = $this->fileView->filesize($partFilePath);
- if ($actual != $expected) {
- $this->fileView->unlink($partFilePath);
- throw new \Sabre\DAV\Exception\BadRequest('expected filesize ' . $expected . ' got ' . $actual);
+ try {
+ // if content length is sent by client:
+ // double check if the file was fully received
+ // compare expected and actual size
+ if (isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['REQUEST_METHOD'] !== 'LOCK') {
+ $expected = $_SERVER['CONTENT_LENGTH'];
+ $actual = $this->fileView->filesize($partFilePath);
+ if ($actual != $expected) {
+ $this->fileView->unlink($partFilePath);
+ throw new \Sabre\DAV\Exception\BadRequest('expected filesize ' . $expected . ' got ' . $actual);
+ }
}
- }
- // rename to correct path
- try {
- $renameOkay = $this->fileView->rename($partFilePath, $this->path);
- $fileExists = $this->fileView->file_exists($this->path);
- if ($renameOkay === false || $fileExists === false) {
- \OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
- $this->fileView->unlink($partFilePath);
- throw new \Sabre\DAV\Exception('Could not rename part file to final file');
+ // rename to correct path
+ try {
+ $renameOkay = $this->fileView->rename($partFilePath, $this->path);
+ $fileExists = $this->fileView->file_exists($this->path);
+ if ($renameOkay === false || $fileExists === false) {
+ \OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
+ $this->fileView->unlink($partFilePath);
+ throw new \Sabre\DAV\Exception('Could not rename part file to final file');
+ }
+ }
+ catch (\OCP\Files\LockNotAcquiredException $e) {
+ // the file is currently being written to by another process
+ throw new OC_Connector_Sabre_Exception_FileLocked($e->getMessage(), $e->getCode(), $e);
}
- }
- catch (\OCP\Files\LockNotAcquiredException $e) {
- // the file is currently being written to by another process
- throw new OC_Connector_Sabre_Exception_FileLocked($e->getMessage(), $e->getCode(), $e);
- }
- // allow sync clients to send the mtime along in a header
- $mtime = OC_Request::hasModificationTime();
- if ($mtime !== false) {
- if($this->fileView->touch($this->path, $mtime)) {
- header('X-OC-MTime: accepted');
+ // allow sync clients to send the mtime along in a header
+ $mtime = OC_Request::hasModificationTime();
+ if ($mtime !== false) {
+ if($this->fileView->touch($this->path, $mtime)) {
+ header('X-OC-MTime: accepted');
+ }
}
+ $this->refreshInfo();
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("Failed to check file size: ".$e->getMessage());
}
- $this->refreshInfo();
return '"' . $this->info->getEtag() . '"';
}
@@ -150,9 +162,15 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
//throw exception if encryption is disabled but files are still encrypted
if (\OC_Util::encryptedFiles()) {
- throw new \Sabre\DAV\Exception\ServiceUnavailable();
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("Encryption is disabled");
} else {
- return $this->fileView->fopen(ltrim($this->path, '/'), 'rb');
+ try {
+ return $this->fileView->fopen(ltrim($this->path, '/'), 'rb');
+ } catch (\OCA\Files_Encryption\Exception\EncryptionException $e) {
+ throw new \Sabre\DAV\Exception\Forbidden($e->getMessage());
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("Failed to open file: ".$e->getMessage());
+ }
}
}
@@ -168,9 +186,13 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
throw new \Sabre\DAV\Exception\Forbidden();
}
- if (!$this->fileView->unlink($this->path)) {
- // assume it wasn't possible to delete due to permissions
- throw new \Sabre\DAV\Exception\Forbidden();
+ try {
+ if (!$this->fileView->unlink($this->path)) {
+ // assume it wasn't possible to delete due to permissions
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("Failed to unlink: ".$e->getMessage());
}
// remove properties
@@ -197,9 +219,26 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
public function getContentType() {
$mimeType = $this->info->getMimetype();
+ // PROPFIND needs to return the correct mime type, for consistency with the web UI
+ if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PROPFIND' ) {
+ return $mimeType;
+ }
return \OC_Helper::getSecureMimeType($mimeType);
}
+ public function getDirectDownload() {
+ if (\OCP\App::isEnabled('encryption')) {
+ return [];
+ }
+ /** @var \OCP\Files\Storage $storage */
+ list($storage, $internalPath) = $this->fileView->resolvePath($this->path);
+ if (is_null($storage)) {
+ return [];
+ }
+
+ return $storage->getDirectDownload($internalPath);
+ }
+
/**
* @param resource $data
* @return null|string
@@ -229,33 +268,37 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
if ($chunk_handler->isComplete()) {
- // we first assembly the target file as a part file
- $partFile = $path . '/' . $info['name'] . '.ocTransferId' . $info['transferid'] . '.part';
- $chunk_handler->file_assemble($partFile);
-
- // here is the final atomic rename
- $targetPath = $path . '/' . $info['name'];
- $renameOkay = $this->fileView->rename($partFile, $targetPath);
- $fileExists = $this->fileView->file_exists($targetPath);
- if ($renameOkay === false || $fileExists === false) {
- \OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
- // only delete if an error occurred and the target file was already created
- if ($fileExists) {
- $this->fileView->unlink($targetPath);
+ try {
+ // we first assembly the target file as a part file
+ $partFile = $path . '/' . $info['name'] . '.ocTransferId' . $info['transferid'] . '.part';
+ $chunk_handler->file_assemble($partFile);
+
+ // here is the final atomic rename
+ $targetPath = $path . '/' . $info['name'];
+ $renameOkay = $this->fileView->rename($partFile, $targetPath);
+ $fileExists = $this->fileView->file_exists($targetPath);
+ if ($renameOkay === false || $fileExists === false) {
+ \OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
+ // only delete if an error occurred and the target file was already created
+ if ($fileExists) {
+ $this->fileView->unlink($targetPath);
+ }
+ throw new \Sabre\DAV\Exception('Could not rename part file assembled from chunks');
}
- throw new \Sabre\DAV\Exception('Could not rename part file assembled from chunks');
- }
- // allow sync clients to send the mtime along in a header
- $mtime = OC_Request::hasModificationTime();
- if ($mtime !== false) {
- if($this->fileView->touch($targetPath, $mtime)) {
- header('X-OC-MTime: accepted');
+ // allow sync clients to send the mtime along in a header
+ $mtime = OC_Request::hasModificationTime();
+ if ($mtime !== false) {
+ if($this->fileView->touch($targetPath, $mtime)) {
+ header('X-OC-MTime: accepted');
+ }
}
- }
- $info = $this->fileView->getFileInfo($targetPath);
- return $info->getEtag();
+ $info = $this->fileView->getFileInfo($targetPath);
+ return $info->getEtag();
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable("Failed to put file: ".$e->getMessage());
+ }
}
return null;
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
index 37798d8b162..ff5a6cc8b4b 100644
--- a/lib/private/connector/sabre/filesplugin.php
+++ b/lib/private/connector/sabre/filesplugin.php
@@ -39,6 +39,7 @@ class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id';
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}permissions';
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}size';
+ $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}downloadURL';
$this->server = $server;
$this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties'));
@@ -80,6 +81,15 @@ class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin
}
}
+ if ($node instanceof OC_Connector_Sabre_File) {
+ /** @var $node OC_Connector_Sabre_File */
+ $directDownloadUrl = $node->getDirectDownload();
+ if (isset($directDownloadUrl['url'])) {
+ $directDownloadUrlPropertyName = '{' . self::NS_OWNCLOUD . '}downloadURL';
+ $returnedProperties[200][$directDownloadUrlPropertyName] = $directDownloadUrl['url'];
+ }
+ }
+
if ($node instanceof OC_Connector_Sabre_Directory) {
$sizePropertyName = '{' . self::NS_OWNCLOUD . '}size';
diff --git a/lib/private/connector/sabre/node.php b/lib/private/connector/sabre/node.php
index a22dc9c5fbe..3173ab8a30f 100644
--- a/lib/private/connector/sabre/node.php
+++ b/lib/private/connector/sabre/node.php
@@ -1,5 +1,7 @@
<?php
+
use Sabre\DAV\URLUtil;
+use OC\Connector\Sabre\TagList;
/**
* ownCloud
@@ -227,6 +229,15 @@ abstract class OC_Connector_Sabre_Node implements \Sabre\DAV\INode, \Sabre\DAV\I
}
/**
+ * Returns the cache's file id
+ *
+ * @return int
+ */
+ public function getId() {
+ return $this->info->getId();
+ }
+
+ /**
* @return string|null
*/
public function getFileId() {
diff --git a/lib/private/connector/sabre/objecttree.php b/lib/private/connector/sabre/objecttree.php
index d7a96cfc88e..d2759d7a3ba 100644
--- a/lib/private/connector/sabre/objecttree.php
+++ b/lib/private/connector/sabre/objecttree.php
@@ -71,7 +71,9 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
if (pathinfo($path, PATHINFO_EXTENSION) === 'part') {
// read from storage
$absPath = $this->fileView->getAbsolutePath($path);
- list($storage, $internalPath) = Filesystem::resolvePath('/' . $absPath);
+ $mount = $this->fileView->getMount($path);
+ $storage = $mount->getStorage();
+ $internalPath = $mount->getInternalPath($absPath);
if ($storage) {
/**
* @var \OC\Files\Storage\Storage $storage
@@ -79,7 +81,7 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
$scanner = $storage->getScanner($internalPath);
// get data directly
$data = $scanner->getData($internalPath);
- $info = new FileInfo($absPath, $storage, $internalPath, $data);
+ $info = new FileInfo($absPath, $storage, $internalPath, $data, $mount);
} else {
$info = null;
}
@@ -138,27 +140,31 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
$isMovableMount = true;
}
- // check update privileges
- if (!$this->fileView->isUpdatable($sourcePath) && !$isMovableMount) {
- throw new \Sabre\DAV\Exception\Forbidden();
- }
- if ($sourceDir !== $destinationDir) {
- if (!$this->fileView->isCreatable($destinationDir)) {
+ try {
+ // check update privileges
+ if (!$this->fileView->isUpdatable($sourcePath) && !$isMovableMount) {
throw new \Sabre\DAV\Exception\Forbidden();
}
- if (!$this->fileView->isDeletable($sourcePath) && !$isMovableMount) {
- throw new \Sabre\DAV\Exception\Forbidden();
+ if ($sourceDir !== $destinationDir) {
+ if (!$this->fileView->isCreatable($destinationDir)) {
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
+ if (!$this->fileView->isDeletable($sourcePath) && !$isMovableMount) {
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
}
- }
- $fileName = basename($destinationPath);
- if (!\OCP\Util::isValidFileName($fileName)) {
- throw new \Sabre\DAV\Exception\BadRequest();
- }
+ $fileName = basename($destinationPath);
+ if (!\OCP\Util::isValidFileName($fileName)) {
+ throw new \Sabre\DAV\Exception\BadRequest();
+ }
- $renameOkay = $this->fileView->rename($sourcePath, $destinationPath);
- if (!$renameOkay) {
- throw new \Sabre\DAV\Exception\Forbidden('');
+ $renameOkay = $this->fileView->rename($sourcePath, $destinationPath);
+ if (!$renameOkay) {
+ throw new \Sabre\DAV\Exception\Forbidden('');
+ }
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
}
// update properties
@@ -188,19 +194,23 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
throw new \Sabre\DAV\Exception\ServiceUnavailable('filesystem not setup');
}
- if ($this->fileView->is_file($source)) {
- $this->fileView->copy($source, $destination);
- } else {
- $this->fileView->mkdir($destination);
- $dh = $this->fileView->opendir($source);
- if (is_resource($dh)) {
- while (($subNode = readdir($dh)) !== false) {
+ try {
+ if ($this->fileView->is_file($source)) {
+ $this->fileView->copy($source, $destination);
+ } else {
+ $this->fileView->mkdir($destination);
+ $dh = $this->fileView->opendir($source);
+ if (is_resource($dh)) {
+ while (($subNode = readdir($dh)) !== false) {
- if ($subNode == '.' || $subNode == '..') continue;
- $this->copy($source . '/' . $subNode, $destination . '/' . $subNode);
+ if ($subNode == '.' || $subNode == '..') continue;
+ $this->copy($source . '/' . $subNode, $destination . '/' . $subNode);
+ }
}
}
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
}
list($destinationDir,) = \Sabre\DAV\URLUtil::splitPath($destination);
diff --git a/lib/private/connector/sabre/principal.php b/lib/private/connector/sabre/principal.php
index fe17fb991ca..4bb28c65ddd 100644
--- a/lib/private/connector/sabre/principal.php
+++ b/lib/private/connector/sabre/principal.php
@@ -2,12 +2,34 @@
/**
* Copyright (c) 2011 Jakob Sack mail@jakobsack.de
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * Copyright (c) 2014 Lukas Reschke lukas@owncloud.com
+ *
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
-class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\BackendInterface {
+namespace OC\Connector\Sabre;
+
+use OCP\IUserManager;
+use OCP\IConfig;
+
+class Principal implements \Sabre\DAVACL\PrincipalBackend\BackendInterface {
+ /** @var IConfig */
+ private $config;
+ /** @var IUserManager */
+ private $userManager;
+
+ /**
+ * @param IConfig $config
+ * @param IUserManager $userManager
+ */
+ public function __construct(IConfig $config,
+ IUserManager $userManager) {
+ $this->config = $config;
+ $this->userManager = $userManager;
+ }
+
/**
* Returns a list of principals based on a prefix.
*
@@ -19,22 +41,21 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
* {DAV:}displayname
*
* @param string $prefixPath
- * @return array
+ * @return string[]
*/
- public function getPrincipalsByPrefix( $prefixPath ) {
- $principals = array();
+ public function getPrincipalsByPrefix($prefixPath) {
+ $principals = [];
- if ($prefixPath == 'principals') {
- foreach(OC_User::getUsers() as $user) {
+ if ($prefixPath === 'principals') {
+ foreach($this->userManager->search('') as $user) {
- $user_uri = 'principals/'.$user;
- $principal = array(
- 'uri' => $user_uri,
- '{DAV:}displayname' => $user,
- );
+ $principal = [
+ 'uri' => 'principals/' . $user->getUID(),
+ '{DAV:}displayname' => $user->getUID(),
+ ];
- $email= \OCP\Config::getUserValue($user, 'settings', 'email');
- if($email) {
+ $email = $this->config->getUserValue($user->getUID(), 'settings', 'email');
+ if(!empty($email)) {
$principal['{http://sabredav.org/ns}email-address'] = $email;
}
@@ -55,15 +76,15 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*/
public function getPrincipalByPath($path) {
list($prefix, $name) = explode('/', $path);
+ $user = $this->userManager->get($name);
- if ($prefix == 'principals' && OC_User::userExists($name)) {
+ if ($prefix === 'principals' && !is_null($user)) {
+ $principal = [
+ 'uri' => 'principals/' . $user->getUID(),
+ '{DAV:}displayname' => $user->getUID(),
+ ];
- $principal = array(
- 'uri' => 'principals/'.$name,
- '{DAV:}displayname' => $name,
- );
-
- $email= \OCP\Config::getUserValue($user, 'settings', 'email');
+ $email = $this->config->getUserValue($user->getUID(), 'settings', 'email');
if($email) {
$principal['{http://sabredav.org/ns}email-address'] = $email;
}
@@ -79,6 +100,7 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*
* @param string $principal
* @return string[]
+ * @throws \Sabre\DAV\Exception
*/
public function getGroupMemberSet($principal) {
// TODO: for now the group principal has only one member, the user itself
@@ -87,9 +109,7 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
throw new \Sabre\DAV\Exception('Principal not found');
}
- return array(
- $principal['uri']
- );
+ return [$principal['uri']];
}
/**
@@ -97,12 +117,13 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*
* @param string $principal
* @return array
+ * @throws \Sabre\DAV\Exception
*/
public function getGroupMembership($principal) {
list($prefix, $name) = \Sabre\DAV\URLUtil::splitPath($principal);
$group_membership = array();
- if ($prefix == 'principals') {
+ if ($prefix === 'principals') {
$principal = $this->getPrincipalByPath($principal);
if (!$principal) {
throw new \Sabre\DAV\Exception('Principal not found');
@@ -128,17 +149,27 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*
* @param string $principal
* @param array $members
- * @return void
+ * @throws \Sabre\DAV\Exception
*/
public function setGroupMemberSet($principal, array $members) {
throw new \Sabre\DAV\Exception('Setting members of the group is not supported yet');
}
+ /**
+ * @param string $path
+ * @param array $mutations
+ * @return int
+ */
function updatePrincipal($path, $mutations) {
return 0;
}
+ /**
+ * @param string $prefixPath
+ * @param array $searchProperties
+ * @return array
+ */
function searchPrincipals($prefixPath, array $searchProperties) {
- return array();
+ return [];
}
}
diff --git a/lib/private/connector/sabre/quotaplugin.php b/lib/private/connector/sabre/quotaplugin.php
index ebcc894d744..59d0e188f66 100644
--- a/lib/private/connector/sabre/quotaplugin.php
+++ b/lib/private/connector/sabre/quotaplugin.php
@@ -102,7 +102,11 @@ class OC_Connector_Sabre_QuotaPlugin extends \Sabre\DAV\ServerPlugin {
* @return mixed
*/
public function getFreeSpace($parentUri) {
- $freeSpace = $this->view->free_space($parentUri);
- return $freeSpace;
+ try {
+ $freeSpace = $this->view->free_space($parentUri);
+ return $freeSpace;
+ } catch (\OCP\Files\StorageNotAvailableException $e) {
+ throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
+ }
}
}
diff --git a/lib/private/connector/sabre/server.php b/lib/private/connector/sabre/server.php
index 137082eea67..a836af2a0b8 100644
--- a/lib/private/connector/sabre/server.php
+++ b/lib/private/connector/sabre/server.php
@@ -144,6 +144,13 @@ class OC_Connector_Sabre_Server extends Sabre\DAV\Server {
$path = rtrim($path,'/');
+ // This event allows people to intercept these requests early on in the
+ // process.
+ //
+ // We're not doing anything with the result, but this can be helpful to
+ // pre-fetch certain expensive live properties.
+ $this->broadCastEvent('beforeGetPropertiesForPath', array($path, $propertyNames, $depth));
+
$returnPropertyList = array();
$parentNode = $this->tree->getNodeForPath($path);
diff --git a/lib/private/connector/sabre/taglist.php b/lib/private/connector/sabre/taglist.php
new file mode 100644
index 00000000000..56cab393fea
--- /dev/null
+++ b/lib/private/connector/sabre/taglist.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Connector\Sabre;
+
+use Sabre\DAV;
+
+/**
+ * TagList property
+ *
+ * This property contains multiple "tag" elements, each containing a tag name.
+ */
+class TagList extends DAV\Property {
+ const NS_OWNCLOUD = 'http://owncloud.org/ns';
+
+ /**
+ * tags
+ *
+ * @var array
+ */
+ private $tags;
+
+ /**
+ * @param array $tags
+ */
+ public function __construct(array $tags) {
+ $this->tags = $tags;
+ }
+
+ /**
+ * Returns the tags
+ *
+ * @return array
+ */
+ public function getTags() {
+
+ return $this->tags;
+
+ }
+
+ /**
+ * Serializes this property.
+ *
+ * @param DAV\Server $server
+ * @param \DOMElement $dom
+ * @return void
+ */
+ public function serialize(DAV\Server $server,\DOMElement $dom) {
+
+ $prefix = $server->xmlNamespaces[self::NS_OWNCLOUD];
+
+ foreach($this->tags as $tag) {
+
+ $elem = $dom->ownerDocument->createElement($prefix . ':tag');
+ $elem->appendChild($dom->ownerDocument->createTextNode($tag));
+
+ $dom->appendChild($elem);
+ }
+
+ }
+
+ /**
+ * Unserializes this property from a DOM Element
+ *
+ * This method returns an instance of this class.
+ * It will only decode tag values.
+ *
+ * @param \DOMElement $dom
+ * @return \OC\Connector\Sabre\TagList
+ */
+ static function unserialize(\DOMElement $dom) {
+
+ $tags = array();
+ foreach($dom->childNodes as $child) {
+ if (DAV\XMLUtil::toClarkNotation($child)==='{' . self::NS_OWNCLOUD . '}tag') {
+ $tags[] = $child->textContent;
+ }
+ }
+ return new self($tags);
+
+ }
+
+}
diff --git a/lib/private/connector/sabre/tagsplugin.php b/lib/private/connector/sabre/tagsplugin.php
new file mode 100644
index 00000000000..dd0b5172bd6
--- /dev/null
+++ b/lib/private/connector/sabre/tagsplugin.php
@@ -0,0 +1,289 @@
+<?php
+
+namespace OC\Connector\Sabre;
+
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+class TagsPlugin extends \Sabre\DAV\ServerPlugin
+{
+
+ // namespace
+ const NS_OWNCLOUD = 'http://owncloud.org/ns';
+ const TAGS_PROPERTYNAME = '{http://owncloud.org/ns}tags';
+ const FAVORITE_PROPERTYNAME = '{http://owncloud.org/ns}favorite';
+ const TAG_FAVORITE = '_$!<Favorite>!$_';
+
+ /**
+ * Reference to main server object
+ *
+ * @var \Sabre\DAV\Server
+ */
+ private $server;
+
+ /**
+ * @var \OCP\ITagManager
+ */
+ private $tagManager;
+
+ /**
+ * @var \OCP\ITags
+ */
+ private $tagger;
+
+ /**
+ * Array of file id to tags array
+ * The null value means the cache wasn't initialized.
+ *
+ * @var array
+ */
+ private $cachedTags;
+
+ /**
+ * @param \OCP\ITagManager $tagManager tag manager
+ */
+ public function __construct(\Sabre\DAV\ObjectTree $objectTree, \OCP\ITagManager $tagManager) {
+ $this->objectTree = $objectTree;
+ $this->tagManager = $tagManager;
+ $this->tagger = null;
+ $this->cachedTags = null;
+ }
+
+ /**
+ * This initializes the plugin.
+ *
+ * This function is called by \Sabre\DAV\Server, after
+ * addPlugin is called.
+ *
+ * This method should set up the required event subscriptions.
+ *
+ * @param \Sabre\DAV\Server $server
+ * @return void
+ */
+ public function initialize(\Sabre\DAV\Server $server) {
+
+ $server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc';
+ $server->propertyMap[self::TAGS_PROPERTYNAME] = 'OC\\Connector\\Sabre\\TagList';
+
+ $this->server = $server;
+ $this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties'));
+ $this->server->subscribeEvent('beforeGetPropertiesForPath', array($this, 'beforeGetPropertiesForPath'));
+ $this->server->subscribeEvent('updateProperties', array($this, 'updateProperties'));
+ }
+
+ /**
+ * Searches and removes a value from the given array
+ *
+ * @param array $requestedProps
+ * @param string $propName to remove
+ * @return boolean true if the property was present, false otherwise
+ */
+ private function findAndRemoveProperty(&$requestedProps, $propName) {
+ $index = array_search($propName, $requestedProps);
+ if ($index !== false) {
+ unset($requestedProps[$index]);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns the tagger
+ *
+ * @return \OCP\ITags tagger
+ */
+ private function getTagger() {
+ if (!$this->tagger) {
+ $this->tagger = $this->tagManager->load('files');
+ }
+ return $this->tagger;
+ }
+
+ /**
+ * Returns tags and favorites.
+ *
+ * @param integer $fileId file id
+ * @return array list($tags, $favorite) with $tags as tag array
+ * and $favorite is a boolean whether the file was favorited
+ */
+ private function getTagsAndFav($fileId) {
+ $isFav = false;
+ $tags = $this->getTags($fileId);
+ if ($tags) {
+ $favPos = array_search(self::TAG_FAVORITE, $tags);
+ if ($favPos !== false) {
+ $isFav = true;
+ unset($tags[$favPos]);
+ }
+ }
+ return array($tags, $isFav);
+ }
+
+ /**
+ * Returns tags for the given file id
+ *
+ * @param integer $fileId file id
+ * @return array list of tags for that file
+ */
+ private function getTags($fileId) {
+ if (isset($this->cachedTags[$fileId])) {
+ return $this->cachedTags[$fileId];
+ } else {
+ $tags = $this->getTagger()->getTagsForObjects(array($fileId));
+ if ($tags) {
+ return current($tags);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Updates the tags of the given file id
+ *
+ * @param int $fileId
+ * @param array $tags array of tag strings
+ */
+ private function updateTags($fileId, $tags) {
+ $tagger = $this->getTagger();
+ $currentTags = $this->getTags($fileId);
+
+ $newTags = array_diff($tags, $currentTags);
+ foreach ($newTags as $tag) {
+ if ($tag === self::TAG_FAVORITE) {
+ continue;
+ }
+ $tagger->tagAs($fileId, $tag);
+ }
+ $deletedTags = array_diff($currentTags, $tags);
+ foreach ($deletedTags as $tag) {
+ if ($tag === self::TAG_FAVORITE) {
+ continue;
+ }
+ $tagger->unTag($fileId, $tag);
+ }
+ }
+
+ /**
+ * Pre-fetch tags info
+ *
+ * @param string $path
+ * @param array $requestedProperties
+ * @param integer $depth
+ * @return void
+ */
+ public function beforeGetPropertiesForPath(
+ $path,
+ array $requestedProperties,
+ $depth
+ ) {
+ $node = $this->objectTree->getNodeForPath($path);
+ if (!($node instanceof \OC_Connector_Sabre_Directory)) {
+ return;
+ }
+
+ if ($this->findAndRemoveProperty($requestedProperties, self::TAGS_PROPERTYNAME)
+ || $this->findAndRemoveProperty($requestedProperties, self::FAVORITE_PROPERTYNAME)
+ ) {
+ $fileIds = array();
+ // note: pre-fetching only supported for depth <= 1
+ $folderContent = $node->getChildren();
+ // TODO: refactor somehow with the similar array that is created
+ // in getChildren()
+ foreach ($folderContent as $info) {
+ $fileIds[] = $info->getId();
+ }
+ $tags = $this->getTagger()->getTagsForObjects($fileIds);
+ if ($tags) {
+ $this->cachedTags = $tags;
+ }
+ }
+ }
+
+ /**
+ * Adds tags and favorites properties to the response,
+ * if requested.
+ *
+ * @param string $path
+ * @param \Sabre\DAV\INode $node
+ * @param array $requestedProperties
+ * @param array $returnedProperties
+ * @return void
+ */
+ public function beforeGetProperties(
+ $path,
+ \Sabre\DAV\INode $node,
+ array &$requestedProperties,
+ array &$returnedProperties
+ ) {
+ if (!($node instanceof \OC_Connector_Sabre_Node)) {
+ return;
+ }
+
+ $tags = null;
+ $isFav = null;
+ if ($this->findAndRemoveProperty($requestedProperties, self::TAGS_PROPERTYNAME)) {
+ list($tags, $isFav) = $this->getTagsAndFav($node->getId());
+ $returnedProperties[200][self::TAGS_PROPERTYNAME] = new TagList($tags);
+ }
+ if ($this->findAndRemoveProperty($requestedProperties, self::FAVORITE_PROPERTYNAME)) {
+ if (is_null($tags)) {
+ list($tags, $isFav) = $this->getTagsAndFav($node->getId());
+ }
+ $returnedProperties[200][self::FAVORITE_PROPERTYNAME] = $isFav;
+ }
+ }
+
+ /**
+ * Updates tags and favorites properties, if applicable.
+ *
+ * @param string $path
+ * @param \Sabre\DAV\INode $node
+ * @param array $requestedProperties
+ * @param array $returnedProperties
+ * @return bool success status
+ */
+ public function updateProperties(array &$properties, array &$result, \Sabre\DAV\INode $node) {
+ if (!($node instanceof \OC_Connector_Sabre_Node)) {
+ return;
+ }
+
+ $fileId = $node->getId();
+ if (isset($properties[self::TAGS_PROPERTYNAME])) {
+ $tagsProp = $properties[self::TAGS_PROPERTYNAME];
+ unset($properties[self::TAGS_PROPERTYNAME]);
+ $this->updateTags($fileId, $tagsProp->getTags());
+ $result[200][self::TAGS_PROPERTYNAME] = new TagList($tagsProp->getTags());
+ }
+ if (isset($properties[self::FAVORITE_PROPERTYNAME])) {
+ $favState = $properties[self::FAVORITE_PROPERTYNAME];
+ unset($properties[self::FAVORITE_PROPERTYNAME]);
+ if ((int)$favState === 1 || $favState === 'true') {
+ $favState = true;
+ $this->getTagger()->tagAs($fileId, self::TAG_FAVORITE);
+ } else {
+ $favState = false;
+ $this->getTagger()->unTag($fileId, self::TAG_FAVORITE);
+ }
+ $result[200][self::FAVORITE_PROPERTYNAME] = $favState;
+ }
+ return true;
+ }
+}
diff --git a/lib/private/contacts/localaddressbook.php b/lib/private/contacts/localaddressbook.php
index 483bbee83f8..91ddb5798f2 100644
--- a/lib/private/contacts/localaddressbook.php
+++ b/lib/private/contacts/localaddressbook.php
@@ -91,7 +91,7 @@ class LocalAddressBook implements \OCP\IAddressBook {
* @return int
*/
public function getPermissions() {
- return \OCP\PERMISSION_READ;
+ return \OCP\Constants::PERMISSION_READ;
}
/**
diff --git a/lib/private/contactsmanager.php b/lib/private/contactsmanager.php
index 338cc048651..527b603ac38 100644
--- a/lib/private/contactsmanager.php
+++ b/lib/private/contactsmanager.php
@@ -62,11 +62,11 @@ namespace OC {
return null;
}
- if ($addressBook->getPermissions() & \OCP\PERMISSION_DELETE) {
- return null;
+ if ($addressBook->getPermissions() & \OCP\Constants::PERMISSION_DELETE) {
+ return $addressBook->delete($id);
}
- return $addressBook->delete($id);
+ return null;
}
/**
@@ -83,11 +83,11 @@ namespace OC {
return null;
}
- if ($addressBook->getPermissions() & \OCP\PERMISSION_CREATE) {
- return null;
+ if ($addressBook->getPermissions() & \OCP\Constants::PERMISSION_CREATE) {
+ return $addressBook->createOrUpdate($properties);
}
- return $addressBook->createOrUpdate($properties);
+ return null;
}
/**
diff --git a/lib/private/databaseexception.php b/lib/private/databaseexception.php
new file mode 100644
index 00000000000..1135621ead2
--- /dev/null
+++ b/lib/private/databaseexception.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Copyright (c) 2012 Frank Karlitschek <frank@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+class DatabaseException extends \Exception {
+ private $query;
+
+ //FIXME getQuery seems to be unused, maybe use parent constructor with $message, $code and $previous
+ public function __construct($message, $query = null){
+ parent::__construct($message);
+ $this->query = $query;
+ }
+
+ public function getQuery() {
+ return $this->query;
+ }
+}
diff --git a/lib/private/databasesetupexception.php b/lib/private/databasesetupexception.php
new file mode 100644
index 00000000000..9235cda8c0e
--- /dev/null
+++ b/lib/private/databasesetupexception.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+class DatabaseSetupException extends HintException {
+}
diff --git a/lib/private/datetimeformatter.php b/lib/private/datetimeformatter.php
new file mode 100644
index 00000000000..11c62f27083
--- /dev/null
+++ b/lib/private/datetimeformatter.php
@@ -0,0 +1,269 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Joas Schilling
+ * @copyright 2014 Joas Schilling nickvergessen@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+class DateTimeFormatter implements \OCP\IDateTimeFormatter {
+ /** @var \DateTimeZone */
+ protected $defaultTimeZone;
+
+ /** @var \OCP\IL10N */
+ protected $defaultL10N;
+
+ /**
+ * Constructor
+ *
+ * @param \DateTimeZone $defaultTimeZone Set the timezone for the format
+ * @param \OCP\IL10N $defaultL10N Set the language for the format
+ */
+ public function __construct(\DateTimeZone $defaultTimeZone, \OCP\IL10N $defaultL10N) {
+ $this->defaultTimeZone = $defaultTimeZone;
+ $this->defaultL10N = $defaultL10N;
+ }
+
+ /**
+ * Get TimeZone to use
+ *
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @return \DateTimeZone The timezone to use, falling back to the current user's timezone
+ */
+ protected function getTimeZone($timeZone = null) {
+ if ($timeZone === null) {
+ $timeZone = $this->defaultTimeZone;
+ }
+
+ return $timeZone;
+ }
+
+ /**
+ * Get \OCP\IL10N to use
+ *
+ * @param \OCP\IL10N $l The locale to use
+ * @return \OCP\IL10N The locale to use, falling back to the current user's locale
+ */
+ protected function getLocale($l = null) {
+ if ($l === null) {
+ $l = $this->defaultL10N;
+ }
+
+ return $l;
+ }
+
+ /**
+ * Generates a DateTime object with the given timestamp and TimeZone
+ *
+ * @param mixed $timestamp
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @return \DateTime
+ */
+ protected function getDateTime($timestamp, \DateTimeZone $timeZone = null) {
+ if ($timestamp === null) {
+ return new \DateTime('now', $timeZone);
+ } else if (!$timestamp instanceof \DateTime) {
+ $dateTime = new \DateTime('now', $timeZone);
+ $dateTime->setTimestamp($timestamp);
+ return $dateTime;
+ }
+ if ($timeZone) {
+ $timestamp->setTimezone($timeZone);
+ }
+ return $timestamp;
+ }
+
+ /**
+ * Formats the date of the given timestamp
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param string $format Either 'full', 'long', 'medium' or 'short'
+ * full: e.g. 'EEEE, MMMM d, y' => 'Wednesday, August 20, 2014'
+ * long: e.g. 'MMMM d, y' => 'August 20, 2014'
+ * medium: e.g. 'MMM d, y' => 'Aug 20, 2014'
+ * short: e.g. 'M/d/yy' => '8/20/14'
+ * The exact format is dependent on the language
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted date string
+ */
+ public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
+ return $this->format($timestamp, 'date', $format, $timeZone, $l);
+ }
+
+ /**
+ * Formats the date of the given timestamp
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param string $format Either 'full', 'long', 'medium' or 'short'
+ * full: e.g. 'EEEE, MMMM d, y' => 'Wednesday, August 20, 2014'
+ * long: e.g. 'MMMM d, y' => 'August 20, 2014'
+ * medium: e.g. 'MMM d, y' => 'Aug 20, 2014'
+ * short: e.g. 'M/d/yy' => '8/20/14'
+ * The exact format is dependent on the language
+ * Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted relative date string
+ */
+ public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
+ if (substr($format, -1) !== '*' && substr($format, -1) !== '*') {
+ $format .= '^';
+ }
+
+ return $this->format($timestamp, 'date', $format, $timeZone, $l);
+ }
+
+ /**
+ * Gives the relative date of the timestamp
+ * Only works for past dates
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param int|\DateTime $baseTimestamp Timestamp to compare $timestamp against, defaults to current time
+ * @return string Dates returned are:
+ * < 1 month => Today, Yesterday, n days ago
+ * < 13 month => last month, n months ago
+ * >= 13 month => last year, n years ago
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted date span
+ */
+ public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
+ $l = $this->getLocale($l);
+ $timestamp = $this->getDateTime($timestamp);
+ $timestamp->setTime(0, 0, 0);
+ if ($baseTimestamp === null) {
+ $baseTimestamp = time();
+ }
+ $baseTimestamp = $this->getDateTime($baseTimestamp);
+ $baseTimestamp->setTime(0, 0, 0);
+ $dateInterval = $timestamp->diff($baseTimestamp);
+
+ if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) {
+ return (string) $l->t('today');
+ } else if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) {
+ return (string) $l->t('yesterday');
+ } else if ($dateInterval->y == 0 && $dateInterval->m == 0) {
+ return (string) $l->n('%n day ago', '%n days ago', $dateInterval->d);
+ } else if ($dateInterval->y == 0 && $dateInterval->m == 1) {
+ return (string) $l->t('last month');
+ } else if ($dateInterval->y == 0) {
+ return (string) $l->n('%n month ago', '%n months ago', $dateInterval->m);
+ } else if ($dateInterval->y == 1) {
+ return (string) $l->t('last year');
+ }
+ return (string) $l->n('%n year ago', '%n years ago', $dateInterval->y);
+ }
+
+ /**
+ * Formats the time of the given timestamp
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param string $format Either 'full', 'long', 'medium' or 'short'
+ * full: e.g. 'h:mm:ss a zzzz' => '11:42:13 AM GMT+0:00'
+ * long: e.g. 'h:mm:ss a z' => '11:42:13 AM GMT'
+ * medium: e.g. 'h:mm:ss a' => '11:42:13 AM'
+ * short: e.g. 'h:mm a' => '11:42 AM'
+ * The exact format is dependent on the language
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted time string
+ */
+ public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
+ return $this->format($timestamp, 'time', $format, $timeZone, $l);
+ }
+
+ /**
+ * Gives the relative past time of the timestamp
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param int|\DateTime $baseTimestamp Timestamp to compare $timestamp against, defaults to current time
+ * @return string Dates returned are:
+ * < 60 sec => seconds ago
+ * < 1 hour => n minutes ago
+ * < 1 day => n hours ago
+ * < 1 month => Yesterday, n days ago
+ * < 13 month => last month, n months ago
+ * >= 13 month => last year, n years ago
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted time span
+ */
+ public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
+ $l = $this->getLocale($l);
+ $timestamp = $this->getDateTime($timestamp);
+ if ($baseTimestamp === null) {
+ $baseTimestamp = time();
+ }
+ $baseTimestamp = $this->getDateTime($baseTimestamp);
+
+ $diff = $timestamp->diff($baseTimestamp);
+ if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0) {
+ return (string) $this->formatDateSpan($timestamp, $baseTimestamp, $l);
+ }
+
+ if ($diff->h > 0) {
+ return (string) $l->n('%n hour ago', '%n hours ago', $diff->h);
+ } else if ($diff->i > 0) {
+ return (string) $l->n('%n minute ago', '%n minutes ago', $diff->i);
+ }
+ return (string) $l->t('seconds ago');
+ }
+
+ /**
+ * Formats the date and time of the given timestamp
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param string $formatDate See formatDate() for description
+ * @param string $formatTime See formatTime() for description
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted date and time string
+ */
+ public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
+ return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
+ }
+
+ /**
+ * Formats the date and time of the given timestamp
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param string $formatDate See formatDate() for description
+ * Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
+ * @param string $formatTime See formatTime() for description
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted relative date and time string
+ */
+ public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
+ if (substr($formatDate, -1) !== '^' && substr($formatDate, -1) !== '*') {
+ $formatDate .= '^';
+ }
+
+ return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
+ }
+
+ /**
+ * Formats the date and time of the given timestamp
+ *
+ * @param int|\DateTime $timestamp Either a Unix timestamp or DateTime object
+ * @param string $type One of 'date', 'datetime' or 'time'
+ * @param string $format Format string
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted date and time string
+ */
+ protected function format($timestamp, $type, $format, \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
+ $l = $this->getLocale($l);
+ $timeZone = $this->getTimeZone($timeZone);
+ $timestamp = $this->getDateTime($timestamp, $timeZone);
+
+ return (string) $l->l($type, $timestamp, array(
+ 'width' => $format,
+ ));
+ }
+}
diff --git a/lib/private/datetimezone.php b/lib/private/datetimezone.php
new file mode 100644
index 00000000000..e4a0af4fc69
--- /dev/null
+++ b/lib/private/datetimezone.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Joas Schilling
+ * @copyright 2014 Joas Schilling nickvergessen@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+
+use OCP\IConfig;
+use OCP\IDateTimeZone;
+use OCP\ISession;
+
+class DateTimeZone implements IDateTimeZone {
+ /** @var IConfig */
+ protected $config;
+
+ /** @var ISession */
+ protected $session;
+
+ /**
+ * Constructor
+ *
+ * @param IConfig $config
+ * @param ISession $session
+ */
+ public function __construct(IConfig $config, ISession $session) {
+ $this->config = $config;
+ $this->session = $session;
+ }
+
+ /**
+ * Get the timezone of the current user, based on his session information and config data
+ *
+ * @return \DateTimeZone
+ */
+ public function getTimeZone() {
+ $timeZone = $this->config->getUserValue($this->session->get('user_id'), 'core', 'timezone', null);
+ if ($timeZone === null) {
+ if ($this->session->exists('timezone')) {
+ $offsetHours = $this->session->get('timezone');
+ // Note: the timeZone name is the inverse to the offset,
+ // so a positive offset means negative timeZone
+ // and the other way around.
+ if ($offsetHours > 0) {
+ return new \DateTimeZone('Etc/GMT-' . $offsetHours);
+ } else {
+ return new \DateTimeZone('Etc/GMT+' . abs($offsetHours));
+ }
+ } else {
+ return new \DateTimeZone('UTC');
+ }
+ }
+ return new \DateTimeZone($timeZone);
+ }
+}
diff --git a/lib/private/davclient.php b/lib/private/davclient.php
deleted file mode 100644
index 6a544d27068..00000000000
--- a/lib/private/davclient.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Vincent Petry
- * @copyright 2013 Vincent Petry <pvince81@owncloud.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/**
- * This class extends the SabreDAV client with additional functionality
- * like request timeout.
- */
-
-class OC_DAVClient extends \Sabre\DAV\Client {
-
- protected $requestTimeout;
-
- protected $verifyHost;
-
- /**
- * Sets the request timeout or 0 to disable timeout.
- * @param integer $timeout in seconds or 0 to disable
- */
- public function setRequestTimeout($timeout) {
- $this->requestTimeout = (int)$timeout;
- }
-
- /**
- * Sets the CURLOPT_SSL_VERIFYHOST setting
- * @param integer $value value to set CURLOPT_SSL_VERIFYHOST to
- */
- public function setVerifyHost($value) {
- $this->verifyHost = $value;
- }
-
- protected function curlRequest($url, $settings) {
- if ($this->requestTimeout > 0) {
- $settings[CURLOPT_TIMEOUT] = $this->requestTimeout;
- }
- if (!is_null($this->verifyHost)) {
- $settings[CURLOPT_SSL_VERIFYHOST] = $this->verifyHost;
- }
- return parent::curlRequest($url, $settings);
- }
-}
diff --git a/lib/private/db.php b/lib/private/db.php
index b820281b8a3..dc25092e276 100644
--- a/lib/private/db.php
+++ b/lib/private/db.php
@@ -22,20 +22,6 @@
define('MDB2_SCHEMA_DUMP_STRUCTURE', '1');
-class DatabaseException extends Exception {
- private $query;
-
- //FIXME getQuery seems to be unused, maybe use parent constructor with $message, $code and $previous
- public function __construct($message, $query = null){
- parent::__construct($message);
- $this->query = $query;
- }
-
- public function getQuery() {
- return $this->query;
- }
-}
-
/**
* This class manages the access to the database. It basically is a wrapper for
* Doctrine with some adaptions.
@@ -65,7 +51,7 @@ class OC_DB {
* @param int $limit
* @param int $offset
* @param bool $isManipulation
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
* @return OC_DB_StatementWrapper prepared SQL query
*
* SQL query via Doctrine prepare(), needs to be execute()'d!
@@ -82,7 +68,7 @@ class OC_DB {
try {
$result =$connection->prepare($query, $limit, $offset);
} catch (\Doctrine\DBAL\DBALException $e) {
- throw new \DatabaseException($e->getMessage(), $query);
+ throw new \OC\DatabaseException($e->getMessage(), $query);
}
// differentiate between query and manipulation
$result = new OC_DB_StatementWrapper($result, $isManipulation);
@@ -123,7 +109,7 @@ class OC_DB {
* .. or a simple sql query string
* @param array $parameters
* @return OC_DB_StatementWrapper
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
static public function executeAudited( $stmt, array $parameters = null) {
if (is_string($stmt)) {
@@ -132,7 +118,7 @@ class OC_DB {
// TODO try to convert LIMIT OFFSET notation to parameters, see fixLimitClauseForMSSQL
$message = 'LIMIT and OFFSET are forbidden for portability reasons,'
. ' pass an array with \'limit\' and \'offset\' instead';
- throw new DatabaseException($message);
+ throw new \OC\DatabaseException($message);
}
$stmt = array('sql' => $stmt, 'limit' => null, 'offset' => null);
}
@@ -140,7 +126,7 @@ class OC_DB {
// convert to prepared statement
if ( ! array_key_exists('sql', $stmt) ) {
$message = 'statement array must at least contain key \'sql\'';
- throw new DatabaseException($message);
+ throw new \OC\DatabaseException($message);
}
if ( ! array_key_exists('limit', $stmt) ) {
$stmt['limit'] = null;
@@ -160,7 +146,7 @@ class OC_DB {
} else {
$message = 'Expected a prepared statement or array got ' . gettype($stmt);
}
- throw new DatabaseException($message);
+ throw new \OC\DatabaseException($message);
}
return $result;
}
@@ -169,7 +155,7 @@ class OC_DB {
* gets last value of autoincrement
* @param string $table The optional table name (will replace *PREFIX*) and add sequence suffix
* @return string id
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*
* \Doctrine\DBAL\Connection lastInsertId
*
@@ -277,16 +263,7 @@ class OC_DB {
*/
public static function dropTable($tableName) {
$connection = \OC::$server->getDatabaseConnection();
- $tableName = OC_Config::getValue('dbtableprefix', 'oc_' ) . trim($tableName);
-
- $connection->beginTransaction();
-
- $platform = $connection->getDatabasePlatform();
- $sql = $platform->getDropTableSQL($platform->quoteIdentifier($tableName));
-
- $connection->executeQuery($sql);
-
- $connection->commit();
+ $connection->dropTable($tableName);
}
/**
@@ -312,7 +289,7 @@ class OC_DB {
* @param mixed $result
* @param string $message
* @return void
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
public static function raiseExceptionOnError($result, $message = null) {
if(self::isError($result)) {
@@ -321,7 +298,7 @@ class OC_DB {
} else {
$message .= ', Root cause:' . self::getErrorMessage($result);
}
- throw new DatabaseException($message, self::getErrorCode($result));
+ throw new \OC\DatabaseException($message, self::getErrorCode($result));
}
}
@@ -345,45 +322,10 @@ class OC_DB {
*
* @param string $table
* @return bool
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
public static function tableExists($table) {
-
- $table = OC_Config::getValue('dbtableprefix', 'oc_' ) . trim($table);
-
- $dbType = OC_Config::getValue( 'dbtype', 'sqlite' );
- switch ($dbType) {
- case 'sqlite':
- case 'sqlite3':
- $sql = "SELECT name FROM sqlite_master "
- . "WHERE type = 'table' AND name = ? "
- . "UNION ALL SELECT name FROM sqlite_temp_master "
- . "WHERE type = 'table' AND name = ?";
- $result = \OC_DB::executeAudited($sql, array($table, $table));
- break;
- case 'mysql':
- $sql = 'SHOW TABLES LIKE ?';
- $result = \OC_DB::executeAudited($sql, array($table));
- break;
- case 'pgsql':
- $sql = 'SELECT tablename AS table_name, schemaname AS schema_name '
- . 'FROM pg_tables WHERE schemaname NOT LIKE \'pg_%\' '
- . 'AND schemaname != \'information_schema\' '
- . 'AND tablename = ?';
- $result = \OC_DB::executeAudited($sql, array($table));
- break;
- case 'oci':
- $sql = 'SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = ?';
- $result = \OC_DB::executeAudited($sql, array($table));
- break;
- case 'mssql':
- $sql = 'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ?';
- $result = \OC_DB::executeAudited($sql, array($table));
- break;
- default:
- throw new DatabaseException("Unknown database type: $dbType");
- }
-
- return $result->fetchOne() === $table;
+ $connection = \OC::$server->getDatabaseConnection();
+ return $connection->tableExists($table);
}
}
diff --git a/lib/private/db/adapter.php b/lib/private/db/adapter.php
index 972008776f6..58b3514b922 100644
--- a/lib/private/db/adapter.php
+++ b/lib/private/db/adapter.php
@@ -43,6 +43,7 @@ class Adapter {
* insert the @input values when they do not exist yet
* @param string $table name
* @param array $input key->value pair, key has to be sanitized properly
+ * @throws \OC\HintException
* @return int count of inserted rows
*/
public function insertIfNotExist($table, $input) {
@@ -70,8 +71,13 @@ class Adapter {
$entry = 'DB Error: "'.$e->getMessage() . '"<br />';
$entry .= 'Offending command was: ' . $query.'<br />';
\OC_Log::write('core', $entry, \OC_Log::FATAL);
- error_log('DB error: ' . $entry);
- \OC_Template::printErrorPage( $entry );
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
}
}
diff --git a/lib/private/db/adaptersqlite.php b/lib/private/db/adaptersqlite.php
index 3471fcf4042..c5dfa85aaac 100644
--- a/lib/private/db/adaptersqlite.php
+++ b/lib/private/db/adaptersqlite.php
@@ -41,8 +41,13 @@ class AdapterSqlite extends Adapter {
$entry = 'DB Error: "'.$e->getMessage() . '"<br />';
$entry .= 'Offending command was: ' . $query . '<br />';
\OC_Log::write('core', $entry, \OC_Log::FATAL);
- error_log('DB error: '.$entry);
- \OC_Template::printErrorPage( $entry );
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
if ($stmt->fetchColumn() === '0') {
@@ -60,8 +65,13 @@ class AdapterSqlite extends Adapter {
$entry = 'DB Error: "'.$e->getMessage() . '"<br />';
$entry .= 'Offending command was: ' . $query.'<br />';
\OC_Log::write('core', $entry, \OC_Log::FATAL);
- error_log('DB error: ' . $entry);
- \OC_Template::printErrorPage( $entry );
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
return $result;
diff --git a/lib/private/db/connection.php b/lib/private/db/connection.php
index a6cdf858899..f2fcd8730af 100644
--- a/lib/private/db/connection.php
+++ b/lib/private/db/connection.php
@@ -7,6 +7,7 @@
*/
namespace OC\DB;
+use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\Cache\QueryCacheProfile;
@@ -24,6 +25,15 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
*/
protected $adapter;
+ public function connect() {
+ try {
+ return parent::connect();
+ } catch (DBALException $e) {
+ // throw a new exception to prevent leaking info from the stacktrace
+ throw new DBALException($e->getMessage(), $e->getCode());
+ }
+ }
+
/**
* Initializes a new instance of the Connection class.
*
@@ -142,6 +152,7 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
* Insert a row if a matching row doesn't exists.
* @param string $table. The table to insert into in the form '*PREFIX*tableName'
* @param array $input. An array of fieldname/value pairs
+ * @throws \OC\HintException
* @return bool The return value from execute()
*/
public function insertIfNotExist($table, $input) {
@@ -164,6 +175,31 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
return $msg;
}
+ /**
+ * Drop a table from the database if it exists
+ *
+ * @param string $table table name without the prefix
+ */
+ public function dropTable($table) {
+ $table = $this->tablePrefix . trim($table);
+ $schema = $this->getSchemaManager();
+ if($schema->tablesExist(array($table))) {
+ $schema->dropTable($table);
+ }
+ }
+
+ /**
+ * Check if a table exists
+ *
+ * @param string $table table name without the prefix
+ * @return bool
+ */
+ public function tableExists($table){
+ $table = $this->tablePrefix . trim($table);
+ $schema = $this->getSchemaManager();
+ return $schema->tablesExist(array($table));
+ }
+
// internal use
/**
* @param string $statement
diff --git a/lib/private/db/connectionfactory.php b/lib/private/db/connectionfactory.php
index f6253e09b95..9c75baf887d 100644
--- a/lib/private/db/connectionfactory.php
+++ b/lib/private/db/connectionfactory.php
@@ -90,7 +90,8 @@ class ConnectionFactory {
$eventManager->addEventSubscriber(new \Doctrine\DBAL\Event\Listeners\OracleSessionInit);
break;
case 'sqlite3':
- $eventManager->addEventSubscriber(new SQLiteSessionInit);
+ $journalMode = $additionalConnectionParams['sqlite.journal_mode'];
+ $eventManager->addEventSubscriber(new SQLiteSessionInit(true, $journalMode));
break;
}
$connection = \Doctrine\DBAL\DriverManager::getConnection(
@@ -122,23 +123,23 @@ class ConnectionFactory {
/**
* Create the connection parameters for the config
*
- * @param \OCP\IConfig $config
+ * @param \OC\SystemConfig $config
* @return array
*/
public function createConnectionParams($config) {
- $type = $config->getSystemValue('dbtype', 'sqlite');
+ $type = $config->getValue('dbtype', 'sqlite');
$connectionParams = array(
- 'user' => $config->getSystemValue('dbuser', ''),
- 'password' => $config->getSystemValue('dbpassword', ''),
+ 'user' => $config->getValue('dbuser', ''),
+ 'password' => $config->getValue('dbpassword', ''),
);
- $name = $config->getSystemValue('dbname', 'owncloud');
+ $name = $config->getValue('dbname', 'owncloud');
if ($this->normalizeType($type) === 'sqlite3') {
- $datadir = $config->getSystemValue("datadirectory", \OC::$SERVERROOT . '/data');
+ $datadir = $config->getValue("datadirectory", \OC::$SERVERROOT . '/data');
$connectionParams['path'] = $datadir . '/' . $name . '.db';
} else {
- $host = $config->getSystemValue('dbhost', '');
+ $host = $config->getValue('dbhost', '');
if (strpos($host, ':')) {
// Host variable may carry a port or socket.
list($host, $portOrSocket) = explode(':', $host, 2);
@@ -152,10 +153,11 @@ class ConnectionFactory {
$connectionParams['dbname'] = $name;
}
- $connectionParams['tablePrefix'] = $config->getSystemValue('dbtableprefix', 'oc_');
+ $connectionParams['tablePrefix'] = $config->getValue('dbtableprefix', 'oc_');
+ $connectionParams['sqlite.journal_mode'] = $config->getValue('sqlite.journal_mode', 'WAL');
//additional driver options, eg. for mysql ssl
- $driverOptions = $config->getSystemValue('dbdriveroptions', null);
+ $driverOptions = $config->getValue('dbdriveroptions', null);
if ($driverOptions) {
$connectionParams['driverOptions'] = $driverOptions;
}
diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php
index 632e320576c..358360d0b46 100644
--- a/lib/private/db/mdb2schemamanager.php
+++ b/lib/private/db/mdb2schemamanager.php
@@ -36,9 +36,7 @@ class MDB2SchemaManager {
* TODO: write more documentation
*/
public function getDbStructure($file, $mode = MDB2_SCHEMA_DUMP_STRUCTURE) {
- $sm = $this->conn->getSchemaManager();
-
- return \OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $sm);
+ return \OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $this->conn);
}
/**
@@ -49,7 +47,7 @@ class MDB2SchemaManager {
* TODO: write more documentation
*/
public function createDbFromStructure($file) {
- $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
+ $schemaReader = new MDB2SchemaReader(\OC::$server->getConfig(), $this->conn->getDatabasePlatform());
$toSchema = $schemaReader->loadSchemaFromFile($file);
return $this->executeSchemaChange($toSchema);
}
@@ -60,19 +58,19 @@ class MDB2SchemaManager {
public function getMigrator() {
$random = \OC::$server->getSecureRandom()->getMediumStrengthGenerator();
$platform = $this->conn->getDatabasePlatform();
+ $config = \OC::$server->getConfig();
if ($platform instanceof SqlitePlatform) {
- $config = \OC::$server->getConfig();
return new SQLiteMigrator($this->conn, $random, $config);
} else if ($platform instanceof OraclePlatform) {
- return new OracleMigrator($this->conn, $random);
+ return new OracleMigrator($this->conn, $random, $config);
} else if ($platform instanceof MySqlPlatform) {
- return new MySQLMigrator($this->conn, $random);
+ return new MySQLMigrator($this->conn, $random, $config);
} else if ($platform instanceof SQLServerPlatform) {
- return new MsSqlMigrator($this->conn, $random);
+ return new MsSqlMigrator($this->conn, $random, $config);
} else if ($platform instanceof PostgreSqlPlatform) {
- return new Migrator($this->conn, $random);
+ return new Migrator($this->conn, $random, $config);
} else {
- return new NoCheckMigrator($this->conn, $random);
+ return new NoCheckMigrator($this->conn, $random, $config);
}
}
@@ -83,7 +81,7 @@ class MDB2SchemaManager {
*/
private function readSchemaFromFile($file) {
$platform = $this->conn->getDatabasePlatform();
- $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $platform);
+ $schemaReader = new MDB2SchemaReader(\OC::$server->getConfig(), $platform);
return $schemaReader->loadSchemaFromFile($file);
}
@@ -131,7 +129,7 @@ class MDB2SchemaManager {
* @param string $file the xml file describing the tables
*/
public function removeDBStructure($file) {
- $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
+ $schemaReader = new MDB2SchemaReader(\OC::$server->getConfig(), $this->conn->getDatabasePlatform());
$fromSchema = $schemaReader->loadSchemaFromFile($file);
$toSchema = clone $fromSchema;
/** @var $table \Doctrine\DBAL\Schema\Table */
diff --git a/lib/private/db/mdb2schemareader.php b/lib/private/db/mdb2schemareader.php
index 288eef5cda0..7dd4168fb6e 100644
--- a/lib/private/db/mdb2schemareader.php
+++ b/lib/private/db/mdb2schemareader.php
@@ -8,6 +8,9 @@
namespace OC\DB;
+use Doctrine\DBAL\Platforms\AbstractPlatform;
+use OCP\IConfig;
+
class MDB2SchemaReader {
/**
* @var string $DBNAME
@@ -25,13 +28,13 @@ class MDB2SchemaReader {
protected $platform;
/**
- * @param \OC\Config $config
+ * @param \OCP\IConfig $config
* @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform
*/
- public function __construct($config, $platform) {
+ public function __construct(IConfig $config, AbstractPlatform $platform) {
$this->platform = $platform;
- $this->DBNAME = $config->getValue('dbname', 'owncloud');
- $this->DBTABLEPREFIX = $config->getValue('dbtableprefix', 'oc_');
+ $this->DBNAME = $config->getSystemValue('dbname', 'owncloud');
+ $this->DBTABLEPREFIX = $config->getSystemValue('dbtableprefix', 'oc_');
}
/**
diff --git a/lib/private/db/mdb2schemawriter.php b/lib/private/db/mdb2schemawriter.php
index a2a62a81475..a42cd86ba54 100644
--- a/lib/private/db/mdb2schemawriter.php
+++ b/lib/private/db/mdb2schemawriter.php
@@ -10,16 +10,22 @@ class OC_DB_MDB2SchemaWriter {
/**
* @param string $file
- * @param \Doctrine\DBAL\Schema\AbstractSchemaManager $sm
+ * @param \OC\DB\Connection $conn
* @return bool
*/
- static public function saveSchemaToFile($file, $sm) {
+ static public function saveSchemaToFile($file, \OC\DB\Connection $conn) {
+ $config = \OC::$server->getConfig();
+
$xml = new SimpleXMLElement('<database/>');
- $xml->addChild('name', OC_Config::getValue( "dbname", "owncloud" ));
+ $xml->addChild('name', $config->getSystemValue('dbname', 'owncloud'));
$xml->addChild('create', 'true');
$xml->addChild('overwrite', 'false');
$xml->addChild('charset', 'utf8');
- foreach ($sm->listTables() as $table) {
+
+ $conn->getConfiguration()->
+ setFilterSchemaAssetsExpression('/^' . $config->getSystemValue('dbtableprefix', 'oc_') . '/');
+
+ foreach ($conn->getSchemaManager()->listTables() as $table) {
self::saveTable($table, $xml->addChild('table'));
}
file_put_contents($file, $xml->asXML());
diff --git a/lib/private/db/migrator.php b/lib/private/db/migrator.php
index 31c648a9b65..8ccc02e36a5 100644
--- a/lib/private/db/migrator.php
+++ b/lib/private/db/migrator.php
@@ -14,6 +14,7 @@ use \Doctrine\DBAL\Schema\Table;
use \Doctrine\DBAL\Schema\Schema;
use \Doctrine\DBAL\Schema\SchemaConfig;
use \Doctrine\DBAL\Schema\Comparator;
+use OCP\IConfig;
use OCP\Security\ISecureRandom;
class Migrator {
@@ -28,13 +29,18 @@ class Migrator {
*/
private $random;
+ /** @var IConfig */
+ protected $config;
+
/**
* @param \Doctrine\DBAL\Connection $connection
* @param ISecureRandom $random
+ * @param IConfig $config
*/
- public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random) {
+ public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, IConfig $config) {
$this->connection = $connection;
$this->random = $random;
+ $this->config = $config;
}
/**
@@ -70,6 +76,8 @@ class Migrator {
*/
$tables = $targetSchema->getTables();
+ $this->connection->getConfiguration()->
+ setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
$existingTables = $this->connection->getSchemaManager()->listTableNames();
foreach ($tables as $table) {
@@ -153,6 +161,8 @@ class Migrator {
}
protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) {
+ $connection->getConfiguration()->
+ setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
$sourceSchema = $connection->getSchemaManager()->createSchema();
// remove tables we don't know about
diff --git a/lib/private/db/mssqlmigrator.php b/lib/private/db/mssqlmigrator.php
index 28d8c6dc06f..fdf36476d27 100644
--- a/lib/private/db/mssqlmigrator.php
+++ b/lib/private/db/mssqlmigrator.php
@@ -17,7 +17,7 @@ class MsSqlMigrator extends Migrator {
*/
public function migrate(Schema $targetSchema) {
throw new MigrationException('',
- 'Database migration is required to continue operations. Please contact support@owncloud.com to get the required sql migration scripts to be applied.');
+ 'Database migration is required to continue operation. This feature is provided within the Enterprise Edition.');
}
}
diff --git a/lib/private/db/oracleconnection.php b/lib/private/db/oracleconnection.php
index e2fc4644f47..726ac1e4b6d 100644
--- a/lib/private/db/oracleconnection.php
+++ b/lib/private/db/oracleconnection.php
@@ -20,7 +20,7 @@ class OracleConnection extends Connection {
return $return;
}
- /*
+ /**
* {@inheritDoc}
*/
public function insert($tableName, array $data, array $types = array()) {
@@ -29,7 +29,7 @@ class OracleConnection extends Connection {
return parent::insert($tableName, $data, $types);
}
- /*
+ /**
* {@inheritDoc}
*/
public function update($tableName, array $data, array $identifier, array $types = array()) {
@@ -39,12 +39,39 @@ class OracleConnection extends Connection {
return parent::update($tableName, $data, $identifier, $types);
}
- /*
+ /**
* {@inheritDoc}
*/
- public function delete($tableName, array $identifier) {
- $tableName = $this->quoteIdentifier($tableName);
+ public function delete($tableExpression, array $identifier, array $types = array()) {
+ $tableName = $this->quoteIdentifier($tableExpression);
$identifier = $this->quoteKeys($identifier);
return parent::delete($tableName, $identifier);
}
+
+ /**
+ * Drop a table from the database if it exists
+ *
+ * @param string $table table name without the prefix
+ */
+ public function dropTable($table) {
+ $table = $this->tablePrefix . trim($table);
+ $table = $this->quoteIdentifier($table);
+ $schema = $this->getSchemaManager();
+ if($schema->tablesExist(array($table))) {
+ $schema->dropTable($table);
+ }
+ }
+
+ /**
+ * Check if a table exists
+ *
+ * @param string $table table name without the prefix
+ * @return bool
+ */
+ public function tableExists($table){
+ $table = $this->tablePrefix . trim($table);
+ $table = $this->quoteIdentifier($table);
+ $schema = $this->getSchemaManager();
+ return $schema->tablesExist(array($table));
+ }
}
diff --git a/lib/private/db/pgsqltools.php b/lib/private/db/pgsqltools.php
index c3ac140594d..f3204d4c7b6 100644
--- a/lib/private/db/pgsqltools.php
+++ b/lib/private/db/pgsqltools.php
@@ -8,11 +8,23 @@
*/
namespace OC\DB;
+use OCP\IConfig;
/**
* Various PostgreSQL specific helper functions.
*/
class PgSqlTools {
+
+ /** @var \OCP\IConfig */
+ private $config;
+
+ /**
+ * @param \OCP\IConfig $config
+ */
+ public function __construct(IConfig $config) {
+ $this->config = $config;
+ }
+
/**
* @brief Resynchronizes all sequences of a database after using INSERTs
* without leaving out the auto-incremented column.
@@ -21,6 +33,9 @@ class PgSqlTools {
*/
public function resynchronizeDatabaseSequences(Connection $conn) {
$databaseName = $conn->getDatabase();
+ $conn->getConfiguration()->
+ setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
+
foreach ($conn->getSchemaManager()->listSequences() as $sequence) {
$sequenceName = $sequence->getName();
$sqlInfo = 'SELECT table_schema, table_name, column_name
diff --git a/lib/private/db/sqlitemigrator.php b/lib/private/db/sqlitemigrator.php
index 848e4986571..42b65634645 100644
--- a/lib/private/db/sqlitemigrator.php
+++ b/lib/private/db/sqlitemigrator.php
@@ -10,26 +10,10 @@ namespace OC\DB;
use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Schema\Schema;
-use OCP\Security\ISecureRandom;
class SQLiteMigrator extends Migrator {
/**
- * @var \OCP\IConfig
- */
- private $config;
-
- /**
- * @param \Doctrine\DBAL\Connection $connection
- * @param ISecureRandom $random
- * @param \OCP\IConfig $config
- */
- public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, \OCP\IConfig $config) {
- parent::__construct($connection, $random);
- $this->config = $config;
- }
-
- /**
* @param \Doctrine\DBAL\Schema\Schema $targetSchema
* @throws \OC\DB\MigrationException
*
diff --git a/lib/private/db/sqlitesessioninit.php b/lib/private/db/sqlitesessioninit.php
index 7e1166be95b..1fff22b883a 100644
--- a/lib/private/db/sqlitesessioninit.php
+++ b/lib/private/db/sqlitesessioninit.php
@@ -19,12 +19,19 @@ class SQLiteSessionInit implements EventSubscriber {
private $caseSensitiveLike;
/**
+ * @var string
+ */
+ private $journalMode;
+
+ /**
* Configure case sensitive like for each connection
*
* @param bool $caseSensitiveLike
+ * @param string $journalMode
*/
- public function __construct($caseSensitiveLike = true) {
+ public function __construct($caseSensitiveLike, $journalMode) {
$this->caseSensitiveLike = $caseSensitiveLike;
+ $this->journalMode = $journalMode;
}
/**
@@ -34,6 +41,7 @@ class SQLiteSessionInit implements EventSubscriber {
public function postConnect(ConnectionEventArgs $args) {
$sensitive = ($this->caseSensitiveLike) ? 'true' : 'false';
$args->getConnection()->executeUpdate('PRAGMA case_sensitive_like = ' . $sensitive);
+ $args->getConnection()->executeUpdate('PRAGMA journal_mode = ' . $this->journalMode);
}
public function getSubscribedEvents() {
diff --git a/lib/private/db/statementwrapper.php b/lib/private/db/statementwrapper.php
index ad63de98e93..a85c0167e0b 100644
--- a/lib/private/db/statementwrapper.php
+++ b/lib/private/db/statementwrapper.php
@@ -64,7 +64,7 @@ class OC_DB_StatementWrapper {
} else {
$result = $this->statement->execute();
}
-
+
if ($result === false) {
return false;
}
@@ -158,14 +158,16 @@ class OC_DB_StatementWrapper {
OC_Log::write('core', $entry, OC_Log::FATAL);
OC_User::setUserId(null);
- // send http status 503
- header('HTTP/1.1 503 Service Temporarily Unavailable');
- header('Status: 503 Service Temporarily Unavailable');
- OC_Template::printErrorPage('Failed to connect to database');
- die ($entry);
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
}
-
+
/**
* provide an alias for fetch
*
diff --git a/lib/private/files.php b/lib/private/files.php
index 571d3215caa..496ba1baff0 100644
--- a/lib/private/files.php
+++ b/lib/private/files.php
@@ -24,17 +24,14 @@
// TODO: get rid of this using proper composer packages
require_once 'mcnetic/phpzipstreamer/ZipStreamer.php';
-class GET_TYPE {
- const FILE = 1;
- const ZIP_FILES = 2;
- const ZIP_DIR = 3;
-}
-
/**
* Class for file server access
*
*/
class OC_Files {
+ const FILE = 1;
+ const ZIP_FILES = 2;
+ const ZIP_DIR = 3;
/**
* @param string $filename
@@ -76,7 +73,7 @@ class OC_Files {
}
if (is_array($files)) {
- $get_type = GET_TYPE::ZIP_FILES;
+ $get_type = self::ZIP_FILES;
$basename = basename($dir);
if ($basename) {
$name = $basename . '.zip';
@@ -88,7 +85,7 @@ class OC_Files {
} else {
$filename = $dir . '/' . $files;
if (\OC\Files\Filesystem::is_dir($dir . '/' . $files)) {
- $get_type = GET_TYPE::ZIP_DIR;
+ $get_type = self::ZIP_DIR;
// downloading root ?
if ($files === '') {
$name = 'download.zip';
@@ -97,12 +94,12 @@ class OC_Files {
}
} else {
- $get_type = GET_TYPE::FILE;
+ $get_type = self::FILE;
$name = $files;
}
}
- if ($get_type === GET_TYPE::FILE) {
+ if ($get_type === self::FILE) {
$zip = false;
if ($xsendfile && OC_App::isEnabled('files_encryption')) {
$xsendfile = false;
@@ -127,7 +124,7 @@ class OC_Files {
if ($zip) {
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
- if ($get_type === GET_TYPE::ZIP_FILES) {
+ if ($get_type === self::ZIP_FILES) {
foreach ($files as $file) {
$file = $dir . '/' . $file;
if (\OC\Files\Filesystem::is_file($file)) {
@@ -138,7 +135,7 @@ class OC_Files {
self::zipAddDir($file, $zip);
}
}
- } elseif ($get_type === GET_TYPE::ZIP_DIR) {
+ } elseif ($get_type === self::ZIP_DIR) {
$file = $dir . '/' . $files;
self::zipAddDir($file, $zip);
}
@@ -164,12 +161,11 @@ class OC_Files {
* @param false|string $filename
*/
private static function addSendfileHeader($filename) {
+ $filename = \OC\Files\Filesystem::getLocalFile($filename);
if (isset($_SERVER['MOD_X_SENDFILE_ENABLED'])) {
- $filename = \OC\Files\Filesystem::getLocalFile($filename);
header("X-Sendfile: " . $filename);
}
if (isset($_SERVER['MOD_X_SENDFILE2_ENABLED'])) {
- $filename = \OC\Files\Filesystem::getLocalFile($filename);
if (isset($_SERVER['HTTP_RANGE']) &&
preg_match("/^bytes=([0-9]+)-([0-9]*)$/", $_SERVER['HTTP_RANGE'], $range)) {
$filelength = filesize($filename);
@@ -185,7 +181,6 @@ class OC_Files {
}
if (isset($_SERVER['MOD_X_ACCEL_REDIRECT_ENABLED'])) {
- $filename = \OC::$WEBROOT . '/data' . \OC\Files\Filesystem::getRoot() . $filename;
header("X-Accel-Redirect: " . $filename);
}
}
diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php
index 7ea00325a10..9df64db7f07 100644
--- a/lib/private/files/cache/cache.php
+++ b/lib/private/files/cache/cache.php
@@ -71,7 +71,7 @@ class Cache {
if (empty(self::$mimetypeIds)) {
$this->loadMimetypes();
}
-
+
if (!isset(self::$mimetypeIds[$mime])) {
try{
$result = \OC_DB::executeAudited('INSERT INTO `*PREFIX*mimetypes`(`mimetype`) VALUES(?)', array($mime));
@@ -82,8 +82,8 @@ class Cache {
\OC_Log::write('core', 'Exception during mimetype insertion: ' . $e->getmessage(), \OC_Log::DEBUG);
return -1;
}
- }
-
+ }
+
return self::$mimetypeIds[$mime];
}
@@ -371,7 +371,7 @@ class Cache {
$this->remove($child['path']);
}
}
-
+
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?';
\OC_DB::executeAudited($sql, array($entry['fileid']));
}
@@ -504,6 +504,51 @@ class Cache {
}
/**
+ * Search for files by tag of a given users.
+ *
+ * Note that every user can tag files differently.
+ *
+ * @param string|int $tag name or tag id
+ * @param string $userId owner of the tags
+ * @return array file data
+ */
+ public function searchByTag($tag, $userId) {
+ $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, ' .
+ '`mimetype`, `mimepart`, `size`, `mtime`, ' .
+ '`encrypted`, `unencrypted_size`, `etag`, `permissions` ' .
+ 'FROM `*PREFIX*filecache` `file`, ' .
+ '`*PREFIX*vcategory_to_object` `tagmap`, ' .
+ '`*PREFIX*vcategory` `tag` ' .
+ // JOIN filecache to vcategory_to_object
+ 'WHERE `file`.`fileid` = `tagmap`.`objid` '.
+ // JOIN vcategory_to_object to vcategory
+ 'AND `tagmap`.`type` = `tag`.`type` ' .
+ 'AND `tagmap`.`categoryid` = `tag`.`id` ' .
+ // conditions
+ 'AND `file`.`storage` = ? '.
+ 'AND `tag`.`type` = \'files\' ' .
+ 'AND `tag`.`uid` = ? ';
+ if (is_int($tag)) {
+ $sql .= 'AND `tag`.`id` = ? ';
+ } else {
+ $sql .= 'AND `tag`.`category` = ? ';
+ }
+ $result = \OC_DB::executeAudited(
+ $sql,
+ array(
+ $this->getNumericStorageId(),
+ $userId,
+ $tag
+ )
+ );
+ $files = array();
+ while ($row = $result->fetchRow()) {
+ $files[] = $row;
+ }
+ return $files;
+ }
+
+ /**
* update the folder size and the size of all parent folders
*
* @param string|boolean $path
@@ -585,7 +630,7 @@ class Cache {
/**
* find a folder in the cache which has not been fully scanned
*
- * If multiply incomplete folders are in the cache, the one with the highest id will be returned,
+ * If multiple incomplete folders are in the cache, the one with the highest id will be returned,
* use the one with the highest id gives the best result with the background scanner, since that is most
* likely the folder where we stopped scanning previously
*
diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php
index bd25d8a944c..d24b7459851 100644
--- a/lib/private/files/cache/scanner.php
+++ b/lib/private/files/cache/scanner.php
@@ -219,8 +219,10 @@ class Scanner extends BasicEmitter {
$reuse = ($recursive === self::SCAN_SHALLOW) ? self::REUSE_ETAG | self::REUSE_SIZE : self::REUSE_ETAG;
}
$data = $this->scanFile($path, $reuse);
- $size = $this->scanChildren($path, $recursive, $reuse);
- $data['size'] = $size;
+ if ($data !== null) {
+ $size = $this->scanChildren($path, $recursive, $reuse);
+ $data['size'] = $size;
+ }
return $data;
}
diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php
index c303ff24b1f..31a4a7c21e7 100644
--- a/lib/private/files/cache/updater.php
+++ b/lib/private/files/cache/updater.php
@@ -30,6 +30,11 @@ class Updater {
$this->propagator = new ChangePropagator($view);
}
+ public function propagate($path, $time = null) {
+ $this->propagator->addChange($path);
+ $this->propagator->propagateChanges($time);
+ }
+
/**
* Update the cache for $path
*
diff --git a/lib/private/files/cache/wrapper/cachejail.php b/lib/private/files/cache/wrapper/cachejail.php
new file mode 100644
index 00000000000..f4ffc67d76a
--- /dev/null
+++ b/lib/private/files/cache/wrapper/cachejail.php
@@ -0,0 +1,267 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache\Wrapper;
+
+/**
+ * Jail to a subdirectory of the wrapped cache
+ */
+class CacheJail extends CacheWrapper {
+ /**
+ * @var string
+ */
+ protected $root;
+
+ /**
+ * @param \OC\Files\Cache\Cache $cache
+ * @param string $root
+ */
+ public function __construct($cache, $root) {
+ parent::__construct($cache);
+ $this->root = $root;
+ }
+
+ protected function getSourcePath($path) {
+ if ($path === '') {
+ return $this->root;
+ } else {
+ return $this->root . '/' . $path;
+ }
+ }
+
+ /**
+ * @param string $path
+ * @return null|string the jailed path or null if the path is outside the jail
+ */
+ protected function getJailedPath($path) {
+ $rootLength = strlen($this->root) + 1;
+ if ($path === $this->root) {
+ return '';
+ } else if (substr($path, 0, $rootLength) === $this->root . '/') {
+ return substr($path, $rootLength);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param array $entry
+ * @return array
+ */
+ protected function formatCacheEntry($entry) {
+ if (isset($entry['path'])) {
+ $entry['path'] = $this->getJailedPath($entry['path']);
+ }
+ return $entry;
+ }
+
+ protected function filterCacheEntry($entry) {
+ $rootLength = strlen($this->root) + 1;
+ return ($entry['path'] === $this->root) or (substr($entry['path'], 0, $rootLength) === $this->root . '/');
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string /int $file
+ * @return array|false
+ */
+ public function get($file) {
+ if (is_string($file) or $file == '') {
+ $file = $this->getSourcePath($file);
+ }
+ return parent::get($file);
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ return $this->cache->put($this->getSourcePath($file), $data);
+ }
+
+ /**
+ * update the metadata in the cache
+ *
+ * @param int $id
+ * @param array $data
+ */
+ public function update($id, array $data) {
+ $this->cache->update($this->getSourcePath($id), $data);
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ return $this->cache->getId($this->getSourcePath($file));
+ }
+
+ /**
+ * get the id of the parent folder of a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getParentId($file) {
+ if ($file === '') {
+ return -1;
+ } else {
+ return $this->cache->getParentId($this->getSourcePath($file));
+ }
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ return $this->cache->inCache($this->getSourcePath($file));
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ $this->cache->remove($this->getSourcePath($file));
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ $this->cache->move($this->getSourcePath($source), $this->getSourcePath($target));
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ $this->cache->remove($this->root);
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ return $this->cache->getStatus($this->getSourcePath($file));
+ }
+
+ private function formatSearchResults($results) {
+ $results = array_filter($results, array($this, 'filterCacheEntry'));
+ $results = array_values($results);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array an array of file data
+ */
+ public function search($pattern) {
+ $results = $this->cache->search($pattern);
+ return $this->formatSearchResults($results);
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $mimetype
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ $results = $this->cache->searchByMime($mimetype);
+ return $this->formatSearchResults($results);
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string|int $tag name or tag id
+ * @param string $userId owner of the tags
+ * @return array
+ */
+ public function searchByTag($tag, $userId) {
+ $results = $this->cache->searchByTag($tag, $userId);
+ return $this->formatSearchResults($results);
+ }
+
+ /**
+ * update the folder size and the size of all parent folders
+ *
+ * @param string|boolean $path
+ * @param array $data (optional) meta data of the folder
+ */
+ public function correctFolderSize($path, $data = null) {
+ $this->cache->correctFolderSize($this->getSourcePath($path), $data);
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @param array $entry (optional) meta data of the folder
+ * @return int
+ */
+ public function calculateFolderSize($path, $entry = null) {
+ return $this->cache->calculateFolderSize($this->getSourcePath($path), $entry);
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ // not supported
+ return array();
+ }
+
+ /**
+ * find a folder in the cache which has not been fully scanned
+ *
+ * If multiply incomplete folders are in the cache, the one with the highest id will be returned,
+ * use the one with the highest id gives the best result with the background scanner, since that is most
+ * likely the folder where we stopped scanning previously
+ *
+ * @return string|bool the path of the folder or false when no folder matched
+ */
+ public function getIncomplete() {
+ // not supported
+ return false;
+ }
+
+ /**
+ * get the path of a file on this storage by it's id
+ *
+ * @param int $id
+ * @return string|null
+ */
+ public function getPathById($id) {
+ $path = $this->cache->getPathById($id);
+ return $this->getJailedPath($path);
+ }
+}
diff --git a/lib/private/files/cache/wrapper/cachepermissionsmask.php b/lib/private/files/cache/wrapper/cachepermissionsmask.php
new file mode 100644
index 00000000000..6ce6a4ebc44
--- /dev/null
+++ b/lib/private/files/cache/wrapper/cachepermissionsmask.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache\Wrapper;
+
+class CachePermissionsMask extends CacheWrapper {
+ /**
+ * @var int
+ */
+ protected $mask;
+
+ /**
+ * @param \OC\Files\Cache\Cache $cache
+ * @param int $mask
+ */
+ public function __construct($cache, $mask) {
+ parent::__construct($cache);
+ $this->mask = $mask;
+ }
+
+ protected function formatCacheEntry($entry) {
+ if (isset($entry['permissions'])) {
+ $entry['permissions'] &= $this->mask;
+ }
+ return $entry;
+ }
+}
diff --git a/lib/private/files/cache/wrapper/cachewrapper.php b/lib/private/files/cache/wrapper/cachewrapper.php
new file mode 100644
index 00000000000..83811520e4b
--- /dev/null
+++ b/lib/private/files/cache/wrapper/cachewrapper.php
@@ -0,0 +1,268 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache\Wrapper;
+
+use OC\Files\Cache\Cache;
+
+class CacheWrapper extends Cache {
+ /**
+ * @var \OC\Files\Cache\Cache
+ */
+ protected $cache;
+
+ /**
+ * @param \OC\Files\Cache\Cache $cache
+ */
+ public function __construct($cache) {
+ $this->cache = $cache;
+ }
+
+ /**
+ * Make it easy for wrappers to modify every returned cache entry
+ *
+ * @param array $entry
+ * @return array
+ */
+ protected function formatCacheEntry($entry) {
+ return $entry;
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string /int $file
+ * @return array|false
+ */
+ public function get($file) {
+ $result = $this->cache->get($file);
+ if ($result) {
+ $result = $this->formatCacheEntry($result);
+ }
+ return $result;
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param string $folder
+ * @return array
+ */
+ public function getFolderContents($folder) {
+ // cant do a simple $this->cache->.... call here since getFolderContentsById needs to be called on this
+ // and not the wrapped cache
+ $fileId = $this->getId($folder);
+ return $this->getFolderContentsById($fileId);
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param int $fileId the file id of the folder
+ * @return array
+ */
+ public function getFolderContentsById($fileId) {
+ $results = $this->cache->getFolderContentsById($fileId);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ return $this->cache->put($file, $data);
+ }
+
+ /**
+ * update the metadata in the cache
+ *
+ * @param int $id
+ * @param array $data
+ */
+ public function update($id, array $data) {
+ $this->cache->update($id, $data);
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ return $this->cache->getId($file);
+ }
+
+ /**
+ * get the id of the parent folder of a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getParentId($file) {
+ return $this->cache->getParentId($file);
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ return $this->cache->inCache($file);
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ $this->cache->remove($file);
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ $this->cache->move($source, $target);
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ $this->cache->clear();
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ return $this->cache->getStatus($file);
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array an array of file data
+ */
+ public function search($pattern) {
+ $results = $this->cache->search($pattern);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $mimetype
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ $results = $this->cache->searchByMime($mimetype);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * search for files by tag
+ *
+ * @param string|int $tag name or tag id
+ * @param string $userId owner of the tags
+ * @return array file data
+ */
+ public function searchByTag($tag, $userId) {
+ $results = $this->cache->searchByTag($tag, $userId);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * update the folder size and the size of all parent folders
+ *
+ * @param string|boolean $path
+ * @param array $data (optional) meta data of the folder
+ */
+ public function correctFolderSize($path, $data = null) {
+ $this->cache->correctFolderSize($path, $data);
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @param array $entry (optional) meta data of the folder
+ * @return int
+ */
+ public function calculateFolderSize($path, $entry = null) {
+ return $this->cache->calculateFolderSize($path, $entry);
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ return $this->cache->getAll();
+ }
+
+ /**
+ * find a folder in the cache which has not been fully scanned
+ *
+ * If multiple incomplete folders are in the cache, the one with the highest id will be returned,
+ * use the one with the highest id gives the best result with the background scanner, since that is most
+ * likely the folder where we stopped scanning previously
+ *
+ * @return string|bool the path of the folder or false when no folder matched
+ */
+ public function getIncomplete() {
+ return $this->cache->getIncomplete();
+ }
+
+ /**
+ * get the path of a file on this storage by it's id
+ *
+ * @param int $id
+ * @return string|null
+ */
+ public function getPathById($id) {
+ return $this->cache->getPathById($id);
+ }
+
+ /**
+ * Returns the numeric storage id
+ *
+ * @return int
+ */
+ public function getNumericStorageId() {
+ return $this->cache->getNumericStorageId();
+ }
+
+ /**
+ * get the storage id of the storage for a file and the internal path of the file
+ * unlike getPathById this does not limit the search to files on this storage and
+ * instead does a global search in the cache table
+ *
+ * @param int $id
+ * @return array, first element holding the storage id, second the path
+ */
+ static public function getById($id) {
+ return parent::getById($id);
+ }
+}
diff --git a/lib/private/files/config/mountprovidercollection.php b/lib/private/files/config/mountprovidercollection.php
new file mode 100644
index 00000000000..49d026f1bda
--- /dev/null
+++ b/lib/private/files/config/mountprovidercollection.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Config;
+
+use OCP\Files\Config\IMountProviderCollection;
+use OCP\Files\Config\IMountProvider;
+use OCP\Files\Storage\IStorageFactory;
+use OCP\IUser;
+
+class MountProviderCollection implements IMountProviderCollection {
+ /**
+ * @var \OCP\Files\Config\IMountProvider[]
+ */
+ private $providers = array();
+
+ /**
+ * @var \OCP\Files\Storage\IStorageFactory
+ */
+ private $loader;
+
+ /**
+ * @param \OCP\Files\Storage\IStorageFactory $loader
+ */
+ public function __construct(IStorageFactory $loader) {
+ $this->loader = $loader;
+ }
+
+ /**
+ * Get all configured mount points for the user
+ *
+ * @param \OCP\IUser $user
+ * @return \OCP\Files\Mount\IMountPoint[]
+ */
+ public function getMountsForUser(IUser $user) {
+ $loader = $this->loader;
+ return array_reduce($this->providers, function ($mounts, IMountProvider $provider) use ($user, $loader) {
+ return array_merge($mounts, $provider->getMountsForUser($user, $loader));
+ }, array());
+ }
+
+ /**
+ * Add a provider for mount points
+ *
+ * @param \OCP\Files\Config\IMountProvider $provider
+ */
+ public function registerProvider(IMountProvider $provider) {
+ $this->providers[] = $provider;
+ }
+}
diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php
index 8457a2d160f..e4a397dcca2 100644
--- a/lib/private/files/fileinfo.php
+++ b/lib/private/files/fileinfo.php
@@ -30,14 +30,23 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
private $internalPath;
/**
+ * @var \OCP\Files\Mount\IMountPoint
+ */
+ private $mount;
+
+ /**
* @param string|boolean $path
* @param Storage\Storage $storage
+ * @param string $internalPath
+ * @param array $data
+ * @param \OCP\Files\Mount\IMountPoint $mount
*/
- public function __construct($path, $storage, $internalPath, $data) {
+ public function __construct($path, $storage, $internalPath, $data, $mount) {
$this->path = $path;
$this->storage = $storage;
$this->internalPath = $internalPath;
$this->data = $data;
+ $this->mount = $mount;
}
public function offsetSet($offset, $value) {
@@ -122,7 +131,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
* @return int
*/
public function getSize() {
- return $this->data['size'];
+ return isset($this->data['size']) ? $this->data['size'] : 0;
}
/**
@@ -173,14 +182,14 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
* @return bool
*/
public function isReadable() {
- return $this->checkPermissions(\OCP\PERMISSION_READ);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_READ);
}
/**
* @return bool
*/
public function isUpdateable() {
- return $this->checkPermissions(\OCP\PERMISSION_UPDATE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE);
}
/**
@@ -189,25 +198,26 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
* @return bool
*/
public function isCreatable() {
- return $this->checkPermissions(\OCP\PERMISSION_CREATE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_CREATE);
}
/**
* @return bool
*/
public function isDeletable() {
- return $this->checkPermissions(\OCP\PERMISSION_DELETE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_DELETE);
}
/**
* @return bool
*/
public function isShareable() {
- return $this->checkPermissions(\OCP\PERMISSION_SHARE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_SHARE);
}
/**
* Check if a file or folder is shared
+ *
* @return bool
*/
public function isShared() {
@@ -229,4 +239,13 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
return false;
}
+
+ /**
+ * Get the mountpoint the file belongs to
+ *
+ * @return \OCP\Files\Mount\IMountPoint
+ */
+ public function getMountPoint() {
+ return $this->mount;
+ }
}
diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php
index c7dc99c55cb..ed2be59c092 100644
--- a/lib/private/files/filesystem.php
+++ b/lib/private/files/filesystem.php
@@ -30,7 +30,7 @@
namespace OC\Files;
-use OC\Files\Storage\Loader;
+use OC\Files\Storage\StorageFactory;
class Filesystem {
@@ -165,7 +165,7 @@ class Filesystem {
const signal_param_users = 'users';
/**
- * @var \OC\Files\Storage\Loader $loader
+ * @var \OC\Files\Storage\StorageFactory $loader
*/
private static $loader;
@@ -183,7 +183,7 @@ class Filesystem {
public static function getLoader() {
if (!self::$loader) {
- self::$loader = new Loader();
+ self::$loader = new StorageFactory();
}
return self::$loader;
}
@@ -250,7 +250,7 @@ class Filesystem {
/**
* @param string $id
- * @return Mount\Mount[]
+ * @return Mount\MountPoint[]
*/
public static function getMountByStorageId($id) {
if (!self::$mounts) {
@@ -261,7 +261,7 @@ class Filesystem {
/**
* @param int $id
- * @return Mount\Mount[]
+ * @return Mount\MountPoint[]
*/
public static function getMountByNumericId($id) {
if (!self::$mounts) {
@@ -370,6 +370,11 @@ class Filesystem {
self::mountCacheDir($user);
// Chance to mount for other storages
+ if($userObject) {
+ $mountConfigManager = \OC::$server->getMountProviderCollection();
+ $mounts = $mountConfigManager->getMountsForUser($userObject);
+ array_walk($mounts, array(self::$mounts, 'addMount'));
+ }
\OC_Hook::emit('OC_Filesystem', 'post_initMountPoints', array('user' => $user, 'user_dir' => $root));
}
@@ -447,7 +452,7 @@ class Filesystem {
if (!self::$mounts) {
\OC_Util::setupFS();
}
- $mount = new Mount\Mount($class, $mountpoint, $arguments, self::getLoader());
+ $mount = new Mount\MountPoint($class, $mountpoint, $arguments, self::getLoader());
self::$mounts->addMount($mount);
}
@@ -682,6 +687,15 @@ class Filesystem {
}
/**
+ * @param string|int $tag name or tag id
+ * @param string $userId owner of the tags
+ * @return FileInfo[] array or file info
+ */
+ static public function searchByTag($tag, $userId) {
+ return self::$defaultInstance->searchByTag($tag, $userId);
+ }
+
+ /**
* check if a file or folder has been updated since $time
*
* @param string $path
@@ -698,13 +712,22 @@ class Filesystem {
* @param bool $stripTrailingSlash
* @return string
*/
- public static function normalizePath($path, $stripTrailingSlash = true) {
+ public static function normalizePath($path, $stripTrailingSlash = true, $isAbsolutePath = false) {
if ($path == '') {
return '/';
}
+
//no windows style slashes
$path = str_replace('\\', '/', $path);
+ // When normalizing an absolute path, we need to ensure that the drive-letter
+ // is still at the beginning on windows
+ $windows_drive_letter = '';
+ if ($isAbsolutePath && \OC_Util::runningOnWindows() && preg_match('#^([a-zA-Z])$#', $path[0]) && $path[1] == ':' && $path[2] == '/') {
+ $windows_drive_letter = substr($path, 0, 2);
+ $path = substr($path, 2);
+ }
+
//add leading slash
if ($path[0] !== '/') {
$path = '/' . $path;
@@ -733,7 +756,7 @@ class Filesystem {
//normalize unicode if possible
$path = \OC_Util::normalizeUnicode($path);
- return $path;
+ return $windows_drive_letter . $path;
}
/**
diff --git a/lib/private/files/mount/manager.php b/lib/private/files/mount/manager.php
index 0ccf42941de..8472ebc976a 100644
--- a/lib/private/files/mount/manager.php
+++ b/lib/private/files/mount/manager.php
@@ -12,14 +12,14 @@ use \OC\Files\Filesystem;
class Manager {
/**
- * @var Mount[]
+ * @var MountPoint[]
*/
private $mounts = array();
/**
- * @param Mount $mount
+ * @param MountPoint $mount
*/
- public function addMount(Mount $mount) {
+ public function addMount(MountPoint $mount) {
$this->mounts[$mount->getMountPoint()] = $mount;
}
@@ -47,7 +47,7 @@ class Manager {
* Find the mount for $path
*
* @param string $path
- * @return Mount
+ * @return MountPoint
*/
public function find($path) {
\OC_Util::setupFS();
@@ -75,7 +75,7 @@ class Manager {
* Find all mounts in $path
*
* @param string $path
- * @return Mount[]
+ * @return MountPoint[]
*/
public function findIn($path) {
\OC_Util::setupFS();
@@ -99,7 +99,7 @@ class Manager {
* Find mounts by storage id
*
* @param string $id
- * @return Mount[]
+ * @return MountPoint[]
*/
public function findByStorageId($id) {
\OC_Util::setupFS();
@@ -116,7 +116,7 @@ class Manager {
}
/**
- * @return Mount[]
+ * @return MountPoint[]
*/
public function getAll() {
return $this->mounts;
@@ -126,7 +126,7 @@ class Manager {
* Find mounts by numeric storage id
*
* @param int $id
- * @return Mount[]
+ * @return MountPoint[]
*/
public function findByNumericId($id) {
$storageId = \OC\Files\Cache\Storage::getStorageId($id);
diff --git a/lib/private/files/mount/mount.php b/lib/private/files/mount/mountpoint.php
index 48c9d88c23c..77a51a17020 100644
--- a/lib/private/files/mount/mount.php
+++ b/lib/private/files/mount/mountpoint.php
@@ -9,40 +9,59 @@
namespace OC\Files\Mount;
use \OC\Files\Filesystem;
-use OC\Files\Storage\Loader;
+use OC\Files\Storage\StorageFactory;
use OC\Files\Storage\Storage;
+use OCP\Files\Mount\IMountPoint;
-class Mount {
+class MountPoint implements IMountPoint {
/**
* @var \OC\Files\Storage\Storage $storage
*/
protected $storage = null;
protected $class;
protected $storageId;
+
+ /**
+ * Configuration options for the storage backend
+ *
+ * @var array
+ */
protected $arguments = array();
protected $mountPoint;
/**
- * @var \OC\Files\Storage\Loader $loader
+ * Mount specific options
+ *
+ * @var array
+ */
+ protected $mountOptions = array();
+
+ /**
+ * @var \OC\Files\Storage\StorageFactory $loader
*/
private $loader;
/**
* @param string|\OC\Files\Storage\Storage $storage
* @param string $mountpoint
- * @param array $arguments (optional)\
- * @param \OC\Files\Storage\Loader $loader
+ * @param array $arguments (optional) configuration for the storage backend
+ * @param \OCP\Files\Storage\IStorageFactory $loader
+ * @param array $mountOptions mount specific options
*/
- public function __construct($storage, $mountpoint, $arguments = null, $loader = null) {
+ public function __construct($storage, $mountpoint, $arguments = null, $loader = null, $mountOptions = null) {
if (is_null($arguments)) {
$arguments = array();
}
if (is_null($loader)) {
- $this->loader = new Loader();
+ $this->loader = new StorageFactory();
} else {
$this->loader = $loader;
}
+ if (!is_null($mountOptions)) {
+ $this->mountOptions = $mountOptions;
+ }
+
$mountpoint = $this->formatPath($mountpoint);
if ($storage instanceof Storage) {
$this->class = get_class($storage);
@@ -68,15 +87,6 @@ class Mount {
}
/**
- * get name of the mount point
- *
- * @return string
- */
- public function getMountPointName() {
- return basename(rtrim($this->mountPoint, '/'));
- }
-
- /**
* @param string $mountPoint new mount point
*/
public function setMountPoint($mountPoint) {
@@ -91,7 +101,7 @@ class Mount {
private function createStorage() {
if (class_exists($this->class)) {
try {
- return $this->loader->load($this->mountPoint, $this->class, $this->arguments);
+ return $this->loader->getInstance($this->mountPoint, $this->class, $this->arguments);
} catch (\Exception $exception) {
if ($this->mountPoint === '/') {
// the root storage could not be initialized, show the user!
@@ -169,4 +179,15 @@ class Mount {
public function wrapStorage($wrapper) {
$this->storage = $wrapper($this->mountPoint, $this->getStorage());
}
+
+ /**
+ * Get a mount option
+ *
+ * @param string $name Name of the mount option to get
+ * @param mixed $default Default value for the mount option
+ * @return mixed
+ */
+ public function getOption($name, $default) {
+ return isset($this->mountOptions[$name]) ? $this->mountOptions[$name] : $default;
+ }
}
diff --git a/lib/private/files/node/file.php b/lib/private/files/node/file.php
index 75d5e0166b6..1c47294cdae 100644
--- a/lib/private/files/node/file.php
+++ b/lib/private/files/node/file.php
@@ -16,7 +16,7 @@ class File extends Node implements \OCP\Files\File {
* @throws \OCP\Files\NotPermittedException
*/
public function getContent() {
- if ($this->checkPermissions(\OCP\PERMISSION_READ)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_READ)) {
/**
* @var \OC\Files\Storage\Storage $storage;
*/
@@ -31,9 +31,10 @@ class File extends Node implements \OCP\Files\File {
* @throws \OCP\Files\NotPermittedException
*/
public function putContent($data) {
- if ($this->checkPermissions(\OCP\PERMISSION_UPDATE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE)) {
$this->sendHooks(array('preWrite'));
$this->view->file_put_contents($this->path, $data);
+ $this->fileInfo = null;
$this->sendHooks(array('postWrite'));
} else {
throw new NotPermittedException();
@@ -41,13 +42,6 @@ class File extends Node implements \OCP\Files\File {
}
/**
- * @return string
- */
- public function getMimeType() {
- return $this->view->getMimeType($this->path);
- }
-
- /**
* @param string $mode
* @return resource
* @throws \OCP\Files\NotPermittedException
@@ -55,7 +49,7 @@ class File extends Node implements \OCP\Files\File {
public function fopen($mode) {
$preHooks = array();
$postHooks = array();
- $requiredPermissions = \OCP\PERMISSION_READ;
+ $requiredPermissions = \OCP\Constants::PERMISSION_READ;
switch ($mode) {
case 'r+':
case 'rb+':
@@ -73,7 +67,7 @@ class File extends Node implements \OCP\Files\File {
case 'ab':
$preHooks[] = 'preWrite';
$postHooks[] = 'postWrite';
- $requiredPermissions |= \OCP\PERMISSION_UPDATE;
+ $requiredPermissions |= \OCP\Constants::PERMISSION_UPDATE;
break;
}
@@ -88,12 +82,13 @@ class File extends Node implements \OCP\Files\File {
}
public function delete() {
- if ($this->checkPermissions(\OCP\PERMISSION_DELETE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_DELETE)) {
$this->sendHooks(array('preDelete'));
$this->view->unlink($this->path);
$nonExisting = new NonExistingFile($this->root, $this->view, $this->path);
$this->root->emit('\OC\Files', 'postDelete', array($nonExisting));
$this->exists = false;
+ $this->fileInfo = null;
} else {
throw new NotPermittedException();
}
@@ -138,6 +133,7 @@ class File extends Node implements \OCP\Files\File {
$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();
diff --git a/lib/private/files/node/folder.php b/lib/private/files/node/folder.php
index 8c7acc339ae..bdfb2346716 100644
--- a/lib/private/files/node/folder.php
+++ b/lib/private/files/node/folder.php
@@ -180,7 +180,7 @@ class Folder extends Node implements \OCP\Files\Folder {
* @throws \OCP\Files\NotPermittedException
*/
public function newFolder($path) {
- if ($this->checkPermissions(\OCP\PERMISSION_CREATE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_CREATE)) {
$fullPath = $this->getFullPath($path);
$nonExisting = new NonExistingFolder($this->root, $this->view, $fullPath);
$this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
@@ -201,7 +201,7 @@ class Folder extends Node implements \OCP\Files\Folder {
* @throws \OCP\Files\NotPermittedException
*/
public function newFile($path) {
- if ($this->checkPermissions(\OCP\PERMISSION_CREATE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_CREATE)) {
$fullPath = $this->getFullPath($path);
$nonExisting = new NonExistingFile($this->root, $this->view, $fullPath);
$this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
@@ -223,7 +223,7 @@ class Folder extends Node implements \OCP\Files\Folder {
* @return \OC\Files\Node\Node[]
*/
public function search($query) {
- return $this->searchCommon('%' . $query . '%', 'search');
+ return $this->searchCommon('search', array('%' . $query . '%'));
}
/**
@@ -233,15 +233,26 @@ class Folder extends Node implements \OCP\Files\Folder {
* @return Node[]
*/
public function searchByMime($mimetype) {
- return $this->searchCommon($mimetype, 'searchByMime');
+ return $this->searchCommon('searchByMime', array($mimetype));
}
/**
- * @param string $query
- * @param string $method
+ * search for files by tag
+ *
+ * @param string|int $tag name or tag id
+ * @param string $userId owner of the tags
+ * @return Node[]
+ */
+ public function searchByTag($tag, $userId) {
+ return $this->searchCommon('searchByTag', array($tag, $userId));
+ }
+
+ /**
+ * @param string $method cache method
+ * @param array $args call args
* @return \OC\Files\Node\Node[]
*/
- private function searchCommon($query, $method) {
+ private function searchCommon($method, $args) {
$files = array();
$rootLength = strlen($this->path);
/**
@@ -252,7 +263,7 @@ class Folder extends Node implements \OCP\Files\Folder {
$cache = $storage->getCache('');
- $results = $cache->$method($query);
+ $results = call_user_func_array(array($cache, $method), $args);
foreach ($results as $result) {
if ($internalRootLength === 0 or substr($result['path'], 0, $internalRootLength) === $internalPath) {
$result['internalPath'] = $result['path'];
@@ -269,7 +280,7 @@ class Folder extends Node implements \OCP\Files\Folder {
$cache = $storage->getCache('');
$relativeMountPoint = substr($mount->getMountPoint(), $rootLength);
- $results = $cache->$method($query);
+ $results = call_user_func_array(array($cache, $method), $args);
foreach ($results as $result) {
$result['internalPath'] = $result['path'];
$result['path'] = $relativeMountPoint . $result['path'];
@@ -301,7 +312,7 @@ class Folder extends Node implements \OCP\Files\Folder {
$nodes = array();
foreach ($mounts as $mount) {
/**
- * @var \OC\Files\Mount\Mount $mount
+ * @var \OC\Files\Mount\MountPoint $mount
*/
if ($mount->getStorage()) {
$cache = $mount->getStorage()->getCache();
@@ -321,15 +332,8 @@ class Folder extends Node implements \OCP\Files\Folder {
return $this->view->free_space($this->path);
}
- /**
- * @return bool
- */
- public function isCreatable() {
- return $this->checkPermissions(\OCP\PERMISSION_CREATE);
- }
-
public function delete() {
- if ($this->checkPermissions(\OCP\PERMISSION_DELETE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_DELETE)) {
$this->sendHooks(array('preDelete'));
$this->view->rmdir($this->path);
$nonExisting = new NonExistingFolder($this->root, $this->view, $this->path);
diff --git a/lib/private/files/node/node.php b/lib/private/files/node/node.php
index bc075911749..17907a53044 100644
--- a/lib/private/files/node/node.php
+++ b/lib/private/files/node/node.php
@@ -8,10 +8,10 @@
namespace OC\Files\Node;
-use OCP\Files\NotFoundException;
+use OCP\Files\FileInfo;
use OCP\Files\NotPermittedException;
-class Node implements \OCP\Files\Node {
+class Node implements \OCP\Files\Node, FileInfo {
/**
* @var \OC\Files\View $view
*/
@@ -28,6 +28,11 @@ class Node implements \OCP\Files\Node {
protected $path;
/**
+ * @var \OCP\Files\FileInfo
+ */
+ protected $fileInfo;
+
+ /**
* @param \OC\Files\View $view
* @param \OC\Files\Node\Root $root
* @param string $path
@@ -39,6 +44,18 @@ class Node implements \OCP\Files\Node {
}
/**
+ * Returns the matching file info
+ *
+ * @return \OCP\Files\FileInfo
+ */
+ public function getFileInfo() {
+ if (!$this->fileInfo) {
+ $this->fileInfo = $this->view->getFileInfo($this->path);
+ }
+ return $this->fileInfo;
+ }
+
+ /**
* @param string[] $hooks
*/
protected function sendHooks($hooks) {
@@ -81,10 +98,16 @@ class Node implements \OCP\Files\Node {
* @throws \OCP\Files\NotPermittedException
*/
public function touch($mtime = null) {
- if ($this->checkPermissions(\OCP\PERMISSION_UPDATE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE)) {
$this->sendHooks(array('preTouch'));
$this->view->touch($this->path, $mtime);
$this->sendHooks(array('postTouch'));
+ if ($this->fileInfo) {
+ if (is_null($mtime)) {
+ $mtime = time();
+ }
+ $this->fileInfo['mtime'] = $mtime;
+ }
} else {
throw new NotPermittedException();
}
@@ -118,8 +141,7 @@ class Node implements \OCP\Files\Node {
* @return int
*/
public function getId() {
- $info = $this->view->getFileInfo($this->path);
- return $info['fileid'];
+ return $this->getFileInfo()->getId();
}
/**
@@ -133,58 +155,60 @@ class Node implements \OCP\Files\Node {
* @return int
*/
public function getMTime() {
- return $this->view->filemtime($this->path);
+ return $this->getFileInfo()->getMTime();
}
/**
* @return int
*/
public function getSize() {
- return $this->view->filesize($this->path);
+ return $this->getFileInfo()->getSize();
}
/**
* @return string
*/
public function getEtag() {
- $info = $this->view->getFileInfo($this->path);
- return $info['etag'];
+ return $this->getFileInfo()->getEtag();
}
/**
* @return int
*/
public function getPermissions() {
- $info = $this->view->getFileInfo($this->path);
- return $info['permissions'];
+ return $this->getFileInfo()->getPermissions();
}
/**
* @return bool
*/
public function isReadable() {
- return $this->checkPermissions(\OCP\PERMISSION_READ);
+ return $this->getFileInfo()->isReadable();
}
/**
* @return bool
*/
public function isUpdateable() {
- return $this->checkPermissions(\OCP\PERMISSION_UPDATE);
+ return $this->getFileInfo()->isUpdateable();
}
/**
* @return bool
*/
public function isDeletable() {
- return $this->checkPermissions(\OCP\PERMISSION_DELETE);
+ return $this->getFileInfo()->isDeletable();
}
/**
* @return bool
*/
public function isShareable() {
- return $this->checkPermissions(\OCP\PERMISSION_SHARE);
+ return $this->getFileInfo()->isShareable();
+ }
+
+ public function isCreatable() {
+ return $this->getFileInfo()->isCreatable();
}
/**
@@ -240,4 +264,32 @@ class Node implements \OCP\Files\Node {
}
return true;
}
+
+ public function isMounted() {
+ return $this->getFileInfo()->isMounted();
+ }
+
+ public function isShared() {
+ return $this->getFileInfo()->isShared();
+ }
+
+ public function getMimeType() {
+ return $this->getFileInfo()->getMimetype();
+ }
+
+ public function getMimePart() {
+ return $this->getFileInfo()->getMimePart();
+ }
+
+ public function getType() {
+ return $this->getFileInfo()->getType();
+ }
+
+ public function isEncrypted() {
+ return $this->getFileInfo()->isEncrypted();
+ }
+
+ public function getMountPoint() {
+ return $this->getFileInfo()->getMountPoint();
+ }
}
diff --git a/lib/private/files/node/nonexistingfolder.php b/lib/private/files/node/nonexistingfolder.php
index 0346cbf1e21..04f741e8a46 100644
--- a/lib/private/files/node/nonexistingfolder.php
+++ b/lib/private/files/node/nonexistingfolder.php
@@ -99,6 +99,10 @@ class NonExistingFolder extends Folder {
throw new NotFoundException();
}
+ public function searchByTag($tag, $userId) {
+ throw new NotFoundException();
+ }
+
public function getById($id) {
throw new NotFoundException();
}
diff --git a/lib/private/files/node/root.php b/lib/private/files/node/root.php
index 18e7a6b681a..1dd4a3e378d 100644
--- a/lib/private/files/node/root.php
+++ b/lib/private/files/node/root.php
@@ -10,12 +10,14 @@ namespace OC\Files\Node;
use OC\Files\Cache\Cache;
use OC\Files\Mount\Manager;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OC\Hooks\Emitter;
use OC\Hooks\PublicEmitter;
+use OCP\Files\IRootFolder;
+
/**
* Class Root
*
@@ -35,7 +37,7 @@ use OC\Hooks\PublicEmitter;
*
* @package OC\Files\Node
*/
-class Root extends Folder implements Emitter {
+class Root extends Folder implements IRootFolder {
/**
* @var \OC\Files\Mount\Manager $mountManager
@@ -106,13 +108,13 @@ class Root extends Folder implements Emitter {
* @param array $arguments
*/
public function mount($storage, $mountPoint, $arguments = array()) {
- $mount = new Mount($storage, $mountPoint, $arguments);
+ $mount = new MountPoint($storage, $mountPoint, $arguments);
$this->mountManager->addMount($mount);
}
/**
* @param string $mountPoint
- * @return \OC\Files\Mount\Mount
+ * @return \OC\Files\Mount\MountPoint
*/
public function getMount($mountPoint) {
return $this->mountManager->find($mountPoint);
@@ -120,7 +122,7 @@ class Root extends Folder implements Emitter {
/**
* @param string $mountPoint
- * @return \OC\Files\Mount\Mount[]
+ * @return \OC\Files\Mount\MountPoint[]
*/
public function getMountsIn($mountPoint) {
return $this->mountManager->findIn($mountPoint);
@@ -128,7 +130,7 @@ class Root extends Folder implements Emitter {
/**
* @param string $storageId
- * @return \OC\Files\Mount\Mount[]
+ * @return \OC\Files\Mount\MountPoint[]
*/
public function getMountByStorageId($storageId) {
return $this->mountManager->findByStorageId($storageId);
@@ -136,14 +138,14 @@ class Root extends Folder implements Emitter {
/**
* @param int $numericId
- * @return Mount[]
+ * @return MountPoint[]
*/
public function getMountByNumericStorageId($numericId) {
return $this->mountManager->findByNumericId($numericId);
}
/**
- * @param \OC\Files\Mount\Mount $mount
+ * @param \OC\Files\Mount\MountPoint $mount
*/
public function unMount($mount) {
$this->mountManager->remove($mount);
@@ -262,7 +264,7 @@ class Root extends Folder implements Emitter {
* @return int
*/
public function getPermissions() {
- return \OCP\PERMISSION_CREATE;
+ return \OCP\Constants::PERMISSION_CREATE;
}
/**
diff --git a/lib/private/files/objectstore/objectstorestorage.php b/lib/private/files/objectstore/objectstorestorage.php
index ae8bff52896..b0095ad94bb 100644
--- a/lib/private/files/objectstore/objectstorestorage.php
+++ b/lib/private/files/objectstore/objectstorestorage.php
@@ -72,7 +72,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
'size' => 0,
'mtime' => $mTime,
'storage_mtime' => $mTime,
- 'permissions' => \OCP\PERMISSION_ALL,
+ 'permissions' => \OCP\Constants::PERMISSION_ALL,
);
if ($dirName === '' && !$parentExists) {
@@ -332,7 +332,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
'size' => 0,
'mtime' => $mtime,
'storage_mtime' => $mtime,
- 'permissions' => \OCP\PERMISSION_ALL,
+ 'permissions' => \OCP\Constants::PERMISSION_ALL,
);
$fileId = $this->getCache()->put($path, $stat);
try {
@@ -357,7 +357,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
if (empty($stat)) {
// create new file
$stat = array(
- 'permissions' => \OCP\PERMISSION_ALL,
+ 'permissions' => \OCP\Constants::PERMISSION_ALL,
);
}
// update stat with new data
diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php
index 518d3ec400c..b2bf41f751c 100644
--- a/lib/private/files/storage/common.php
+++ b/lib/private/files/storage/common.php
@@ -113,26 +113,26 @@ abstract class Common implements \OC\Files\Storage\Storage {
public function getPermissions($path) {
$permissions = 0;
if ($this->isCreatable($path)) {
- $permissions |= \OCP\PERMISSION_CREATE;
+ $permissions |= \OCP\Constants::PERMISSION_CREATE;
}
if ($this->isReadable($path)) {
- $permissions |= \OCP\PERMISSION_READ;
+ $permissions |= \OCP\Constants::PERMISSION_READ;
}
if ($this->isUpdatable($path)) {
- $permissions |= \OCP\PERMISSION_UPDATE;
+ $permissions |= \OCP\Constants::PERMISSION_UPDATE;
}
if ($this->isDeletable($path)) {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
if ($this->isSharable($path)) {
- $permissions |= \OCP\PERMISSION_SHARE;
+ $permissions |= \OCP\Constants::PERMISSION_SHARE;
}
return $permissions;
}
public function filemtime($path) {
$stat = $this->stat($path);
- if (isset($stat['mtime'])) {
+ if (isset($stat['mtime']) && $stat['mtime'] > 0) {
return $stat['mtime'];
} else {
return 0;
@@ -278,6 +278,7 @@ abstract class Common implements \OC\Files\Storage\Storage {
}
}
}
+ closedir($dh);
return $files;
}
@@ -437,4 +438,17 @@ abstract class Common implements \OC\Files\Storage\Storage {
public function instanceOfStorage($class) {
return is_a($this, $class);
}
+
+ /**
+ * A custom storage implementation can return an url for direct download of a give file.
+ *
+ * For now the returned array can hold the parameter url - in future more attributes might follow.
+ *
+ * @param string $path
+ * @return array
+ */
+ public function getDirectDownload($path) {
+ return [];
+ }
+
}
diff --git a/lib/private/files/storage/dav.php b/lib/private/files/storage/dav.php
index 7f53704e94f..355148de37a 100644
--- a/lib/private/files/storage/dav.php
+++ b/lib/private/files/storage/dav.php
@@ -123,7 +123,11 @@ class DAV extends \OC\Files\Storage\Common {
}
\OC\Files\Stream\Dir::register($id, $content);
return opendir('fakedir://' . $id);
+ } catch (Exception\NotFound $e) {
+ return false;
} catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -138,9 +142,11 @@ class DAV extends \OC\Files\Storage\Common {
$responseType = $response["{DAV:}resourcetype"]->resourceType;
}
return (count($responseType) > 0 and $responseType[0] == "{DAV:}collection") ? 'dir' : 'file';
+ } catch (Exception\NotFound $e) {
+ return false;
} catch (\Exception $e) {
- error_log($e->getMessage());
- \OCP\Util::writeLog("webdav client", \OCP\Util::sanitizeHTML($e->getMessage()), \OCP\Util::ERROR);
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -151,7 +157,11 @@ class DAV extends \OC\Files\Storage\Common {
try {
$this->client->propfind($this->encodePath($path), array('{DAV:}resourcetype'));
return true; //no 404 exception
+ } catch (Exception\NotFound $e) {
+ return false;
} catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -263,7 +273,11 @@ class DAV extends \OC\Files\Storage\Common {
if ($this->file_exists($path)) {
try {
$this->client->proppatch($this->encodePath($path), array('{DAV:}lastmodified' => $mtime));
- } catch (\Sabre\DAV\Exception\NotImplemented $e) {
+ } catch (Exception\NotImplemented $e) {
+ return false;
+ } catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
} else {
@@ -313,6 +327,8 @@ class DAV extends \OC\Files\Storage\Common {
$this->removeCachedFile($path2);
return true;
} catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -326,6 +342,8 @@ class DAV extends \OC\Files\Storage\Common {
$this->removeCachedFile($path2);
return true;
} catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -339,7 +357,11 @@ class DAV extends \OC\Files\Storage\Common {
'mtime' => strtotime($response['{DAV:}getlastmodified']),
'size' => (int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0,
);
+ } catch (Exception\NotFound $e) {
+ return array();
} catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return array();
}
}
@@ -362,6 +384,8 @@ class DAV extends \OC\Files\Storage\Common {
return false;
}
} catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -400,6 +424,8 @@ class DAV extends \OC\Files\Storage\Common {
$response = $this->client->request($method, $this->encodePath($path), $body);
return $response['statusCode'] == $expected;
} catch (\Exception $e) {
+ // TODO: log for now, but in the future need to wrap/rethrow exception
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -416,30 +442,31 @@ class DAV extends \OC\Files\Storage\Common {
}
public function isUpdatable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_UPDATE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_UPDATE);
}
public function isCreatable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_CREATE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_CREATE);
}
public function isSharable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_SHARE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE);
}
public function isDeletable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_DELETE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_DELETE);
}
public function getPermissions($path) {
$this->init();
+ $path = $this->cleanPath($path);
$response = $this->client->propfind($this->encodePath($path), array('{http://owncloud.org/ns}permissions'));
if (isset($response['{http://owncloud.org/ns}permissions'])) {
return $this->parsePermissions($response['{http://owncloud.org/ns}permissions']);
} else if ($this->is_dir($path)) {
- return \OCP\PERMISSION_ALL;
+ return \OCP\Constants::PERMISSION_ALL;
} else if ($this->file_exists($path)) {
- return \OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE;
+ return \OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE;
} else {
return 0;
}
@@ -450,19 +477,19 @@ class DAV extends \OC\Files\Storage\Common {
* @return int
*/
protected function parsePermissions($permissionsString) {
- $permissions = \OCP\PERMISSION_READ;
+ $permissions = \OCP\Constants::PERMISSION_READ;
if (strpos($permissionsString, 'R') !== false) {
- $permissions |= \OCP\PERMISSION_SHARE;
+ $permissions |= \OCP\Constants::PERMISSION_SHARE;
}
if (strpos($permissionsString, 'D') !== false) {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
if (strpos($permissionsString, 'W') !== false) {
- $permissions |= \OCP\PERMISSION_UPDATE;
+ $permissions |= \OCP\Constants::PERMISSION_UPDATE;
}
if (strpos($permissionsString, 'CK') !== false) {
- $permissions |= \OCP\PERMISSION_CREATE;
- $permissions |= \OCP\PERMISSION_UPDATE;
+ $permissions |= \OCP\Constants::PERMISSION_CREATE;
+ $permissions |= \OCP\Constants::PERMISSION_UPDATE;
}
return $permissions;
}
@@ -477,6 +504,7 @@ class DAV extends \OC\Files\Storage\Common {
*/
public function hasUpdated($path, $time) {
$this->init();
+ $path = $this->cleanPath($path);
try {
$response = $this->client->propfind($this->encodePath($path), array(
'{DAV:}getlastmodified',
@@ -501,7 +529,7 @@ class DAV extends \OC\Files\Storage\Common {
} catch (Exception\NotFound $e) {
return false;
} catch (Exception $e) {
- throw new StorageNotAvailableException();
+ throw new StorageNotAvailableException(get_class($e).": ".$e->getMessage());
}
}
}
diff --git a/lib/private/files/storage/local.php b/lib/private/files/storage/local.php
index 1c5fafc12fa..e8be7daba7e 100644
--- a/lib/private/files/storage/local.php
+++ b/lib/private/files/storage/local.php
@@ -35,7 +35,7 @@ if (\OC_Util::runningOnWindows()) {
}
public function mkdir($path) {
- return @mkdir($this->datadir . $path, 0777, true);
+ return @mkdir($this->getSourcePath($path), 0777, true);
}
public function rmdir($path) {
@@ -44,7 +44,7 @@ if (\OC_Util::runningOnWindows()) {
}
try {
$it = new \RecursiveIteratorIterator(
- new \RecursiveDirectoryIterator($this->datadir . $path),
+ new \RecursiveDirectoryIterator($this->getSourcePath($path)),
\RecursiveIteratorIterator::CHILD_FIRST
);
/**
@@ -68,30 +68,30 @@ if (\OC_Util::runningOnWindows()) {
}
$it->next();
}
- return rmdir($this->datadir . $path);
+ return rmdir($this->getSourcePath($path));
} catch (\UnexpectedValueException $e) {
return false;
}
}
public function opendir($path) {
- return opendir($this->datadir . $path);
+ return opendir($this->getSourcePath($path));
}
public function is_dir($path) {
if (substr($path, -1) == '/') {
$path = substr($path, 0, -1);
}
- return is_dir($this->datadir . $path);
+ return is_dir($this->getSourcePath($path));
}
public function is_file($path) {
- return is_file($this->datadir . $path);
+ return is_file($this->getSourcePath($path));
}
public function stat($path) {
clearstatcache();
- $fullPath = $this->datadir . $path;
+ $fullPath = $this->getSourcePath($path);
$statResult = stat($fullPath);
if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
$filesize = $this->filesize($path);
@@ -102,9 +102,9 @@ if (\OC_Util::runningOnWindows()) {
}
public function filetype($path) {
- $filetype = filetype($this->datadir . $path);
+ $filetype = filetype($this->getSourcePath($path));
if ($filetype == 'link') {
- $filetype = filetype(realpath($this->datadir . $path));
+ $filetype = filetype(realpath($this->getSourcePath($path)));
}
return $filetype;
}
@@ -113,7 +113,7 @@ if (\OC_Util::runningOnWindows()) {
if ($this->is_dir($path)) {
return 0;
}
- $fullPath = $this->datadir . $path;
+ $fullPath = $this->getSourcePath($path);
if (PHP_INT_SIZE === 4) {
$helper = new \OC\LargeFileHelper;
return $helper->getFilesize($fullPath);
@@ -122,19 +122,20 @@ if (\OC_Util::runningOnWindows()) {
}
public function isReadable($path) {
- return is_readable($this->datadir . $path);
+ return is_readable($this->getSourcePath($path));
}
public function isUpdatable($path) {
- return is_writable($this->datadir . $path);
+ return is_writable($this->getSourcePath($path));
}
public function file_exists($path) {
- return file_exists($this->datadir . $path);
+ return file_exists($this->getSourcePath($path));
}
public function filemtime($path) {
- return filemtime($this->datadir . $path);
+ clearstatcache($this->getSourcePath($path));
+ return filemtime($this->getSourcePath($path));
}
public function touch($path, $mtime = null) {
@@ -145,30 +146,30 @@ if (\OC_Util::runningOnWindows()) {
return false;
}
if (!is_null($mtime)) {
- $result = touch($this->datadir . $path, $mtime);
+ $result = touch($this->getSourcePath($path), $mtime);
} else {
- $result = touch($this->datadir . $path);
+ $result = touch($this->getSourcePath($path));
}
if ($result) {
- clearstatcache(true, $this->datadir . $path);
+ clearstatcache(true, $this->getSourcePath($path));
}
return $result;
}
public function file_get_contents($path) {
- return file_get_contents($this->datadir . $path);
+ return file_get_contents($this->getSourcePath($path));
}
- public function file_put_contents($path, $data) { //trigger_error("$path = ".var_export($path, 1));
- return file_put_contents($this->datadir . $path, $data);
+ public function file_put_contents($path, $data) {
+ return file_put_contents($this->getSourcePath($path), $data);
}
public function unlink($path) {
if ($this->is_dir($path)) {
return $this->rmdir($path);
} else if ($this->is_file($path)) {
- return unlink($this->datadir . $path);
+ return unlink($this->getSourcePath($path));
} else {
return false;
}
@@ -200,27 +201,27 @@ if (\OC_Util::runningOnWindows()) {
$this->unlink($path2);
}
- return rename($this->datadir . $path1, $this->datadir . $path2);
+ return rename($this->getSourcePath($path1), $this->getSourcePath($path2));
}
public function copy($path1, $path2) {
if ($this->is_dir($path1)) {
return parent::copy($path1, $path2);
} else {
- return copy($this->datadir . $path1, $this->datadir . $path2);
+ return copy($this->getSourcePath($path1), $this->getSourcePath($path2));
}
}
public function fopen($path, $mode) {
- return fopen($this->datadir . $path, $mode);
+ return fopen($this->getSourcePath($path), $mode);
}
public function hash($type, $path, $raw = false) {
- return hash_file($type, $this->datadir . $path, $raw);
+ return hash_file($type, $this->getSourcePath($path), $raw);
}
public function free_space($path) {
- $space = @disk_free_space($this->datadir . $path);
+ $space = @disk_free_space($this->getSourcePath($path));
if ($space === false || is_null($space)) {
return \OCP\Files\FileInfo::SPACE_UNKNOWN;
}
@@ -232,11 +233,11 @@ if (\OC_Util::runningOnWindows()) {
}
public function getLocalFile($path) {
- return $this->datadir . $path;
+ return $this->getSourcePath($path);
}
public function getLocalFolder($path) {
- return $this->datadir . $path;
+ return $this->getSourcePath($path);
}
/**
@@ -244,12 +245,16 @@ if (\OC_Util::runningOnWindows()) {
*/
protected function searchInDir($query, $dir = '') {
$files = array();
- foreach (scandir($this->datadir . $dir) as $item) {
- if ($item == '.' || $item == '..') continue;
+ $physicalDir = $this->getSourcePath($dir);
+ foreach (scandir($physicalDir) as $item) {
+ if ($item == '.' || $item == '..')
+ continue;
+ $physicalItem = $physicalDir . '/' . $item;
+
if (strstr(strtolower($item), strtolower($query)) !== false) {
$files[] = $dir . '/' . $item;
}
- if (is_dir($this->datadir . $dir . '/' . $item)) {
+ if (is_dir($physicalItem)) {
$files = array_merge($files, $this->searchInDir($query, $dir . '/' . $item));
}
}
@@ -272,6 +277,17 @@ if (\OC_Util::runningOnWindows()) {
}
/**
+ * Get the source path (on disk) of a given path
+ *
+ * @param string $path
+ * @return string
+ */
+ protected function getSourcePath($path) {
+ $fullPath = $this->datadir . $path;
+ return $fullPath;
+ }
+
+ /**
* {@inheritdoc}
*/
public function isLocal() {
diff --git a/lib/private/files/storage/mappedlocal.php b/lib/private/files/storage/mappedlocal.php
index 0a21d2938b7..8f813f973b9 100644
--- a/lib/private/files/storage/mappedlocal.php
+++ b/lib/private/files/storage/mappedlocal.php
@@ -24,9 +24,6 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function __destruct() {
- if (defined('PHPUNIT_RUN')) {
- $this->mapper->removePath($this->datadir, true, true);
- }
}
public function getId() {
@@ -34,7 +31,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function mkdir($path) {
- return @mkdir($this->buildPath($path), 0777, true);
+ return @mkdir($this->getSourcePath($path), 0777, true);
}
public function rmdir($path) {
@@ -43,7 +40,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
try {
$it = new \RecursiveIteratorIterator(
- new \RecursiveDirectoryIterator($this->buildPath($path)),
+ new \RecursiveDirectoryIterator($this->getSourcePath($path)),
\RecursiveIteratorIterator::CHILD_FIRST
);
/**
@@ -67,7 +64,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
$it->next();
}
- if ($result = @rmdir($this->buildPath($path))) {
+ if ($result = @rmdir($this->getSourcePath($path))) {
$this->cleanMapper($path);
}
return $result;
@@ -78,7 +75,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
public function opendir($path) {
$files = array('.', '..');
- $physicalPath = $this->buildPath($path);
+ $physicalPath = $this->getSourcePath($path);
$logicalPath = $this->mapper->physicalToLogic($physicalPath);
$dh = opendir($physicalPath);
@@ -104,15 +101,16 @@ class MappedLocal extends \OC\Files\Storage\Common {
if (substr($path, -1) == '/') {
$path = substr($path, 0, -1);
}
- return is_dir($this->buildPath($path));
+ return is_dir($this->getSourcePath($path));
}
public function is_file($path) {
- return is_file($this->buildPath($path));
+ return is_file($this->getSourcePath($path));
}
public function stat($path) {
- $fullPath = $this->buildPath($path);
+ clearstatcache();
+ $fullPath = $this->getSourcePath($path);
$statResult = stat($fullPath);
if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
$filesize = $this->filesize($path);
@@ -123,9 +121,9 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function filetype($path) {
- $filetype = filetype($this->buildPath($path));
+ $filetype = filetype($this->getSourcePath($path));
if ($filetype == 'link') {
- $filetype = filetype(realpath($this->buildPath($path)));
+ $filetype = filetype(realpath($this->getSourcePath($path)));
}
return $filetype;
}
@@ -134,7 +132,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
if ($this->is_dir($path)) {
return 0;
}
- $fullPath = $this->buildPath($path);
+ $fullPath = $this->getSourcePath($path);
if (PHP_INT_SIZE === 4) {
$helper = new \OC\LargeFileHelper;
return $helper->getFilesize($fullPath);
@@ -143,43 +141,47 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function isReadable($path) {
- return is_readable($this->buildPath($path));
+ return is_readable($this->getSourcePath($path));
}
public function isUpdatable($path) {
- return is_writable($this->buildPath($path));
+ return is_writable($this->getSourcePath($path));
}
public function file_exists($path) {
- return file_exists($this->buildPath($path));
+ return file_exists($this->getSourcePath($path));
}
public function filemtime($path) {
- return filemtime($this->buildPath($path));
+ clearstatcache($this->getSourcePath($path));
+ return filemtime($this->getSourcePath($path));
}
public function touch($path, $mtime = null) {
// sets the modification time of the file to the given value.
// If mtime is nil the current time is set.
// note that the access time of the file always changes to the current time.
+ if ($this->file_exists($path) and !$this->isUpdatable($path)) {
+ return false;
+ }
if (!is_null($mtime)) {
- $result = touch($this->buildPath($path), $mtime);
+ $result = touch($this->getSourcePath($path), $mtime);
} else {
- $result = touch($this->buildPath($path));
+ $result = touch($this->getSourcePath($path));
}
if ($result) {
- clearstatcache(true, $this->buildPath($path));
+ clearstatcache(true, $this->getSourcePath($path));
}
return $result;
}
public function file_get_contents($path) {
- return file_get_contents($this->buildPath($path));
+ return file_get_contents($this->getSourcePath($path));
}
public function file_put_contents($path, $data) {
- return file_put_contents($this->buildPath($path), $data);
+ return file_put_contents($this->getSourcePath($path), $data);
}
public function unlink($path) {
@@ -211,8 +213,8 @@ class MappedLocal extends \OC\Files\Storage\Common {
$this->unlink($path2);
}
- $physicPath1 = $this->buildPath($path1);
- $physicPath2 = $this->buildPath($path2);
+ $physicPath1 = $this->getSourcePath($path1);
+ $physicPath2 = $this->getSourcePath($path2);
if ($return = rename($physicPath1, $physicPath2)) {
// mapper needs to create copies or all children
$this->copyMapping($path1, $path2);
@@ -240,7 +242,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
closedir($dir);
return true;
} else {
- if ($return = copy($this->buildPath($path1), $this->buildPath($path2))) {
+ if ($return = copy($this->getSourcePath($path1), $this->getSourcePath($path2))) {
$this->copyMapping($path1, $path2);
}
return $return;
@@ -248,7 +250,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function fopen($path, $mode) {
- return fopen($this->buildPath($path), $mode);
+ return fopen($this->getSourcePath($path), $mode);
}
/**
@@ -259,7 +261,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
private function delTree($dir, $isLogicPath = true) {
$dirRelative = $dir;
if ($isLogicPath) {
- $dir = $this->buildPath($dir);
+ $dir = $this->getSourcePath($dir);
}
if (!file_exists($dir)) {
return true;
@@ -291,11 +293,15 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function hash($type, $path, $raw = false) {
- return hash_file($type, $this->buildPath($path), $raw);
+ return hash_file($type, $this->getSourcePath($path), $raw);
}
public function free_space($path) {
- return @disk_free_space($this->buildPath($path));
+ $space = @disk_free_space($this->getSourcePath($path));
+ if ($space === false || is_null($space)) {
+ return \OCP\Files\FileInfo::SPACE_UNKNOWN;
+ }
+ return $space;
}
public function search($query) {
@@ -303,11 +309,11 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function getLocalFile($path) {
- return $this->buildPath($path);
+ return $this->getSourcePath($path);
}
public function getLocalFolder($path) {
- return $this->buildPath($path);
+ return $this->getSourcePath($path);
}
/**
@@ -315,7 +321,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
*/
protected function searchInDir($query, $dir = '') {
$files = array();
- $physicalDir = $this->buildPath($dir);
+ $physicalDir = $this->getSourcePath($dir);
foreach (scandir($physicalDir) as $item) {
if ($item == '.' || $item == '..')
continue;
@@ -340,18 +346,30 @@ class MappedLocal extends \OC\Files\Storage\Common {
* @return bool
*/
public function hasUpdated($path, $time) {
- return $this->filemtime($path) > $time;
+ if ($this->file_exists($path)) {
+ return $this->filemtime($path) > $time;
+ } else {
+ return true;
+ }
}
/**
+ * Get the source path (on disk) of a given path
+ *
* @param string $path
- * @param bool $create
* @return string
*/
- private function buildPath($path, $create = true) {
+ protected function getSourcePath($path) {
$path = $this->stripLeading($path);
$fullPath = $this->datadir . $path;
- return $this->mapper->logicToPhysical($fullPath, $create);
+ return $this->mapper->logicToPhysical($fullPath, true);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isLocal() {
+ return true;
}
/**
diff --git a/lib/private/files/storage/loader.php b/lib/private/files/storage/storagefactory.php
index c75a0a976a7..c9e8d422f9d 100644
--- a/lib/private/files/storage/loader.php
+++ b/lib/private/files/storage/storagefactory.php
@@ -8,7 +8,9 @@
namespace OC\Files\Storage;
-class Loader {
+use OCP\Files\Storage\IStorageFactory;
+
+class StorageFactory implements IStorageFactory {
/**
* @var callable[] $storageWrappers
*/
@@ -19,6 +21,7 @@ class Loader {
*
* $callback should be a function of type (string $mountPoint, Storage $storage) => Storage
*
+ * @param string $wrapperName
* @param callable $callback
*/
public function addStorageWrapper($wrapperName, $callback) {
@@ -26,15 +29,21 @@ class Loader {
}
/**
+ * Create an instance of a storage and apply the registered storage wrappers
+ *
* @param string|boolean $mountPoint
* @param string $class
+ * @param array $arguments
+ * @return \OCP\Files\Storage
*/
- public function load($mountPoint, $class, $arguments) {
+ public function getInstance($mountPoint, $class, $arguments) {
return $this->wrap($mountPoint, new $class($arguments));
}
/**
* @param string|boolean $mountPoint
+ * @param \OCP\Files\Storage $storage
+ * @return \OCP\Files\Storage
*/
public function wrap($mountPoint, $storage) {
foreach ($this->storageWrappers as $wrapper) {
diff --git a/lib/private/files/storage/wrapper/jail.php b/lib/private/files/storage/wrapper/jail.php
new file mode 100644
index 00000000000..22b96765757
--- /dev/null
+++ b/lib/private/files/storage/wrapper/jail.php
@@ -0,0 +1,413 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage\Wrapper;
+
+use OC\Files\Cache\Wrapper\CacheJail;
+
+/**
+ * Jail to a subdirectory of the wrapped storage
+ *
+ * This restricts access to a subfolder of the wrapped storage with the subfolder becoming the root folder new storage
+ */
+class Jail extends Wrapper {
+ /**
+ * @var string
+ */
+ protected $rootPath;
+
+ /**
+ * @param array $arguments ['storage' => $storage, 'mask' => $root]
+ *
+ * $storage: The storage that will be wrapper
+ * $root: The folder in the wrapped storage that will become the root folder of the wrapped storage
+ */
+ public function __construct($arguments) {
+ parent::__construct($arguments);
+ $this->rootPath = $arguments['root'];
+ }
+
+ protected function getSourcePath($path) {
+ if ($path === '') {
+ return $this->rootPath;
+ } else {
+ return $this->rootPath . '/' . $path;
+ }
+ }
+
+ public function getId() {
+ return 'link:' . parent::getId() . ':' . $this->rootPath;
+ }
+
+ /**
+ * see http://php.net/manual/en/function.mkdir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function mkdir($path) {
+ return $this->storage->mkdir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.rmdir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function rmdir($path) {
+ return $this->storage->rmdir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.opendir.php
+ *
+ * @param string $path
+ * @return resource
+ */
+ public function opendir($path) {
+ return $this->storage->opendir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.is_dir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function is_dir($path) {
+ return $this->storage->is_dir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.is_file.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function is_file($path) {
+ return $this->storage->is_file($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.stat.php
+ * only the following keys are required in the result: size and mtime
+ *
+ * @param string $path
+ * @return array
+ */
+ public function stat($path) {
+ return $this->storage->stat($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.filetype.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function filetype($path) {
+ return $this->storage->filetype($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.filesize.php
+ * The result for filesize when called on a folder is required to be 0
+ *
+ * @param string $path
+ * @return int
+ */
+ public function filesize($path) {
+ return $this->storage->filesize($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be created in $path
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isCreatable($path) {
+ return $this->storage->isCreatable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be read
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isReadable($path) {
+ return $this->storage->isReadable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be written to
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isUpdatable($path) {
+ return $this->storage->isUpdatable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be deleted
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isDeletable($path) {
+ return $this->storage->isDeletable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be shared
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isSharable($path) {
+ return $this->storage->isSharable($this->getSourcePath($path));
+ }
+
+ /**
+ * get the full permissions of a path.
+ * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function getPermissions($path) {
+ return $this->storage->getPermissions($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.file_exists.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function file_exists($path) {
+ return $this->storage->file_exists($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.filemtime.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function filemtime($path) {
+ return $this->storage->filemtime($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.file_get_contents.php
+ *
+ * @param string $path
+ * @return string
+ */
+ public function file_get_contents($path) {
+ return $this->storage->file_get_contents($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.file_put_contents.php
+ *
+ * @param string $path
+ * @param string $data
+ * @return bool
+ */
+ public function file_put_contents($path, $data) {
+ return $this->storage->file_put_contents($this->getSourcePath($path), $data);
+ }
+
+ /**
+ * see http://php.net/manual/en/function.unlink.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function unlink($path) {
+ return $this->storage->unlink($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.rename.php
+ *
+ * @param string $path1
+ * @param string $path2
+ * @return bool
+ */
+ public function rename($path1, $path2) {
+ return $this->storage->rename($this->getSourcePath($path1), $this->getSourcePath($path2));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.copy.php
+ *
+ * @param string $path1
+ * @param string $path2
+ * @return bool
+ */
+ public function copy($path1, $path2) {
+ return $this->storage->copy($this->getSourcePath($path1), $this->getSourcePath($path2));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.fopen.php
+ *
+ * @param string $path
+ * @param string $mode
+ * @return resource
+ */
+ public function fopen($path, $mode) {
+ return $this->storage->fopen($this->getSourcePath($path), $mode);
+ }
+
+ /**
+ * get the mimetype for a file or folder
+ * The mimetype for a folder is required to be "httpd/unix-directory"
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getMimeType($path) {
+ return $this->storage->getMimeType($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.hash.php
+ *
+ * @param string $type
+ * @param string $path
+ * @param bool $raw
+ * @return string
+ */
+ public function hash($type, $path, $raw = false) {
+ return $this->storage->hash($type, $this->getSourcePath($path), $raw);
+ }
+
+ /**
+ * see http://php.net/manual/en/function.free_space.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function free_space($path) {
+ return $this->storage->free_space($this->getSourcePath($path));
+ }
+
+ /**
+ * search for occurrences of $query in file names
+ *
+ * @param string $query
+ * @return array
+ */
+ public function search($query) {
+ return $this->storage->search($query);
+ }
+
+ /**
+ * see http://php.net/manual/en/function.touch.php
+ * If the backend does not support the operation, false should be returned
+ *
+ * @param string $path
+ * @param int $mtime
+ * @return bool
+ */
+ public function touch($path, $mtime = null) {
+ return $this->storage->touch($this->getSourcePath($path), $mtime);
+ }
+
+ /**
+ * get the path to a local version of the file.
+ * The local version of the file can be temporary and doesn't have to be persistent across requests
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFile($path) {
+ return $this->storage->getLocalFile($this->getSourcePath($path));
+ }
+
+ /**
+ * get the path to a local version of the folder.
+ * The local version of the folder can be temporary and doesn't have to be persistent across requests
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFolder($path) {
+ return $this->storage->getLocalFolder($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ *
+ * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
+ * returning true for other changes in the folder is optional
+ */
+ public function hasUpdated($path, $time) {
+ return $this->storage->hasUpdated($this->getSourcePath($path), $time);
+ }
+
+ /**
+ * get a cache instance for the storage
+ *
+ * @param string $path
+ * @param \OC\Files\Storage\Storage (optional) the storage to pass to the cache
+ * @return \OC\Files\Cache\Cache
+ */
+ public function getCache($path = '', $storage = null) {
+ if (!$storage) {
+ $storage = $this;
+ }
+ $sourceCache = $this->storage->getCache($this->getSourcePath($path), $storage);
+ return new CacheJail($sourceCache, $this->rootPath);
+ }
+
+ /**
+ * get the user id of the owner of a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getOwner($path) {
+ return $this->storage->getOwner($this->getSourcePath($path));
+ }
+
+ /**
+ * get a watcher instance for the cache
+ *
+ * @param string $path
+ * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher
+ * @return \OC\Files\Cache\Watcher
+ */
+ public function getWatcher($path = '', $storage = null) {
+ if (!$storage) {
+ $storage = $this;
+ }
+ return $this->storage->getWatcher($this->getSourcePath($path), $storage);
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path) {
+ return $this->storage->getETag($this->getSourcePath($path));
+ }
+}
diff --git a/lib/private/files/storage/wrapper/permissionsmask.php b/lib/private/files/storage/wrapper/permissionsmask.php
new file mode 100644
index 00000000000..955cb54591b
--- /dev/null
+++ b/lib/private/files/storage/wrapper/permissionsmask.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage\Wrapper;
+
+use OC\Files\Cache\Wrapper\CachePermissionsMask;
+use OCP\Constants;
+
+/**
+ * Mask the permissions of a storage
+ *
+ * This can be used to restrict update, create, delete and/or share permissions of a storage
+ *
+ * Note that the read permissions cant be masked
+ */
+class PermissionsMask extends Wrapper {
+ /**
+ * @var int the permissions bits we want to keep
+ */
+ private $mask;
+
+ /**
+ * @param array $arguments ['storage' => $storage, 'mask' => $mask]
+ *
+ * $storage: The storage the permissions mask should be applied on
+ * $mask: The permission bits that should be kept, a combination of the \OCP\Constant::PERMISSION_ constants
+ */
+ public function __construct($arguments) {
+ parent::__construct($arguments);
+ $this->mask = $arguments['mask'];
+ }
+
+ private function checkMask($permissions) {
+ return ($this->mask & $permissions) === $permissions;
+ }
+
+ public function isUpdatable($path) {
+ return $this->checkMask(Constants::PERMISSION_UPDATE) and parent::isUpdatable($path);
+ }
+
+ public function isCreatable($path) {
+ return $this->checkMask(Constants::PERMISSION_CREATE) and parent::isCreatable($path);
+ }
+
+ public function isDeletable($path) {
+ return $this->checkMask(Constants::PERMISSION_DELETE) and parent::isDeletable($path);
+ }
+
+ public function getPermissions($path) {
+ return $this->storage->getPermissions($path) & $this->mask;
+ }
+
+ public function rename($path1, $path2) {
+ return $this->checkMask(Constants::PERMISSION_UPDATE) and parent::rename($path1, $path2);
+ }
+
+ public function copy($path1, $path2) {
+ return $this->checkMask(Constants::PERMISSION_CREATE) and parent::copy($path1, $path2);
+ }
+
+ public function touch($path, $mtime = null) {
+ $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE;
+ return $this->checkMask($permissions) and parent::touch($path, $mtime);
+ }
+
+ public function mkdir($path) {
+ return $this->checkMask(Constants::PERMISSION_CREATE) and parent::mkdir($path);
+ }
+
+ public function rmdir($path) {
+ return $this->checkMask(Constants::PERMISSION_DELETE) and parent::rmdir($path);
+ }
+
+ public function unlink($path) {
+ return $this->checkMask(Constants::PERMISSION_DELETE) and parent::unlink($path);
+ }
+
+ public function file_put_contents($path, $data) {
+ $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE;
+ return $this->checkMask($permissions) and parent::file_put_contents($path, $data);
+ }
+
+ public function fopen($path, $mode) {
+ if ($mode === 'r' or $mode === 'rb') {
+ return parent::fopen($path, $mode);
+ } else {
+ $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE;
+ return $this->checkMask($permissions) ? parent::fopen($path, $mode) : false;
+ }
+ }
+
+ /**
+ * get a cache instance for the storage
+ *
+ * @param string $path
+ * @param \OC\Files\Storage\Storage (optional) the storage to pass to the cache
+ * @return \OC\Files\Cache\Cache
+ */
+ public function getCache($path = '', $storage = null) {
+ if (!$storage) {
+ $storage = $this;
+ }
+ $sourceCache = parent::getCache($path, $storage);
+ return new CachePermissionsMask($sourceCache, $this->mask);
+ }
+}
diff --git a/lib/private/files/storage/wrapper/wrapper.php b/lib/private/files/storage/wrapper/wrapper.php
index d899c88363f..ea9de287361 100644
--- a/lib/private/files/storage/wrapper/wrapper.php
+++ b/lib/private/files/storage/wrapper/wrapper.php
@@ -465,4 +465,16 @@ class Wrapper implements \OC\Files\Storage\Storage {
public function __call($method, $args) {
return call_user_func_array(array($this->storage, $method), $args);
}
+
+ /**
+ * A custom storage implementation can return an url for direct download of a give file.
+ *
+ * For now the returned array can hold the parameter url - in future more attributes might follow.
+ *
+ * @param string $path
+ * @return array
+ */
+ public function getDirectDownload($path) {
+ return $this->storage->getDirectDownload($path);
+ }
}
diff --git a/lib/private/files/utils/scanner.php b/lib/private/files/utils/scanner.php
index adb66497be0..662d4ac03c7 100644
--- a/lib/private/files/utils/scanner.php
+++ b/lib/private/files/utils/scanner.php
@@ -53,7 +53,7 @@ class Scanner extends PublicEmitter {
* get all storages for $dir
*
* @param string $dir
- * @return \OC\Files\Mount\Mount[]
+ * @return \OC\Files\Mount\MountPoint[]
*/
protected function getMounts($dir) {
//TODO: move to the node based fileapi once that's done
@@ -72,7 +72,7 @@ class Scanner extends PublicEmitter {
/**
* attach listeners to the scanner
*
- * @param \OC\Files\Mount\Mount $mount
+ * @param \OC\Files\Mount\MountPoint $mount
*/
protected function attachListener($mount) {
$scanner = $mount->getStorage()->getScanner();
@@ -114,7 +114,7 @@ class Scanner extends PublicEmitter {
* @param string $dir
* @throws \OC\ForbiddenException
*/
- public function scan($dir) {
+ public function scan($dir = '') {
$mounts = $this->getMounts($dir);
foreach ($mounts as $mount) {
if (is_null($mount->getStorage())) {
@@ -127,11 +127,12 @@ class Scanner extends PublicEmitter {
) {
throw new ForbiddenException();
}
+ $relativePath = $mount->getInternalPath($dir);
$scanner = $storage->getScanner();
$scanner->setUseTransactions(false);
$this->attachListener($mount);
$this->db->beginTransaction();
- $scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE);
+ $scanner->scan($relativePath, \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE);
$this->db->commit();
}
$this->propagator->propagateChanges(time());
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index 5f5f29ded4f..f1c15e197d9 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -113,6 +113,19 @@ class View {
}
/**
+ * get the mountpoint of the storage object for a path
+ * ( note: because a storage is not always mounted inside the fakeroot, the
+ * returned mountpoint is relative to the absolute root of the filesystem
+ * and doesn't take the chroot into account )
+ *
+ * @param string $path
+ * @return \OCP\Files\Mount\IMountPoint
+ */
+ public function getMount($path) {
+ return Filesystem::getMountManager()->find($this->getAbsolutePath($path));
+ }
+
+ /**
* resolve a path to a storage and internal path
*
* @param string $path
@@ -280,6 +293,11 @@ class View {
}
public function isDeletable($path) {
+ $absolutePath = $this->getAbsolutePath($path);
+ $mount = Filesystem::getMountManager()->find($absolutePath);
+ if ($mount->getInternalPath($absolutePath) === '') {
+ return $mount instanceof MoveableMount;
+ }
return $this->basicOperation('isDeletable', $path);
}
@@ -465,7 +483,7 @@ class View {
if ($internalPath1 === '' and $mount instanceof MoveableMount) {
if ($this->isTargetAllowed($absolutePath2)) {
/**
- * @var \OC\Files\Mount\Mount | \OC\Files\Mount\MoveableMount $mount
+ * @var \OC\Files\Mount\MountPoint | \OC\Files\Mount\MoveableMount $mount
*/
$sourceMountPoint = $mount->getMountPoint();
$result = $mount->moveMount($absolutePath2);
@@ -676,13 +694,9 @@ class View {
$this->mkdir($filePath);
}
- if (!$tmpFile) {
- debug_print_backtrace();
- }
-
$source = fopen($tmpFile, 'r');
if ($source) {
- $this->file_put_contents($path, $source);
+ $result = $this->file_put_contents($path, $source);
// $this->file_put_contents() might have already closed
// the resource, so we check it, before trying to close it
// to avoid messages in the error log.
@@ -690,7 +704,7 @@ class View {
fclose($source);
}
unlink($tmpFile);
- return true;
+ return $result;
} else {
return false;
}
@@ -902,7 +916,8 @@ class View {
$scanner = $storage->getScanner($internalPath);
$scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
$data = $cache->get($internalPath);
- } else if ($watcher->checkUpdate($internalPath, $data)) {
+ } else if (!Cache\Scanner::isPartialFile($internalPath) && $watcher->checkUpdate($internalPath, $data)) {
+ $this->updater->propagate($path);
$data = $cache->get($internalPath);
}
@@ -936,12 +951,12 @@ class View {
}
if ($mount instanceof MoveableMount && $internalPath === '') {
- $data['permissions'] |= \OCP\PERMISSION_DELETE | \OCP\PERMISSION_UPDATE;
+ $data['permissions'] |= \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_UPDATE;
}
$data = \OC_FileProxy::runPostProxies('getFileInfo', $path, $data);
- return new FileInfo($path, $storage, $internalPath, $data);
+ return new FileInfo($path, $storage, $internalPath, $data, $mount);
}
/**
@@ -958,8 +973,10 @@ class View {
return $result;
}
$path = $this->getAbsolutePath($directory);
- /** @var \OC\Files\Storage\Storage $storage */
- list($storage, $internalPath) = $this->resolvePath($directory);
+ $path = Filesystem::normalizePath($path);
+ $mount = $this->getMount($directory);
+ $storage = $mount->getStorage();
+ $internalPath = $mount->getInternalPath($path);
if ($storage) {
$cache = $storage->getCache($internalPath);
$user = \OC_User::getUser();
@@ -974,6 +991,7 @@ class View {
$scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
$data = $cache->get($internalPath);
} else if ($watcher->checkUpdate($internalPath, $data)) {
+ $this->updater->propagate($path);
$data = $cache->get($internalPath);
}
@@ -990,9 +1008,9 @@ class View {
}
// if sharing was disabled for the user we remove the share permissions
if (\OCP\Util::isSharingDisabledForUser()) {
- $content['permissions'] = $content['permissions'] & ~\OCP\PERMISSION_SHARE;
+ $content['permissions'] = $content['permissions'] & ~\OCP\Constants::PERMISSION_SHARE;
}
- $files[] = new FileInfo($path . '/' . $content['name'], $storage, $content['path'], $content);
+ $files[] = new FileInfo($path . '/' . $content['name'], $storage, $content['path'], $content, $mount);
}
//add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders
@@ -1000,7 +1018,7 @@ class View {
$dirLength = strlen($path);
foreach ($mounts as $mount) {
$mountPoint = $mount->getMountPoint();
- $subStorage = Filesystem::getStorage($mountPoint);
+ $subStorage = $mount->getStorage();
if ($subStorage) {
$subCache = $subStorage->getCache('');
@@ -1027,9 +1045,9 @@ class View {
// do not allow renaming/deleting the mount point if they are not shared files/folders
// for shared files/folders we use the permissions given by the owner
if ($mount instanceof MoveableMount) {
- $rootEntry['permissions'] = $permissions | \OCP\PERMISSION_UPDATE | \OCP\PERMISSION_DELETE;
+ $rootEntry['permissions'] = $permissions | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE;
} else {
- $rootEntry['permissions'] = $permissions & (\OCP\PERMISSION_ALL - (\OCP\PERMISSION_UPDATE | \OCP\PERMISSION_DELETE));
+ $rootEntry['permissions'] = $permissions & (\OCP\Constants::PERMISSION_ALL - (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE));
}
//remove any existing entry with the same name
@@ -1043,10 +1061,10 @@ class View {
// if sharing was disabled for the user we remove the share permissions
if (\OCP\Util::isSharingDisabledForUser()) {
- $content['permissions'] = $content['permissions'] & ~\OCP\PERMISSION_SHARE;
+ $content['permissions'] = $content['permissions'] & ~\OCP\Constants::PERMISSION_SHARE;
}
- $files[] = new FileInfo($path . '/' . $rootEntry['name'], $subStorage, '', $rootEntry);
+ $files[] = new FileInfo($path . '/' . $rootEntry['name'], $subStorage, '', $rootEntry, $mount);
}
}
}
@@ -1113,7 +1131,7 @@ class View {
* @return FileInfo[]
*/
public function search($query) {
- return $this->searchCommon('%' . $query . '%', 'search');
+ return $this->searchCommon('search', array('%' . $query . '%'));
}
/**
@@ -1123,7 +1141,7 @@ class View {
* @return FileInfo[]
*/
public function searchRaw($query) {
- return $this->searchCommon($query, 'search');
+ return $this->searchCommon('search', array($query));
}
/**
@@ -1133,47 +1151,60 @@ class View {
* @return FileInfo[]
*/
public function searchByMime($mimetype) {
- return $this->searchCommon($mimetype, 'searchByMime');
+ return $this->searchCommon('searchByMime', array($mimetype));
}
/**
- * @param string $query
- * @param string $method
+ * search for files by tag
+ *
+ * @param string|int $tag name or tag id
+ * @param string $userId owner of the tags
* @return FileInfo[]
*/
- private function searchCommon($query, $method) {
+ public function searchByTag($tag, $userId) {
+ return $this->searchCommon('searchByTag', array($tag, $userId));
+ }
+
+ /**
+ * @param string $method cache method
+ * @param array $args
+ * @return FileInfo[]
+ */
+ private function searchCommon($method, $args) {
$files = array();
$rootLength = strlen($this->fakeRoot);
- $mountPoint = Filesystem::getMountPoint($this->fakeRoot);
- $storage = Filesystem::getStorage($mountPoint);
+ $mount = $this->getMount('');
+ $mountPoint = $mount->getMountPoint();
+ $storage = $mount->getStorage();
if ($storage) {
$cache = $storage->getCache('');
- $results = $cache->$method($query);
+ $results = call_user_func_array(array($cache, $method), $args);
foreach ($results as $result) {
if (substr($mountPoint . $result['path'], 0, $rootLength + 1) === $this->fakeRoot . '/') {
$internalPath = $result['path'];
$path = $mountPoint . $result['path'];
$result['path'] = substr($mountPoint . $result['path'], $rootLength);
- $files[] = new FileInfo($path, $storage, $internalPath, $result);
+ $files[] = new FileInfo($path, $storage, $internalPath, $result, $mount);
}
}
- $mountPoints = Filesystem::getMountPoints($this->fakeRoot);
- foreach ($mountPoints as $mountPoint) {
- $storage = Filesystem::getStorage($mountPoint);
+ $mounts = Filesystem::getMountManager()->findIn($this->fakeRoot);
+ foreach ($mounts as $mount) {
+ $mountPoint = $mount->getMountPoint();
+ $storage = $mount->getStorage();
if ($storage) {
$cache = $storage->getCache('');
$relativeMountPoint = substr($mountPoint, $rootLength);
- $results = $cache->$method($query);
+ $results = call_user_func_array(array($cache, $method), $args);
if ($results) {
foreach ($results as $result) {
$internalPath = $result['path'];
$result['path'] = rtrim($relativeMountPoint . $result['path'], '/');
$path = rtrim($mountPoint . $internalPath, '/');
- $files[] = new FileInfo($path, $storage, $internalPath, $result);
+ $files[] = new FileInfo($path, $storage, $internalPath, $result, $mount);
}
}
}
@@ -1229,7 +1260,7 @@ class View {
$mounts = array_reverse($mounts);
foreach ($mounts as $mount) {
/**
- * @var \OC\Files\Mount\Mount $mount
+ * @var \OC\Files\Mount\MountPoint $mount
*/
if ($mount->getStorage()) {
$cache = $mount->getStorage()->getCache();
diff --git a/lib/private/group.php b/lib/private/group.php
index 49f683c411a..d6e6e17f881 100644
--- a/lib/private/group.php
+++ b/lib/private/group.php
@@ -37,6 +37,7 @@ class OC_Group {
/**
* @return \OC\Group\Manager
+ * @deprecated Use \OC::$server->getGroupManager();
*/
public static function getManager() {
return \OC::$server->getGroupManager();
@@ -44,6 +45,7 @@ class OC_Group {
/**
* @return \OC\User\Manager
+ * @deprecated Use \OC::$server->getUserManager()
*/
private static function getUserManager() {
return \OC::$server->getUserManager();
@@ -73,12 +75,10 @@ class OC_Group {
*
* Tries to create a new group. If the group name already exists, false will
* be returned. Basic checking of Group name
+ * @deprecated Use \OC::$server->getGroupManager()->createGroup() instead
*/
public static function createGroup($gid) {
- OC_Hook::emit("OC_Group", "pre_createGroup", array("run" => true, "gid" => $gid));
-
if (self::getManager()->createGroup($gid)) {
- OC_Hook::emit("OC_User", "post_createGroup", array("gid" => $gid));
return true;
} else {
return false;
@@ -91,19 +91,12 @@ class OC_Group {
* @return bool
*
* Deletes a group and removes it from the group_user-table
+ * @deprecated Use \OC::$server->getGroupManager()->delete() instead
*/
public static function deleteGroup($gid) {
- // Prevent users from deleting group admin
- if ($gid == "admin") {
- return false;
- }
-
- OC_Hook::emit("OC_Group", "pre_deleteGroup", array("run" => true, "gid" => $gid));
-
$group = self::getManager()->get($gid);
if ($group) {
if ($group->delete()) {
- OC_Hook::emit("OC_User", "post_deleteGroup", array("gid" => $gid));
return true;
}
}
@@ -117,6 +110,7 @@ class OC_Group {
* @return bool
*
* Checks whether the user is member of a group or not.
+ * @deprecated Use \OC::$server->getGroupManager->inGroup($user);
*/
public static function inGroup($uid, $gid) {
$group = self::getManager()->get($gid);
@@ -134,14 +128,13 @@ class OC_Group {
* @return bool
*
* Adds a user to a group.
+ * @deprecated Use \OC::$server->getGroupManager->addUser();
*/
public static function addToGroup($uid, $gid) {
$group = self::getManager()->get($gid);
$user = self::getUserManager()->get($uid);
if ($group and $user) {
- OC_Hook::emit("OC_Group", "pre_addToGroup", array("run" => true, "uid" => $uid, "gid" => $gid));
$group->addUser($user);
- OC_Hook::emit("OC_User", "post_addToGroup", array("uid" => $uid, "gid" => $gid));
return true;
} else {
return false;
@@ -176,6 +169,7 @@ class OC_Group {
*
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
+ * @deprecated Use \OC::$server->getGroupManager->getuserGroupIds($user)
*/
public static function getUserGroups($uid) {
$user = self::getUserManager()->get($uid);
@@ -209,6 +203,7 @@ class OC_Group {
*
* @param string $gid
* @return bool
+ * @deprecated Use \OC::$server->getGroupManager->groupExists($gid)
*/
public static function groupExists($gid) {
return self::getManager()->groupExists($gid);
@@ -260,6 +255,7 @@ class OC_Group {
* @param int $limit
* @param int $offset
* @return array an array of display names (value) and user ids(key)
+ * @deprecated Use \OC::$server->getGroupManager->displayNamesInGroup($gid, $search, $limit, $offset)
*/
public static function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
return self::getManager()->displayNamesInGroup($gid, $search, $limit, $offset);
diff --git a/lib/private/group/backend.php b/lib/private/group/backend.php
index ab694268bb3..9348463a53c 100644
--- a/lib/private/group/backend.php
+++ b/lib/private/group/backend.php
@@ -23,29 +23,51 @@
/**
* error code for functions not provided by the group backend
+ * @deprecated Use \OC_Group_Backend::NOT_IMPLEMENTED instead
*/
define('OC_GROUP_BACKEND_NOT_IMPLEMENTED', -501);
/**
* actions that user backends can define
*/
+/** @deprecated Use \OC_Group_Backend::CREATE_GROUP instead */
define('OC_GROUP_BACKEND_CREATE_GROUP', 0x00000001);
+/** @deprecated Use \OC_Group_Backend::DELETE_GROUP instead */
define('OC_GROUP_BACKEND_DELETE_GROUP', 0x00000010);
+/** @deprecated Use \OC_Group_Backend::ADD_TO_GROUP instead */
define('OC_GROUP_BACKEND_ADD_TO_GROUP', 0x00000100);
+/** @deprecated Use \OC_Group_Backend::REMOVE_FROM_GOUP instead */
define('OC_GROUP_BACKEND_REMOVE_FROM_GOUP', 0x00001000);
+/** @deprecated Obsolete */
define('OC_GROUP_BACKEND_GET_DISPLAYNAME', 0x00010000); //OBSOLETE
+/** @deprecated Use \OC_Group_Backend::COUNT_USERS instead */
define('OC_GROUP_BACKEND_COUNT_USERS', 0x00100000);
/**
* Abstract base class for user management
*/
abstract class OC_Group_Backend implements OC_Group_Interface {
+ /**
+ * error code for functions not provided by the group backend
+ */
+ const NOT_IMPLEMENTED = -501;
+
+ /**
+ * actions that user backends can define
+ */
+ const CREATE_GROUP = 0x00000001;
+ const DELETE_GROUP = 0x00000010;
+ const ADD_TO_GROUP = 0x00000100;
+ const REMOVE_FROM_GOUP = 0x00001000;
+ //OBSOLETE const GET_DISPLAYNAME = 0x00010000;
+ const COUNT_USERS = 0x00100000;
+
protected $possibleActions = array(
- OC_GROUP_BACKEND_CREATE_GROUP => 'createGroup',
- OC_GROUP_BACKEND_DELETE_GROUP => 'deleteGroup',
- OC_GROUP_BACKEND_ADD_TO_GROUP => 'addToGroup',
- OC_GROUP_BACKEND_REMOVE_FROM_GOUP => 'removeFromGroup',
- OC_GROUP_BACKEND_COUNT_USERS => 'countUsersInGroup',
+ self::CREATE_GROUP => 'createGroup',
+ self::DELETE_GROUP => 'deleteGroup',
+ self::ADD_TO_GROUP => 'addToGroup',
+ self::REMOVE_FROM_GOUP => 'removeFromGroup',
+ self::COUNT_USERS => 'countUsersInGroup',
);
/**
diff --git a/lib/private/group/database.php b/lib/private/group/database.php
index 8aebefabd27..2069e99599f 100644
--- a/lib/private/group/database.php
+++ b/lib/private/group/database.php
@@ -84,6 +84,10 @@ class OC_Group_Database extends OC_Group_Backend {
$stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `gid` = ?" );
$stmt->execute( array( $gid ));
+ // Delete the group-groupadmin relation
+ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_admin` WHERE `gid` = ?" );
+ $stmt->execute( array( $gid ));
+
return true;
}
@@ -216,7 +220,7 @@ class OC_Group_Database extends OC_Group_Backend {
* @param string $gid
* @param string $search
* @return int|false
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
public function countUsersInGroup($gid, $search = '') {
$stmt = OC_DB::prepare('SELECT COUNT(`uid`) AS `count` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?');
diff --git a/lib/private/group/group.php b/lib/private/group/group.php
index 6f8b84dff1a..5f439e91cde 100644
--- a/lib/private/group/group.php
+++ b/lib/private/group/group.php
@@ -118,7 +118,7 @@ class Group implements IGroup {
$this->emitter->emit('\OC\Group', 'preAddUser', array($this, $user));
}
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_ADD_TO_GROUP)) {
+ if ($backend->implementsActions(\OC_Group_Backend::ADD_TO_GROUP)) {
$backend->addToGroup($user->getUID(), $this->gid);
if ($this->users) {
$this->users[$user->getUID()] = $user;
@@ -142,7 +142,7 @@ class Group implements IGroup {
$this->emitter->emit('\OC\Group', 'preRemoveUser', array($this, $user));
}
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_REMOVE_FROM_GOUP) and $backend->inGroup($user->getUID(), $this->gid)) {
+ if ($backend->implementsActions(\OC_Group_Backend::REMOVE_FROM_GOUP) and $backend->inGroup($user->getUID(), $this->gid)) {
$backend->removeFromGroup($user->getUID(), $this->gid);
$result = true;
}
@@ -191,7 +191,7 @@ class Group implements IGroup {
public function count($search = '') {
$users = false;
foreach ($this->backends as $backend) {
- if($backend->implementsActions(OC_GROUP_BACKEND_COUNT_USERS)) {
+ if($backend->implementsActions(\OC_Group_Backend::COUNT_USERS)) {
if($users === false) {
//we could directly add to a bool variable, but this would
//be ugly
@@ -229,12 +229,17 @@ class Group implements IGroup {
* @return bool
*/
public function delete() {
+ // Prevent users from deleting group admin
+ if ($this->getGID() === 'admin') {
+ return false;
+ }
+
$result = false;
if ($this->emitter) {
$this->emitter->emit('\OC\Group', 'preDelete', array($this));
}
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_DELETE_GROUP)) {
+ if ($backend->implementsActions(\OC_Group_Backend::DELETE_GROUP)) {
$result = true;
$backend->deleteGroup($this->gid);
}
diff --git a/lib/private/group/interface.php b/lib/private/group/interface.php
index ee5c2d635d6..ee2d718e5dd 100644
--- a/lib/private/group/interface.php
+++ b/lib/private/group/interface.php
@@ -28,7 +28,7 @@ interface OC_Group_Interface {
* @return boolean
*
* Returns the supported actions as int to be
- * compared with OC_GROUP_BACKEND_CREATE_GROUP etc.
+ * compared with \OC_Group_Backend::CREATE_GROUP etc.
*/
public function implementsActions($actions);
diff --git a/lib/private/group/manager.php b/lib/private/group/manager.php
index 417be79ab30..8dcf14fc1d2 100644
--- a/lib/private/group/manager.php
+++ b/lib/private/group/manager.php
@@ -134,7 +134,7 @@ class Manager extends PublicEmitter implements IGroupManager {
} else {
$this->emit('\OC\Group', 'preCreate', array($gid));
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_CREATE_GROUP)) {
+ if ($backend->implementsActions(\OC_Group_Backend::CREATE_GROUP)) {
$backend->createGroup($gid);
$group = $this->getGroupObject($gid);
$this->emit('\OC\Group', 'postCreate', array($group));
@@ -170,7 +170,14 @@ class Manager extends PublicEmitter implements IGroupManager {
* @return \OC\Group\Group[]
*/
public function getUserGroups($user) {
- $uid = $user->getUID();
+ return $this->getUserIdGroups($user->getUID());
+ }
+
+ /**
+ * @param string $uid the user id
+ * @return \OC\Group\Group[]
+ */
+ public function getUserIdGroups($uid) {
if (isset($this->cachedUserGroups[$uid])) {
return $this->cachedUserGroups[$uid];
}
@@ -184,7 +191,26 @@ class Manager extends PublicEmitter implements IGroupManager {
$this->cachedUserGroups[$uid] = $groups;
return $this->cachedUserGroups[$uid];
}
-
+
+ /**
+ * Checks if a userId is in the admin group
+ * @param string $userId
+ * @return bool if admin
+ */
+ public function isAdmin($userId) {
+ return $this->isInGroup($userId, 'admin');
+ }
+
+ /**
+ * Checks if a userId is in a group
+ * @param string $userId
+ * @param group $group
+ * @return bool if in group
+ */
+ public function isInGroup($userId, $group) {
+ return array_key_exists($group, $this->getUserIdGroups($userId));
+ }
+
/**
* get a list of group ids for a user
* @param \OC\User\User $user
diff --git a/lib/private/group/metadata.php b/lib/private/group/metadata.php
index 687a735347c..c702c924ff7 100644
--- a/lib/private/group/metadata.php
+++ b/lib/private/group/metadata.php
@@ -29,7 +29,7 @@ class MetaData {
protected $metaData = array();
/**
- * @var \OC\Group\Manager $groupManager
+ * @var \OCP\IGroupManager $groupManager
*/
protected $groupManager;
@@ -41,12 +41,12 @@ class MetaData {
/**
* @param string $user the uid of the current user
* @param bool $isAdmin whether the current users is an admin
- * @param \OC\Group\Manager $groupManager
+ * @param \OCP\IGroupManager $groupManager
*/
public function __construct(
$user,
$isAdmin,
- \OC\Group\Manager $groupManager
+ \OCP\IGroupManager $groupManager
) {
$this->user = $user;
$this->isAdmin = (bool)$isAdmin;
@@ -168,6 +168,7 @@ class MetaData {
if($this->isAdmin) {
return $this->groupManager->search($search);
} else {
+ // FIXME: Remove static method call
$groupIds = \OC_SubAdmin::getSubAdminsGroups($this->user);
/* \OC_SubAdmin::getSubAdminsGroups() returns an array of GIDs, but this
diff --git a/lib/private/helper.php b/lib/private/helper.php
index 5b1d31bfc59..8e9b7d3b6f3 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -58,12 +58,11 @@ class OC_Helper {
}
/**
- * @param $key
+ * @param string $key
* @return string url to the online documentation
*/
public static function linkToDocs($key) {
- $theme = new OC_Defaults();
- return $theme->buildDocLinkToKey($key);
+ return OC::$server->getURLGenerator()->linkToDocs($key);
}
/**
@@ -159,7 +158,10 @@ class OC_Helper {
$alias = array(
'application/octet-stream' => 'file', // use file icon as fallback
- 'application/illustrator' => 'image',
+ 'application/illustrator' => 'image/vector',
+ 'application/postscript' => 'image/vector',
+ 'image/svg+xml' => 'image/vector',
+
'application/coreldraw' => 'image',
'application/x-gimp' => 'image',
'application/x-photoshop' => 'image',
@@ -873,6 +875,23 @@ class OC_Helper {
}
/**
+ * Try to find a program
+ * Note: currently windows is not supported
+ *
+ * @param string $program
+ * @return null|string
+ */
+ public static function findBinaryPath($program) {
+ if (!\OC_Util::runningOnWindows() && self::is_function_enabled('exec')) {
+ exec('command -v ' . escapeshellarg($program) . ' 2> /dev/null', $output, $returnCode);
+ if ($returnCode === 0 && count($output) > 0) {
+ return escapeshellcmd($output[0]);
+ }
+ }
+ return null;
+ }
+
+ /**
* Calculate the disc space for the given path
*
* @param string $path
@@ -886,6 +905,9 @@ class OC_Helper {
if (!$rootInfo) {
$rootInfo = \OC\Files\Filesystem::getFileInfo($path, false);
}
+ if (!$rootInfo instanceof \OCP\Files\FileInfo) {
+ throw new \OCP\Files\NotFoundException();
+ }
$used = $rootInfo->getSize();
if ($used < 0) {
$used = 0;
@@ -957,4 +979,12 @@ class OC_Helper {
return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative);
}
+
+ /**
+ * Returns whether the config file is set manually to read-only
+ * @return bool
+ */
+ public static function isReadOnlyConfigEnabled() {
+ return \OC::$server->getConfig()->getSystemValue('config_is_read_only', false);
+ }
}
diff --git a/lib/private/httphelper.php b/lib/private/httphelper.php
index 8b7aebb3d4d..1f3482b3514 100644
--- a/lib/private/httphelper.php
+++ b/lib/private/httphelper.php
@@ -8,17 +8,24 @@
namespace OC;
+use OCP\IConfig;
+use OCP\ICertificateManager;
+
class HTTPHelper {
const USER_AGENT = 'ownCloud Server Crawler';
- /** @var \OC\AllConfig */
+ /** @var \OCP\IConfig */
private $config;
+ /** @var \OC\Security\CertificateManager */
+ private $certificateManager;
+
/**
- * @param \OC\AllConfig $config
+ * @param \OCP\IConfig $config
*/
- public function __construct(AllConfig $config) {
+ public function __construct(IConfig $config, ICertificateManager $certificateManager) {
$this->config = $config;
+ $this->certificateManager = $certificateManager;
}
/**
@@ -72,7 +79,7 @@ class HTTPHelper {
curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyUserPwd);
}
- if (ini_get('open_basedir') === '' && (ini_get('safe_mode') === false) || strtolower(ini_get('safe_mode')) === 'off') {
+ if (ini_get('open_basedir') === '') {
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, $max_redirects);
$data = curl_exec($curl);
@@ -174,4 +181,50 @@ class HTTPHelper {
return $location;
}
+ /**
+ * create string of parameters for post request
+ *
+ * @param array $parameters
+ * @return string
+ */
+ private function assemblePostParameters(array $parameters) {
+ $parameterString = '';
+ foreach ($parameters as $key => $value) {
+ $parameterString .= $key . '=' . urlencode($value) . '&';
+ }
+
+ return rtrim($parameterString, '&');
+ }
+
+ /**
+ * send http post request
+ *
+ * @param string $url
+ * @param array $fields data send by the request
+ * @return bool
+ */
+ public function post($url, array $fields) {
+
+ $fieldsString = $this->assemblePostParameters($fields);
+
+ $certBundle = $this->certificateManager->getCertificateBundle();
+
+ $ch = curl_init();
+
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_POST, count($fields));
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldsString);
+ if (is_readable($certBundle)) {
+ curl_setopt($ch, CURLOPT_CAINFO, $certBundle);
+ }
+
+ $result = curl_exec($ch);
+ $success = $result ? true : false;
+
+ curl_close($ch);
+
+ return array('success' => $success, 'result' => $result);
+ }
+
}
diff --git a/lib/private/image.php b/lib/private/image.php
index bab91745c05..07cfb0f72d3 100644
--- a/lib/private/image.php
+++ b/lib/private/image.php
@@ -1,25 +1,17 @@
<?php
/**
-* ownCloud
-*
-* @author Thomas Tanghus
-* @copyright 2011 Thomas Tanghus <thomas@tanghus.net>
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*
-*/
+ * ownCloud
+ *
+ * @author Thomas Tanghus
+ * @copyright 2011 Thomas Tanghus <thomas@tanghus.net>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
/**
* Class for basic image manipulation
*/
@@ -33,13 +25,19 @@ class OC_Image {
private $fileInfo;
/**
- * Get mime type for an image file.
- * @param string|null $filePath The path to a local image file.
- * @return string The mime type if the it could be determined, otherwise an empty string.
- */
+ * @var \OCP\ILogger
+ */
+ private $logger;
+
+ /**
+ * Get mime type for an image file.
+ *
+ * @param string|null $filePath The path to a local image file.
+ * @return string The mime type if the it could be determined, otherwise an empty string.
+ */
static public function getMimeTypeForFile($filePath) {
// exif_imagetype throws "read error!" if file is less than 12 byte
- if (filesize($filePath) > 11) {
+ if ($filePath !== null && filesize($filePath) > 11) {
$imageType = exif_imagetype($filePath);
} else {
$imageType = false;
@@ -49,14 +47,19 @@ class OC_Image {
/**
* Constructor.
+ *
* @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by
* an imagecreate* function.
- * @return \OC_Image False on error
+ * @param \OCP\ILogger $logger
*/
- public function __construct($imageRef = null) {
- //OC_Log::write('core',__METHOD__.'(): start', OC_Log::DEBUG);
- if(!extension_loaded('gd') || !function_exists('gd_info')) {
- OC_Log::write('core', __METHOD__.'(): GD module not installed', OC_Log::ERROR);
+ public function __construct($imageRef = null, $logger = null) {
+ $this->logger = $logger;
+ if (is_null($logger)) {
+ $this->logger = \OC::$server->getLogger();
+ }
+
+ if (!extension_loaded('gd') || !function_exists('gd_info')) {
+ $this->logger->error(__METHOD__ . '(): GD module not installed', array('app' => 'core'));
return false;
}
@@ -64,51 +67,56 @@ class OC_Image {
$this->fileInfo = new finfo(FILEINFO_MIME_TYPE);
}
- if(!is_null($imageRef)) {
+ if (!is_null($imageRef)) {
$this->load($imageRef);
}
}
/**
- * Determine whether the object contains an image resource.
- * @return bool
- */
+ * Determine whether the object contains an image resource.
+ *
+ * @return bool
+ */
public function valid() { // apparently you can't name a method 'empty'...
return is_resource($this->resource);
}
/**
- * Returns the MIME type of the image or an empty string if no image is loaded.
- * @return string
- */
+ * Returns the MIME type of the image or an empty string if no image is loaded.
+ *
+ * @return string
+ */
public function mimeType() {
return $this->valid() ? $this->mimeType : '';
}
/**
- * Returns the width of the image or -1 if no image is loaded.
- * @return int
- */
+ * Returns the width of the image or -1 if no image is loaded.
+ *
+ * @return int
+ */
public function width() {
return $this->valid() ? imagesx($this->resource) : -1;
}
/**
- * Returns the height of the image or -1 if no image is loaded.
- * @return int
- */
+ * Returns the height of the image or -1 if no image is loaded.
+ *
+ * @return int
+ */
public function height() {
return $this->valid() ? imagesy($this->resource) : -1;
}
/**
- * Returns the width when the image orientation is top-left.
- * @return int
- */
+ * Returns the width when the image orientation is top-left.
+ *
+ * @return int
+ */
public function widthTopLeft() {
$o = $this->getOrientation();
- OC_Log::write('core', 'OC_Image->widthTopLeft() Orientation: '.$o, OC_Log::DEBUG);
- switch($o) {
+ $this->logger->debug('OC_Image->widthTopLeft() Orientation: ' . $o, array('app' => 'core'));
+ switch ($o) {
case -1:
case 1:
case 2: // Not tested
@@ -125,13 +133,14 @@ class OC_Image {
}
/**
- * Returns the height when the image orientation is top-left.
- * @return int
- */
+ * Returns the height when the image orientation is top-left.
+ *
+ * @return int
+ */
public function heightTopLeft() {
$o = $this->getOrientation();
- OC_Log::write('core', 'OC_Image->heightTopLeft() Orientation: '.$o, OC_Log::DEBUG);
- switch($o) {
+ $this->logger->debug('OC_Image->heightTopLeft() Orientation: ' . $o, array('app' => 'core'));
+ switch ($o) {
case -1:
case 1:
case 2: // Not tested
@@ -149,32 +158,34 @@ class OC_Image {
/**
* Outputs the image.
+ *
* @param string $mimeType
* @return bool
*/
- public function show($mimeType=null) {
- if($mimeType === null) {
+ public function show($mimeType = null) {
+ if ($mimeType === null) {
$mimeType = $this->mimeType();
}
- header('Content-Type: '.$mimeType);
+ header('Content-Type: ' . $mimeType);
return $this->_output(null, $mimeType);
}
/**
* Saves the image.
+ *
* @param string $filePath
* @param string $mimeType
* @return bool
*/
- public function save($filePath=null, $mimeType=null) {
- if($mimeType === null) {
+ public function save($filePath = null, $mimeType = null) {
+ if ($mimeType === null) {
$mimeType = $this->mimeType();
}
- if($filePath === null && $this->filePath === null) {
- OC_Log::write('core', __METHOD__.'(): called with no path.', OC_Log::ERROR);
+ if ($filePath === null && $this->filePath === null) {
+ $this->logger->error(__METHOD__ . '(): called with no path.', array('app' => 'core'));
return false;
- } elseif($filePath === null && $this->filePath !== null) {
+ } elseif ($filePath === null && $this->filePath !== null) {
$filePath = $this->filePath;
}
return $this->_output($filePath, $mimeType);
@@ -182,22 +193,21 @@ class OC_Image {
/**
* Outputs/saves the image.
+ *
* @param string $filePath
* @param string $mimeType
* @return bool
* @throws Exception
*/
- private function _output($filePath=null, $mimeType=null) {
- if($filePath) {
+ private function _output($filePath = null, $mimeType = null) {
+ if ($filePath) {
if (!file_exists(dirname($filePath)))
mkdir(dirname($filePath), 0777, true);
- if(!is_writable(dirname($filePath))) {
- OC_Log::write('core',
- __METHOD__.'(): Directory \''.dirname($filePath).'\' is not writable.',
- OC_Log::ERROR);
+ if (!is_writable(dirname($filePath))) {
+ $this->logger->error(__METHOD__ . '(): Directory \'' . dirname($filePath) . '\' is not writable.', array('app' => 'core'));
return false;
- } elseif(is_writable(dirname($filePath)) && file_exists($filePath) && !is_writable($filePath)) {
- OC_Log::write('core', __METHOD__.'(): File \''.$filePath.'\' is not writable.', OC_Log::ERROR);
+ } elseif (is_writable(dirname($filePath)) && file_exists($filePath) && !is_writable($filePath)) {
+ $this->logger->error(__METHOD__ . '(): File \'' . $filePath . '\' is not writable.', array('app' => 'core'));
return false;
}
}
@@ -206,8 +216,8 @@ class OC_Image {
}
$imageType = $this->imageType;
- if($mimeType !== null) {
- switch($mimeType) {
+ if ($mimeType !== null) {
+ switch ($mimeType) {
case 'image/gif':
$imageType = IMAGETYPE_GIF;
break;
@@ -228,7 +238,7 @@ class OC_Image {
}
}
- switch($imageType) {
+ switch ($imageType) {
case IMAGETYPE_GIF:
$retVal = imagegif($this->resource, $filePath);
break;
@@ -259,22 +269,22 @@ class OC_Image {
}
/**
- * Prints the image when called as $image().
- */
+ * Prints the image when called as $image().
+ */
public function __invoke() {
return $this->show();
}
/**
- * @return resource Returns the image resource in any.
- */
+ * @return resource Returns the image resource in any.
+ */
public function resource() {
return $this->resource;
}
/**
- * @return string Returns the raw image data.
- */
+ * @return string Returns the raw image data.
+ */
function data() {
ob_start();
switch ($this->mimeType) {
@@ -289,11 +299,11 @@ class OC_Image {
break;
default:
$res = imagepng($this->resource);
- OC_Log::write('core', 'OC_Image->data. Couldn\'t guess mimetype, defaulting to png', OC_Log::INFO);
+ $this->logger->info('OC_Image->data. Could not guess mime-type, defaulting to png', array('app' => 'core'));
break;
}
if (!$res) {
- OC_Log::write('core', 'OC_Image->data. Error getting image data.', OC_Log::ERROR);
+ $this->logger->error('OC_Image->data. Error getting image data.', array('app' => 'core'));
}
return ob_get_clean();
}
@@ -306,43 +316,49 @@ class OC_Image {
}
/**
- * (I'm open for suggestions on better method name ;)
- * Get the orientation based on EXIF data.
- * @return int The orientation or -1 if no EXIF data is available.
- */
+ * (I'm open for suggestions on better method name ;)
+ * Get the orientation based on EXIF data.
+ *
+ * @return int The orientation or -1 if no EXIF data is available.
+ */
public function getOrientation() {
- if(!is_callable('exif_read_data')) {
- OC_Log::write('core', 'OC_Image->fixOrientation() Exif module not enabled.', OC_Log::DEBUG);
+ if ($this->imageType !== IMAGETYPE_JPEG) {
+ $this->logger->debug('OC_Image->fixOrientation() Image is not a JPEG.', array('app' => 'core'));
return -1;
}
- if(!$this->valid()) {
- OC_Log::write('core', 'OC_Image->fixOrientation() No image loaded.', OC_Log::DEBUG);
+ if (!is_callable('exif_read_data')) {
+ $this->logger->debug('OC_Image->fixOrientation() Exif module not enabled.', array('app' => 'core'));
return -1;
}
- if(is_null($this->filePath) || !is_readable($this->filePath)) {
- OC_Log::write('core', 'OC_Image->fixOrientation() No readable file path set.', OC_Log::DEBUG);
+ if (!$this->valid()) {
+ $this->logger->debug('OC_Image->fixOrientation() No image loaded.', array('app' => 'core'));
+ return -1;
+ }
+ if (is_null($this->filePath) || !is_readable($this->filePath)) {
+ $this->logger->debug('OC_Image->fixOrientation() No readable file path set.', array('app' => 'core'));
return -1;
}
$exif = @exif_read_data($this->filePath, 'IFD0');
- if(!$exif) {
+ if (!$exif) {
return -1;
}
- if(!isset($exif['Orientation'])) {
+ if (!isset($exif['Orientation'])) {
return -1;
}
return $exif['Orientation'];
}
/**
- * (I'm open for suggestions on better method name ;)
- * Fixes orientation based on EXIF data.
- * @return bool.
- */
+ * (I'm open for suggestions on better method name ;)
+ * Fixes orientation based on EXIF data.
+ *
+ * @return bool.
+ */
public function fixOrientation() {
$o = $this->getOrientation();
- OC_Log::write('core', 'OC_Image->fixOrientation() Orientation: '.$o, OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Orientation: ' . $o, array('app' => 'core'));
$rotate = 0;
- switch($o) {
+ switch ($o) {
case -1:
return false; //Nothing to fix
case 1:
@@ -371,24 +387,24 @@ class OC_Image {
$rotate = 90;
break;
}
- if($rotate) {
+ if ($rotate) {
$res = imagerotate($this->resource, $rotate, 0);
- if($res) {
- if(imagealphablending($res, true)) {
- if(imagesavealpha($res, true)) {
+ if ($res) {
+ if (imagealphablending($res, true)) {
+ if (imagesavealpha($res, true)) {
imagedestroy($this->resource);
$this->resource = $res;
return true;
} else {
- OC_Log::write('core', 'OC_Image->fixOrientation() Error during alphasaving.', OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Error during alpha-saving', array('app' => 'core'));
return false;
}
} else {
- OC_Log::write('core', 'OC_Image->fixOrientation() Error during alphablending.', OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Error during alpha-blending', array('app' => 'core'));
return false;
}
} else {
- OC_Log::write('core', 'OC_Image->fixOrientation() Error during oriention fixing.', OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Error during orientation fixing', array('app' => 'core'));
return false;
}
}
@@ -397,52 +413,54 @@ class OC_Image {
/**
* Loads an image from a local file, a base64 encoded string or a resource created by an imagecreate* function.
+ *
* @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by an imagecreate* function or a file resource (file handle ).
* @return resource|false An image resource or false on error
*/
public function load($imageRef) {
- if(is_resource($imageRef)) {
- if(get_resource_type($imageRef) == 'gd') {
+ if (is_resource($imageRef)) {
+ if (get_resource_type($imageRef) == 'gd') {
$this->resource = $imageRef;
return $this->resource;
- } elseif(in_array(get_resource_type($imageRef), array('file', 'stream'))) {
+ } elseif (in_array(get_resource_type($imageRef), array('file', 'stream'))) {
return $this->loadFromFileHandle($imageRef);
}
- } elseif($this->loadFromBase64($imageRef) !== false) {
+ } elseif ($this->loadFromBase64($imageRef) !== false) {
return $this->resource;
- } elseif($this->loadFromFile($imageRef) !== false) {
+ } elseif ($this->loadFromFile($imageRef) !== false) {
return $this->resource;
- } elseif($this->loadFromData($imageRef) !== false) {
+ } elseif ($this->loadFromData($imageRef) !== false) {
return $this->resource;
- } else {
- OC_Log::write('core', __METHOD__.'(): couldn\'t load anything. Giving up!', OC_Log::DEBUG);
- return false;
}
+ $this->logger->debug(__METHOD__ . '(): could not load anything. Giving up!', array('app' => 'core'));
+ return false;
}
/**
- * Loads an image from an open file handle.
- * It is the responsibility of the caller to position the pointer at the correct place and to close the handle again.
- * @param resource $handle
- * @return resource|false An image resource or false on error
- */
+ * Loads an image from an open file handle.
+ * It is the responsibility of the caller to position the pointer at the correct place and to close the handle again.
+ *
+ * @param resource $handle
+ * @return resource|false An image resource or false on error
+ */
public function loadFromFileHandle($handle) {
- OC_Log::write('core', __METHOD__.'(): Trying', OC_Log::DEBUG);
$contents = stream_get_contents($handle);
- if($this->loadFromData($contents)) {
+ if ($this->loadFromData($contents)) {
return $this->resource;
}
+ return false;
}
/**
- * Loads an image from a local file.
- * @param bool|string $imagePath The path to a local file.
- * @return bool|resource An image resource or false on error
- */
- public function loadFromFile($imagePath=false) {
+ * Loads an image from a local file.
+ *
+ * @param bool|string $imagePath The path to a local file.
+ * @return bool|resource An image resource or false on error
+ */
+ public function loadFromFile($imagePath = false) {
// exif_imagetype throws "read error!" if file is less than 12 byte
- if(!@is_file($imagePath) || !file_exists($imagePath) || filesize($imagePath) < 12 || !is_readable($imagePath)) {
- OC_Log::write('core', 'OC_Image->loadFromFile, couldn\'t load: ' . (string) urlencode($imagePath), OC_Log::DEBUG);
+ if (!@is_file($imagePath) || !file_exists($imagePath) || filesize($imagePath) < 12 || !is_readable($imagePath)) {
+ $this->logger->debug('OC_Image->loadFromFile, could not load: ' . (string)urlencode($imagePath), array('app' => 'core'));
return false;
}
$iType = exif_imagetype($imagePath);
@@ -454,18 +472,14 @@ class OC_Image {
imagealphablending($this->resource, true);
imagesavealpha($this->resource, true);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, GIF images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, GIF images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_JPEG:
if (imagetypes() & IMG_JPG) {
$this->resource = imagecreatefromjpeg($imagePath);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, JPG images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, JPG images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_PNG:
@@ -475,31 +489,25 @@ class OC_Image {
imagealphablending($this->resource, true);
imagesavealpha($this->resource, true);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, PNG images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, PNG images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_XBM:
if (imagetypes() & IMG_XPM) {
$this->resource = imagecreatefromxbm($imagePath);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, XBM/XPM images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, XBM/XPM images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_WBMP:
if (imagetypes() & IMG_WBMP) {
$this->resource = imagecreatefromwbmp($imagePath);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, WBMP images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, WBMP images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_BMP:
- $this->resource = $this->imagecreatefrombmp($imagePath);
+ $this->resource = $this->imagecreatefrombmp($imagePath);
break;
/*
case IMAGETYPE_TIFF_II: // (intel byte order)
@@ -530,10 +538,10 @@ class OC_Image {
// this is mostly file created from encrypted file
$this->resource = imagecreatefromstring(\OC\Files\Filesystem::file_get_contents(\OC\Files\Filesystem::getLocalPath($imagePath)));
$iType = IMAGETYPE_PNG;
- OC_Log::write('core', 'OC_Image->loadFromFile, Default', OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, Default', array('app' => 'core'));
break;
}
- if($this->valid()) {
+ if ($this->valid()) {
$this->imageType = $iType;
$this->mimeType = image_type_to_mime_type($iType);
$this->filePath = $imagePath;
@@ -542,47 +550,49 @@ class OC_Image {
}
/**
- * Loads an image from a string of data.
- * @param string $str A string of image data as read from a file.
- * @return bool|resource An image resource or false on error
- */
+ * Loads an image from a string of data.
+ *
+ * @param string $str A string of image data as read from a file.
+ * @return bool|resource An image resource or false on error
+ */
public function loadFromData($str) {
- if(is_resource($str)) {
+ if (is_resource($str)) {
return false;
}
$this->resource = @imagecreatefromstring($str);
if ($this->fileInfo) {
$this->mimeType = $this->fileInfo->buffer($str);
}
- if(is_resource($this->resource)) {
+ if (is_resource($this->resource)) {
imagealphablending($this->resource, false);
imagesavealpha($this->resource, true);
}
- if(!$this->resource) {
- OC_Log::write('core', 'OC_Image->loadFromData, couldn\'t load', OC_Log::DEBUG);
+ if (!$this->resource) {
+ $this->logger->debug('OC_Image->loadFromFile, could not load', array('app' => 'core'));
return false;
}
return $this->resource;
}
/**
- * Loads an image from a base64 encoded string.
- * @param string $str A string base64 encoded string of image data.
- * @return bool|resource An image resource or false on error
- */
+ * Loads an image from a base64 encoded string.
+ *
+ * @param string $str A string base64 encoded string of image data.
+ * @return bool|resource An image resource or false on error
+ */
public function loadFromBase64($str) {
- if(!is_string($str)) {
+ if (!is_string($str)) {
return false;
}
$data = base64_decode($str);
- if($data) { // try to load from string data
+ if ($data) { // try to load from string data
$this->resource = @imagecreatefromstring($data);
if ($this->fileInfo) {
$this->mimeType = $this->fileInfo->buffer($data);
}
- if(!$this->resource) {
- OC_Log::write('core', 'OC_Image->loadFromBase64, couldn\'t load', OC_Log::DEBUG);
+ if (!$this->resource) {
+ $this->logger->debug('OC_Image->loadFromBase64, could not load', array('app' => 'core'));
return false;
}
return $this->resource;
@@ -593,6 +603,7 @@ class OC_Image {
/**
* Create a new image from file or URL
+ *
* @link http://www.programmierer-forum.de/function-imagecreatefrombmp-laeuft-mit-allen-bitraten-t143137.htm
* @version 1.00
* @param string $fileName <p>
@@ -602,7 +613,7 @@ class OC_Image {
*/
private function imagecreatefrombmp($fileName) {
if (!($fh = fopen($fileName, 'rb'))) {
- trigger_error('imagecreatefrombmp: Can not open ' . $fileName, E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: Can not open ' . $fileName, array('app' => 'core'));
return false;
}
// read file header
@@ -610,7 +621,7 @@ class OC_Image {
// check for bitmap
if ($meta['type'] != 19778) {
fclose($fh);
- trigger_error('imagecreatefrombmp: ' . $fileName . ' is not a bitmap!', E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: Can not open ' . $fileName . ' is not a bitmap!', array('app' => 'core'));
return false;
}
// read image header
@@ -622,7 +633,7 @@ class OC_Image {
// set bytes and padding
$meta['bytes'] = $meta['bits'] / 8;
$this->bitDepth = $meta['bits']; //remember the bit depth for the imagebmp call
- $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4)- floor($meta['width'] * $meta['bytes'] / 4)));
+ $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4) - floor($meta['width'] * $meta['bytes'] / 4)));
if ($meta['decal'] == 4) {
$meta['decal'] = 0;
}
@@ -634,7 +645,7 @@ class OC_Image {
$meta['imagesize'] = @filesize($fileName) - $meta['offset'];
if ($meta['imagesize'] < 1) {
fclose($fh);
- trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $fileName . '!', E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: Can not obtain file size of ' . $fileName . ' is not a bitmap!', array('app' => 'core'));
return false;
}
}
@@ -654,6 +665,14 @@ class OC_Image {
}
// create gd image
$im = imagecreatetruecolor($meta['width'], $meta['height']);
+ if ($im == false) {
+ fclose($fh);
+ $this->logger->warning(
+ 'imagecreatefrombmp: imagecreatetruecolor failed for file "' . $fileName . '" with dimensions ' . $meta['width'] . 'x' . $meta['height'],
+ array('app' => 'core'));
+ return false;
+ }
+
$data = fread($fh, $meta['imagesize']);
$p = 0;
$vide = chr(0);
@@ -667,7 +686,7 @@ class OC_Image {
case 32:
case 24:
if (!($part = substr($data, $p, 3))) {
- trigger_error($error, E_USER_WARNING);
+ $this->logger->warning($error, array('app' => 'core'));
return $im;
}
$color = unpack('V', $part . $vide);
@@ -675,7 +694,7 @@ class OC_Image {
case 16:
if (!($part = substr($data, $p, 2))) {
fclose($fh);
- trigger_error($error, E_USER_WARNING);
+ $this->logger->warning($error, array('app' => 'core'));
return $im;
}
$color = unpack('v', $part);
@@ -683,12 +702,12 @@ class OC_Image {
break;
case 8:
$color = unpack('n', $vide . substr($data, $p, 1));
- $color[1] = $palette[ $color[1] + 1 ];
+ $color[1] = $palette[$color[1] + 1];
break;
case 4:
$color = unpack('n', $vide . substr($data, floor($p), 1));
$color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F;
- $color[1] = $palette[ $color[1] + 1 ];
+ $color[1] = $palette[$color[1] + 1];
break;
case 1:
$color = unpack('n', $vide . substr($data, floor($p), 1));
@@ -718,13 +737,11 @@ class OC_Image {
$color[1] = ($color[1] & 0x1);
break;
}
- $color[1] = $palette[ $color[1] + 1 ];
+ $color[1] = $palette[$color[1] + 1];
break;
default:
fclose($fh);
- trigger_error('imagecreatefrombmp: '
- . $fileName . ' has ' . $meta['bits'] . ' bits and this is not supported!',
- E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: ' . $fileName . ' has ' . $meta['bits'] . ' bits and this is not supported!', array('app' => 'core'));
return false;
}
imagesetpixel($im, $x, $y, $color[1]);
@@ -739,24 +756,25 @@ class OC_Image {
}
/**
- * Resizes the image preserving ratio.
- * @param integer $maxSize The maximum size of either the width or height.
- * @return bool
- */
+ * Resizes the image preserving ratio.
+ *
+ * @param integer $maxSize The maximum size of either the width or height.
+ * @return bool
+ */
public function resize($maxSize) {
- if(!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ if (!$this->valid()) {
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
- $ratioOrig = $widthOrig/$heightOrig;
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
+ $ratioOrig = $widthOrig / $heightOrig;
if ($ratioOrig > 1) {
- $newHeight = round($maxSize/$ratioOrig);
+ $newHeight = round($maxSize / $ratioOrig);
$newWidth = $maxSize;
} else {
- $newWidth = round($maxSize*$ratioOrig);
+ $newWidth = round($maxSize * $ratioOrig);
$newHeight = $maxSize;
}
@@ -771,21 +789,21 @@ class OC_Image {
*/
public function preciseResize($width, $height) {
if (!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
$process = imagecreatetruecolor($width, $height);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error creating true color image', OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error creating true color image', array('app' => 'core'));
imagedestroy($process);
return false;
}
// preserve transparency
- if($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
+ if ($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
imagecolortransparent($process, imagecolorallocatealpha($process, 0, 0, 0, 127));
imagealphablending($process, false);
imagesavealpha($process, true);
@@ -793,7 +811,7 @@ class OC_Image {
imagecopyresampled($process, $this->resource, 0, 0, 0, 0, $width, $height, $widthOrig, $heightOrig);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error resampling process image '.$width.'x'.$height, OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error re-sampling process image', array('app' => 'core'));
imagedestroy($process);
return false;
}
@@ -803,46 +821,47 @@ class OC_Image {
}
/**
- * Crops the image to the middle square. If the image is already square it just returns.
- * @param int $size maximum size for the result (optional)
- * @return bool for success or failure
- */
- public function centerCrop($size=0) {
- if(!$this->valid()) {
- OC_Log::write('core', 'OC_Image->centerCrop, No image loaded', OC_Log::ERROR);
+ * Crops the image to the middle square. If the image is already square it just returns.
+ *
+ * @param int $size maximum size for the result (optional)
+ * @return bool for success or failure
+ */
+ public function centerCrop($size = 0) {
+ if (!$this->valid()) {
+ $this->logger->error('OC_Image->centerCrop, No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
- if($widthOrig === $heightOrig and $size==0) {
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
+ if ($widthOrig === $heightOrig and $size == 0) {
return true;
}
- $ratioOrig = $widthOrig/$heightOrig;
+ $ratioOrig = $widthOrig / $heightOrig;
$width = $height = min($widthOrig, $heightOrig);
if ($ratioOrig > 1) {
- $x = ($widthOrig/2) - ($width/2);
+ $x = ($widthOrig / 2) - ($width / 2);
$y = 0;
} else {
- $y = ($heightOrig/2) - ($height/2);
+ $y = ($heightOrig / 2) - ($height / 2);
$x = 0;
}
- if($size>0) {
- $targetWidth=$size;
- $targetHeight=$size;
- }else{
- $targetWidth=$width;
- $targetHeight=$height;
+ if ($size > 0) {
+ $targetWidth = $size;
+ $targetHeight = $size;
+ } else {
+ $targetWidth = $width;
+ $targetHeight = $height;
}
$process = imagecreatetruecolor($targetWidth, $targetHeight);
if ($process == false) {
- OC_Log::write('core', 'OC_Image->centerCrop. Error creating true color image', OC_Log::ERROR);
+ $this->logger->error('OC_Image->centerCrop, Error creating true color image', array('app' => 'core'));
imagedestroy($process);
return false;
}
// preserve transparency
- if($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
+ if ($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
imagecolortransparent($process, imagecolorallocatealpha($process, 0, 0, 0, 127));
imagealphablending($process, false);
imagesavealpha($process, true);
@@ -850,9 +869,7 @@ class OC_Image {
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height);
if ($process == false) {
- OC_Log::write('core',
- 'OC_Image->centerCrop. Error resampling process image '.$width.'x'.$height,
- OC_Log::ERROR);
+ $this->logger->error('OC_Image->centerCrop, Error re-sampling process image ' . $width . 'x' . $height, array('app' => 'core'));
imagedestroy($process);
return false;
}
@@ -862,27 +879,28 @@ class OC_Image {
}
/**
- * Crops the image from point $x$y with dimension $wx$h.
- * @param int $x Horizontal position
- * @param int $y Vertical position
- * @param int $w Width
- * @param int $h Height
- * @return bool for success or failure
- */
+ * Crops the image from point $x$y with dimension $wx$h.
+ *
+ * @param int $x Horizontal position
+ * @param int $y Vertical position
+ * @param int $w Width
+ * @param int $h Height
+ * @return bool for success or failure
+ */
public function crop($x, $y, $w, $h) {
- if(!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ if (!$this->valid()) {
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
$process = imagecreatetruecolor($w, $h);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error creating true color image', OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error creating true color image', array('app' => 'core'));
imagedestroy($process);
return false;
}
// preserve transparency
- if($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
+ if ($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
imagecolortransparent($process, imagecolorallocatealpha($process, 0, 0, 0, 127));
imagealphablending($process, false);
imagesavealpha($process, true);
@@ -890,7 +908,7 @@ class OC_Image {
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $w, $h, $w, $h);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error resampling process image '.$w.'x'.$h, OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error re-sampling process image ' . $w . 'x' . $h, array('app' => 'core'));
imagedestroy($process);
return false;
}
@@ -900,41 +918,44 @@ class OC_Image {
}
/**
- * Resizes the image to fit within a boundry while preserving ratio.
+ * Resizes the image to fit within a boundary while preserving ratio.
+ *
* @param integer $maxWidth
* @param integer $maxHeight
* @return bool
*/
public function fitIn($maxWidth, $maxHeight) {
- if(!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ if (!$this->valid()) {
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
- $ratio = $widthOrig/$heightOrig;
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
+ $ratio = $widthOrig / $heightOrig;
- $newWidth = min($maxWidth, $ratio*$maxHeight);
- $newHeight = min($maxHeight, $maxWidth/$ratio);
+ $newWidth = min($maxWidth, $ratio * $maxHeight);
+ $newHeight = min($maxHeight, $maxWidth / $ratio);
$this->preciseResize(round($newWidth), round($newHeight));
return true;
}
public function destroy() {
- if($this->valid()) {
+ if ($this->valid()) {
imagedestroy($this->resource);
}
- $this->resource=null;
+ $this->resource = null;
}
public function __destruct() {
$this->destroy();
}
}
-if ( ! function_exists( 'imagebmp') ) {
+
+if (!function_exists('imagebmp')) {
/**
* Output a BMP image to either the browser or a file
+ *
* @link http://www.ugia.cn/wp-data/imagebmp.php
* @author legend <legendsky@hotmail.com>
* @link http://www.programmierer-forum.de/imagebmp-gute-funktion-gefunden-t143716.htm
@@ -945,11 +966,10 @@ if ( ! function_exists( 'imagebmp') ) {
* @param int $compression [optional]
* @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
*/
- function imagebmp($im, $fileName='', $bit=24, $compression=0) {
+ function imagebmp($im, $fileName = '', $bit = 24, $compression = 0) {
if (!in_array($bit, array(1, 4, 8, 16, 24, 32))) {
$bit = 24;
- }
- else if ($bit == 32) {
+ } else if ($bit == 32) {
$bit = 24;
}
$bits = pow(2, $bit);
@@ -971,7 +991,7 @@ if ( ! function_exists( 'imagebmp') ) {
if ($padding % 4 != 0) {
$extra = str_repeat("\0", $padding);
}
- for ($j = $height - 1; $j >= 0; $j --) {
+ for ($j = $height - 1; $j >= 0; $j--) {
$i = 0;
while ($i < $width) {
$bin = 0;
@@ -985,8 +1005,7 @@ if ( ! function_exists( 'imagebmp') ) {
}
$bmpData .= $extra;
}
- }
- // RLE8
+ } // RLE8
else if ($compression == 1 && $bit == 8) {
for ($j = $height - 1; $j >= 0; $j--) {
$lastIndex = "\0";
@@ -999,8 +1018,7 @@ if ( ! function_exists( 'imagebmp') ) {
}
$lastIndex = $index;
$sameNum = 1;
- }
- else {
+ } else {
$sameNum++;
}
}
@@ -1010,8 +1028,7 @@ if ( ! function_exists( 'imagebmp') ) {
}
$sizeQuad = strlen($rgbQuad);
$sizeData = strlen($bmpData);
- }
- else {
+ } else {
$extra = '';
$padding = 4 - ($width * ($bit / 8)) % 4;
if ($padding % 4 != 0) {
@@ -1020,7 +1037,7 @@ if ( ! function_exists( 'imagebmp') ) {
$bmpData = '';
for ($j = $height - 1; $j >= 0; $j--) {
for ($i = 0; $i < $width; $i++) {
- $index = imagecolorat($im, $i, $j);
+ $index = imagecolorat($im, $i, $j);
$colors = imagecolorsforindex($im, $index);
if ($bit == 16) {
$bin = 0 << $bit;
@@ -1028,8 +1045,7 @@ if ( ! function_exists( 'imagebmp') ) {
$bin |= ($colors['green'] >> 3) << 5;
$bin |= $colors['blue'] >> 3;
$bmpData .= pack("v", $bin);
- }
- else {
+ } else {
$bmpData .= pack("c*", $colors['blue'], $colors['green'], $colors['red']);
}
}
@@ -1047,20 +1063,21 @@ if ( ! function_exists( 'imagebmp') ) {
fclose($fp);
return true;
}
- echo $fileHeader . $infoHeader. $rgbQuad . $bmpData;
+ echo $fileHeader . $infoHeader . $rgbQuad . $bmpData;
return true;
}
}
-if ( ! function_exists( 'exif_imagetype' ) ) {
+if (!function_exists('exif_imagetype')) {
/**
* Workaround if exif_imagetype does not exist
+ *
* @link http://www.php.net/manual/en/function.exif-imagetype.php#80383
* @param string $fileName
* @return string|boolean
*/
- function exif_imagetype ( $fileName ) {
- if ( ( $info = getimagesize( $fileName ) ) !== false ) {
+ function exif_imagetype($fileName) {
+ if (($info = getimagesize($fileName)) !== false) {
return $info[2];
}
return false;
diff --git a/lib/private/installer.php b/lib/private/installer.php
index cd1d8ce392f..60ed06ae352 100644
--- a/lib/private/installer.php
+++ b/lib/private/installer.php
@@ -558,8 +558,8 @@ class OC_Installer{
// is the code checker enabled?
if(OC_Config::getValue('appcodechecker', true)) {
// check if grep is installed
- $grep = exec('command -v grep');
- if($grep=='') {
+ $grep = \OC_Helper::findBinaryPath('grep');
+ if (!$grep) {
OC_Log::write('core',
'grep not installed. So checking the code of the app "'.$appname.'" was not possible',
OC_Log::ERROR);
@@ -568,7 +568,7 @@ class OC_Installer{
// iterate the bad patterns
foreach($blacklist as $bl) {
- $cmd = 'grep -ri '.escapeshellarg($bl).' '.$folder.'';
+ $cmd = 'grep --include \\*.php -ri '.escapeshellarg($bl).' '.$folder.'';
$result = exec($cmd);
// bad pattern found
if($result<>'') {
diff --git a/lib/private/l10n.php b/lib/private/l10n.php
index 6ec4e967c7f..6c66bee3e79 100644
--- a/lib/private/l10n.php
+++ b/lib/private/l10n.php
@@ -7,19 +7,9 @@
* @copyright 2012 Frank Karlitschek frank@owncloud.org
* @copyright 2013 Jakob Sack
*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
*/
/**
@@ -30,6 +20,7 @@ class OC_L10N implements \OCP\IL10N {
* cache
*/
protected static $cache = array();
+ protected static $availableLanguages = array();
/**
* The best language
@@ -89,7 +80,8 @@ class OC_L10N implements \OCP\IL10N {
}
/**
- * @param string $transFile
+ * @param $transFile
+ * @param bool $mergeTranslations
* @return bool
*/
public function load($transFile, $mergeTranslations = false) {
@@ -141,8 +133,8 @@ class OC_L10N implements \OCP\IL10N {
// load the translations file
if($this->load($transFile)) {
//merge with translations from theme
- $theme = OC_Config::getValue( "theme" );
- if (!is_null($theme)) {
+ $theme = \OC::$server->getConfig()->getSystemValue('theme');
+ if (!empty($theme)) {
$transFile = OC::$SERVERROOT.'/themes/'.$theme.substr($transFile, strlen(OC::$SERVERROOT));
if (file_exists($transFile)) {
$this->load($transFile, true);
@@ -246,7 +238,7 @@ class OC_L10N implements \OCP\IL10N {
$this->init();
$identifier = "_${text_singular}_::_${text_plural}_";
if( array_key_exists($identifier, $this->translations)) {
- return new OC_L10N_String( $this, $identifier, $parameters, $count );
+ return new OC_L10N_String($this, $identifier, $parameters, $count, array($text_singular, $text_plural));
}else{
if($count === 1) {
return new OC_L10N_String($this, $text_singular, $parameters, $count);
@@ -285,7 +277,8 @@ class OC_L10N implements \OCP\IL10N {
* Localization
* @param string $type Type of localization
* @param array|int|string $data parameters for this localization
- * @return String or false
+ * @param array $options
+ * @return string|false
*
* Returns the localized data.
*
@@ -318,7 +311,13 @@ class OC_L10N implements \OCP\IL10N {
} else {
$value->setTimestamp($data);
}
- $locale = self::findLanguage();
+
+ // Use the language of the instance, before falling back to the current user's language
+ $locale = $this->lang;
+ if ($locale === null) {
+ $locale = self::findLanguage();
+ }
+
$options = array_merge(array('width' => 'long'), $options);
$width = $options['width'];
switch($type) {
@@ -393,8 +392,8 @@ class OC_L10N implements \OCP\IL10N {
return self::$language;
}
- if(OC_User::getUser() && OC_Preferences::getValue(OC_User::getUser(), 'core', 'lang')) {
- $lang = OC_Preferences::getValue(OC_User::getUser(), 'core', 'lang');
+ if(OC_User::getUser() && \OC::$server->getConfig()->getUserValue(OC_User::getUser(), 'core', 'lang')) {
+ $lang = \OC::$server->getConfig()->getUserValue(OC_User::getUser(), 'core', 'lang');
self::$language = $lang;
if(is_array($app)) {
$available = $app;
@@ -407,7 +406,7 @@ class OC_L10N implements \OCP\IL10N {
}
}
- $default_language = OC_Config::getValue('default_language', false);
+ $default_language = \OC::$server->getConfig()->getSystemValue('default_language', false);
if($default_language !== false) {
return $default_language;
@@ -457,17 +456,17 @@ class OC_L10N implements \OCP\IL10N {
*/
protected static function findI18nDir($app) {
// find the i18n dir
- $i18ndir = OC::$SERVERROOT.'/core/l10n/';
+ $i18nDir = OC::$SERVERROOT.'/core/l10n/';
if($app != '') {
// Check if the app is in the app folder
if(file_exists(OC_App::getAppPath($app).'/l10n/')) {
- $i18ndir = OC_App::getAppPath($app).'/l10n/';
+ $i18nDir = OC_App::getAppPath($app).'/l10n/';
}
else{
- $i18ndir = OC::$SERVERROOT.'/'.$app.'/l10n/';
+ $i18nDir = OC::$SERVERROOT.'/'.$app.'/l10n/';
}
}
- return $i18ndir;
+ return $i18nDir;
}
/**
@@ -476,6 +475,9 @@ class OC_L10N implements \OCP\IL10N {
* @return array an array of available languages
*/
public static function findAvailableLanguages($app=null) {
+ if(!empty(self::$availableLanguages)) {
+ return self::$availableLanguages;
+ }
$available=array('en');//english is always available
$dir = self::findI18nDir($app);
if(is_dir($dir)) {
@@ -487,6 +489,8 @@ class OC_L10N implements \OCP\IL10N {
}
}
}
+
+ self::$availableLanguages = $available;
return $available;
}
@@ -496,7 +500,7 @@ class OC_L10N implements \OCP\IL10N {
* @return bool
*/
public static function languageExists($app, $lang) {
- if ($lang == 'en') {//english is always available
+ if ($lang === 'en') {//english is always available
return true;
}
$dir = self::findI18nDir($app);
diff --git a/lib/private/l10n/string.php b/lib/private/l10n/string.php
index 04eaacab57b..5f5452ad16d 100644
--- a/lib/private/l10n/string.php
+++ b/lib/private/l10n/string.php
@@ -23,6 +23,11 @@ class OC_L10N_String{
protected $parameters;
/**
+ * @var array
+ */
+ protected $plurals;
+
+ /**
* @var integer
*/
protected $count;
@@ -30,11 +35,12 @@ class OC_L10N_String{
/**
* @param OC_L10N $l10n
*/
- public function __construct($l10n, $text, $parameters, $count = 1) {
+ public function __construct($l10n, $text, $parameters, $count = 1, $plurals = array()) {
$this->l10n = $l10n;
$this->text = $text;
$this->parameters = $parameters;
$this->count = $count;
+ $this->plurals = $plurals;
}
public function __toString() {
@@ -45,7 +51,19 @@ class OC_L10N_String{
if(is_array($translations[$this->text])) {
$fn = $this->l10n->getPluralFormFunction();
$id = $fn($this->count);
- $text = $translations[$this->text][$id];
+
+ if ($translations[$this->text][$id] !== '') {
+ // The translation of this plural case is not empty, so use it
+ $text = $translations[$this->text][$id];
+ } else {
+ // We didn't find the plural in the language,
+ // so we fall back to english.
+ $id = ($id != 0) ? 1 : 0;
+ if (isset($this->plurals[$id])) {
+ // Fallback to the english plural
+ $text = $this->plurals[$id];
+ }
+ }
}
else{
$text = $translations[$this->text];
diff --git a/lib/private/largefilehelper.php b/lib/private/largefilehelper.php
index 750ba1d23de..b6a8c536e9b 100644
--- a/lib/private/largefilehelper.php
+++ b/lib/private/largefilehelper.php
@@ -100,7 +100,7 @@ class LargeFileHelper {
* null on failure.
*/
public function getFileSizeViaCurl($filename) {
- if (function_exists('curl_init')) {
+ if (function_exists('curl_init') && \OC::$server->getIniWrapper()->getString('open_basedir') === '') {
$fencoded = rawurlencode($filename);
$ch = curl_init("file://$fencoded");
curl_setopt($ch, CURLOPT_NOBODY, true);
diff --git a/lib/private/legacy/config.php b/lib/private/legacy/config.php
index 13ff0dbe040..7b711204256 100644
--- a/lib/private/legacy/config.php
+++ b/lib/private/legacy/config.php
@@ -23,14 +23,6 @@ class OC_Config {
public static $object;
/**
- * Returns the config instance
- * @return \OC\Config
- */
- public static function getObject() {
- return self::$object;
- }
-
- /**
* Lists all available config keys
* @return array an array of key names
*
diff --git a/lib/private/legacy/preferences.php b/lib/private/legacy/preferences.php
index 4b68b0e69aa..907aafbc915 100644
--- a/lib/private/legacy/preferences.php
+++ b/lib/private/legacy/preferences.php
@@ -21,47 +21,23 @@
*
*/
-OC_Preferences::$object = new \OC\Preferences(OC_DB::getConnection());
/**
* This class provides an easy way for storing user preferences.
- * @deprecated use \OC\Preferences instead
+ * @deprecated use \OCP\IConfig methods instead
*/
class OC_Preferences{
- public static $object;
- /**
- * Get all users using the preferences
- * @return array an array of user ids
- *
- * This function returns a list of all users that have at least one entry
- * in the preferences table.
- */
- public static function getUsers() {
- return self::$object->getUsers();
- }
-
- /**
- * Get all apps of a user
- * @param string $user user
- * @return integer[] with app ids
- *
- * This function returns a list of all apps of the user that have at least
- * one entry in the preferences table.
- */
- public static function getApps( $user ) {
- return self::$object->getApps( $user );
- }
-
/**
* Get the available keys for an app
* @param string $user user
* @param string $app the app we are looking for
* @return array an array of key names
+ * @deprecated use getUserKeys of \OCP\IConfig instead
*
* This function gets all keys of an app of an user. Please note that the
* values are not returned.
*/
public static function getKeys( $user, $app ) {
- return self::$object->getKeys( $user, $app );
+ return \OC::$server->getConfig()->getUserKeys($user, $app);
}
/**
@@ -71,12 +47,13 @@ class OC_Preferences{
* @param string $key key
* @param string $default = null, default value if the key does not exist
* @return string the value or $default
+ * @deprecated use getUserValue of \OCP\IConfig instead
*
* This function gets a value from the preferences table. If the key does
* not exist the default value will be returned
*/
public static function getValue( $user, $app, $key, $default = null ) {
- return self::$object->getValue( $user, $app, $key, $default );
+ return \OC::$server->getConfig()->getUserValue($user, $app, $key, $default);
}
/**
@@ -87,12 +64,18 @@ class OC_Preferences{
* @param string $value value
* @param string $preCondition only set value if the key had a specific value before
* @return bool true if value was set, otherwise false
+ * @deprecated use setUserValue of \OCP\IConfig instead
*
* Adds a value to the preferences. If the key did not exist before, it
* will be added automagically.
*/
public static function setValue( $user, $app, $key, $value, $preCondition = null ) {
- return self::$object->setValue( $user, $app, $key, $value, $preCondition );
+ try {
+ \OC::$server->getConfig()->setUserValue($user, $app, $key, $value, $preCondition);
+ return true;
+ } catch(\OCP\PreConditionNotMetException $e) {
+ return false;
+ }
}
/**
@@ -100,24 +83,13 @@ class OC_Preferences{
* @param string $user user
* @param string $app app
* @param string $key key
+ * @return bool true
+ * @deprecated use deleteUserValue of \OCP\IConfig instead
*
* Deletes a key.
*/
public static function deleteKey( $user, $app, $key ) {
- self::$object->deleteKey( $user, $app, $key );
- return true;
- }
-
- /**
- * Remove app of user from preferences
- * @param string $user user
- * @param string $app app
- * @return bool
- *
- * Removes all keys in preferences belonging to the app and the user.
- */
- public static function deleteApp( $user, $app ) {
- self::$object->deleteApp( $user, $app );
+ \OC::$server->getConfig()->deleteUserValue($user, $app, $key);
return true;
}
@@ -125,11 +97,12 @@ class OC_Preferences{
* Remove user from preferences
* @param string $user user
* @return bool
+ * @deprecated use deleteUser of \OCP\IConfig instead
*
* Removes all keys in preferences belonging to the user.
*/
public static function deleteUser( $user ) {
- self::$object->deleteUser( $user );
+ \OC::$server->getConfig()->deleteAllUserValues($user);
return true;
}
@@ -137,11 +110,12 @@ class OC_Preferences{
* Remove app from all users
* @param string $app app
* @return bool
+ * @deprecated use deleteAppFromAllUsers of \OCP\IConfig instead
*
* Removes all keys in preferences belonging to the app.
*/
public static function deleteAppFromAllUsers( $app ) {
- self::$object->deleteAppFromAllUsers( $app );
+ \OC::$server->getConfig()->deleteAppFromAllUsers($app);
return true;
}
}
diff --git a/lib/private/log/errorlog.php b/lib/private/log/errorlog.php
new file mode 100644
index 00000000000..007ab307722
--- /dev/null
+++ b/lib/private/log/errorlog.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2014 Christian Kampka <christian@kampka.net>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+class OC_Log_Errorlog {
+
+
+ /**
+ * Init class data
+ */
+ public static function init() {
+ }
+
+ /**
+ * write a message in the log
+ * @param string $app
+ * @param string $message
+ * @param int $level
+ */
+ public static function write($app, $message, $level) {
+ $minLevel = min(OC_Config::getValue("loglevel", OC_Log::WARN), OC_Log::ERROR);
+ if ($level >= $minLevel) {
+ error_log('[owncloud]['.$app.'] '.$message);
+ }
+ }
+}
+
diff --git a/lib/private/log/owncloud.php b/lib/private/log/owncloud.php
index d257bd12d2a..c8ae61032aa 100644
--- a/lib/private/log/owncloud.php
+++ b/lib/private/log/owncloud.php
@@ -111,7 +111,7 @@ class OC_Log_Owncloud {
$entriesCount = 0;
$lines = 0;
// Loop through each character of the file looking for new lines
- while ($pos >= 0 && $entriesCount < $limit) {
+ while ($pos >= 0 && ($limit === null ||$entriesCount < $limit)) {
fseek($handle, $pos);
$ch = fgetc($handle);
if ($ch == "\n" || $pos == 0) {
@@ -141,4 +141,11 @@ class OC_Log_Owncloud {
}
return $entries;
}
+
+ /**
+ * @return string
+ */
+ public static function getLogFilePath() {
+ return self::$logFile;
+ }
}
diff --git a/lib/private/memcache/apc.php b/lib/private/memcache/apc.php
index 332bbfead00..2c0a93db321 100644
--- a/lib/private/memcache/apc.php
+++ b/lib/private/memcache/apc.php
@@ -32,7 +32,7 @@ class APC extends Cache {
public function clear($prefix = '') {
$ns = $this->getPrefix() . $prefix;
$ns = preg_quote($ns, '/');
- $iter = new \APCIterator('user', '/^' . $ns . '/');
+ $iter = new \APCIterator('user', '/^' . $ns . '/', APC_ITER_KEY);
return apc_delete($iter);
}
diff --git a/lib/private/memcache/factory.php b/lib/private/memcache/factory.php
index 8e47a8899fc..dba9e8a0e00 100644
--- a/lib/private/memcache/factory.php
+++ b/lib/private/memcache/factory.php
@@ -37,6 +37,8 @@ class Factory implements ICacheFactory {
return new APCu($prefix);
} elseif (APC::isAvailable()) {
return new APC($prefix);
+ } elseif (Redis::isAvailable()) {
+ return new Redis($prefix);
} elseif (Memcached::isAvailable()) {
return new Memcached($prefix);
} else {
@@ -50,7 +52,7 @@ class Factory implements ICacheFactory {
* @return bool
*/
public function isAvailable() {
- return XCache::isAvailable() || APCu::isAvailable() || APC::isAvailable() || Memcached::isAvailable();
+ return XCache::isAvailable() || APCu::isAvailable() || APC::isAvailable() || Redis::isAvailable() || Memcached::isAvailable();
}
/**
diff --git a/lib/private/memcache/memcached.php b/lib/private/memcache/memcached.php
index cd8e2e8d0b6..042fead3347 100644
--- a/lib/private/memcache/memcached.php
+++ b/lib/private/memcache/memcached.php
@@ -74,7 +74,13 @@ class Memcached extends Cache {
$keys[] = $key;
}
}
- self::$cache->deleteMulti($keys);
+ if (method_exists(self::$cache, 'deleteMulti')) {
+ self::$cache->deleteMulti($keys);
+ } else {
+ foreach ($keys as $key) {
+ self::$cache->delete($key);
+ }
+ }
return true;
}
diff --git a/lib/private/memcache/redis.php b/lib/private/memcache/redis.php
new file mode 100644
index 00000000000..f21619887d0
--- /dev/null
+++ b/lib/private/memcache/redis.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2014 Jörn Friedrich Dreyer <jfd@butonic.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Memcache;
+
+class Redis extends Cache {
+
+ /**
+ * @var \Redis $cache
+ */
+ private static $cache = null;
+
+ public function __construct($prefix = '') {
+ parent::__construct($prefix);
+ if (is_null(self::$cache)) {
+ // TODO allow configuring a RedisArray, see https://github.com/nicolasff/phpredis/blob/master/arrays.markdown#redis-arrays
+ self::$cache = new \Redis();
+ $config = \OC::$server->getSystemConfig()->getValue('redis', array());
+ if (isset($config['host'])) {
+ $host = $config['host'];
+ } else {
+ $host = '127.0.0.1';
+ }
+ if (isset($config['port'])) {
+ $port = $config['port'];
+ } else {
+ $port = 6379;
+ }
+ if (isset($config['timeout'])) {
+ $timeout = $config['timeout'];
+ } else {
+ $timeout = 0.0; // unlimited
+ }
+ self::$cache->connect( $host, $port, $timeout );
+ }
+ }
+
+ /**
+ * entries in redis get namespaced to prevent collisions between ownCloud instances and users
+ */
+ protected function getNameSpace() {
+ return $this->prefix;
+ }
+
+ public function get($key) {
+ $result = self::$cache->get($this->getNamespace() . $key);
+ if ($result === false and ! self::$cache->exists($this->getNamespace() . $key)) {
+ return null;
+ } else {
+ return $result;
+ }
+ }
+
+ public function set($key, $value, $ttl = 0) {
+ if ($ttl > 0) {
+ return self::$cache->setex($this->getNamespace() . $key, $ttl, $value);
+ } else {
+ return self::$cache->set($this->getNamespace() . $key, $value);
+ }
+ }
+
+ public function hasKey($key) {
+ return self::$cache->exists($this->getNamespace() . $key);
+ }
+
+ public function remove($key) {
+ if (self::$cache->delete($this->getNamespace() . $key)) {
+ return true;
+ } else {
+ return false;
+ }
+
+ }
+
+ public function clear($prefix = '') {
+ $prefix = $this->getNamespace() . $prefix.'*';
+ $it = null;
+ self::$cache->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);
+ while($keys = self::$cache->scan($it, $prefix)) {
+ self::$cache->delete($keys);
+ }
+ return true;
+ }
+
+ static public function isAvailable() {
+ return extension_loaded('redis');
+ }
+}
+
diff --git a/lib/private/migrate.php b/lib/private/migrate.php
deleted file mode 100644
index 8351155aa55..00000000000
--- a/lib/private/migrate.php
+++ /dev/null
@@ -1,626 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Tom Needham
- * @copyright 2012 Tom Needham tom@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-/**
- * provides an interface to migrate users and whole ownclouds
- */
-class OC_Migrate{
-
-
- // Array of OC_Migration_Provider objects
- static private $providers=array();
- // User id of the user to import/export
- static private $uid=false;
- // Holds the ZipArchive object
- static private $zip=false;
- // Stores the type of export
- static private $exporttype=false;
- // Holds the db object
- static private $migration_database=false;
- // Path to the sqlite db
- static private $dbpath=false;
- // Holds the path to the zip file
- static private $zippath=false;
- // Holds the OC_Migration_Content object
- static private $content=false;
-
- /**
- * register a new migration provider
- * @param OC_Migration_Provider $provider
- */
- public static function registerProvider($provider) {
- self::$providers[]=$provider;
- }
-
- /**
- * finds and loads the providers
- */
- static private function findProviders() {
- // Find the providers
- $apps = OC_App::getAllApps();
-
- foreach($apps as $app) {
- $path = OC_App::getAppPath($app) . '/appinfo/migrate.php';
- if( file_exists( $path ) ) {
- include_once $path;
- }
- }
- }
-
- /**
- * exports a user, or owncloud instance
- * @param string $uid user id of user to export if export type is user, defaults to current
- * @param string $type type of export, defualts to user
- * @param string $path path to zip output folder
- * @return string on error, path to zip on success
- */
- public static function export( $uid=null, $type='user', $path=null ) {
- $datadir = OC_Config::getValue( 'datadirectory' );
- // Validate export type
- $types = array( 'user', 'instance', 'system', 'userfiles' );
- if( !in_array( $type, $types ) ) {
- OC_Log::write( 'migration', 'Invalid export type', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- self::$exporttype = $type;
- // Userid?
- if( self::$exporttype == 'user' ) {
- // Check user exists
- self::$uid = is_null($uid) ? OC_User::getUser() : $uid;
- if(!OC_User::userExists(self::$uid)) {
- return json_encode( array( 'success' => false) );
- }
- }
- // Calculate zipname
- if( self::$exporttype == 'user' ) {
- $zipname = 'oc_export_' . self::$uid . '_' . date("y-m-d_H-i-s") . '.zip';
- } else {
- $zipname = 'oc_export_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '.zip';
- }
- // Calculate path
- if( self::$exporttype == 'user' ) {
- self::$zippath = $datadir . '/' . self::$uid . '/' . $zipname;
- } else {
- if( !is_null( $path ) ) {
- // Validate custom path
- if( !file_exists( $path ) || !is_writeable( $path ) ) {
- OC_Log::write( 'migration', 'Path supplied is invalid.', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- self::$zippath = $path . $zipname;
- } else {
- // Default path
- self::$zippath = get_temp_dir() . '/' . $zipname;
- }
- }
- // Create the zip object
- if( !self::createZip() ) {
- return json_encode( array( 'success' => false ) );
- }
- // Do the export
- self::findProviders();
- $exportdata = array();
- switch( self::$exporttype ) {
- case 'user':
- // Connect to the db
- self::$dbpath = $datadir . '/' . self::$uid . '/migration.db';
- if( !self::connectDB() ) {
- return json_encode( array( 'success' => false ) );
- }
- self::$content = new OC_Migration_Content( self::$zip, self::$migration_database );
- // Export the app info
- $exportdata = self::exportAppData();
- // Add the data dir to the zip
- self::$content->addDir(OC_User::getHome(self::$uid), true, '/' );
- break;
- case 'instance':
- self::$content = new OC_Migration_Content( self::$zip );
- // Creates a zip that is compatable with the import function
- $dbfile = tempnam( get_temp_dir(), "owncloud_export_data_" );
- OC_DB::getDbStructure( $dbfile, 'MDB2_SCHEMA_DUMP_ALL');
-
- // Now add in *dbname* and *dbprefix*
- $dbexport = file_get_contents( $dbfile );
- $dbnamestring = "<database>\n\n <name>" . OC_Config::getValue( "dbname", "owncloud" );
- $dbtableprefixstring = "<table>\n\n <name>" . OC_Config::getValue( "dbtableprefix", "oc_" );
- $dbexport = str_replace( $dbnamestring, "<database>\n\n <name>*dbname*", $dbexport );
- $dbexport = str_replace( $dbtableprefixstring, "<table>\n\n <name>*dbprefix*", $dbexport );
- // Add the export to the zip
- self::$content->addFromString( $dbexport, "dbexport.xml" );
- // Add user data
- foreach(OC_User::getUsers() as $user) {
- self::$content->addDir(OC_User::getHome($user), true, "/userdata/" );
- }
- break;
- case 'userfiles':
- self::$content = new OC_Migration_Content( self::$zip );
- // Creates a zip with all of the users files
- foreach(OC_User::getUsers() as $user) {
- self::$content->addDir(OC_User::getHome($user), true, "/" );
- }
- break;
- case 'system':
- self::$content = new OC_Migration_Content( self::$zip );
- // Creates a zip with the owncloud system files
- self::$content->addDir( OC::$SERVERROOT . '/', false, '/');
- foreach (array(
- ".git",
- "3rdparty",
- "apps",
- "core",
- "files",
- "l10n",
- "lib",
- "ocs",
- "search",
- "settings",
- "tests"
- ) as $dir) {
- self::$content->addDir( OC::$SERVERROOT . '/' . $dir, true, "/");
- }
- break;
- }
- if( !$info = self::getExportInfo( $exportdata ) ) {
- return json_encode( array( 'success' => false ) );
- }
- // Add the export info json to the export zip
- self::$content->addFromString( $info, 'export_info.json' );
- if( !self::$content->finish() ) {
- return json_encode( array( 'success' => false ) );
- }
- return json_encode( array( 'success' => true, 'data' => self::$zippath ) );
- }
-
- /**
- * imports a user, or owncloud instance
- * @param string $path path to zip
- * @param string $type type of import (user or instance)
- * @param string|null|int $uid userid of new user
- * @return string
- */
- public static function import( $path, $type='user', $uid=null ) {
-
- $datadir = OC_Config::getValue( 'datadirectory' );
- // Extract the zip
- if( !$extractpath = self::extractZip( $path ) ) {
- return json_encode( array( 'success' => false ) );
- }
- // Get export_info.json
- $scan = scandir( $extractpath );
- // Check for export_info.json
- if( !in_array( 'export_info.json', $scan ) ) {
- OC_Log::write( 'migration', 'Invalid import file, export_info.json not found', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- $json = json_decode( file_get_contents( $extractpath . 'export_info.json' ) );
- if( $json->exporttype != $type ) {
- OC_Log::write( 'migration', 'Invalid import file', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- self::$exporttype = $type;
-
- $currentuser = OC_User::getUser();
-
- // Have we got a user if type is user
- if( self::$exporttype == 'user' ) {
- self::$uid = !is_null($uid) ? $uid : $currentuser;
- }
-
- // We need to be an admin if we are not importing our own data
- if(($type == 'user' && self::$uid != $currentuser) || $type != 'user' ) {
- if( !OC_User::isAdminUser($currentuser)) {
- // Naughty.
- OC_Log::write( 'migration', 'Import not permitted.', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- }
-
- // Handle export types
- switch( self::$exporttype ) {
- case 'user':
- // Check user availability
- if( !OC_User::userExists( self::$uid ) ) {
- OC_Log::write( 'migration', 'User doesn\'t exist', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Check if the username is valid
- if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $json->exporteduser )) {
- OC_Log::write( 'migration', 'Username is not valid', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Copy data
- $userfolder = $extractpath . $json->exporteduser;
- $newuserfolder = $datadir . '/' . self::$uid;
- foreach(scandir($userfolder) as $file){
- if($file !== '.' && $file !== '..' && is_dir($userfolder.'/'.$file)) {
- $file = str_replace(array('/', '\\'), '', $file);
-
- // Then copy the folder over
- OC_Helper::copyr($userfolder.'/'.$file, $newuserfolder.'/'.$file);
- }
- }
- // Import user app data
- if(file_exists($extractpath . $json->exporteduser . '/migration.db')) {
- if( !$appsimported = self::importAppData( $extractpath . $json->exporteduser . '/migration.db',
- $json,
- self::$uid ) ) {
- return json_encode( array( 'success' => false ) );
- }
- }
- // All done!
- if( !self::unlink_r( $extractpath ) ) {
- OC_Log::write( 'migration', 'Failed to delete the extracted zip', OC_Log::ERROR );
- }
- return json_encode( array( 'success' => true, 'data' => $appsimported ) );
- break;
- case 'instance':
- /*
- * EXPERIMENTAL
- // Check for new data dir and dbexport before doing anything
- // TODO
-
- // Delete current data folder.
- OC_Log::write( 'migration', "Deleting current data dir", OC_Log::INFO );
- if( !self::unlink_r( $datadir, false ) ) {
- OC_Log::write( 'migration', 'Failed to delete the current data dir', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Copy over data
- if( !self::copy_r( $extractpath . 'userdata', $datadir ) ) {
- OC_Log::write( 'migration', 'Failed to copy over data directory', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Import the db
- if( !OC_DB::replaceDB( $extractpath . 'dbexport.xml' ) ) {
- return json_encode( array( 'success' => false ) );
- }
- // Done
- return json_encode( array( 'success' => true ) );
- */
- break;
- }
-
- }
-
- /**
- * recursively deletes a directory
- * @param string $dir path of dir to delete
- * @param bool $deleteRootToo delete the root directory
- * @return bool
- */
- private static function unlink_r( $dir, $deleteRootToo=true ) {
- if( !$dh = @opendir( $dir ) ) {
- return false;
- }
- while (false !== ($obj = readdir($dh))) {
- if($obj == '.' || $obj == '..') {
- continue;
- }
- if (!@unlink($dir . '/' . $obj)) {
- self::unlink_r($dir.'/'.$obj, true);
- }
- }
- closedir($dh);
- if ( $deleteRootToo ) {
- @rmdir($dir);
- }
- return true;
- }
-
- /**
- * tries to extract the import zip
- * @param string $path path to the zip
- * @return string path to extract location (with a trailing slash) or false on failure
- */
- static private function extractZip( $path ) {
- self::$zip = new ZipArchive;
- // Validate path
- if( !file_exists( $path ) ) {
- OC_Log::write( 'migration', 'Zip not found', OC_Log::ERROR );
- return false;
- }
- if ( self::$zip->open( $path ) != true ) {
- OC_Log::write( 'migration', "Failed to open zip file", OC_Log::ERROR );
- return false;
- }
- $to = get_temp_dir() . '/oc_import_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '/';
- if( !self::$zip->extractTo( $to ) ) {
- return false;
- }
- self::$zip->close();
- return $to;
- }
-
- /**
- * creates a migration.db in the users data dir with their app data in
- * @return bool whether operation was successfull
- */
- private static function exportAppData( ) {
-
- $success = true;
- $return = array();
-
- // Foreach provider
- foreach( self::$providers as $provider ) {
- // Check if the app is enabled
- if( OC_App::isEnabled( $provider->getID() ) ) {
- $success = true;
- // Does this app use the database?
- if( file_exists( OC_App::getAppPath($provider->getID()).'/appinfo/database.xml' ) ) {
- // Create some app tables
- $tables = self::createAppTables( $provider->getID() );
- if( is_array( $tables ) ) {
- // Save the table names
- foreach($tables as $table) {
- $return['apps'][$provider->getID()]['tables'][] = $table;
- }
- } else {
- // It failed to create the tables
- $success = false;
- }
- }
-
- // Run the export function?
- if( $success ) {
- // Set the provider properties
- $provider->setData( self::$uid, self::$content );
- $return['apps'][$provider->getID()]['success'] = $provider->export();
- } else {
- $return['apps'][$provider->getID()]['success'] = false;
- $return['apps'][$provider->getID()]['message'] = 'failed to create the app tables';
- }
-
- // Now add some app info the the return array
- $appinfo = OC_App::getAppInfo( $provider->getID() );
- $return['apps'][$provider->getID()]['version'] = OC_App::getAppVersion($provider->getID());
- }
- }
-
- return $return;
-
- }
-
-
- /**
- * generates json containing export info, and merges any data supplied
- * @param array $array of data to include in the returned json
- * @return string
- */
- static private function getExportInfo( $array=array() ) {
- $info = array(
- 'ocversion' => OC_Util::getVersion(),
- 'exporttime' => time(),
- 'exportedby' => OC_User::getUser(),
- 'exporttype' => self::$exporttype,
- 'exporteduser' => self::$uid
- );
-
- if( !is_array( $array ) ) {
- OC_Log::write( 'migration', 'Supplied $array was not an array in getExportInfo()', OC_Log::ERROR );
- }
- // Merge in other data
- $info = array_merge( $info, (array)$array );
- // Create json
- $json = json_encode( $info );
- return $json;
- }
-
- /**
- * connects to migration.db, or creates if not found
- * @param string $path to migration.db, defaults to user data dir
- * @return bool whether the operation was successful
- */
- static private function connectDB( $path=null ) {
- // Has the dbpath been set?
- self::$dbpath = !is_null( $path ) ? $path : self::$dbpath;
- if( !self::$dbpath ) {
- OC_Log::write( 'migration', 'connectDB() was called without dbpath being set', OC_Log::ERROR );
- return false;
- }
- // Already connected
- if(!self::$migration_database) {
- $datadir = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
- $connectionParams = array(
- 'path' => self::$dbpath,
- 'driver' => 'pdo_sqlite',
- );
- $connectionParams['adapter'] = '\OC\DB\AdapterSqlite';
- $connectionParams['wrapperClass'] = 'OC\DB\Connection';
- $connectionParams['tablePrefix'] = '';
-
- // Try to establish connection
- self::$migration_database = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
- }
- return true;
-
- }
-
- /**
- * creates the tables in migration.db from an apps database.xml
- * @param string $appid id of the app
- * @return bool whether the operation was successful
- */
- static private function createAppTables( $appid ) {
- $schema_manager = new OC\DB\MDB2SchemaManager(self::$migration_database);
-
- // There is a database.xml file
- $content = file_get_contents(OC_App::getAppPath($appid) . '/appinfo/database.xml' );
-
- $file2 = 'static://db_scheme';
- // TODO get the relative path to migration.db from the data dir
- // For now just cheat
- $path = pathinfo( self::$dbpath );
- $content = str_replace( '*dbname*', self::$uid.'/migration', $content );
- $content = str_replace( '*dbprefix*', '', $content );
-
- $xml = new SimpleXMLElement($content);
- foreach($xml->table as $table) {
- $tables[] = (string)$table->name;
- }
-
- file_put_contents( $file2, $content );
-
- // Try to create tables
- try {
- $schema_manager->createDbFromStructure($file2);
- } catch(Exception $e) {
- unlink( $file2 );
- OC_Log::write( 'migration', 'Failed to create tables for: '.$appid, OC_Log::FATAL );
- OC_Log::write( 'migration', $e->getMessage(), OC_Log::FATAL );
- return false;
- }
-
- return $tables;
- }
-
- /**
- * tries to create the zip
- * @return bool
- */
- static private function createZip() {
- self::$zip = new ZipArchive;
- // Check if properties are set
- if( !self::$zippath ) {
- OC_Log::write('migration', 'createZip() called but $zip and/or $zippath have not been set', OC_Log::ERROR);
- return false;
- }
- if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== true ) {
- OC_Log::write('migration',
- 'Failed to create the zip with error: '.self::$zip->getStatusString(),
- OC_Log::ERROR);
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * returns an array of apps that support migration
- * @return array
- */
- static public function getApps() {
- $allapps = OC_App::getAllApps();
- foreach($allapps as $app) {
- $path = self::getAppPath($app) . '/lib/migrate.php';
- if( file_exists( $path ) ) {
- $supportsmigration[] = $app;
- }
- }
- return $supportsmigration;
- }
-
- /**
- * imports a new user
- * @param string $db string path to migration.db
- * @param object $info object of migration info
- * @param string|null|int $uid uid to use
- * @return array an array of apps with import statuses, or false on failure.
- */
- public static function importAppData( $db, $info, $uid=null ) {
- // Check if the db exists
- if( file_exists( $db ) ) {
- // Connect to the db
- if(!self::connectDB( $db )) {
- OC_Log::write('migration', 'Failed to connect to migration.db', OC_Log::ERROR);
- return false;
- }
- } else {
- OC_Log::write('migration', 'Migration.db not found at: '.$db, OC_Log::FATAL );
- return false;
- }
-
- // Find providers
- self::findProviders();
-
- // Generate importinfo array
- $importinfo = array(
- 'olduid' => $info->exporteduser,
- 'newuid' => self::$uid
- );
-
- foreach( self::$providers as $provider) {
- // Is the app in the export?
- $id = $provider->getID();
- if( isset( $info->apps->$id ) ) {
- // Is the app installed
- if( !OC_App::isEnabled( $id ) ) {
- OC_Log::write( 'migration',
- 'App: ' . $id . ' is not installed, can\'t import data.',
- OC_Log::INFO );
- $appsstatus[$id] = 'notsupported';
- } else {
- // Did it succeed on export?
- if( $info->apps->$id->success ) {
- // Give the provider the content object
- if( !self::connectDB( $db ) ) {
- return false;
- }
- $content = new OC_Migration_Content( self::$zip, self::$migration_database );
- $provider->setData( self::$uid, $content, $info );
- // Then do the import
- if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ) {
- // Failed to import app
- OC_Log::write( 'migration',
- 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id,
- OC_Log::ERROR );
- }
- } else {
- // Add to failed list
- $appsstatus[$id] = false;
- }
- }
- }
- }
-
- return $appsstatus;
-
- }
-
- /**
- * creates a new user in the database
- * @param string $uid user_id of the user to be created
- * @param string $hash hash of the user to be created
- * @return bool result of user creation
- */
- public static function createUser( $uid, $hash ) {
-
- // Check if userid exists
- if(OC_User::userExists( $uid )) {
- return false;
- }
-
- // Create the user
- $query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
- $result = $query->execute( array( $uid, $hash));
- if( !$result ) {
- OC_Log::write('migration', 'Failed to create the new user "'.$uid."", OC_Log::ERROR);
- }
- return $result ? true : false;
-
- }
-
-}
diff --git a/lib/private/migration/content.php b/lib/private/migration/content.php
deleted file mode 100644
index cb5d9ad1472..00000000000
--- a/lib/private/migration/content.php
+++ /dev/null
@@ -1,246 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Tom Needham
- * @copyright 2012 Tom Needham tom@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-/**
- * provides methods to add and access data from the migration
- */
-class OC_Migration_Content{
-
- private $zip=false;
- // Holds the database object
- private $db=null;
- // Holds an array of tmpfiles to delete after zip creation
- private $tmpfiles=array();
-
- /**
- * sets up the
- * @param ZipArchive $zip ZipArchive object
- * @param object $db a database object (required for exporttype user)
- * @return bool|null
- */
- public function __construct( $zip, $db=null ) {
-
- $this->zip = $zip;
- $this->db = $db;
-
- }
-
- /**
- * prepares the db
- * @param string $query the sql query to prepare
- */
- public function prepare( $query ) {
-
- // Only add database to tmpfiles if actually used
- if( !is_null( $this->db ) ) {
- // Get db path
- $db = $this->db->getDatabase();
- if(!in_array($db, $this->tmpfiles)) {
- $this->tmpfiles[] = $db;
- }
- }
-
- // Optimize the query
- $query = $this->processQuery( $query );
-
- // Optimize the query
- $query = $this->db->prepare( $query );
- $query = new OC_DB_StatementWrapper($query, false);
-
- return $query;
- }
-
- /**
- * processes the db query
- * @param string $query the query to process
- * @return string of processed query
- */
- private function processQuery( $query ) {
- $query = str_replace( '`', '\'', $query );
- $query = str_replace( 'NOW()', 'datetime(\'now\')', $query );
- $query = str_replace( 'now()', 'datetime(\'now\')', $query );
- // remove table prefixes
- $query = str_replace( '*PREFIX*', '', $query );
- return $query;
- }
-
- /**
- * copys rows to migration.db from the main database
- * @param array $options array of options.
- * @return bool
- */
- public function copyRows( $options ) {
- if( !array_key_exists( 'table', $options ) ) {
- return false;
- }
-
- $return = array();
-
- // Need to include 'where' in the query?
- if( array_key_exists( 'matchval', $options ) && array_key_exists( 'matchcol', $options ) ) {
-
- // If only one matchval, create an array
- if(!is_array($options['matchval'])) {
- $options['matchval'] = array( $options['matchval'] );
- }
-
- foreach( $options['matchval'] as $matchval ) {
- // Run the query for this match value (where x = y value)
- $sql = 'SELECT * FROM `*PREFIX*' . $options['table'] . '` WHERE `' . $options['matchcol'] . '` = ?';
- $query = OC_DB::prepare( $sql );
- $results = $query->execute( array( $matchval ) );
- $newreturns = $this->insertData( $results, $options );
- $return = array_merge( $return, $newreturns );
- }
-
- } else {
- // Just get everything
- $sql = 'SELECT * FROM `*PREFIX*' . $options['table'] . '`';
- $query = OC_DB::prepare( $sql );
- $results = $query->execute();
- $return = $this->insertData( $results, $options );
-
- }
-
- return $return;
-
- }
-
- /**
- * saves a sql data set into migration.db
- * @param OC_DB_StatementWrapper $data a sql data set returned from self::prepare()->query()
- * @param array $options array of copyRows options
- * @return void
- */
- private function insertData( $data, $options ) {
- $return = array();
- // Foreach row of data to insert
- while( $row = $data->fetchRow() ) {
- // Now save all this to the migration.db
- foreach($row as $field=>$value) {
- $fields[] = $field;
- $values[] = $value;
- }
-
- // Generate some sql
- $sql = "INSERT INTO `" . $options['table'] . '` ( `';
- $fieldssql = implode( '`, `', $fields );
- $sql .= $fieldssql . "` ) VALUES( ";
- $valuessql = substr( str_repeat( '?, ', count( $fields ) ), 0, -2 );
- $sql .= $valuessql . " )";
- // Make the query
- $query = $this->prepare( $sql );
- $query->execute( $values );
- // Do we need to return some values?
- if( array_key_exists( 'idcol', $options ) ) {
- // Yes we do
- $return[] = $row[$options['idcol']];
- } else {
- // Take a guess and return the first field :)
- $return[] = reset($row);
- }
- $fields = '';
- $values = '';
- }
- return $return;
- }
-
- /**
- * adds a directory to the zip object
- * @param boolean|string $dir string path of the directory to add
- * @param bool $recursive
- * @param string $internaldir path of folder to add dir to in zip
- * @return bool
- */
- public function addDir( $dir, $recursive=true, $internaldir='' ) {
- $dirname = basename($dir);
- $this->zip->addEmptyDir($internaldir . $dirname);
- $internaldir.=$dirname.='/';
- if( !file_exists( $dir ) ) {
- return false;
- }
- $dirhandle = opendir($dir);
- if(is_resource($dirhandle)) {
- while (false !== ( $file = readdir($dirhandle))) {
-
- if (( $file != '.' ) && ( $file != '..' )) {
-
- if (is_dir($dir . '/' . $file) && $recursive) {
- $this->addDir($dir . '/' . $file, $recursive, $internaldir);
- } elseif (is_file($dir . '/' . $file)) {
- $this->zip->addFile($dir . '/' . $file, $internaldir . $file);
- }
- }
- }
- closedir($dirhandle);
- } else {
- OC_Log::write('admin_export', "Was not able to open directory: " . $dir, OC_Log::ERROR);
- return false;
- }
- return true;
- }
-
- /**
- * adds a file to the zip from a given string
- * @param string $data string of data to add
- * @param string $path the relative path inside of the zip to save the file to
- * @return bool
- */
- public function addFromString( $data, $path ) {
- // Create a temp file
- $file = tempnam( get_temp_dir(). '/', 'oc_export_tmp_' );
- $this->tmpfiles[] = $file;
- if( !file_put_contents( $file, $data ) ) {
- OC_Log::write( 'migation', 'Failed to save data to a temporary file', OC_Log::ERROR );
- return false;
- }
- // Add file to the zip
- $this->zip->addFile( $file, $path );
- return true;
- }
-
- /**
- * closes the zip, removes temp files
- * @return bool
- */
- public function finish() {
- if( !$this->zip->close() ) {
- OC_Log::write( 'migration',
- 'Failed to write the zip file with error: '.$this->zip->getStatusString(),
- OC_Log::ERROR );
- return false;
- }
- $this->cleanup();
- return true;
- }
-
- /**
- * cleans up after the zip
- */
- private function cleanup() {
- // Delete tmp files
- foreach($this->tmpfiles as $i) {
- unlink( $i );
- }
- }
-}
diff --git a/lib/private/migration/provider.php b/lib/private/migration/provider.php
deleted file mode 100644
index a7c611dcdd4..00000000000
--- a/lib/private/migration/provider.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * provides search functionalty
- */
-abstract class OC_Migration_Provider{
-
- protected $id=false;
- protected $content=false;
- protected $uid=false;
- protected $olduid=false;
- protected $appinfo=false;
-
- public function __construct( $appid ) {
- // Set the id
- $this->id = $appid;
- OC_Migrate::registerProvider( $this );
- }
-
- /**
- * exports data for apps
- * @return array appdata to be exported
- */
- abstract function export( );
-
- /**
- * imports data for the app
- * @return void
- */
- abstract function import( );
-
- /**
- * sets the OC_Migration_Content object to $this->content
- * @param OC_Migration_Content $content a OC_Migration_Content object
- */
- public function setData( $uid, $content, $info=null ) {
- $this->content = $content;
- $this->uid = $uid;
- $id = $this->id;
- if( !is_null( $info ) ) {
- $this->olduid = $info->exporteduser;
- $this->appinfo = $info->apps->$id;
- }
- }
-
- /**
- * returns the appid of the provider
- * @return string
- */
- public function getID() {
- return $this->id;
- }
-}
diff --git a/lib/private/naturalsort.php b/lib/private/naturalsort.php
index eb00f99a672..6e259630f79 100644
--- a/lib/private/naturalsort.php
+++ b/lib/private/naturalsort.php
@@ -9,16 +9,6 @@
namespace OC;
-class NaturalSort_DefaultCollator {
-
- public function compare($a, $b) {
- if ($a === $b) {
- return 0;
- }
- return ($a < $b) ? -1 : 1;
- }
-}
-
class NaturalSort {
private static $instance;
private $collator;
@@ -114,4 +104,3 @@ class NaturalSort {
return self::$instance;
}
}
-
diff --git a/lib/private/naturalsort_defaultcollator.php b/lib/private/naturalsort_defaultcollator.php
new file mode 100644
index 00000000000..e1007f8d7b4
--- /dev/null
+++ b/lib/private/naturalsort_defaultcollator.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2014 Vincent Petry <PVince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
+namespace OC;
+
+class NaturalSort_DefaultCollator {
+ public function compare($a, $b) {
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a < $b) ? -1 : 1;
+ }
+}
diff --git a/lib/private/ocs/cloud.php b/lib/private/ocs/cloud.php
index 3ced0af8ee1..552aa96a26b 100644
--- a/lib/private/ocs/cloud.php
+++ b/lib/private/ocs/cloud.php
@@ -91,7 +91,7 @@ class OC_OCS_Cloud {
}
public static function getCurrentUser() {
- $email=OC_Preferences::getValue(OC_User::getUser(), 'settings', 'email', '');
+ $email=\OC::$server->getConfig()->getUserValue(OC_User::getUser(), 'settings', 'email', '');
$data = array(
'id' => OC_User::getUser(),
'display-name' => OC_User::getDisplayName(),
diff --git a/lib/private/preferences.php b/lib/private/preferences.php
index cdaa207449d..cd4a9fd1c19 100644
--- a/lib/private/preferences.php
+++ b/lib/private/preferences.php
@@ -37,16 +37,14 @@
namespace OC;
use OCP\IDBConnection;
+use OCP\PreConditionNotMetException;
/**
* This class provides an easy way for storing user preferences.
+ * @deprecated use \OCP\IConfig methods instead
*/
class Preferences {
- /**
- * @var \OC\DB\Connection
- */
- protected $conn;
/**
* 3 dimensional array with the following structure:
@@ -60,65 +58,14 @@ class Preferences {
*/
protected $cache = array();
+ /** @var \OCP\IConfig */
+ protected $config;
+
/**
* @param \OCP\IDBConnection $conn
*/
public function __construct(IDBConnection $conn) {
- $this->conn = $conn;
- }
-
- /**
- * Get all users using the preferences
- * @return array an array of user ids
- *
- * This function returns a list of all users that have at least one entry
- * in the preferences table.
- */
- public function getUsers() {
- $query = 'SELECT DISTINCT `userid` FROM `*PREFIX*preferences`';
- $result = $this->conn->executeQuery($query);
-
- $users = array();
- while ($userid = $result->fetchColumn()) {
- $users[] = $userid;
- }
-
- return $users;
- }
-
- /**
- * @param string $user
- * @return array[]
- */
- protected function getUserValues($user) {
- if (isset($this->cache[$user])) {
- return $this->cache[$user];
- }
- $data = array();
- $query = 'SELECT `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?';
- $result = $this->conn->executeQuery($query, array($user));
- while ($row = $result->fetch()) {
- $app = $row['appid'];
- if (!isset($data[$app])) {
- $data[$app] = array();
- }
- $data[$app][$row['configkey']] = $row['configvalue'];
- }
- $this->cache[$user] = $data;
- return $data;
- }
-
- /**
- * Get all apps of an user
- * @param string $user user
- * @return integer[] with app ids
- *
- * This function returns a list of all apps of the user that have at least
- * one entry in the preferences table.
- */
- public function getApps($user) {
- $data = $this->getUserValues($user);
- return array_keys($data);
+ $this->config = \OC::$server->getConfig();
}
/**
@@ -126,17 +73,13 @@ class Preferences {
* @param string $user user
* @param string $app the app we are looking for
* @return array an array of key names
+ * @deprecated use getUserKeys of \OCP\IConfig instead
*
* This function gets all keys of an app of an user. Please note that the
* values are not returned.
*/
public function getKeys($user, $app) {
- $data = $this->getUserValues($user);
- if (isset($data[$app])) {
- return array_keys($data[$app]);
- } else {
- return array();
- }
+ return $this->config->getUserKeys($user, $app);
}
/**
@@ -146,17 +89,13 @@ class Preferences {
* @param string $key key
* @param string $default = null, default value if the key does not exist
* @return string the value or $default
+ * @deprecated use getUserValue of \OCP\IConfig instead
*
* This function gets a value from the preferences table. If the key does
* not exist the default value will be returned
*/
public function getValue($user, $app, $key, $default = null) {
- $data = $this->getUserValues($user);
- if (isset($data[$app]) and isset($data[$app][$key])) {
- return $data[$app][$key];
- } else {
- return $default;
- }
+ return $this->config->getUserValue($user, $app, $key, $default);
}
/**
@@ -167,59 +106,18 @@ class Preferences {
* @param string $value value
* @param string $preCondition only set value if the key had a specific value before
* @return bool true if value was set, otherwise false
+ * @deprecated use setUserValue of \OCP\IConfig instead
*
* Adds a value to the preferences. If the key did not exist before, it
* will be added automagically.
*/
public function setValue($user, $app, $key, $value, $preCondition = null) {
- // Check if the key does exist
- $query = 'SELECT `configvalue` FROM `*PREFIX*preferences`'
- . ' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?';
- $oldValue = $this->conn->fetchColumn($query, array($user, $app, $key));
- $exists = $oldValue !== false;
-
- if($oldValue === strval($value)) {
- // no changes
+ try {
+ $this->config->setUserValue($user, $app, $key, $value, $preCondition);
return true;
+ } catch(PreConditionNotMetException $e) {
+ return false;
}
-
- $affectedRows = 0;
-
- if (!$exists && $preCondition === null) {
- $data = array(
- 'userid' => $user,
- 'appid' => $app,
- 'configkey' => $key,
- 'configvalue' => $value,
- );
- $affectedRows = $this->conn->insert('*PREFIX*preferences', $data);
- } elseif ($exists) {
- $data = array($value, $user, $app, $key);
- $sql = "UPDATE `*PREFIX*preferences` SET `configvalue` = ?"
- . " WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?";
-
- if ($preCondition !== null) {
- if (\OC_Config::getValue( 'dbtype', 'sqlite' ) === 'oci') {
- //oracle hack: need to explicitly cast CLOB to CHAR for comparison
- $sql .= " AND to_char(`configvalue`) = ?";
- } else {
- $sql .= " AND `configvalue` = ?";
- }
- $data[] = $preCondition;
- }
- $affectedRows = $this->conn->executeUpdate($sql, $data);
- }
-
- // only add to the cache if we already loaded data for the user
- if ($affectedRows > 0 && isset($this->cache[$user])) {
- if (!isset($this->cache[$user][$app])) {
- $this->cache[$user][$app] = array();
- }
- $this->cache[$user][$app][$key] = $value;
- }
-
- return ($affectedRows > 0) ? true : false;
-
}
/**
@@ -228,35 +126,10 @@ class Preferences {
* @param string $key
* @param array $users
* @return array Mapped values: userid => value
+ * @deprecated use getUserValueForUsers of \OCP\IConfig instead
*/
public function getValueForUsers($app, $key, $users) {
- if (empty($users) || !is_array($users)) {
- return array();
- }
-
- $chunked_users = array_chunk($users, 50, true);
- $placeholders_50 = implode(',', array_fill(0, 50, '?'));
-
- $userValues = array();
- foreach ($chunked_users as $chunk) {
- $queryParams = $chunk;
- array_unshift($queryParams, $key);
- array_unshift($queryParams, $app);
-
- $placeholders = (sizeof($chunk) == 50) ? $placeholders_50 : implode(',', array_fill(0, sizeof($chunk), '?'));
-
- $query = 'SELECT `userid`, `configvalue` '
- . ' FROM `*PREFIX*preferences` '
- . ' WHERE `appid` = ? AND `configkey` = ?'
- . ' AND `userid` IN (' . $placeholders . ')';
- $result = $this->conn->executeQuery($query, $queryParams);
-
- while ($row = $result->fetch()) {
- $userValues[$row['userid']] = $row['configvalue'];
- }
- }
-
- return $userValues;
+ return $this->config->getUserValueForUsers($app, $key, $users);
}
/**
@@ -265,28 +138,10 @@ class Preferences {
* @param string $key
* @param string $value
* @return array
+ * @deprecated use getUsersForUserValue of \OCP\IConfig instead
*/
public function getUsersForValue($app, $key, $value) {
- $users = array();
-
- $query = 'SELECT `userid` '
- . ' FROM `*PREFIX*preferences` '
- . ' WHERE `appid` = ? AND `configkey` = ? AND ';
-
- if (\OC_Config::getValue( 'dbtype', 'sqlite' ) === 'oci') {
- //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
- $query .= ' to_char(`configvalue`)= ?';
- } else {
- $query .= ' `configvalue` = ?';
- }
-
- $result = $this->conn->executeQuery($query, array($app, $key, $value));
-
- while ($row = $result->fetch()) {
- $users[] = $row['userid'];
- }
-
- return $users;
+ return $this->config->getUsersForUserValue($app, $key, $value);
}
/**
@@ -294,72 +149,33 @@ class Preferences {
* @param string $user user
* @param string $app app
* @param string $key key
+ * @deprecated use deleteUserValue of \OCP\IConfig instead
*
* Deletes a key.
*/
public function deleteKey($user, $app, $key) {
- $where = array(
- 'userid' => $user,
- 'appid' => $app,
- 'configkey' => $key,
- );
- $this->conn->delete('*PREFIX*preferences', $where);
-
- if (isset($this->cache[$user]) and isset($this->cache[$user][$app])) {
- unset($this->cache[$user][$app][$key]);
- }
- }
-
- /**
- * Remove app of user from preferences
- * @param string $user user
- * @param string $app app
- *
- * Removes all keys in preferences belonging to the app and the user.
- */
- public function deleteApp($user, $app) {
- $where = array(
- 'userid' => $user,
- 'appid' => $app,
- );
- $this->conn->delete('*PREFIX*preferences', $where);
-
- if (isset($this->cache[$user])) {
- unset($this->cache[$user][$app]);
- }
+ $this->config->deleteUserValue($user, $app, $key);
}
/**
* Remove user from preferences
* @param string $user user
+ * @deprecated use deleteAllUserValues of \OCP\IConfig instead
*
* Removes all keys in preferences belonging to the user.
*/
public function deleteUser($user) {
- $where = array(
- 'userid' => $user,
- );
- $this->conn->delete('*PREFIX*preferences', $where);
-
- unset($this->cache[$user]);
+ $this->config->deleteAllUserValues($user);
}
/**
* Remove app from all users
* @param string $app app
+ * @deprecated use deleteAppFromAllUsers of \OCP\IConfig instead
*
* Removes all keys in preferences belonging to the app.
*/
public function deleteAppFromAllUsers($app) {
- $where = array(
- 'appid' => $app,
- );
- $this->conn->delete('*PREFIX*preferences', $where);
-
- foreach ($this->cache as &$userCache) {
- unset($userCache[$app]);
- }
+ $this->config->deleteAppFromAllUsers($app);
}
}
-
-require_once __DIR__ . '/legacy/' . basename(__FILE__);
diff --git a/lib/private/preview.php b/lib/private/preview.php
index dbbe173bf80..c7ef00652aa 100644
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -16,14 +16,6 @@ namespace OC;
use OC\Preview\Provider;
use OCP\Files\NotFoundException;
-require_once 'preview/image.php';
-require_once 'preview/movies.php';
-require_once 'preview/mp3.php';
-require_once 'preview/svg.php';
-require_once 'preview/txt.php';
-require_once 'preview/office.php';
-require_once 'preview/bitmap.php';
-
class Preview {
//the thumbnail folder
const THUMBNAILS_FOLDER = 'thumbnails';
@@ -48,6 +40,7 @@ class Preview {
//filemapper used for deleting previews
// index is path, value is fileinfo
static public $deleteFileMapper = array();
+ static public $deleteChildrenMapper = array();
/**
* preview images object
@@ -105,7 +98,7 @@ class Preview {
self::initProviders();
}
- if (empty(self::$providers)) {
+ if (empty(self::$providers) && \OC::$server->getConfig()->getSystemValue('enable_previews', true)) {
\OC_Log::write('core', 'No preview providers exist', \OC_Log::ERROR);
throw new \Exception('No preview providers');
}
@@ -189,17 +182,33 @@ class Preview {
return $this->info;
}
+
+ /**
+ * @return array|null
+ */
+ private function getChildren() {
+ $absPath = $this->fileView->getAbsolutePath($this->file);
+ $absPath = Files\Filesystem::normalizePath($absPath);
+
+ if (array_key_exists($absPath, self::$deleteChildrenMapper)) {
+ return self::$deleteChildrenMapper[$absPath];
+ }
+
+ return null;
+ }
+
/**
* set the path of the file you want a thumbnail from
* @param string $file
- * @return \OC\Preview $this
+ * @return $this
*/
public function setFile($file) {
$this->file = $file;
$this->info = null;
+
if ($file !== '') {
$this->getFileInfo();
- if($this->info !== null && $this->info !== false) {
+ if($this->info instanceof \OCP\Files\FileInfo) {
$this->mimeType = $this->info->getMimetype();
}
}
@@ -269,6 +278,10 @@ class Preview {
return $this;
}
+ /**
+ * @param bool $keepAspect
+ * @return $this
+ */
public function setKeepAspect($keepAspect) {
$this->keepAspect = $keepAspect;
return $this;
@@ -312,20 +325,25 @@ class Preview {
/**
* deletes all previews of a file
- * @return bool
*/
public function deleteAllPreviews() {
$file = $this->getFile();
$fileInfo = $this->getFileInfo($file);
- if($fileInfo !== null && $fileInfo !== false) {
- $fileId = $fileInfo->getId();
- $previewPath = $this->getPreviewPath($fileId);
- $this->userView->deleteAll($previewPath);
- return $this->userView->rmdir($previewPath);
+ $toDelete = $this->getChildren();
+ $toDelete[] = $fileInfo;
+
+ foreach ($toDelete as $delete) {
+ if ($delete !== null && $delete !== false) {
+ /** @var \OCP\Files\FileInfo $delete */
+ $fileId = $delete->getId();
+
+ $previewPath = $this->getPreviewPath($fileId);
+ $this->userView->deleteAll($previewPath);
+ $this->userView->rmdir($previewPath);
+ }
}
- return false;
}
/**
@@ -667,8 +685,8 @@ class Preview {
}
/**
- * Register a new preview provider to be used
- * @param $class
+ * register a new preview provider to be used
+ * @param string $class
* @param array $options
*/
public static function registerProvider($class, $options = array()) {
@@ -688,7 +706,7 @@ class Preview {
* - OC\Preview\OpenDocument
* - OC\Preview\StarOffice
* - OC\Preview\SVG
- * - OC\Preview\Movies
+ * - OC\Preview\Movie
* - OC\Preview\PDF
* - OC\Preview\TIFF
* - OC\Preview\Illustrator
@@ -719,10 +737,11 @@ class Preview {
return;
}
- if (count(self::$providers) > 0) {
+ if (!empty(self::$providers)) {
return;
}
+ self::registerCoreProviders();
foreach (self::$registeredProviders as $provider) {
$class = $provider['class'];
$options = $provider['options'];
@@ -734,17 +753,94 @@ class Preview {
$keys = array_map('strlen', array_keys(self::$providers));
array_multisort($keys, SORT_DESC, self::$providers);
+ }
+ protected static function registerCoreProviders() {
+ self::registerProvider('OC\Preview\TXT');
+ self::registerProvider('OC\Preview\MarkDown');
+ self::registerProvider('OC\Preview\Image');
+ self::registerProvider('OC\Preview\MP3');
+
+ // SVG, Office and Bitmap require imagick
+ if (extension_loaded('imagick')) {
+ $checkImagick = new \Imagick();
+
+ $imagickProviders = array(
+ 'SVG' => 'OC\Preview\SVG',
+ 'TIFF' => 'OC\Preview\TIFF',
+ 'PDF' => 'OC\Preview\PDF',
+ 'AI' => 'OC\Preview\Illustrator',
+ 'PSD' => 'OC\Preview\Photoshop',
+ // Requires adding 'eps' => array('application/postscript', null), to lib/private/mimetypes.list.php
+ 'EPS' => 'OC\Preview\Postscript',
+ );
+
+ foreach ($imagickProviders as $queryFormat => $provider) {
+ if (count($checkImagick->queryFormats($queryFormat)) === 1) {
+ self::registerProvider($provider);
+ }
+ }
+
+ if (count($checkImagick->queryFormats('PDF')) === 1) {
+ // Office previews are currently not supported on Windows
+ if (!\OC_Util::runningOnWindows() && \OC_Helper::is_function_enabled('shell_exec')) {
+ $officeFound = is_string(\OC::$server->getConfig()->getSystemValue('preview_libreoffice_path', null));
+
+ if (!$officeFound) {
+ //let's see if there is libreoffice or openoffice on this machine
+ $whichLibreOffice = shell_exec('command -v libreoffice');
+ $officeFound = !empty($whichLibreOffice);
+ if (!$officeFound) {
+ $whichOpenOffice = shell_exec('command -v openoffice');
+ $officeFound = !empty($whichOpenOffice);
+ }
+ }
+
+ if ($officeFound) {
+ self::registerProvider('OC\Preview\MSOfficeDoc');
+ self::registerProvider('OC\Preview\MSOffice2003');
+ self::registerProvider('OC\Preview\MSOffice2007');
+ self::registerProvider('OC\Preview\OpenDocument');
+ self::registerProvider('OC\Preview\StarOffice');
+ }
+ }
+ }
+ }
+
+ // Video requires avconv or ffmpeg and is therefor
+ // currently not supported on Windows.
+ if (!\OC_Util::runningOnWindows()) {
+ $avconvBinary = \OC_Helper::findBinaryPath('avconv');
+ $ffmpegBinary = ($avconvBinary) ? null : \OC_Helper::findBinaryPath('ffmpeg');
+
+ if ($avconvBinary || $ffmpegBinary) {
+ // FIXME // a bit hacky but didn't want to use subclasses
+ \OC\Preview\Movie::$avconvBinary = $avconvBinary;
+ \OC\Preview\Movie::$ffmpegBinary = $ffmpegBinary;
+
+ self::registerProvider('OC\Preview\Movie');
+ }
+ }
}
+ /**
+ * @param array $args
+ */
public static function post_write($args) {
self::post_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ */
public static function prepare_delete_files($args) {
self::prepare_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ * @param string $prefix
+ */
public static function prepare_delete($args, $prefix='') {
$path = $args['path'];
if (substr($path, 0, 1) === '/') {
@@ -752,20 +848,63 @@ class Preview {
}
$view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix);
- $info = $view->getFileInfo($path);
- \OC\Preview::$deleteFileMapper = array_merge(
- \OC\Preview::$deleteFileMapper,
- array(
- Files\Filesystem::normalizePath($view->getAbsolutePath($path)) => $info,
- )
- );
+ $absPath = Files\Filesystem::normalizePath($view->getAbsolutePath($path));
+ self::addPathToDeleteFileMapper($absPath, $view->getFileInfo($path));
+ if ($view->is_dir($path)) {
+ $children = self::getAllChildren($view, $path);
+ self::$deleteChildrenMapper[$absPath] = $children;
+ }
+ }
+
+ /**
+ * @param string $absolutePath
+ * @param \OCP\Files\FileInfo $info
+ */
+ private static function addPathToDeleteFileMapper($absolutePath, $info) {
+ self::$deleteFileMapper[$absolutePath] = $info;
}
+ /**
+ * @param \OC\Files\View $view
+ * @param string $path
+ * @return array
+ */
+ private static function getAllChildren($view, $path) {
+ $children = $view->getDirectoryContent($path);
+ $childrensFiles = array();
+
+ $fakeRootLength = strlen($view->getRoot());
+
+ for ($i = 0; $i < count($children); $i++) {
+ $child = $children[$i];
+
+ $childsPath = substr($child->getPath(), $fakeRootLength);
+
+ if ($view->is_dir($childsPath)) {
+ $children = array_merge(
+ $children,
+ $view->getDirectoryContent($childsPath)
+ );
+ } else {
+ $childrensFiles[] = $child;
+ }
+ }
+
+ return $childrensFiles;
+ }
+
+ /**
+ * @param array $args
+ */
public static function post_delete_files($args) {
self::post_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ * @param string $prefix
+ */
public static function post_delete($args, $prefix='') {
$path = Files\Filesystem::normalizePath($args['path']);
@@ -784,6 +923,11 @@ class Preview {
return false;
}
+ $mount = $file->getMountPoint();
+ if ($mount and !$mount->getOption('previews', true)){
+ return false;
+ }
+
//check if there are preview backends
if (empty(self::$providers)) {
self::initProviders();
@@ -814,16 +958,6 @@ class Preview {
self::initProviders();
}
- // FIXME: Ugly hack to prevent SVG of being returned if the SVG
- // provider is not enabled.
- // This is required because the preview system is designed in a
- // bad way and relies on opt-in with asterisks (i.e. image/*)
- // which will lead to the fact that a SVG will also match the image
- // provider.
- if($mimeType === 'image/svg+xml' && !array_key_exists('/image\/svg\+xml/', self::$providers)) {
- return false;
- }
-
foreach(self::$providers as $supportedMimetype => $provider) {
if(preg_match($supportedMimetype, $mimeType)) {
return true;
diff --git a/lib/private/preview/bitmap.php b/lib/private/preview/bitmap.php
index 748a63a6afa..25f65cf7fc9 100644
--- a/lib/private/preview/bitmap.php
+++ b/lib/private/preview/bitmap.php
@@ -5,113 +5,33 @@
* later.
* See the COPYING-README file.
*/
-namespace OC\Preview;
-
-use Imagick;
-
-if (extension_loaded('imagick')) {
-
- $checkImagick = new Imagick();
-
- class Bitmap extends Provider {
-
- public function getMimeType() {
- return null;
- }
-
- public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
- $tmpPath = $fileview->toTmpFile($path);
- //create imagick object from bitmap or vector file
- try{
- // Layer 0 contains either the bitmap or
- // a flat representation of all vector layers
- $bp = new Imagick($tmpPath . '[0]');
-
- $bp->setImageFormat('png');
- } catch (\Exception $e) {
- \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
- return false;
- }
-
- unlink($tmpPath);
-
- //new bitmap image object
- $image = new \OC_Image($bp);
- //check if image object is valid
- return $image->valid() ? $image : false;
- }
-
- }
-
- if(count($checkImagick->queryFormats('PDF')) === 1) {
-
- //.pdf
- class PDF extends Bitmap {
-
- public function getMimeType() {
- return '/application\/pdf/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\PDF');
- }
-
- if(count($checkImagick->queryFormats('TIFF')) === 1) {
-
- //.tiff
- class TIFF extends Bitmap {
-
- public function getMimeType() {
- return '/image\/tiff/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\TIFF');
- }
-
- if(count($checkImagick->queryFormats('AI')) === 1) {
-
- //.ai
- class Illustrator extends Bitmap {
-
- public function getMimeType() {
- return '/application\/illustrator/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\Illustrator');
- }
-
- // Requires adding 'eps' => array('application/postscript', null), to lib/private/mimetypes.list.php
- if(count($checkImagick->queryFormats('EPS')) === 1) {
-
- //.eps
- class Postscript extends Bitmap {
-
- public function getMimeType() {
- return '/application\/postscript/';
- }
+namespace OC\Preview;
+abstract class Bitmap extends Provider {
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ $tmpPath = $fileview->toTmpFile($path);
+
+ //create imagick object from bitmap or vector file
+ try {
+ // Layer 0 contains either the bitmap or
+ // a flat representation of all vector layers
+ $bp = new \Imagick($tmpPath . '[0]');
+
+ $bp->setImageFormat('png');
+ } catch (\Exception $e) {
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+ return false;
}
- \OC\Preview::registerProvider('OC\Preview\Postscript');
- }
-
- if(count($checkImagick->queryFormats('PSD')) === 1) {
-
- //.psd
- class Photoshop extends Bitmap {
-
- public function getMimeType() {
- return '/application\/x-photoshop/';
- }
+ unlink($tmpPath);
- }
-
- \OC\Preview::registerProvider('OC\Preview\Photoshop');
+ //new bitmap image object
+ $image = new \OC_Image($bp);
+ //check if image object is valid
+ return $image->valid() ? $image : false;
}
}
diff --git a/lib/private/preview/illustrator.php b/lib/private/preview/illustrator.php
new file mode 100644
index 00000000000..e88c305f708
--- /dev/null
+++ b/lib/private/preview/illustrator.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.ai
+class Illustrator extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/illustrator/';
+ }
+}
diff --git a/lib/private/preview/image.php b/lib/private/preview/image.php
index ec5b87befea..986a44b48fd 100644
--- a/lib/private/preview/image.php
+++ b/lib/private/preview/image.php
@@ -9,11 +9,16 @@
namespace OC\Preview;
class Image extends Provider {
-
+ /**
+ * {@inheritDoc}
+ */
public function getMimeType() {
- return '/image\/.*/';
+ return '/image\/(?!tiff$)(?!svg.*).*/';
}
+ /**
+ * {@inheritDoc}
+ */
public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
//get fileinfo
$fileInfo = $fileview->getFileInfo($path);
@@ -35,5 +40,3 @@ class Image extends Provider {
}
}
-
-\OC\Preview::registerProvider('OC\Preview\Image');
diff --git a/lib/private/preview/markdown.php b/lib/private/preview/markdown.php
new file mode 100644
index 00000000000..1be01fcdd4c
--- /dev/null
+++ b/lib/private/preview/markdown.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+class MarkDown extends TXT {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/text\/(x-)?markdown/';
+ }
+
+}
diff --git a/lib/private/preview/movie.php b/lib/private/preview/movie.php
new file mode 100644
index 00000000000..06353ddebb7
--- /dev/null
+++ b/lib/private/preview/movie.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+class Movie extends Provider {
+ public static $avconvBinary;
+ public static $ffmpegBinary;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/video\/.*/';
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ // TODO: use proc_open() and stream the source file ?
+
+ $fileInfo = $fileview->getFileInfo($path);
+ $useFileDirectly = (!$fileInfo->isEncrypted() && !$fileInfo->isMounted());
+
+ if ($useFileDirectly) {
+ $absPath = $fileview->getLocalFile($path);
+ } else {
+ $absPath = \OC_Helper::tmpFile();
+
+ $handle = $fileview->fopen($path, 'rb');
+
+ // we better use 5MB (1024 * 1024 * 5 = 5242880) instead of 1MB.
+ // in some cases 1MB was no enough to generate thumbnail
+ $firstmb = stream_get_contents($handle, 5242880);
+ file_put_contents($absPath, $firstmb);
+ }
+
+ $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
+ if ($result === false) {
+ $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
+ if ($result === false) {
+ $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
+ }
+ }
+
+ if (!$useFileDirectly) {
+ unlink($absPath);
+ }
+
+ return $result;
+ }
+
+ /**
+ * @param int $maxX
+ * @param int $maxY
+ * @param string $absPath
+ * @param int $second
+ * @return bool|\OC_Image
+ */
+ private function generateThumbNail($maxX, $maxY, $absPath, $second) {
+ $tmpPath = \OC_Helper::tmpFile();
+
+ if (self::$avconvBinary) {
+ $cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) .
+ ' -i ' . escapeshellarg($absPath) .
+ ' -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
+ ' > /dev/null 2>&1';
+ } else {
+ $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
+ ' -i ' . escapeshellarg($absPath) .
+ ' -f mjpeg -vframes 1' .
+ ' -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) .
+ ' ' . escapeshellarg($tmpPath) .
+ ' > /dev/null 2>&1';
+ }
+
+ exec($cmd, $output, $returnCode);
+
+ if ($returnCode === 0) {
+ $image = new \OC_Image();
+ $image->loadFromFile($tmpPath);
+ unlink($tmpPath);
+ return $image->valid() ? $image : false;
+ }
+ unlink($tmpPath);
+ return false;
+ }
+}
diff --git a/lib/private/preview/movies.php b/lib/private/preview/movies.php
deleted file mode 100644
index 2a23c2141c1..00000000000
--- a/lib/private/preview/movies.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
- * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-namespace OC\Preview;
-
-function findBinaryPath($program) {
- exec('command -v ' . escapeshellarg($program) . ' 2> /dev/null', $output, $returnCode);
- if ($returnCode === 0 && count($output) > 0) {
- return escapeshellcmd($output[0]);
- }
- return null;
-}
-
-// movie preview is currently not supported on Windows
-if (!\OC_Util::runningOnWindows()) {
- $isExecEnabled = \OC_Helper::is_function_enabled('exec');
- $ffmpegBinary = null;
- $avconvBinary = null;
-
- if ($isExecEnabled) {
- $avconvBinary = findBinaryPath('avconv');
- if (!$avconvBinary) {
- $ffmpegBinary = findBinaryPath('ffmpeg');
- }
- }
-
- if($isExecEnabled && ( $avconvBinary || $ffmpegBinary )) {
-
- class Movie extends Provider {
- public static $avconvBinary;
- public static $ffmpegBinary;
-
- public function getMimeType() {
- return '/video\/.*/';
- }
-
- public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
- // TODO: use proc_open() and stream the source file ?
-
- $fileInfo = $fileview->getFileInfo($path);
- $useFileDirectly = (!$fileInfo->isEncrypted() && !$fileInfo->isMounted());
-
- if ($useFileDirectly) {
- $absPath = $fileview->getLocalFile($path);
- } else {
- $absPath = \OC_Helper::tmpFile();
-
- $handle = $fileview->fopen($path, 'rb');
-
- // we better use 5MB (1024 * 1024 * 5 = 5242880) instead of 1MB.
- // in some cases 1MB was no enough to generate thumbnail
- $firstmb = stream_get_contents($handle, 5242880);
- file_put_contents($absPath, $firstmb);
- }
-
- $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
- if ($result === false) {
- $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
- if ($result === false) {
- $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
- }
- }
-
- if (!$useFileDirectly) {
- unlink($absPath);
- }
-
- return $result;
- }
-
- /**
- * @param int $maxX
- * @param int $maxY
- * @param string $absPath
- * @param string $tmpPath
- * @param int $second
- * @return bool|\OC_Image
- */
- private function generateThumbNail($maxX, $maxY, $absPath, $second)
- {
- $tmpPath = \OC_Helper::tmpFile();
-
- if (self::$avconvBinary) {
- $cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) .
- ' -i ' . escapeshellarg($absPath) .
- ' -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
- ' > /dev/null 2>&1';
- } else {
- $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
- ' -i ' . escapeshellarg($absPath) .
- ' -f mjpeg -vframes 1' .
- ' -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) .
- ' ' . escapeshellarg($tmpPath) .
- ' > /dev/null 2>&1';
- }
-
- exec($cmd, $output, $returnCode);
-
- if ($returnCode === 0) {
- $image = new \OC_Image();
- $image->loadFromFile($tmpPath);
- unlink($tmpPath);
- return $image->valid() ? $image : false;
- }
- unlink($tmpPath);
- return false;
- }
- }
-
- // a bit hacky but didn't want to use subclasses
- Movie::$avconvBinary = $avconvBinary;
- Movie::$ffmpegBinary = $ffmpegBinary;
-
- \OC\Preview::registerProvider('OC\Preview\Movie');
- }
-}
-
diff --git a/lib/private/preview/mp3.php b/lib/private/preview/mp3.php
index bb4d3dfce86..f1a50d99e13 100644
--- a/lib/private/preview/mp3.php
+++ b/lib/private/preview/mp3.php
@@ -8,11 +8,16 @@
namespace OC\Preview;
class MP3 extends Provider {
-
+ /**
+ * {@inheritDoc}
+ */
public function getMimeType() {
return '/audio\/mpeg/';
}
+ /**
+ * {@inheritDoc}
+ */
public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
$getID3 = new \getID3();
@@ -31,6 +36,12 @@ class MP3 extends Provider {
return $this->getNoCoverThumbnail();
}
+ /**
+ * Generates a default image when the file has no cover
+ *
+ * @return false|\OC_Image False if the default image is missing or invalid,
+ * otherwise the image is returned as \OC_Image
+ */
private function getNoCoverThumbnail() {
$icon = \OC::$SERVERROOT . '/core/img/filetypes/audio.png';
@@ -44,5 +55,3 @@ class MP3 extends Provider {
}
}
-
-\OC\Preview::registerProvider('OC\Preview\MP3');
diff --git a/lib/private/preview/msoffice2003.php b/lib/private/preview/msoffice2003.php
new file mode 100644
index 00000000000..55fbe708435
--- /dev/null
+++ b/lib/private/preview/msoffice2003.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.docm, .dotm, .xls(m), .xlt(m), .xla(m), .ppt(m), .pot(m), .pps(m), .ppa(m)
+class MSOffice2003 extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.ms-.*/';
+ }
+}
diff --git a/lib/private/preview/msoffice2007.php b/lib/private/preview/msoffice2007.php
new file mode 100644
index 00000000000..ace246eb6d9
--- /dev/null
+++ b/lib/private/preview/msoffice2007.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.docx, .dotx, .xlsx, .xltx, .pptx, .potx, .ppsx
+class MSOffice2007 extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.openxmlformats-officedocument.*/';
+ }
+}
diff --git a/lib/private/preview/msofficedoc.php b/lib/private/preview/msofficedoc.php
new file mode 100644
index 00000000000..42507af2233
--- /dev/null
+++ b/lib/private/preview/msofficedoc.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.doc, .dot
+class MSOfficeDoc extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/msword/';
+ }
+}
diff --git a/lib/private/preview/office-cl.php b/lib/private/preview/office-cl.php
deleted file mode 100644
index 42d2cbf34fc..00000000000
--- a/lib/private/preview/office-cl.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-namespace OC\Preview;
-
-// office preview is currently not supported on Windows
-if (!\OC_Util::runningOnWindows()) {
-
- //we need imagick to convert
- class Office extends Provider {
-
- private $cmd;
-
- public function getMimeType() {
- return null;
- }
-
- public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
- $this->initCmd();
- if(is_null($this->cmd)) {
- return false;
- }
-
- $absPath = $fileview->toTmpFile($path);
-
- $tmpDir = get_temp_dir();
-
- $defaultParameters = ' -env:UserInstallation=file://' . escapeshellarg($tmpDir . '/owncloud-' . \OC_Util::getInstanceId().'/') . ' --headless --nologo --nofirststartwizard --invisible --norestore -convert-to pdf -outdir ';
- $clParameters = \OCP\Config::getSystemValue('preview_office_cl_parameters', $defaultParameters);
-
- $exec = $this->cmd . $clParameters . escapeshellarg($tmpDir) . ' ' . escapeshellarg($absPath);
-
- shell_exec($exec);
-
- //create imagick object from pdf
- try{
- $pdf = new \imagick($absPath . '.pdf' . '[0]');
- $pdf->setImageFormat('jpg');
- } catch (\Exception $e) {
- unlink($absPath);
- unlink($absPath . '.pdf');
- \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
- return false;
- }
-
- $image = new \OC_Image();
- $image->loadFromData($pdf);
-
- unlink($absPath);
- unlink($absPath . '.pdf');
-
- return $image->valid() ? $image : false;
- }
-
- private function initCmd() {
- $cmd = '';
-
- if(is_string(\OC_Config::getValue('preview_libreoffice_path', null))) {
- $cmd = \OC_Config::getValue('preview_libreoffice_path', null);
- }
-
- $whichLibreOffice = shell_exec('command -v libreoffice');
- if($cmd === '' && !empty($whichLibreOffice)) {
- $cmd = 'libreoffice';
- }
-
- $whichOpenOffice = shell_exec('command -v openoffice');
- if($cmd === '' && !empty($whichOpenOffice)) {
- $cmd = 'openoffice';
- }
-
- if($cmd === '') {
- $cmd = null;
- }
-
- $this->cmd = $cmd;
- }
- }
-
- //.doc, .dot
- class MSOfficeDoc extends Office {
-
- public function getMimeType() {
- return '/application\/msword/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\MSOfficeDoc');
-
- //.docm, .dotm, .xls(m), .xlt(m), .xla(m), .ppt(m), .pot(m), .pps(m), .ppa(m)
- class MSOffice2003 extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.ms-.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\MSOffice2003');
-
- //.docx, .dotx, .xlsx, .xltx, .pptx, .potx, .ppsx
- class MSOffice2007 extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.openxmlformats-officedocument.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\MSOffice2007');
-
- //.odt, .ott, .oth, .odm, .odg, .otg, .odp, .otp, .ods, .ots, .odc, .odf, .odb, .odi, .oxt
- class OpenDocument extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.oasis.opendocument.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\OpenDocument');
-
- //.sxw, .stw, .sxc, .stc, .sxd, .std, .sxi, .sti, .sxg, .sxm
- class StarOffice extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.sun.xml.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\StarOffice');
-}
diff --git a/lib/private/preview/office.php b/lib/private/preview/office.php
index b47cbc6e08f..5bd61bde3be 100644
--- a/lib/private/preview/office.php
+++ b/lib/private/preview/office.php
@@ -5,24 +5,72 @@
* later.
* See the COPYING-README file.
*/
-//both, libreoffice backend and php fallback, need imagick
-if (extension_loaded('imagick')) {
-
- $checkImagick = new Imagick();
-
- if(count($checkImagick->queryFormats('PDF')) === 1) {
- $isShellExecEnabled = \OC_Helper::is_function_enabled('shell_exec');
-
- // LibreOffice preview is currently not supported on Windows
- if (!\OC_Util::runningOnWindows()) {
- $whichLibreOffice = ($isShellExecEnabled ? shell_exec('command -v libreoffice') : '');
- $isLibreOfficeAvailable = !empty($whichLibreOffice);
- $whichOpenOffice = ($isShellExecEnabled ? shell_exec('command -v openoffice') : '');
- $isOpenOfficeAvailable = !empty($whichOpenOffice);
- //let's see if there is libreoffice or openoffice on this machine
- if($isShellExecEnabled && ($isLibreOfficeAvailable || $isOpenOfficeAvailable || is_string(\OC_Config::getValue('preview_libreoffice_path', null)))) {
- require_once('office-cl.php');
- }
+namespace OC\Preview;
+
+abstract class Office extends Provider {
+ private $cmd;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ $this->initCmd();
+ if(is_null($this->cmd)) {
+ return false;
+ }
+
+ $absPath = $fileview->toTmpFile($path);
+
+ $tmpDir = get_temp_dir();
+
+ $defaultParameters = ' -env:UserInstallation=file://' . escapeshellarg($tmpDir . '/owncloud-' . \OC_Util::getInstanceId().'/') . ' --headless --nologo --nofirststartwizard --invisible --norestore --convert-to pdf --outdir ';
+ $clParameters = \OCP\Config::getSystemValue('preview_office_cl_parameters', $defaultParameters);
+
+ $exec = $this->cmd . $clParameters . escapeshellarg($tmpDir) . ' ' . escapeshellarg($absPath);
+
+ shell_exec($exec);
+
+ //create imagick object from pdf
+ try{
+ $pdf = new \imagick($absPath . '.pdf' . '[0]');
+ $pdf->setImageFormat('jpg');
+ } catch (\Exception $e) {
+ unlink($absPath);
+ unlink($absPath . '.pdf');
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+ return false;
}
+
+ $image = new \OC_Image();
+ $image->loadFromData($pdf);
+
+ unlink($absPath);
+ unlink($absPath . '.pdf');
+
+ return $image->valid() ? $image : false;
+ }
+
+ private function initCmd() {
+ $cmd = '';
+
+ if(is_string(\OC_Config::getValue('preview_libreoffice_path', null))) {
+ $cmd = \OC_Config::getValue('preview_libreoffice_path', null);
+ }
+
+ $whichLibreOffice = shell_exec('command -v libreoffice');
+ if($cmd === '' && !empty($whichLibreOffice)) {
+ $cmd = 'libreoffice';
+ }
+
+ $whichOpenOffice = shell_exec('command -v openoffice');
+ if($cmd === '' && !empty($whichOpenOffice)) {
+ $cmd = 'openoffice';
+ }
+
+ if($cmd === '') {
+ $cmd = null;
+ }
+
+ $this->cmd = $cmd;
}
}
diff --git a/lib/private/preview/opendocument.php b/lib/private/preview/opendocument.php
new file mode 100644
index 00000000000..fe1468ee941
--- /dev/null
+++ b/lib/private/preview/opendocument.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.odt, .ott, .oth, .odm, .odg, .otg, .odp, .otp, .ods, .ots, .odc, .odf, .odb, .odi, .oxt
+class OpenDocument extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.oasis.opendocument.*/';
+ }
+}
diff --git a/lib/private/preview/pdf.php b/lib/private/preview/pdf.php
new file mode 100644
index 00000000000..cb13074ff60
--- /dev/null
+++ b/lib/private/preview/pdf.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.pdf
+class PDF extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/pdf/';
+ }
+}
diff --git a/lib/private/preview/photoshop.php b/lib/private/preview/photoshop.php
new file mode 100644
index 00000000000..f5f60ce4de8
--- /dev/null
+++ b/lib/private/preview/photoshop.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.psd
+class Photoshop extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/x-photoshop/';
+ }
+}
diff --git a/lib/private/preview/postscript.php b/lib/private/preview/postscript.php
new file mode 100644
index 00000000000..7c8b089d92e
--- /dev/null
+++ b/lib/private/preview/postscript.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.eps
+class Postscript extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/postscript/';
+ }
+}
diff --git a/lib/private/preview/provider.php b/lib/private/preview/provider.php
index f544c2c4b13..ead67eaeef7 100644
--- a/lib/private/preview/provider.php
+++ b/lib/private/preview/provider.php
@@ -5,18 +5,21 @@ abstract class Provider {
private $options;
public function __construct($options) {
- $this->options=$options;
+ $this->options = $options;
}
+ /**
+ * @return string Regex with the mimetypes that are supported by this provider
+ */
abstract public function getMimeType();
/**
* Check if a preview can be generated for $path
*
- * @param string $path
+ * @param \OC\Files\FileInfo $file
* @return bool
*/
- public function isAvailable($path) {
+ public function isAvailable($file) {
return true;
}
@@ -26,11 +29,10 @@ abstract class Provider {
* @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
* @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
* @param bool $scalingup Disable/Enable upscaling of previews
- * @param object $fileview fileview object of user folder
+ * @param \OC\Files\View $fileview fileview object of user folder
* @return mixed
* false if no preview was generated
* OC_Image object of the preview
*/
abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
-
}
diff --git a/lib/private/preview/staroffice.php b/lib/private/preview/staroffice.php
new file mode 100644
index 00000000000..73ad368b341
--- /dev/null
+++ b/lib/private/preview/staroffice.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.sxw, .stw, .sxc, .stc, .sxd, .std, .sxi, .sti, .sxg, .sxm
+class StarOffice extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.sun.xml.*/';
+ }
+}
diff --git a/lib/private/preview/svg.php b/lib/private/preview/svg.php
index 0b5dbc9716f..561e87a6500 100644
--- a/lib/private/preview/svg.php
+++ b/lib/private/preview/svg.php
@@ -7,52 +7,43 @@
*/
namespace OC\Preview;
-use Imagick;
-
-if (extension_loaded('imagick')) {
-
- $checkImagick = new Imagick();
-
- if(count($checkImagick->queryFormats('SVG')) === 1) {
-
- class SVG extends Provider {
+class SVG extends Provider {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/image\/svg\+xml/';
+ }
- public function getMimeType() {
- return '/image\/svg\+xml/';
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ try{
+ $svg = new \Imagick();
+ $svg->setBackgroundColor(new \ImagickPixel('transparent'));
+
+ $content = stream_get_contents($fileview->fopen($path, 'r'));
+ if(substr($content, 0, 5) !== '<?xml') {
+ $content = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $content;
}
- public function getThumbnail($path,$maxX,$maxY,$scalingup,$fileview) {
- try{
- $svg = new Imagick();
- $svg->setBackgroundColor(new \ImagickPixel('transparent'));
-
- $content = stream_get_contents($fileview->fopen($path, 'r'));
- if(substr($content, 0, 5) !== '<?xml') {
- $content = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $content;
- }
-
- // Do not parse SVG files with references
- if(stripos($content, 'xlink:href') !== false) {
- return false;
- }
-
- $svg->readImageBlob($content);
- $svg->setImageFormat('png32');
- } catch (\Exception $e) {
- \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
- return false;
- }
-
-
- //new image object
- $image = new \OC_Image();
- $image->loadFromData($svg);
- //check if image object is valid
- return $image->valid() ? $image : false;
+ // Do not parse SVG files with references
+ if(stripos($content, 'xlink:href') !== false) {
+ return false;
}
+ $svg->readImageBlob($content);
+ $svg->setImageFormat('png32');
+ } catch (\Exception $e) {
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+ return false;
}
- \OC\Preview::registerProvider('OC\Preview\SVG');
+ //new image object
+ $image = new \OC_Image();
+ $image->loadFromData($svg);
+ //check if image object is valid
+ return $image->valid() ? $image : false;
}
}
diff --git a/lib/private/preview/tiff.php b/lib/private/preview/tiff.php
new file mode 100644
index 00000000000..0a1e8e8ecec
--- /dev/null
+++ b/lib/private/preview/tiff.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.tiff
+class TIFF extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/image\/tiff/';
+ }
+}
diff --git a/lib/private/preview/txt.php b/lib/private/preview/txt.php
index 7f01b980c0e..8b414dc5726 100644
--- a/lib/private/preview/txt.php
+++ b/lib/private/preview/txt.php
@@ -8,31 +8,24 @@
namespace OC\Preview;
class TXT extends Provider {
-
+ /**
+ * {@inheritDoc}
+ */
public function getMimeType() {
return '/text\/plain/';
}
/**
- * Check if a preview can be generated for $path
- *
- * @param \OC\Files\FileInfo $file
- * @return bool
+ * {@inheritDoc}
*/
public function isAvailable($file) {
return $file->getSize() > 5;
}
/**
- * @param string $path
- * @param int $maxX
- * @param int $maxY
- * @param boolean $scalingup
- * @param \OC\Files\View $fileview
- * @return bool|\OC_Image
+ * {@inheritDoc}
*/
public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
-
$content = $fileview->fopen($path, 'r');
$content = stream_get_contents($content,3000);
@@ -79,15 +72,3 @@ class TXT extends Provider {
return $image->valid() ? $image : false;
}
}
-
-\OC\Preview::registerProvider('OC\Preview\TXT');
-
-class MarkDown extends TXT {
-
- public function getMimeType() {
- return '/text\/(x-)?markdown/';
- }
-
-}
-
-\OC\Preview::registerProvider('OC\Preview\MarkDown');
diff --git a/lib/private/repair.php b/lib/private/repair.php
index 081aeb32c66..be607b44ed8 100644
--- a/lib/private/repair.php
+++ b/lib/private/repair.php
@@ -93,14 +93,15 @@ class Repair extends BasicEmitter {
$steps = array(
new InnoDB(),
new Collation(\OC::$server->getConfig(), \OC_DB::getConnection()),
- new SearchLuceneTables()
+ new SearchLuceneTables(),
+ new RepairConfig()
);
//There is no need to delete all previews on every single update
//only 7.0.0 through 7.0.2 generated broken previews
$currentVersion = \OC::$server->getConfig()->getSystemValue('version');
if (version_compare($currentVersion, '7.0.0.0', '>=') &&
- version_compare($currentVersion, '7.0.2.2', '<=')) {
+ version_compare($currentVersion, '7.0.3.4', '<=')) {
$steps[] = new \OC\Repair\Preview();
}
diff --git a/lib/private/request.php b/lib/private/request.php
index 1cfa4a150c5..3c33dfc340a 100644
--- a/lib/private/request.php
+++ b/lib/private/request.php
@@ -12,8 +12,7 @@ class OC_Request {
// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent
const USER_AGENT_ANDROID_MOBILE_CHROME = '#Android.*Chrome/[.0-9]*#';
const USER_AGENT_FREEBOX = '#^Mozilla/5\.0$#';
-
- const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)(:[0-9]+|)$/';
+ const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)$/';
static protected $reqId;
/**
@@ -67,22 +66,50 @@ class OC_Request {
}
/**
+ * Strips a potential port from a domain (in format domain:port)
+ * @param $host
+ * @return string $host without appended port
+ */
+ public static function getDomainWithoutPort($host) {
+ $pos = strrpos($host, ':');
+ if ($pos !== false) {
+ $port = substr($host, $pos + 1);
+ if (is_numeric($port)) {
+ $host = substr($host, 0, $pos);
+ }
+ }
+ return $host;
+ }
+
+ /**
* Checks whether a domain is considered as trusted from the list
* of trusted domains. If no trusted domains have been configured, returns
* true.
* This is used to prevent Host Header Poisoning.
- * @param string $domain
+ * @param string $domainWithPort
* @return bool true if the given domain is trusted or if no trusted domains
* have been configured
*/
- public static function isTrustedDomain($domain) {
- $trustedList = \OC_Config::getValue('trusted_domains', array());
+ public static function isTrustedDomain($domainWithPort) {
+ // Extract port from domain if needed
+ $domain = self::getDomainWithoutPort($domainWithPort);
+
+ // FIXME: Empty config array defaults to true for now. - Deprecate this behaviour with ownCloud 8.
+ $trustedList = \OC::$server->getConfig()->getSystemValue('trusted_domains', array());
if (empty($trustedList)) {
return true;
}
+
+ // FIXME: Workaround for older instances still with port applied. Remove for ownCloud 9.
+ if(in_array($domainWithPort, $trustedList)) {
+ return true;
+ }
+
+ // Always allow access from localhost
if (preg_match(self::REGEX_LOCALHOST, $domain) === 1) {
return true;
}
+
return in_array($domain, $trustedList);
}
diff --git a/lib/private/route/router.php b/lib/private/route/router.php
index 645d6141964..3559b841926 100644
--- a/lib/private/route/router.php
+++ b/lib/private/route/router.php
@@ -9,6 +9,7 @@
namespace OC\Route;
use OCP\Route\IRouter;
+use OCP\AppFramework\App;
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\RequestContext;
@@ -129,7 +130,7 @@ class Router implements IRouter {
if (!isset($this->loadedApps[$app])) {
$this->loadedApps[$app] = true;
$this->useCollection($app);
- $this->requireRouteFile($file);
+ $this->requireRouteFile($file, $app);
$collection = $this->getCollection($app);
$collection->addPrefix('/apps/' . $app);
$this->root->addCollection($collection);
@@ -243,7 +244,6 @@ class Router implements IRouter {
if (isset($parameters['action'])) {
$action = $parameters['action'];
if (!is_callable($action)) {
- var_dump($action);
throw new \Exception('not a callable action');
}
unset($parameters['action']);
@@ -284,10 +284,39 @@ class Router implements IRouter {
/**
* To isolate the variable scope used inside the $file it is required in it's own method
- * @param string $file
+ * @param string $file the route file location to include
+ * @param string $appName
*/
- private function requireRouteFile($file) {
- require_once $file;
+ private function requireRouteFile($file, $appName) {
+ $this->setupRoutes(include_once $file, $appName);
}
+
+ /**
+ * If a routes.php file returns an array, try to set up the application and
+ * register the routes for the app. The application class will be chosen by
+ * camelcasing the appname, e.g.: my_app will be turned into
+ * \OCA\MyApp\AppInfo\Application. If that class does not exist, a default
+ * App will be intialized. This makes it optional to ship an
+ * appinfo/application.php by using the built in query resolver
+ * @param array $routes the application routes
+ * @param string $appName the name of the app.
+ */
+ private function setupRoutes($routes, $appName) {
+ if (is_array($routes)) {
+ $appNameSpace = App::buildAppNamespace($appName);
+
+ $applicationClassName = $appNameSpace . '\\AppInfo\\Application';
+
+ if (class_exists($applicationClassName)) {
+ $application = new $applicationClassName();
+ } else {
+ $application = new App($appName);
+ }
+
+ $application->registerRoutes($this, $routes);
+ }
+ }
+
+
}
diff --git a/lib/private/search.php b/lib/private/search.php
index bcaebdddd9c..a29a4762b68 100644
--- a/lib/private/search.php
+++ b/lib/private/search.php
@@ -21,6 +21,7 @@
*/
namespace OC;
+use OCP\Search\PagedProvider;
use OCP\Search\Provider;
use OCP\ISearch;
@@ -35,14 +36,43 @@ class Search implements ISearch {
/**
* Search all providers for $query
* @param string $query
+ * @param string[] $inApps optionally limit results to the given apps
* @return array An array of OC\Search\Result's
*/
- public function search($query) {
+ public function search($query, array $inApps = array()) {
+ // old apps might assume they get all results, so we set size 0
+ return $this->searchPaged($query, $inApps, 1, 0);
+ }
+
+ /**
+ * Search all providers for $query
+ * @param string $query
+ * @param string[] $inApps optionally limit results to the given apps
+ * @param int $page pages start at page 1
+ * @param int $size, 0 = all
+ * @return array An array of OC\Search\Result's
+ */
+ public function searchPaged($query, array $inApps = array(), $page = 1, $size = 30) {
$this->initProviders();
$results = array();
foreach($this->providers as $provider) {
/** @var $provider Provider */
- $results = array_merge($results, $provider->search($query));
+ if ( ! $provider->providesResultsFor($inApps) ) {
+ continue;
+ }
+ if ($provider instanceof PagedProvider) {
+ $results = array_merge($results, $provider->searchPaged($query, $page, $size));
+ } else if ($provider instanceof Provider) {
+ $providerResults = $provider->search($query);
+ if ($size > 0) {
+ $slicedResults = array_slice($providerResults, ($page - 1) * $size, $size);
+ $results = array_merge($results, $slicedResults);
+ } else {
+ $results = array_merge($results, $providerResults);
+ }
+ } else {
+ \OC::$server->getLogger()->warning('Ignoring Unknown search provider', array('provider' => $provider));
+ }
}
return $results;
}
@@ -51,8 +81,8 @@ class Search implements ISearch {
* Remove all registered search providers
*/
public function clearProviders() {
- $this->providers=array();
- $this->registeredProviders=array();
+ $this->providers = array();
+ $this->registeredProviders = array();
}
/**
@@ -67,7 +97,7 @@ class Search implements ISearch {
}
);
// force regeneration of providers on next search
- $this->providers=array();
+ $this->providers = array();
}
/**
@@ -75,21 +105,21 @@ class Search implements ISearch {
* @param string $class class name of a OC\Search\Provider
* @param array $options optional
*/
- public function registerProvider($class, $options=array()) {
- $this->registeredProviders[]=array('class'=>$class, 'options'=>$options);
+ public function registerProvider($class, array $options = array()) {
+ $this->registeredProviders[] = array('class' => $class, 'options' => $options);
}
/**
* Create instances of all the registered search providers
*/
private function initProviders() {
- if(count($this->providers)>0) {
+ if( ! empty($this->providers) ) {
return;
}
foreach($this->registeredProviders as $provider) {
$class = $provider['class'];
$options = $provider['options'];
- $this->providers[]=new $class($options);
+ $this->providers[] = new $class($options);
}
}
diff --git a/lib/private/search/result/file.php b/lib/private/search/result/file.php
index 331fdaa383a..13f1a62fbc0 100644
--- a/lib/private/search/result/file.php
+++ b/lib/private/search/result/file.php
@@ -83,7 +83,7 @@ class File extends \OCP\Search\Result {
$this->path = $path;
$this->size = $data->getSize();
$this->modified = $data->getMtime();
- $this->mime_type = $data->getMimetype();
+ $this->mime = $data->getMimetype();
}
/**
diff --git a/lib/private/security/certificatemanager.php b/lib/private/security/certificatemanager.php
index cae9730eb26..4a8ea170731 100644
--- a/lib/private/security/certificatemanager.php
+++ b/lib/private/security/certificatemanager.php
@@ -33,7 +33,7 @@ class CertificateManager implements ICertificateManager {
* @return \OCP\ICertificate[]
*/
public function listCertificates() {
- $path = $this->user->getHome() . '/files_external/uploads/';
+ $path = $this->getPathToCertificates() . 'uploads/';
if (!is_dir($path)) {
return array();
}
@@ -49,6 +49,7 @@ class CertificateManager implements ICertificateManager {
} catch(\Exception $e) {}
}
}
+ closedir($handle);
return $result;
}
@@ -56,7 +57,7 @@ class CertificateManager implements ICertificateManager {
* create the certificate bundle of all trusted certificated
*/
protected function createCertificateBundle() {
- $path = $this->user->getHome() . '/files_external/';
+ $path = $this->getPathToCertificates();
$certs = $this->listCertificates();
$fh_certs = fopen($path . '/rootcerts.crt', 'w');
@@ -85,7 +86,7 @@ class CertificateManager implements ICertificateManager {
return false;
}
- $dir = $this->user->getHome() . '/files_external/uploads/';
+ $dir = $this->getPathToCertificates() . 'uploads/';
if (!file_exists($dir)) {
//path might not exist (e.g. non-standard OC_User::getHome() value)
//in this case create full path using 3rd (recursive=true) parameter.
@@ -115,7 +116,7 @@ class CertificateManager implements ICertificateManager {
if (!Filesystem::isValidPath($name)) {
return false;
}
- $path = $this->user->getHome() . '/files_external/uploads/';
+ $path = $this->getPathToCertificates() . 'uploads/';
if (file_exists($path . $name)) {
unlink($path . $name);
$this->createCertificateBundle();
@@ -129,6 +130,12 @@ class CertificateManager implements ICertificateManager {
* @return string
*/
public function getCertificateBundle() {
- return $this->user->getHome() . '/files_external/rootcerts.crt';
+ return $this->getPathToCertificates() . 'rootcerts.crt';
+ }
+
+ private function getPathToCertificates() {
+ $path = $this->user ? $this->user->getHome() . '/files_external/' : '/files_external/';
+
+ return $path;
}
}
diff --git a/lib/private/security/crypto.php b/lib/private/security/crypto.php
index 498e15d6bc3..6fdff8d92a2 100644
--- a/lib/private/security/crypto.php
+++ b/lib/private/security/crypto.php
@@ -43,22 +43,6 @@ class Crypto implements ICrypto {
}
/**
- * Custom implementation of hex2bin since the function is only available starting
- * with PHP 5.4
- *
- * @TODO Remove this once 5.3 support for ownCloud is dropped
- * @param $message
- * @return string
- */
- protected static function hexToBin($message) {
- if (function_exists('hex2bin')) {
- return hex2bin($message);
- }
-
- return pack("H*", $message);
- }
-
- /**
* @param string $message The message to authenticate
* @param string $password Password to use (defaults to `secret` in config.php)
* @return string Calculated HMAC
@@ -115,9 +99,9 @@ class Crypto implements ICrypto {
throw new \Exception('Authenticated ciphertext could not be decoded.');
}
- $ciphertext = self::hexToBin($parts[0]);
+ $ciphertext = hex2bin($parts[0]);
$iv = $parts[1];
- $hmac = self::hexToBin($parts[2]);
+ $hmac = hex2bin($parts[2]);
$this->cipher->setIV($iv);
diff --git a/lib/private/security/hasher.php b/lib/private/security/hasher.php
new file mode 100644
index 00000000000..647e1a307ea
--- /dev/null
+++ b/lib/private/security/hasher.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Security;
+
+use OCP\IConfig;
+use OCP\Security\IHasher;
+
+/**
+ * Class Hasher provides some basic hashing functions. Furthermore, it supports legacy hashes
+ * used by previous versions of ownCloud and helps migrating those hashes to newer ones.
+ *
+ * The hashes generated by this class are prefixed (version|hash) with a version parameter to allow possible
+ * updates in the future.
+ * Possible versions:
+ * - 1 (Initial version)
+ *
+ * Usage:
+ * // Hashing a message
+ * $hash = \OC::$server->getHasher()->hash('MessageToHash');
+ * // Verifying a message - $newHash will contain the newly calculated hash
+ * $newHash = null;
+ * var_dump(\OC::$server->getHasher()->verify('a', '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8', $newHash));
+ * var_dump($newHash);
+ *
+ * @package OC\Security
+ */
+class Hasher implements IHasher {
+ /** @var IConfig */
+ private $config;
+ /** @var array Options passed to password_hash and password_needs_rehash */
+ private $options = array();
+ /** @var string Salt used for legacy passwords */
+ private $legacySalt = null;
+ /** @var int Current version of the generated hash */
+ private $currentVersion = 1;
+
+ /**
+ * @param IConfig $config
+ */
+ function __construct(IConfig $config) {
+ $this->config = $config;
+
+ $hashingCost = $this->config->getSystemValue('hashingCost', null);
+ if(!is_null($hashingCost)) {
+ $this->options['cost'] = $hashingCost;
+ }
+ }
+
+ /**
+ * Hashes a message using PHP's `password_hash` functionality.
+ * Please note that the size of the returned string is not guaranteed
+ * and can be up to 255 characters.
+ *
+ * @param string $message Message to generate hash from
+ * @return string Hash of the message with appended version parameter
+ */
+ public function hash($message) {
+ return $this->currentVersion . '|' . password_hash($message, PASSWORD_DEFAULT, $this->options);
+ }
+
+ /**
+ * Get the version and hash from a prefixedHash
+ * @param string $prefixedHash
+ * @return null|array Null if the hash is not prefixed, otherwise array('version' => 1, 'hash' => 'foo')
+ */
+ protected function splitHash($prefixedHash) {
+ $explodedString = explode('|', $prefixedHash, 2);
+ if(sizeof($explodedString) === 2) {
+ if((int)$explodedString[0] > 0) {
+ return array('version' => (int)$explodedString[0], 'hash' => $explodedString[1]);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Verify legacy hashes
+ * @param string $message Message to verify
+ * @param string $hash Assumed hash of the message
+ * @param null|string &$newHash Reference will contain the updated hash
+ * @return bool Whether $hash is a valid hash of $message
+ */
+ protected function legacyHashVerify($message, $hash, &$newHash = null) {
+ if(empty($this->legacySalt)) {
+ $this->legacySalt = $this->config->getSystemValue('passwordsalt', '');
+ }
+
+ // Verify whether it matches a legacy PHPass or SHA1 string
+ $hashLength = strlen($hash);
+ if($hashLength === 60 && password_verify($message.$this->legacySalt, $hash) ||
+ $hashLength === 40 && StringUtils::equals($hash, sha1($message))) {
+ $newHash = $this->hash($message);
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Verify V1 hashes
+ * @param string $message Message to verify
+ * @param string $hash Assumed hash of the message
+ * @param null|string &$newHash Reference will contain the updated hash if necessary. Update the existing hash with this one.
+ * @return bool Whether $hash is a valid hash of $message
+ */
+ protected function verifyHashV1($message, $hash, &$newHash = null) {
+ if(password_verify($message, $hash)) {
+ if(password_needs_rehash($hash, PASSWORD_DEFAULT, $this->options)) {
+ $newHash = $this->hash($message);
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $message Message to verify
+ * @param string $hash Assumed hash of the message
+ * @param null|string &$newHash Reference will contain the updated hash if necessary. Update the existing hash with this one.
+ * @return bool Whether $hash is a valid hash of $message
+ */
+ public function verify($message, $hash, &$newHash = null) {
+ $splittedHash = $this->splitHash($hash);
+
+ if(isset($splittedHash['version'])) {
+ switch ($splittedHash['version']) {
+ case 1:
+ return $this->verifyHashV1($message, $splittedHash['hash'], $newHash);
+ }
+ } else {
+ return $this->legacyHashVerify($message, $hash, $newHash);
+ }
+
+
+ return false;
+ }
+
+}
diff --git a/lib/private/server.php b/lib/private/server.php
index 186714740f7..c98f77c6479 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -2,6 +2,7 @@
namespace OC;
+use bantu\IniGetWrapper\IniGetWrapper;
use OC\AppFramework\Http\Request;
use OC\AppFramework\Db\Db;
use OC\AppFramework\Utility\SimpleContainer;
@@ -9,11 +10,12 @@ use OC\Cache\UserCache;
use OC\Diagnostics\NullQueryLogger;
use OC\Diagnostics\EventLogger;
use OC\Diagnostics\QueryLogger;
+use OC\Files\Config\StorageManager;
use OC\Security\CertificateManager;
-use OC\DB\ConnectionWrapper;
use OC\Files\Node\Root;
use OC\Files\View;
use OC\Security\Crypto;
+use OC\Security\Hasher;
use OC\Security\SecureRandom;
use OC\Diagnostics\NullEventLogger;
use OCP\IServerContainer;
@@ -28,19 +30,27 @@ use OC\Tagging\TagMapper;
* TODO: hookup all manager classes
*/
class Server extends SimpleContainer implements IServerContainer {
- function __construct() {
+ /** @var string */
+ private $webRoot;
+
+ /**
+ * @param string $webRoot
+ */
+ function __construct($webRoot) {
+ $this->webRoot = $webRoot;
+
$this->registerService('ContactsManager', function ($c) {
return new ContactsManager();
});
- $this->registerService('Request', function ($c) {
+ $this->registerService('Request', function (Server $c) {
if (isset($c['urlParams'])) {
$urlParams = $c['urlParams'];
} else {
$urlParams = array();
}
- if (\OC::$server->getSession()->exists('requesttoken')) {
- $requestToken = \OC::$server->getSession()->get('requesttoken');
+ if ($c->getSession()->exists('requesttoken')) {
+ $requestToken = $c->getSession()->get('requesttoken');
} else {
$requestToken = false;
}
@@ -77,8 +87,7 @@ class Server extends SimpleContainer implements IServerContainer {
});
$this->registerService('TagManager', function (Server $c) {
$tagMapper = $c->query('TagMapper');
- $user = \OC_User::getUser();
- return new TagManager($tagMapper, $user);
+ return new TagManager($tagMapper, $c->getUserSession());
});
$this->registerService('RootFolder', function (Server $c) {
// TODO: get user and user manager from container as well
@@ -95,8 +104,26 @@ class Server extends SimpleContainer implements IServerContainer {
return new \OC\User\Manager($config);
});
$this->registerService('GroupManager', function (Server $c) {
- $userManager = $c->getUserManager();
- return new \OC\Group\Manager($userManager);
+ $groupManager = new \OC\Group\Manager($this->getUserManager());
+ $groupManager->listen('\OC\Group', 'preCreate', function ($gid) {
+ \OC_Hook::emit('OC_Group', 'pre_createGroup', array('run' => true, 'gid' => $gid));
+ });
+ $groupManager->listen('\OC\Group', 'postCreate', function (\OC\Group\Group $gid) {
+ \OC_Hook::emit('OC_User', 'post_createGroup', array('gid' => $gid->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'preDelete', function (\OC\Group\Group $group) {
+ \OC_Hook::emit('OC_Group', 'pre_deleteGroup', array('run' => true, 'gid' => $group->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'postDelete', function (\OC\Group\Group $group) {
+ \OC_Hook::emit('OC_User', 'post_deleteGroup', array('gid' => $group->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'preAddUser', function (\OC\Group\Group $group, \OC\User\User $user) {
+ \OC_Hook::emit('OC_Group', 'pre_addToGroup', array('run' => true, 'uid' => $user->getUID(), 'gid' => $group->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'postAddUser', function (\OC\Group\Group $group, \OC\User\User $user) {
+ \OC_Hook::emit('OC_Group', 'post_addToGroup', array('uid' => $user->getUID(), 'gid' => $group->getGID()));
+ });
+ return $groupManager;
});
$this->registerService('UserSession', function (Server $c) {
$manager = $c->getUserManager();
@@ -139,8 +166,13 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('NavigationManager', function ($c) {
return new \OC\NavigationManager();
});
- $this->registerService('AllConfig', function ($c) {
- return new \OC\AllConfig();
+ $this->registerService('AllConfig', function (Server $c) {
+ return new \OC\AllConfig(
+ $c->getSystemConfig()
+ );
+ });
+ $this->registerService('SystemConfig', function ($c) {
+ return new \OC\SystemConfig();
});
$this->registerService('AppConfig', function ($c) {
return new \OC\AppConfig(\OC_DB::getConnection());
@@ -197,13 +229,17 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('Crypto', function (Server $c) {
return new Crypto($c->getConfig(), $c->getSecureRandom());
});
+ $this->registerService('Hasher', function (Server $c) {
+ return new Hasher($c->getConfig());
+ });
$this->registerService('DatabaseConnection', function (Server $c) {
$factory = new \OC\DB\ConnectionFactory();
- $type = $c->getConfig()->getSystemValue('dbtype', 'sqlite');
+ $systemConfig = $c->getSystemConfig();
+ $type = $systemConfig->getValue('dbtype', 'sqlite');
if (!$factory->isValidType($type)) {
- throw new \DatabaseException('Invalid database type');
+ throw new \OC\DatabaseException('Invalid database type');
}
- $connectionParams = $factory->createConnectionParams($c->getConfig());
+ $connectionParams = $factory->createConnectionParams($systemConfig);
$connection = $factory->getConnection($type, $connectionParams);
$connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
return $connection;
@@ -213,7 +249,7 @@ class Server extends SimpleContainer implements IServerContainer {
});
$this->registerService('HTTPHelper', function (Server $c) {
$config = $c->getConfig();
- return new HTTPHelper($config);
+ return new HTTPHelper($config, new \OC\Security\CertificateManager($c->getUserSession()->getUser()));
});
$this->registerService('EventLogger', function (Server $c) {
if (defined('DEBUG') and DEBUG) {
@@ -229,10 +265,36 @@ class Server extends SimpleContainer implements IServerContainer {
return new NullQueryLogger();
}
});
- $this->registerService('TempManager', function ($c) {
- /** @var Server $c */
+ $this->registerService('TempManager', function (Server $c) {
return new TempManager(get_temp_dir(), $c->getLogger());
});
+ $this->registerService('AppManager', function(Server $c) {
+ $userSession = $c->getUserSession();
+ $appConfig = $c->getAppConfig();
+ $groupManager = $c->getGroupManager();
+ return new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ });
+ $this->registerService('DateTimeZone', function(Server $c) {
+ return new DateTimeZone(
+ $c->getConfig(),
+ $c->getSession()
+ );
+ });
+ $this->registerService('DateTimeFormatter', function(Server $c) {
+ $language = $c->getConfig()->getUserValue($c->getSession()->get('user_id'), 'core', 'lang', null);
+
+ return new DateTimeFormatter(
+ $c->getDateTimeZone()->getTimeZone(),
+ $c->getL10N('lib', $language)
+ );
+ });
+ $this->registerService('MountConfigManager', function () {
+ $loader = \OC\Files\Filesystem::getLoader();
+ return new \OC\Files\Config\MountProviderCollection($loader);
+ });
+ $this->registerService('IniWrapper', function ($c) {
+ return new IniGetWrapper();
+ });
}
/**
@@ -306,6 +368,7 @@ class Server extends SimpleContainer implements IServerContainer {
} else {
$user = $this->getUserManager()->get($userId);
}
+ \OC\Files\Filesystem::initMountPoints($userId);
$dir = '/' . $userId;
$root = $this->getRootFolder();
$folder = null;
@@ -406,6 +469,15 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
+ * For internal use only
+ *
+ * @return \OC\SystemConfig
+ */
+ function getSystemConfig() {
+ return $this->query('SystemConfig');
+ }
+
+ /**
* Returns the app config manager
*
* @return \OCP\IAppConfig
@@ -530,6 +602,15 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
+ * Returns a Hasher instance
+ *
+ * @return \OCP\Security\IHasher
+ */
+ function getHasher() {
+ return $this->query('Hasher');
+ }
+
+ /**
* Returns an instance of the db facade
*
* @return \OCP\IDb
@@ -603,4 +684,52 @@ class Server extends SimpleContainer implements IServerContainer {
function getTempManager() {
return $this->query('TempManager');
}
+
+ /**
+ * Get the app manager
+ *
+ * @return \OCP\App\IAppManager
+ */
+ function getAppManager() {
+ return $this->query('AppManager');
+ }
+
+ /**
+ * Get the webroot
+ *
+ * @return string
+ */
+ function getWebRoot() {
+ return $this->webRoot;
+ }
+
+ /**
+ * @return \OCP\IDateTimeZone
+ */
+ public function getDateTimeZone() {
+ return $this->query('DateTimeZone');
+ }
+
+ /**
+ * @return \OCP\IDateTimeFormatter
+ */
+ public function getDateTimeFormatter() {
+ return $this->query('DateTimeFormatter');
+ }
+
+ /**
+ * @return \OCP\Files\Config\IMountProviderCollection
+ */
+ function getMountProviderCollection(){
+ return $this->query('MountConfigManager');
+ }
+
+ /**
+ * Get the IniWrapper
+ *
+ * @return IniGetWrapper
+ */
+ public function getIniWrapper() {
+ return $this->query('IniWrapper');
+ }
}
diff --git a/lib/private/setup.php b/lib/private/setup.php
index 1125933c8e9..b9ba8d906c2 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -8,9 +8,6 @@
use OCP\IConfig;
-class DatabaseSetupException extends \OC\HintException {
-}
-
class OC_Setup {
/** @var IConfig */
protected $config;
@@ -91,7 +88,7 @@ class OC_Setup {
)
);
$configuredDatabases = $this->config->getSystemValue('supportedDatabases',
- array('sqlite', 'mysql', 'pgsql', 'oci', 'mssql'));
+ array('sqlite', 'mysql', 'pgsql'));
if(!is_array($configuredDatabases)) {
throw new Exception('Supported databases are not properly configured.');
}
@@ -165,7 +162,7 @@ class OC_Setup {
&& is_array($options['trusted_domains'])) {
$trustedDomains = $options['trusted_domains'];
} else {
- $trustedDomains = array(OC_Request::serverHost());
+ $trustedDomains = array(\OC_Request::getDomainWithoutPort(\OC_Request::serverHost()));
}
if (OC_Util::runningOnWindows()) {
@@ -195,7 +192,7 @@ class OC_Setup {
try {
$dbSetup->initialize($options);
$dbSetup->setupDatabase($username);
- } catch (DatabaseSetupException $e) {
+ } catch (\OC\DatabaseSetupException $e) {
$error[] = array(
'error' => $e->getMessage(),
'hint' => $e->getHint()
@@ -246,13 +243,42 @@ class OC_Setup {
}
/**
+ * @return string Absolute path to htaccess
+ */
+ private function pathToHtaccess() {
+ return OC::$SERVERROOT.'/.htaccess';
+ }
+
+ /**
+ * Checks if the .htaccess contains the current version parameter
+ *
+ * @return bool
+ */
+ private function isCurrentHtaccess() {
+ $version = \OC_Util::getVersion();
+ unset($version[3]);
+
+ return !strpos(
+ file_get_contents($this->pathToHtaccess()),
+ 'Version: '.implode('.', $version)
+ ) === false;
+ }
+
+ /**
* Append the correct ErrorDocument path for Apache hosts
+ *
+ * @throws \OC\HintException If .htaccess does not include the current version
*/
public static function updateHtaccess() {
+ $setupHelper = new OC_Setup(\OC::$server->getConfig());
+ if(!$setupHelper->isCurrentHtaccess()) {
+ throw new \OC\HintException('.htaccess file has the wrong version. Please upload the correct version.');
+ }
+
$content = "\n";
$content.= "ErrorDocument 403 ".OC::$WEBROOT."/core/templates/403.php\n";//custom 403 error page
$content.= "ErrorDocument 404 ".OC::$WEBROOT."/core/templates/404.php";//custom 404 error page
- @file_put_contents(OC::$SERVERROOT.'/.htaccess', $content, FILE_APPEND); //suppress errors in case we don't have permissions for it
+ @file_put_contents($setupHelper->pathToHtaccess(), $content, FILE_APPEND); //suppress errors in case we don't have permissions for it
}
public static function protectDataDirectory() {
diff --git a/lib/private/setup/mssql.php b/lib/private/setup/mssql.php
index b8329f99079..5143545b76f 100644
--- a/lib/private/setup/mssql.php
+++ b/lib/private/setup/mssql.php
@@ -17,7 +17,7 @@ class MSSQL extends AbstractDatabase {
} else {
$entry = '';
}
- throw new \DatabaseSetupException($this->trans->t('MS SQL username and/or password not valid: %s', array($entry)),
+ throw new \OC\DatabaseSetupException($this->trans->t('MS SQL username and/or password not valid: %s', array($entry)),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
diff --git a/lib/private/setup/mysql.php b/lib/private/setup/mysql.php
index 5558a2d1e51..8f8d86d388c 100644
--- a/lib/private/setup/mysql.php
+++ b/lib/private/setup/mysql.php
@@ -9,7 +9,7 @@ class MySQL extends AbstractDatabase {
//check if the database user has admin right
$connection = @mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword);
if(!$connection) {
- throw new \DatabaseSetupException($this->trans->t('MySQL/MariaDB username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('MySQL/MariaDB username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
//user already specified in config
@@ -96,13 +96,13 @@ class MySQL extends AbstractDatabase {
$query = "CREATE USER '$name'@'localhost' IDENTIFIED BY '$password'";
$result = mysql_query($query, $connection);
if (!$result) {
- throw new \DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'localhost' exists already.", array($name)),
+ throw new \OC\DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'localhost' exists already.", array($name)),
$this->trans->t("Drop this user from MySQL/MariaDB", array($name)));
}
$query = "CREATE USER '$name'@'%' IDENTIFIED BY '$password'";
$result = mysql_query($query, $connection);
if (!$result) {
- throw new \DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'%%' already exists", array($name)),
+ throw new \OC\DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'%%' already exists", array($name)),
$this->trans->t("Drop this user from MySQL/MariaDB."));
}
}
diff --git a/lib/private/setup/oci.php b/lib/private/setup/oci.php
index 23b5232438a..b75b658bae2 100644
--- a/lib/private/setup/oci.php
+++ b/lib/private/setup/oci.php
@@ -45,14 +45,14 @@ class OCI extends AbstractDatabase {
if(!$connection) {
$errorMessage = $this->getLastError();
if ($errorMessage) {
- throw new \DatabaseSetupException($this->trans->t('Oracle connection could not be established'),
+ throw new \OC\DatabaseSetupException($this->trans->t('Oracle connection could not be established'),
$errorMessage.' Check environment: ORACLE_HOME='.getenv('ORACLE_HOME')
.' ORACLE_SID='.getenv('ORACLE_SID')
.' LD_LIBRARY_PATH='.getenv('LD_LIBRARY_PATH')
.' NLS_LANG='.getenv('NLS_LANG')
.' tnsnames.ora is '.(is_readable(getenv('ORACLE_HOME').'/network/admin/tnsnames.ora')?'':'not ').'readable');
}
- throw new \DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
'Check environment: ORACLE_HOME='.getenv('ORACLE_HOME')
.' ORACLE_SID='.getenv('ORACLE_SID')
.' LD_LIBRARY_PATH='.getenv('LD_LIBRARY_PATH')
@@ -124,7 +124,7 @@ class OCI extends AbstractDatabase {
}
$connection = @oci_connect($this->dbuser, $this->dbpassword, $easy_connect_string);
if(!$connection) {
- throw new \DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
$query = "SELECT count(*) FROM user_tables WHERE table_name = :un";
diff --git a/lib/private/setup/postgresql.php b/lib/private/setup/postgresql.php
index 4d0c9b52a4d..3777d1620bc 100644
--- a/lib/private/setup/postgresql.php
+++ b/lib/private/setup/postgresql.php
@@ -27,7 +27,7 @@ class PostgreSQL extends AbstractDatabase {
$connection = @pg_connect($connection_string);
if(!$connection)
- throw new \DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
$e_user = pg_escape_string($this->dbuser);
@@ -80,7 +80,7 @@ class PostgreSQL extends AbstractDatabase {
$connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' port='$port' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
- throw new \DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
$query = "select count(*) FROM pg_class WHERE relname='".$this->tableprefix."users' limit 1";
diff --git a/lib/private/share/constants.php b/lib/private/share/constants.php
index 798327cc154..6c9d9431605 100644
--- a/lib/private/share/constants.php
+++ b/lib/private/share/constants.php
@@ -34,8 +34,12 @@ class Constants {
const FORMAT_STATUSES = -2;
const FORMAT_SOURCES = -3; // ToDo Check if it is still in use otherwise remove it
+ const RESPONSE_FORMAT = 'json'; // default resonse format for ocs calls
+
const TOKEN_LENGTH = 15; // old (oc7) length is 32, keep token length in db at least that for compatibility
+ const BASE_PATH_TO_SHARE_API = '/ocs/v1.php/cloud/shares';
+
protected static $shareTypeUserAndGroups = -1;
protected static $shareTypeGroupUserUnique = 2;
protected static $backends = array();
diff --git a/lib/private/share/helper.php b/lib/private/share/helper.php
index 2418535c9d5..5b27f0e6f50 100644
--- a/lib/private/share/helper.php
+++ b/lib/private/share/helper.php
@@ -38,7 +38,7 @@ class Helper extends \OC\Share\Constants {
public static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) {
// FIXME: $uidOwner and $groupParent seems to be unused
$backend = \OC\Share\Share::getBackend($itemType);
- if ($shareType == self::SHARE_TYPE_LINK) {
+ if ($shareType === self::SHARE_TYPE_LINK || $shareType === self::SHARE_TYPE_REMOTE) {
if (isset($suggestedTarget)) {
return $suggestedTarget;
}
@@ -96,12 +96,12 @@ class Helper extends \OC\Share\Constants {
// finding and deleting the reshares by a single user of a group share
if (count($ids) == 1 && isset($uidOwner)) {
$query = \OC_DB::prepare('SELECT `id`, `share_with`, `item_type`, `share_type`, `item_target`, `file_target`, `parent`'
- .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?');
- $result = $query->execute(array($uidOwner));
+ .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ? AND `share_type` != ?');
+ $result = $query->execute(array($uidOwner, self::$shareTypeGroupUserUnique));
} else {
$query = \OC_DB::prepare('SELECT `id`, `share_with`, `item_type`, `share_type`, `item_target`, `file_target`, `parent`, `uid_owner`'
- .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
- $result = $query->execute();
+ .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `share_type` != ?');
+ $result = $query->execute(array(self::$shareTypeGroupUserUnique));
}
// Reset parents array, only go through loop again if items are found
$parents = array();
@@ -189,20 +189,23 @@ class Helper extends \OC\Share\Constants {
public static function calculateExpireDate($defaultExpireSettings, $creationTime, $userExpireDate = null) {
$expires = false;
+ $defaultExpires = null;
if (!empty($defaultExpireSettings['defaultExpireDateSet'])) {
- $expires = $creationTime + $defaultExpireSettings['expireAfterDays'] * 86400;
+ $defaultExpires = $creationTime + $defaultExpireSettings['expireAfterDays'] * 86400;
}
if (isset($userExpireDate)) {
// if the admin decided to enforce the default expire date then we only take
// the user defined expire date of it is before the default expire date
- if ($expires && !empty($defaultExpireSettings['enforceExpireDate'])) {
- $expires = min($userExpireDate, $expires);
+ if ($defaultExpires && !empty($defaultExpireSettings['enforceExpireDate'])) {
+ $expires = min($userExpireDate, $defaultExpires);
} else {
$expires = $userExpireDate;
}
+ } else if ($defaultExpires && !empty($defaultExpireSettings['enforceExpireDate'])) {
+ $expires = $defaultExpires;
}
return $expires;
diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php
index 2f704fb2b3c..342d3d5057a 100644
--- a/lib/private/share/mailnotifications.php
+++ b/lib/private/share/mailnotifications.php
@@ -79,7 +79,7 @@ class MailNotifications {
foreach ($recipientList as $recipient) {
$recipientDisplayName = \OCP\User::getDisplayName($recipient);
- $to = \OC_Preferences::getValue($recipient, 'settings', 'email', '');
+ $to = \OC::$server->getConfig()->getUserValue($recipient, 'settings', 'email', '');
if ($to === '') {
$noMail[] = $recipientDisplayName;
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index b7b05dab8ef..f61f65f35a7 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -247,7 +247,7 @@ class Share extends \OC\Share\Constants {
* @return mixed Return depends on format
*/
public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE,
- $parameters = null, $limit = -1, $includeCollections = false) {
+ $parameters = null, $limit = -1, $includeCollections = false) {
return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
$parameters, $limit, $includeCollections);
}
@@ -263,7 +263,7 @@ class Share extends \OC\Share\Constants {
* @return mixed Return depends on format
*/
public static function getItemsSharedWithUser($itemType, $user, $format = self::FORMAT_NONE,
- $parameters = null, $limit = -1, $includeCollections = false) {
+ $parameters = null, $limit = -1, $includeCollections = false) {
return self::getItems($itemType, null, self::$shareTypeUserAndGroups, $user, null, $format,
$parameters, $limit, $includeCollections);
}
@@ -278,7 +278,7 @@ class Share extends \OC\Share\Constants {
* @return mixed Return depends on format
*/
public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE,
- $parameters = null, $includeCollections = false) {
+ $parameters = null, $includeCollections = false) {
return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
$parameters, 1, $includeCollections);
}
@@ -287,11 +287,12 @@ class Share extends \OC\Share\Constants {
* Get the item of item type shared with a given user by source
* @param string $itemType
* @param string $itemSource
- * @param string $user User user to whom the item was shared
+ * @param string $user User to whom the item was shared
+ * @param string $owner Owner of the share
+ * @param int $shareType only look for a specific share type
* @return array Return list of items with file_target, permissions and expiration
*/
- public static function getItemSharedWithUser($itemType, $itemSource, $user) {
-
+ public static function getItemSharedWithUser($itemType, $itemSource, $user, $owner = null, $shareType = null) {
$shares = array();
$fileDependend = false;
@@ -314,6 +315,16 @@ class Share extends \OC\Share\Constants {
$arguments[] = $user;
}
+ if ($shareType !== null) {
+ $where .= ' AND `share_type` = ? ';
+ $arguments[] = $shareType;
+ }
+
+ if ($owner !== null) {
+ $where .= ' AND `uid_owner` = ? ';
+ $arguments[] = $owner;
+ }
+
$query = \OC_DB::prepare('SELECT ' . $select . ' FROM `*PREFIX*share` '. $where);
$result = \OC_DB::executeAudited($query, $arguments);
@@ -327,12 +338,12 @@ class Share extends \OC\Share\Constants {
$groups = \OC_Group::getUserGroups($user);
$query = \OC_DB::prepare(
- 'SELECT *
+ 'SELECT *
FROM
`*PREFIX*share`
WHERE
`' . $column . '` = ? AND `item_type` = ? AND `share_with` in (?)'
- );
+ );
$result = \OC_DB::executeAudited($query, array($itemSource, $itemType, implode(',', $groups)));
@@ -356,7 +367,7 @@ class Share extends \OC\Share\Constants {
* @return array
*/
public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE,
- $parameters = null, $includeCollections = false, $shareWith = null) {
+ $parameters = null, $includeCollections = false, $shareWith = null) {
$shareWith = ($shareWith === null) ? \OC_User::getUser() : $shareWith;
return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, $format,
$parameters, 1, $includeCollections, true);
@@ -434,7 +445,7 @@ class Share extends \OC\Share\Constants {
* @return mixed Return depends on format
*/
public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null,
- $limit = -1, $includeCollections = false) {
+ $limit = -1, $includeCollections = false) {
return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format,
$parameters, $limit, $includeCollections);
}
@@ -449,7 +460,7 @@ class Share extends \OC\Share\Constants {
* @return mixed Return depends on format
*/
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE,
- $parameters = null, $includeCollections = false) {
+ $parameters = null, $includeCollections = false) {
return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format,
$parameters, -1, $includeCollections);
}
@@ -492,9 +503,19 @@ class Share extends \OC\Share\Constants {
* @throws \Exception
*/
public static function shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions, $itemSourceName = null, \DateTime $expirationDate = null) {
+
+ $backend = self::getBackend($itemType);
+ $l = \OC::$server->getL10N('lib');
+
+ if ($backend->isShareTypeAllowed($shareType) === false) {
+ $message = 'Sharing %s failed, because the backend does not allow shares from type %i';
+ $message_t = $l->t('Sharing %s failed, because the backend does not allow shares from type %i', array($itemSourceName, $shareType));
+ \OC_Log::write('OCP\Share', sprintf($message, $itemSourceName, $shareType), \OC_Log::ERROR);
+ throw new \Exception($message_t);
+ }
+
$uidOwner = \OC_User::getUser();
$shareWithinGroupOnly = self::shareWithGroupMembersOnly();
- $l = \OC::$server->getL10N('lib');
if (is_null($itemSourceName)) {
$itemSourceName = $itemSource;
@@ -536,7 +557,7 @@ class Share extends \OC\Share\Constants {
// single file shares should never have delete permissions
if ($itemType === 'file') {
- $permissions = (int)$permissions & ~\OCP\PERMISSION_DELETE;
+ $permissions = (int)$permissions & ~\OCP\Constants::PERMISSION_DELETE;
}
// Verify share type and sharing conditions are met
@@ -627,9 +648,7 @@ class Share extends \OC\Share\Constants {
// Generate hash of password - same method as user passwords
if (!empty($shareWith)) {
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new \PasswordHash(8, $forcePortable);
- $shareWith = $hasher->HashPassword($shareWith.\OC_Config::getValue('passwordsalt', ''));
+ $shareWith = \OC::$server->getHasher()->hash($shareWith);
} else {
// reuse the already set password, but only if we change permissions
// otherwise the user disabled the password protection
@@ -646,8 +665,8 @@ class Share extends \OC\Share\Constants {
}
if ($updateExistingShare === false &&
- self::isDefaultExpireDateEnabled() &&
- empty($expirationDate)) {
+ self::isDefaultExpireDateEnabled() &&
+ empty($expirationDate)) {
$expirationDate = Helper::calcExpireDate();
}
@@ -672,6 +691,25 @@ class Share extends \OC\Share\Constants {
$message_t = $l->t('Sharing %s failed, because sharing with links is not allowed', array($itemSourceName));
\OC_Log::write('OCP\Share', sprintf($message, $itemSourceName), \OC_Log::ERROR);
throw new \Exception($message_t);
+ } else if ($shareType === self::SHARE_TYPE_REMOTE) {
+ $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(self::TOKEN_LENGTH, \OCP\Security\ISecureRandom::CHAR_LOWER . \OCP\Security\ISecureRandom::CHAR_UPPER .
+ \OCP\Security\ISecureRandom::CHAR_DIGITS);
+
+ $shareId = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token, $itemSourceName);
+
+ $send = false;
+ if ($shareId) {
+ $send = self::sendRemoteShare($token, $shareWith, $itemSourceName, $shareId, $uidOwner);
+ }
+
+ if ($send === false) {
+ $currentUser = \OC::$server->getUserSession()->getUser()->getUID();
+ self::unshare($itemType, $itemSource, $shareType, $shareWith, $currentUser);
+ $message_t = $l->t('Sharing %s failed, could not find %s, maybe the server is currently unreachable.', array($itemSourceName, $shareWith));
+ throw new \Exception($message_t);
+ }
+
+ return $send;
} else {
// Future share types need to include their own conditions
$message = 'Share type %s is not valid for %s';
@@ -681,7 +719,9 @@ class Share extends \OC\Share\Constants {
}
// Put the item into the database
- return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, null, $itemSourceName, $expirationDate);
+ $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, null, $itemSourceName, $expirationDate);
+
+ return $result ? true : false;
}
/**
@@ -690,25 +730,26 @@ class Share extends \OC\Share\Constants {
* @param string $itemSource
* @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
* @param string $shareWith User or group the item is being shared with
+ * @param string $owner owner of the share, if null the current user is used
* @return boolean true on success or false on failure
*/
- public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
+ public static function unshare($itemType, $itemSource, $shareType, $shareWith, $owner = null) {
// check if it is a valid itemType
self::getBackend($itemType);
- $items = self::getItemSharedWithUser($itemType, $itemSource, $shareWith);
+ $items = self::getItemSharedWithUser($itemType, $itemSource, $shareWith, $owner, $shareType);
$toDelete = array();
$newParent = null;
- $currentUser = \OC_User::getUser();
+ $currentUser = $owner ? $owner : \OC_User::getUser();
foreach ($items as $item) {
// delete the item with the expected share_type and owner
if ((int)$item['share_type'] === (int)$shareType && $item['uid_owner'] === $currentUser) {
$toDelete = $item;
- // if there is more then one result we don't have to delete the children
- // but update their parent. For group shares the new parent should always be
- // the original group share and not the db entry with the unique name
+ // if there is more then one result we don't have to delete the children
+ // but update their parent. For group shares the new parent should always be
+ // the original group share and not the db entry with the unique name
} else if ((int)$item['share_type'] === self::$shareTypeGroupUserUnique) {
$newParent = $item['parent'];
} else {
@@ -784,7 +825,7 @@ class Share extends \OC\Share\Constants {
$itemUnshared = false;
foreach ($shares as $share) {
if ((int)$share['share_type'] === \OCP\Share::SHARE_TYPE_USER &&
- $share['share_with'] === $uid) {
+ $share['share_with'] === $uid) {
$deletedShares = Helper::delete($share['id']);
$shareTmp = array(
'id' => $share['id'],
@@ -804,16 +845,16 @@ class Share extends \OC\Share\Constants {
$groupShare = $share;
}
} elseif ((int)$share['share_type'] === self::$shareTypeGroupUserUnique &&
- $share['share_with'] === $uid) {
+ $share['share_with'] === $uid) {
$uniqueGroupShare = $share;
}
}
if (!$itemUnshared && isset($groupShare) && !isset($uniqueGroupShare)) {
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share`'
- .' (`item_type`, `item_source`, `item_target`, `parent`, `share_type`,'
- .' `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`)'
- .' VALUES (?,?,?,?,?,?,?,?,?,?,?)');
+ .' (`item_type`, `item_source`, `item_target`, `parent`, `share_type`,'
+ .' `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`)'
+ .' VALUES (?,?,?,?,?,?,?,?,?,?,?)');
$query->execute(array($groupShare['item_type'], $groupShare['item_source'], $groupShare['item_target'],
$groupShare['id'], self::$shareTypeGroupUserUnique,
\OC_User::getUser(), $groupShare['uid_owner'], 0, $groupShare['stime'], $groupShare['file_source'],
@@ -824,7 +865,7 @@ class Share extends \OC\Share\Constants {
'itemTarget' => $groupShare['item_target'],
'itemType' => $groupShare['item_type'],
'shareType' => (int)$groupShare['share_type'],
- );
+ );
if (isset($groupShare['file_target'])) {
$shareTmp['fileTarget'] = $groupShare['file_target'];
}
@@ -839,7 +880,7 @@ class Share extends \OC\Share\Constants {
'itemTarget' => $uniqueGroupShare['item_target'],
'itemType' => $uniqueGroupShare['item_type'],
'shareType' => (int)$uniqueGroupShare['share_type'],
- );
+ );
if (isset($uniqueGroupShare['file_target'])) {
$shareTmp['fileTarget'] = $uniqueGroupShare['file_target'];
}
@@ -849,7 +890,7 @@ class Share extends \OC\Share\Constants {
if ($itemUnshared) {
\OC_Hook::emit('OCP\Share', 'post_unshareFromSelf',
- array('unsharedItems' => $listOfUnsharedItems, 'itemType' => $itemType));
+ array('unsharedItems' => $listOfUnsharedItems, 'itemType' => $itemType));
}
return $itemUnshared;
@@ -867,7 +908,7 @@ class Share extends \OC\Share\Constants {
$status = $status ? 1 : 0;
$query = \OC_DB::prepare(
- 'UPDATE `*PREFIX*share`
+ 'UPDATE `*PREFIX*share`
SET `mail_send` = ?
WHERE `item_type` = ? AND `item_source` = ? AND `share_type` = ? AND `share_with` = ?');
@@ -920,7 +961,7 @@ class Share extends \OC\Share\Constants {
// Check if permissions were removed
if ($item['permissions'] & ~$permissions) {
// If share permission is removed all reshares must be deleted
- if (($item['permissions'] & \OCP\PERMISSION_SHARE) && (~$permissions & \OCP\PERMISSION_SHARE)) {
+ if (($item['permissions'] & \OCP\Constants::PERMISSION_SHARE) && (~$permissions & \OCP\Constants::PERMISSION_SHARE)) {
Helper::delete($item['id'], true);
} else {
$ids = array();
@@ -1114,6 +1155,10 @@ class Share extends \OC\Share\Constants {
$deletedShares[] = $hookParams;
$hookParams['deletedShares'] = $deletedShares;
\OC_Hook::emit('OCP\Share', 'post_unshare', $hookParams);
+ if ((int)$item['share_type'] === \OCP\Share::SHARE_TYPE_REMOTE && \OC::$server->getUserSession()->getUser()) {
+ $urlParts = explode('@', $item['share_with'], 2);
+ self::sendRemoteUnshare($urlParts[1], $item['id'], $item['token']);
+ }
}
/**
@@ -1192,14 +1237,14 @@ class Share extends \OC\Share\Constants {
}
/**
- * Get the owners of items shared with a user.
- *
- * @param string $user The user the items are shared with.
- * @param string $type The type of the items shared with the user.
- * @param boolean $includeCollections Include collection item types (optional)
- * @param boolean $includeOwner include owner in the list of users the item is shared with (optional)
- * @return array
- */
+ * Get the owners of items shared with a user.
+ *
+ * @param string $user The user the items are shared with.
+ * @param string $type The type of the items shared with the user.
+ * @param boolean $includeCollections Include collection item types (optional)
+ * @param boolean $includeOwner include owner in the list of users the item is shared with (optional)
+ * @return array
+ */
public static function getSharedItemsOwners($user, $type, $includeCollections = false, $includeOwner = false) {
// First, we find out if $type is part of a collection (and if that collection is part of
// another one and so on).
@@ -1261,8 +1306,8 @@ class Share extends \OC\Share\Constants {
*
*/
public static function getItems($itemType, $item = null, $shareType = null, $shareWith = null,
- $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1,
- $includeCollections = false, $itemShareWithBySource = false, $checkExpireDate = true) {
+ $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1,
+ $includeCollections = false, $itemShareWithBySource = false, $checkExpireDate = true) {
if (!self::isEnabled()) {
return array();
}
@@ -1308,14 +1353,18 @@ class Share extends \OC\Share\Constants {
if (isset($shareType)) {
// Include all user and group items
if ($shareType == self::$shareTypeUserAndGroups && isset($shareWith)) {
- $where .= ' AND `share_type` IN (?,?,?)';
+ $where .= ' AND ((`share_type` in (?, ?) AND `share_with` = ?) ';
$queryArgs[] = self::SHARE_TYPE_USER;
- $queryArgs[] = self::SHARE_TYPE_GROUP;
$queryArgs[] = self::$shareTypeGroupUserUnique;
- $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith));
- $placeholders = join(',', array_fill(0, count($userAndGroups), '?'));
- $where .= ' AND `share_with` IN ('.$placeholders.')';
- $queryArgs = array_merge($queryArgs, $userAndGroups);
+ $queryArgs[] = $shareWith;
+ $groups = \OC_Group::getUserGroups($shareWith);
+ if (!empty($groups)) {
+ $placeholders = join(',', array_fill(0, count($groups), '?'));
+ $where .= ' OR (`share_type` = ? AND `share_with` IN ('.$placeholders.')) ';
+ $queryArgs[] = self::SHARE_TYPE_GROUP;
+ $queryArgs = array_merge($queryArgs, $groups);
+ }
+ $where .= ')';
// Don't include own group shares
$where .= ' AND `uid_owner` != ?';
$queryArgs[] = $shareWith;
@@ -1445,8 +1494,8 @@ class Share extends \OC\Share\Constants {
}
// Switch ids if sharing permission is granted on only
// one share to ensure correct parent is used if resharing
- if (~(int)$items[$id]['permissions'] & \OCP\PERMISSION_SHARE
- && (int)$row['permissions'] & \OCP\PERMISSION_SHARE) {
+ if (~(int)$items[$id]['permissions'] & \OCP\Constants::PERMISSION_SHARE
+ && (int)$row['permissions'] & \OCP\Constants::PERMISSION_SHARE) {
$items[$row['id']] = $items[$id];
$switchedItems[$id] = $row['id'];
unset($items[$id]);
@@ -1467,8 +1516,8 @@ class Share extends \OC\Share\Constants {
$parentResult = $query->execute(array($row['parent']));
if (\OC_DB::isError($result)) {
\OC_Log::write('OCP\Share', 'Can\'t select parent: ' .
- \OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where,
- \OC_Log::ERROR);
+ \OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where,
+ \OC_Log::ERROR);
} else {
$parentRow = $parentResult->fetchRow();
$tmpPath = $parentRow['file_target'];
@@ -1503,11 +1552,14 @@ class Share extends \OC\Share\Constants {
}
// Check if resharing is allowed, if not remove share permission
if (isset($row['permissions']) && (!self::isResharingAllowed() | \OC_Util::isSharingDisabledForUser())) {
- $row['permissions'] &= ~\OCP\PERMISSION_SHARE;
+ $row['permissions'] &= ~\OCP\Constants::PERMISSION_SHARE;
}
// Add display names to result
- if ( isset($row['share_with']) && $row['share_with'] != '') {
+ if ( isset($row['share_with']) && $row['share_with'] != '' &&
+ isset($row['share_with']) && $row['share_type'] === self::SHARE_TYPE_USER) {
$row['share_with_displayname'] = \OCP\User::getDisplayName($row['share_with']);
+ } else {
+ $row['share_with_displayname'] = $row['share_with'];
}
if ( isset($row['uid_owner']) && $row['uid_owner'] != '') {
$row['displayname_owner'] = \OCP\User::getDisplayName($row['uid_owner']);
@@ -1618,7 +1670,7 @@ class Share extends \OC\Share\Constants {
// Need to find a solution which works for all back-ends
$collectionItems = array();
$collectionBackend = self::getBackend('folder');
- $sharedParents = $collectionBackend->getParents($item, $shareWith);
+ $sharedParents = $collectionBackend->getParents($item, $shareWith, $uidOwner);
foreach ($sharedParents as $parent) {
$collectionItems[] = $parent;
}
@@ -1651,7 +1703,7 @@ class Share extends \OC\Share\Constants {
// only group shares if they already point to the same target, otherwise the file where shared
// before grouping of shares was added. In this case we don't group them toi avoid confusions
if (( $fileSharing && $item['file_source'] === $r['file_source'] && $item['file_target'] === $r['file_target']) ||
- (!$fileSharing && $item['item_source'] === $r['item_source'] && $item['item_target'] === $r['item_target'])) {
+ (!$fileSharing && $item['item_source'] === $r['item_source'] && $item['item_target'] === $r['item_target'])) {
// add the first item to the list of grouped shares
if (!isset($result[$key]['grouped'])) {
$result[$key]['grouped'][] = $result[$key];
@@ -1672,7 +1724,7 @@ class Share extends \OC\Share\Constants {
return $result;
}
-/**
+ /**
* Put shared item into the database
* @param string $itemType Item type
* @param string $itemSource Item source
@@ -1685,10 +1737,10 @@ class Share extends \OC\Share\Constants {
* @param string $itemSourceName name of the source item (optional)
* @param \DateTime $expirationDate (optional)
* @throws \Exception
- * @return boolean Returns true on success or false on failure
+ * @return mixed id of the new share or false
*/
private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
- $permissions, $parentFolder = null, $token = null, $itemSourceName = null, \DateTime $expirationDate = null) {
+ $permissions, $parentFolder = null, $token = null, $itemSourceName = null, \DateTime $expirationDate = null) {
$queriesToExecute = array();
$suggestedItemTarget = null;
@@ -1713,7 +1765,7 @@ class Share extends \OC\Share\Constants {
unset($users[array_search(\OCP\User::getUser(), $users)]);
}
$groupItemTarget = Helper::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'],
- $uidOwner, $suggestedItemTarget);
+ $uidOwner, $suggestedItemTarget);
$groupFileTarget = $filePath;
// add group share to table and remember the id as parent
@@ -1736,7 +1788,7 @@ class Share extends \OC\Share\Constants {
} else {
$users = array($shareWith);
$itemTarget = Helper::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
- $suggestedItemTarget);
+ $suggestedItemTarget);
}
$run = true;
@@ -1812,7 +1864,7 @@ class Share extends \OC\Share\Constants {
// do we also need a file target
if (isset($fileSource)) {
$fileTarget = Helper::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $user,
- $uidOwner, $suggestedFileTarget, $parent);
+ $uidOwner, $suggestedFileTarget, $parent);
} else {
$fileTarget = null;
}
@@ -1823,25 +1875,26 @@ class Share extends \OC\Share\Constants {
}
$queriesToExecute[] = array(
- 'itemType' => $itemType,
- 'itemSource' => $itemSource,
- 'itemTarget' => $itemTarget,
- 'shareType' => $shareType,
- 'shareWith' => $user,
- 'uidOwner' => $uidOwner,
- 'permissions' => $permissions,
- 'shareTime' => time(),
- 'fileSource' => $fileSource,
- 'fileTarget' => $fileTarget,
- 'token' => $token,
- 'parent' => $parent,
- 'expiration' => $expirationDate,
- );
+ 'itemType' => $itemType,
+ 'itemSource' => $itemSource,
+ 'itemTarget' => $itemTarget,
+ 'shareType' => $shareType,
+ 'shareWith' => $user,
+ 'uidOwner' => $uidOwner,
+ 'permissions' => $permissions,
+ 'shareTime' => time(),
+ 'fileSource' => $fileSource,
+ 'fileTarget' => $fileTarget,
+ 'token' => $token,
+ 'parent' => $parent,
+ 'expiration' => $expirationDate,
+ );
}
+ $id = false;
if ($isGroupShare) {
- self::insertShare($queriesToExecute['groupShare']);
+ $id = self::insertShare($queriesToExecute['groupShare']);
// Save this id, any extra rows for this group share will need to reference it
$parent = \OC_DB::insertid('*PREFIX*share');
unset($queriesToExecute['groupShare']);
@@ -1849,7 +1902,7 @@ class Share extends \OC\Share\Constants {
foreach ($queriesToExecute as $shareQuery) {
$shareQuery['parent'] = $parent;
- self::insertShare($shareQuery);
+ $id = self::insertShare($shareQuery);
}
$postHookData = array(
@@ -1872,7 +1925,7 @@ class Share extends \OC\Share\Constants {
\OC_Hook::emit('OCP\Share', 'post_shared', $postHookData);
- return true;
+ return $id ? $id : false;
}
private static function checkReshare($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $itemSourceName, $expirationDate) {
@@ -1895,7 +1948,7 @@ class Share extends \OC\Share\Constants {
}
// Check if share permissions is granted
- if (self::isResharingAllowed() && (int)$checkReshare['permissions'] & \OCP\PERMISSION_SHARE) {
+ if (self::isResharingAllowed() && (int)$checkReshare['permissions'] & \OCP\Constants::PERMISSION_SHARE) {
if (~(int)$checkReshare['permissions'] & $permissions) {
$message = 'Sharing %s failed, because the permissions exceed permissions granted to %s';
$message_t = $l->t('Sharing %s failed, because the permissions exceed permissions granted to %s', array($itemSourceName, $uidOwner));
@@ -1966,6 +2019,11 @@ class Share extends \OC\Share\Constants {
return $result;
}
+ /**
+ *
+ * @param array $shareData
+ * @return mixed false in case of a failure or the id of the new share
+ */
private static function insertShare(array $shareData)
{
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` ('
@@ -1985,7 +2043,30 @@ class Share extends \OC\Share\Constants {
$query->bindValue(11, $shareData['token']);
$query->bindValue(12, $shareData['parent']);
$query->bindValue(13, $shareData['expiration'], 'datetime');
- $query->execute();
+ $result = $query->execute();
+
+ $id = false;
+ if ($result) {
+ $id = \OC::$server->getDatabaseConnection()->lastInsertId();
+ // Fallback, if lastInterId() doesn't work we need to perform a select
+ // to get the ID (seems to happen sometimes on Oracle)
+ if (!$id) {
+ $getId = \OC_DB::prepare('
+ SELECT `id`
+ FROM`*PREFIX*share`
+ WHERE `uid_owner` = ? AND `item_target` = ? AND `item_source` = ? AND `stime` = ?
+ ');
+ $r = $getId->execute(array($shareData['uidOwner'], $shareData['itemTarget'], $shareData['itemSource'], $shareData['shareTime']));
+ if ($r) {
+ $row = $r->fetchRow();
+ $id = $row['id'];
+ }
+ }
+
+ }
+
+ return $id;
+
}
/**
* Delete all shares with type SHARE_TYPE_LINK
@@ -2047,19 +2128,19 @@ class Share extends \OC\Share\Constants {
if (isset($uidOwner)) {
if ($fileDependent) {
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `*PREFIX*share`.`parent`,'
- . ' `share_type`, `share_with`, `file_source`, `file_target`, `path`, `*PREFIX*share`.`permissions`, `stime`,'
- . ' `expiration`, `token`, `storage`, `mail_send`, `uid_owner`';
+ . ' `share_type`, `share_with`, `file_source`, `file_target`, `path`, `*PREFIX*share`.`permissions`, `stime`,'
+ . ' `expiration`, `token`, `storage`, `mail_send`, `uid_owner`';
} else {
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `*PREFIX*share`.`permissions`,'
- . ' `stime`, `file_source`, `expiration`, `token`, `mail_send`, `uid_owner`';
+ . ' `stime`, `file_source`, `expiration`, `token`, `mail_send`, `uid_owner`';
}
} else {
if ($fileDependent) {
if ($format == \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT) {
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `*PREFIX*share`.`parent`, `uid_owner`, '
- . '`share_type`, `share_with`, `file_source`, `path`, `file_target`, `stime`, '
- . '`*PREFIX*share`.`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
- . '`name`, `mtime`, `mimetype`, `mimepart`, `size`, `unencrypted_size`, `encrypted`, `etag`, `mail_send`';
+ . '`share_type`, `share_with`, `file_source`, `path`, `file_target`, `stime`, '
+ . '`*PREFIX*share`.`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
+ . '`name`, `mtime`, `mimetype`, `mimepart`, `size`, `unencrypted_size`, `encrypted`, `etag`, `mail_send`';
} else {
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`,
`*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`,
@@ -2134,6 +2215,99 @@ class Share extends \OC\Share\Constants {
}
/**
+ * remove protocol from URL
+ *
+ * @param string $url
+ * @return string
+ */
+ private static function removeProtocolFromUrl($url) {
+ if (strpos($url, 'https://') === 0) {
+ return substr($url, strlen('https://'));
+ } else if (strpos($url, 'http://') === 0) {
+ return substr($url, strlen('http://'));
+ }
+
+ return $url;
+ }
+
+ /**
+ * try http post first with https and then with http as a fallback
+ *
+ * @param string $url
+ * @param array $fields post parameters
+ * @return bool
+ */
+ private static function tryHttpPost($url, $fields) {
+ $protocol = 'https://';
+ $success = false;
+ $try = 0;
+ while ($success === false && $try < 2) {
+ $result = \OC::$server->getHTTPHelper()->post($protocol . $url, $fields);
+ $success = $result['success'];
+ $try++;
+ $protocol = 'http://';
+ }
+
+ return $result;
+ }
+
+ /**
+ * send server-to-server share to remote server
+ *
+ * @param string $token
+ * @param string $shareWith
+ * @param string $name
+ * @param int $remote_id
+ * @param string $owner
+ * @return bool
+ */
+ private static function sendRemoteShare($token, $shareWith, $name, $remote_id, $owner) {
+
+ list($user, $remote) = explode('@', $shareWith, 2);
+
+ if ($user && $remote) {
+ $url = $remote . self::BASE_PATH_TO_SHARE_API . '?format=' . self::RESPONSE_FORMAT;
+
+ $local = \OC::$server->getURLGenerator()->getAbsoluteURL('');
+
+ $fields = array(
+ 'shareWith' => $user,
+ 'token' => $token,
+ 'name' => $name,
+ 'remoteId' => $remote_id,
+ 'owner' => $owner,
+ 'remote' => $local,
+ );
+
+ $url = self::removeProtocolFromUrl($url);
+ $result = self::tryHttpPost($url, $fields);
+ $status = json_decode($result['result'], true);
+
+ return ($result['success'] && $status['ocs']['meta']['statuscode'] === 100);
+
+ }
+
+ return false;
+ }
+
+ /**
+ * send server-to-server unshare to remote server
+ *
+ * @param string remote url
+ * @param int $id share id
+ * @param string $token
+ * @return bool
+ */
+ private static function sendRemoteUnshare($remote, $id, $token) {
+ $url = $remote . self::BASE_PATH_TO_SHARE_API . '/' . $id . '/unshare?format=' . self::RESPONSE_FORMAT;
+ $fields = array('token' => $token, 'format' => 'json');
+ $result = self::tryHttpPost($url, $fields);
+ $status = json_decode($result['result'], true);
+
+ return ($result['success'] && $status['ocs']['meta']['statuscode'] === 100);
+ }
+
+ /**
* check if user can only share with group members
* @return bool
*/
diff --git a/lib/private/systemconfig.php b/lib/private/systemconfig.php
new file mode 100644
index 00000000000..ce6883e5ab3
--- /dev/null
+++ b/lib/private/systemconfig.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright (c) 2014 Morris Jobke <hey@morrisjobke.de>
+ * 2013 Bart Visscher <bartv@thisnet.nl>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
+namespace OC;
+
+/**
+ * Class which provides access to the system config values stored in config.php
+ * Internal class for bootstrap only.
+ * fixes cyclic DI: AllConfig needs AppConfig needs Database needs AllConfig
+ */
+class SystemConfig {
+ /**
+ * Sets a new system wide value
+ *
+ * @param string $key the key of the value, under which will be saved
+ * @param mixed $value the value that should be stored
+ */
+ public function setValue($key, $value) {
+ \OC_Config::setValue($key, $value);
+ }
+
+ /**
+ * Looks up a system wide defined value
+ *
+ * @param string $key the key of the value, under which it was saved
+ * @param mixed $default the default value to be returned if the value isn't set
+ * @return mixed the value or $default
+ */
+ public function getValue($key, $default = '') {
+ return \OC_Config::getValue($key, $default);
+ }
+
+ /**
+ * Delete a system wide defined value
+ *
+ * @param string $key the key of the value, under which it was saved
+ */
+ public function deleteValue($key) {
+ \OC_Config::deleteKey($key);
+ }
+}
diff --git a/lib/private/tagmanager.php b/lib/private/tagmanager.php
index d5bff04acff..6c7eeab87eb 100644
--- a/lib/private/tagmanager.php
+++ b/lib/private/tagmanager.php
@@ -38,11 +38,11 @@ use OC\Tagging\TagMapper;
class TagManager implements \OCP\ITagManager {
/**
- * User
+ * User session
*
- * @var string
+ * @var \OCP\IUserSession
*/
- private $user;
+ private $userSession;
/**
* TagMapper
@@ -55,12 +55,11 @@ class TagManager implements \OCP\ITagManager {
* Constructor.
*
* @param TagMapper $mapper Instance of the TagMapper abstraction layer.
- * @param string $user The user whose data the object will operate on.
+ * @param \OCP\IUserSession $userSession the user session
*/
- public function __construct(TagMapper $mapper, $user) {
-
+ public function __construct(TagMapper $mapper, \OCP\IUserSession $userSession) {
$this->mapper = $mapper;
- $this->user = $user;
+ $this->userSession = $userSession;
}
@@ -71,10 +70,15 @@ class TagManager implements \OCP\ITagManager {
* @param string $type The type identifier e.g. 'contact' or 'event'.
* @param array $defaultTags An array of default tags to be used if none are stored.
* @param boolean $includeShared Whether to include tags for items shared with this user by others.
+ * @param string $userId user for which to retrieve the tags, defaults to the currently
+ * logged in user
* @return \OCP\ITags
*/
- public function load($type, $defaultTags=array(), $includeShared=false) {
- return new Tags($this->mapper, $this->user, $type, $defaultTags, $includeShared);
+ public function load($type, $defaultTags = array(), $includeShared = false, $userId = null) {
+ if (is_null($userId)) {
+ $userId = $this->userSession->getUser()->getUId();
+ }
+ return new Tags($this->mapper, $userId, $type, $defaultTags, $includeShared);
}
}
diff --git a/lib/private/tags.php b/lib/private/tags.php
index bab3d495282..9ff433b6984 100644
--- a/lib/private/tags.php
+++ b/lib/private/tags.php
@@ -200,6 +200,48 @@ class Tags implements \OCP\ITags {
}
/**
+ * Get the list of tags for the given ids.
+ *
+ * @param array $objIds array of object ids
+ * @return array|boolean of tags id as key to array of tag names
+ * or false if an error occurred
+ */
+ public function getTagsForObjects(array $objIds) {
+ $entries = array();
+
+ try {
+ $conn = \OC_DB::getConnection();
+ $chunks = array_chunk($objIds, 1000, false);
+ foreach ($chunks as $chunk) {
+ $result = $conn->executeQuery(
+ 'SELECT `category`, `categoryid`, `objid` ' .
+ 'FROM `' . self::RELATION_TABLE . '` r, `' . self::TAG_TABLE . '` ' .
+ 'WHERE `categoryid` = `id` AND `uid` = ? AND r.`type` = ? AND `objid` IN (?)',
+ array($this->user, $this->type, $chunk),
+ array(null, null, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
+ );
+ while ($row = $result->fetch()) {
+ $objId = (int)$row['objid'];
+ if (!isset($entries[$objId])) {
+ $entry = $entries[$objId] = array();
+ }
+ $entry = $entries[$objId][] = $row['category'];
+ }
+ if (\OCP\DB::isError($result)) {
+ \OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
+ return false;
+ }
+ }
+ } catch(\Exception $e) {
+ \OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
+ \OCP\Util::ERROR);
+ return false;
+ }
+
+ return $entries;
+ }
+
+ /**
* Get the a list if items tagged with $tag.
*
* Throws an exception if the tag could not be found.
diff --git a/lib/private/template.php b/lib/private/template.php
index 9ad9d5466db..d407eb8384c 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -50,16 +50,13 @@ class OC_Template extends \OC\Template\Base {
// Read the selected theme from the config file
$theme = OC_Util::getTheme();
- // Read the detected formfactor and use the right file name.
- $fext = self::getFormFactorExtension();
-
$requesttoken = (OC::$server->getSession() and $registerCall) ? OC_Util::callRegister() : '';
$parts = explode('/', $app); // fix translation when app is something like core/lostpassword
$l10n = \OC::$server->getL10N($parts[0]);
$themeDefaults = new OC_Defaults();
- list($path, $template) = $this->findTemplate($theme, $app, $name, $fext);
+ list($path, $template) = $this->findTemplate($theme, $app, $name);
// Set the private data
$this->renderas = $renderas;
@@ -70,85 +67,23 @@ class OC_Template extends \OC\Template\Base {
}
/**
- * autodetect the formfactor of the used device
- * default -> the normal desktop browser interface
- * mobile -> interface for smartphones
- * tablet -> interface for tablets
- * standalone -> the default interface but without header, footer and
- * sidebar, just the application. Useful to use just a specific
- * app on the desktop in a standalone window.
- */
- public static function detectFormfactor() {
- // please add more useragent strings for other devices
- if(isset($_SERVER['HTTP_USER_AGENT'])) {
- if(stripos($_SERVER['HTTP_USER_AGENT'], 'ipad')>0) {
- $mode='tablet';
- }elseif(stripos($_SERVER['HTTP_USER_AGENT'], 'iphone')>0) {
- $mode='mobile';
- }elseif((stripos($_SERVER['HTTP_USER_AGENT'], 'N9')>0)
- and (stripos($_SERVER['HTTP_USER_AGENT'], 'nokia')>0)) {
- $mode='mobile';
- }else{
- $mode='default';
- }
- }else{
- $mode='default';
- }
- return($mode);
- }
-
- /**
- * Returns the formfactor extension for current formfactor
- */
- static public function getFormFactorExtension()
- {
- if (!\OC::$server->getSession()) {
- return '';
- }
- // if the formfactor is not yet autodetected do the
- // autodetection now. For possible formfactors check the
- // detectFormfactor documentation
- if (!\OC::$server->getSession()->exists('formfactor')) {
- \OC::$server->getSession()->set('formfactor', self::detectFormfactor());
- }
- // allow manual override via GET parameter
- if(isset($_GET['formfactor'])) {
- \OC::$server->getSession()->set('formfactor', $_GET['formfactor']);
- }
- $formfactor = \OC::$server->getSession()->get('formfactor');
- if($formfactor==='default') {
- $fext='';
- }elseif($formfactor==='mobile') {
- $fext='.mobile';
- }elseif($formfactor==='tablet') {
- $fext='.tablet';
- }elseif($formfactor==='standalone') {
- $fext='.standalone';
- }else{
- $fext='';
- }
- return $fext;
- }
-
- /**
* find the template with the given name
* @param string $name of the template file (without suffix)
*
- * Will select the template file for the selected theme and formfactor.
+ * Will select the template file for the selected theme.
* Checking all the possible locations.
* @param string $theme
* @param string $app
- * @param string $fext
* @return array
*/
- protected function findTemplate($theme, $app, $name, $fext) {
+ protected function findTemplate($theme, $app, $name) {
// Check if it is a app template or not.
if( $app !== '' ) {
$dirs = $this->getAppTemplateDirs($theme, $app, OC::$SERVERROOT, OC_App::getAppPath($app));
} else {
$dirs = $this->getCoreTemplateDirs($theme, OC::$SERVERROOT);
}
- $locator = new \OC\Template\TemplateFileLocator( $fext, $dirs );
+ $locator = new \OC\Template\TemplateFileLocator( $dirs );
$template = $locator->find($name);
$path = $locator->getPath();
return array($path, $template);
@@ -187,7 +122,7 @@ class OC_Template extends \OC\Template\Base {
foreach(OC_Util::$headers as $header) {
$headers .= '<'.OC_Util::sanitizeHTML($header['tag']);
foreach($header['attributes'] as $name=>$value) {
- $headers .= ' "'.OC_Util::sanitizeHTML($name).'"="'.OC_Util::sanitizeHTML($value).'"';
+ $headers .= ' '.OC_Util::sanitizeHTML($name).'="'.OC_Util::sanitizeHTML($value).'"';
}
if ($header['text'] !== null) {
$headers .= '>'.OC_Util::sanitizeHTML($header['text']).'</'.OC_Util::sanitizeHTML($header['tag']).'>';
@@ -298,13 +233,14 @@ class OC_Template extends \OC\Template\Base {
*/
public static function isAssetPipelineEnabled() {
// asset management enabled?
- $useAssetPipeline = \OC::$server->getConfig()->getSystemValue('asset-pipeline.enabled', false);
+ $config = \OC::$server->getConfig();
+ $useAssetPipeline = $config->getSystemValue('asset-pipeline.enabled', false);
if (!$useAssetPipeline) {
return false;
}
// assets folder exists?
- $assetDir = \OC::$SERVERROOT . '/assets';
+ $assetDir = $config->getSystemValue('assetdirectory', \OC::$SERVERROOT) . '/assets';
if (!is_dir($assetDir)) {
if (!mkdir($assetDir)) {
\OCP\Util::writeLog('assets',
diff --git a/lib/private/template/cssresourcelocator.php b/lib/private/template/cssresourcelocator.php
index e26daa25827..cb129261b51 100644
--- a/lib/private/template/cssresourcelocator.php
+++ b/lib/private/template/cssresourcelocator.php
@@ -12,9 +12,7 @@ class CSSResourceLocator extends ResourceLocator {
public function doFind( $style ) {
if (strpos($style, '3rdparty') === 0
&& $this->appendIfExist($this->thirdpartyroot, $style.'.css')
- || $this->appendIfExist($this->serverroot, $style.$this->form_factor.'.css')
|| $this->appendIfExist($this->serverroot, $style.'.css')
- || $this->appendIfExist($this->serverroot, 'core/'.$style.$this->form_factor.'.css')
|| $this->appendIfExist($this->serverroot, 'core/'.$style.'.css')
) {
return;
@@ -23,8 +21,7 @@ class CSSResourceLocator extends ResourceLocator {
$style = substr($style, strpos($style, '/')+1);
$app_path = \OC_App::getAppPath($app);
$app_url = \OC_App::getAppWebPath($app);
- if ($this->appendIfExist($app_path, $style.$this->form_factor.'.css', $app_url)
- || $this->appendIfExist($app_path, $style.'.css', $app_url)
+ if ($this->appendIfExist($app_path, $style.'.css', $app_url)
) {
return;
}
@@ -33,11 +30,8 @@ class CSSResourceLocator extends ResourceLocator {
public function doFindTheme( $style ) {
$theme_dir = 'themes/'.$this->theme.'/';
- $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$style.$this->form_factor.'.css')
- || $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$style.'.css')
- || $this->appendIfExist($this->serverroot, $theme_dir.$style.$this->form_factor.'.css')
+ $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$style.'.css')
|| $this->appendIfExist($this->serverroot, $theme_dir.$style.'.css')
- || $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$style.$this->form_factor.'.css')
|| $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$style.'.css');
}
}
diff --git a/lib/private/template/functions.php b/lib/private/template/functions.php
index ca0c27a8078..288b7838ca2 100644
--- a/lib/private/template/functions.php
+++ b/lib/private/template/functions.php
@@ -29,7 +29,7 @@ function print_unescaped($string) {
* @param string|string[] $file the filename,
* if an array is given it will add all scripts
*/
-function script($app, $file) {
+function script($app, $file = null) {
if(is_array($file)) {
foreach($file as $f) {
OC_Util::addScript($app, $f);
@@ -45,7 +45,7 @@ function script($app, $file) {
* @param string|string[] $file the filename,
* if an array is given it will add all scripts
*/
-function vendor_script($app, $file) {
+function vendor_script($app, $file = null) {
if(is_array($file)) {
foreach($file as $f) {
OC_Util::addVendorScript($app, $f);
@@ -61,7 +61,7 @@ function vendor_script($app, $file) {
* @param string|string[] $file the filename,
* if an array is given it will add all styles
*/
-function style($app, $file) {
+function style($app, $file = null) {
if(is_array($file)) {
foreach($file as $f) {
OC_Util::addStyle($app, $f);
@@ -77,7 +77,7 @@ function style($app, $file) {
* @param string|string[] $file the filename,
* if an array is given it will add all styles
*/
-function vendor_style($app, $file) {
+function vendor_style($app, $file = null) {
if(is_array($file)) {
foreach($file as $f) {
OC_Util::addVendorStyle($app, $f);
@@ -205,36 +205,16 @@ function strip_time($timestamp){
* @param int $timestamp timestamp to format
* @param int $fromTime timestamp to compare from, defaults to current time
* @param bool $dateOnly whether to strip time information
- * @return OC_L10N_String timestamp
+ * @return string timestamp
*/
function relative_modified_date($timestamp, $fromTime = null, $dateOnly = false) {
- $l = \OC::$server->getL10N('lib');
- if (!isset($fromTime) || $fromTime === null){
- $fromTime = time();
- }
+ /** @var \OC\DateTimeFormatter $formatter */
+ $formatter = \OC::$server->query('DateTimeFormatter');
+
if ($dateOnly){
- $fromTime = strip_time($fromTime);
- $timestamp = strip_time($timestamp);
+ return $formatter->formatDateSpan($timestamp, $fromTime);
}
- $timediff = $fromTime - $timestamp;
- $diffminutes = round($timediff/60);
- $diffhours = round($diffminutes/60);
- $diffdays = round($diffhours/24);
- $diffmonths = round($diffdays/31);
-
- if(!$dateOnly && $timediff < 60) { return $l->t('seconds ago'); }
- else if(!$dateOnly && $timediff < 3600) { return $l->n('%n minute ago', '%n minutes ago', $diffminutes); }
- else if(!$dateOnly && $timediff < 86400) { return $l->n('%n hour ago', '%n hours ago', $diffhours); }
- else if((date('G', $fromTime)-$diffhours) >= 0) { return $l->t('today'); }
- else if((date('G', $fromTime)-$diffhours) >= -24) { return $l->t('yesterday'); }
- // 86400 * 31 days = 2678400
- else if($timediff < 2678400) { return $l->n('%n day go', '%n days ago', $diffdays); }
- // 86400 * 60 days = 518400
- else if($timediff < 5184000) { return $l->t('last month'); }
- else if((date('n', $fromTime)-$diffmonths) > 0) { return $l->n('%n month ago', '%n months ago', $diffmonths); }
- // 86400 * 365.25 days * 2 = 63113852
- else if($timediff < 63113852) { return $l->t('last year'); }
- else { return $l->t('years ago'); }
+ return $formatter->formatTimeSpan($timestamp, $fromTime);
}
function html_select_options($options, $selected, $params=array()) {
diff --git a/lib/private/template/jsresourcelocator.php b/lib/private/template/jsresourcelocator.php
index 507f31327a6..5a6672429cf 100644
--- a/lib/private/template/jsresourcelocator.php
+++ b/lib/private/template/jsresourcelocator.php
@@ -13,15 +13,10 @@ class JSResourceLocator extends ResourceLocator {
$theme_dir = 'themes/'.$this->theme.'/';
if (strpos($script, '3rdparty') === 0
&& $this->appendIfExist($this->thirdpartyroot, $script.'.js')
- || $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.$this->form_factor.'.js')
|| $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.'.js')
- || $this->appendIfExist($this->serverroot, $theme_dir.$script.$this->form_factor.'.js')
|| $this->appendIfExist($this->serverroot, $theme_dir.$script.'.js')
- || $this->appendIfExist($this->serverroot, $script.$this->form_factor.'.js')
|| $this->appendIfExist($this->serverroot, $script.'.js')
- || $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.$this->form_factor.'.js')
|| $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.'.js')
- || $this->appendIfExist($this->serverroot, 'core/'.$script.$this->form_factor.'.js')
|| $this->appendIfExist($this->serverroot, 'core/'.$script.'.js')
) {
return;
@@ -30,9 +25,7 @@ class JSResourceLocator extends ResourceLocator {
$script = substr($script, strpos($script, '/')+1);
$app_path = \OC_App::getAppPath($app);
$app_url = \OC_App::getAppWebPath($app);
- if ($this->appendIfExist($app_path, $script.$this->form_factor.'.js', $app_url)
- || $this->appendIfExist($app_path, $script.'.js', $app_url)
- ) {
+ if ($this->appendIfExist($app_path, $script.'.js', $app_url)) {
return;
}
// missing translations files fill be ignored
diff --git a/lib/private/template/resourcelocator.php b/lib/private/template/resourcelocator.php
index 7976c415922..919665df704 100644
--- a/lib/private/template/resourcelocator.php
+++ b/lib/private/template/resourcelocator.php
@@ -10,7 +10,6 @@ namespace OC\Template;
abstract class ResourceLocator {
protected $theme;
- protected $form_factor;
protected $mapping;
protected $serverroot;
@@ -21,11 +20,9 @@ abstract class ResourceLocator {
/**
* @param string $theme
- * @param string $form_factor
*/
- public function __construct( $theme, $form_factor, $core_map, $party_map ) {
+ public function __construct( $theme, $core_map, $party_map ) {
$this->theme = $theme;
- $this->form_factor = $form_factor;
$this->mapping = $core_map + $party_map;
$this->serverroot = key($core_map);
$this->thirdpartyroot = key($party_map);
@@ -46,8 +43,7 @@ abstract class ResourceLocator {
}
}
} catch (\Exception $e) {
- throw new \Exception($e->getMessage().' formfactor:'.$this->form_factor
- .' serverroot:'.$this->serverroot);
+ throw new \Exception($e->getMessage().' serverroot:'.$this->serverroot);
}
}
diff --git a/lib/private/template/templatefilelocator.php b/lib/private/template/templatefilelocator.php
index 8e9f3bd8100..042298389c8 100644
--- a/lib/private/template/templatefilelocator.php
+++ b/lib/private/template/templatefilelocator.php
@@ -9,16 +9,13 @@
namespace OC\Template;
class TemplateFileLocator {
- protected $form_factor;
protected $dirs;
private $path;
/**
* @param string[] $dirs
- * @param string $form_factor
*/
- public function __construct( $form_factor, $dirs ) {
- $this->form_factor = $form_factor;
+ public function __construct( $dirs ) {
$this->dirs = $dirs;
}
@@ -33,18 +30,13 @@ class TemplateFileLocator {
}
foreach($this->dirs as $dir) {
- $file = $dir.$template.$this->form_factor.'.php';
- if (is_file($file)) {
- $this->path = $dir;
- return $file;
- }
$file = $dir.$template.'.php';
if (is_file($file)) {
$this->path = $dir;
return $file;
}
}
- throw new \Exception('template file not found: template:'.$template.' formfactor:'.$this->form_factor);
+ throw new \Exception('template file not found: template:'.$template);
}
public function getPath() {
diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php
index a93449f202f..44a8cd3a803 100644
--- a/lib/private/templatelayout.php
+++ b/lib/private/templatelayout.php
@@ -6,6 +6,7 @@ use Assetic\Filter\CssImportFilter;
use Assetic\Filter\CssMinFilter;
use Assetic\Filter\CssRewriteFilter;
use Assetic\Filter\JSMinFilter;
+use OC\Assetic\SeparatorFilter; // waiting on upstream
/**
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
@@ -44,7 +45,7 @@ class OC_TemplateLayout extends OC_Template {
// Update notification
if($this->config->getSystemValue('updatechecker', true) === true &&
OC_User::isAdminUser(OC_User::getUser())) {
- $updater = new \OC\Updater();
+ $updater = new \OC\Updater(\OC::$server->getHTTPHelper(), \OC::$server->getAppConfig());
$data = $updater->check();
if(isset($data['version']) && $data['version'] != '' and $data['version'] !== Array()) {
@@ -131,10 +132,7 @@ class OC_TemplateLayout extends OC_Template {
// Read the selected theme from the config file
$theme = OC_Util::getTheme();
- // Read the detected form factor and use the right file name.
- $formFactorExt = self::getFormFactorExtension();
-
- $locator = new \OC\Template\CSSResourceLocator( $theme, $formFactorExt,
+ $locator = new \OC\Template\CSSResourceLocator( $theme,
array( OC::$SERVERROOT => OC::$WEBROOT ),
array( OC::$THIRDPARTYROOT => OC::$THIRDPARTYWEBROOT ));
$locator->find($styles);
@@ -149,10 +147,7 @@ class OC_TemplateLayout extends OC_Template {
// Read the selected theme from the config file
$theme = OC_Util::getTheme();
- // Read the detected form factor and use the right file name.
- $formFactorExt = self::getFormFactorExtension();
-
- $locator = new \OC\Template\JSResourceLocator( $theme, $formFactorExt,
+ $locator = new \OC\Template\JSResourceLocator( $theme,
array( OC::$SERVERROOT => OC::$WEBROOT ),
array( OC::$THIRDPARTYROOT => OC::$THIRDPARTYWEBROOT ));
$locator->find($scripts);
@@ -160,32 +155,36 @@ class OC_TemplateLayout extends OC_Template {
}
public function generateAssets() {
+ $assetDir = \OC::$server->getConfig()->getSystemValue('assetdirectory', \OC::$SERVERROOT);
$jsFiles = self::findJavascriptFiles(OC_Util::$scripts);
$jsHash = self::hashFileNames($jsFiles);
- if (!file_exists("assets/$jsHash.js")) {
+ if (!file_exists("$assetDir/assets/$jsHash.js")) {
$jsFiles = array_map(function ($item) {
$root = $item[0];
$file = $item[2];
// no need to minifiy minified files
if (substr($file, -strlen('.min.js')) === '.min.js') {
- return new FileAsset($root . '/' . $file, array(), $root, $file);
+ return new FileAsset($root . '/' . $file, array(
+ new SeparatorFilter(';')
+ ), $root, $file);
}
return new FileAsset($root . '/' . $file, array(
- new JSMinFilter()
+ new JSMinFilter(),
+ new SeparatorFilter(';')
), $root, $file);
}, $jsFiles);
$jsCollection = new AssetCollection($jsFiles);
$jsCollection->setTargetPath("assets/$jsHash.js");
- $writer = new AssetWriter(\OC::$SERVERROOT);
+ $writer = new AssetWriter($assetDir);
$writer->writeAsset($jsCollection);
}
$cssFiles = self::findStylesheetFiles(OC_Util::$styles);
$cssHash = self::hashFileNames($cssFiles);
- if (!file_exists("assets/$cssHash.css")) {
+ if (!file_exists("$assetDir/assets/$cssHash.css")) {
$cssFiles = array_map(function ($item) {
$root = $item[0];
$file = $item[2];
@@ -206,7 +205,7 @@ class OC_TemplateLayout extends OC_Template {
$cssCollection = new AssetCollection($cssFiles);
$cssCollection->setTargetPath("assets/$cssHash.css");
- $writer = new AssetWriter(\OC::$SERVERROOT);
+ $writer = new AssetWriter($assetDir);
$writer->writeAsset($cssCollection);
}
diff --git a/lib/private/updater.php b/lib/private/updater.php
index c4c70a3cc4a..fb41e2d36f0 100644
--- a/lib/private/updater.php
+++ b/lib/private/updater.php
@@ -25,6 +25,16 @@ class Updater extends BasicEmitter {
* @var \OC\Log $log
*/
private $log;
+
+ /**
+ * @var \OC\HTTPHelper $helper;
+ */
+ private $httpHelper;
+
+ /**
+ * @var \OCP\IAppConfig;
+ */
+ private $config;
private $simulateStepEnabled;
@@ -33,8 +43,10 @@ class Updater extends BasicEmitter {
/**
* @param \OC\Log $log
*/
- public function __construct($log = null) {
+ public function __construct($httpHelper, $config, $log = null) {
+ $this->httpHelper = $httpHelper;
$this->log = $log;
+ $this->config = $config;
$this->simulateStepEnabled = true;
$this->updateStepEnabled = true;
}
@@ -69,23 +81,23 @@ class Updater extends BasicEmitter {
public function check($updaterUrl = null) {
// Look up the cache - it is invalidated all 30 minutes
- if ((\OC_Appconfig::getValue('core', 'lastupdatedat') + 1800) > time()) {
- return json_decode(\OC_Appconfig::getValue('core', 'lastupdateResult'), true);
+ if (($this->config->getValue('core', 'lastupdatedat') + 1800) > time()) {
+ return json_decode($this->config->getValue('core', 'lastupdateResult'), true);
}
if (is_null($updaterUrl)) {
$updaterUrl = 'https://apps.owncloud.com/updater.php';
}
- \OC_Appconfig::setValue('core', 'lastupdatedat', time());
+ $this->config->setValue('core', 'lastupdatedat', time());
- if (\OC_Appconfig::getValue('core', 'installedat', '') == '') {
- \OC_Appconfig::setValue('core', 'installedat', microtime(true));
+ if ($this->config->getValue('core', 'installedat', '') == '') {
+ $this->config->setValue('core', 'installedat', microtime(true));
}
$version = \OC_Util::getVersion();
- $version['installed'] = \OC_Appconfig::getValue('core', 'installedat');
- $version['updated'] = \OC_Appconfig::getValue('core', 'lastupdatedat');
+ $version['installed'] = $this->config->getValue('core', 'installedat');
+ $version['updated'] = $this->config->getValue('core', 'lastupdatedat');
$version['updatechannel'] = \OC_Util::getChannel();
$version['edition'] = \OC_Util::getEditionString();
$version['build'] = \OC_Util::getBuild();
@@ -95,30 +107,25 @@ class Updater extends BasicEmitter {
$url = $updaterUrl . '?version=' . $versionString;
// set a sensible timeout of 10 sec to stay responsive even if the update server is down.
- $ctx = stream_context_create(
- array(
- 'http' => array(
- 'timeout' => 10
- )
- )
- );
- $xml = @file_get_contents($url, 0, $ctx);
- if ($xml == false) {
- return array();
- }
- $loadEntities = libxml_disable_entity_loader(true);
- $data = @simplexml_load_string($xml);
- libxml_disable_entity_loader($loadEntities);
$tmp = array();
- $tmp['version'] = $data->version;
- $tmp['versionstring'] = $data->versionstring;
- $tmp['url'] = $data->url;
- $tmp['web'] = $data->web;
+ $xml = $this->httpHelper->getUrlContent($url);
+ if ($xml) {
+ $loadEntities = libxml_disable_entity_loader(true);
+ $data = @simplexml_load_string($xml);
+ libxml_disable_entity_loader($loadEntities);
+ if ($data !== false) {
+ $tmp['version'] = $data->version;
+ $tmp['versionstring'] = $data->versionstring;
+ $tmp['url'] = $data->url;
+ $tmp['web'] = $data->web;
+ }
+ } else {
+ $data = array();
+ }
// Cache the result
- \OC_Appconfig::setValue('core', 'lastupdateResult', json_encode($data));
-
+ $this->config->setValue('core', 'lastupdateResult', json_encode($data));
return $tmp;
}
@@ -182,7 +189,11 @@ class Updater extends BasicEmitter {
// Update htaccess files for apache hosts
if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
- \OC_Setup::updateHtaccess();
+ try {
+ \OC_Setup::updateHtaccess();
+ } catch (\Exception $e) {
+ throw new \Exception($e->getMessage());
+ }
}
// create empty file in data dir, so we can later find
@@ -218,7 +229,7 @@ class Updater extends BasicEmitter {
$repair->run();
//Invalidate update feed
- \OC_Appconfig::setValue('core', 'lastupdatedat', 0);
+ $this->config->setValue('core', 'lastupdatedat', 0);
// only set the final version if everything went well
\OC_Config::setValue('version', implode('.', \OC_Util::getVersion()));
@@ -245,7 +256,6 @@ class Updater extends BasicEmitter {
protected function checkAppUpgrade($version) {
$apps = \OC_App::getEnabledApps();
-
foreach ($apps as $appId) {
if ($version) {
$info = \OC_App::getAppInfo($appId);
@@ -255,6 +265,15 @@ class Updater extends BasicEmitter {
}
if ($compatible && \OC_App::shouldUpgrade($appId)) {
+ /**
+ * FIXME: The preupdate check is performed before the database migration, otherwise database changes
+ * are not possible anymore within it. - Consider this when touching the code.
+ * @link https://github.com/owncloud/core/issues/10980
+ * @see \OC_App::updateApp
+ */
+ if (file_exists(\OC_App::getAppPath($appId) . '/appinfo/preupdate.php')) {
+ $this->includePreUpdate($appId);
+ }
if (file_exists(\OC_App::getAppPath($appId) . '/appinfo/database.xml')) {
\OC_DB::simulateUpdateDbFromStructure(\OC_App::getAppPath($appId) . '/appinfo/database.xml');
}
@@ -264,6 +283,14 @@ class Updater extends BasicEmitter {
$this->emit('\OC\Updater', 'appUpgradeCheck');
}
+ /**
+ * Includes the pre-update file. Done here to prevent namespace mixups.
+ * @param string $appId
+ */
+ private function includePreUpdate($appId) {
+ include \OC_App::getAppPath($appId) . '/appinfo/preupdate.php';
+ }
+
protected function doAppUpgrade() {
$apps = \OC_App::getEnabledApps();
diff --git a/lib/private/urlgenerator.php b/lib/private/urlgenerator.php
index e50e9eed6af..d263d25aeef 100644
--- a/lib/private/urlgenerator.php
+++ b/lib/private/urlgenerator.php
@@ -8,6 +8,7 @@
*/
namespace OC;
+use OC_Defaults;
use OCP\IURLGenerator;
use RuntimeException;
@@ -156,7 +157,7 @@ class URLGenerator implements IURLGenerator {
/**
* Makes an URL absolute
- * @param string $url the url in the owncloud host
+ * @param string $url the url in the ownCloud host
* @return string the absolute version of the url
*/
public function getAbsoluteURL($url) {
@@ -173,4 +174,13 @@ class URLGenerator implements IURLGenerator {
return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost(). $webRoot . $separator . $url;
}
+
+ /**
+ * @param string $key
+ * @return string url to the online documentation
+ */
+ public function linkToDocs($key) {
+ $theme = new OC_Defaults();
+ return $theme->buildDocLinkToKey($key);
+ }
}
diff --git a/lib/private/user.php b/lib/private/user.php
index 2358f4a14e4..d66354b247d 100644
--- a/lib/private/user.php
+++ b/lib/private/user.php
@@ -47,6 +47,7 @@ class OC_User {
/**
* @return \OC\User\Manager
+ * @deprecated Use \OC::$server->getUserManager()
*/
public static function getManager() {
return OC::$server->getUserManager();
@@ -179,6 +180,7 @@ class OC_User {
* itself, not in its subclasses.
*
* Allowed characters in the username are: "a-z", "A-Z", "0-9" and "_.@-"
+ * @deprecated Use \OC::$server->getUserManager->createUser($uid, $password)
*/
public static function createUser($uid, $password) {
return self::getManager()->createUser($uid, $password);
@@ -190,30 +192,12 @@ class OC_User {
* @return bool
*
* Deletes a user
+ * @deprecated Use \OC::$server->getUserManager->delete()
*/
public static function deleteUser($uid) {
$user = self::getManager()->get($uid);
if ($user) {
- $result = $user->delete();
-
- // if delete was successful we clean-up the rest
- if ($result) {
-
- // We have to delete the user from all groups
- foreach (OC_Group::getUserGroups($uid) as $i) {
- OC_Group::removeFromGroup($uid, $i);
- }
- // Delete the user's keys in preferences
- OC_Preferences::deleteUser($uid);
-
- // Delete user files in /data/
- OC_Helper::rmdirr(\OC_User::getHome($uid));
-
- // Delete the users entry in the storage table
- \OC\Files\Cache\Storage::remove('home::' . $uid);
- }
-
- return true;
+ return $user->delete();
} else {
return false;
}
@@ -333,6 +317,15 @@ class OC_User {
}
/**
+ * Tries to login the user with HTTP Basic Authentication
+ */
+ public static function tryBasicAuthLogin() {
+ if(!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_USER'])) {
+ \OC_User::login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
+ }
+ }
+
+ /**
* Check if the user is logged in, considers also the HTTP basic credentials
* @return bool
*/
@@ -341,11 +334,6 @@ class OC_User {
return self::userExists(\OC::$server->getSession()->get('user_id'));
}
- // Check whether the user has authenticated using Basic Authentication
- if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
- return \OC_User::login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
- }
-
return false;
}
@@ -355,7 +343,14 @@ class OC_User {
*/
public static function setIncognitoMode($status) {
self::$incognitoMode = $status;
+ }
+ /**
+ * get incognito mode status
+ * @return bool
+ */
+ public static function isIncognitoMode() {
+ return self::$incognitoMode;
}
/**
@@ -522,6 +517,7 @@ class OC_User {
* @return string
*
* returns the path to the users home directory
+ * @deprecated Use \OC::$server->getUserManager->getHome()
*/
public static function getHome($uid) {
$user = self::getManager()->get($uid);
@@ -558,6 +554,7 @@ class OC_User {
* @return array associative array with all display names (value) and corresponding uids (key)
*
* Get a list of all display names and user ids.
+ * @deprecated Use \OC::$server->getUserManager->searchDisplayName($search, $limit, $offset) instead.
*/
public static function getDisplayNames($search = '', $limit = null, $offset = null) {
$displayNames = array();
diff --git a/lib/private/user/backend.php b/lib/private/user/backend.php
index 1f0a524117d..5e0eef4771a 100644
--- a/lib/private/user/backend.php
+++ b/lib/private/user/backend.php
@@ -25,19 +25,28 @@
/**
* error code for functions not provided by the user backend
+ * @deprecated Use \OC_User_Backend::NOT_IMPLEMENTED instead
*/
define('OC_USER_BACKEND_NOT_IMPLEMENTED', -501);
/**
* actions that user backends can define
*/
+/** @deprecated Use \OC_User_Backend::CREATE_USER instead */
define('OC_USER_BACKEND_CREATE_USER', 1 << 0);
+/** @deprecated Use \OC_User_Backend::SET_PASSWORD instead */
define('OC_USER_BACKEND_SET_PASSWORD', 1 << 4);
+/** @deprecated Use \OC_User_Backend::CHECK_PASSWORD instead */
define('OC_USER_BACKEND_CHECK_PASSWORD', 1 << 8);
+/** @deprecated Use \OC_User_Backend::GET_HOME instead */
define('OC_USER_BACKEND_GET_HOME', 1 << 12);
+/** @deprecated Use \OC_User_Backend::GET_DISPLAYNAME instead */
define('OC_USER_BACKEND_GET_DISPLAYNAME', 1 << 16);
+/** @deprecated Use \OC_User_Backend::SET_DISPLAYNAME instead */
define('OC_USER_BACKEND_SET_DISPLAYNAME', 1 << 20);
+/** @deprecated Use \OC_User_Backend::PROVIDE_AVATAR instead */
define('OC_USER_BACKEND_PROVIDE_AVATAR', 1 << 24);
+/** @deprecated Use \OC_User_Backend::COUNT_USERS instead */
define('OC_USER_BACKEND_COUNT_USERS', 1 << 28);
/**
@@ -47,16 +56,32 @@ define('OC_USER_BACKEND_COUNT_USERS', 1 << 28);
* Subclass this for your own backends, and see OC_User_Example for descriptions
*/
abstract class OC_User_Backend implements OC_User_Interface {
+ /**
+ * error code for functions not provided by the user backend
+ */
+ const NOT_IMPLEMENTED = -501;
+
+ /**
+ * actions that user backends can define
+ */
+ const CREATE_USER = 1; // 1 << 0
+ const SET_PASSWORD = 16; // 1 << 4
+ const CHECK_PASSWORD = 256; // 1 << 8
+ const GET_HOME = 4096; // 1 << 12
+ const GET_DISPLAYNAME = 65536; // 1 << 16
+ const SET_DISPLAYNAME = 1048576; // 1 << 20
+ const PROVIDE_AVATAR = 16777216; // 1 << 24
+ const COUNT_USERS = 268435456; // 1 << 28
protected $possibleActions = array(
- OC_USER_BACKEND_CREATE_USER => 'createUser',
- OC_USER_BACKEND_SET_PASSWORD => 'setPassword',
- OC_USER_BACKEND_CHECK_PASSWORD => 'checkPassword',
- OC_USER_BACKEND_GET_HOME => 'getHome',
- OC_USER_BACKEND_GET_DISPLAYNAME => 'getDisplayName',
- OC_USER_BACKEND_SET_DISPLAYNAME => 'setDisplayName',
- OC_USER_BACKEND_PROVIDE_AVATAR => 'canChangeAvatar',
- OC_USER_BACKEND_COUNT_USERS => 'countUsers',
+ self::CREATE_USER => 'createUser',
+ self::SET_PASSWORD => 'setPassword',
+ self::CHECK_PASSWORD => 'checkPassword',
+ self::GET_HOME => 'getHome',
+ self::GET_DISPLAYNAME => 'getDisplayName',
+ self::SET_DISPLAYNAME => 'setDisplayName',
+ self::PROVIDE_AVATAR => 'canChangeAvatar',
+ self::COUNT_USERS => 'countUsers',
);
/**
@@ -64,7 +89,7 @@ abstract class OC_User_Backend implements OC_User_Interface {
* @return int bitwise-or'ed actions
*
* Returns the supported actions as int to be
- * compared with OC_USER_BACKEND_CREATE_USER etc.
+ * compared with self::CREATE_USER etc.
*/
public function getSupportedActions() {
$actions = 0;
@@ -83,7 +108,7 @@ abstract class OC_User_Backend implements OC_User_Interface {
* @return boolean
*
* Returns the supported actions as int to be
- * compared with OC_USER_BACKEND_CREATE_USER etc.
+ * compared with self::CREATE_USER etc.
*/
public function implementsActions($actions) {
return (bool)($this->getSupportedActions() & $actions);
diff --git a/lib/private/user/database.php b/lib/private/user/database.php
index 3a76adbe763..de6c72e4745 100644
--- a/lib/private/user/database.php
+++ b/lib/private/user/database.php
@@ -33,28 +33,12 @@
*
*/
-require_once 'phpass/PasswordHash.php';
-
/**
* Class for user management in a SQL Database (e.g. MySQL, SQLite)
*/
-class OC_User_Database extends OC_User_Backend {
- /**
- * @var PasswordHash
- */
- private static $hasher = null;
-
+class OC_User_Database extends OC_User_Backend implements \OCP\IUserBackend {
private $cache = array();
- private function getHasher() {
- if (!self::$hasher) {
- //we don't want to use DES based crypt(), since it doesn't return a hash with a recognisable prefix
- $forcePortable = (CRYPT_BLOWFISH != 1);
- self::$hasher = new PasswordHash(8, $forcePortable);
- }
- return self::$hasher;
- }
-
/**
* Create a new user
* @param string $uid The username of the user to create
@@ -66,10 +50,8 @@ class OC_User_Database extends OC_User_Backend {
*/
public function createUser($uid, $password) {
if (!$this->userExists($uid)) {
- $hasher = $this->getHasher();
- $hash = $hasher->HashPassword($password . OC_Config::getValue('passwordsalt', ''));
$query = OC_DB::prepare('INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )');
- $result = $query->execute(array($uid, $hash));
+ $result = $query->execute(array($uid, \OC::$server->getHasher()->hash($password)));
return $result ? true : false;
}
@@ -106,10 +88,8 @@ class OC_User_Database extends OC_User_Backend {
*/
public function setPassword($uid, $password) {
if ($this->userExists($uid)) {
- $hasher = $this->getHasher();
- $hash = $hasher->HashPassword($password . OC_Config::getValue('passwordsalt', ''));
$query = OC_DB::prepare('UPDATE `*PREFIX*users` SET `password` = ? WHERE `uid` = ?');
- $result = $query->execute(array($hash, $uid));
+ $result = $query->execute(array(\OC::$server->getHasher()->hash($password), $uid));
return $result ? true : false;
}
@@ -159,7 +139,6 @@ class OC_User_Database extends OC_User_Backend {
. ' WHERE LOWER(`displayname`) LIKE LOWER(?) OR '
. 'LOWER(`uid`) LIKE LOWER(?) ORDER BY `uid` ASC', $limit, $offset);
$result = $query->execute(array('%' . $search . '%', '%' . $search . '%'));
- $users = array();
while ($row = $result->fetchRow()) {
$displayNames[$row['uid']] = $row['displayname'];
}
@@ -183,18 +162,14 @@ class OC_User_Database extends OC_User_Backend {
$row = $result->fetchRow();
if ($row) {
$storedHash = $row['password'];
- if ($storedHash[0] === '$') { //the new phpass based hashing
- $hasher = $this->getHasher();
- if ($hasher->CheckPassword($password . OC_Config::getValue('passwordsalt', ''), $storedHash)) {
- return $row['uid'];
+ $newHash = '';
+ if(\OC::$server->getHasher()->verify($password, $storedHash, $newHash)) {
+ if(!empty($newHash)) {
+ $this->setPassword($uid, $password);
}
-
- //old sha1 based hashing
- } elseif (sha1($password) === $storedHash) {
- //upgrade to new hashing
- $this->setPassword($row['uid'], $password);
return $row['uid'];
}
+
}
return false;
@@ -285,4 +260,12 @@ class OC_User_Database extends OC_User_Backend {
return $result->fetchOne();
}
+ /**
+ * Backend name to be shown in user management
+ * @return string the name of the backend to be shown
+ */
+ public function getBackendName(){
+ return 'Database';
+ }
+
}
diff --git a/lib/private/user/dummy.php b/lib/private/user/dummy.php
index dbcbb2a46f7..322a4562ee6 100644
--- a/lib/private/user/dummy.php
+++ b/lib/private/user/dummy.php
@@ -24,11 +24,13 @@
/**
* dummy user backend, does not keep state, only for testing use
*/
-class OC_User_Dummy extends OC_User_Backend {
+class OC_User_Dummy extends OC_User_Backend implements \OCP\IUserBackend {
private $users = array();
+ private $displayNames = array();
/**
* Create a new user
+ *
* @param string $uid The username of the user to create
* @param string $password The password of the new user
* @return bool
@@ -47,6 +49,7 @@ class OC_User_Dummy extends OC_User_Backend {
/**
* delete a user
+ *
* @param string $uid The username of the user to delete
* @return bool
*
@@ -63,6 +66,7 @@ class OC_User_Dummy extends OC_User_Backend {
/**
* Set password
+ *
* @param string $uid The username
* @param string $password The new password
* @return bool
@@ -80,6 +84,7 @@ class OC_User_Dummy extends OC_User_Backend {
/**
* Check if the password is correct
+ *
* @param string $uid The username
* @param string $password The password
* @return string
@@ -97,6 +102,7 @@ class OC_User_Dummy extends OC_User_Backend {
/**
* Get a list of all users
+ *
* @param string $search
* @param int $limit
* @param int $offset
@@ -105,12 +111,12 @@ class OC_User_Dummy extends OC_User_Backend {
* Get a list of all users.
*/
public function getUsers($search = '', $limit = null, $offset = null) {
- if(empty($search)) {
+ if (empty($search)) {
return array_keys($this->users);
}
$result = array();
- foreach(array_keys($this->users) as $user) {
- if(stripos($user, $search) !== false) {
+ foreach (array_keys($this->users) as $user) {
+ if (stripos($user, $search) !== false) {
$result[] = $user;
}
}
@@ -119,6 +125,7 @@ class OC_User_Dummy extends OC_User_Backend {
/**
* check if a user exists
+ *
* @param string $uid the username
* @return boolean
*/
@@ -141,4 +148,20 @@ class OC_User_Dummy extends OC_User_Backend {
public function countUsers() {
return 0;
}
+
+ public function setDisplayName($uid, $displayName) {
+ $this->displayNames[$uid] = $displayName;
+ }
+
+ public function getDisplayName($uid) {
+ return isset($this->displayNames[$uid])? $this->displayNames[$uid]: $uid;
+ }
+
+ /**
+ * Backend name to be shown in user management
+ * @return string the name of the backend to be shown
+ */
+ public function getBackendName(){
+ return 'Dummy';
+ }
}
diff --git a/lib/private/user/http.php b/lib/private/user/http.php
index 617e8adb3f2..8375c4e1e22 100644
--- a/lib/private/user/http.php
+++ b/lib/private/user/http.php
@@ -24,7 +24,7 @@
/**
* user backend using http auth requests
*/
-class OC_User_HTTP extends OC_User_Backend {
+class OC_User_HTTP extends OC_User_Backend implements \OCP\IUserBackend {
/**
* split http://user@host/path into a user and url part
* @param string $url
@@ -109,4 +109,12 @@ class OC_User_HTTP extends OC_User_Backend {
return false;
}
}
+
+ /**
+ * Backend name to be shown in user management
+ * @return string the name of the backend to be shown
+ */
+ public function getBackendName(){
+ return 'HTTP';
+ }
}
diff --git a/lib/private/user/interface.php b/lib/private/user/interface.php
index 4cdc47479a3..624d36e6fe5 100644
--- a/lib/private/user/interface.php
+++ b/lib/private/user/interface.php
@@ -25,11 +25,11 @@ interface OC_User_Interface {
/**
* Check if backend implements actions
- * @param $actions bitwise-or'ed actions
+ * @param int $actions bitwise-or'ed actions
* @return boolean
*
* Returns the supported actions as int to be
- * compared with OC_USER_BACKEND_CREATE_USER etc.
+ * compared with \OC_User_Backend::CREATE_USER etc.
*/
public function implementsActions($actions);
diff --git a/lib/private/user/manager.php b/lib/private/user/manager.php
index 4d1612a35ce..1fc89f8c2c2 100644
--- a/lib/private/user/manager.php
+++ b/lib/private/user/manager.php
@@ -11,6 +11,7 @@ namespace OC\User;
use OC\Hooks\PublicEmitter;
use OCP\IUserManager;
+use OCP\IConfig;
/**
* Class Manager
@@ -27,7 +28,7 @@ use OCP\IUserManager;
*/
class Manager extends PublicEmitter implements IUserManager {
/**
- * @var \OC_User_Interface[] $backends
+ * @var \OCP\UserInterface [] $backends
*/
private $backends = array();
@@ -37,14 +38,14 @@ class Manager extends PublicEmitter implements IUserManager {
private $cachedUsers = array();
/**
- * @var \OC\AllConfig $config
+ * @var \OCP\IConfig $config
*/
private $config;
/**
- * @param \OC\AllConfig $config
+ * @param \OCP\IConfig $config
*/
- public function __construct($config = null) {
+ public function __construct(IConfig $config = null) {
$this->config = $config;
$cachedUsers = &$this->cachedUsers;
$this->listen('\OC\User', 'postDelete', function ($user) use (&$cachedUsers) {
@@ -62,9 +63,17 @@ class Manager extends PublicEmitter implements IUserManager {
}
/**
+ * Get the active backends
+ * @return \OCP\UserInterface[]
+ */
+ public function getBackends() {
+ return $this->backends;
+ }
+
+ /**
* register a user backend
*
- * @param \OC_User_Interface $backend
+ * @param \OCP\UserInterface $backend
*/
public function registerBackend($backend) {
$this->backends[] = $backend;
@@ -73,7 +82,7 @@ class Manager extends PublicEmitter implements IUserManager {
/**
* remove a user backend
*
- * @param \OC_User_Interface $backend
+ * @param \OCP\UserInterface $backend
*/
public function removeBackend($backend) {
$this->cachedUsers = array();
@@ -112,7 +121,7 @@ class Manager extends PublicEmitter implements IUserManager {
* get or construct the user object
*
* @param string $uid
- * @param \OC_User_Interface $backend
+ * @param \OCP\UserInterface $backend
* @return \OC\User\User
*/
protected function getUserObject($uid, $backend) {
@@ -142,8 +151,11 @@ class Manager extends PublicEmitter implements IUserManager {
* @return mixed the User object on success, false otherwise
*/
public function checkPassword($loginname, $password) {
+ $loginname = str_replace("\0", '', $loginname);
+ $password = str_replace("\0", '', $password);
+
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(\OC_USER_BACKEND_CHECK_PASSWORD)) {
+ if ($backend->implementsActions(\OC_User_Backend::CHECK_PASSWORD)) {
$uid = $backend->checkPassword($loginname, $password);
if ($uid !== false) {
return $this->getUserObject($uid, $backend);
@@ -220,7 +232,7 @@ class Manager extends PublicEmitter implements IUserManager {
* @param string $uid
* @param string $password
* @throws \Exception
- * @return bool|\OC\User\User the created user of false
+ * @return bool|\OC\User\User the created user or false
*/
public function createUser($uid, $password) {
$l = \OC::$server->getL10N('lib');
@@ -246,7 +258,7 @@ class Manager extends PublicEmitter implements IUserManager {
$this->emit('\OC\User', 'preCreateUser', array($uid, $password));
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(\OC_USER_BACKEND_CREATE_USER)) {
+ if ($backend->implementsActions(\OC_User_Backend::CREATE_USER)) {
$backend->createUser($uid, $password);
$user = $this->getUserObject($uid, $backend);
$this->emit('\OC\User', 'postCreateUser', array($user, $password));
@@ -264,13 +276,18 @@ class Manager extends PublicEmitter implements IUserManager {
public function countUsers() {
$userCountStatistics = array();
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(\OC_USER_BACKEND_COUNT_USERS)) {
+ if ($backend->implementsActions(\OC_User_Backend::COUNT_USERS)) {
$backendusers = $backend->countUsers();
if($backendusers !== false) {
- if(isset($userCountStatistics[get_class($backend)])) {
- $userCountStatistics[get_class($backend)] += $backendusers;
+ if($backend instanceof \OCP\IUserBackend) {
+ $name = $backend->getBackendName();
+ } else {
+ $name = get_class($backend);
+ }
+ if(isset($userCountStatistics[$name])) {
+ $userCountStatistics[$name] += $backendusers;
} else {
- $userCountStatistics[get_class($backend)] = $backendusers;
+ $userCountStatistics[$name] = $backendusers;
}
}
}
diff --git a/lib/private/user/session.php b/lib/private/user/session.php
index ca0265dfb23..3cd83aae52f 100644
--- a/lib/private/user/session.php
+++ b/lib/private/user/session.php
@@ -88,15 +88,6 @@ class Session implements IUserSession, Emitter {
* @return \OCP\ISession
*/
public function getSession() {
- // fetch the deprecated \OC::$session if it changed for backwards compatibility
- if (isset(\OC::$session) && \OC::$session !== $this->session) {
- \OC::$server->getLogger()->warning(
- 'One of your installed apps still seems to use the deprecated ' .
- '\OC::$session and has replaced it with a new instance. Please file a bug against it.' .
- 'Closing and replacing session in UserSession instance.'
- );
- $this->setSession(\OC::$session);
- }
return $this->session;
}
@@ -111,14 +102,6 @@ class Session implements IUserSession, Emitter {
}
$this->session = $session;
$this->activeUser = null;
-
- // maintain deprecated \OC::$session
- if (\OC::$session !== $this->session) {
- if (\OC::$session instanceof \OCP\ISession) {
- \OC::$session->close();
- }
- \OC::$session = $session;
- }
}
/**
@@ -138,9 +121,14 @@ class Session implements IUserSession, Emitter {
/**
* get the current active user
*
- * @return \OC\User\User
+ * @return \OCP\IUser|null Current user, otherwise null
*/
public function getUser() {
+ // FIXME: This is a quick'n dirty work-around for the incognito mode as
+ // described at https://github.com/owncloud/core/pull/12912#issuecomment-67391155
+ if (\OC_User::isIncognitoMode()) {
+ return null;
+ }
if ($this->activeUser) {
return $this->activeUser;
} else {
@@ -155,6 +143,15 @@ class Session implements IUserSession, Emitter {
}
/**
+ * Checks whether the user is logged in
+ *
+ * @return bool if logged in
+ */
+ public function isLoggedIn() {
+ return $this->getUser() !== null;
+ }
+
+ /**
* set the login name
*
* @param string|null $loginName for the logged in user
@@ -228,15 +225,15 @@ class Session implements IUserSession, Emitter {
}
// get stored tokens
- $tokens = \OC_Preferences::getKeys($uid, 'login_token');
+ $tokens = \OC::$server->getConfig()->getUserKeys($uid, 'login_token');
// test cookies token against stored tokens
if (!in_array($currentToken, $tokens, true)) {
return false;
}
// replace successfully used token with a new one
- \OC_Preferences::deleteKey($uid, 'login_token', $currentToken);
+ \OC::$server->getConfig()->deleteUserValue($uid, 'login_token', $currentToken);
$newToken = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(32);
- \OC_Preferences::setValue($uid, 'login_token', $newToken, time());
+ \OC::$server->getConfig()->setUserValue($uid, 'login_token', $newToken, time());
$this->setMagicInCookie($user->getUID(), $newToken);
//login
diff --git a/lib/private/user/user.php b/lib/private/user/user.php
index 452261a75ff..0b4f9a24276 100644
--- a/lib/private/user/user.php
+++ b/lib/private/user/user.php
@@ -11,6 +11,7 @@ namespace OC\User;
use OC\Hooks\Emitter;
use OCP\IUser;
+use OCP\IConfig;
class User implements IUser {
/**
@@ -49,7 +50,7 @@ class User implements IUser {
private $lastLogin;
/**
- * @var \OC\AllConfig $config
+ * @var \OCP\IConfig $config
*/
private $config;
@@ -57,9 +58,9 @@ class User implements IUser {
* @param string $uid
* @param \OC_User_Interface $backend
* @param \OC\Hooks\Emitter $emitter
- * @param \OC\AllConfig $config
+ * @param \OCP\IConfig $config
*/
- public function __construct($uid, $backend, $emitter = null, $config = null) {
+ public function __construct($uid, $backend, $emitter = null, IConfig $config = null) {
$this->uid = $uid;
$this->backend = $backend;
$this->emitter = $emitter;
@@ -67,10 +68,11 @@ class User implements IUser {
if ($this->config) {
$enabled = $this->config->getUserValue($uid, 'core', 'enabled', 'true');
$this->enabled = ($enabled === 'true');
+ $this->lastLogin = $this->config->getUserValue($uid, 'login', 'lastLogin', 0);
} else {
$this->enabled = true;
+ $this->lastLogin = \OC::$server->getConfig()->getUserValue($uid, 'login', 'lastLogin', 0);
}
- $this->lastLogin = \OC_Preferences::getValue($uid, 'login', 'lastLogin', 0);
}
/**
@@ -90,7 +92,7 @@ class User implements IUser {
public function getDisplayName() {
if (!isset($this->displayName)) {
$displayName = '';
- if ($this->backend and $this->backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
+ if ($this->backend and $this->backend->implementsActions(\OC_User_Backend::GET_DISPLAYNAME)) {
// get display name and strip whitespace from the beginning and end of it
$backendDisplayName = $this->backend->getDisplayName($this->uid);
if (is_string($backendDisplayName)) {
@@ -115,7 +117,7 @@ class User implements IUser {
*/
public function setDisplayName($displayName) {
$displayName = trim($displayName);
- if ($this->canChangeDisplayName() && !empty($displayName)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::SET_DISPLAYNAME) && !empty($displayName)) {
$this->displayName = $displayName;
$result = $this->backend->setDisplayName($this->uid, $displayName);
return $result !== false;
@@ -139,7 +141,7 @@ class User implements IUser {
*/
public function updateLastLoginTimestamp() {
$this->lastLogin = time();
- \OC_Preferences::setValue(
+ \OC::$server->getConfig()->setUserValue(
$this->uid, 'login', 'lastLogin', $this->lastLogin);
}
@@ -153,6 +155,24 @@ class User implements IUser {
$this->emitter->emit('\OC\User', 'preDelete', array($this));
}
$result = $this->backend->deleteUser($this->uid);
+ if ($result) {
+
+ // FIXME: Feels like an hack - suggestions?
+
+ // We have to delete the user from all groups
+ foreach (\OC_Group::getUserGroups($this->uid) as $i) {
+ \OC_Group::removeFromGroup($this->uid, $i);
+ }
+ // Delete the user's keys in preferences
+ \OC::$server->getConfig()->deleteAllUserValues($this->uid);
+
+ // Delete user files in /data/
+ \OC_Helper::rmdirr(\OC_User::getHome($this->uid));
+
+ // Delete the users entry in the storage table
+ \OC\Files\Cache\Storage::remove('home::' . $this->uid);
+ }
+
if ($this->emitter) {
$this->emitter->emit('\OC\User', 'postDelete', array($this));
}
@@ -170,7 +190,7 @@ class User implements IUser {
if ($this->emitter) {
$this->emitter->emit('\OC\User', 'preSetPassword', array($this, $password, $recoveryPassword));
}
- if ($this->backend->implementsActions(\OC_USER_BACKEND_SET_PASSWORD)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::SET_PASSWORD)) {
$result = $this->backend->setPassword($this->uid, $password);
if ($this->emitter) {
$this->emitter->emit('\OC\User', 'postSetPassword', array($this, $password, $recoveryPassword));
@@ -188,7 +208,7 @@ class User implements IUser {
*/
public function getHome() {
if (!$this->home) {
- if ($this->backend->implementsActions(\OC_USER_BACKEND_GET_HOME) and $home = $this->backend->getHome($this->uid)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::GET_HOME) and $home = $this->backend->getHome($this->uid)) {
$this->home = $home;
} elseif ($this->config) {
$this->home = $this->config->getSystemValue('datadirectory') . '/' . $this->uid;
@@ -200,12 +220,24 @@ class User implements IUser {
}
/**
+ * Get the name of the backend class the user is connected with
+ *
+ * @return string
+ */
+ public function getBackendClassName() {
+ if($this->backend instanceof \OCP\IUserBackend) {
+ return $this->backend->getBackendName();
+ }
+ return get_class($this->backend);
+ }
+
+ /**
* check if the backend allows the user to change his avatar on Personal page
*
* @return bool
*/
public function canChangeAvatar() {
- if ($this->backend->implementsActions(\OC_USER_BACKEND_PROVIDE_AVATAR)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::PROVIDE_AVATAR)) {
return $this->backend->canChangeAvatar($this->uid);
}
return true;
@@ -217,7 +249,7 @@ class User implements IUser {
* @return bool
*/
public function canChangePassword() {
- return $this->backend->implementsActions(\OC_USER_BACKEND_SET_PASSWORD);
+ return $this->backend->implementsActions(\OC_User_Backend::SET_PASSWORD);
}
/**
@@ -229,7 +261,7 @@ class User implements IUser {
if ($this->config and $this->config->getSystemValue('allow_user_to_change_display_name') === false) {
return false;
} else {
- return $this->backend->implementsActions(\OC_USER_BACKEND_SET_DISPLAYNAME);
+ return $this->backend->implementsActions(\OC_User_Backend::SET_DISPLAYNAME);
}
}
diff --git a/lib/private/util.php b/lib/private/util.php
index bee0a579192..3178639b02e 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -285,8 +285,12 @@ class OC_Util {
* @return string
*/
public static function getEditionString() {
- OC_Util::loadVersion();
- return \OC::$server->getSession()->get('OC_Edition');
+ if (OC_App::isEnabled('enterprise_key')) {
+ return "Enterprise";
+ } else {
+ return "";
+ }
+
}
/**
@@ -321,8 +325,6 @@ class OC_Util {
$session->set('OC_Version', $OC_Version);
/** @var $OC_VersionString string */
$session->set('OC_VersionString', $OC_VersionString);
- /** @var $OC_Edition string */
- $session->set('OC_Edition', $OC_Edition);
/** @var $OC_Channel string */
$session->set('OC_Channel', $OC_Channel);
/** @var $OC_Build string */
@@ -333,9 +335,9 @@ class OC_Util {
/**
* generates a path for JS/CSS files. If no application is provided it will create the path for core.
*
- * @param $application application to get the files from
- * @param $directory directory withing this application (css, js, vendor, etc)
- * @param $file the file inside of the above folder
+ * @param string $application application to get the files from
+ * @param string $directory directory withing this application (css, js, vendor, etc)
+ * @param string $file the file inside of the above folder
* @return string the path
*/
private static function generatePath($application, $directory, $file) {
@@ -358,7 +360,10 @@ class OC_Util {
* @return void
*/
public static function addScript($application, $file = null) {
- self::$scripts[] = OC_Util::generatePath($application, 'js', $file);
+ $path = OC_Util::generatePath($application, 'js', $file);
+ if (!in_array($path, self::$scripts)) {
+ self::$scripts[] = $path;
+ }
}
/**
@@ -369,7 +374,10 @@ class OC_Util {
* @return void
*/
public static function addVendorScript($application, $file = null) {
- self::$scripts[] = OC_Util::generatePath($application, 'vendor', $file);
+ $path = OC_Util::generatePath($application, 'vendor', $file);
+ if (!in_array($path, self::$scripts)) {
+ self::$scripts[] = $path;
+ }
}
/**
@@ -384,9 +392,12 @@ class OC_Util {
$languageCode = $l->getLanguageCode($application);
}
if (!empty($application)) {
- self::$scripts[] = "$application/l10n/$languageCode";
+ $path = "$application/l10n/$languageCode";
} else {
- self::$scripts[] = "l10n/$languageCode";
+ $path = "l10n/$languageCode";
+ }
+ if (!in_array($path, self::$scripts)) {
+ self::$scripts[] = $path;
}
}
@@ -398,7 +409,10 @@ class OC_Util {
* @return void
*/
public static function addStyle($application, $file = null) {
- self::$styles[] = OC_Util::generatePath($application, 'css', $file);
+ $path = OC_Util::generatePath($application, 'css', $file);
+ if (!in_array($path, self::$styles)) {
+ self::$styles[] = $path;
+ }
}
/**
@@ -409,7 +423,10 @@ class OC_Util {
* @return void
*/
public static function addVendorStyle($application, $file = null) {
- self::$styles[] = OC_Util::generatePath($application, 'vendor', $file);
+ $path = OC_Util::generatePath($application, 'vendor', $file);
+ if (!in_array($path, self::$styles)) {
+ self::$styles[] = $path;
+ }
}
/**
@@ -435,27 +452,20 @@ class OC_Util {
* @param bool $dateOnly option to omit time from the result
* @param DateTimeZone|string $timeZone where the given timestamp shall be converted to
* @return string timestamp
- * @description adjust to clients timezone if we know it
+ *
+ * @deprecated Use \OC::$server->query('DateTimeFormatter') instead
*/
public static function formatDate($timestamp, $dateOnly = false, $timeZone = null) {
- if (is_null($timeZone)) {
- if (\OC::$server->getSession()->exists('timezone')) {
- $systemTimeZone = intval(date('O'));
- $systemTimeZone = (round($systemTimeZone / 100, 0) * 60) + ($systemTimeZone % 100);
- $clientTimeZone = \OC::$server->getSession()->get('timezone') * 60;
- $offset = $clientTimeZone - $systemTimeZone;
- $timestamp = $timestamp + $offset * 60;
- }
- } else {
- if (!$timeZone instanceof DateTimeZone) {
- $timeZone = new DateTimeZone($timeZone);
- }
- $dt = new DateTime("@$timestamp");
- $offset = $timeZone->getOffset($dt);
- $timestamp += $offset;
+ if ($timeZone !== null && !$timeZone instanceof \DateTimeZone) {
+ $timeZone = new \DateTimeZone($timeZone);
}
- $l = \OC::$server->getL10N('lib');
- return $l->l($dateOnly ? 'date' : 'datetime', $timestamp);
+
+ /** @var \OC\DateTimeFormatter $formatter */
+ $formatter = \OC::$server->query('DateTimeFormatter');
+ if ($dateOnly) {
+ return $formatter->formatDate($timestamp, 'long', $timeZone);
+ }
+ return $formatter->formatDateTime($timestamp, 'long', 'long', $timeZone);
}
/**
@@ -562,6 +572,7 @@ class OC_Util {
'classes' => array(
'ZipArchive' => 'zip',
'DOMDocument' => 'dom',
+ 'XMLWriter' => 'XMLWriter'
),
'functions' => array(
'xml_parser_create' => 'libxml',
@@ -571,7 +582,8 @@ class OC_Util {
'gd_info' => 'GD',
'gzencode' => 'zlib',
'iconv' => 'iconv',
- 'simplexml_load_string' => 'SimpleXML'
+ 'simplexml_load_string' => 'SimpleXML',
+ 'hash' => 'HASH Message Digest Framework'
),
'defined' => array(
'PDO::ATTR_DRIVER_NAME' => 'PDO'
@@ -604,34 +616,14 @@ class OC_Util {
$webServerRestart = true;
}
- if (version_compare(phpversion(), '5.3.3', '<')) {
+ if (version_compare(phpversion(), '5.4.0', '<')) {
$errors[] = array(
- 'error' => $l->t('PHP %s or higher is required.', '5.3.3'),
+ 'error' => $l->t('PHP %s or higher is required.', '5.4.0'),
'hint' => $l->t('Please ask your server administrator to update PHP to the latest version.'
. ' Your PHP version is no longer supported by ownCloud and the PHP community.')
);
$webServerRestart = true;
}
- if (((strtolower(@ini_get('safe_mode')) == 'on')
- || (strtolower(@ini_get('safe_mode')) == 'yes')
- || (strtolower(@ini_get('safe_mode')) == 'true')
- || (ini_get("safe_mode") == 1))
- ) {
- $errors[] = array(
- 'error' => $l->t('PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.'),
- 'hint' => $l->t('PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. '
- . 'Please ask your server administrator to disable it in php.ini or in your webserver config.')
- );
- $webServerRestart = true;
- }
- if (get_magic_quotes_gpc() == 1) {
- $errors[] = array(
- 'error' => $l->t('Magic Quotes is enabled. ownCloud requires that it is disabled to work properly.'),
- 'hint' => $l->t('Magic Quotes is a deprecated and mostly useless setting that should be disabled. '
- . 'Please ask your server administrator to disable it in php.ini or in your webserver config.')
- );
- $webServerRestart = true;
- }
if (!self::isAnnotationsWorking()) {
$errors[] = array(
'error' => 'PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.',
@@ -1039,6 +1031,11 @@ class OC_Util {
return true;
}
+ // php dev server does not support htaccess
+ if (php_sapi_name() === 'cli-server') {
+ return false;
+ }
+
// testdata
$fileName = '/htaccesstest.txt';
$testContent = 'testcontent';
@@ -1113,15 +1110,6 @@ class OC_Util {
}
/**
- * Check if a PHP version older then 5.3.8 is installed.
- *
- * @return bool
- */
- public static function isPHPoutdated() {
- return version_compare(phpversion(), '5.3.8', '<');
- }
-
- /**
* Check if the ownCloud server can connect to the internet
*
* @return bool
@@ -1335,7 +1323,7 @@ class OC_Util {
return false;
}
foreach (str_split($trimmed) as $char) {
- if (strpos(\OCP\FILENAME_INVALID_CHARS, $char) !== false) {
+ if (strpos(\OCP\Constants::FILENAME_INVALID_CHARS, $char) !== false) {
return false;
}
}
@@ -1379,4 +1367,5 @@ class OC_Util {
public static function isPhpCharSetUtf8() {
return ini_get('default_charset') === 'UTF-8';
}
+
}
diff --git a/lib/public/activity/iextension.php b/lib/public/activity/iextension.php
index 6bb403a8896..1b405ad8d3d 100644
--- a/lib/public/activity/iextension.php
+++ b/lib/public/activity/iextension.php
@@ -30,6 +30,13 @@
namespace OCP\Activity;
interface IExtension {
+
+ const PRIORITY_VERYLOW = 10;
+ const PRIORITY_LOW = 20;
+ const PRIORITY_MEDIUM = 30;
+ const PRIORITY_HIGH = 40;
+ const PRIORITY_VERYHIGH = 50;
+
/**
* The extension can return an array of additional notification types.
* If no additional types are to be added false is to be returned
@@ -73,6 +80,19 @@ interface IExtension {
public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode);
/**
+ * The extension can define the type of parameters for translation
+ *
+ * Currently known types are:
+ * * file => will strip away the path of the file and add a tooltip with it
+ * * username => will add the avatar of the user
+ *
+ * @param string $app
+ * @param string $text
+ * @return array|false
+ */
+ function getSpecialParameterList($app, $text);
+
+ /**
* A string naming the css class for the icon to be used can be returned.
* If no icon is known for the given type false is to be returned.
*
diff --git a/lib/public/activity/imanager.php b/lib/public/activity/imanager.php
index 0a49fdf4999..a08670be4b0 100644
--- a/lib/public/activity/imanager.php
+++ b/lib/public/activity/imanager.php
@@ -100,6 +100,13 @@ interface IManager {
function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode);
/**
+ * @param string $app
+ * @param string $text
+ * @return array|false
+ */
+ function getSpecialParameterList($app, $text);
+
+ /**
* @param string $type
* @return string
*/
diff --git a/lib/public/app/iappmanager.php b/lib/public/app/iappmanager.php
new file mode 100644
index 00000000000..ebd84a1ce9d
--- /dev/null
+++ b/lib/public/app/iappmanager.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\App;
+
+interface IAppManager {
+ /**
+ * Check if an app is enabled for user
+ *
+ * @param string $appId
+ * @param \OCP\IUser $user (optional) if not defined, the currently loggedin user will be used
+ * @return bool
+ */
+ public function isEnabledForUser($appId, $user = null);
+
+ /**
+ * Check if an app is installed in the instance
+ *
+ * @param string $appId
+ * @return bool
+ */
+ public function isInstalled($appId);
+
+ /**
+ * Enable an app for every user
+ *
+ * @param string $appId
+ */
+ public function enableApp($appId);
+
+ /**
+ * Enable an app only for specific groups
+ *
+ * @param string $appId
+ * @param \OCP\IGroup[] $groups
+ */
+ public function enableAppForGroups($appId, $groups);
+
+ /**
+ * Disable an app for every user
+ *
+ * @param string $appId
+ */
+ public function disableApp($appId);
+}
diff --git a/lib/public/appframework/app.php b/lib/public/appframework/app.php
index 21612327879..da405262aef 100644
--- a/lib/public/appframework/app.php
+++ b/lib/public/appframework/app.php
@@ -37,6 +37,22 @@ use OC\AppFramework\routing\RouteConfig;
* to be registered using IContainer::registerService
*/
class App {
+
+
+ /**
+ * Turns an app id into a namespace by convetion. The id is split at the
+ * underscores, all parts are camelcased and reassembled. e.g.:
+ * some_app_id -> OCA\SomeAppId
+ * @param string $appId the app id
+ * @param string $topNamespace the namespace which should be prepended to
+ * the transformed app id, defaults to OCA\
+ * @return string the starting namespace for the app
+ */
+ public static function buildAppNamespace($appId, $topNamespace='OCA\\') {
+ return \OC\AppFramework\App::buildAppNamespace($appId, $topNamespace);
+ }
+
+
/**
* @param array $urlParams an array with variables extracted from the routes
*/
diff --git a/lib/public/appframework/controller.php b/lib/public/appframework/controller.php
index 398304e6feb..00981df05ba 100644
--- a/lib/public/appframework/controller.php
+++ b/lib/public/appframework/controller.php
@@ -70,7 +70,7 @@ abstract class Controller {
$data->getData(),
$data->getStatus()
);
- $response->setHeaders($data->getHeaders());
+ $response->setHeaders(array_merge($data->getHeaders(), $response->getHeaders()));
return $response;
} else {
return new JSONResponse($data);
diff --git a/lib/public/appframework/http/datadownloadresponse.php b/lib/public/appframework/http/datadownloadresponse.php
new file mode 100644
index 00000000000..326be927b2e
--- /dev/null
+++ b/lib/public/appframework/http/datadownloadresponse.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * @author Georg Ehrke
+ * @copyright 2014 Georg Ehrke <georg@ownCloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCP\AppFramework\Http;
+
+class DataDownloadResponse extends DownloadResponse {
+ /**
+ * @var string
+ */
+ private $data;
+
+ /**
+ * Creates a response that prompts the user to download the text
+ * @param string $data text to be downloaded
+ * @param string $filename the name that the downloaded file should have
+ * @param string $contentType the mimetype that the downloaded file should have
+ */
+ public function __construct($data, $filename, $contentType) {
+ $this->data = $data;
+ parent::__construct($filename, $contentType);
+ }
+
+ /**
+ * @param string $data
+ */
+ public function setData($data) {
+ $this->data = $data;
+ }
+
+ /**
+ * @return string
+ */
+ public function render() {
+ return $this->data;
+ }
+}
diff --git a/lib/public/appframework/http/response.php b/lib/public/appframework/http/response.php
index 354911fee21..67e72cff6d9 100644
--- a/lib/public/appframework/http/response.php
+++ b/lib/public/appframework/http/response.php
@@ -46,8 +46,15 @@ class Response {
/**
+ * Cookies that will be need to be constructed as header
+ * @var array
+ */
+ private $cookies = array();
+
+
+ /**
* HTTP status code - defaults to STATUS OK
- * @var string
+ * @var int
*/
private $status = Http::STATUS_OK;
@@ -70,6 +77,7 @@ class Response {
* Caches the response
* @param int $cacheSeconds the amount of seconds that should be cached
* if 0 then caching will be disabled
+ * @return $this
*/
public function cacheFor($cacheSeconds) {
@@ -83,13 +91,68 @@ class Response {
return $this;
}
+ /**
+ * Adds a new cookie to the response
+ * @param string $name The name of the cookie
+ * @param string $value The value of the cookie
+ * @param \DateTime|null $expireDate Date on that the cookie should expire, if set
+ * to null cookie will be considered as session
+ * cookie.
+ * @return $this
+ */
+ public function addCookie($name, $value, \DateTime $expireDate = null) {
+ $this->cookies[$name] = array('value' => $value, 'expireDate' => $expireDate);
+ return $this;
+ }
+
+
+ /**
+ * Set the specified cookies
+ * @param array $cookies array('foo' => array('value' => 'bar', 'expire' => null))
+ * @return $this
+ */
+ public function setCookies(array $cookies) {
+ $this->cookies = $cookies;
+ return $this;
+ }
+
+
+ /**
+ * Invalidates the specified cookie
+ * @param string $name
+ * @return $this
+ */
+ public function invalidateCookie($name) {
+ $this->addCookie($name, 'expired', new \DateTime('1971-01-01 00:00'));
+ return $this;
+ }
+
+ /**
+ * Invalidates the specified cookies
+ * @param array $cookieNames array('foo', 'bar')
+ * @return $this
+ */
+ public function invalidateCookies(array $cookieNames) {
+ foreach($cookieNames as $cookieName) {
+ $this->invalidateCookie($cookieName);
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the cookies
+ * @return array
+ */
+ public function getCookies() {
+ return $this->cookies;
+ }
/**
* Adds a new header to the response that will be called before the render
* function
* @param string $name The name of the HTTP header
* @param string $value The value, null will delete it
- * @return Response Reference to this object
+ * @return $this
*/
public function addHeader($name, $value) {
$name = trim($name); // always remove leading and trailing whitespace
@@ -108,10 +171,10 @@ class Response {
/**
* Set the headers
- * @param array key value header pairs
- * @return Response Reference to this object
+ * @param array $headers value header pairs
+ * @return $this
*/
- public function setHeaders($headers) {
+ public function setHeaders(array $headers) {
$this->headers = $headers;
return $this;
diff --git a/lib/public/appframework/iapi.php b/lib/public/appframework/iapi.php
index 9af251be850..96199d90b92 100644
--- a/lib/public/appframework/iapi.php
+++ b/lib/public/appframework/iapi.php
@@ -30,6 +30,7 @@ namespace OCP\AppFramework;
/**
* A few very basic and frequently used API functions are combined in here
+ * @deprecated
*/
interface IApi {
@@ -37,12 +38,14 @@ interface IApi {
/**
* Gets the userid of the current user
* @return string the user id of the current user
+ * @deprecated Use \OC::$server->getUserSession()->getUser()->getUID()
*/
function getUserId();
/**
* Adds a new javascript file
+ * @deprecated include javascript and css in template files
* @param string $scriptName the name of the javascript in js/ without the suffix
* @param string $appName the name of the app, defaults to the current one
* @return void
@@ -52,6 +55,7 @@ interface IApi {
/**
* Adds a new css file
+ * @deprecated include javascript and css in template files
* @param string $styleName the name of the css file in css/without the suffix
* @param string $appName the name of the app, defaults to the current one
* @return void
@@ -60,6 +64,7 @@ interface IApi {
/**
+ * @deprecated include javascript and css in template files
* shorthand for addScript for files in the 3rdparty directory
* @param string $name the name of the file without the suffix
* @return void
@@ -68,6 +73,7 @@ interface IApi {
/**
+ * @deprecated include javascript and css in template files
* shorthand for addStyle for files in the 3rdparty directory
* @param string $name the name of the file without the suffix
* @return void
@@ -77,6 +83,10 @@ interface IApi {
/**
* Checks if an app is enabled
+ * @deprecated communication between apps should happen over built in
+ * callbacks or interfaces (check the contacts and calendar managers)
+ * Checks if an app is enabled
+ * also use \OC::$server->getAppManager()->isEnabledForUser($appName)
* @param string $appName the name of an app
* @return bool true if app is enabled
*/
diff --git a/lib/public/appframework/iappcontainer.php b/lib/public/appframework/iappcontainer.php
index a0b0c06881a..cb75bf4026c 100644
--- a/lib/public/appframework/iappcontainer.php
+++ b/lib/public/appframework/iappcontainer.php
@@ -31,7 +31,7 @@ use OCP\IContainer;
*
* This container interface provides short cuts for app developers to access predefined app service.
*/
-interface IAppContainer extends IContainer{
+interface IAppContainer extends IContainer {
/**
* used to return the appname of the set application
@@ -40,6 +40,7 @@ interface IAppContainer extends IContainer{
function getAppName();
/**
+ * @deprecated implements only deprecated methods
* @return IApi
*/
function getCoreApi();
@@ -56,16 +57,21 @@ interface IAppContainer extends IContainer{
function registerMiddleWare($middleWare);
/**
+ * @deprecated use IUserSession->isLoggedIn()
* @return boolean
*/
function isLoggedIn();
/**
+ * @deprecated use IGroupManager->isAdmin($userId)
* @return boolean
+ * @deprecated use the groupmanager instead to find out if the user is in
+ * the admin group
*/
function isAdminUser();
/**
+ * @deprecated use the ILogger instead
* @param string $message
* @param string $level
* @return mixed
diff --git a/lib/public/appframework/queryexception.php b/lib/public/appframework/queryexception.php
new file mode 100644
index 00000000000..f08d5b9a12f
--- /dev/null
+++ b/lib/public/appframework/queryexception.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\AppFramework;
+
+use Exception;
+
+
+class QueryException extends Exception {}
diff --git a/lib/public/appframework/utility/icontrollermethodreflector.php b/lib/public/appframework/utility/icontrollermethodreflector.php
new file mode 100644
index 00000000000..190fc15a4fe
--- /dev/null
+++ b/lib/public/appframework/utility/icontrollermethodreflector.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * ownCloud - App Framework
+ *
+ * @author Olivier Paroz <owncloud@oparoz.com>
+ * @copyright Olivier Paroz 2014
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\AppFramework\Utility;
+
+/**
+ * Interface ControllerMethodReflector
+ *
+ * Reads and parses annotations from doc comments
+ *
+ * @package OCP\AppFramework\Utility
+ */
+interface IControllerMethodReflector {
+
+ /**
+ * @param object $object an object or classname
+ * @param string $method the method which we want to inspect
+ */
+ public function reflect($object, $method);
+
+ /**
+ * Inspects the PHPDoc parameters for types
+ *
+ * @param string $parameter the parameter whose type comments should be
+ * parsed
+ * @return string|null type in the type parameters (@param int $something)
+ * would return int or null if not existing
+ */
+ public function getType($parameter);
+
+ /**
+ * @return array the arguments of the method with key => default value
+ */
+ public function getParameters();
+
+ /**
+ * Check if a method contains an annotation
+ *
+ * @param string $name the name of the annotation
+ * @return bool true if the annotation is found
+ */
+ public function hasAnnotation($name);
+
+} \ No newline at end of file
diff --git a/lib/public/appframework/utility/itimefactory.php b/lib/public/appframework/utility/itimefactory.php
new file mode 100644
index 00000000000..c661f8eb7c7
--- /dev/null
+++ b/lib/public/appframework/utility/itimefactory.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework\Utility;
+
+
+/**
+ * Needed to mock calls to time()
+ */
+interface ITimeFactory {
+
+ /**
+ * @return int the result of a call to time()
+ */
+ public function getTime();
+
+}
diff --git a/lib/public/config.php b/lib/public/config.php
index 65dde39cdce..70ff3a3fed0 100644
--- a/lib/public/config.php
+++ b/lib/public/config.php
@@ -37,6 +37,7 @@ namespace OCP;
/**
* This class provides functions to read and write configuration data.
* configuration can be on a system, application or user level
+ * @deprecated use methods of \OCP\IConfig
*/
class Config {
/**
@@ -44,12 +45,13 @@ class Config {
* @param string $key key
* @param mixed $default = null default value
* @return mixed the value or $default
+ * @deprecated use method getSystemValue of \OCP\IConfig
*
* This function gets the value from config.php. If it does not exist,
* $default will be returned.
*/
public static function getSystemValue( $key, $default = null ) {
- return \OC_Config::getValue( $key, $default );
+ return \OC::$server->getConfig()->getSystemValue( $key, $default );
}
/**
@@ -57,13 +59,14 @@ class Config {
* @param string $key key
* @param mixed $value value
* @return bool
+ * @deprecated use method setSystemValue of \OCP\IConfig
*
* This function sets the value and writes the config.php. If the file can
* not be written, false will be returned.
*/
public static function setSystemValue( $key, $value ) {
try {
- \OC_Config::setValue( $key, $value );
+ \OC::$server->getConfig()->setSystemValue( $key, $value );
} catch (\Exception $e) {
return false;
}
@@ -73,11 +76,12 @@ class Config {
/**
* Deletes a value from config.php
* @param string $key key
+ * @deprecated use method deleteSystemValue of \OCP\IConfig
*
* This function deletes the value from config.php.
*/
public static function deleteSystemValue( $key ) {
- return \OC_Config::deleteKey( $key );
+ \OC::$server->getConfig()->deleteSystemValue( $key );
}
/**
@@ -86,12 +90,13 @@ class Config {
* @param string $key key
* @param string $default = null, default value if the key does not exist
* @return string the value or $default
+ * @deprecated use method getAppValue of \OCP\IConfig
*
* This function gets a value from the appconfig table. If the key does
* not exist the default value will be returned
*/
public static function getAppValue( $app, $key, $default = null ) {
- return \OC_Appconfig::getValue( $app, $key, $default );
+ return \OC::$server->getConfig()->getAppValue( $app, $key, $default );
}
/**
@@ -100,12 +105,13 @@ class Config {
* @param string $key key
* @param string $value value
* @return boolean true/false
+ * @deprecated use method setAppValue of \OCP\IConfig
*
* Sets a value. If the key did not exist before it will be created.
*/
public static function setAppValue( $app, $key, $value ) {
try {
- \OC_Appconfig::setValue( $app, $key, $value );
+ \OC::$server->getConfig()->setAppValue( $app, $key, $value );
} catch (\Exception $e) {
return false;
}
@@ -119,12 +125,13 @@ class Config {
* @param string $key key
* @param string $default = null, default value if the key does not exist
* @return string the value or $default
+ * @deprecated use method getUserValue of \OCP\IConfig
*
* This function gets a value from the preferences table. If the key does
* not exist the default value will be returned
*/
public static function getUserValue( $user, $app, $key, $default = null ) {
- return \OC_Preferences::getValue( $user, $app, $key, $default );
+ return \OC::$server->getConfig()->getUserValue( $user, $app, $key, $default );
}
/**
@@ -134,13 +141,14 @@ class Config {
* @param string $key key
* @param string $value value
* @return bool
+ * @deprecated use method setUserValue of \OCP\IConfig
*
* Adds a value to the preferences. If the key did not exist before, it
* will be added automagically.
*/
public static function setUserValue( $user, $app, $key, $value ) {
try {
- \OC_Preferences::setValue( $user, $app, $key, $value );
+ \OC::$server->getConfig()->setUserValue( $user, $app, $key, $value );
} catch (\Exception $e) {
return false;
}
diff --git a/lib/public/constants.php b/lib/public/constants.php
index 350646a0ac0..78cafd11847 100644
--- a/lib/public/constants.php
+++ b/lib/public/constants.php
@@ -26,15 +26,37 @@
namespace OCP;
-/**
- * CRUDS permissions.
- */
+/** @deprecated Use \OCP\Constants::PERMISSION_CREATE instead */
const PERMISSION_CREATE = 4;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_READ instead */
const PERMISSION_READ = 1;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_UPDATE instead */
const PERMISSION_UPDATE = 2;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_DELETE instead */
const PERMISSION_DELETE = 8;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_SHARE instead */
const PERMISSION_SHARE = 16;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_ALL instead */
const PERMISSION_ALL = 31;
+/** @deprecated Use \OCP\Constants::FILENAME_INVALID_CHARS instead */
const FILENAME_INVALID_CHARS = "\\/<>:\"|?*\n";
+class Constants {
+ /**
+ * CRUDS permissions.
+ */
+ const PERMISSION_CREATE = 4;
+ const PERMISSION_READ = 1;
+ const PERMISSION_UPDATE = 2;
+ const PERMISSION_DELETE = 8;
+ const PERMISSION_SHARE = 16;
+ const PERMISSION_ALL = 31;
+
+ const FILENAME_INVALID_CHARS = "\\/<>:\"|?*\n";
+}
diff --git a/lib/public/defaults.php b/lib/public/defaults.php
index 662071a29a9..315cf547385 100644
--- a/lib/public/defaults.php
+++ b/lib/public/defaults.php
@@ -144,4 +144,12 @@ class Defaults {
public function getLongFooter() {
return $this->defaults->getLongFooter();
}
+
+ /**
+ * Returns the AppId for the App Store for the iOS Client
+ * @return string AppId
+ */
+ public function getiTunesAppId() {
+ return $this->defaults->getiTunesAppId();
+ }
}
diff --git a/lib/public/files/config/imountprovider.php b/lib/public/files/config/imountprovider.php
new file mode 100644
index 00000000000..5a39e6c8948
--- /dev/null
+++ b/lib/public/files/config/imountprovider.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files\Config;
+
+use OCP\Files\Storage\IStorageFactory;
+use OCP\IUser;
+
+/**
+ * Provides
+ */
+interface IMountProvider {
+ /**
+ * Get all mountpoints applicable for the user
+ *
+ * @param \OCP\IUser $user
+ * @param \OCP\Files\Storage\IStorageFactory $loader
+ * @return \OCP\Files\Mount\IMountPoint[]
+ */
+ public function getMountsForUser(IUser $user, IStorageFactory $loader);
+}
diff --git a/lib/public/files/config/imountprovidercollection.php b/lib/public/files/config/imountprovidercollection.php
new file mode 100644
index 00000000000..52797414ab9
--- /dev/null
+++ b/lib/public/files/config/imountprovidercollection.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files\Config;
+
+use OCP\IUser;
+
+/**
+ * Manages the different mount providers
+ */
+interface IMountProviderCollection {
+ /**
+ * Get all configured mount points for the user
+ *
+ * @param \OCP\IUser $user
+ * @return \OCP\Files\Mount\IMountPoint[]
+ */
+ public function getMountsForUser(IUser $user);
+
+ /**
+ * Add a provider for mount points
+ *
+ * @param \OCP\Files\Config\IMountProvider $provider
+ */
+ public function registerProvider(IMountProvider $provider);
+}
diff --git a/lib/public/files/fileinfo.php b/lib/public/files/fileinfo.php
index ec81a541564..ec68ed475c5 100644
--- a/lib/public/files/fileinfo.php
+++ b/lib/public/files/fileinfo.php
@@ -103,12 +103,12 @@ interface FileInfo {
/**
* Get the permissions of the file or folder as bitmasked combination of the following constants
- * \OCP\PERMISSION_CREATE
- * \OCP\PERMISSION_READ
- * \OCP\PERMISSION_UPDATE
- * \OCP\PERMISSION_DELETE
- * \OCP\PERMISSION_SHARE
- * \OCP\PERMISSION_ALL
+ * \OCP\Constants::PERMISSION_CREATE
+ * \OCP\Constants::PERMISSION_READ
+ * \OCP\Constants::PERMISSION_UPDATE
+ * \OCP\Constants::PERMISSION_DELETE
+ * \OCP\Constants::PERMISSION_SHARE
+ * \OCP\Constants::PERMISSION_ALL
*
* @return int
*/
@@ -169,4 +169,11 @@ interface FileInfo {
* @return bool
*/
public function isMounted();
+
+ /**
+ * Get the mountpoint the file belongs to
+ *
+ * @return \OCP\Files\Mount\IMountPoint
+ */
+ public function getMountPoint();
}
diff --git a/lib/public/files/folder.php b/lib/public/files/folder.php
index 7fec1c529a5..9797fbc46ed 100644
--- a/lib/public/files/folder.php
+++ b/lib/public/files/folder.php
@@ -117,6 +117,15 @@ interface Folder extends Node {
public function searchByMime($mimetype);
/**
+ * search for files by tag
+ *
+ * @param string|int $tag tag name or tag id
+ * @param string $userId owner of the tags
+ * @return \OCP\Files\Node[]
+ */
+ public function searchByTag($tag, $userId);
+
+ /**
* get a file or folder inside the folder by it's internal id
*
* @param int $id
diff --git a/lib/public/files/ihomestorage.php b/lib/public/files/ihomestorage.php
new file mode 100644
index 00000000000..717ef946750
--- /dev/null
+++ b/lib/public/files/ihomestorage.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2012 Robin Appelman icewind@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Public interface of ownCloud for apps to use.
+ * Files/Storage interface
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP\Files;
+
+interface IHomeStorage {
+
+}
diff --git a/lib/public/files/irootfolder.php b/lib/public/files/irootfolder.php
new file mode 100644
index 00000000000..a34f64f81ed
--- /dev/null
+++ b/lib/public/files/irootfolder.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bernhard Posselt
+ * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\Files;
+
+use OC\Hooks\Emitter;
+
+
+interface IRootFolder extends Folder, Emitter {
+
+}
+
diff --git a/lib/public/files/mount/imountpoint.php b/lib/public/files/mount/imountpoint.php
new file mode 100644
index 00000000000..af7819ae160
--- /dev/null
+++ b/lib/public/files/mount/imountpoint.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files\Mount;
+
+/**
+ * A storage mounted to folder on the filesystem
+ */
+interface IMountPoint {
+
+ /**
+ * get complete path to the mount point
+ *
+ * @return string
+ */
+ public function getMountPoint();
+
+ /**
+ * Set the mountpoint
+ *
+ * @param string $mountPoint new mount point
+ */
+ public function setMountPoint($mountPoint);
+
+ /**
+ * Get the storage that is mounted
+ *
+ * @return \OC\Files\Storage\Storage
+ */
+ public function getStorage();
+
+ /**
+ * Get the id of the storages
+ *
+ * @return string
+ */
+ public function getStorageId();
+
+ /**
+ * Get the path relative to the mountpoint
+ *
+ * @param string $path absolute path to a file or folder
+ * @return string
+ */
+ public function getInternalPath($path);
+
+ /**
+ * Apply a storage wrapper to the mounted storage
+ *
+ * @param callable $wrapper
+ */
+ public function wrapStorage($wrapper);
+
+ /**
+ * Get a mount option
+ *
+ * @param string $name Name of the mount option to get
+ * @param mixed $default Default value for the mount option
+ * @return mixed
+ */
+ public function getOption($name, $default);
+}
diff --git a/lib/public/files/node.php b/lib/public/files/node.php
index a380394095b..35c20b487c9 100644
--- a/lib/public/files/node.php
+++ b/lib/public/files/node.php
@@ -128,11 +128,11 @@ interface Node {
/**
* Get the permissions of the file or folder as a combination of one or more of the following constants:
- * - \OCP\PERMISSION_READ
- * - \OCP\PERMISSION_UPDATE
- * - \OCP\PERMISSION_CREATE
- * - \OCP\PERMISSION_DELETE
- * - \OCP\PERMISSION_SHARE
+ * - \OCP\Constants::PERMISSION_READ
+ * - \OCP\Constants::PERMISSION_UPDATE
+ * - \OCP\Constants::PERMISSION_CREATE
+ * - \OCP\Constants::PERMISSION_DELETE
+ * - \OCP\Constants::PERMISSION_SHARE
*
* @return int
*/
diff --git a/lib/public/files/storage.php b/lib/public/files/storage.php
index 8f8d7852ee4..36d5b800df6 100644
--- a/lib/public/files/storage.php
+++ b/lib/public/files/storage.php
@@ -335,8 +335,14 @@ interface Storage {
* @return bool
*/
public function instanceOfStorage($class);
-}
-
-interface IHomeStorage {
+ /**
+ * A custom storage implementation can return an url for direct download of a give file.
+ *
+ * For now the returned array can hold the parameter url - in future more attributes might follow.
+ *
+ * @param string $path
+ * @return array
+ */
+ public function getDirectDownload($path);
}
diff --git a/lib/public/files/storage/istoragefactory.php b/lib/public/files/storage/istoragefactory.php
new file mode 100644
index 00000000000..769d7011de4
--- /dev/null
+++ b/lib/public/files/storage/istoragefactory.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files\Storage;
+
+/**
+ * Creates storage instances and manages and applies storage wrappers
+ */
+interface IStorageFactory {
+ /**
+ * allow modifier storage behaviour by adding wrappers around storages
+ *
+ * $callback should be a function of type (string $mountPoint, Storage $storage) => Storage
+ *
+ * @param string $wrapperName
+ * @param callable $callback
+ */
+ public function addStorageWrapper($wrapperName, $callback);
+
+ /**
+ * @param string|boolean $mountPoint
+ * @param string $class
+ * @param array $arguments
+ * @return \OCP\Files\Storage
+ */
+ public function getInstance($mountPoint, $class, $arguments);
+}
diff --git a/lib/public/iappconfig.php b/lib/public/iappconfig.php
index d43eb70ee04..cbd1a7e0573 100644
--- a/lib/public/iappconfig.php
+++ b/lib/public/iappconfig.php
@@ -26,6 +26,7 @@ interface IAppConfig {
* @param string $key key
* @param string $default = null, default value if the key does not exist
* @return string the value or $default
+ * @deprecated use method getAppValue of \OCP\IConfig
*
* This function gets a value from the appconfig table. If the key does
* not exist the default value will be returned
@@ -37,8 +38,7 @@ interface IAppConfig {
* @param string $app app
* @param string $key key
* @return bool
- *
- * Deletes a key.
+ * @deprecated use method deleteAppValue of \OCP\IConfig
*/
public function deleteKey($app, $key);
@@ -46,6 +46,7 @@ interface IAppConfig {
* Get the available keys for an app
* @param string $app the app we are looking for
* @return array an array of key names
+ * @deprecated use method getAppKeys of \OCP\IConfig
*
* This function gets all keys of an app. Please note that the values are
* not returned.
@@ -66,6 +67,7 @@ interface IAppConfig {
* @param string $app app
* @param string $key key
* @param string $value value
+ * @deprecated use method setAppValue of \OCP\IConfig
*
* Sets a value. If the key did not exist before it will be created.
* @return void
@@ -85,6 +87,7 @@ interface IAppConfig {
* Remove app from appconfig
* @param string $app app
* @return bool
+ * @deprecated use method deleteAppValue of \OCP\IConfig
*
* Removes all keys in appconfig belonging to the app.
*/
diff --git a/lib/public/iavatar.php b/lib/public/iavatar.php
index 1e80682c4f7..213d2e6cef5 100644
--- a/lib/public/iavatar.php
+++ b/lib/public/iavatar.php
@@ -23,9 +23,9 @@ interface IAvatar {
/**
* sets the users avatar
* @param Image $data mixed imagedata or path to set a new avatar
- * @throws Exception if the provided file is not a jpg or png image
- * @throws Exception if the provided image is not valid
- * @throws \OCP\NotSquareException if the image is not square
+ * @throws \Exception if the provided file is not a jpg or png image
+ * @throws \Exception if the provided image is not valid
+ * @throws \OC\NotSquareException if the image is not square
* @return void
*/
function set($data);
diff --git a/lib/public/iconfig.php b/lib/public/iconfig.php
index 554fee5b22f..a1952ef8f84 100644
--- a/lib/public/iconfig.php
+++ b/lib/public/iconfig.php
@@ -94,6 +94,13 @@ interface IConfig {
*/
public function deleteAppValue($appName, $key);
+ /**
+ * Removes all keys in appconfig belonging to the app
+ *
+ * @param string $appName the appName the configs are stored under
+ */
+ public function deleteAppValues($appName);
+
/**
* Set a user defined value
@@ -102,9 +109,10 @@ interface IConfig {
* @param string $appName the appName that we want to store the value under
* @param string $key the key under which the value is being stored
* @param string $value the value that you want to store
- * @return void
+ * @param string $preCondition only update if the config value was previously the value passed as $preCondition
+ * @throws \OCP\PreConditionNotMetException if a precondition is specified and is not met
*/
- public function setUserValue($userId, $appName, $key, $value);
+ public function setUserValue($userId, $appName, $key, $value, $preCondition = null);
/**
* Shortcut for getting a user defined value
@@ -118,6 +126,16 @@ interface IConfig {
public function getUserValue($userId, $appName, $key, $default = '');
/**
+ * Fetches a mapped list of userId -> value, for a specified app and key and a list of user IDs.
+ *
+ * @param string $appName app to get the value for
+ * @param string $key the key to get the value for
+ * @param array $userIds the user IDs to fetch the values for
+ * @return array Mapped values: userId => value
+ */
+ public function getUserValueForUsers($appName, $key, $userIds);
+
+ /**
* Get the keys of all stored by an app for the user
*
* @param string $userId the userId of the user that we want to store the value under
@@ -134,4 +152,28 @@ interface IConfig {
* @param string $key the key under which the value is being stored
*/
public function deleteUserValue($userId, $appName, $key);
+
+ /**
+ * Delete all user values
+ *
+ * @param string $userId the userId of the user that we want to remove all values from
+ */
+ public function deleteAllUserValues($userId);
+
+ /**
+ * Delete all user related values of one app
+ *
+ * @param string $appName the appName of the app that we want to remove all values from
+ */
+ public function deleteAppFromAllUsers($appName);
+
+ /**
+ * Determines the users that have the given value set for a specific app-key-pair
+ *
+ * @param string $appName the app to get the user for
+ * @param string $key the key to get the user for
+ * @param string $value the value to get the user for
+ * @return array of user IDs
+ */
+ public function getUsersForUserValue($appName, $key, $value);
}
diff --git a/lib/public/idatetimeformatter.php b/lib/public/idatetimeformatter.php
new file mode 100644
index 00000000000..b72638ad6cd
--- /dev/null
+++ b/lib/public/idatetimeformatter.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Joas Schilling
+ * @copyright 2014 Joas Schilling nickvergessen@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP;
+
+interface IDateTimeFormatter {
+ /**
+ * Formats the date of the given timestamp
+ *
+ * @param int|\DateTime $timestamp
+ * @param string $format Either 'full', 'long', 'medium' or 'short'
+ * full: e.g. 'EEEE, MMMM d, y' => 'Wednesday, August 20, 2014'
+ * long: e.g. 'MMMM d, y' => 'August 20, 2014'
+ * medium: e.g. 'MMM d, y' => 'Aug 20, 2014'
+ * short: e.g. 'M/d/yy' => '8/20/14'
+ * The exact format is dependent on the language
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted date string
+ */
+ public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null);
+
+ /**
+ * Formats the date of the given timestamp
+ *
+ * @param int|\DateTime $timestamp
+ * @param string $format Either 'full', 'long', 'medium' or 'short'
+ * full: e.g. 'EEEE, MMMM d, y' => 'Wednesday, August 20, 2014'
+ * long: e.g. 'MMMM d, y' => 'August 20, 2014'
+ * medium: e.g. 'MMM d, y' => 'Aug 20, 2014'
+ * short: e.g. 'M/d/yy' => '8/20/14'
+ * The exact format is dependent on the language
+ * Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted relative date string
+ */
+ public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null);
+
+ /**
+ * Gives the relative date of the timestamp
+ * Only works for past dates
+ *
+ * @param int|\DateTime $timestamp
+ * @param int|\DateTime $baseTimestamp Timestamp to compare $timestamp against, defaults to current time
+ * @return string Dates returned are:
+ * < 1 month => Today, Yesterday, n days ago
+ * < 13 month => last month, n months ago
+ * >= 13 month => last year, n years ago
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted date span
+ */
+ public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null);
+
+ /**
+ * Formats the time of the given timestamp
+ *
+ * @param int|\DateTime $timestamp
+ * @param string $format Either 'full', 'long', 'medium' or 'short'
+ * full: e.g. 'h:mm:ss a zzzz' => '11:42:13 AM GMT+0:00'
+ * long: e.g. 'h:mm:ss a z' => '11:42:13 AM GMT'
+ * medium: e.g. 'h:mm:ss a' => '11:42:13 AM'
+ * short: e.g. 'h:mm a' => '11:42 AM'
+ * The exact format is dependent on the language
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted time string
+ */
+ public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null);
+
+ /**
+ * Gives the relative past time of the timestamp
+ *
+ * @param int|\DateTime $timestamp
+ * @param int|\DateTime $baseTimestamp Timestamp to compare $timestamp against, defaults to current time
+ * @return string Dates returned are:
+ * < 60 sec => seconds ago
+ * < 1 hour => n minutes ago
+ * < 1 day => n hours ago
+ * < 1 month => Yesterday, n days ago
+ * < 13 month => last month, n months ago
+ * >= 13 month => last year, n years ago
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted time span
+ */
+ public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null);
+
+ /**
+ * Formats the date and time of the given timestamp
+ *
+ * @param int|\DateTime $timestamp
+ * @param string $formatDate See formatDate() for description
+ * @param string $formatTime See formatTime() for description
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted date and time string
+ */
+ public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null);
+
+ /**
+ * Formats the date and time of the given timestamp
+ *
+ * @param int|\DateTime $timestamp
+ * @param string $formatDate See formatDate() for description
+ * Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
+ * @param string $formatTime See formatTime() for description
+ * @param \DateTimeZone $timeZone The timezone to use
+ * @param \OCP\IL10N $l The locale to use
+ * @return string Formatted relative date and time string
+ */
+ public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null);
+}
diff --git a/lib/public/idatetimezone.php b/lib/public/idatetimezone.php
new file mode 100644
index 00000000000..fb4c89538d5
--- /dev/null
+++ b/lib/public/idatetimezone.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Joas Schilling
+ * @copyright 2014 Joas Schilling nickvergessen@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP;
+
+
+interface IDateTimeZone {
+ /**
+ * @return \DateTimeZone
+ */
+ public function getTimeZone();
+}
diff --git a/lib/public/idbconnection.php b/lib/public/idbconnection.php
index ce17d293e86..0d19b2cc71e 100644
--- a/lib/public/idbconnection.php
+++ b/lib/public/idbconnection.php
@@ -80,6 +80,7 @@ interface IDBConnection {
* Insert a row if a matching row doesn't exists.
* @param string $table The table name (will replace *PREFIX*) to perform the replace on.
* @param array $input
+ * @throws \OC\HintException
*
* The input array if in the form:
*
@@ -158,4 +159,19 @@ interface IDBConnection {
* @return \Doctrine\DBAL\Platforms\AbstractPlatform The database platform.
*/
public function getDatabasePlatform();
+
+ /**
+ * Drop a table from the database if it exists
+ *
+ * @param string $table table name without the prefix
+ */
+ public function dropTable($table);
+
+ /**
+ * Check if a table exists
+ *
+ * @param string $table table name without the prefix
+ * @return bool
+ */
+ public function tableExists($table);
}
diff --git a/lib/public/igroupmanager.php b/lib/public/igroupmanager.php
index dc69044c490..8f468574c6b 100644
--- a/lib/public/igroupmanager.php
+++ b/lib/public/igroupmanager.php
@@ -80,4 +80,19 @@ interface IGroupManager {
* @return array an array of display names (value) and user ids (key)
*/
public function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0);
+
+ /**
+ * Checks if a userId is in the admin group
+ * @param string $userId
+ * @return bool if admin
+ */
+ public function isAdmin($userId);
+
+ /**
+ * Checks if a userId is in a group
+ * @param string $userId
+ * @param group $group
+ * @return bool if in group
+ */
+ public function isInGroup($userId, $group);
}
diff --git a/lib/public/isearch.php b/lib/public/isearch.php
index 3b83dbf35e8..fe58f202d66 100644
--- a/lib/public/isearch.php
+++ b/lib/public/isearch.php
@@ -32,16 +32,28 @@ interface ISearch {
/**
* Search all providers for $query
* @param string $query
+ * @param string[] $inApps optionally limit results to the given apps
* @return array An array of OCP\Search\Result's
+ * @deprecated use searchPaged() with page and size
*/
- public function search($query);
+ public function search($query, array $inApps = array());
+
+ /**
+ * Search all providers for $query
+ * @param string $query
+ * @param string[] $inApps optionally limit results to the given apps
+ * @param int $page pages start at page 1
+ * @param int $size
+ * @return array An array of OCP\Search\Result's
+ */
+ public function searchPaged($query, array $inApps = array(), $page = 1, $size = 30);
/**
* Register a new search provider to search with
* @param string $class class name of a OCP\Search\Provider
* @param array $options optional
*/
- public function registerProvider($class, $options = array());
+ public function registerProvider($class, array $options = array());
/**
* Remove one existing search provider
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index c1592551978..193e2fdf105 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -128,6 +128,19 @@ interface IServerContainer {
*/
function getConfig();
+ /**
+ * Returns a Crypto instance
+ *
+ * @return \OCP\Security\ICrypto
+ */
+ function getCrypto();
+
+ /**
+ * Returns a Hasher instance
+ *
+ * @return \OCP\Security\IHasher
+ */
+ function getHasher();
/**
* Returns an instance of the db facade
@@ -215,6 +228,13 @@ interface IServerContainer {
function getJobList();
/**
+ * Returns a logger instance
+ *
+ * @return \OCP\ILogger
+ */
+ function getLogger();
+
+ /**
* Returns a router for generating and matching urls
*
* @return \OCP\Route\IRouter
@@ -271,4 +291,30 @@ interface IServerContainer {
* @return \OCP\ITempManager
*/
function getTempManager();
+
+ /**
+ * Get the app manager
+ *
+ * @return \OCP\App\IAppManager
+ */
+ function getAppManager();
+
+ /**
+ * Get the webroot
+ *
+ * @return string
+ */
+ function getWebRoot();
+
+ /**
+ * @return \OCP\Files\Config\IMountProviderCollection
+ */
+ function getMountProviderCollection();
+
+ /**
+ * Get the IniWrapper
+ *
+ * @return \bantu\IniGetWrapper\IniGetWrapper
+ */
+ function getIniWrapper();
}
diff --git a/lib/public/itagmanager.php b/lib/public/itagmanager.php
index 54daa5cc1cb..ac80eebc72d 100644
--- a/lib/public/itagmanager.php
+++ b/lib/public/itagmanager.php
@@ -43,14 +43,15 @@ namespace OCP;
interface ITagManager {
/**
- * Create a new \OCP\ITags instance and load tags from db.
+ * Create a new \OCP\ITags instance and load tags from db for the current user.
*
* @see \OCP\ITags
* @param string $type The type identifier e.g. 'contact' or 'event'.
* @param array $defaultTags An array of default tags to be used if none are stored.
* @param boolean $includeShared Whether to include tags for items shared with this user by others.
+ * @param string $userId user for which to retrieve the tags, defaults to the currently
+ * logged in user
* @return \OCP\ITags
*/
- public function load($type, $defaultTags=array(), $includeShared=false);
-
+ public function load($type, $defaultTags = array(), $includeShared = false, $userId = null);
}
diff --git a/lib/public/itags.php b/lib/public/itags.php
index 4514746bbe8..238b12c6424 100644
--- a/lib/public/itags.php
+++ b/lib/public/itags.php
@@ -76,7 +76,23 @@ interface ITags {
public function getTags();
/**
- * Get the a list if items tagged with $tag.
+ * Get a list of tags for the given item ids.
+ *
+ * This returns an array with object id / tag names:
+ * [
+ * 1 => array('First tag', 'Second tag'),
+ * 2 => array('Second tag'),
+ * 3 => array('Second tag', 'Third tag'),
+ * ]
+ *
+ * @param array $objIds item ids
+ * @return array|boolean with object id as key and an array
+ * of tag names as value or false if an error occurred
+ */
+ public function getTagsForObjects(array $objIds);
+
+ /**
+ * Get a list of items tagged with $tag.
*
* Throws an exception if the tag could not be found.
*
diff --git a/lib/public/iurlgenerator.php b/lib/public/iurlgenerator.php
index dbbd8a3bb63..fa817c10ea5 100644
--- a/lib/public/iurlgenerator.php
+++ b/lib/public/iurlgenerator.php
@@ -69,8 +69,14 @@ interface IURLGenerator {
/**
* Makes an URL absolute
- * @param string $url the url in the owncloud host
+ * @param string $url the url in the ownCloud host
* @return string the absolute version of the url
*/
public function getAbsoluteURL($url);
+
+ /**
+ * @param string $key
+ * @return string url to the online documentation
+ */
+ public function linkToDocs($key);
}
diff --git a/lib/public/iuser.php b/lib/public/iuser.php
index c15edcd14dd..b288c61df5e 100644
--- a/lib/public/iuser.php
+++ b/lib/public/iuser.php
@@ -69,6 +69,13 @@ interface IUser {
public function getHome();
/**
+ * Get the name of the backend class the user is connected with
+ *
+ * @return string
+ */
+ public function getBackendClassName();
+
+ /**
* check if the backend allows the user to change his avatar on Personal page
*
* @return bool
diff --git a/lib/public/iuserbackend.php b/lib/public/iuserbackend.php
new file mode 100644
index 00000000000..79b5740ee93
--- /dev/null
+++ b/lib/public/iuserbackend.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2014 Morris Jobke <hey@morrisjobke.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Public interface of ownCloud for apps to use.
+ * User Interface version 2
+ *
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+interface IUserBackend {
+
+ /**
+ * Backend name to be shown in user management
+ * @return string the name of the backend to be shown
+ */
+ public function getBackendName();
+
+}
diff --git a/lib/public/iusermanager.php b/lib/public/iusermanager.php
index fc0729b860b..1691aee8e7d 100644
--- a/lib/public/iusermanager.php
+++ b/lib/public/iusermanager.php
@@ -32,6 +32,12 @@ interface IUserManager {
public function registerBackend($backend);
/**
+ * Get the active backends
+ * @return \OCP\UserInterface[]
+ */
+ public function getBackends();
+
+ /**
* remove a user backend
*
* @param \OCP\UserInterface $backend
diff --git a/lib/public/iusersession.php b/lib/public/iusersession.php
index db4abe150d2..7128366590f 100644
--- a/lib/public/iusersession.php
+++ b/lib/public/iusersession.php
@@ -3,7 +3,9 @@
* ownCloud
*
* @author Bart Visscher
+ * @author Bernhard Posselt
* @copyright 2013 Bart Visscher bartv@thisnet.nl
+ * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -59,7 +61,14 @@ interface IUserSession {
/**
* get the current active user
*
- * @return \OCP\IUser
+ * @return \OCP\IUser|null Current user, otherwise null
*/
public function getUser();
+
+ /**
+ * Checks whether the user is logged in
+ *
+ * @return bool if logged in
+ */
+ public function isLoggedIn();
}
diff --git a/lib/public/preconditionnotmetexception.php b/lib/public/preconditionnotmetexception.php
new file mode 100644
index 00000000000..ceba01a0b4b
--- /dev/null
+++ b/lib/public/preconditionnotmetexception.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Morris Jobke
+ * @copyright 2014 Morris Jobke <hey@morrisjobke.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * Exception if the precondition of the config update method isn't met
+ */
+class PreConditionNotMetException extends \Exception {}
diff --git a/lib/public/search/pagedprovider.php b/lib/public/search/pagedprovider.php
new file mode 100644
index 00000000000..55771762e68
--- /dev/null
+++ b/lib/public/search/pagedprovider.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * ownCloud
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Search;
+
+/**
+ * Provides a template for search functionality throughout ownCloud;
+ */
+abstract class PagedProvider extends Provider {
+
+ /**
+ * show all results
+ */
+ const SIZE_ALL = 0;
+
+ /**
+ * Constructor
+ * @param array $options
+ */
+ public function __construct($options) {
+ $this->options = $options;
+ }
+
+ /**
+ * Search for $query
+ * @param string $query
+ * @return array An array of OCP\Search\Result's
+ */
+ public function search($query) {
+ // old apps might assume they get all results, so we use SIZE_ALL
+ $this->searchPaged($query, 1, self::SIZE_ALL);
+ }
+
+ /**
+ * Search for $query
+ * @param string $query
+ * @param int $page pages start at page 1
+ * @param int $size, 0 = SIZE_ALL
+ * @return array An array of OCP\Search\Result's
+ */
+ abstract public function searchPaged($query, $page, $size);
+}
diff --git a/lib/public/search/provider.php b/lib/public/search/provider.php
index 0506f091dd9..c9ef173d363 100644
--- a/lib/public/search/provider.php
+++ b/lib/public/search/provider.php
@@ -24,21 +24,49 @@ namespace OCP\Search;
*/
abstract class Provider {
+ const OPTION_APPS = 'apps';
+
/**
- * List of options (currently unused)
+ * List of options
* @var array
*/
- private $options;
+ protected $options;
/**
* Constructor
- * @param array $options
+ * @param array $options as key => value
*/
- public function __construct($options) {
+ public function __construct($options = array()) {
$this->options = $options;
}
/**
+ * get a value from the options array or null
+ * @param string $key
+ * @return mixed
+ */
+ public function getOption($key) {
+ if (is_array($this->options) && isset($this->options[$key])) {
+ return $this->options[$key];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * checks if the given apps and the apps this provider has results for intersect
+ * returns true if the given array is empty (all apps)
+ * or if this provider does not have a list of apps it provides results for (legacy search providers)
+ * or if the two above arrays have elements in common (intersect)
+ * @param string[] $apps
+ * @return bool
+ */
+ public function providesResultsFor(array $apps = array()) {
+ $forApps = $this->getOption(self::OPTION_APPS);
+ return empty($apps) || empty($forApps) || array_intersect($forApps, $apps);
+ }
+
+ /**
* Search for $query
* @param string $query
* @return array An array of OCP\Search\Result's
diff --git a/lib/public/security/ihasher.php b/lib/public/security/ihasher.php
new file mode 100644
index 00000000000..75900fb55ac
--- /dev/null
+++ b/lib/public/security/ihasher.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Security;
+
+/**
+ * Class Hasher provides some basic hashing functions. Furthermore, it supports legacy hashes
+ * used by previous versions of ownCloud and helps migrating those hashes to newer ones.
+ *
+ * The hashes generated by this class are prefixed (version|hash) with a version parameter to allow possible
+ * updates in the future.
+ * Possible versions:
+ * - 1 (Initial version)
+ *
+ * Usage:
+ * // Hashing a message
+ * $hash = \OC::$server->getHasher()->hash('MessageToHash');
+ * // Verifying a message - $newHash will contain the newly calculated hash
+ * $newHash = null;
+ * var_dump(\OC::$server->getHasher()->verify('a', '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8', $newHash));
+ * var_dump($newHash);
+ *
+ * @package OCP\Security
+ */
+interface IHasher {
+ /**
+ * Hashes a message using PHP's `password_hash` functionality.
+ * Please note that the size of the returned string is not guaranteed
+ * and can be up to 255 characters.
+ *
+ * @param string $message Message to generate hash from
+ * @return string Hash of the message with appended version parameter
+ */
+ public function hash($message);
+
+ /**
+ * @param string $message Message to verify
+ * @param string $hash Assumed hash of the message
+ * @param null|string &$newHash Reference will contain the updated hash if necessary. Update the existing hash with this one.
+ * @return bool Whether $hash is a valid hash of $message
+ */
+ public function verify($message, $hash, &$newHash = null);
+}
diff --git a/lib/public/share.php b/lib/public/share.php
index 449d1fa211e..60e5a6fd85b 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -125,11 +125,12 @@ class Share extends \OC\Share\Constants {
* Get the item of item type shared with a given user by source
* @param string $itemType
* @param string $itemSource
- * @param string $user User user to whom the item was shared
+ * @param string $user User to whom the item was shared
+ * @param string $owner Owner of the share
* @return array Return list of items with file_target, permissions and expiration
*/
- public static function getItemSharedWithUser($itemType, $itemSource, $user) {
- return \OC\Share\Share::getItemSharedWithUser($itemType, $itemSource, $user);
+ public static function getItemSharedWithUser($itemType, $itemSource, $user, $owner = null) {
+ return \OC\Share\Share::getItemSharedWithUser($itemType, $itemSource, $user, $owner);
}
/**
@@ -241,10 +242,11 @@ class Share extends \OC\Share\Constants {
* @param string $itemSource
* @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
* @param string $shareWith User or group the item is being shared with
+ * @param string $owner owner of the share, if null the current user is used
* @return boolean true on success or false on failure
*/
- public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
- return \OC\Share\Share::unshare($itemType, $itemSource, $shareType, $shareWith);
+ public static function unshare($itemType, $itemSource, $shareType, $shareWith, $owner = null) {
+ return \OC\Share\Share::unshare($itemType, $itemSource, $shareType, $shareWith, $owner);
}
/**
@@ -341,86 +343,3 @@ class Share extends \OC\Share\Constants {
return \OC\Share\Share::isResharingAllowed();
}
}
-
-/**
- * Interface that apps must implement to share content.
- */
-interface Share_Backend {
-
- /**
- * Check if this $itemSource exist for the user
- * @param string $itemSource
- * @param string $uidOwner Owner of the item
- * @return boolean|null Source
- *
- * Return false if the item does not exist for the user
- */
- public function isValidSource($itemSource, $uidOwner);
-
- /**
- * Get a unique name of the item for the specified user
- * @param string $itemSource
- * @param string|false $shareWith User the item is being shared with
- * @param array|null $exclude List of similar item names already existing as shared items @deprecated since version OC7
- * @return string Target name
- *
- * This function needs to verify that the user does not already have an item with this name.
- * If it does generate a new name e.g. name_#
- */
- public function generateTarget($itemSource, $shareWith, $exclude = null);
-
- /**
- * Converts the shared item sources back into the item in the specified format
- * @param array $items Shared items
- * @param int $format
- * @return TODO
- *
- * The items array is a 3-dimensional array with the item_source as the
- * first key and the share id as the second key to an array with the share
- * info.
- *
- * The key/value pairs included in the share info depend on the function originally called:
- * If called by getItem(s)Shared: id, item_type, item, item_source,
- * share_type, share_with, permissions, stime, file_source
- *
- * If called by getItem(s)SharedWith: id, item_type, item, item_source,
- * item_target, share_type, share_with, permissions, stime, file_source,
- * file_target
- *
- * This function allows the backend to control the output of shared items with custom formats.
- * It is only called through calls to the public getItem(s)Shared(With) functions.
- */
- public function formatItems($items, $format, $parameters = null);
-
-}
-
-/**
- * Interface for share backends that share content that is dependent on files.
- * Extends the Share_Backend interface.
- */
-interface Share_Backend_File_Dependent extends Share_Backend {
-
- /**
- * Get the file path of the item
- * @param string $itemSource
- * @param string $uidOwner User that is the owner of shared item
- * @return string|false
- */
- public function getFilePath($itemSource, $uidOwner);
-
-}
-
-/**
- * Interface for collections of of items implemented by another share backend.
- * Extends the Share_Backend interface.
- */
-interface Share_Backend_Collection extends Share_Backend {
-
- /**
- * Get the sources of the children of the item
- * @param string $itemSource
- * @return array Returns an array of children each inside an array with the keys: source, target, and file_path if applicable
- */
- public function getChildren($itemSource);
-
-}
diff --git a/lib/public/share_backend.php b/lib/public/share_backend.php
new file mode 100644
index 00000000000..1ae63d4c1db
--- /dev/null
+++ b/lib/public/share_backend.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle, Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski <mtgap@owncloud.com>
+ * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * Interface that apps must implement to share content.
+ */
+interface Share_Backend {
+
+ /**
+ * Check if this $itemSource exist for the user
+ * @param string $itemSource
+ * @param string $uidOwner Owner of the item
+ * @return boolean|null Source
+ *
+ * Return false if the item does not exist for the user
+ */
+ public function isValidSource($itemSource, $uidOwner);
+
+ /**
+ * Get a unique name of the item for the specified user
+ * @param string $itemSource
+ * @param string|false $shareWith User the item is being shared with
+ * @param array|null $exclude List of similar item names already existing as shared items @deprecated since version OC7
+ * @return string Target name
+ *
+ * This function needs to verify that the user does not already have an item with this name.
+ * If it does generate a new name e.g. name_#
+ */
+ public function generateTarget($itemSource, $shareWith, $exclude = null);
+
+ /**
+ * Converts the shared item sources back into the item in the specified format
+ * @param array $items Shared items
+ * @param int $format
+ * @return TODO
+ *
+ * The items array is a 3-dimensional array with the item_source as the
+ * first key and the share id as the second key to an array with the share
+ * info.
+ *
+ * The key/value pairs included in the share info depend on the function originally called:
+ * If called by getItem(s)Shared: id, item_type, item, item_source,
+ * share_type, share_with, permissions, stime, file_source
+ *
+ * If called by getItem(s)SharedWith: id, item_type, item, item_source,
+ * item_target, share_type, share_with, permissions, stime, file_source,
+ * file_target
+ *
+ * This function allows the backend to control the output of shared items with custom formats.
+ * It is only called through calls to the public getItem(s)Shared(With) functions.
+ */
+ public function formatItems($items, $format, $parameters = null);
+
+ /**
+ * Check if a given share type is allowd by the back-end
+ *
+ * @param int $shareType share type
+ * @return boolean
+ *
+ * The back-end can enable/disable specific share types. Just return true if
+ * the back-end doesn't provide any specific settings for it and want to allow
+ * all share types defined by the share API
+ */
+ public function isShareTypeAllowed($shareType);
+
+}
diff --git a/lib/public/share_backend_collection.php b/lib/public/share_backend_collection.php
new file mode 100644
index 00000000000..0292222c74f
--- /dev/null
+++ b/lib/public/share_backend_collection.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle, Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski <mtgap@owncloud.com>
+ * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * Interface for collections of of items implemented by another share backend.
+ * Extends the Share_Backend interface.
+ */
+interface Share_Backend_Collection extends Share_Backend {
+ /**
+ * Get the sources of the children of the item
+ * @param string $itemSource
+ * @return array Returns an array of children each inside an array with the keys: source, target, and file_path if applicable
+ */
+ public function getChildren($itemSource);
+}
diff --git a/lib/public/share_backend_file_dependent.php b/lib/public/share_backend_file_dependent.php
new file mode 100644
index 00000000000..b666e504008
--- /dev/null
+++ b/lib/public/share_backend_file_dependent.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle, Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski <mtgap@owncloud.com>
+ * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * Interface for share backends that share content that is dependent on files.
+ * Extends the Share_Backend interface.
+ */
+interface Share_Backend_File_Dependent extends Share_Backend {
+ /**
+ * Get the file path of the item
+ * @param string $itemSource
+ * @param string $uidOwner User that is the owner of shared item
+ * @return string|false
+ */
+ public function getFilePath($itemSource, $uidOwner);
+
+}
diff --git a/lib/public/template.php b/lib/public/template.php
index 2e265bb5e8e..89934a842ed 100644
--- a/lib/public/template.php
+++ b/lib/public/template.php
@@ -38,6 +38,7 @@ namespace OCP;
* @return string to the image
*
* @see OC_Helper::imagePath
+ * @deprecated Use \OCP\Template::image_path() instead
*/
function image_path( $app, $image ) {
return(\image_path( $app, $image ));
@@ -48,6 +49,7 @@ function image_path( $app, $image ) {
* Make OC_Helper::mimetypeIcon available as a simple function
* @param string $mimetype
* @return string to the image of this file type.
+ * @deprecated Use \OCP\Template::mimetype_icon() instead
*/
function mimetype_icon( $mimetype ) {
return(\mimetype_icon( $mimetype ));
@@ -57,6 +59,7 @@ function mimetype_icon( $mimetype ) {
* Make preview_icon available as a simple function
* @param string $path path to file
* @return string to the preview of the image
+ * @deprecated Use \OCP\Template::preview_icon() instead
*/
function preview_icon( $path ) {
return(\preview_icon( $path ));
@@ -68,6 +71,7 @@ function preview_icon( $path ) {
* @param string $path of file
* @param string $token
* @return string link to the preview
+ * @deprecated Use \OCP\Template::publicPreview_icon() instead
*/
function publicPreview_icon ( $path, $token ) {
return(\publicPreview_icon( $path, $token ));
@@ -76,8 +80,9 @@ function publicPreview_icon ( $path, $token ) {
/**
* Make OC_Helper::humanFileSize available as a simple function
* Example: 2048 to 2 kB.
- * @param int $size in bytes
+ * @param int $bytes in bytes
* @return string size as string
+ * @deprecated Use \OCP\Template::human_file_size() instead
*/
function human_file_size( $bytes ) {
return(\human_file_size( $bytes ));
@@ -88,7 +93,9 @@ function human_file_size( $bytes ) {
* Return the relative date in relation to today. Returns something like "last hour" or "two month ago"
* @param int $timestamp unix timestamp
* @param boolean $dateOnly
- * @return OC_L10N_String human readable interpretation of the timestamp
+ * @return \OC_L10N_String human readable interpretation of the timestamp
+ *
+ * @deprecated Use \OCP\Template::relative_modified_date() instead
*/
function relative_modified_date( $timestamp, $dateOnly = false ) {
return(\relative_modified_date($timestamp, null, $dateOnly));
@@ -97,9 +104,9 @@ function relative_modified_date( $timestamp, $dateOnly = false ) {
/**
* Return a human readable outout for a file size.
- * @deprecated use human_file_size() instead
* @param integer $bytes size of a file in byte
* @return string human readable interpretation of a file size
+ * @deprecated Use \OCP\Template::human_file_size() instead
*/
function simple_file_size($bytes) {
return(\human_file_size($bytes));
@@ -112,6 +119,7 @@ function simple_file_size($bytes) {
* @param mixed $selected which one is selected?
* @param array $params the parameters
* @return string html options
+ * @deprecated Use \OCP\Template::html_select_options() instead
*/
function html_select_options($options, $selected, $params=array()) {
return(\html_select_options($options, $selected, $params));
@@ -123,5 +131,83 @@ function html_select_options($options, $selected, $params=array()) {
* specific templates, add data and generate the html code
*/
class Template extends \OC_Template {
-
+ /**
+ * Make OC_Helper::imagePath available as a simple function
+ *
+ * @see OC_Helper::imagePath
+ *
+ * @param string $app
+ * @param string $image
+ * @return string to the image
+ */
+ public static function image_path($app, $image) {
+ return \image_path($app, $image);
+ }
+
+
+ /**
+ * Make OC_Helper::mimetypeIcon available as a simple function
+ *
+ * @param string $mimetype
+ * @return string to the image of this file type.
+ */
+ public static function mimetype_icon($mimetype) {
+ return \mimetype_icon($mimetype);
+ }
+
+ /**
+ * Make preview_icon available as a simple function
+ *
+ * @param string $path path to file
+ * @return string to the preview of the image
+ */
+ public static function preview_icon($path) {
+ return \preview_icon($path);
+ }
+
+ /**
+ * Make publicpreview_icon available as a simple function
+ * Returns the path to the preview of the image.
+ *
+ * @param string $path of file
+ * @param string $token
+ * @return string link to the preview
+ */
+ public static function publicPreview_icon($path, $token) {
+ return \publicPreview_icon($path, $token);
+ }
+
+ /**
+ * Make OC_Helper::humanFileSize available as a simple function
+ * Example: 2048 to 2 kB.
+ *
+ * @param int $bytes in bytes
+ * @return string size as string
+ */
+ public static function human_file_size($bytes) {
+ return \human_file_size($bytes);
+ }
+
+ /**
+ * Return the relative date in relation to today. Returns something like "last hour" or "two month ago"
+ *
+ * @param int $timestamp unix timestamp
+ * @param boolean $dateOnly
+ * @return string human readable interpretation of the timestamp
+ */
+ public static function relative_modified_date($timestamp, $dateOnly = false) {
+ return \relative_modified_date($timestamp, null, $dateOnly);
+ }
+
+ /**
+ * Generate html code for an options block.
+ *
+ * @param array $options the options
+ * @param mixed $selected which one is selected?
+ * @param array $params the parameters
+ * @return string html options
+ */
+ public static function html_select_options($options, $selected, $params=array()) {
+ return \html_select_options($options, $selected, $params);
+ }
}
diff --git a/lib/public/user.php b/lib/public/user.php
index 925410d37d5..e9835620433 100644
--- a/lib/public/user.php
+++ b/lib/public/user.php
@@ -38,6 +38,7 @@ class User {
/**
* Get the user id of the user currently logged in.
* @return string uid or false
+ * @deprecated Use \OC::$server->getUserSession()->getUser()->getUID()
*/
public static function getUser() {
return \OC_User::getUser();
@@ -94,6 +95,7 @@ class User {
/**
* Logs the user out including all the session data
* Logout, destroys session
+ * @deprecated Use \OC::$server->getUserSession()->logout();
*/
public static function logout() {
\OC_User::logout();
@@ -106,6 +108,7 @@ class User {
* @return string|false username on success, false otherwise
*
* Check if the password is correct without logging in the user
+ * @deprecated Use \OC::$server->getUserManager()->checkPassword();
*/
public static function checkPassword( $uid, $password ) {
return \OC_User::checkPassword( $uid, $password );
diff --git a/lib/public/util.php b/lib/public/util.php
index a87d26a4004..7f1974a421d 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -163,6 +163,8 @@ class Util {
* @param bool $dateOnly option to omit time from the result
* @param DateTimeZone|string $timeZone where the given timestamp shall be converted to
* @return string timestamp
+ *
+ * @deprecated Use \OC::$server->query('DateTimeFormatter') instead
*/
public static function formatDate($timestamp, $dateOnly=false, $timeZone = null) {
return(\OC_Util::formatDate($timestamp, $dateOnly, $timeZone));
@@ -508,8 +510,8 @@ class Util {
/**
* Compare two strings to provide a natural sort
- * @param $a first string to compare
- * @param $b second string to compare
+ * @param string $a first string to compare
+ * @param string $b second string to compare
* @return -1 if $b comes before $a, 1 if $a comes before $b
* or 0 if the strings are identical
*/
diff --git a/lib/repair/assetcache.php b/lib/repair/assetcache.php
index d7677a10d11..1bc2b91ad86 100644
--- a/lib/repair/assetcache.php
+++ b/lib/repair/assetcache.php
@@ -22,7 +22,7 @@ class AssetCache extends BasicEmitter implements \OC\RepairStep {
$this->emit('\OC\Repair', 'info', array('Asset pipeline disabled -> nothing to do'));
return;
}
- $assetDir = \OC::$SERVERROOT . '/assets';
+ $assetDir = \OC::$server->getConfig()->getSystemValue('assetdirectory', \OC::$SERVERROOT) . '/assets';
\OC_Helper::rmdirr($assetDir, false);
$this->emit('\OC\Repair', 'info', array('Asset cache cleared.'));
}
diff --git a/lib/repair/repairconfig.php b/lib/repair/repairconfig.php
index e09d8e8fe7a..e9b322da826 100644
--- a/lib/repair/repairconfig.php
+++ b/lib/repair/repairconfig.php
@@ -12,8 +12,16 @@ use OC\Hooks\BasicEmitter;
use OC\RepairStep;
use Sabre\DAV\Exception;
+/**
+ * Class RepairConfig
+ *
+ * @package OC\Repair
+ */
class RepairConfig extends BasicEmitter implements RepairStep {
+ /**
+ * @return string
+ */
public function getName() {
return 'Repair config';
}
@@ -23,6 +31,7 @@ class RepairConfig extends BasicEmitter implements RepairStep {
*/
public function run() {
$this->addSecret();
+ $this->removePortsFromTrustedDomains();
}
/**
@@ -34,4 +43,24 @@ class RepairConfig extends BasicEmitter implements RepairStep {
\OC::$server->getConfig()->setSystemValue('secret', $secret);
}
}
+
+
+ /**
+ * Remove ports from existing trusted domains in config.php
+ */
+ private function removePortsFromTrustedDomains() {
+ $trustedDomains = \OC::$server->getConfig()->getSystemValue('trusted_domains', array());
+ $newTrustedDomains = array();
+ foreach($trustedDomains as $domain) {
+ $pos = strrpos($domain, ':');
+ if ($pos !== false) {
+ $port = substr($domain, $pos + 1);
+ if (is_numeric($port)) {
+ $domain = substr($domain, 0, $pos);
+ }
+ }
+ $newTrustedDomains[] = $domain;
+ }
+ \OC::$server->getConfig()->setSystemValue('trusted_domains', $newTrustedDomains);
+ }
}
diff --git a/occ b/occ
index e2b71fe4abc..7e47585b01e 100755
--- a/occ
+++ b/occ
@@ -1,4 +1,4 @@
-#!/usr/bin/php
+#!/usr/bin/env php
<?php
/**
* Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/ocs/routes.php b/ocs/routes.php
index 845ee49a46d..567f9ccb23d 100644
--- a/ocs/routes.php
+++ b/ocs/routes.php
@@ -81,3 +81,33 @@ OC_API::register(
'core',
OC_API::USER_AUTH
);
+
+// Server-to-Server Sharing
+$s2s = new \OCA\Files_Sharing\API\Server2Server();
+OC_API::register('post',
+ '/cloud/shares',
+ array($s2s, 'createShare'),
+ 'files_sharing',
+ OC_API::GUEST_AUTH
+);
+
+OC_API::register('post',
+ '/cloud/shares/{id}/accept',
+ array($s2s, 'acceptShare'),
+ 'files_sharing',
+ OC_API::GUEST_AUTH
+);
+
+OC_API::register('post',
+ '/cloud/shares/{id}/decline',
+ array($s2s, 'declineShare'),
+ 'files_sharing',
+ OC_API::GUEST_AUTH
+);
+
+OC_API::register('post',
+ '/cloud/shares/{id}/unshare',
+ array($s2s, 'unshare'),
+ 'files_sharing',
+ OC_API::GUEST_AUTH
+);
diff --git a/public.php b/public.php
index 0e04db66da7..c5c227ef460 100644
--- a/public.php
+++ b/public.php
@@ -37,7 +37,9 @@ try {
OC_App::loadApps(array('authentication'));
OC_App::loadApps(array('filesystem', 'logging'));
- OC_Util::checkAppEnabled($app);
+ if (!\OC::$server->getAppManager()->isInstalled($app)) {
+ throw new Exception('App not installed: ' . $app);
+ }
OC_App::loadApp($app);
OC_User::setIncognitoMode(true);
diff --git a/remote.php b/remote.php
index d854b1d65a6..7993566afec 100644
--- a/remote.php
+++ b/remote.php
@@ -43,7 +43,9 @@ try {
$file = OC::$SERVERROOT .'/'. $file;
break;
default:
- OC_Util::checkAppEnabled($app);
+ if (!\OC::$server->getAppManager()->isInstalled($app)) {
+ throw new Exception('App not installed: ' . $app);
+ }
OC_App::loadApp($app);
$file = OC_App::getAppPath($app) .'/'. $parts[1];
break;
diff --git a/search/ajax/search.php b/search/ajax/search.php
index 84a5a760cad..5bd810aacfd 100644
--- a/search/ajax/search.php
+++ b/search/ajax/search.php
@@ -22,12 +22,34 @@
*/
// Check if we are a user
-OC_JSON::checkLoggedIn();
+\OC_JSON::checkLoggedIn();
\OC::$server->getSession()->close();
-$query=(isset($_GET['query']))?$_GET['query']:'';
+if (isset($_GET['query'])) {
+ $query = $_GET['query'];
+} else {
+ $query = '';
+}
+if (isset($_GET['inApps'])) {
+ $inApps = $_GET['inApps'];
+ if (is_string($inApps)) {
+ $inApps = array($inApps);
+ }
+} else {
+ $inApps = array();
+}
+if (isset($_GET['page'])) {
+ $page = (int)$_GET['page'];
+} else {
+ $page = 1;
+}
+if (isset($_GET['size'])) {
+ $size = (int)$_GET['size'];
+} else {
+ $size = 30;
+}
if($query) {
- $result = \OC::$server->getSearch()->search($query);
+ $result = \OC::$server->getSearch()->searchPaged($query, $inApps, $page, $size);
OC_JSON::encodedPrint($result);
}
else {
diff --git a/search/css/results.css b/search/css/results.css
index 6aa73f55c33..04f7b6dcb99 100644
--- a/search/css/results.css
+++ b/search/css/results.css
@@ -4,38 +4,42 @@
#searchresults {
background-color:#fff;
- border-bottom-left-radius:11px;
- box-shadow:0 0 10px #000;
- list-style:none;
- max-height:80%;
overflow-x:hidden;
- overflow-y: auto;
- padding-bottom:6px;
- position:fixed;
- right:0;
text-overflow:ellipsis;
- top:45px;
- width:380px;
- max-width: 95%;
+ padding-top: 65px;
+ box-sizing: border-box;
z-index:75;
}
-.ie8 #searchresults {
- border: 1px solid #666 !important;
+#searchresults.hidden {
+ display: none;
}
-
-#searchresults li.resultHeader {
- background-color:#eee;
- border-bottom:solid 1px #CCC;
- font-size:1.2em;
- font-weight:700;
- padding:.2em;
+#searchresults * {
+ box-sizing: content-box;
}
-#searchresults li.result {
- margin-left:2em;
+#searchresults #status {
+ background-color: rgba(255, 255, 255, .85);
+ height: 12px;
+ padding: 28px 0 28px 56px;
+ font-size: 18px;
+}
+.has-favorites:not(.hidden) ~ #searchresults #status {
+ padding-left: 102px;
+}
+#searchresults #status.fixed {
+ position: fixed;
+ bottom: 0;
+ width: 100%;
+ z-index: 10;
}
+#searchresults #status .spinner {
+ height: 16px;
+ width: 16px;
+ vertical-align: middle;
+ margin-left: 10px;
+}
#searchresults table {
border-spacing:0;
table-layout:fixed;
@@ -44,46 +48,51 @@
}
#searchresults td {
- padding:0 .3em;
- height: 44px;
+ padding: 5px 19px;
+ font-style: normal;
+ vertical-align: middle;
+ border-bottom: none;
+}
+#searchresults td.icon {
+ text-align: right;
+ width: 40px;
+ height: 40px;
+ padding: 5px 0;
+ background-position: right center;
+ background-repeat: no-repeat;
}
+.has-favorites:not(.hidden) ~ #searchresults td.icon {
+ width: 86px;
+}
+
#searchresults tr.template {
display: none;
}
#searchresults .name,
-#searchresults .text {
+#searchresults .text,
+#searchresults .path {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#searchresults .text {
- padding-left: 16px;
- color: #999;
+ white-space: normal;
+ color: #545454;
}
-
-#searchresults td.result * {
- cursor:pointer;
+#searchresults .path {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ filter: alpha(opacity=50);
+ opacity: .5;
}
-
-#searchresults td.container {
- width:20px;
+#searchresults .text em {
+ color: #545454;
+ font-weight: bold;
+ opacity: 1;
}
-#searchresults td.container img {
- vertical-align: middle;
- display:none;
-}
-#searchresults tr:hover td.container img {
- display:inline;
-}
-
-#searchresults td.type {
- border-bottom:none;
- border-right:1px solid #aaa;
- font-weight:700;
- text-align:right;
- width:3.5em;
+#searchresults tr.result * {
+ cursor:pointer;
}
#searchresults tr.current {
diff --git a/search/js/result.js b/search/js/result.js
deleted file mode 100644
index fe84aecde3e..00000000000
--- a/search/js/result.js
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 2014
- *
- * This file is licensed under the Affero General Public License version 3
- * or later.
- *
- * See the COPYING-README file.
- *
- */
-
-//translations for result type ids, can be extended by apps
-OC.search.resultTypes={
- file: t('core','File'),
- folder: t('core','Folder'),
- image: t('core','Image'),
- audio: t('core','Audio')
-};
-OC.search.catagorizeResults=function(results){
- var types={};
- for(var i=0;i<results.length;i++){
- var type=results[i].type;
- if(!types[type]){
- types[type]=[];
- }
- types[type].push(results[i]);
- }
- return types;
-};
-OC.search.hide=function(){
- $('#searchresults').hide();
- if($('#searchbox').val().length>2){
- $('#searchbox').val('');
- if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
- FileList.unfilter();
- }
- };
- if ($('#searchbox').val().length === 0) {
- if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
- FileList.unfilter();
- }
- }
-};
-OC.search.showResults=function(results){
- if(results.length === 0){
- return;
- }
- if(!OC.search.showResults.loaded){
- var parent=$('<div/>');
- $('body').append(parent);
- parent.load(OC.filePath('search','templates','part.results.php'),function(){
- OC.search.showResults.loaded=true;
- $('#searchresults').click(function(event){
- OC.search.hide();
- event.stopPropagation();
- });
- $(document).click(function(event){
- OC.search.hide();
- if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
- FileList.unfilter();
- }
- });
- OC.search.lastResults=results;
- OC.search.showResults(results);
- });
- }else{
- var types=OC.search.catagorizeResults(results);
- $('#searchresults').show();
- $('#searchresults tr.result').remove();
- var index=0;
- for(var typeid in types){
- var type=types[typeid];
- if(type.length>0){
- for(var i=0;i<type.length;i++){
- var row=$('#searchresults tr.template').clone();
- row.removeClass('template');
- row.addClass('result');
-
- row.data('type', typeid);
- row.data('name', type[i].name);
- row.data('text', type[i].text);
- row.data('index',index);
-
- if (i === 0){
- var typeName = OC.search.resultTypes[typeid];
- row.children('td.type').text(t('lib', typeName));
- }
- row.find('td.result div.name').text(type[i].name);
- row.find('td.result div.text').text(type[i].text);
-
- if (type[i].path) {
- var parent = OC.dirname(type[i].path);
- if (parent === '') {
- parent = '/';
- }
- var containerName = OC.basename(parent);
- if (containerName === '') {
- containerName = '/';
- }
- var containerLink = OC.linkTo('files', 'index.php')
- +'/?dir='+encodeURIComponent(parent)
- +'&scrollto='+encodeURIComponent(type[i].name);
- row.find('td.result a')
- .attr('href', containerLink)
- .attr('title', t('core', 'Show in {folder}', {folder: containerName}));
- } else {
- row.find('td.result a').attr('href', type[i].link);
- }
-
- index++;
- /**
- * Give plugins the ability to customize the search results. For example:
- * OC.search.customResults.file = function (row, item){
- * if(item.name.search('.json') >= 0) ...
- * };
- */
- if(OC.search.customResults[typeid]){
- OC.search.customResults[typeid](row, type[i]);
- }
- $('#searchresults tbody').append(row);
- }
- }
- }
- $('#searchresults').on('click', 'result', function () {
- if ($(this).data('type') === 'Files') {
- //FIXME use ajax to navigate to folder & highlight file
- }
- });
- }
-};
-OC.search.showResults.loaded=false;
-
-OC.search.renderCurrent=function(){
- if($('#searchresults tr.result')[OC.search.currentResult]){
- var result=$('#searchresults tr.result')[OC.search.currentResult];
- $('#searchresults tr.result').removeClass('current');
- $(result).addClass('current');
- }
-};
diff --git a/search/js/search.js b/search/js/search.js
new file mode 100644
index 00000000000..318858ebd71
--- /dev/null
+++ b/search/js/search.js
@@ -0,0 +1,378 @@
+/**
+ * ownCloud - core
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Jörn Friedrich Dreyer <jfd@owncloud.com>
+ * @copyright Jörn Friedrich Dreyer 2014
+ */
+
+(function () {
+ /**
+ * @class OCA.Search
+ * @classdesc
+ *
+ * The Search class manages a search queries and their results
+ *
+ * @param $searchBox container element with existing markup for the #searchbox form
+ * @param $searchResults container element for results und status message
+ */
+ var Search = function($searchBox, $searchResults) {
+ this.initialize($searchBox, $searchResults);
+ };
+ /**
+ * @memberof OC
+ */
+ Search.prototype = {
+
+ /**
+ * Initialize the search box
+ *
+ * @param $searchBox container element with existing markup for the #searchbox form
+ * @param $searchResults container element for results und status message
+ * @private
+ */
+ initialize: function($searchBox, $searchResults) {
+
+ var self = this;
+
+ /**
+ * contains closures that are called to filter the current content
+ */
+ var filters = {};
+ this.setFilter = function(type, filter) {
+ filters[type] = filter;
+ };
+ this.hasFilter = function(type) {
+ return typeof filters[type] !== 'undefined';
+ };
+ this.getFilter = function(type) {
+ return filters[type];
+ };
+
+ /**
+ * contains closures that are called to render search results
+ */
+ var renderers = {};
+ this.setRenderer = function(type, renderer) {
+ renderers[type] = renderer;
+ };
+ this.hasRenderer = function(type) {
+ return typeof renderers[type] !== 'undefined';
+ };
+ this.getRenderer = function(type) {
+ return renderers[type];
+ };
+
+ /**
+ * contains closures that are called when a search result has been clicked
+ */
+ var handlers = {};
+ this.setHandler = function(type, handler) {
+ handlers[type] = handler;
+ };
+ this.hasHandler = function(type) {
+ return typeof handlers[type] !== 'undefined';
+ };
+ this.getHandler = function(type) {
+ return handlers[type];
+ };
+
+ var currentResult = -1;
+ var lastQuery = '';
+ var lastInApps = [];
+ var lastPage = 0;
+ var lastSize = 30;
+ var lastResults = [];
+ var timeoutID = null;
+
+ this.getLastQuery = function() {
+ return lastQuery;
+ };
+
+ /**
+ * Do a search query and display the results
+ * @param {string} query the search query
+ */
+ this.search = function(query, inApps, page, size) {
+ if (query) {
+ OC.addStyle('search','results');
+ if (typeof page !== 'number') {
+ page = 1;
+ }
+ if (typeof size !== 'number') {
+ size = 30;
+ }
+ if (typeof inApps !== 'object') {
+ var currentApp = getCurrentApp();
+ if(currentApp) {
+ inApps = [currentApp];
+ } else {
+ inApps = [];
+ }
+ }
+ // prevent double pages
+ if ($searchResults && query === lastQuery && page === lastPage && size === lastSize) {
+ return;
+ }
+ window.clearTimeout(timeoutID);
+ timeoutID = window.setTimeout(function() {
+ lastQuery = query;
+ lastInApps = inApps;
+ lastPage = page;
+ lastSize = size;
+
+ //show spinner
+ $searchResults.removeClass('hidden');
+ $status.html(t('core', 'Searching other places')+'<img class="spinner" alt="search in progress" src="'+OC.webroot+'/core/img/loading.gif" />');
+
+ // do the actual search query
+ $.getJSON(OC.generateUrl('search/ajax/search.php'), {query:query, inApps:inApps, page:page, size:size }, function(results) {
+ lastResults = results;
+ if (page === 1) {
+ showResults(results);
+ } else {
+ addResults(results);
+ }
+ });
+ }, 500);
+ }
+ };
+
+ //TODO should be a core method, see https://github.com/owncloud/core/issues/12557
+ function getCurrentApp() {
+ var content = document.getElementById('content');
+ if (content) {
+ var classList = document.getElementById('content').className.split(/\s+/);
+ for (var i = 0; i < classList.length; i++) {
+ if (classList[i].indexOf('app-') === 0) {
+ return classList[i].substr(4);
+ }
+ }
+ }
+ return false;
+ }
+
+ var $status = $searchResults.find('#status');
+ const summaryAndStatusHeight = 118;
+
+ function isStatusOffScreen() {
+ return $searchResults.position() && ($searchResults.position().top + summaryAndStatusHeight > window.innerHeight);
+ }
+
+ function placeStatus() {
+ if (isStatusOffScreen()) {
+ $status.addClass('fixed');
+ } else {
+ $status.removeClass('fixed');
+ }
+ }
+ function showResults(results) {
+ lastResults = results;
+ $searchResults.find('tr.result').remove();
+ $searchResults.removeClass('hidden');
+ addResults(results);
+ }
+ function addResults(results) {
+ var $template = $searchResults.find('tr.template');
+ jQuery.each(results, function (i, result) {
+ var $row = $template.clone();
+ $row.removeClass('template');
+ $row.addClass('result');
+
+ $row.data('result', result);
+
+ // generic results only have four attributes
+ $row.find('td.info div.name').text(result.name);
+ $row.find('td.info a').attr('href', result.link);
+
+ /**
+ * Give plugins the ability to customize the search results. see result.js for examples
+ */
+ if (self.hasRenderer(result.type)) {
+ $row = self.getRenderer(result.type)($row, result);
+ } else {
+ // for backward compatibility add text div
+ $row.find('td.info div.name').addClass('result');
+ $row.find('td.result div.name').after('<div class="text"></div>');
+ $row.find('td.result div.text').text(result.name);
+ if (OC.search.customResults && OC.search.customResults[result.type]) {
+ OC.search.customResults[result.type]($row, result);
+ }
+ }
+ if ($row) {
+ $searchResults.find('tbody').append($row);
+ }
+ });
+ var count = $searchResults.find('tr.result').length;
+ $status.data('count', count);
+ if (count === 0) {
+ $status.text(t('core', 'No search result in other places'));
+ } else {
+ $status.text(n('core', '{count} search result in other places', '{count} search results in other places', count, {count:count}));
+ }
+ }
+ function renderCurrent() {
+ var result = $searchResults.find('tr.result')[currentResult];
+ if (result) {
+ var $result = $(result);
+ var currentOffset = $('#app-content').scrollTop();
+ $('#app-content').animate({
+ // Scrolling to the top of the new result
+ scrollTop: currentOffset + $result.offset().top - $result.height() * 2
+ }, {
+ duration: 100
+ });
+ $searchResults.find('tr.result.current').removeClass('current');
+ $result.addClass('current');
+ }
+ }
+ this.hideResults = function() {
+ $searchResults.addClass('hidden');
+ $searchResults.find('tr.result').remove();
+ lastQuery = false;
+ };
+ this.clear = function() {
+ self.hideResults();
+ if(self.hasFilter(getCurrentApp())) {
+ self.getFilter(getCurrentApp())('');
+ }
+ $searchBox.val('');
+ $searchBox.blur();
+ };
+
+ /**
+ * Event handler for when scrolling the list container.
+ * This appends/renders the next page of entries when reaching the bottom.
+ */
+ function onScroll(e) {
+ if ($searchResults && lastQuery !== false && lastResults.length > 0) {
+ var resultsBottom = $searchResults.offset().top + $searchResults.height();
+ var containerBottom = $searchResults.offsetParent().offset().top + $searchResults.offsetParent().height();
+ if ( resultsBottom < containerBottom * 1.2 ) {
+ self.search(lastQuery, lastInApps, lastPage + 1);
+ }
+ placeStatus();
+ }
+ }
+
+ $('#app-content').on('scroll', _.bind(onScroll, this));
+
+ /**
+ * scrolls the search results to the top
+ */
+ function scrollToResults() {
+ setTimeout(function() {
+ if (isStatusOffScreen()) {
+ var newScrollTop = $('#app-content').prop('scrollHeight') - $searchResults.height();
+ console.log('scrolling to ' + newScrollTop);
+ $('#app-content').animate({
+ scrollTop: newScrollTop
+ }, {
+ duration: 100,
+ complete: function () {
+ scrollToResults();
+ }
+ });
+ }
+ }, 150);
+ }
+
+ $('form.searchbox').submit(function(event) {
+ event.preventDefault();
+ });
+
+ $searchBox.on('search', function (event) {
+ if($searchBox.val() === '') {
+ if(self.hasFilter(getCurrentApp())) {
+ self.getFilter(getCurrentApp())('');
+ }
+ self.hideResults();
+ }
+ });
+ $searchBox.keyup(function(event) {
+ if (event.keyCode === 13) { //enter
+ if(currentResult > -1) {
+ var result = $searchResults.find('tr.result a')[currentResult];
+ window.location = $(result).attr('href');
+ }
+ } else if(event.keyCode === 38) { //up
+ if(currentResult > 0) {
+ currentResult--;
+ renderCurrent();
+ }
+ } else if(event.keyCode === 40) { //down
+ if(lastResults.length > currentResult + 1){
+ currentResult++;
+ renderCurrent();
+ }
+ } else {
+ var query = $searchBox.val();
+ if (lastQuery !== query) {
+ currentResult = -1;
+ if (query.length > 2) {
+ self.search(query);
+ } else {
+ self.hideResults();
+ }
+ if(self.hasFilter(getCurrentApp())) {
+ self.getFilter(getCurrentApp())(query);
+ }
+ }
+ }
+ });
+ $(document).keyup(function(event) {
+ if(event.keyCode === 27) { //esc
+ $searchBox.val('');
+ if(self.hasFilter(getCurrentApp())) {
+ self.getFilter(getCurrentApp())('');
+ }
+ self.hideResults();
+ }
+ });
+
+ $searchResults.on('click', 'tr.result', function (event) {
+ var $row = $(this);
+ var item = $row.data('result');
+ if(self.hasHandler(item.type)){
+ var result = self.getHandler(item.type)($row, result, event);
+ $searchBox.val('');
+ if(self.hasFilter(getCurrentApp())) {
+ self.getFilter(getCurrentApp())('');
+ }
+ self.hideResults();
+ return result;
+ }
+ });
+ $searchResults.on('click', '#status', function (event) {
+ event.preventDefault();
+ scrollToResults();
+ return false;
+ });
+ placeStatus();
+
+ OC.Plugins.attach('OCA.Search', this);
+ }
+ };
+ OCA.Search = Search;
+})();
+
+$(document).ready(function() {
+ var $searchResults = $('<div id="searchresults" class="hidden"/>');
+ $('#app-content')
+ .append($searchResults)
+ .find('.viewcontainer').css('min-height', 'initial');
+ $searchResults.load(OC.webroot + '/search/templates/part.results.html', function () {
+ OC.Search = new OCA.Search($('#searchbox'), $('#searchresults'));
+ });
+});
+
+/**
+ * @deprecated use get/setRenderer() instead
+ */
+OC.search.customResults = {};
+/**
+ * @deprecated use get/setRenderer() instead
+ */
+OC.search.resultTypes = {}; \ No newline at end of file
diff --git a/search/templates/part.results.html b/search/templates/part.results.html
new file mode 100644
index 00000000000..612d02c18f8
--- /dev/null
+++ b/search/templates/part.results.html
@@ -0,0 +1,13 @@
+<div id="status"></div>
+<table>
+ <tbody>
+ <tr class="template">
+ <td class="icon"></td>
+ <td class="info">
+ <a class="link">
+ <div class="name"></div>
+ </a>
+ </td>
+ </tr>
+ </tbody>
+</table>
diff --git a/search/templates/part.results.php b/search/templates/part.results.php
deleted file mode 100644
index b6e7bad4a2f..00000000000
--- a/search/templates/part.results.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<div id="searchresults">
- <table>
- <tbody>
- <tr class="template">
- <td class="type"></td>
- <td class="result">
- <a>
- <div class="name"></div>
- <div class="text"></div>
- </a>
- </td>
- </tr>
- </tbody>
- </table>
-</div>
diff --git a/settings/admin.php b/settings/admin.php
index d58b9a597b9..1e0ec57580c 100644
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -9,15 +9,20 @@ OC_Util::checkAdminUser();
OC_App::setActiveNavigationEntry("admin");
$template = new OC_Template('settings', 'admin', 'user');
-$htAccessWorking = OC_Util::isHtaccessWorking();
-$entries = OC_Log_Owncloud::getEntries(3);
-$entriesRemaining = count(OC_Log_Owncloud::getEntries(4)) > 3;
+$showLog = (\OC::$server->getConfig()->getSystemValue('log_type', 'owncloud') === 'owncloud');
+$numEntriesToLoad = 3;
+$entries = OC_Log_Owncloud::getEntries($numEntriesToLoad + 1);
+$entriesRemaining = count($entries) > $numEntriesToLoad;
+$entries = array_slice($entries, 0, $numEntriesToLoad);
+$logFilePath = OC_Log_Owncloud::getLogFilePath();
+$doesLogFileExist = file_exists($logFilePath);
+$logFileSize = filesize($logFilePath);
$config = \OC::$server->getConfig();
$appConfig = \OC::$server->getAppConfig();
// Should we display sendmail as an option?
-$template->assign('sendmail_is_available', (bool)findBinaryPath('sendmail'));
+$template->assign('sendmail_is_available', (bool) \OC_Helper::findBinaryPath('sendmail'));
$template->assign('loglevel', $config->getSystemValue("loglevel", 2));
$template->assign('mail_domain', $config->getSystemValue("mail_domain", ''));
@@ -32,12 +37,14 @@ $template->assign('mail_smtpname', $config->getSystemValue("mail_smtpname", ''))
$template->assign('mail_smtppassword', $config->getSystemValue("mail_smtppassword", ''));
$template->assign('entries', $entries);
$template->assign('entriesremain', $entriesRemaining);
-$template->assign('htaccessworking', $htAccessWorking);
+$template->assign('logFileSize', $logFileSize);
+$template->assign('doesLogFileExist', $doesLogFileExist);
+$template->assign('showLog', $showLog);
+$template->assign('readOnlyConfigEnabled', OC_Helper::isReadOnlyConfigEnabled());
$template->assign('isLocaleWorking', OC_Util::isSetLocaleWorking());
$template->assign('isPhpCharSetUtf8', OC_Util::isPhpCharSetUtf8());
$template->assign('isAnnotationsWorking', OC_Util::isAnnotationsWorking());
$template->assign('has_fileinfo', OC_Util::fileInfoLoaded());
-$template->assign('old_php', OC_Util::isPHPoutdated());
$template->assign('backgroundjobs_mode', $appConfig->getValue('core', 'backgroundjobs_mode', 'ajax'));
$template->assign('cron_log', $config->getSystemValue('cron_log', true));
$template->assign('lastcron', $appConfig->getValue('core', 'lastcron', false));
@@ -53,20 +60,22 @@ $template->assign('shareExcludedGroupsList', implode('|', $excludedGroupsList));
// Check if connected using HTTPS
$template->assign('isConnectedViaHTTPS', OC_Request::serverProtocol() === 'https');
-$template->assign('enforceHTTPSEnabled', $config->getSystemValue("forcessl", false));
+$template->assign('enforceHTTPSEnabled', $config->getSystemValue('forcessl', false));
+$template->assign('forceSSLforSubdomainsEnabled', $config->getSystemValue('forceSSLforSubdomains', false));
// If the current web root is non-empty but the web root from the config is,
// and system cron is used, the URL generator fails to build valid URLs.
-$shouldSuggestOverwriteWebRoot = $config->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'cron' &&
+$shouldSuggestOverwriteCliUrl = $config->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'cron' &&
\OC::$WEBROOT && \OC::$WEBROOT !== '/' &&
- !$config->getSystemValue('overwritewebroot', '');
-$suggestedOverwriteWebRoot = ($shouldSuggestOverwriteWebRoot) ? \OC::$WEBROOT : '';
-$template->assign('suggestedOverwriteWebroot', $suggestedOverwriteWebRoot);
+ !$config->getSystemValue('overwrite.cli.url', '');
+$suggestedOverwriteCliUrl = ($shouldSuggestOverwriteCliUrl) ? \OC::$WEBROOT : '';
+$template->assign('suggestedOverwriteCliUrl', $suggestedOverwriteCliUrl);
$template->assign('allowLinks', $appConfig->getValue('core', 'shareapi_allow_links', 'yes'));
$template->assign('enforceLinkPassword', \OCP\Util::isPublicLinkPasswordRequired());
$template->assign('allowPublicUpload', $appConfig->getValue('core', 'shareapi_allow_public_upload', 'yes'));
$template->assign('allowResharing', $appConfig->getValue('core', 'shareapi_allow_resharing', 'yes'));
+$template->assign('allowPublicMailNotification', $appConfig->getValue('core', 'shareapi_allow_public_notification', 'no'));
$template->assign('allowMailNotification', $appConfig->getValue('core', 'shareapi_allow_mail_notification', 'no'));
$template->assign('onlyShareWithGroupMembers', \OC\Share\Share::shareWithGroupMembersOnly());
$databaseOverload = (strpos(\OCP\Config::getSystemValue('dbtype'), 'sqlite') !== false);
@@ -77,9 +86,9 @@ $template->assign('databaseOverload', $databaseOverload);
$forms = OC_App::getForms('admin');
$l = OC_L10N::get('settings');
$formsAndMore = array();
-if (OC_Request::serverProtocol() !== 'https' || !$htAccessWorking || !OC_Util::isAnnotationsWorking() ||
+if (OC_Request::serverProtocol() !== 'https' || !OC_Util::isAnnotationsWorking() ||
$suggestedOverwriteWebRoot || !OC_Util::isSetLocaleWorking() || !OC_Util::isPhpCharSetUtf8() ||
- OC_Util::isPHPoutdated() || !OC_Util::fileInfoLoaded() || $databaseOverload
+ !OC_Util::fileInfoLoaded() || $databaseOverload
) {
$formsAndMore[] = array('anchor' => 'security-warning', 'section-name' => $l->t('Security & Setup Warnings'));
}
@@ -92,7 +101,7 @@ $formsMap = array_map(function ($form) {
$anchor = str_replace(' ', '-', $anchor);
return array(
- 'anchor' => $anchor,
+ 'anchor' => 'goto-' . $anchor,
'section-name' => $sectionName,
'form' => $form
);
@@ -114,19 +123,3 @@ $formsAndMore[] = array('anchor' => 'log-section', 'section-name' => $l->t('Log'
$template->assign('forms', $formsAndMore);
$template->printPage();
-
-/**
- * Try to find a program
- *
- * @param string $program
- * @return null|string
- */
-function findBinaryPath($program) {
- if (OC_Helper::is_function_enabled('exec')) {
- exec('command -v ' . escapeshellarg($program) . ' 2> /dev/null', $output, $returnCode);
- if ($returnCode === 0 && count($output) > 0) {
- return escapeshellcmd($output[0]);
- }
- }
- return null;
-}
diff --git a/settings/ajax/checksetup.php b/settings/ajax/checksetup.php
index 6bf5bc5642e..64718933317 100644
--- a/settings/ajax/checksetup.php
+++ b/settings/ajax/checksetup.php
@@ -17,7 +17,8 @@ if (OC_Util::isInternetConnectionEnabled()) {
}
OCP\JSON::success(
- array(
- 'serverhasinternetconnection' => $hasInternet
+ array (
+ 'serverHasInternetConnection' => $hasInternet,
+ 'dataDirectoryProtected' => OC_Util::isHtaccessWorking()
)
);
diff --git a/settings/ajax/creategroup.php b/settings/ajax/creategroup.php
deleted file mode 100644
index be376bea9dc..00000000000
--- a/settings/ajax/creategroup.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-OCP\JSON::callCheck();
-OC_JSON::checkAdminUser();
-
-$groupname = $_POST["groupname"];
-$l = \OC::$server->getL10N('settings');
-
-// Does the group exist?
-if( in_array( $groupname, OC_Group::getGroups())) {
- OC_JSON::error(array("data" => array( "message" => $l->t("Group already exists") )));
- exit();
-}
-
-// Return Success story
-if( OC_Group::createGroup( $groupname )) {
- OC_JSON::success(array("data" => array( "groupname" => $groupname )));
-}
-else{
- OC_JSON::error(array("data" => array( "message" => $l->t("Unable to add group") )));
-}
diff --git a/settings/ajax/createuser.php b/settings/ajax/createuser.php
deleted file mode 100644
index 463c15d59e8..00000000000
--- a/settings/ajax/createuser.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-OCP\JSON::callCheck();
-OC_JSON::checkSubAdminUser();
-
-if(OC_User::isAdminUser(OC_User::getUser())) {
- $groups = array();
- if (!empty($_POST["groups"])) {
- $groups = $_POST["groups"];
- }
-}else{
- if (isset($_POST["groups"])) {
- $groups = array();
- if (!empty($_POST["groups"])) {
- foreach ($_POST["groups"] as $group) {
- if (OC_SubAdmin::isGroupAccessible(OC_User::getUser(), $group)) {
- $groups[] = $group;
- }
- }
- }
- if (empty($groups)) {
- $groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
- }
- } else {
- $groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
- }
-}
-$username = $_POST["username"];
-$password = $_POST["password"];
-
-// Return Success story
-try {
- // check whether the user's files home exists
- $userDirectory = OC_User::getHome($username) . '/files/';
- $homeExists = file_exists($userDirectory);
-
- if (!OC_User::createUser($username, $password)) {
- OC_JSON::error(array('data' => array( 'message' => 'User creation failed for '.$username )));
- exit();
- }
- foreach( $groups as $i ) {
- if(!OC_Group::groupExists($i)) {
- OC_Group::createGroup($i);
- }
- OC_Group::addToGroup( $username, $i );
- }
-
- $userManager = \OC_User::getManager();
- $user = $userManager->get($username);
- OCP\JSON::success(array("data" =>
- array(
- // returns whether the home already existed
- "homeExists" => $homeExists,
- "username" => $username,
- "groups" => OC_Group::getUserGroups( $username ),
- 'storageLocation' => $user->getHome())));
-} catch (Exception $exception) {
- OCP\JSON::error(array("data" => array( "message" => $exception->getMessage())));
-}
diff --git a/settings/ajax/decryptall.php b/settings/ajax/decryptall.php
index 527e5b8fcee..0ad25927461 100644
--- a/settings/ajax/decryptall.php
+++ b/settings/ajax/decryptall.php
@@ -11,7 +11,7 @@ $params = array('uid' => \OCP\User::getUser(),
'password' => $_POST['password']);
$view = new OC\Files\View('/');
-$util = new \OCA\Encryption\Util($view, \OCP\User::getUser());
+$util = new \OCA\Files_Encryption\Util($view, \OCP\User::getUser());
$l = \OC::$server->getL10N('settings');
$result = $util->initEncryption($params);
diff --git a/settings/ajax/geteveryonecount.php b/settings/ajax/geteveryonecount.php
index 54fbd6e2fbd..c41e7f71b01 100644
--- a/settings/ajax/geteveryonecount.php
+++ b/settings/ajax/geteveryonecount.php
@@ -25,7 +25,7 @@ OC_JSON::checkSubAdminUser();
$userCount = 0;
-$currentUser = \OC::$server->getUserSession()->getLoginName();
+$currentUser = \OC::$server->getUserSession()->getUser()->getUID();
if (!OC_User::isAdminUser($currentUser)) {
$groups = OC_SubAdmin::getSubAdminsGroups($currentUser);
diff --git a/settings/ajax/getlog.php b/settings/ajax/getlog.php
deleted file mode 100644
index 34c8d3ce467..00000000000
--- a/settings/ajax/getlog.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012, Robin Appelman <icewind1991@gmail.com>
- * This file is licensed under the Affero General Public License version 3 or later.
- * See the COPYING-README file.
- */
-
-OC_JSON::checkAdminUser();
-
-$count=(isset($_GET['count']))?$_GET['count']:50;
-$offset=(isset($_GET['offset']))?$_GET['offset']:0;
-
-$entries=OC_Log_Owncloud::getEntries($count, $offset);
-$data = array();
-
-OC_JSON::success(
- array(
- "data" => $entries,
- "remain" => count(OC_Log_Owncloud::getEntries(1, $offset + $count)) !== 0,
- )
-);
diff --git a/settings/ajax/grouplist.php b/settings/ajax/grouplist.php
deleted file mode 100644
index 93bb510773d..00000000000
--- a/settings/ajax/grouplist.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Arthur Schiwon
- * @copyright 2014 Arthur Schiwon <blizzz@owncloud.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-OC_JSON::callCheck();
-OC_JSON::checkSubAdminUser();
-if (isset($_GET['pattern']) && !empty($_GET['pattern'])) {
- $pattern = $_GET['pattern'];
-} else {
- $pattern = '';
-}
-if (isset($_GET['filterGroups']) && !empty($_GET['filterGroups'])) {
- $filterGroups = intval($_GET['filterGroups']) === 1;
-} else {
- $filterGroups = false;
-}
-$groupPattern = $filterGroups ? $pattern : '';
-$groups = array();
-$adminGroups = array();
-$groupManager = \OC_Group::getManager();
-$isAdmin = OC_User::isAdminUser(OC_User::getUser());
-
-$groupsInfo = new \OC\Group\MetaData(OC_User::getUser(), $isAdmin, $groupManager);
-$groupsInfo->setSorting($groupsInfo::SORT_USERCOUNT);
-list($adminGroups, $groups) = $groupsInfo->get($groupPattern, $pattern);
-
-OC_JSON::success(
- array('data' => array('adminGroups' => $adminGroups, 'groups' => $groups)));
diff --git a/settings/ajax/lostpassword.php b/settings/ajax/lostpassword.php
deleted file mode 100644
index 395ba31f92b..00000000000
--- a/settings/ajax/lostpassword.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-OC_JSON::checkLoggedIn();
-OCP\JSON::callCheck();
-
-$l = \OC::$server->getL10N('settings');
-
-// Get data
-if( isset( $_POST['email'] ) && OC_Mail::validateAddress($_POST['email']) ) {
- $email=trim($_POST['email']);
- OC_Preferences::setValue(OC_User::getUser(), 'settings', 'email', $email);
- OC_JSON::success(array("data" => array( "message" => $l->t("Email saved") )));
-}else{
- OC_JSON::error(array("data" => array( "message" => $l->t("Invalid email") )));
-}
diff --git a/settings/ajax/removegroup.php b/settings/ajax/removegroup.php
deleted file mode 100644
index 798d7916e61..00000000000
--- a/settings/ajax/removegroup.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-OC_JSON::checkAdminUser();
-OCP\JSON::callCheck();
-
-$name = $_POST["groupname"];
-
-// Return Success story
-if( OC_Group::deleteGroup( $name )) {
- OC_JSON::success(array("data" => array( "groupname" => $name )));
-}
-else{
- OC_JSON::error(array("data" => array( "message" => $l->t("Unable to delete group") )));
-}
diff --git a/settings/ajax/removeuser.php b/settings/ajax/removeuser.php
deleted file mode 100644
index eda85238780..00000000000
--- a/settings/ajax/removeuser.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-OC_JSON::checkSubAdminUser();
-OCP\JSON::callCheck();
-
-$username = $_POST["username"];
-
-// A user shouldn't be able to delete his own account
-if(OC_User::getUser() === $username) {
- exit;
-}
-
-if(!OC_User::isAdminUser(OC_User::getUser()) && !OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
- exit();
-}
-
-// Return Success story
-if( OC_User::deleteUser( $username )) {
- OC_JSON::success(array("data" => array( "username" => $username )));
-}
-else{
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array("data" => array( "message" => $l->t("Unable to delete user") )));
-}
diff --git a/settings/ajax/setlanguage.php b/settings/ajax/setlanguage.php
index a3988db85bb..a83212927bf 100644
--- a/settings/ajax/setlanguage.php
+++ b/settings/ajax/setlanguage.php
@@ -11,7 +11,7 @@ if( isset( $_POST['lang'] ) ) {
$languageCodes=OC_L10N::findAvailableLanguages();
$lang=$_POST['lang'];
if(array_search($lang, $languageCodes) or $lang === 'en') {
- OC_Preferences::setValue( OC_User::getUser(), 'core', 'lang', $lang );
+ \OC::$server->getConfig()->setUserValue( OC_User::getUser(), 'core', 'lang', $lang );
OC_JSON::success(array("data" => array( "message" => $l->t("Language changed") )));
}else{
OC_JSON::error(array("data" => array( "message" => $l->t("Invalid request") )));
diff --git a/settings/ajax/setloglevel.php b/settings/ajax/setloglevel.php
deleted file mode 100644
index 542219f86c6..00000000000
--- a/settings/ajax/setloglevel.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
- * This file is licensed under the Affero General Public License version 3 or later.
- * See the COPYING-README file.
- */
-
-OC_Util::checkAdminUser();
-OCP\JSON::callCheck();
-
-OC_Config::setValue( 'loglevel', $_POST['level'] );
-
-echo 'true';
diff --git a/settings/ajax/setquota.php b/settings/ajax/setquota.php
index f19506a0456..64a686e83d7 100644
--- a/settings/ajax/setquota.php
+++ b/settings/ajax/setquota.php
@@ -27,7 +27,7 @@ if($quota !== 'none' and $quota !== 'default') {
// Return Success story
if($username) {
- OC_Preferences::setValue($username, 'files', 'quota', $quota);
+ \OC::$server->getConfig()->setUserValue($username, 'files', 'quota', $quota);
}else{//set the default quota when no username is specified
if($quota === 'default') {//'default' as default quota makes no sense
$quota='none';
diff --git a/settings/ajax/setsecurity.php b/settings/ajax/setsecurity.php
deleted file mode 100644
index f1f737a4943..00000000000
--- a/settings/ajax/setsecurity.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013-2014, Lukas Reschke <lukas@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or later.
- * See the COPYING-README file.
- */
-
-OC_Util::checkAdminUser();
-OCP\JSON::callCheck();
-
-if(isset($_POST['enforceHTTPS'])) {
- \OC::$server->getConfig()->setSystemValue('forcessl', filter_var($_POST['enforceHTTPS'], FILTER_VALIDATE_BOOLEAN));
-}
-
-if(isset($_POST['trustedDomain'])) {
- $trustedDomains = \OC::$server->getConfig()->getSystemValue('trusted_domains');
- $trustedDomains[] = $_POST['trustedDomain'];
- \OC::$server->getConfig()->setSystemValue('trusted_domains', $trustedDomains);
-}
-
-echo 'true';
diff --git a/settings/ajax/userlist.php b/settings/ajax/userlist.php
deleted file mode 100644
index 807cf5f1899..00000000000
--- a/settings/ajax/userlist.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Michael Gapczynski
- * @copyright 2012 Michael Gapczynski mtgap@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-OC_JSON::callCheck();
-OC_JSON::checkSubAdminUser();
-if (isset($_GET['offset'])) {
- $offset = $_GET['offset'];
-} else {
- $offset = 0;
-}
-if (isset($_GET['limit'])) {
- $limit = $_GET['limit'];
-} else {
- $limit = 10;
-}
-if (isset($_GET['gid']) && !empty($_GET['gid'])) {
- $gid = $_GET['gid'];
- if ($gid === '_everyone') {
- $gid = false;
- }
-} else {
- $gid = false;
-}
-if (isset($_GET['pattern']) && !empty($_GET['pattern'])) {
- $pattern = $_GET['pattern'];
-} else {
- $pattern = '';
-}
-$users = array();
-$userManager = \OC_User::getManager();
-if (OC_User::isAdminUser(OC_User::getUser())) {
- if($gid !== false) {
- $batch = OC_Group::displayNamesInGroup($gid, $pattern, $limit, $offset);
- } else {
- $batch = OC_User::getDisplayNames($pattern, $limit, $offset);
- }
- foreach ($batch as $uid => $displayname) {
- $user = $userManager->get($uid);
- $users[] = array(
- 'name' => $uid,
- 'displayname' => $displayname,
- 'groups' => OC_Group::getUserGroups($uid),
- 'subadmin' => OC_SubAdmin::getSubAdminsGroups($uid),
- 'quota' => OC_Preferences::getValue($uid, 'files', 'quota', 'default'),
- 'storageLocation' => $user->getHome(),
- 'lastLogin' => $user->getLastLogin(),
- );
- }
-} else {
- $groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
- if($gid !== false && in_array($gid, $groups)) {
- $groups = array($gid);
- } elseif($gid !== false) {
- //don't you try to investigate loops you must not know about
- $groups = array();
- }
- $batch = OC_Group::usersInGroups($groups, $pattern, $limit, $offset);
- foreach ($batch as $uid) {
- $user = $userManager->get($uid);
-
- // Only add the groups, this user is a subadmin of
- $userGroups = array_intersect(OC_Group::getUserGroups($uid), OC_SubAdmin::getSubAdminsGroups(OC_User::getUser()));
- $users[] = array(
- 'name' => $uid,
- 'displayname' => $user->getDisplayName(),
- 'groups' => $userGroups,
- 'quota' => OC_Preferences::getValue($uid, 'files', 'quota', 'default'),
- 'storageLocation' => $user->getHome(),
- 'lastLogin' => $user->getLastLogin(),
- );
- }
-}
-OC_JSON::success(array('data' => $users));
diff --git a/settings/application.php b/settings/application.php
index 99d78aff2cc..070da8024b2 100644
--- a/settings/application.php
+++ b/settings/application.php
@@ -10,10 +10,15 @@
namespace OC\Settings;
-use OC\AppFramework\Utility\SimpleContainer;
use OC\Settings\Controller\AppSettingsController;
+use OC\Settings\Controller\GroupsController;
+use OC\Settings\Controller\LogSettingsController;
use OC\Settings\Controller\MailSettingsController;
+use OC\Settings\Controller\SecuritySettingsController;
+use OC\Settings\Controller\UsersController;
+use OC\Settings\Middleware\SubadminMiddleware;
use \OCP\AppFramework\App;
+use OCP\IContainer;
use \OCP\Util;
/**
@@ -33,7 +38,7 @@ class Application extends App {
/**
* Controllers
*/
- $container->registerService('MailSettingsController', function(SimpleContainer $c) {
+ $container->registerService('MailSettingsController', function(IContainer $c) {
return new MailSettingsController(
$c->query('AppName'),
$c->query('Request'),
@@ -45,7 +50,7 @@ class Application extends App {
$c->query('DefaultMailAddress')
);
});
- $container->registerService('AppSettingsController', function(SimpleContainer $c) {
+ $container->registerService('AppSettingsController', function(IContainer $c) {
return new AppSettingsController(
$c->query('AppName'),
$c->query('Request'),
@@ -53,26 +58,102 @@ class Application extends App {
$c->query('Config')
);
});
+ $container->registerService('SecuritySettingsController', function(IContainer $c) {
+ return new SecuritySettingsController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('Config')
+ );
+ });
+ $container->registerService('GroupsController', function(IContainer $c) {
+ return new GroupsController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('GroupManager'),
+ $c->query('UserSession'),
+ $c->query('IsAdmin'),
+ $c->query('L10N')
+ );
+ });
+ $container->registerService('UsersController', function(IContainer $c) {
+ return new UsersController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('UserManager'),
+ $c->query('GroupManager'),
+ $c->query('UserSession'),
+ $c->query('Config'),
+ $c->query('IsAdmin'),
+ $c->query('L10N'),
+ $c->query('Logger'),
+ $c->query('Defaults'),
+ $c->query('Mail'),
+ $c->query('DefaultMailAddress'),
+ $c->query('URLGenerator')
+ );
+ });
+ $container->registerService('LogSettingsController', function(IContainer $c) {
+ return new LogSettingsController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('Config'),
+ $c->query('L10N'),
+ $c->query('TimeFactory')
+ );
+ });
+
+ /**
+ * Middleware
+ */
+ $container->registerService('SubadminMiddleware', function(IContainer $c){
+ return new SubadminMiddleware(
+ $c->query('ControllerMethodReflector'),
+ $c->query('IsSubAdmin')
+ );
+ });
+ // Execute middlewares
+ $container->registerMiddleware('SubadminMiddleware');
+
/**
* Core class wrappers
*/
- $container->registerService('Config', function(SimpleContainer $c) {
+ $container->registerService('Config', function(IContainer $c) {
return $c->query('ServerContainer')->getConfig();
});
- $container->registerService('L10N', function(SimpleContainer $c) {
+ $container->registerService('L10N', function(IContainer $c) {
return $c->query('ServerContainer')->getL10N('settings');
});
- $container->registerService('UserSession', function(SimpleContainer $c) {
+ $container->registerService('GroupManager', function(IContainer $c) {
+ return $c->query('ServerContainer')->getGroupManager();
+ });
+ $container->registerService('UserManager', function(IContainer $c) {
+ return $c->query('ServerContainer')->getUserManager();
+ });
+ $container->registerService('UserSession', function(IContainer $c) {
return $c->query('ServerContainer')->getUserSession();
});
- $container->registerService('Mail', function(SimpleContainer $c) {
+ /** FIXME: Remove once OC_User is non-static and mockable */
+ $container->registerService('IsAdmin', function(IContainer $c) {
+ return \OC_User::isAdminUser(\OC_User::getUser());
+ });
+ /** FIXME: Remove once OC_SubAdmin is non-static and mockable */
+ $container->registerService('IsSubAdmin', function(IContainer $c) {
+ return \OC_Subadmin::isSubAdmin(\OC_User::getUser());
+ });
+ $container->registerService('Mail', function(IContainer $c) {
return new \OC_Mail;
});
- $container->registerService('Defaults', function(SimpleContainer $c) {
+ $container->registerService('Defaults', function(IContainer $c) {
return new \OC_Defaults;
});
- $container->registerService('DefaultMailAddress', function(SimpleContainer $c) {
+ $container->registerService('DefaultMailAddress', function(IContainer $c) {
return Util::getDefaultEmailAddress('no-reply');
});
+ $container->registerService('Logger', function(IContainer $c) {
+ return $c->query('ServerContainer')->getLogger();
+ });
+ $container->registerService('URLGenerator', function(IContainer $c) {
+ return $c->query('ServerContainer')->getURLGenerator();
+ });
}
}
diff --git a/settings/changepassword/controller.php b/settings/changepassword/controller.php
index ee596c3e7ed..4ed907daf96 100644
--- a/settings/changepassword/controller.php
+++ b/settings/changepassword/controller.php
@@ -52,7 +52,7 @@ class Controller {
if (\OC_App::isEnabled('files_encryption')) {
//handle the recovery case
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $username);
+ $util = new \OCA\Files_Encryption\Util(new \OC\Files\View('/'), $username);
$recoveryAdminEnabled = \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
$validRecoveryPassword = false;
diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php
index 27205400aff..3688859ef56 100644
--- a/settings/controller/appsettingscontroller.php
+++ b/settings/controller/appsettingscontroller.php
@@ -11,6 +11,8 @@
namespace OC\Settings\Controller;
+use OC\App\DependencyAnalyzer;
+use OC\App\Platform;
use \OCP\AppFramework\Controller;
use OCP\IRequest;
use OCP\IL10N;
@@ -116,17 +118,30 @@ class AppSettingsController extends Controller {
}
// fix groups to be an array
- $apps = array_map(function($app){
+ $dependencyAnalyzer = new DependencyAnalyzer(new Platform($this->config), $this->l10n);
+ $apps = array_map(function($app) use ($dependencyAnalyzer) {
+
+ // fix groups
$groups = array();
if (is_string($app['groups'])) {
$groups = json_decode($app['groups']);
}
$app['groups'] = $groups;
$app['canUnInstall'] = !$app['active'] && $app['removable'];
+
+ // fix licence vs license
+ if (isset($app['license']) && !isset($app['licence'])) {
+ $app['licence'] = $app['license'];
+ }
+
+ // analyse dependencies
+ $missing = $dependencyAnalyzer->analyze($app);
+ $app['canInstall'] = empty($missing);
+ $app['missingDependencies'] = $missing;
+
return $app;
}, $apps);
return array('apps' => $apps, 'status' => 'success');
}
-
}
diff --git a/settings/controller/groupscontroller.php b/settings/controller/groupscontroller.php
new file mode 100644
index 00000000000..82e72821c3d
--- /dev/null
+++ b/settings/controller/groupscontroller.php
@@ -0,0 +1,140 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Controller;
+
+use OC\AppFramework\Http;
+use \OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\IGroupManager;
+use OCP\IL10N;
+use OCP\IRequest;
+use OCP\IUserSession;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class GroupsController extends Controller {
+ /** @var IGroupManager */
+ private $groupManager;
+ /** @var IL10N */
+ private $l10n;
+ /** @var IUserSession */
+ private $userSession;
+ /** @var bool */
+ private $isAdmin;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param IGroupManager $groupManager
+ * @param IUserSession $userSession
+ * @param bool $isAdmin
+ * @param IL10N $l10n
+ */
+ public function __construct($appName,
+ IRequest $request,
+ IGroupManager $groupManager,
+ IUserSession $userSession,
+ $isAdmin,
+ IL10N $l10n) {
+ parent::__construct($appName, $request);
+ $this->groupManager = $groupManager;
+ $this->userSession = $userSession;
+ $this->isAdmin = $isAdmin;
+ $this->l10n = $l10n;
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @param string $pattern
+ * @param bool $filterGroups
+ * @return DataResponse
+ */
+ public function index($pattern = '', $filterGroups = false) {
+ $groupPattern = $filterGroups ? $pattern : '';
+
+ $groupsInfo = new \OC\Group\MetaData($this->userSession->getUser()->getUID(),
+ $this->isAdmin, $this->groupManager);
+ $groupsInfo->setSorting($groupsInfo::SORT_USERCOUNT);
+ list($adminGroups, $groups) = $groupsInfo->get($groupPattern, $pattern);
+
+ return new DataResponse(
+ array(
+ 'data' => array('adminGroups' => $adminGroups, 'groups' => $groups)
+ )
+ );
+ }
+
+ /**
+ * @param string $id
+ * @return DataResponse
+ */
+ public function create($id) {
+ if($this->groupManager->groupExists($id)) {
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('Group already exists.')
+ ),
+ Http::STATUS_CONFLICT
+ );
+ }
+ if($this->groupManager->createGroup($id)) {
+ return new DataResponse(
+ array(
+ 'groupname' => $id
+ ),
+ Http::STATUS_CREATED
+ );
+ }
+
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Unable to add group.')
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ /**
+ * @param string $id
+ * @return DataResponse
+ */
+ public function destroy($id) {
+ $group = $this->groupManager->get($id);
+ if ($group) {
+ if ($group->delete()) {
+ return new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 'groupname' => $id
+ )
+ ),
+ Http::STATUS_NO_CONTENT
+ );
+ }
+ }
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Unable to delete group.')
+ ),
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+}
diff --git a/settings/controller/logsettingscontroller.php b/settings/controller/logsettingscontroller.php
new file mode 100644
index 00000000000..759b466682c
--- /dev/null
+++ b/settings/controller/logsettingscontroller.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * @author Georg Ehrke
+ * @copyright 2014 Georg Ehrke <georg@ownCloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Controller;
+
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\DataDownloadResponse;
+use OCP\IL10N;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IRequest;
+use OCP\IConfig;
+
+/**
+ * Class LogSettingsController
+ *
+ * @package OC\Settings\Controller
+ */
+class LogSettingsController extends Controller {
+ /**
+ * @var \OCP\IConfig
+ */
+ private $config;
+
+ /**
+ * @var \OCP\IL10N
+ */
+ private $l10n;
+
+ /**
+ * @var \OCP\ITimeFactory
+ */
+ private $timefactory;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param IConfig $config
+ */
+ public function __construct($appName,
+ IRequest $request,
+ IConfig $config,
+ IL10N $l10n,
+ ITimeFactory $timeFactory) {
+
+ parent::__construct($appName, $request);
+ $this->config = $config;
+ $this->l10n = $l10n;
+ $this->timefactory = $timeFactory;
+ }
+
+ /**
+ * set log level for logger
+ *
+ * @param int $level
+ * @return JSONResponse
+ */
+ public function setLogLevel($level) {
+ if ($level < 0 || $level > 4) {
+ return new JSONResponse([
+ 'message' => (string) $this->l10n->t('log-level out of allowed range'),
+ ], Http::STATUS_BAD_REQUEST);
+ }
+
+ $this->config->setSystemValue('loglevel', $level);
+ return new JSONResponse([
+ 'level' => $level,
+ ]);
+ }
+
+ /**
+ * get log entries from logfile
+ *
+ * @param int $count
+ * @param int $offset
+ * @return JSONResponse
+ */
+ public function getEntries($count=50, $offset=0) {
+ return new JSONResponse([
+ 'data' => \OC_Log_Owncloud::getEntries($count, $offset),
+ 'remain' => count(\OC_Log_Owncloud::getEntries(1, $offset + $count)) !== 0,
+ ]);
+ }
+
+ /**
+ * download logfile
+ *
+ * @NoCSRFRequired
+ *
+ * @return DataDownloadResponse
+ */
+ public function download() {
+ return new DataDownloadResponse(
+ json_encode(\OC_Log_Owncloud::getEntries(null, null)),
+ $this->getFilenameForDownload(),
+ 'application/json'
+ );
+ }
+
+ /**
+ * get filename for the logfile that's being downloaded
+ *
+ * @param int $timestamp (defaults to time())
+ * @return string
+ */
+ private function getFilenameForDownload($timestamp=null) {
+ $instanceId = $this->config->getSystemValue('instanceid');
+
+ $filename = implode([
+ 'ownCloud',
+ $instanceId,
+ (!is_null($timestamp)) ? $timestamp : $this->timefactory->getTime()
+ ], '-');
+ $filename .= '.log';
+
+ return $filename;
+ }
+}
diff --git a/settings/controller/securitysettingscontroller.php b/settings/controller/securitysettingscontroller.php
new file mode 100644
index 00000000000..af60df8dc3b
--- /dev/null
+++ b/settings/controller/securitysettingscontroller.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Controller;
+
+use \OCP\AppFramework\Controller;
+use OCP\IRequest;
+use OCP\IConfig;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class SecuritySettingsController extends Controller {
+ /** @var \OCP\IConfig */
+ private $config;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param IConfig $config
+ */
+ public function __construct($appName,
+ IRequest $request,
+ IConfig $config) {
+ parent::__construct($appName, $request);
+ $this->config = $config;
+ }
+
+ /**
+ * @return array
+ */
+ protected function returnSuccess() {
+ return array(
+ 'status' => 'success'
+ );
+ }
+
+ /**
+ * @return array
+ */
+ protected function returnError() {
+ return array(
+ 'status' => 'error'
+ );
+ }
+
+ /**
+ * Enforce or disable the enforcement of SSL
+ * @param boolean $enforceHTTPS Whether SSL should be enforced
+ * @return array
+ */
+ public function enforceSSL($enforceHTTPS = false) {
+ if(!is_bool($enforceHTTPS)) {
+ return $this->returnError();
+ }
+ $this->config->setSystemValue('forcessl', $enforceHTTPS);
+
+ return $this->returnSuccess();
+ }
+
+ /**
+ * Enforce or disable the enforcement for SSL on subdomains
+ * @param bool $forceSSLforSubdomains Whether SSL on subdomains should be enforced
+ * @return array
+ */
+ public function enforceSSLForSubdomains($forceSSLforSubdomains = false) {
+ if(!is_bool($forceSSLforSubdomains)) {
+ return $this->returnError();
+ }
+ $this->config->setSystemValue('forceSSLforSubdomains', $forceSSLforSubdomains);
+
+ return $this->returnSuccess();
+ }
+
+ /**
+ * Add a new trusted domain
+ * @param string $newTrustedDomain The newly to add trusted domain
+ * @return array
+ */
+ public function trustedDomains($newTrustedDomain) {
+ $trustedDomains = $this->config->getSystemValue('trusted_domains');
+ $trustedDomains[] = $newTrustedDomain;
+ $this->config->setSystemValue('trusted_domains', $trustedDomains);
+
+ return $this->returnSuccess();
+ }
+
+}
diff --git a/settings/controller/userscontroller.php b/settings/controller/userscontroller.php
new file mode 100644
index 00000000000..844ed4759e3
--- /dev/null
+++ b/settings/controller/userscontroller.php
@@ -0,0 +1,441 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Controller;
+
+use OC\AppFramework\Http;
+use OC\User\Manager;
+use OC\User\User;
+use \OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IConfig;
+use OCP\IGroupManager;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\IUserSession;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class UsersController extends Controller {
+ /** @var IL10N */
+ private $l10n;
+ /** @var IUserSession */
+ private $userSession;
+ /** @var bool */
+ private $isAdmin;
+ /** @var IUserManager */
+ private $userManager;
+ /** @var IGroupManager */
+ private $groupManager;
+ /** @var IConfig */
+ private $config;
+ /** @var ILogger */
+ private $log;
+ /** @var \OC_Defaults */
+ private $defaults;
+ /** @var \OC_Mail */
+ private $mail;
+ /** @var string */
+ private $fromMailAddress;
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param IUserManager $userManager
+ * @param IGroupManager $groupManager
+ * @param IUserSession $userSession
+ * @param IConfig $config
+ * @param bool $isAdmin
+ * @param IL10N $l10n
+ * @param ILogger $log
+ * @param \OC_Defaults $defaults
+ * @param \OC_Mail $mail
+ * @param string $fromMailAddress
+ */
+ public function __construct($appName,
+ IRequest $request,
+ IUserManager $userManager,
+ IGroupManager $groupManager,
+ IUserSession $userSession,
+ IConfig $config,
+ $isAdmin,
+ IL10N $l10n,
+ ILogger $log,
+ \OC_Defaults $defaults,
+ \OC_Mail $mail,
+ $fromMailAddress,
+ IURLGenerator $urlGenerator) {
+ parent::__construct($appName, $request);
+ $this->userManager = $userManager;
+ $this->groupManager = $groupManager;
+ $this->userSession = $userSession;
+ $this->config = $config;
+ $this->isAdmin = $isAdmin;
+ $this->l10n = $l10n;
+ $this->log = $log;
+ $this->defaults = $defaults;
+ $this->mail = $mail;
+ $this->fromMailAddress = $fromMailAddress;
+ $this->urlGenerator = $urlGenerator;
+ }
+
+ /**
+ * @param IUser $user
+ * @param array $userGroups
+ * @return array
+ */
+ private function formatUserForIndex(IUser $user, array $userGroups = null) {
+ return array(
+ 'name' => $user->getUID(),
+ 'displayname' => $user->getDisplayName(),
+ 'groups' => (empty($userGroups)) ? $this->groupManager->getUserGroupIds($user) : $userGroups,
+ 'subadmin' => \OC_SubAdmin::getSubAdminsGroups($user->getUID()),
+ 'quota' => $this->config->getUserValue($user->getUID(), 'files', 'quota', 'default'),
+ 'storageLocation' => $user->getHome(),
+ 'lastLogin' => $user->getLastLogin(),
+ 'backend' => $user->getBackendClassName(),
+ 'email' => $this->config->getUserValue($user->getUID(), 'settings', 'email', '')
+ );
+ }
+
+ /**
+ * @param array $userIDs Array with schema [$uid => $displayName]
+ * @return IUser[]
+ */
+ private function getUsersForUID(array $userIDs) {
+ $users = [];
+ foreach ($userIDs as $uid => $displayName) {
+ $users[] = $this->userManager->get($uid);
+ }
+ return $users;
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @param int $offset
+ * @param int $limit
+ * @param string $gid GID to filter for
+ * @param string $pattern Pattern to search for in the username
+ * @param string $backend Backend to filter for (class-name)
+ * @return DataResponse
+ *
+ * TODO: Tidy up and write unit tests - code is mainly static method calls
+ */
+ public function index($offset = 0, $limit = 10, $gid = '', $pattern = '', $backend = '') {
+ // FIXME: The JS sends the group '_everyone' instead of no GID for the "all users" group.
+ if($gid === '_everyone') {
+ $gid = '';
+ }
+
+ // Remove backends
+ if(!empty($backend)) {
+ $activeBackends = $this->userManager->getBackends();
+ $this->userManager->clearBackends();
+ foreach($activeBackends as $singleActiveBackend) {
+ if($backend === get_class($singleActiveBackend)) {
+ $this->userManager->registerBackend($singleActiveBackend);
+ break;
+ }
+ }
+ }
+
+ $users = array();
+ if ($this->isAdmin) {
+
+ if($gid !== '') {
+ $batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset));
+ } else {
+ $batch = $this->userManager->search('', $limit, $offset);
+ }
+
+ foreach ($batch as $user) {
+ $users[] = $this->formatUserForIndex($user);
+ }
+
+ } else {
+ // Set the $gid parameter to an empty value if the subadmin has no rights to access a specific group
+ if($gid !== '' && !in_array($gid, \OC_SubAdmin::getSubAdminsGroups($this->userSession->getUser()->getUID()))) {
+ $gid = '';
+ }
+
+ $batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset));
+ foreach ($batch as $user) {
+ // Only add the groups, this user is a subadmin of
+ $userGroups = array_intersect($this->groupManager->getUserGroupIds($user),
+ \OC_SubAdmin::getSubAdminsGroups($this->userSession->getUser()->getUID()));
+ $users[] = $this->formatUserForIndex($user, $userGroups);
+ }
+ }
+
+ return new DataResponse($users);
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @param string $username
+ * @param string $password
+ * @param array $groups
+ * @param string $email
+ * @return DataResponse
+ *
+ * TODO: Tidy up and write unit tests - code is mainly static method calls
+ */
+ public function create($username, $password, array $groups=array(), $email='') {
+
+ if($email !== '' && !$this->mail->validateAddress($email)) {
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('Invalid mail address')
+ ),
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ }
+
+ // TODO FIXME get rid of the static calls to OC_Subadmin
+ if (!$this->isAdmin) {
+ if (!empty($groups)) {
+ foreach ($groups as $key => $group) {
+ if (!\OC_SubAdmin::isGroupAccessible($this->userSession->getUser()->getUID(), $group)) {
+ unset($groups[$key]);
+ }
+ }
+ }
+ if (empty($groups)) {
+ $groups = \OC_SubAdmin::getSubAdminsGroups($this->userSession->getUser()->getUID());
+ }
+ }
+
+ try {
+ $user = $this->userManager->createUser($username, $password);
+ } catch (\Exception $exception) {
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('Unable to create user.')
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ if($user instanceof User) {
+ if($groups !== null) {
+ foreach( $groups as $groupName ) {
+ $group = $this->groupManager->get($groupName);
+
+ if(empty($group)) {
+ $group = $this->groupManager->createGroup($groupName);
+ }
+ $group->addUser($user);
+ }
+ }
+ /**
+ * Send new user mail only if a mail is set
+ */
+ if($email !== '') {
+ $this->config->setUserValue($username, 'settings', 'email', $email);
+
+ // data for the mail template
+ $mailData = array(
+ 'username' => $username,
+ 'url' => $this->urlGenerator->getAbsoluteURL('/')
+ );
+
+ $mail = new TemplateResponse('settings', 'email.new_user', $mailData, 'blank');
+ $mailContent = $mail->render();
+
+ $mail = new TemplateResponse('settings', 'email.new_user_plain_text', $mailData, 'blank');
+ $plainTextMailContent = $mail->render();
+
+ $subject = $this->l10n->t('Your %s account was created', [$this->defaults->getName()]);
+
+ try {
+ $this->mail->send(
+ $email,
+ $username,
+ $subject,
+ $mailContent,
+ $this->fromMailAddress,
+ $this->defaults->getName(),
+ 1,
+ $plainTextMailContent);
+ } catch(\Exception $e) {
+ $this->log->error("Can't send new user mail to $email: " . $e->getMessage(), array('app' => 'settings'));
+ }
+ }
+ // fetch users groups
+ $userGroups = $this->groupManager->getUserGroupIds($user);
+
+ return new DataResponse(
+ $this->formatUserForIndex($user, $userGroups),
+ Http::STATUS_CREATED
+ );
+ }
+
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('Unable to create user.')
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @param string $id
+ * @return DataResponse
+ *
+ * TODO: Tidy up and write unit tests - code is mainly static method calls
+ */
+ public function destroy($id) {
+ if($this->userSession->getUser()->getUID() === $id) {
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Unable to delete user.')
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ // FIXME: Remove this static function call at some point…
+ if(!$this->isAdmin && !\OC_SubAdmin::isUserAccessible($this->userSession->getUser()->getUID(), $id)) {
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Authentication error')
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ $user = $this->userManager->get($id);
+ if($user) {
+ if($user->delete()) {
+ return new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 'username' => $id
+ )
+ ),
+ Http::STATUS_NO_CONTENT
+ );
+ }
+ }
+
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Unable to delete user.')
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ /**
+ * Set the mail address of a user
+ *
+ * @NoAdminRequired
+ * @NoSubadminRequired
+ *
+ * @param string $id
+ * @param string $mailAddress
+ * @return DataResponse
+ *
+ * TODO: Tidy up and write unit tests - code is mainly static method calls
+ */
+ public function setMailAddress($id, $mailAddress) {
+ // FIXME: Remove this static function call at some point…
+ if($this->userSession->getUser()->getUID() !== $id
+ && !$this->isAdmin
+ && !\OC_SubAdmin::isUserAccessible($this->userSession->getUser()->getUID(), $id)) {
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Forbidden')
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ if($mailAddress !== '' && !$this->mail->validateAddress($mailAddress)) {
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Invalid mail address')
+ )
+ ),
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ }
+
+ $user = $this->userManager->get($id);
+ if(!$user){
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Invalid user')
+ )
+ ),
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ }
+
+ // this is the only permission a backend provides and is also used
+ // for the permission of setting a email address
+ if(!$user->canChangeDisplayName()){
+ return new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => (string)$this->l10n->t('Unable to change mail address')
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ $this->config->setUserValue($id, 'settings', 'email', $mailAddress);
+
+ return new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 'username' => $id,
+ 'mailAddress' => $mailAddress,
+ 'message' => (string)$this->l10n->t('Email saved')
+ )
+ ),
+ Http::STATUS_OK
+ );
+ }
+
+}
diff --git a/settings/css/settings.css b/settings/css/settings.css
index c18d5913b6f..9a4e54971c5 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -94,8 +94,12 @@ td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidde
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; }
-th#headerLastLogin, td.lastLogin { display : none; }
-th#headerStorageLocation, td.storageLocation { display : none; }
+#userlist .mailAddress,
+#userlist .storageLocation,
+#userlist .userBackend,
+#userlist .lastLogin {
+ display : none;
+}
td.remove { width:1em; padding-right:1em; }
tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:pointer; }
@@ -200,6 +204,17 @@ span.version { margin-left:1em; margin-right:1em; color:#555; }
border-bottom: 1px solid #e8e8e8;
}
+.app-dependencies {
+ margin-top: 10px;
+ color: #c33;
+}
+
+.missing-dependencies {
+ list-style: initial;
+ list-style-type: initial;
+ list-style-position: inside;
+}
+
/* Transition to complete width! */
.app:hover, .app:active { max-width: inherit; }
diff --git a/settings/js/admin.js b/settings/js/admin.js
index e3a092f71b0..d00d083407f 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -9,8 +9,8 @@ $(document).ready(function(){
if(answer) {
$.ajax({
type: 'POST',
- url: OC.generateUrl('settings/ajax/setsecurity.php'),
- data: { trustedDomain: params.trustDomain }
+ url: OC.generateUrl('settings/admin/security/trustedDomains'),
+ data: { newTrustedDomain: params.trustDomain }
}).done(function() {
window.location.replace(OC.generateUrl('settings/admin'));
});
@@ -34,7 +34,7 @@ $(document).ready(function(){
$('#loglevel').change(function(){
- $.post(OC.filePath('settings','ajax','setloglevel.php'), { level: $(this).val() },function(){
+ $.post(OC.generateUrl('/settings/admin/log/level'), {level: $(this).val()},function(){
OC.Log.reload();
} );
});
@@ -73,10 +73,32 @@ $(document).ready(function(){
$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked));
});
- $('#security').change(function(){
- $.post(OC.filePath('settings','ajax','setsecurity.php'), { enforceHTTPS: $('#forcessl').val() },function(){} );
+ $('#forcessl').change(function(){
+ $(this).val(($(this).val() !== 'true'));
+ var forceSSLForSubdomain = $('#forceSSLforSubdomainsSpan');
+
+ $.post(OC.generateUrl('settings/admin/security/ssl'), {
+ enforceHTTPS: $(this).val()
+ },function(){} );
+
+ if($(this).val() === 'true') {
+ forceSSLForSubdomain.prop('disabled', false);
+ forceSSLForSubdomain.removeClass('hidden');
+ } else {
+ forceSSLForSubdomain.prop('disabled', true);
+ forceSSLForSubdomain.addClass('hidden');
+ }
});
+ $('#forceSSLforSubdomains').change(function(){
+ $(this).val(($(this).val() !== 'true'));
+
+ $.post(OC.generateUrl('settings/admin/security/ssl/subdomains'), {
+ forceSSLforSubdomains: $(this).val()
+ },function(){} );
+ });
+
+
$('#mail_smtpauth').change(function() {
if (!this.checked) {
$('#mail_credentials').addClass('hidden');
diff --git a/settings/js/log.js b/settings/js/log.js
index 46d1bfefd5f..c3a9a201e83 100644
--- a/settings/js/log.js
+++ b/settings/js/log.js
@@ -20,14 +20,12 @@ OC.Log = {
loaded: 3,//are initially loaded
getMore: function (count) {
count = count || 10;
- $.get(OC.filePath('settings', 'ajax', 'getlog.php'), {offset: OC.Log.loaded, count: count}, function (result) {
- if (result.status === 'success') {
- OC.Log.addEntries(result.data);
- if (!result.remain) {
- $('#moreLog').hide();
- }
- $('#lessLog').show();
+ $.get(OC.generateUrl('/settings/admin/log/entries'), {offset: OC.Log.loaded, count: count}, function (result) {
+ OC.Log.addEntries(result.data);
+ if (!result.remain) {
+ $('#moreLog').hide();
}
+ $('#lessLog').show();
});
},
showLess: function (count) {
diff --git a/settings/js/personal.js b/settings/js/personal.js
index b2efa7c37f9..fba4af1fd48 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -45,9 +45,20 @@ function changeEmailAddress () {
}
emailInfo.defaultValue = emailInfo.val();
OC.msg.startSaving('#lostpassword .msg');
- var post = $("#lostpassword").serialize();
- $.post('ajax/lostpassword.php', post, function (data) {
- OC.msg.finishedSaving('#lostpassword .msg', data);
+ var post = $("#lostpassword").serializeArray();
+ $.ajax({
+ type: 'PUT',
+ url: OC.generateUrl('/settings/users/{id}/mailAddress', {id: OC.currentUser}),
+ data: {
+ mailAddress: post[0].value
+ }
+ }).done(function(result){
+ // I know the following 4 lines look weird, but that is how it works
+ // in jQuery - for success the first parameter is the result
+ // for failure the first parameter is the result object
+ OC.msg.finishedSaving('#lostpassword .msg', result);
+ }).fail(function(result){
+ OC.msg.finishedSaving('#lostpassword .msg', result.responseJSON);
});
}
@@ -157,6 +168,7 @@ function avatarResponseHandler (data) {
}
$(document).ready(function () {
+ $('#pass2').showPassword().keyup();
$("#passwordbutton").click(function () {
if ($('#pass1').val() !== '' && $('#pass2').val() !== '') {
// Serialize the data
diff --git a/settings/js/settings.js b/settings/js/settings.js
index 13c56a8f53a..fcbe328b76f 100644
--- a/settings/js/settings.js
+++ b/settings/js/settings.js
@@ -41,29 +41,25 @@ OC.Settings = _.extend(OC.Settings, {
};
}
$.ajax({
- url: OC.generateUrl('/settings/ajax/grouplist'),
+ url: OC.generateUrl('/settings/users/groups'),
data: queryData,
dataType: 'json',
success: function(data) {
- if (data.status === "success") {
- var results = [];
+ var results = [];
- // add groups
- $.each(data.data.adminGroups, function(i, group) {
- results.push({id:group.id, displayname:group.name});
- });
- $.each(data.data.groups, function(i, group) {
- results.push({id:group.id, displayname:group.name});
- });
+ // add groups
+ $.each(data.data.adminGroups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
+ $.each(data.data.groups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
- if (query.term === '') {
- // cache full list
- self._cachedGroups = results;
- }
- query.callback({results: results});
- } else {
- //FIXME add error handling
+ if (query.term === '') {
+ // cache full list
+ self._cachedGroups = results;
}
+ query.callback({results: results});
}
});
}, 100, true),
diff --git a/settings/js/users/deleteHandler.js b/settings/js/users/deleteHandler.js
index c89a844044e..fcad39dd4cc 100644
--- a/settings/js/users/deleteHandler.js
+++ b/settings/js/users/deleteHandler.js
@@ -189,11 +189,10 @@ DeleteHandler.prototype.deleteEntry = function(keepNotification) {
var payload = {};
payload[dh.ajaxParamID] = dh.oidToDelete;
$.ajax({
- type: 'POST',
- url: OC.filePath('settings', 'ajax', dh.ajaxEndpoint),
+ type: 'DELETE',
+ url: OC.generateUrl(dh.ajaxEndpoint+'/'+this.oidToDelete),
// FIXME: do not use synchronous ajax calls as they block the browser !
async: false,
- data: payload,
success: function (result) {
if (result.status === 'success') {
// Remove undo option, & remove user from table
@@ -202,7 +201,7 @@ DeleteHandler.prototype.deleteEntry = function(keepNotification) {
dh.removeCallback(dh.oidToDelete);
dh.canceled = true;
} else {
- OC.dialogs.alert(result.data.message, t('settings', 'Unable to delete {objName}', {objName: escapeHTML(dh.oidToDelete)}));
+ OC.dialogs.alert(result.data.message, t('settings', 'Unable to delete {objName}', {objName: dh.oidToDelete}));
dh.undoCallback(dh.oidToDelete);
}
}
diff --git a/settings/js/users/filter.js b/settings/js/users/filter.js
index c5944e9b4b1..72f2cfc6d24 100644
--- a/settings/js/users/filter.js
+++ b/settings/js/users/filter.js
@@ -70,7 +70,14 @@ UserManagementFilter.prototype.run = _.debounce(function() {
* @returns string
*/
UserManagementFilter.prototype.getPattern = function() {
- return this.filterInput.val();
+ var input = this.filterInput.val(),
+ html = $('html'),
+ isIE8or9 = html.hasClass('lte9');
+ // FIXME - TODO - once support for IE8 and IE9 is dropped
+ if(isIE8or9 && input == this.filterInput.attr('placeholder')) {
+ input = '';
+ }
+ return input;
};
/**
diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js
index 081842734f0..c06bc5ff14b 100644
--- a/settings/js/users/groups.js
+++ b/settings/js/users/groups.js
@@ -84,29 +84,24 @@ GroupList = {
createGroup: function (groupname) {
$.post(
- OC.filePath('settings', 'ajax', 'creategroup.php'),
+ OC.generateUrl('/settings/users/groups'),
{
- groupname: groupname
+ id: groupname
},
function (result) {
- if (result.status !== 'success') {
- OC.dialogs.alert(result.data.message,
- t('settings', 'Error creating group'));
+ if (result.groupname) {
+ var addedGroup = result.groupname;
+ UserList.availableGroups = $.unique($.merge(UserList.availableGroups, [addedGroup]));
+ GroupList.addGroup(result.groupname);
+
+ $('.groupsselect, .subadminsselect')
+ .append($('<option>', { value: result.groupname })
+ .text(result.groupname));
}
- else {
- if (result.data.groupname) {
- var addedGroup = result.data.groupname;
- UserList.availableGroups = $.unique($.merge(UserList.availableGroups, [addedGroup]));
- GroupList.addGroup(result.data.groupname);
-
- $('.groupsselect, .subadminsselect')
- .append($('<option>', { value: result.data.groupname })
- .text(result.data.groupname));
- }
- GroupList.toggleAddGroup();
- }
- }
- );
+ GroupList.toggleAddGroup();
+ }).fail(function(result, textStatus, errorThrown) {
+ OC.dialogs.alert(result.responseJSON.message, t('settings', 'Error creating group'));
+ });
},
update: function () {
@@ -115,7 +110,7 @@ GroupList = {
}
GroupList.updating = true;
$.get(
- OC.generateUrl('/settings/ajax/grouplist'),
+ OC.generateUrl('/settings/users/groups'),
{
pattern: filter.getPattern(),
filterGroups: filter.filterGroups ? 1 : 0
@@ -221,7 +216,7 @@ GroupList = {
},
initDeleteHandling: function () {
//set up handler
- GroupDeleteHandler = new DeleteHandler('removegroup.php', 'groupname',
+ GroupDeleteHandler = new DeleteHandler('/settings/users/groups', 'groupname',
GroupList.hide, GroupList.remove);
//configure undo
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index f7ac5dc752d..3e05d12c9af 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -12,9 +12,7 @@ var filter;
var UserList = {
availableGroups: [],
- offset: 30, //The first 30 users are there. No prob, if less in total.
- //hardcoded in settings/users.php
-
+ offset: 0,
usersToLoad: 10, //So many users will be loaded when user scrolls down
currentGid: '',
@@ -30,30 +28,63 @@ var UserList = {
this.$el.find('.quota-user').singleSelect().on('change', this.onQuotaSelect);
},
- add: function (username, displayname, groups, subadmin, quota, storageLocation, lastLogin, sort) {
+ /**
+ * Add a user row from user object
+ *
+ * @param user object containing following keys:
+ * {
+ * 'name': 'username',
+ * 'displayname': 'Users display name',
+ * 'groups': ['group1', 'group2'],
+ * 'subadmin': ['group4', 'group5'],
+ * 'quota': '10 GB',
+ * 'storageLocation': '/srv/www/owncloud/data/username',
+ * 'lastLogin': '1418632333'
+ * 'backend': 'LDAP',
+ * 'email': 'username@example.org'
+ * }
+ * @param sort
+ * @returns table row created for this user
+ */
+ add: function (user, sort) {
var $tr = $userListBody.find('tr:first-child').clone();
+ // this removes just the `display:none` of the template row
+ $tr.removeAttr('style');
var subAdminsEl;
var subAdminSelect;
var groupsSelect;
- if ($tr.find('div.avatardiv').length){
- $tr.find('.avatardiv').imageplaceholder(username, displayname);
- $('div.avatardiv', $tr).avatar(username, 32);
- }
- $tr.data('uid', username);
- $tr.data('displayname', displayname);
- $tr.find('td.name').text(username);
- $tr.find('td.displayName > span').text(displayname);
+ /**
+ * Avatar or placeholder
+ */
+ if ($tr.find('div.avatardiv').length){
+ $tr.find('.avatardiv').imageplaceholder(user.name, user.displayname);
+ $('div.avatardiv', $tr).avatar(user.name, 32);
+ }
+
+ /**
+ * add username and displayname to row (in data and visible markup
+ */
+ $tr.data('uid', user.name);
+ $tr.data('displayname', user.displayname);
+ $tr.data('mailAddress', user.email);
+ $tr.find('td.name').text(user.name);
+ $tr.find('td.displayName > span').text(user.displayname);
+ $tr.find('td.mailAddress > span').text(user.email);
+
+ /**
+ * groups and subadmins
+ */
// make them look like the multiselect buttons
// until they get time to really get initialized
- groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'Groups') + '"></select>')
- .data('username', username)
- .data('user-groups', groups);
+ groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'no group') + '"></select>')
+ .data('username', user.name)
+ .data('user-groups', user.groups);
if ($tr.find('td.subadmins').length > 0) {
subAdminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'no group') + '">')
- .data('username', username)
- .data('user-groups', groups)
- .data('subadmin', subadmin);
+ .data('username', user.name)
+ .data('user-groups', user.groups)
+ .data('subadmin', user.subadmin);
$tr.find('td.subadmins').empty();
}
$.each(this.availableGroups, function (i, group) {
@@ -67,7 +98,11 @@ var UserList = {
if (subAdminsEl.length > 0) {
subAdminsEl.append(subAdminSelect);
}
- if ($tr.find('td.remove img').length === 0 && OC.currentUser !== username) {
+
+ /**
+ * remove action
+ */
+ if ($tr.find('td.remove img').length === 0 && OC.currentUser !== user.name) {
var deleteImage = $('<img class="svg action">').attr({
src: OC.imagePath('core', 'actions/delete')
});
@@ -75,29 +110,45 @@ var UserList = {
.attr({ href: '#', 'original-title': t('settings', 'Delete')})
.append(deleteImage);
$tr.find('td.remove').append(deleteLink);
- } else if (OC.currentUser === username) {
+ } else if (OC.currentUser === user.name) {
$tr.find('td.remove a').remove();
}
+
+ /**
+ * quota
+ */
var $quotaSelect = $tr.find('.quota-user');
- if (quota === 'default') {
+ if (user.quota === 'default') {
$quotaSelect
.data('previous', 'default')
.find('option').attr('selected', null)
.first().attr('selected', 'selected');
} else {
- if ($quotaSelect.find('option').filterAttr('value', quota).length > 0) {
- $quotaSelect.find('option').filterAttr('value', quota).attr('selected', 'selected');
+ if ($quotaSelect.find('option').filterAttr('value', user.quota).length > 0) {
+ $quotaSelect.find('option').filterAttr('value', user.quota).attr('selected', 'selected');
} else {
- $quotaSelect.append('<option value="' + escapeHTML(quota) + '" selected="selected">' + escapeHTML(quota) + '</option>');
+ $quotaSelect.append('<option value="' + escapeHTML(user.quota) + '" selected="selected">' + escapeHTML(user.quota) + '</option>');
}
}
- $tr.find('td.storageLocation').text(storageLocation);
+ /**
+ * storage location
+ */
+ $tr.find('td.storageLocation').text(user.storageLocation);
+
+ /**
+ * user backend
+ */
+ $tr.find('td.userBackend').text(user.backend);
+
+ /**
+ * last login
+ */
var lastLoginRel = t('settings', 'never');
var lastLoginAbs = lastLoginRel;
- if(lastLogin !== 0) {
- lastLoginRel = OC.Util.relativeModifiedDate(lastLogin);
- lastLoginAbs = OC.Util.formatDate(lastLogin);
+ if(user.lastLogin !== 0) {
+ lastLoginRel = OC.Util.relativeModifiedDate(user.lastLogin);
+ lastLoginAbs = OC.Util.formatDate(user.lastLogin);
}
var $tdLastLogin = $tr.find('td.lastLogin');
$tdLastLogin.text(lastLoginRel);
@@ -107,6 +158,10 @@ var UserList = {
var tooltip = $('<div>').html($($tdLastLogin.attr('original-title')).text(lastLoginAbs)).html();
$tdLastLogin.tipsy({gravity:'s', fade:true, html:true});
$tdLastLogin.attr('title', tooltip);
+
+ /**
+ * append generated row to user list
+ */
$tr.appendTo($userList);
if(UserList.isEmpty === true) {
//when the list was emptied, one row was left, necessary to keep
@@ -116,6 +171,10 @@ var UserList = {
UserList.isEmpty = false;
UserList.checkUsersToLoad();
}
+
+ /**
+ * sort list
+ */
if (sort) {
UserList.doSort();
}
@@ -290,9 +349,12 @@ var UserList = {
getDisplayName: function(element) {
return ($(element).closest('tr').data('displayname') || '').toString();
},
+ getMailAddress: function(element) {
+ return ($(element).closest('tr').data('mailAddress') || '').toString();
+ },
initDeleteHandling: function() {
//set up handler
- UserDeleteHandler = new DeleteHandler('removeuser.php', 'username',
+ UserDeleteHandler = new DeleteHandler('/settings/users/users', 'username',
UserList.markRemove, UserList.remove);
//configure undo
@@ -314,10 +376,13 @@ var UserList = {
UserDeleteHandler.deleteEntry();
});
},
- update: function (gid) {
+ update: function (gid, limit) {
if (UserList.updating) {
return;
}
+ if(!limit) {
+ limit = UserList.usersToLoad;
+ }
$userList.siblings('.loading').css('visibility', 'visible');
UserList.updating = true;
if(gid === undefined) {
@@ -326,40 +391,41 @@ var UserList = {
UserList.currentGid = gid;
var pattern = filter.getPattern();
$.get(
- OC.generateUrl('/settings/ajax/userlist'),
- { offset: UserList.offset, limit: UserList.usersToLoad, gid: gid, pattern: pattern },
+ OC.generateUrl('/settings/users/users'),
+ { offset: UserList.offset, limit: limit, gid: gid, pattern: pattern },
function (result) {
var loadedUsers = 0;
var trs = [];
- if (result.status === 'success') {
- //The offset does not mirror the amount of users available,
- //because it is backend-dependent. For correct retrieval,
- //always the limit(requested amount of users) needs to be added.
- $.each(result.data, function (index, user) {
- if(UserList.has(user.name)) {
- return true;
- }
- var $tr = UserList.add(user.name, user.displayname, user.groups, user.subadmin, user.quota, user.storageLocation, user.lastLogin, false);
- $tr.addClass('appear transparent');
- trs.push($tr);
- loadedUsers++;
- });
- if (result.data.length > 0) {
- UserList.doSort();
- $userList.siblings('.loading').css('visibility', 'hidden');
- }
- else {
- UserList.noMoreEntries = true;
- $userList.siblings('.loading').remove();
+ //The offset does not mirror the amount of users available,
+ //because it is backend-dependent. For correct retrieval,
+ //always the limit(requested amount of users) needs to be added.
+ $.each(result, function (index, user) {
+ if(UserList.has(user.name)) {
+ return true;
}
- UserList.offset += loadedUsers;
- // animate
- setTimeout(function() {
- for (var i = 0; i < trs.length; i++) {
- trs[i].removeClass('transparent');
- }
- }, 0);
+ var $tr = UserList.add(user, user.lastLogin, false, user.backend);
+ $tr.addClass('appear transparent');
+ trs.push($tr);
+ loadedUsers++;
+ });
+ if (result.length > 0) {
+ UserList.doSort();
+ $userList.siblings('.loading').css('visibility', 'hidden');
+ // reset state on load
+ UserList.noMoreEntries = false;
+ }
+ else {
+ UserList.noMoreEntries = true;
+ $userList.siblings('.loading').remove();
}
+ UserList.offset += loadedUsers;
+ // animate
+ setTimeout(function() {
+ for (var i = 0; i < trs.length; i++) {
+ trs[i].removeClass('transparent');
+ }
+ }, 0);
+ }).always(function() {
UserList.updating = false;
});
},
@@ -499,7 +565,7 @@ var UserList = {
return;
}
if (UserList.scrollArea.scrollTop() + UserList.scrollArea.height() > UserList.scrollArea.get(0).scrollHeight - 500) {
- UserList.update(UserList.currentGid, true);
+ UserList.update(UserList.currentGid);
}
},
@@ -643,6 +709,45 @@ $(document).ready(function () {
});
});
+ $userListBody.on('click', '.mailAddress', function (event) {
+ event.stopPropagation();
+ var $td = $(this).closest('td');
+ var $tr = $td.closest('tr');
+ var uid = UserList.getUID($td);
+ var mailAddress = escapeHTML(UserList.getMailAddress($td));
+ var $input = $('<input type="text">').val(mailAddress);
+ $td.children('span').replaceWith($input);
+ $input
+ .focus()
+ .keypress(function (event) {
+ if (event.keyCode === 13) {
+ if ($(this).val().length > 0) {
+ $input.blur();
+ $.ajax({
+ type: 'PUT',
+ url: OC.generateUrl('/settings/users/{id}/mailAddress', {id: uid}),
+ data: {
+ mailAddress: $(this).val()
+ }
+ }).fail(function (result) {
+ OC.Notification.show(result.responseJSON.data.message);
+ // reset the values
+ $tr.data('mailAddress', mailAddress);
+ $tr.children('.mailAddress').children('span').text(mailAddress);
+ });
+ } else {
+ $input.blur();
+ }
+ }
+ })
+ .blur(function () {
+ var mailAddress = $input.val();
+ var $span = $('<span>').text(mailAddress);
+ $tr.data('mailAddress', mailAddress);
+ $input.replaceWith($span);
+ });
+ });
+
// init the quota field select box after it is shown the first time
$('#app-settings').one('show', function() {
$(this).find('#default_quota').singleSelect().on('change', UserList.onQuotaSelect);
@@ -652,6 +757,7 @@ $(document).ready(function () {
event.preventDefault();
var username = $('#newusername').val();
var password = $('#newuserpassword').val();
+ var email = $('#newemail').val();
if ($.trim(username) === '') {
OC.dialogs.alert(
t('settings', 'A valid username must be provided'),
@@ -664,75 +770,96 @@ $(document).ready(function () {
t('settings', 'Error creating user'));
return false;
}
- var groups = $('#newusergroups').val();
+ if(!$('#CheckboxMailOnUserCreate').is(':checked')) {
+ email = '';
+ }
+ if ($('#CheckboxMailOnUserCreate').is(':checked') && $.trim(email) === '') {
+ OC.dialogs.alert(
+ t('settings', 'A valid email must be provided'),
+ t('settings', 'Error creating user'));
+ return false;
+ }
+ var groups = $('#newusergroups').val() || [];
$('#newuser').get(0).reset();
$.post(
- OC.filePath('settings', 'ajax', 'createuser.php'),
+ OC.generateUrl('/settings/users/users'),
{
username: username,
password: password,
- groups: groups
+ groups: groups,
+ email: email
},
function (result) {
- if (result.status !== 'success') {
- OC.dialogs.alert(result.data.message,
- t('settings', 'Error creating user'));
- } else {
- if (result.data.groups) {
- var addedGroups = result.data.groups;
- for (var i in result.data.groups) {
- var gid = result.data.groups[i];
- if(UserList.availableGroups.indexOf(gid) === -1) {
- UserList.availableGroups.push(gid);
- }
- $li = GroupList.getGroupLI(gid);
- userCount = GroupList.getUserCount($li);
- GroupList.setUserCount($li, userCount + 1);
- }
- }
- if (result.data.homeExists){
- OC.Notification.hide();
- OC.Notification.show(t('settings', 'Warning: Home directory for user "{user}" already exists', {user: result.data.username}));
- if (UserList.notificationTimeout){
- window.clearTimeout(UserList.notificationTimeout);
+ if (result.groups) {
+ for (var i in result.groups) {
+ var gid = result.groups[i];
+ if(UserList.availableGroups.indexOf(gid) === -1) {
+ UserList.availableGroups.push(gid);
}
- UserList.notificationTimeout = window.setTimeout(
- function(){
- OC.Notification.hide();
- UserList.notificationTimeout = null;
- }, 10000);
- }
- if(!UserList.has(username)) {
- UserList.add(username, username, result.data.groups, null, 'default', result.data.storageLocation, 0, true);
+ $li = GroupList.getGroupLI(gid);
+ userCount = GroupList.getUserCount($li);
+ GroupList.setUserCount($li, userCount + 1);
}
- $('#newusername').focus();
- GroupList.incEveryoneCount();
}
- }
- );
+ if(!UserList.has(username)) {
+ UserList.add(result, true);
+ }
+ $('#newusername').focus();
+ GroupList.incEveryoneCount();
+ }).fail(function(result, textStatus, errorThrown) {
+ OC.dialogs.alert(result.responseJSON.message, t('settings', 'Error creating user'));
+ });
});
// Option to display/hide the "Storage location" column
$('#CheckboxStorageLocation').click(function() {
if ($('#CheckboxStorageLocation').is(':checked')) {
- $("#headerStorageLocation").show();
- $("#userlist td.storageLocation").show();
+ $("#userlist .storageLocation").show();
} else {
- $("#headerStorageLocation").hide();
- $("#userlist td.storageLocation").hide();
+ $("#userlist .storageLocation").hide();
}
});
// Option to display/hide the "Last Login" column
$('#CheckboxLastLogin').click(function() {
if ($('#CheckboxLastLogin').is(':checked')) {
- $("#headerLastLogin").show();
- $("#userlist td.lastLogin").show();
+ $("#userlist .lastLogin").show();
+ } else {
+ $("#userlist .lastLogin").hide();
+ }
+ });
+ // Option to display/hide the "Mail Address" column
+ $('#CheckboxEmailAddress').click(function() {
+ if ($('#CheckboxEmailAddress').is(':checked')) {
+ $("#userlist .mailAddress").show();
+ } else {
+ $("#userlist .mailAddress").hide();
+ }
+ });
+ // Option to display/hide the "User Backend" column
+ $('#CheckboxUserBackend').click(function() {
+ if ($('#CheckboxUserBackend').is(':checked')) {
+ $("#userlist .userBackend").show();
} else {
- $("#headerLastLogin").hide();
- $("#userlist td.lastLogin").hide();
+ $("#userlist .userBackend").hide();
+ }
+ });
+ // Option to display/hide the "E-Mail" input field
+ $('#CheckboxMailOnUserCreate').click(function() {
+ if ($('#CheckboxMailOnUserCreate').is(':checked')) {
+ $("#newemail").show();
+ } else {
+ $("#newemail").hide();
}
});
+ // calculate initial limit of users to load
+ var initialUserCountLimit = 20,
+ containerHeight = $('#app-content').height();
+ if(containerHeight > 40) {
+ initialUserCountLimit = Math.floor(containerHeight/40);
+ }
+ // trigger loading of users on startup
+ UserList.update(UserList.currentGid, initialUserCountLimit);
});
diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js
index 80d19fa2635..2067fb97c6d 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -9,12 +9,6 @@ OC.L10N.register(
"Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
"Your full name has been changed." : "اسمك الكامل تم تغييره.",
"Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
- "Group already exists" : "المجموعة موجودة مسبقاً",
- "Unable to add group" : "فشل إضافة المجموعة",
- "Email saved" : "تم حفظ البريد الإلكتروني",
- "Invalid email" : "البريد الإلكتروني غير صالح",
- "Unable to delete group" : "فشل إزالة المجموعة",
- "Unable to delete user" : "فشل إزالة المستخدم",
"Backups restored successfully" : "تم إسترجاع النسخة الإحتياطية بنجاح",
"Language changed" : "تم تغيير اللغة",
"Invalid request" : "طلب غير مفهوم",
@@ -33,6 +27,7 @@ OC.L10N.register(
"test email settings" : "إعدادات البريد التجريبي",
"If you received this email, the settings seem to be correct." : "تبدوا الاعدادت صحيحة اذا تلقيت هذا البريد الالكتروني",
"Email sent" : "تم ارسال البريد الالكتروني",
+ "Email saved" : "تم حفظ البريد الإلكتروني",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
@@ -60,7 +55,6 @@ OC.L10N.register(
"A valid username must be provided" : "يجب ادخال اسم مستخدم صحيح",
"Error creating user" : "حصل خطأ اثناء انشاء مستخدم",
"A valid password must be provided" : "يجب ادخال كلمة مرور صحيحة",
- "Warning: Home directory for user \"{user}\" already exists" : "تحذير: المجلد الرئيسي لـ المستخدم \"{user}\" موجود مسبقا",
"__language_name__" : "__language_name__",
"Encryption" : "التشفير",
"Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
@@ -72,16 +66,12 @@ OC.L10N.register(
"Login" : "تسجيل الدخول",
"Security Warning" : "تحذير أمان",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "انت تستخدم %s عن طريق HTTP . نحن نقترح باصرار ان تهيء الخادم ليتمكن من الوصول عن طريق HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "مجلد data و ملفاتك يمكن الوصول لها عن طريق الانترنت. ملف .htaccess لا يمكن تشغيلة. نحن نقترح باصرار ان تعيد اعداد خادمك لمنع الدخول الى بياناتك عن طريق الانترنت او بالامكان ان تنقل مجلد data خارج document root بشكل مؤقت. ",
"Setup Warning" : "تحذير في التنصيب",
"Module 'fileinfo' missing" : "الموديل 'fileinfo' مفقود",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "موديل 'fileinfo' الخاص بالـPHP مفقود . نوصي بتفعيل هذا الموديل للحصول على أفضل النتائج مع خاصية التحقق ",
- "Your PHP version is outdated" : "اصدار PHP الخاص بك قديم",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "اصدار PHP الخاص بك قديم. نحن نقترح لك باصرار ان يتم ترقية الاصدار الى 5.3.8 او احدث بسبب ان الاصدارات القديمة معروفة انها مهمشة. من الممكن ان التنزيل قد لا يتم بصورة صحيحة.",
"Locale not working" : "اللغه لا تعمل",
"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 to install the required packages on your system to support one of the following locales: %s." : "نحن باصرار نقترح ان تثبت الحزم المطلوبة في نظامك لدعم احد هذة اللغات: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "الرجاء التحقق من <a href='%s'>دليل التنصيب</a>.",
"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 لاستدعاء الملف cron.php كل 15 دقيقه",
@@ -138,7 +128,7 @@ OC.L10N.register(
"The encryption app is no longer enabled, please decrypt all your files" : "البرنامج المشفر لم يعد مفعل, يرجى فك التشفير عن كل ملفاتك",
"Log-in password" : "كلمه سر الدخول",
"Decrypt all Files" : "فك تشفير جميع الملفات ",
- "Login Name" : "اسم الدخول",
+ "Username" : "إسم المستخدم",
"Create" : "انشئ",
"Admin Recovery Password" : "استعادة كلمة المرور للمسؤول",
"Enter the recovery password in order to recover the users files during password change" : "ادخل كلمة المرور المستعادة من اجل استرداد ملفات المستخدمين اثناء تغيير كلمة المرور",
@@ -148,7 +138,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "يرجى ادخال تخزين quota (مثل:\"512 MB\" او \"12 GB\")",
"Unlimited" : "غير محدود",
"Other" : "شيء آخر",
- "Username" : "إسم المستخدم",
"Quota" : "حصه",
"Last Login" : "آخر تسجيل دخول",
"change full name" : "تغيير اسمك الكامل",
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index fe6a18d6857..f0714038a55 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -7,12 +7,6 @@
"Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
"Your full name has been changed." : "اسمك الكامل تم تغييره.",
"Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
- "Group already exists" : "المجموعة موجودة مسبقاً",
- "Unable to add group" : "فشل إضافة المجموعة",
- "Email saved" : "تم حفظ البريد الإلكتروني",
- "Invalid email" : "البريد الإلكتروني غير صالح",
- "Unable to delete group" : "فشل إزالة المجموعة",
- "Unable to delete user" : "فشل إزالة المستخدم",
"Backups restored successfully" : "تم إسترجاع النسخة الإحتياطية بنجاح",
"Language changed" : "تم تغيير اللغة",
"Invalid request" : "طلب غير مفهوم",
@@ -31,6 +25,7 @@
"test email settings" : "إعدادات البريد التجريبي",
"If you received this email, the settings seem to be correct." : "تبدوا الاعدادت صحيحة اذا تلقيت هذا البريد الالكتروني",
"Email sent" : "تم ارسال البريد الالكتروني",
+ "Email saved" : "تم حفظ البريد الإلكتروني",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
@@ -58,7 +53,6 @@
"A valid username must be provided" : "يجب ادخال اسم مستخدم صحيح",
"Error creating user" : "حصل خطأ اثناء انشاء مستخدم",
"A valid password must be provided" : "يجب ادخال كلمة مرور صحيحة",
- "Warning: Home directory for user \"{user}\" already exists" : "تحذير: المجلد الرئيسي لـ المستخدم \"{user}\" موجود مسبقا",
"__language_name__" : "__language_name__",
"Encryption" : "التشفير",
"Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
@@ -70,16 +64,12 @@
"Login" : "تسجيل الدخول",
"Security Warning" : "تحذير أمان",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "انت تستخدم %s عن طريق HTTP . نحن نقترح باصرار ان تهيء الخادم ليتمكن من الوصول عن طريق HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "مجلد data و ملفاتك يمكن الوصول لها عن طريق الانترنت. ملف .htaccess لا يمكن تشغيلة. نحن نقترح باصرار ان تعيد اعداد خادمك لمنع الدخول الى بياناتك عن طريق الانترنت او بالامكان ان تنقل مجلد data خارج document root بشكل مؤقت. ",
"Setup Warning" : "تحذير في التنصيب",
"Module 'fileinfo' missing" : "الموديل 'fileinfo' مفقود",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "موديل 'fileinfo' الخاص بالـPHP مفقود . نوصي بتفعيل هذا الموديل للحصول على أفضل النتائج مع خاصية التحقق ",
- "Your PHP version is outdated" : "اصدار PHP الخاص بك قديم",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "اصدار PHP الخاص بك قديم. نحن نقترح لك باصرار ان يتم ترقية الاصدار الى 5.3.8 او احدث بسبب ان الاصدارات القديمة معروفة انها مهمشة. من الممكن ان التنزيل قد لا يتم بصورة صحيحة.",
"Locale not working" : "اللغه لا تعمل",
"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 to install the required packages on your system to support one of the following locales: %s." : "نحن باصرار نقترح ان تثبت الحزم المطلوبة في نظامك لدعم احد هذة اللغات: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "الرجاء التحقق من <a href='%s'>دليل التنصيب</a>.",
"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 لاستدعاء الملف cron.php كل 15 دقيقه",
@@ -136,7 +126,7 @@
"The encryption app is no longer enabled, please decrypt all your files" : "البرنامج المشفر لم يعد مفعل, يرجى فك التشفير عن كل ملفاتك",
"Log-in password" : "كلمه سر الدخول",
"Decrypt all Files" : "فك تشفير جميع الملفات ",
- "Login Name" : "اسم الدخول",
+ "Username" : "إسم المستخدم",
"Create" : "انشئ",
"Admin Recovery Password" : "استعادة كلمة المرور للمسؤول",
"Enter the recovery password in order to recover the users files during password change" : "ادخل كلمة المرور المستعادة من اجل استرداد ملفات المستخدمين اثناء تغيير كلمة المرور",
@@ -146,7 +136,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "يرجى ادخال تخزين quota (مثل:\"512 MB\" او \"12 GB\")",
"Unlimited" : "غير محدود",
"Other" : "شيء آخر",
- "Username" : "إسم المستخدم",
"Quota" : "حصه",
"Last Login" : "آخر تسجيل دخول",
"change full name" : "تغيير اسمك الكامل",
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 1689e49d203..b60874fd1ea 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -9,18 +9,12 @@ OC.L10N.register(
"Authentication error" : "Fallu d'autenticación",
"Your full name has been changed." : "Camudóse'l nome completu.",
"Unable to change full name" : "Nun pue camudase'l nome completu",
- "Group already exists" : "El grupu yá esiste",
- "Unable to add group" : "Nun pudo amestase'l grupu",
"Files decrypted successfully" : "Descifráronse los ficheros",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nun pudieron descifrase sus ficheros. Revisa'l owncloud.log o consulta col alministrador",
"Couldn't decrypt your files, check your password and try again" : "Nun pudieron descifrase los ficheros. Revisa la contraseña ya inténtalo dempués",
"Encryption keys deleted permanently" : "Desaniciaes dafechu les claves de cifráu",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nun pudieron desaniciase dafechu les tos claves de cifráu, por favor comprueba'l to owncloud.log o entruga a un alministrador",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
- "Email saved" : "Corréu-e guardáu",
- "Invalid email" : "Corréu electrónicu non válidu",
- "Unable to delete group" : "Nun pudo desaniciase'l grupu",
- "Unable to delete user" : "Nun pudo desaniciase l'usuariu",
"Backups restored successfully" : "Copia de seguridá restaurada",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nun pudieron restaurase dafechu les tos claves de cifráu, por favor comprueba'l to owncloud.log o entruga a un alministrador",
"Language changed" : "Camudóse la llingua",
@@ -44,6 +38,7 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Hebo un problema al unviar el mensaxe. Revisa la configuración.",
"Email sent" : "Corréu-e unviáu",
"You need to set your user email before being able to send test emails." : "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.",
+ "Email saved" : "Corréu-e guardáu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
@@ -83,7 +78,6 @@ OC.L10N.register(
"A valid username must be provided" : "Tien d'apurrise un nome d'usuariu válidu",
"Error creating user" : "Fallu al crear usuariu",
"A valid password must be provided" : "Tien d'apurrise una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Avisu: el direutoriu d'aniciu pal usuariu \"{user}\" yá esiste.",
"__language_name__" : "Asturianu",
"Personal Info" : "Información personal",
"SSL root certificates" : "Certificaos raíz SSL",
@@ -101,7 +95,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Avisu de seguridá",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Tas ingresando a %s vía HTTP. Encamentámoste que configures el sirvidor pa solicitar HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El direutoriu de datos y ficheros ye dablemente accesible dende Internet, darréu que'l ficheru .htaccess nun ta funcionando. Suxerímoste que configures el sirvidor web de mou que'l direutoriu de datos nun seya accesible o que muevas talu direutoriu fuera del raigañu de documentos del sirvidor web.",
"Setup Warning" : "Avisu de configuración",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ta aparentemente configuráu pa desaniciar bloques de documentos en llinia. Esto va facer que delles aplicaciones principales nun tean accesibles.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dablemente esto seya culpa d'un caché o acelerador, como por exemplu Zend OPcache o eAccelerator.",
@@ -109,16 +102,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ta usándose SQLite como base de datos. Pa instalaciones más grandes, recomendamos cambiar esto. Pa migrar a otra base de datos, usa la ferramienta de llinia de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Nun s'atopó'l módulu \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Nun s'atopó'l módulu PHP 'fileinfo'. Encamentámoste qu'habilites esti módulu pa obtener meyores resultaos cola deteición de tribes MIME.",
- "Your PHP version is outdated" : "La versión de PHP nun ta anovada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versión de PHP caducó. Suxerímose que l'anueves a 5.3.8 o a una más nueva porque davezu, les versiones vieyes nun funcionen bien. Puede ser qu'esta instalación nun tea funcionando bien.",
"PHP charset is not set to UTF-8" : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8. Esto pue causar problemes graves con nomes d'archivos que nun contengan caracteres ASCII. Encamentamos camudar el valor de 'default_charset' a 'UTF-8'.",
"Locale not working" : "La configuración rexonal nun ta funcionando",
"System locale can not be set to a one which supports UTF-8." : "Nun se pue escoyer una configuración rexonal que sofite UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que pue haber problemes con ciertos caráuteres nos nomes de los ficheros.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Ye enforma recomendable instalar los paquetes necesarios pa poder soportar una de les siguientes configuraciones rexonales: %s. ",
"URL generation in notification emails" : "Xeneración d'URL en mensaxes de notificación",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si la so instalación nun ta asitiada nel raigañu del dominiu y uses el cron del sistema, pues atopar problemas cola xeneración d'URL. Pa evitar estos problemes, afita la opción \"overwritewebroot\" nel tu ficheru config.php pa qu'use'l camín del raigañu la so instalación (Suxerencia: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprueba les <a href='%s'>guíes d'instalación</a>.",
"Last cron was executed at %s." : "Cron executóse per cabera vegada a les %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Cron executóse per cabera vegada a les %s. Esto foi hai más d'una hora, daqué anda mal.",
@@ -130,13 +119,13 @@ OC.L10N.register(
"Allow users to share via link" : "Permitir a los usuarios compartir vía enllaz",
"Enforce password protection" : "Ameyora la proteición por contraseña.",
"Allow public uploads" : "Permitir xubes públiques",
+ "Allow users to send mail notification for shared files" : "Permitir a los usuarios unviar mensaxes de notificación pa ficheros compartíos",
"Set default expiration date" : "Afitar la data d'espiración predeterminada",
"Expire after " : "Caduca dempués de",
"days" : "díes",
"Enforce expiration date" : "Facer cumplir la data de caducidá",
"Allow resharing" : "Permitir re-compartición",
"Restrict users to only share with users in their groups" : "Restrinxir a los usuarios a compartir namái con otros usuarios nos sos grupos",
- "Allow users to send mail notification for shared files" : "Permitir a los usuarios unviar mensaxes de notificación pa ficheros compartíos",
"Exclude groups from sharing" : "Esclúi grupos de compartir",
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos van poder siguir recibiendo conteníos compartíos, pero nun van poder anicialos",
"Enforce HTTPS" : "Forciar HTTPS",
@@ -166,6 +155,7 @@ OC.L10N.register(
"Admin Documentation" : "Documentación p'alministradores",
"Enable only for specific groups" : "Habilitar namái pa grupos específicos",
"Uninstall App" : "Desinstalar aplicación",
+ "Cheers!" : "¡Salú!",
"Administrator Documentation" : "Documentación d'alministrador",
"Online Documentation" : "Documentación en llinia",
"Forum" : "Foru",
@@ -202,11 +192,10 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Les claves de cifráu van guardase nuna llocalización segura. D'esta miente, en casu de que daqué saliere mal, vas poder recuperar les claves. Desanicia dafechu les claves de cifráu namái si tas seguru de que los ficheros descifráronse correcho.",
"Restore Encryption Keys" : "Restaurar claves de cifráu.",
"Delete Encryption Keys" : "Desaniciar claves de cifráu",
- "Login Name" : "Nome d'usuariu",
+ "Username" : "Nome d'usuariu",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña d'alministración",
"Enter the recovery password in order to recover the users files during password change" : "Introduz la contraseña de recuperación col envís de recuperar los ficheros de los usuarios mientres el cambéu de contraseña.",
- "Search Users and Groups" : "Guetar Usuarios y Grupos",
"Add Group" : "Amestar grupu",
"Group" : "Grupu",
"Everyone" : "Toos",
@@ -215,7 +204,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indica la cuota d'almacenamientu (ex: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Non llendáu",
"Other" : "Otru",
- "Username" : "Nome d'usuariu",
"Quota" : "Cuota",
"Storage Location" : "Llocalización d'almacenamientu",
"Last Login" : "Caberu aniciu de sesión",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index 643ef9cc6ee..359b1f33730 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -7,18 +7,12 @@
"Authentication error" : "Fallu d'autenticación",
"Your full name has been changed." : "Camudóse'l nome completu.",
"Unable to change full name" : "Nun pue camudase'l nome completu",
- "Group already exists" : "El grupu yá esiste",
- "Unable to add group" : "Nun pudo amestase'l grupu",
"Files decrypted successfully" : "Descifráronse los ficheros",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nun pudieron descifrase sus ficheros. Revisa'l owncloud.log o consulta col alministrador",
"Couldn't decrypt your files, check your password and try again" : "Nun pudieron descifrase los ficheros. Revisa la contraseña ya inténtalo dempués",
"Encryption keys deleted permanently" : "Desaniciaes dafechu les claves de cifráu",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nun pudieron desaniciase dafechu les tos claves de cifráu, por favor comprueba'l to owncloud.log o entruga a un alministrador",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
- "Email saved" : "Corréu-e guardáu",
- "Invalid email" : "Corréu electrónicu non válidu",
- "Unable to delete group" : "Nun pudo desaniciase'l grupu",
- "Unable to delete user" : "Nun pudo desaniciase l'usuariu",
"Backups restored successfully" : "Copia de seguridá restaurada",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nun pudieron restaurase dafechu les tos claves de cifráu, por favor comprueba'l to owncloud.log o entruga a un alministrador",
"Language changed" : "Camudóse la llingua",
@@ -42,6 +36,7 @@
"A problem occurred while sending the email. Please revise your settings." : "Hebo un problema al unviar el mensaxe. Revisa la configuración.",
"Email sent" : "Corréu-e unviáu",
"You need to set your user email before being able to send test emails." : "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.",
+ "Email saved" : "Corréu-e guardáu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
@@ -81,7 +76,6 @@
"A valid username must be provided" : "Tien d'apurrise un nome d'usuariu válidu",
"Error creating user" : "Fallu al crear usuariu",
"A valid password must be provided" : "Tien d'apurrise una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Avisu: el direutoriu d'aniciu pal usuariu \"{user}\" yá esiste.",
"__language_name__" : "Asturianu",
"Personal Info" : "Información personal",
"SSL root certificates" : "Certificaos raíz SSL",
@@ -99,7 +93,6 @@
"TLS" : "TLS",
"Security Warning" : "Avisu de seguridá",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Tas ingresando a %s vía HTTP. Encamentámoste que configures el sirvidor pa solicitar HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El direutoriu de datos y ficheros ye dablemente accesible dende Internet, darréu que'l ficheru .htaccess nun ta funcionando. Suxerímoste que configures el sirvidor web de mou que'l direutoriu de datos nun seya accesible o que muevas talu direutoriu fuera del raigañu de documentos del sirvidor web.",
"Setup Warning" : "Avisu de configuración",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ta aparentemente configuráu pa desaniciar bloques de documentos en llinia. Esto va facer que delles aplicaciones principales nun tean accesibles.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dablemente esto seya culpa d'un caché o acelerador, como por exemplu Zend OPcache o eAccelerator.",
@@ -107,16 +100,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ta usándose SQLite como base de datos. Pa instalaciones más grandes, recomendamos cambiar esto. Pa migrar a otra base de datos, usa la ferramienta de llinia de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Nun s'atopó'l módulu \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Nun s'atopó'l módulu PHP 'fileinfo'. Encamentámoste qu'habilites esti módulu pa obtener meyores resultaos cola deteición de tribes MIME.",
- "Your PHP version is outdated" : "La versión de PHP nun ta anovada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versión de PHP caducó. Suxerímose que l'anueves a 5.3.8 o a una más nueva porque davezu, les versiones vieyes nun funcionen bien. Puede ser qu'esta instalación nun tea funcionando bien.",
"PHP charset is not set to UTF-8" : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8. Esto pue causar problemes graves con nomes d'archivos que nun contengan caracteres ASCII. Encamentamos camudar el valor de 'default_charset' a 'UTF-8'.",
"Locale not working" : "La configuración rexonal nun ta funcionando",
"System locale can not be set to a one which supports UTF-8." : "Nun se pue escoyer una configuración rexonal que sofite UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que pue haber problemes con ciertos caráuteres nos nomes de los ficheros.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Ye enforma recomendable instalar los paquetes necesarios pa poder soportar una de les siguientes configuraciones rexonales: %s. ",
"URL generation in notification emails" : "Xeneración d'URL en mensaxes de notificación",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si la so instalación nun ta asitiada nel raigañu del dominiu y uses el cron del sistema, pues atopar problemas cola xeneración d'URL. Pa evitar estos problemes, afita la opción \"overwritewebroot\" nel tu ficheru config.php pa qu'use'l camín del raigañu la so instalación (Suxerencia: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprueba les <a href='%s'>guíes d'instalación</a>.",
"Last cron was executed at %s." : "Cron executóse per cabera vegada a les %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Cron executóse per cabera vegada a les %s. Esto foi hai más d'una hora, daqué anda mal.",
@@ -128,13 +117,13 @@
"Allow users to share via link" : "Permitir a los usuarios compartir vía enllaz",
"Enforce password protection" : "Ameyora la proteición por contraseña.",
"Allow public uploads" : "Permitir xubes públiques",
+ "Allow users to send mail notification for shared files" : "Permitir a los usuarios unviar mensaxes de notificación pa ficheros compartíos",
"Set default expiration date" : "Afitar la data d'espiración predeterminada",
"Expire after " : "Caduca dempués de",
"days" : "díes",
"Enforce expiration date" : "Facer cumplir la data de caducidá",
"Allow resharing" : "Permitir re-compartición",
"Restrict users to only share with users in their groups" : "Restrinxir a los usuarios a compartir namái con otros usuarios nos sos grupos",
- "Allow users to send mail notification for shared files" : "Permitir a los usuarios unviar mensaxes de notificación pa ficheros compartíos",
"Exclude groups from sharing" : "Esclúi grupos de compartir",
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos van poder siguir recibiendo conteníos compartíos, pero nun van poder anicialos",
"Enforce HTTPS" : "Forciar HTTPS",
@@ -164,6 +153,7 @@
"Admin Documentation" : "Documentación p'alministradores",
"Enable only for specific groups" : "Habilitar namái pa grupos específicos",
"Uninstall App" : "Desinstalar aplicación",
+ "Cheers!" : "¡Salú!",
"Administrator Documentation" : "Documentación d'alministrador",
"Online Documentation" : "Documentación en llinia",
"Forum" : "Foru",
@@ -200,11 +190,10 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Les claves de cifráu van guardase nuna llocalización segura. D'esta miente, en casu de que daqué saliere mal, vas poder recuperar les claves. Desanicia dafechu les claves de cifráu namái si tas seguru de que los ficheros descifráronse correcho.",
"Restore Encryption Keys" : "Restaurar claves de cifráu.",
"Delete Encryption Keys" : "Desaniciar claves de cifráu",
- "Login Name" : "Nome d'usuariu",
+ "Username" : "Nome d'usuariu",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña d'alministración",
"Enter the recovery password in order to recover the users files during password change" : "Introduz la contraseña de recuperación col envís de recuperar los ficheros de los usuarios mientres el cambéu de contraseña.",
- "Search Users and Groups" : "Guetar Usuarios y Grupos",
"Add Group" : "Amestar grupu",
"Group" : "Grupu",
"Everyone" : "Toos",
@@ -213,7 +202,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indica la cuota d'almacenamientu (ex: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Non llendáu",
"Other" : "Otru",
- "Username" : "Nome d'usuariu",
"Quota" : "Cuota",
"Storage Location" : "Llocalización d'almacenamientu",
"Last Login" : "Caberu aniciu de sesión",
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index 1150aecda59..737884ba093 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -4,18 +4,12 @@ OC.L10N.register(
"Authentication error" : "Təyinat metodikası",
"Your full name has been changed." : "Sizin tam adınız dəyişdirildi.",
"Unable to change full name" : "Tam adı dəyişmək olmur",
- "Group already exists" : "Qrup artıq mövcuddur",
- "Unable to add group" : "Qrupu əlavə etmək olmur",
"Files decrypted successfully" : "Fayllar uğurla deşifrə edildi",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Sizin faylları deşifrə etmək olmur, xahiş olunur owncloud.log faylını yoxlaya vəya inzibatçıya müraciət edəsiniz.",
"Couldn't decrypt your files, check your password and try again" : "Sizin faylları deşifrə etmək olmur, xahiş olunur şifrəni yoxlaya və yenidən təkrar edəsiniz.",
"Encryption keys deleted permanently" : "Şifrələmə açarları həmişəlik silindi",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Sizin şifrələnmə açarlarınızı həmişəlik silmək mümkün olmadı, xahış olunur owncloud.log faylını yoxlaya və ya inzibatçıya müraciət edəsiniz.",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
- "Email saved" : "Məktub yadda saxlanıldı",
- "Invalid email" : "Yalnış məktub",
- "Unable to delete group" : "Qrupu silmək olmur",
- "Unable to delete user" : "İstifadəçini silmək olmur",
"Backups restored successfully" : "Ehtiyyat nüsxələr uğurla geri qaytarıldı",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Sizin şifrələnmə açarlarınızı geri qaytarmaq mümkün olmadı, xahış olunur owncloud.log faylını yoxlaya və ya inzibatçıya müraciət edəsiniz.",
"Language changed" : "Dil dəyişdirildi",
@@ -35,6 +29,7 @@ OC.L10N.register(
"If you received this email, the settings seem to be correct." : "Əgər siz bu məktubu aldınızsa, demək quraşdırmalar düzgündür.",
"Email sent" : "Məktub göndərildi",
"You need to set your user email before being able to send test emails." : "Test məktubu göndərməzdən öncə, siz öz istifadəçi poçtunuzu təyiin etməlisiniz.",
+ "Email saved" : "Məktub yadda saxlanıldı",
"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?",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
@@ -71,7 +66,6 @@ OC.L10N.register(
"A valid username must be provided" : "Düzgün istifadəçi adı daxil edilməlidir",
"Error creating user" : "İstifadəçi yaratdıqda səhv baş verdi",
"A valid password must be provided" : "Düzgün şifrə daxil edilməlidir",
- "Warning: Home directory for user \"{user}\" already exists" : "Xəbərdarlıq: \"{user}\" istfadəçisi üçün ev qovluğu artıq mövcuddur.",
"__language_name__" : "__AZ_Azerbaijan__",
"Encryption" : "Şifrələnmə",
"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)",
@@ -89,7 +83,6 @@ OC.L10N.register(
"Setup Warning" : "Quruluş xəbərdarlığı",
"Database Performance Info" : "Verilənlər bazasının davamiyyəti məlumatı",
"Module 'fileinfo' missing" : "'fileinfo' modulu çatışmır",
- "Your PHP version is outdated" : "Sizin PHP versiyası köhnəlib",
"PHP charset is not set to UTF-8" : "PHP simvol tipi UTF-8 deyil",
"Send mode" : "Göndərmə rejimi",
"Authentication method" : "Qeydiyyat metodikası",
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index 6325a20b196..5389aec1655 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -2,18 +2,12 @@
"Authentication error" : "Təyinat metodikası",
"Your full name has been changed." : "Sizin tam adınız dəyişdirildi.",
"Unable to change full name" : "Tam adı dəyişmək olmur",
- "Group already exists" : "Qrup artıq mövcuddur",
- "Unable to add group" : "Qrupu əlavə etmək olmur",
"Files decrypted successfully" : "Fayllar uğurla deşifrə edildi",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Sizin faylları deşifrə etmək olmur, xahiş olunur owncloud.log faylını yoxlaya vəya inzibatçıya müraciət edəsiniz.",
"Couldn't decrypt your files, check your password and try again" : "Sizin faylları deşifrə etmək olmur, xahiş olunur şifrəni yoxlaya və yenidən təkrar edəsiniz.",
"Encryption keys deleted permanently" : "Şifrələmə açarları həmişəlik silindi",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Sizin şifrələnmə açarlarınızı həmişəlik silmək mümkün olmadı, xahış olunur owncloud.log faylını yoxlaya və ya inzibatçıya müraciət edəsiniz.",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
- "Email saved" : "Məktub yadda saxlanıldı",
- "Invalid email" : "Yalnış məktub",
- "Unable to delete group" : "Qrupu silmək olmur",
- "Unable to delete user" : "İstifadəçini silmək olmur",
"Backups restored successfully" : "Ehtiyyat nüsxələr uğurla geri qaytarıldı",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Sizin şifrələnmə açarlarınızı geri qaytarmaq mümkün olmadı, xahış olunur owncloud.log faylını yoxlaya və ya inzibatçıya müraciət edəsiniz.",
"Language changed" : "Dil dəyişdirildi",
@@ -33,6 +27,7 @@
"If you received this email, the settings seem to be correct." : "Əgər siz bu məktubu aldınızsa, demək quraşdırmalar düzgündür.",
"Email sent" : "Məktub göndərildi",
"You need to set your user email before being able to send test emails." : "Test məktubu göndərməzdən öncə, siz öz istifadəçi poçtunuzu təyiin etməlisiniz.",
+ "Email saved" : "Məktub yadda saxlanıldı",
"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?",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
@@ -69,7 +64,6 @@
"A valid username must be provided" : "Düzgün istifadəçi adı daxil edilməlidir",
"Error creating user" : "İstifadəçi yaratdıqda səhv baş verdi",
"A valid password must be provided" : "Düzgün şifrə daxil edilməlidir",
- "Warning: Home directory for user \"{user}\" already exists" : "Xəbərdarlıq: \"{user}\" istfadəçisi üçün ev qovluğu artıq mövcuddur.",
"__language_name__" : "__AZ_Azerbaijan__",
"Encryption" : "Şifrələnmə",
"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)",
@@ -87,7 +81,6 @@
"Setup Warning" : "Quruluş xəbərdarlığı",
"Database Performance Info" : "Verilənlər bazasının davamiyyəti məlumatı",
"Module 'fileinfo' missing" : "'fileinfo' modulu çatışmır",
- "Your PHP version is outdated" : "Sizin PHP versiyası köhnəlib",
"PHP charset is not set to UTF-8" : "PHP simvol tipi UTF-8 deyil",
"Send mode" : "Göndərmə rejimi",
"Authentication method" : "Qeydiyyat metodikası",
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index 435bf0f43ec..38c6d85836b 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Предупреждения за сигурност и настройки",
"Cron" : "Крон",
"Sharing" : "Споделяне",
"Security" : "Сигурност",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Възникна проблем с идентификацията",
"Your full name has been changed." : "Пълното ти име е променено.",
"Unable to change full name" : "Неуспешна промяна на пълното име.",
- "Group already exists" : "Групата вече съществува",
- "Unable to add group" : "Неуспешно добавяне на група",
"Files decrypted successfully" : "Успешно разшифроването на файловете.",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Неуспешно разшифроване на файловете ти, моля провери owncloud.log или попитай администратора.",
"Couldn't decrypt your files, check your password and try again" : "Неуспешно разшифроване на файловете ти, провери паролата си и опитай отново.",
"Encryption keys deleted permanently" : "Ключовете за криптиране са безвъзвратно изтрити",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Неуспешно безвъзвратно изтриване на криптиращите ключове, моля провери своя owncloud.log или се свържи с админстратора.",
"Couldn't remove app." : "Неуспешно премахване на приложението.",
- "Email saved" : "Имейла запазен",
- "Invalid email" : "Невалиден имейл",
- "Unable to delete group" : "Неуспешно изтриване на група",
- "Unable to delete user" : "Неуспешно изтриване на потребител",
"Backups restored successfully" : "Резервното копие е успешно възстановено.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Неуспешно възстановяване на криптиращите ти ключове, моля провери owncloud.log или попитай администратора.",
"Language changed" : "Езикът е променен",
@@ -44,6 +39,7 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Настъпи проблем при изпращането на имейла. Моля, провери настройките.",
"Email sent" : "Имейлът е изпратен",
"You need to set your user email before being able to send test emails." : "Трябва да зададеш своя имейл преди да можеш да изпратиш проверяващи имейли.",
+ "Email saved" : "Имейла запазен",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен ли си, че искащ да добавиш \"{domain}\" сигурен домейн?",
"Add trusted domain" : "Добави сигурен домейн",
"Sending..." : "Изпращане...",
@@ -83,7 +79,6 @@ OC.L10N.register(
"A valid username must be provided" : "Валидно потребителско име трябва да бъде зададено.",
"Error creating user" : "Грешка при създаване на потребител.",
"A valid password must be provided" : "Валидна парола трябва да бъде зададена.",
- "Warning: Home directory for user \"{user}\" already exists" : "Предупреждение: Личната директория на потребителя \"{user}\" вече съществува.",
"__language_name__" : "__language_name__",
"Personal Info" : "Лична Информация",
"SSL root certificates" : "SSL root сертификати",
@@ -101,7 +96,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Предупреждение за Сигурноста",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "В момента използваш HTTP, за да посетиш %s. Силно препоръчваме да настроиш съвръра си да използва HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Твоята директория за данни и файлове вероятно са достъпни от интернет. .htaccess файла не функционира. Силно препоръчваме да настроиш уебсъръра по такъв начин, че директорията за данни да не бъде достъпна или да я преместиш извън директорията корен на сървъра.",
"Setup Warning" : "Предупреждение за Настройките",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP е настроен да премахва inline doc блокове. Това може да превърне няколко основни приложения недостъпни.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.",
@@ -109,16 +103,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Настоящата база данни е SQLite. За по-големи инсталации препоръчваме да я смениш. За да преминеш към друга база данни използвай следната команда от командния ред: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модулът 'fileinfo' липсва",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модулът 'fileinfo' липсва. Силно препоръчваме този модъл да бъде добавен, за да бъдат постигнати най-добри резултати при mime-type откриването.",
- "Your PHP version is outdated" : "PHP версията е остаряла.",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP версията е остаряла. Силно препоръчваме да я обновиш на 5.3.8 или по-нова, защото по-старите версии създават проблеми. Възможно е тази инсталация да не работи правилно.",
"PHP charset is not set to UTF-8" : "PHP таблицата от символи не е настроена за UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP таблицата от символи не е настроена за UTF-8. Това може да предизвика големи проблеми с не ASCII символи в имена на файлове. Силно перпоръчваме да промените стойноста на 'defaul_charset' в php.ini до 'UTF-8'.",
"Locale not working" : "Местоположението не работи",
"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 to install the required packages on your system to support one of the following locales: %s." : "Силно препоръчваме да инсталираш на сървъра пакетите, които подържат следните местоположения: %s.",
"URL generation in notification emails" : "Генериране на URL в имейлите за известяване",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ако инсталацията не e инсталиранa в root на домейна и използва cron, може да има проблеми с генерирането на URL. За да избегнеш тези проблеми, моля, промени \"overwritewebroot\" в config.php с webroot пътя (Препоръчително: \"%s\")",
"No problems found" : "Не са открити проблеми",
"Please double check the <a href='%s'>installation guides</a>." : "Моля, провери <a href='%s'>ръководството за инсталиране</a> отново.",
"Last cron was executed at %s." : "Последният cron се изпълни в %s.",
@@ -131,17 +121,19 @@ OC.L10N.register(
"Allow users to share via link" : "Разреши потребителите да споделят с връзка",
"Enforce password protection" : "Изискай защита с парола.",
"Allow public uploads" : "Разреши общодостъпно качване",
+ "Allow users to send mail notification for shared files" : "Разреши потребителите да изпращат имейл уведомления за споделени файлове.",
"Set default expiration date" : "Заложи дата на изтичане по подразбиране",
"Expire after " : "Изтечи след",
"days" : "дена",
"Enforce expiration date" : "Изисквай дата на изтичане",
"Allow resharing" : "Разреши пресподеляне.",
"Restrict users to only share with users in their groups" : "Ограничи потребителите, така че да могат да споделят само с други потребители в своите групи.",
- "Allow users to send mail notification for shared files" : "Разреши потребителите да изпращат имейл уведомления за споделени файлове.",
"Exclude groups from sharing" : "Забрани групи да споделят",
"These groups will still be able to receive shares, but not to initiate them." : "Тези групи ще могат да получават споделения, но няма да могат самите те да споделят.",
"Enforce HTTPS" : "Изисквай HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Задължава клиента да се свързва с %s през криптирана връзка.",
+ "Enforce HTTPS for subdomains" : "Изисквай HTTPS за под домейни",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Задължава клиента да се свързва с %s и негови под домейни през криптирана връзка.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Моля свържи се с твоя %s през HTTPS, за да включиш или изключиш SSL задължаването.",
"This is used for sending out notifications." : "Това се използва за изпращане на уведомления.",
"Send mode" : "Режим на изпращане",
@@ -172,6 +164,7 @@ OC.L10N.register(
"Update to %s" : "Обнови до %s",
"Enable only for specific groups" : "Включи само за определени групи",
"Uninstall App" : "Премахни Приложението",
+ "Cheers!" : "Поздрави!",
"Administrator Documentation" : "Административна Документация",
"Online Documentation" : "Документация в Интернет",
"Forum" : "Форум",
@@ -214,11 +207,10 @@ OC.L10N.register(
"Delete Encryption Keys" : "Изтрий Криптиращи Ключове",
"Show storage location" : "Покажи място за запис",
"Show last log in" : "Покажи последно вписване",
- "Login Name" : "Потребителско Име",
+ "Username" : "Потребителско Име",
"Create" : "Създаване",
"Admin Recovery Password" : "Възстановяване на Администраторска Парола",
"Enter the recovery password in order to recover the users files during password change" : "Въведи паролата за възстановяване, за да възстановиш файловете на потребителите при промяна на паролата.",
- "Search Users and Groups" : "Търси Потребители и Групи",
"Add Group" : "Добави Група",
"Group" : "Група",
"Everyone" : "Всички",
@@ -227,7 +219,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Моля, въведи квота за заделено място (пр. \"512 MB\" или \"12 GB\")",
"Unlimited" : "Неограничено",
"Other" : "Друга...",
- "Username" : "Потребителско Име",
"Group Admin for" : "Групов администратор за",
"Quota" : "Квота",
"Storage Location" : "Място за Запис",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index 7925a93bebb..39243c38f62 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Предупреждения за сигурност и настройки",
"Cron" : "Крон",
"Sharing" : "Споделяне",
"Security" : "Сигурност",
@@ -7,18 +8,12 @@
"Authentication error" : "Възникна проблем с идентификацията",
"Your full name has been changed." : "Пълното ти име е променено.",
"Unable to change full name" : "Неуспешна промяна на пълното име.",
- "Group already exists" : "Групата вече съществува",
- "Unable to add group" : "Неуспешно добавяне на група",
"Files decrypted successfully" : "Успешно разшифроването на файловете.",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Неуспешно разшифроване на файловете ти, моля провери owncloud.log или попитай администратора.",
"Couldn't decrypt your files, check your password and try again" : "Неуспешно разшифроване на файловете ти, провери паролата си и опитай отново.",
"Encryption keys deleted permanently" : "Ключовете за криптиране са безвъзвратно изтрити",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Неуспешно безвъзвратно изтриване на криптиращите ключове, моля провери своя owncloud.log или се свържи с админстратора.",
"Couldn't remove app." : "Неуспешно премахване на приложението.",
- "Email saved" : "Имейла запазен",
- "Invalid email" : "Невалиден имейл",
- "Unable to delete group" : "Неуспешно изтриване на група",
- "Unable to delete user" : "Неуспешно изтриване на потребител",
"Backups restored successfully" : "Резервното копие е успешно възстановено.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Неуспешно възстановяване на криптиращите ти ключове, моля провери owncloud.log или попитай администратора.",
"Language changed" : "Езикът е променен",
@@ -42,6 +37,7 @@
"A problem occurred while sending the email. Please revise your settings." : "Настъпи проблем при изпращането на имейла. Моля, провери настройките.",
"Email sent" : "Имейлът е изпратен",
"You need to set your user email before being able to send test emails." : "Трябва да зададеш своя имейл преди да можеш да изпратиш проверяващи имейли.",
+ "Email saved" : "Имейла запазен",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен ли си, че искащ да добавиш \"{domain}\" сигурен домейн?",
"Add trusted domain" : "Добави сигурен домейн",
"Sending..." : "Изпращане...",
@@ -81,7 +77,6 @@
"A valid username must be provided" : "Валидно потребителско име трябва да бъде зададено.",
"Error creating user" : "Грешка при създаване на потребител.",
"A valid password must be provided" : "Валидна парола трябва да бъде зададена.",
- "Warning: Home directory for user \"{user}\" already exists" : "Предупреждение: Личната директория на потребителя \"{user}\" вече съществува.",
"__language_name__" : "__language_name__",
"Personal Info" : "Лична Информация",
"SSL root certificates" : "SSL root сертификати",
@@ -99,7 +94,6 @@
"TLS" : "TLS",
"Security Warning" : "Предупреждение за Сигурноста",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "В момента използваш HTTP, за да посетиш %s. Силно препоръчваме да настроиш съвръра си да използва HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Твоята директория за данни и файлове вероятно са достъпни от интернет. .htaccess файла не функционира. Силно препоръчваме да настроиш уебсъръра по такъв начин, че директорията за данни да не бъде достъпна или да я преместиш извън директорията корен на сървъра.",
"Setup Warning" : "Предупреждение за Настройките",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP е настроен да премахва inline doc блокове. Това може да превърне няколко основни приложения недостъпни.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.",
@@ -107,16 +101,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Настоящата база данни е SQLite. За по-големи инсталации препоръчваме да я смениш. За да преминеш към друга база данни използвай следната команда от командния ред: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модулът 'fileinfo' липсва",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модулът 'fileinfo' липсва. Силно препоръчваме този модъл да бъде добавен, за да бъдат постигнати най-добри резултати при mime-type откриването.",
- "Your PHP version is outdated" : "PHP версията е остаряла.",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP версията е остаряла. Силно препоръчваме да я обновиш на 5.3.8 или по-нова, защото по-старите версии създават проблеми. Възможно е тази инсталация да не работи правилно.",
"PHP charset is not set to UTF-8" : "PHP таблицата от символи не е настроена за UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP таблицата от символи не е настроена за UTF-8. Това може да предизвика големи проблеми с не ASCII символи в имена на файлове. Силно перпоръчваме да промените стойноста на 'defaul_charset' в php.ini до 'UTF-8'.",
"Locale not working" : "Местоположението не работи",
"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 to install the required packages on your system to support one of the following locales: %s." : "Силно препоръчваме да инсталираш на сървъра пакетите, които подържат следните местоположения: %s.",
"URL generation in notification emails" : "Генериране на URL в имейлите за известяване",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ако инсталацията не e инсталиранa в root на домейна и използва cron, може да има проблеми с генерирането на URL. За да избегнеш тези проблеми, моля, промени \"overwritewebroot\" в config.php с webroot пътя (Препоръчително: \"%s\")",
"No problems found" : "Не са открити проблеми",
"Please double check the <a href='%s'>installation guides</a>." : "Моля, провери <a href='%s'>ръководството за инсталиране</a> отново.",
"Last cron was executed at %s." : "Последният cron се изпълни в %s.",
@@ -129,17 +119,19 @@
"Allow users to share via link" : "Разреши потребителите да споделят с връзка",
"Enforce password protection" : "Изискай защита с парола.",
"Allow public uploads" : "Разреши общодостъпно качване",
+ "Allow users to send mail notification for shared files" : "Разреши потребителите да изпращат имейл уведомления за споделени файлове.",
"Set default expiration date" : "Заложи дата на изтичане по подразбиране",
"Expire after " : "Изтечи след",
"days" : "дена",
"Enforce expiration date" : "Изисквай дата на изтичане",
"Allow resharing" : "Разреши пресподеляне.",
"Restrict users to only share with users in their groups" : "Ограничи потребителите, така че да могат да споделят само с други потребители в своите групи.",
- "Allow users to send mail notification for shared files" : "Разреши потребителите да изпращат имейл уведомления за споделени файлове.",
"Exclude groups from sharing" : "Забрани групи да споделят",
"These groups will still be able to receive shares, but not to initiate them." : "Тези групи ще могат да получават споделения, но няма да могат самите те да споделят.",
"Enforce HTTPS" : "Изисквай HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Задължава клиента да се свързва с %s през криптирана връзка.",
+ "Enforce HTTPS for subdomains" : "Изисквай HTTPS за под домейни",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Задължава клиента да се свързва с %s и негови под домейни през криптирана връзка.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Моля свържи се с твоя %s през HTTPS, за да включиш или изключиш SSL задължаването.",
"This is used for sending out notifications." : "Това се използва за изпращане на уведомления.",
"Send mode" : "Режим на изпращане",
@@ -170,6 +162,7 @@
"Update to %s" : "Обнови до %s",
"Enable only for specific groups" : "Включи само за определени групи",
"Uninstall App" : "Премахни Приложението",
+ "Cheers!" : "Поздрави!",
"Administrator Documentation" : "Административна Документация",
"Online Documentation" : "Документация в Интернет",
"Forum" : "Форум",
@@ -212,11 +205,10 @@
"Delete Encryption Keys" : "Изтрий Криптиращи Ключове",
"Show storage location" : "Покажи място за запис",
"Show last log in" : "Покажи последно вписване",
- "Login Name" : "Потребителско Име",
+ "Username" : "Потребителско Име",
"Create" : "Създаване",
"Admin Recovery Password" : "Възстановяване на Администраторска Парола",
"Enter the recovery password in order to recover the users files during password change" : "Въведи паролата за възстановяване, за да възстановиш файловете на потребителите при промяна на паролата.",
- "Search Users and Groups" : "Търси Потребители и Групи",
"Add Group" : "Добави Група",
"Group" : "Група",
"Everyone" : "Всички",
@@ -225,7 +217,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Моля, въведи квота за заделено място (пр. \"512 MB\" или \"12 GB\")",
"Unlimited" : "Неограничено",
"Other" : "Друга...",
- "Username" : "Потребителско Име",
"Group Admin for" : "Групов администратор за",
"Quota" : "Квота",
"Storage Location" : "Място за Запис",
diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js
index 57136a41b48..b1c00f3afd3 100644
--- a/settings/l10n/bn_BD.js
+++ b/settings/l10n/bn_BD.js
@@ -6,14 +6,8 @@ OC.L10N.register(
"Email Server" : "ইমেইল সার্ভার",
"Authentication error" : "অনুমোদন ঘটিত সমস্যা",
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
- "Group already exists" : "গোষ্ঠীটি পূর্ব থেকেই বিদ্যমান",
- "Unable to add group" : "গোষ্ঠী যোগ করা সম্ভব হলো না",
"Files decrypted successfully" : "সার্থকভাবে ফাইল ডিক্রিপ্ট করা হয়েছে",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
- "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
- "Invalid email" : "ই-মেইলটি সঠিক নয়",
- "Unable to delete group" : "গোষ্ঠী মুছে ফেলা সম্ভব হলো না ",
- "Unable to delete user" : "ব্যবহারকারী মুছে ফেলা সম্ভব হলো না ",
"Backups restored successfully" : "ব্যাকআপ পূণঃস্থাপন সুসম্পন্ন",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "িআপনার এনক্রিপসন কি পূনর্বাসন করা গেলনা, আপনার owncloud.log পিরীক্ষা করুন বা প্রশাসককে জিজ্ঞাসা করুন",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
@@ -29,6 +23,7 @@ OC.L10N.register(
"test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
"If you received this email, the settings seem to be correct." : "এই ইমেইলের অর্থ নিয়ামকসমূহ সঠিক।",
"Email sent" : "ই-মেইল পাঠানো হয়েছে",
+ "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
"Disable" : "নিষ্ক্রিয়",
@@ -67,6 +62,7 @@ OC.L10N.register(
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "তৈলী করেছেন <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud সম্প্রদায়</a>, যার <a href=\"https://github.com/owncloud\" target=\"_blank\"> উৎস কোডটি <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> এর অধীনে লাইসেন্সকৃত।",
"by" : "কর্তৃক",
"User Documentation" : "ব্যবহারকারী সহায়িকা",
+ "Cheers!" : "শুভেচ্ছা!",
"Administrator Documentation" : "প্রশাসক সহায়িকা",
"Online Documentation" : "অনলাইন সহায়িকা",
"Forum" : "ফোরাম",
@@ -87,7 +83,7 @@ OC.L10N.register(
"Language" : "ভাষা",
"Help translate" : "অনুবাদ করতে সহায়তা করুন",
"Import Root Certificate" : "রুট সনদপত্রটি আমদানি করুন",
- "Login Name" : "প্রবেশ",
+ "Username" : "ব্যবহারকারী",
"Create" : "তৈরী কর",
"Admin Recovery Password" : "প্রশাসক পূণরূদ্ধার কুটশব্দ",
"Add Group" : "গ্রুপ যোগ কর",
@@ -96,7 +92,6 @@ OC.L10N.register(
"Admins" : "প্রশাসন",
"Unlimited" : "অসীম",
"Other" : "অন্যান্য",
- "Username" : "ব্যবহারকারী",
"Quota" : "কোটা",
"Storage Location" : "সংরক্ষণাগার এর অবস্থান",
"Last Login" : "শেষ লগইন",
diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json
index fbced11ab41..bc5c27b36de 100644
--- a/settings/l10n/bn_BD.json
+++ b/settings/l10n/bn_BD.json
@@ -4,14 +4,8 @@
"Email Server" : "ইমেইল সার্ভার",
"Authentication error" : "অনুমোদন ঘটিত সমস্যা",
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
- "Group already exists" : "গোষ্ঠীটি পূর্ব থেকেই বিদ্যমান",
- "Unable to add group" : "গোষ্ঠী যোগ করা সম্ভব হলো না",
"Files decrypted successfully" : "সার্থকভাবে ফাইল ডিক্রিপ্ট করা হয়েছে",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
- "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
- "Invalid email" : "ই-মেইলটি সঠিক নয়",
- "Unable to delete group" : "গোষ্ঠী মুছে ফেলা সম্ভব হলো না ",
- "Unable to delete user" : "ব্যবহারকারী মুছে ফেলা সম্ভব হলো না ",
"Backups restored successfully" : "ব্যাকআপ পূণঃস্থাপন সুসম্পন্ন",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "িআপনার এনক্রিপসন কি পূনর্বাসন করা গেলনা, আপনার owncloud.log পিরীক্ষা করুন বা প্রশাসককে জিজ্ঞাসা করুন",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
@@ -27,6 +21,7 @@
"test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
"If you received this email, the settings seem to be correct." : "এই ইমেইলের অর্থ নিয়ামকসমূহ সঠিক।",
"Email sent" : "ই-মেইল পাঠানো হয়েছে",
+ "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
"Disable" : "নিষ্ক্রিয়",
@@ -65,6 +60,7 @@
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "তৈলী করেছেন <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud সম্প্রদায়</a>, যার <a href=\"https://github.com/owncloud\" target=\"_blank\"> উৎস কোডটি <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> এর অধীনে লাইসেন্সকৃত।",
"by" : "কর্তৃক",
"User Documentation" : "ব্যবহারকারী সহায়িকা",
+ "Cheers!" : "শুভেচ্ছা!",
"Administrator Documentation" : "প্রশাসক সহায়িকা",
"Online Documentation" : "অনলাইন সহায়িকা",
"Forum" : "ফোরাম",
@@ -85,7 +81,7 @@
"Language" : "ভাষা",
"Help translate" : "অনুবাদ করতে সহায়তা করুন",
"Import Root Certificate" : "রুট সনদপত্রটি আমদানি করুন",
- "Login Name" : "প্রবেশ",
+ "Username" : "ব্যবহারকারী",
"Create" : "তৈরী কর",
"Admin Recovery Password" : "প্রশাসক পূণরূদ্ধার কুটশব্দ",
"Add Group" : "গ্রুপ যোগ কর",
@@ -94,7 +90,6 @@
"Admins" : "প্রশাসন",
"Unlimited" : "অসীম",
"Other" : "অন্যান্য",
- "Username" : "ব্যবহারকারী",
"Quota" : "কোটা",
"Storage Location" : "সংরক্ষণাগার এর অবস্থান",
"Last Login" : "শেষ লগইন",
diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js
new file mode 100644
index 00000000000..e8a50e10364
--- /dev/null
+++ b/settings/l10n/bs.js
@@ -0,0 +1,258 @@
+OC.L10N.register(
+ "settings",
+ {
+ "Security & Setup Warnings" : "Sigurnosna Upozorenja & Upozorenja Postavki",
+ "Cron" : "Cron",
+ "Sharing" : "Dijeljenje",
+ "Security" : "Sigurnost",
+ "Email Server" : "Server e-pošte",
+ "Log" : "Zapisnik",
+ "Authentication error" : "Grešna autentifikacije",
+ "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
+ "Unable to change full name" : "Puno ime nije moguće promijeniti",
+ "Files decrypted successfully" : "Datoteke su uspješno dešifrirane",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Vaše datoteke nije moguće dešifrirati, molim provjerite svoj owncloud.log ili kontaktirajte svog administratora",
+ "Couldn't decrypt your files, check your password and try again" : "Vaše datoteke nije moguće dešifrirati, provjerite svoju lozinku i pokušajte ponovno",
+ "Encryption keys deleted permanently" : "Ključevi za šifriranje su trajno izbrisani",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće trajno izbrisati, molim provjerite svoj owncloud.log ili pitajte svog administratora.",
+ "Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
+ "Backups restored successfully" : "Sigurnosne kopije su uspješno obnovljene",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće obnoviti, molim provjerite svoj owncloud.log ili pitajte svog administratora",
+ "Language changed" : "Jezik je promijenjen",
+ "Invalid request" : "Neispravan zahtjev",
+ "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.",
+ "Wrong password" : "Pogrešna lozinka",
+ "No user supplied" : "Nijedan korisnik nije dostavljen",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Molim navedite admin lozinku za povratak, u protivnom će svi korisnički podaci biti izgubljeni",
+ "Wrong admin recovery password. Please check the password and try again." : "Pogrešna admin lozinka za povratak. Molim provjerite lozinku i pokušajte ponovno.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Pozadina ne podržava promjenu lozinke, ali korisnički ključ za šifriranje je uspješno ažuriran.",
+ "Unable to change password" : "Promjena lozinke nije moguća",
+ "Enabled" : "Aktivirano",
+ "Not enabled" : "Nije aktivirano",
+ "Recommended" : "Preporučljivo",
+ "Group already exists." : "Grupa već postoji.",
+ "Unable to add group." : "Nemoguće dodati grupu.",
+ "Unable to delete group." : "Nemoguće izbrisati grupu.",
+ "Saved" : "Spremljeno",
+ "test email settings" : "testiraj postavke e-pošte",
+ "If you received this email, the settings seem to be correct." : "Ako ste primili ovu e-poštu, izgleda da su postavke ispravne.",
+ "A problem occurred while sending the email. Please revise your settings." : "Došlo je do problema prilikom slanja e-pošte. Molim vas revidirate svoje postavke.",
+ "Email sent" : "E-pošta je poslana",
+ "You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu email trebate postaviti svoj korisnički email.",
+ "Invalid mail address" : "Nevažeća adresa e-pošte",
+ "Unable to create user." : "Nemoguće kreirati korisnika",
+ "Your %s account was created" : "Vaš %s račun je kreiran",
+ "Unable to delete user." : "Nemoguće izbrisati korisnika",
+ "Forbidden" : "Zabranjeno",
+ "Invalid user" : "Nevažeči korisnik",
+ "Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
+ "Email saved" : "E-pošta je spremljena",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
+ "Add trusted domain" : "Dodaj pouzdanu domenu",
+ "Sending..." : "Slanje...",
+ "All" : "Sve",
+ "Please wait...." : "Molim pričekajte...",
+ "Error while disabling app" : "Greška pri onemogućavanju aplikacije",
+ "Disable" : "Onemogući",
+ "Enable" : "Omogući",
+ "Error while enabling app" : "Greška pri omogućavanju aplikacije",
+ "Updating...." : "Ažuriranje...",
+ "Error while updating app" : "Greška pri ažuriranju aplikacije",
+ "Updated" : "Ažurirano",
+ "Uninstalling ...." : "Deinstaliranje....",
+ "Error while uninstalling app" : "Greška pri deinstaliranju aplikacije",
+ "Uninstall" : "Deinstaliraj",
+ "Select a profile picture" : "Odaberi sliku profila",
+ "Very weak password" : "Veoma slaba lozinka",
+ "Weak password" : "Slaba lozinka",
+ "So-so password" : "Tu-i-tamo lozinka",
+ "Good password" : "Dobra lozinka",
+ "Strong password" : "Jaka lozinka",
+ "Valid until {date}" : "Validno do {date}",
+ "Delete" : "Izbriši",
+ "Decrypting files... Please wait, this can take some time." : "Dešifriranje datoteka... Molim pričekajte, ovo može potrajati neko vrijeme.",
+ "Delete encryption keys permanently." : "Trajno izbrišite ključeve za šifriranje.",
+ "Restore encryption keys." : "Obnovi ključeve za šifriranje.",
+ "Groups" : "Grupe",
+ "Unable to delete {objName}" : "Nije moguće izbrisati {objName}",
+ "Error creating group" : "Greška pri kreiranju grupe",
+ "A valid group name must be provided" : "Nužno je navesti valjani naziv grupe",
+ "deleted {groupName}" : "izbrisana {groupName}",
+ "undo" : "poništi",
+ "no group" : "nema grupe",
+ "never" : "nikad",
+ "deleted {userName}" : "izbrisan {userName}",
+ "add group" : "dodaj grupu",
+ "A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
+ "Error creating user" : "Greška pri kreiranju korisnika",
+ "A valid password must be provided" : "Nužno je navesti valjanu lozinku",
+ "A valid email must be provided" : "Nužno je navesti valjanu adresu e-pošte",
+ "__language_name__" : "__naziv_jezika___",
+ "Personal Info" : "Osobne Informacije",
+ "SSL root certificates" : "SSL root certifikati",
+ "Encryption" : "Šifriranje",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)",
+ "Info, warnings, errors and fatal issues" : "Informacije, upozorenja, greške i fatalni problemi",
+ "Warnings, errors and fatal issues" : "Upozorenja, greške i fatalni problemi",
+ "Errors and fatal issues" : "Greške i fatalni problemi",
+ "Fatal issues only" : "Samo fatalni problemi",
+ "None" : "Ništa",
+ "Login" : "Prijava",
+ "Plain" : "Čisti tekst",
+ "NT LAN Manager" : "NT LAN menedžer",
+ "SSL" : "SSL",
+ "TLS" : "TLS",
+ "Security Warning" : "Sigurnosno upozorenje",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vi %s pristupate putem HTTP. Strogo vam preporučujem da vaš server konfigurišete tako da umjesto HTTP zahtijeva korištenje HTTPS.",
+ "Read-Only config enabled" : "Podešena samo-čitajuća konfiguracija",
+ "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." : "Samo-čitajuća konfiguracija je podešena. Ovo spriječava postavljanje neke konfiguracije putem web-sučelja. Nadalje, datoteka mora biti omogućena ručnu izmjenu pri svakom ažuriranju.",
+ "Setup Warning" : "Upozorenje postavki",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je očigledno postavljen da se skine inline doc blokova. To će nekoliko osnovnih aplikacija učiniti nedostupnim.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Uzrok tome je vjerojatno neki ubrzivač predmemorisanja kao što je Zend OPcache ili eAccelerator.",
+ "Database Performance Info" : "Info o performansi baze podataka",
+ "SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite se koristi kao baza podataka. Za veće instalacije preporučujemo da se to promijeni. Za migraciju na neku drugu bazu podataka koristite naredbeni redak: 'occ db: convert-type'",
+ "Module 'fileinfo' missing" : "Nedostaje modul 'fileinfo'",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Strogo vam preporučjem da taj modul omogućite kako biste dobili najbolje rezultate u detekciji mime vrste.",
+ "PHP charset is not set to UTF-8" : "PHP Charset nije postavljen na UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset nije postavljen na UTF-8. To može prouzrokovati ozbiljne probleme s non-ASCII znakovima u nazivima datoteka. Strogo preporučujem da vrijednost 'default_charset' u php.ini promijenite u 'UTF-8'.",
+ "Locale not working" : "Regionalna šema ne radi",
+ "System locale can not be set to a one which supports UTF-8." : "Regionalnu šemu sustava nemoguće je postaviti na neku koja podržava UTF-8.",
+ "This means that there might be problems with certain characters in file names." : "To znači da se mogu javiti problemi s određenim znakovima u nazivu datoteke.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Strogo se preporučuje instaliranje zahtjevnih paketa na vašem sistemu koji podržavaju jednu od slijedećih regionalnih šemi: %s.",
+ "URL generation in notification emails" : "Generiranje URL-a u notifikacijskoj e-pošti",
+ "Configuration Checks" : "Konfiguracione Provjere",
+ "No problems found" : "Problemi nisu pronađeni",
+ "Please double check the <a href='%s'>installation guides</a>." : "Molimo duplo provjerite <a href='%s'> instalacijske vodiće</a>.",
+ "Last cron was executed at %s." : "Zadnji cron je izvršen na %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Zadnji cron izvršen je na %s. Bilo je to prije više od jednog sata, čini se da nešto nije u redu.",
+ "Cron was not executed yet!" : "Cron još nije izvršen!",
+ "Execute one task with each page loaded" : "Izvrši jedan zadatak sa svakom učitanom stranicom",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrovan na webcron usluzi da poziva cron.php svakih 15 minuta preko http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Koristite cron uslugu sustava za pozivanje cron.php datoteke svakih 15 minuta.",
+ "Allow apps to use the Share API" : "Dozvoli aplikacijama korištenje Share API",
+ "Allow users to share via link" : "Dozvoli korisnicima dijeljenje putem veze",
+ "Enforce password protection" : "Nametni zaštitu lozinke",
+ "Allow public uploads" : "Dozvoli javno učitavanje",
+ "Allow users to send mail notification for shared files" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
+ "Set default expiration date" : "Postavite zadani datum isteka",
+ "Expire after " : "Istek nakon",
+ "days" : "dana",
+ "Enforce expiration date" : "Nametni datum isteka",
+ "Allow resharing" : "Dopustite ponovno dijeljenje",
+ "Restrict users to only share with users in their groups" : "Ograniči korisnike na međusobno dijeljenje resursa samo s korisnicima unutar svoje grupe",
+ "Allow users to send mail notification for shared files to other users" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke ka ostalim korisnicima",
+ "Exclude groups from sharing" : "Isključite grupe iz dijeljenja",
+ "These groups will still be able to receive shares, but not to initiate them." : "Ove će grupe i dalje moći primati dijeljene resurse, ali ne i inicirati ih",
+ "Enforce HTTPS" : "Nametnite HTTPS",
+ "Forces the clients to connect to %s via an encrypted connection." : "Prisiljava klijente da se priključe na %s putem šifrirane konekcije.",
+ "Enforce HTTPS for subdomains" : "Nametnite HTTPS za poddomene",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Prisiljava klijente da se priključe na %s i poddomene putem šifrirane konekcije.",
+ "Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Molim priključite se na svoj %s putem HTTPS da biste omogućili ili onemogućili SSL ",
+ "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.",
+ "Send mode" : "Način rada za slanje",
+ "From address" : "S adrese",
+ "mail" : "pošta",
+ "Authentication method" : "Metoda autentifikacije",
+ "Authentication required" : "Potrebna autentifikacija",
+ "Server address" : "Adresa servera",
+ "Port" : "Priključak",
+ "Credentials" : "Vjerodajnice",
+ "SMTP Username" : "SMTP Korisničko ime",
+ "SMTP Password" : "SMPT Lozinka",
+ "Store credentials" : "Spremi vjerodajnice",
+ "Test email settings" : "Postavke za testnu e-poštu",
+ "Send email" : "Pošalji e-poštu",
+ "Log level" : "Razina zapisnika",
+ "More" : "Više",
+ "Less" : "Manje",
+ "Version" : "Verzija",
+ "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Razvila <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud zajednica</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">izvorni kod</a> je licenciran <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> licencom.",
+ "More apps" : "Više aplikacija",
+ "Add your app" : "Dodaj svoju aplikaciju",
+ "by" : "od strane",
+ "licensed" : "licenciran",
+ "Documentation:" : "Dokumentacija:",
+ "User Documentation" : "Korisnička Dokumentacija",
+ "Admin Documentation" : "Admin Dokumentacija",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Ova aplikacija se ne može instalirati zbog slijedećih neispunjenih ovisnosti:",
+ "Update to %s" : "Ažuriraj na %s",
+ "Enable only for specific groups" : "Omogućite samo za specifične grupe",
+ "Uninstall App" : "Deinstaliraj aplikaciju",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej,<br><br>samo da javim da sad imate %s račum.<br><br>Vaše korisničko ime: %s<br>Pristupite mu: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Cheers!",
+ "Administrator Documentation" : "Dokumentacija Administratora",
+ "Online Documentation" : "Online Dokumentacija",
+ "Forum" : "Forum",
+ "Bugtracker" : "Bugtracker",
+ "Commercial Support" : "Komercijalna Podrška",
+ "Get the apps to sync your files" : "Koristite aplikacije za sinhronizaciju svojih datoteka",
+ "Desktop client" : "Desktop klijent",
+ "Android app" : "Android aplikacija",
+ "iOS app" : "iOS aplikacija",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Ako želite podržati projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">pridružite se razvoju</a>\n\t\tili\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">proširite vijest</a>!",
+ "Show First Run Wizard again" : "Opet pokažite First Run Wizard",
+ "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Iskoristili ste <strong>%s</strong> od raspoloživog <strong>%s</strong>",
+ "Password" : "Lozinka",
+ "Your password was changed" : "Vaša lozinka je promijenjena",
+ "Unable to change your password" : "Vašu lozinku nije moguće promijeniti",
+ "Current password" : "Trenutna lozinka",
+ "New password" : "Nova lozinka",
+ "Change password" : "Promijeni lozinku",
+ "Full Name" : "Puno ime",
+ "Email" : "E-pošta",
+ "Your email address" : "Vaša adresa e-pošte",
+ "Fill in an email address to enable password recovery and receive notifications" : "Unesite adresu e-pošte da biste omogućili oporavak lozinke i primili notifikacije",
+ "Profile picture" : "Slika profila",
+ "Upload new" : "Učitaj novu",
+ "Select new from Files" : "Odaberi novu iz datoteka",
+ "Remove image" : "Ukloni sliku",
+ "Either png or jpg. Ideally square but you will be able to crop it." : "Ili png ili jpg. Idealno bi bilo da je kvadratna, ali moći ćete je obrezati",
+ "Your avatar is provided by your original account." : "Vaš avatar je isporučen od strane vašeg izvornog računa.",
+ "Cancel" : "Odustani",
+ "Choose as profile image" : "Izaberi kao sliku profila",
+ "Language" : "Jezik",
+ "Help translate" : "Pomozi prevesti",
+ "Common Name" : "Opće Ime",
+ "Valid until" : "Validno do",
+ "Issued By" : "Izdano od",
+ "Valid until %s" : "Validno do %s",
+ "Import Root Certificate" : "Uvoz Root Certifikata",
+ "The encryption app is no longer enabled, please decrypt all your files" : "Aplikacija šifriranja više nije omogćena, molimo dešifrirajte sve svoje datoteke",
+ "Log-in password" : "Lozinka za prijavu",
+ "Decrypt all Files" : "Dešifriraj sve datoteke",
+ "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Vaši ključevi za šifriranje premješteni su na mjesto sigurnosne kopije. Ako nešto krene loše, ključeve možete obnoviti. Iizbrišite ih trajno samo ako ste sigurni da su sve datoteke ispravno dešifrirane.",
+ "Restore Encryption Keys" : "Obnovite ključeve za šifriranje",
+ "Delete Encryption Keys" : "Izbrišite ključeve za šifriranje",
+ "Show storage location" : "Prikaži mjesto pohrane",
+ "Show last log in" : "Prikaži zadnju prijavu",
+ "Show user backend" : "Prikaži korisničku pozadinu (backend)",
+ "Send email to new user" : "Pošalji e-poštu novom korisniku",
+ "Show email address" : "Prikaži adresu e-pošte",
+ "Username" : "Korisničko ime",
+ "E-Mail" : "E-pošta",
+ "Create" : "Kreiraj",
+ "Admin Recovery Password" : "Admin lozinka za oporavak",
+ "Enter the recovery password in order to recover the users files during password change" : "Unesite lozinku za oporavak da biste oporavili korisničke datoteke tokom promjene lozinke",
+ "Search Users" : "Traži Korisnike",
+ "Add Group" : "Dodaj Grupu",
+ "Group" : "Grupa",
+ "Everyone" : "Svi",
+ "Admins" : "Administratori",
+ "Default Quota" : "Zadana kvota",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Molim unesite kvotu za spremanje (npr: \"512 MB\" ili \"12 GB\")",
+ "Unlimited" : "Neograničeno",
+ "Other" : "Ostali",
+ "Group Admin for" : "Grupa Admin za",
+ "Quota" : "Kvota",
+ "Storage Location" : "Mjesto za spremanje",
+ "User Backend" : "Korisnička Pozadina (Backend)",
+ "Last Login" : "Zadnja prijava",
+ "change full name" : "promijeni puno ime",
+ "set new password" : "postavi novu lozinku",
+ "change email address" : "promjeni adresu e-pošte",
+ "Default" : "Zadano"
+},
+"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json
new file mode 100644
index 00000000000..dbf43aedd25
--- /dev/null
+++ b/settings/l10n/bs.json
@@ -0,0 +1,256 @@
+{ "translations": {
+ "Security & Setup Warnings" : "Sigurnosna Upozorenja & Upozorenja Postavki",
+ "Cron" : "Cron",
+ "Sharing" : "Dijeljenje",
+ "Security" : "Sigurnost",
+ "Email Server" : "Server e-pošte",
+ "Log" : "Zapisnik",
+ "Authentication error" : "Grešna autentifikacije",
+ "Your full name has been changed." : "Vaše puno ime je promijenjeno.",
+ "Unable to change full name" : "Puno ime nije moguće promijeniti",
+ "Files decrypted successfully" : "Datoteke su uspješno dešifrirane",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Vaše datoteke nije moguće dešifrirati, molim provjerite svoj owncloud.log ili kontaktirajte svog administratora",
+ "Couldn't decrypt your files, check your password and try again" : "Vaše datoteke nije moguće dešifrirati, provjerite svoju lozinku i pokušajte ponovno",
+ "Encryption keys deleted permanently" : "Ključevi za šifriranje su trajno izbrisani",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće trajno izbrisati, molim provjerite svoj owncloud.log ili pitajte svog administratora.",
+ "Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
+ "Backups restored successfully" : "Sigurnosne kopije su uspješno obnovljene",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće obnoviti, molim provjerite svoj owncloud.log ili pitajte svog administratora",
+ "Language changed" : "Jezik je promijenjen",
+ "Invalid request" : "Neispravan zahtjev",
+ "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.",
+ "Wrong password" : "Pogrešna lozinka",
+ "No user supplied" : "Nijedan korisnik nije dostavljen",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Molim navedite admin lozinku za povratak, u protivnom će svi korisnički podaci biti izgubljeni",
+ "Wrong admin recovery password. Please check the password and try again." : "Pogrešna admin lozinka za povratak. Molim provjerite lozinku i pokušajte ponovno.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Pozadina ne podržava promjenu lozinke, ali korisnički ključ za šifriranje je uspješno ažuriran.",
+ "Unable to change password" : "Promjena lozinke nije moguća",
+ "Enabled" : "Aktivirano",
+ "Not enabled" : "Nije aktivirano",
+ "Recommended" : "Preporučljivo",
+ "Group already exists." : "Grupa već postoji.",
+ "Unable to add group." : "Nemoguće dodati grupu.",
+ "Unable to delete group." : "Nemoguće izbrisati grupu.",
+ "Saved" : "Spremljeno",
+ "test email settings" : "testiraj postavke e-pošte",
+ "If you received this email, the settings seem to be correct." : "Ako ste primili ovu e-poštu, izgleda da su postavke ispravne.",
+ "A problem occurred while sending the email. Please revise your settings." : "Došlo je do problema prilikom slanja e-pošte. Molim vas revidirate svoje postavke.",
+ "Email sent" : "E-pošta je poslana",
+ "You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu email trebate postaviti svoj korisnički email.",
+ "Invalid mail address" : "Nevažeća adresa e-pošte",
+ "Unable to create user." : "Nemoguće kreirati korisnika",
+ "Your %s account was created" : "Vaš %s račun je kreiran",
+ "Unable to delete user." : "Nemoguće izbrisati korisnika",
+ "Forbidden" : "Zabranjeno",
+ "Invalid user" : "Nevažeči korisnik",
+ "Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
+ "Email saved" : "E-pošta je spremljena",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
+ "Add trusted domain" : "Dodaj pouzdanu domenu",
+ "Sending..." : "Slanje...",
+ "All" : "Sve",
+ "Please wait...." : "Molim pričekajte...",
+ "Error while disabling app" : "Greška pri onemogućavanju aplikacije",
+ "Disable" : "Onemogući",
+ "Enable" : "Omogući",
+ "Error while enabling app" : "Greška pri omogućavanju aplikacije",
+ "Updating...." : "Ažuriranje...",
+ "Error while updating app" : "Greška pri ažuriranju aplikacije",
+ "Updated" : "Ažurirano",
+ "Uninstalling ...." : "Deinstaliranje....",
+ "Error while uninstalling app" : "Greška pri deinstaliranju aplikacije",
+ "Uninstall" : "Deinstaliraj",
+ "Select a profile picture" : "Odaberi sliku profila",
+ "Very weak password" : "Veoma slaba lozinka",
+ "Weak password" : "Slaba lozinka",
+ "So-so password" : "Tu-i-tamo lozinka",
+ "Good password" : "Dobra lozinka",
+ "Strong password" : "Jaka lozinka",
+ "Valid until {date}" : "Validno do {date}",
+ "Delete" : "Izbriši",
+ "Decrypting files... Please wait, this can take some time." : "Dešifriranje datoteka... Molim pričekajte, ovo može potrajati neko vrijeme.",
+ "Delete encryption keys permanently." : "Trajno izbrišite ključeve za šifriranje.",
+ "Restore encryption keys." : "Obnovi ključeve za šifriranje.",
+ "Groups" : "Grupe",
+ "Unable to delete {objName}" : "Nije moguće izbrisati {objName}",
+ "Error creating group" : "Greška pri kreiranju grupe",
+ "A valid group name must be provided" : "Nužno je navesti valjani naziv grupe",
+ "deleted {groupName}" : "izbrisana {groupName}",
+ "undo" : "poništi",
+ "no group" : "nema grupe",
+ "never" : "nikad",
+ "deleted {userName}" : "izbrisan {userName}",
+ "add group" : "dodaj grupu",
+ "A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
+ "Error creating user" : "Greška pri kreiranju korisnika",
+ "A valid password must be provided" : "Nužno je navesti valjanu lozinku",
+ "A valid email must be provided" : "Nužno je navesti valjanu adresu e-pošte",
+ "__language_name__" : "__naziv_jezika___",
+ "Personal Info" : "Osobne Informacije",
+ "SSL root certificates" : "SSL root certifikati",
+ "Encryption" : "Šifriranje",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)",
+ "Info, warnings, errors and fatal issues" : "Informacije, upozorenja, greške i fatalni problemi",
+ "Warnings, errors and fatal issues" : "Upozorenja, greške i fatalni problemi",
+ "Errors and fatal issues" : "Greške i fatalni problemi",
+ "Fatal issues only" : "Samo fatalni problemi",
+ "None" : "Ništa",
+ "Login" : "Prijava",
+ "Plain" : "Čisti tekst",
+ "NT LAN Manager" : "NT LAN menedžer",
+ "SSL" : "SSL",
+ "TLS" : "TLS",
+ "Security Warning" : "Sigurnosno upozorenje",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vi %s pristupate putem HTTP. Strogo vam preporučujem da vaš server konfigurišete tako da umjesto HTTP zahtijeva korištenje HTTPS.",
+ "Read-Only config enabled" : "Podešena samo-čitajuća konfiguracija",
+ "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." : "Samo-čitajuća konfiguracija je podešena. Ovo spriječava postavljanje neke konfiguracije putem web-sučelja. Nadalje, datoteka mora biti omogućena ručnu izmjenu pri svakom ažuriranju.",
+ "Setup Warning" : "Upozorenje postavki",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je očigledno postavljen da se skine inline doc blokova. To će nekoliko osnovnih aplikacija učiniti nedostupnim.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Uzrok tome je vjerojatno neki ubrzivač predmemorisanja kao što je Zend OPcache ili eAccelerator.",
+ "Database Performance Info" : "Info o performansi baze podataka",
+ "SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite se koristi kao baza podataka. Za veće instalacije preporučujemo da se to promijeni. Za migraciju na neku drugu bazu podataka koristite naredbeni redak: 'occ db: convert-type'",
+ "Module 'fileinfo' missing" : "Nedostaje modul 'fileinfo'",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Strogo vam preporučjem da taj modul omogućite kako biste dobili najbolje rezultate u detekciji mime vrste.",
+ "PHP charset is not set to UTF-8" : "PHP Charset nije postavljen na UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset nije postavljen na UTF-8. To može prouzrokovati ozbiljne probleme s non-ASCII znakovima u nazivima datoteka. Strogo preporučujem da vrijednost 'default_charset' u php.ini promijenite u 'UTF-8'.",
+ "Locale not working" : "Regionalna šema ne radi",
+ "System locale can not be set to a one which supports UTF-8." : "Regionalnu šemu sustava nemoguće je postaviti na neku koja podržava UTF-8.",
+ "This means that there might be problems with certain characters in file names." : "To znači da se mogu javiti problemi s određenim znakovima u nazivu datoteke.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Strogo se preporučuje instaliranje zahtjevnih paketa na vašem sistemu koji podržavaju jednu od slijedećih regionalnih šemi: %s.",
+ "URL generation in notification emails" : "Generiranje URL-a u notifikacijskoj e-pošti",
+ "Configuration Checks" : "Konfiguracione Provjere",
+ "No problems found" : "Problemi nisu pronađeni",
+ "Please double check the <a href='%s'>installation guides</a>." : "Molimo duplo provjerite <a href='%s'> instalacijske vodiće</a>.",
+ "Last cron was executed at %s." : "Zadnji cron je izvršen na %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Zadnji cron izvršen je na %s. Bilo je to prije više od jednog sata, čini se da nešto nije u redu.",
+ "Cron was not executed yet!" : "Cron još nije izvršen!",
+ "Execute one task with each page loaded" : "Izvrši jedan zadatak sa svakom učitanom stranicom",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrovan na webcron usluzi da poziva cron.php svakih 15 minuta preko http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Koristite cron uslugu sustava za pozivanje cron.php datoteke svakih 15 minuta.",
+ "Allow apps to use the Share API" : "Dozvoli aplikacijama korištenje Share API",
+ "Allow users to share via link" : "Dozvoli korisnicima dijeljenje putem veze",
+ "Enforce password protection" : "Nametni zaštitu lozinke",
+ "Allow public uploads" : "Dozvoli javno učitavanje",
+ "Allow users to send mail notification for shared files" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
+ "Set default expiration date" : "Postavite zadani datum isteka",
+ "Expire after " : "Istek nakon",
+ "days" : "dana",
+ "Enforce expiration date" : "Nametni datum isteka",
+ "Allow resharing" : "Dopustite ponovno dijeljenje",
+ "Restrict users to only share with users in their groups" : "Ograniči korisnike na međusobno dijeljenje resursa samo s korisnicima unutar svoje grupe",
+ "Allow users to send mail notification for shared files to other users" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke ka ostalim korisnicima",
+ "Exclude groups from sharing" : "Isključite grupe iz dijeljenja",
+ "These groups will still be able to receive shares, but not to initiate them." : "Ove će grupe i dalje moći primati dijeljene resurse, ali ne i inicirati ih",
+ "Enforce HTTPS" : "Nametnite HTTPS",
+ "Forces the clients to connect to %s via an encrypted connection." : "Prisiljava klijente da se priključe na %s putem šifrirane konekcije.",
+ "Enforce HTTPS for subdomains" : "Nametnite HTTPS za poddomene",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Prisiljava klijente da se priključe na %s i poddomene putem šifrirane konekcije.",
+ "Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Molim priključite se na svoj %s putem HTTPS da biste omogućili ili onemogućili SSL ",
+ "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.",
+ "Send mode" : "Način rada za slanje",
+ "From address" : "S adrese",
+ "mail" : "pošta",
+ "Authentication method" : "Metoda autentifikacije",
+ "Authentication required" : "Potrebna autentifikacija",
+ "Server address" : "Adresa servera",
+ "Port" : "Priključak",
+ "Credentials" : "Vjerodajnice",
+ "SMTP Username" : "SMTP Korisničko ime",
+ "SMTP Password" : "SMPT Lozinka",
+ "Store credentials" : "Spremi vjerodajnice",
+ "Test email settings" : "Postavke za testnu e-poštu",
+ "Send email" : "Pošalji e-poštu",
+ "Log level" : "Razina zapisnika",
+ "More" : "Više",
+ "Less" : "Manje",
+ "Version" : "Verzija",
+ "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Razvila <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud zajednica</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">izvorni kod</a> je licenciran <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> licencom.",
+ "More apps" : "Više aplikacija",
+ "Add your app" : "Dodaj svoju aplikaciju",
+ "by" : "od strane",
+ "licensed" : "licenciran",
+ "Documentation:" : "Dokumentacija:",
+ "User Documentation" : "Korisnička Dokumentacija",
+ "Admin Documentation" : "Admin Dokumentacija",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Ova aplikacija se ne može instalirati zbog slijedećih neispunjenih ovisnosti:",
+ "Update to %s" : "Ažuriraj na %s",
+ "Enable only for specific groups" : "Omogućite samo za specifične grupe",
+ "Uninstall App" : "Deinstaliraj aplikaciju",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej,<br><br>samo da javim da sad imate %s račum.<br><br>Vaše korisničko ime: %s<br>Pristupite mu: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Cheers!",
+ "Administrator Documentation" : "Dokumentacija Administratora",
+ "Online Documentation" : "Online Dokumentacija",
+ "Forum" : "Forum",
+ "Bugtracker" : "Bugtracker",
+ "Commercial Support" : "Komercijalna Podrška",
+ "Get the apps to sync your files" : "Koristite aplikacije za sinhronizaciju svojih datoteka",
+ "Desktop client" : "Desktop klijent",
+ "Android app" : "Android aplikacija",
+ "iOS app" : "iOS aplikacija",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Ako želite podržati projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">pridružite se razvoju</a>\n\t\tili\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">proširite vijest</a>!",
+ "Show First Run Wizard again" : "Opet pokažite First Run Wizard",
+ "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Iskoristili ste <strong>%s</strong> od raspoloživog <strong>%s</strong>",
+ "Password" : "Lozinka",
+ "Your password was changed" : "Vaša lozinka je promijenjena",
+ "Unable to change your password" : "Vašu lozinku nije moguće promijeniti",
+ "Current password" : "Trenutna lozinka",
+ "New password" : "Nova lozinka",
+ "Change password" : "Promijeni lozinku",
+ "Full Name" : "Puno ime",
+ "Email" : "E-pošta",
+ "Your email address" : "Vaša adresa e-pošte",
+ "Fill in an email address to enable password recovery and receive notifications" : "Unesite adresu e-pošte da biste omogućili oporavak lozinke i primili notifikacije",
+ "Profile picture" : "Slika profila",
+ "Upload new" : "Učitaj novu",
+ "Select new from Files" : "Odaberi novu iz datoteka",
+ "Remove image" : "Ukloni sliku",
+ "Either png or jpg. Ideally square but you will be able to crop it." : "Ili png ili jpg. Idealno bi bilo da je kvadratna, ali moći ćete je obrezati",
+ "Your avatar is provided by your original account." : "Vaš avatar je isporučen od strane vašeg izvornog računa.",
+ "Cancel" : "Odustani",
+ "Choose as profile image" : "Izaberi kao sliku profila",
+ "Language" : "Jezik",
+ "Help translate" : "Pomozi prevesti",
+ "Common Name" : "Opće Ime",
+ "Valid until" : "Validno do",
+ "Issued By" : "Izdano od",
+ "Valid until %s" : "Validno do %s",
+ "Import Root Certificate" : "Uvoz Root Certifikata",
+ "The encryption app is no longer enabled, please decrypt all your files" : "Aplikacija šifriranja više nije omogćena, molimo dešifrirajte sve svoje datoteke",
+ "Log-in password" : "Lozinka za prijavu",
+ "Decrypt all Files" : "Dešifriraj sve datoteke",
+ "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Vaši ključevi za šifriranje premješteni su na mjesto sigurnosne kopije. Ako nešto krene loše, ključeve možete obnoviti. Iizbrišite ih trajno samo ako ste sigurni da su sve datoteke ispravno dešifrirane.",
+ "Restore Encryption Keys" : "Obnovite ključeve za šifriranje",
+ "Delete Encryption Keys" : "Izbrišite ključeve za šifriranje",
+ "Show storage location" : "Prikaži mjesto pohrane",
+ "Show last log in" : "Prikaži zadnju prijavu",
+ "Show user backend" : "Prikaži korisničku pozadinu (backend)",
+ "Send email to new user" : "Pošalji e-poštu novom korisniku",
+ "Show email address" : "Prikaži adresu e-pošte",
+ "Username" : "Korisničko ime",
+ "E-Mail" : "E-pošta",
+ "Create" : "Kreiraj",
+ "Admin Recovery Password" : "Admin lozinka za oporavak",
+ "Enter the recovery password in order to recover the users files during password change" : "Unesite lozinku za oporavak da biste oporavili korisničke datoteke tokom promjene lozinke",
+ "Search Users" : "Traži Korisnike",
+ "Add Group" : "Dodaj Grupu",
+ "Group" : "Grupa",
+ "Everyone" : "Svi",
+ "Admins" : "Administratori",
+ "Default Quota" : "Zadana kvota",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Molim unesite kvotu za spremanje (npr: \"512 MB\" ili \"12 GB\")",
+ "Unlimited" : "Neograničeno",
+ "Other" : "Ostali",
+ "Group Admin for" : "Grupa Admin za",
+ "Quota" : "Kvota",
+ "Storage Location" : "Mjesto za spremanje",
+ "User Backend" : "Korisnička Pozadina (Backend)",
+ "Last Login" : "Zadnja prijava",
+ "change full name" : "promijeni puno ime",
+ "set new password" : "postavi novu lozinku",
+ "change email address" : "promjeni adresu e-pošte",
+ "Default" : "Zadano"
+},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
+} \ No newline at end of file
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index 1c1e5616252..3295f6e4b15 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Avisos de seguretat i configuració",
"Cron" : "Cron",
"Sharing" : "Compartir",
"Security" : "Seguretat",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Error d'autenticació",
"Your full name has been changed." : "El vostre nom complet ha canviat.",
"Unable to change full name" : "No s'ha pogut canviar el nom complet",
- "Group already exists" : "El grup ja existeix",
- "Unable to add group" : "No es pot afegir el grup",
"Files decrypted successfully" : "Els fitxers s'han desencriptat amb èxit",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "No es poden desencriptar els fitxers. Comproveu owncloud.log o demaneu-ho a l'administrador.",
"Couldn't decrypt your files, check your password and try again" : "No s'han pogut desencriptar els fitxers, comproveu la contrasenya i proveu-ho de nou",
"Encryption keys deleted permanently" : "Les claus d'encriptació s'han esborrat permanentment",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "No es poden esborrar les claus d'encriptació. Comproveu owncloud.log o demaneu-ho a l'administrador.",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
- "Email saved" : "S'ha desat el correu electrònic",
- "Invalid email" : "El correu electrònic no és vàlid",
- "Unable to delete group" : "No es pot eliminar el grup",
- "Unable to delete user" : "No es pot eliminar l'usuari",
"Backups restored successfully" : "Les còpies de seguretat s'han restablert correctament",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "No es poden restablir les claus d'encriptació. Comproveu owncloud.log o demaneu-ho a l'administrador.",
"Language changed" : "S'ha canviat l'idioma",
@@ -36,11 +31,17 @@ OC.L10N.register(
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "El dorsal no permet canviar la contrasenya, però la clau d'encripació d'usuaris s'ha actualitzat correctament.",
"Unable to change password" : "No es pot canviar la contrasenya",
"Enabled" : "Activat",
+ "Not enabled" : "Desactivat",
+ "Recommended" : "Recomanat",
"Saved" : "Desat",
"test email settings" : "prova l'arranjament del correu",
"If you received this email, the settings seem to be correct." : "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
+ "A problem occurred while sending the email. Please revise your settings." : "Hi ha hagut un problema enviant el correu. Reviseu la configuració.",
"Email sent" : "El correu electrónic s'ha enviat",
"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.",
+ "Email saved" : "S'ha desat el correu electrònic",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
+ "Add trusted domain" : "Afegir domini de confiança",
"Sending..." : "Enviant...",
"All" : "Tots",
"Please wait...." : "Espereu...",
@@ -60,6 +61,7 @@ OC.L10N.register(
"So-so password" : "Contrasenya passable",
"Good password" : "Contrasenya bona",
"Strong password" : "Contrasenya forta",
+ "Valid until {date}" : "Vàlid fins {date}",
"Delete" : "Esborra",
"Decrypting files... Please wait, this can take some time." : "Desencriptant fitxers... Espereu, això pot trigar una estona.",
"Delete encryption keys permanently." : "Esborra les claus d'encriptació permanentment.",
@@ -70,14 +72,15 @@ OC.L10N.register(
"A valid group name must be provided" : "Heu de facilitar un nom de grup vàlid",
"deleted {groupName}" : "eliminat {groupName}",
"undo" : "desfés",
+ "no group" : "sense grup",
"never" : "mai",
"deleted {userName}" : "eliminat {userName}",
"add group" : "afegeix grup",
"A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
"Error creating user" : "Error en crear l'usuari",
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
- "Warning: Home directory for user \"{user}\" already exists" : "Avís: la carpeta Home per l'usuari \"{user}\" ja existeix",
"__language_name__" : "Català",
+ "Personal Info" : "Informació personal",
"SSL root certificates" : "Certificats SSL root",
"Encryption" : "Xifrat",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
@@ -92,8 +95,7 @@ OC.L10N.register(
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Avís de seguretat",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La carpeta de dades i els vostres fitxersprobablement són accessibles des d'Internet. La 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 %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint a %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
"Setup Warning" : "Avís de configuració",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Aparentment PHP està configurat per mostrar blocs en línia de documentació. Això farà que algunes aplicacions core siguin inaccessibles.",
"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.",
@@ -101,33 +103,38 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "S'utilitza SQLite com a base de dades. Per instal·lacions grans recomanem que la canvieu. Per migrar a una altra base de dades useu l'eina d'intèrpret d'ordres 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No s'ha trobat el mòdul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El mòdul de PHP 'fileinfo' no s'ha trobat. Us recomanem que habiliteu aquest mòdul per obtenir millors resultats amb la detecció mime-type.",
- "Your PHP version is outdated" : "La versió de PHP és obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versió de PHP és obsoleta. Us recomanem fermament que actualitzeu a la versió 5.3.8 o superior perquè les versions anteriors no funcionen. La instal·lació podria no funcionar correctament.",
+ "PHP charset is not set to UTF-8" : "El codi de caràcters del php no és UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El codi de caràcters del php no és UTF-8. Això pot provocar greus problemes amb caràcter no-ASCII. Recomanem fermament canviar el valor del 'default_charset' del php.ini a 'UTF-8'",
"Locale not working" : "Locale no funciona",
"System locale can not be set to a one which supports UTF-8." : "No s'ha pogut establir cap localització del sistema amb suport per UTF-8.",
"This means that there might be problems with certain characters in file names." : "Això podria comportar problemes amb alguns caràcters en els noms dels fitxer.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Us recomanem que instal·leu els paquets necessaris en el sistema per donar suport a alguna de les localitzacions següents: %s",
+ "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",
+ "URL generation in notification emails" : "Generar URL en els correus de notificació",
+ "No problems found" : "No hem trovat problemes",
"Please double check the <a href='%s'>installation guides</a>." : "Comproveu les <a href='%s'>guies d'instal·lació</a>.",
"Last cron was executed at %s." : "L'últim cron s'ha executat el %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "L'últim cron es va executar a %s. Fa més d'una hora, alguna cosa sembla que va malament.",
"Cron was not executed yet!" : "El cron encara no s'ha executat!",
"Execute one task with each page loaded" : "Executa una tasca per cada paquet carregat",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php està registrat en un servei webcron que fa una crida a cron.php cada 15 minuts a través de http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Fer servir el cron del sistema per cridar el cron.php cada 15 minuts.",
"Allow apps to use the Share API" : "Permet que les aplicacions utilitzin l'API de compartir",
"Allow users to share via link" : "Permet als usuaris compartir a través d'enllaços",
"Enforce password protection" : "Reforça la protecció amb contrasenya",
"Allow public uploads" : "Permet pujada pública",
+ "Allow users to send mail notification for shared files" : "Permet als usuaris enviar notificacions de fitxers compartits per correu ",
"Set default expiration date" : "Estableix la data de venciment",
"Expire after " : "Venciment després de",
"days" : "dies",
"Enforce expiration date" : "Força la data de venciment",
"Allow resharing" : "Permet compartir de nou",
"Restrict users to only share with users in their groups" : "Permet als usuaris compartir només amb usuaris del seu grup",
- "Allow users to send mail notification for shared files" : "Permet als usuaris enviar notificacions de fitxers compartits per correu ",
"Exclude groups from sharing" : "Exclou grups de compartició",
"These groups will still be able to receive shares, but not to initiate them." : "Aquests fitxers encara podran rebre compartits, però no podran iniciar-los.",
"Enforce HTTPS" : "Força HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Força la connexió dels clients a %s a través d'una connexió encriptada.",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS per subdominis",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força els clients a connectar-se a %s i els subdominis amb una connexió xifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connecteu a %s a través de HTTPS per habilitar o inhabilitar l'accés SSL.",
"This is used for sending out notifications." : "S'usa per enviar notificacions.",
"Send mode" : "Mode d'enviament",
@@ -140,6 +147,7 @@ OC.L10N.register(
"Credentials" : "Credencials",
"SMTP Username" : "Nom d'usuari SMTP",
"SMTP Password" : "Contrasenya SMTP",
+ "Store credentials" : "Emmagatzemar credencials",
"Test email settings" : "Prova l'arranjament del correu",
"Send email" : "Envia correu",
"Log level" : "Nivell de registre",
@@ -148,12 +156,16 @@ OC.L10N.register(
"Version" : "Versió",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Desenvolupat per la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunitat ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">codi font</a> té llicència <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Més aplicacions",
+ "Add your app" : "Afegiu la vostra app",
"by" : "per",
+ "licensed" : "llicenciat/da",
"Documentation:" : "Documentació:",
"User Documentation" : "Documentació d'usuari",
"Admin Documentation" : "Documentació d'administrador",
+ "Update to %s" : "Actualitzar a %s",
"Enable only for specific groups" : "Activa només per grups específics",
"Uninstall App" : "Desinstal·la l'aplicació",
+ "Cheers!" : "Salut!",
"Administrator Documentation" : "Documentació d'administrador",
"Online Documentation" : "Documentació en línia",
"Forum" : "Fòrum",
@@ -183,6 +195,10 @@ OC.L10N.register(
"Choose as profile image" : "Selecciona com a imatge de perfil",
"Language" : "Idioma",
"Help translate" : "Ajudeu-nos amb la traducció",
+ "Common Name" : "Nom comú",
+ "Valid until" : "Valid fins",
+ "Issued By" : "Emès Per",
+ "Valid until %s" : "Vàlid fins %s",
"Import Root Certificate" : "Importa certificat root",
"The encryption app is no longer enabled, please decrypt all your files" : "L'aplicació d'encriptació ja no està activada, desencripteu tots els vostres fitxers",
"Log-in password" : "Contrasenya d'accés",
@@ -190,11 +206,13 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Les claus d'encriptació s'han mogut a una còpia de seguretat. Si alguna cosa va malament les podreu restablir. Esborreu-les permanentment només si esteu segur que tots els fitxers es desencripten correctament.",
"Restore Encryption Keys" : "Restableix les claus d'encriptació",
"Delete Encryption Keys" : "Esborra les claus d'encriptació",
- "Login Name" : "Nom d'accés",
+ "Show storage location" : "Mostra la ubicació del magatzem",
+ "Show last log in" : "Mostrar l'últim accés",
+ "Username" : "Nom d'usuari",
"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",
- "Search Users and Groups" : "Cerca usuaris i grups",
+ "Search Users" : "Buscar usuaris",
"Add Group" : "Afegeix grup",
"Group" : "Grup",
"Everyone" : "Tothom",
@@ -203,7 +221,7 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Escriviu la quota d'emmagatzemament (per ex.: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Il·limitat",
"Other" : "Un altre",
- "Username" : "Nom d'usuari",
+ "Group Admin for" : "Grup Admin per",
"Quota" : "Quota",
"Storage Location" : "Ubicació de l'emmagatzemament",
"Last Login" : "Últim accés",
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index d6928e1259a..f60f4253b3c 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Avisos de seguretat i configuració",
"Cron" : "Cron",
"Sharing" : "Compartir",
"Security" : "Seguretat",
@@ -7,18 +8,12 @@
"Authentication error" : "Error d'autenticació",
"Your full name has been changed." : "El vostre nom complet ha canviat.",
"Unable to change full name" : "No s'ha pogut canviar el nom complet",
- "Group already exists" : "El grup ja existeix",
- "Unable to add group" : "No es pot afegir el grup",
"Files decrypted successfully" : "Els fitxers s'han desencriptat amb èxit",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "No es poden desencriptar els fitxers. Comproveu owncloud.log o demaneu-ho a l'administrador.",
"Couldn't decrypt your files, check your password and try again" : "No s'han pogut desencriptar els fitxers, comproveu la contrasenya i proveu-ho de nou",
"Encryption keys deleted permanently" : "Les claus d'encriptació s'han esborrat permanentment",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "No es poden esborrar les claus d'encriptació. Comproveu owncloud.log o demaneu-ho a l'administrador.",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
- "Email saved" : "S'ha desat el correu electrònic",
- "Invalid email" : "El correu electrònic no és vàlid",
- "Unable to delete group" : "No es pot eliminar el grup",
- "Unable to delete user" : "No es pot eliminar l'usuari",
"Backups restored successfully" : "Les còpies de seguretat s'han restablert correctament",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "No es poden restablir les claus d'encriptació. Comproveu owncloud.log o demaneu-ho a l'administrador.",
"Language changed" : "S'ha canviat l'idioma",
@@ -34,11 +29,17 @@
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "El dorsal no permet canviar la contrasenya, però la clau d'encripació d'usuaris s'ha actualitzat correctament.",
"Unable to change password" : "No es pot canviar la contrasenya",
"Enabled" : "Activat",
+ "Not enabled" : "Desactivat",
+ "Recommended" : "Recomanat",
"Saved" : "Desat",
"test email settings" : "prova l'arranjament del correu",
"If you received this email, the settings seem to be correct." : "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
+ "A problem occurred while sending the email. Please revise your settings." : "Hi ha hagut un problema enviant el correu. Reviseu la configuració.",
"Email sent" : "El correu electrónic s'ha enviat",
"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.",
+ "Email saved" : "S'ha desat el correu electrònic",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
+ "Add trusted domain" : "Afegir domini de confiança",
"Sending..." : "Enviant...",
"All" : "Tots",
"Please wait...." : "Espereu...",
@@ -58,6 +59,7 @@
"So-so password" : "Contrasenya passable",
"Good password" : "Contrasenya bona",
"Strong password" : "Contrasenya forta",
+ "Valid until {date}" : "Vàlid fins {date}",
"Delete" : "Esborra",
"Decrypting files... Please wait, this can take some time." : "Desencriptant fitxers... Espereu, això pot trigar una estona.",
"Delete encryption keys permanently." : "Esborra les claus d'encriptació permanentment.",
@@ -68,14 +70,15 @@
"A valid group name must be provided" : "Heu de facilitar un nom de grup vàlid",
"deleted {groupName}" : "eliminat {groupName}",
"undo" : "desfés",
+ "no group" : "sense grup",
"never" : "mai",
"deleted {userName}" : "eliminat {userName}",
"add group" : "afegeix grup",
"A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
"Error creating user" : "Error en crear l'usuari",
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
- "Warning: Home directory for user \"{user}\" already exists" : "Avís: la carpeta Home per l'usuari \"{user}\" ja existeix",
"__language_name__" : "Català",
+ "Personal Info" : "Informació personal",
"SSL root certificates" : "Certificats SSL root",
"Encryption" : "Xifrat",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
@@ -90,8 +93,7 @@
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Avís de seguretat",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La carpeta de dades i els vostres fitxersprobablement són accessibles des d'Internet. La 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 %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint a %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
"Setup Warning" : "Avís de configuració",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Aparentment PHP està configurat per mostrar blocs en línia de documentació. Això farà que algunes aplicacions core siguin inaccessibles.",
"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.",
@@ -99,33 +101,38 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "S'utilitza SQLite com a base de dades. Per instal·lacions grans recomanem que la canvieu. Per migrar a una altra base de dades useu l'eina d'intèrpret d'ordres 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No s'ha trobat el mòdul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El mòdul de PHP 'fileinfo' no s'ha trobat. Us recomanem que habiliteu aquest mòdul per obtenir millors resultats amb la detecció mime-type.",
- "Your PHP version is outdated" : "La versió de PHP és obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versió de PHP és obsoleta. Us recomanem fermament que actualitzeu a la versió 5.3.8 o superior perquè les versions anteriors no funcionen. La instal·lació podria no funcionar correctament.",
+ "PHP charset is not set to UTF-8" : "El codi de caràcters del php no és UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El codi de caràcters del php no és UTF-8. Això pot provocar greus problemes amb caràcter no-ASCII. Recomanem fermament canviar el valor del 'default_charset' del php.ini a 'UTF-8'",
"Locale not working" : "Locale no funciona",
"System locale can not be set to a one which supports UTF-8." : "No s'ha pogut establir cap localització del sistema amb suport per UTF-8.",
"This means that there might be problems with certain characters in file names." : "Això podria comportar problemes amb alguns caràcters en els noms dels fitxer.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Us recomanem que instal·leu els paquets necessaris en el sistema per donar suport a alguna de les localitzacions següents: %s",
+ "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",
+ "URL generation in notification emails" : "Generar URL en els correus de notificació",
+ "No problems found" : "No hem trovat problemes",
"Please double check the <a href='%s'>installation guides</a>." : "Comproveu les <a href='%s'>guies d'instal·lació</a>.",
"Last cron was executed at %s." : "L'últim cron s'ha executat el %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "L'últim cron es va executar a %s. Fa més d'una hora, alguna cosa sembla que va malament.",
"Cron was not executed yet!" : "El cron encara no s'ha executat!",
"Execute one task with each page loaded" : "Executa una tasca per cada paquet carregat",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php està registrat en un servei webcron que fa una crida a cron.php cada 15 minuts a través de http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Fer servir el cron del sistema per cridar el cron.php cada 15 minuts.",
"Allow apps to use the Share API" : "Permet que les aplicacions utilitzin l'API de compartir",
"Allow users to share via link" : "Permet als usuaris compartir a través d'enllaços",
"Enforce password protection" : "Reforça la protecció amb contrasenya",
"Allow public uploads" : "Permet pujada pública",
+ "Allow users to send mail notification for shared files" : "Permet als usuaris enviar notificacions de fitxers compartits per correu ",
"Set default expiration date" : "Estableix la data de venciment",
"Expire after " : "Venciment després de",
"days" : "dies",
"Enforce expiration date" : "Força la data de venciment",
"Allow resharing" : "Permet compartir de nou",
"Restrict users to only share with users in their groups" : "Permet als usuaris compartir només amb usuaris del seu grup",
- "Allow users to send mail notification for shared files" : "Permet als usuaris enviar notificacions de fitxers compartits per correu ",
"Exclude groups from sharing" : "Exclou grups de compartició",
"These groups will still be able to receive shares, but not to initiate them." : "Aquests fitxers encara podran rebre compartits, però no podran iniciar-los.",
"Enforce HTTPS" : "Força HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Força la connexió dels clients a %s a través d'una connexió encriptada.",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS per subdominis",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força els clients a connectar-se a %s i els subdominis amb una connexió xifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connecteu a %s a través de HTTPS per habilitar o inhabilitar l'accés SSL.",
"This is used for sending out notifications." : "S'usa per enviar notificacions.",
"Send mode" : "Mode d'enviament",
@@ -138,6 +145,7 @@
"Credentials" : "Credencials",
"SMTP Username" : "Nom d'usuari SMTP",
"SMTP Password" : "Contrasenya SMTP",
+ "Store credentials" : "Emmagatzemar credencials",
"Test email settings" : "Prova l'arranjament del correu",
"Send email" : "Envia correu",
"Log level" : "Nivell de registre",
@@ -146,12 +154,16 @@
"Version" : "Versió",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Desenvolupat per la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunitat ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">codi font</a> té llicència <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Més aplicacions",
+ "Add your app" : "Afegiu la vostra app",
"by" : "per",
+ "licensed" : "llicenciat/da",
"Documentation:" : "Documentació:",
"User Documentation" : "Documentació d'usuari",
"Admin Documentation" : "Documentació d'administrador",
+ "Update to %s" : "Actualitzar a %s",
"Enable only for specific groups" : "Activa només per grups específics",
"Uninstall App" : "Desinstal·la l'aplicació",
+ "Cheers!" : "Salut!",
"Administrator Documentation" : "Documentació d'administrador",
"Online Documentation" : "Documentació en línia",
"Forum" : "Fòrum",
@@ -181,6 +193,10 @@
"Choose as profile image" : "Selecciona com a imatge de perfil",
"Language" : "Idioma",
"Help translate" : "Ajudeu-nos amb la traducció",
+ "Common Name" : "Nom comú",
+ "Valid until" : "Valid fins",
+ "Issued By" : "Emès Per",
+ "Valid until %s" : "Vàlid fins %s",
"Import Root Certificate" : "Importa certificat root",
"The encryption app is no longer enabled, please decrypt all your files" : "L'aplicació d'encriptació ja no està activada, desencripteu tots els vostres fitxers",
"Log-in password" : "Contrasenya d'accés",
@@ -188,11 +204,13 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Les claus d'encriptació s'han mogut a una còpia de seguretat. Si alguna cosa va malament les podreu restablir. Esborreu-les permanentment només si esteu segur que tots els fitxers es desencripten correctament.",
"Restore Encryption Keys" : "Restableix les claus d'encriptació",
"Delete Encryption Keys" : "Esborra les claus d'encriptació",
- "Login Name" : "Nom d'accés",
+ "Show storage location" : "Mostra la ubicació del magatzem",
+ "Show last log in" : "Mostrar l'últim accés",
+ "Username" : "Nom d'usuari",
"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",
- "Search Users and Groups" : "Cerca usuaris i grups",
+ "Search Users" : "Buscar usuaris",
"Add Group" : "Afegeix grup",
"Group" : "Grup",
"Everyone" : "Tothom",
@@ -201,7 +219,7 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Escriviu la quota d'emmagatzemament (per ex.: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Il·limitat",
"Other" : "Un altre",
- "Username" : "Nom d'usuari",
+ "Group Admin for" : "Grup Admin per",
"Quota" : "Quota",
"Storage Location" : "Ubicació de l'emmagatzemament",
"Last Login" : "Últim accés",
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index 90e4bd6ec7b..062ff0e84aa 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -1,29 +1,23 @@
OC.L10N.register(
"settings",
{
- "Security & Setup Warnings" : "Upozornění bezpečnosti a nastavení",
+ "Security & Setup Warnings" : "Upozornění zabezpečení a nastavení",
"Cron" : "Cron",
"Sharing" : "Sdílení",
"Security" : "Zabezpečení",
- "Email Server" : "E-mailový server",
+ "Email Server" : "Emailový server",
"Log" : "Záznam",
"Authentication error" : "Chyba přihlášení",
"Your full name has been changed." : "Vaše celé jméno bylo změněno.",
"Unable to change full name" : "Nelze změnit celé jméno",
- "Group already exists" : "Skupina již existuje",
- "Unable to add group" : "Nelze přidat skupinu",
"Files decrypted successfully" : "Soubory úspěšně dešifrovány",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't decrypt your files, check your password and try again" : "Nebylo možno dešifrovat soubory, zkontrolujte své heslo a zkuste znovu",
"Encryption keys deleted permanently" : "Šifrovací klíče trvale smazány",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
- "Email saved" : "E-mail uložen",
- "Invalid email" : "Neplatný e-mail",
- "Unable to delete group" : "Nelze smazat skupinu",
- "Unable to delete user" : "Nelze smazat uživatele",
"Backups restored successfully" : "Zálohy úspěšně obnoveny",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Language changed" : "Jazyk byl změněn",
"Invalid request" : "Neplatný požadavek",
"Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Povoleno",
"Not enabled" : "Vypnuto",
"Recommended" : "Doporučeno",
+ "Group already exists." : "Skupina již existuje.",
+ "Unable to add group." : "Nelze přidat skupinu.",
+ "Unable to delete group." : "Nelze smazat skupinu.",
"Saved" : "Uloženo",
- "test email settings" : "otestovat nastavení e-mailu",
- "If you received this email, the settings seem to be correct." : "Pokud jste obdrželi tento e-mail, nastavení se zdají být v pořádku.",
- "A problem occurred while sending the email. Please revise your settings." : "Při odesílání e-mailu nastala chyba. Překontrolujte prosím svá nastavení.",
- "Email sent" : "E-mail odeslán",
- "You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních e-mailů musíte nejprve nastavit svou e-mailovou adresu.",
+ "test email settings" : "otestovat nastavení emailu",
+ "If you received this email, the settings seem to be correct." : "Pokud jste obdrželi tento email, nastavení se zdají být v pořádku.",
+ "A problem occurred while sending the email. Please revise your settings." : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení.",
+ "Email sent" : "Email odeslán",
+ "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 mail address" : "Neplatná emailová adresa",
+ "Unable to create user." : "Nelze vytvořit uživatele.",
+ "Your %s account was created" : "Účet %s byl vytvořen",
+ "Unable to delete user." : "Nelze smazat uživatele.",
+ "Forbidden" : "Zakázáno",
+ "Invalid user" : "Neplatný uživatel",
+ "Unable to change mail address" : "Nelze změnit emailovou adresu",
+ "Email saved" : "Email uložen",
"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",
"Sending..." : "Odesílání...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Musíte zadat platné uživatelské jméno",
"Error creating user" : "Chyba při vytváření užiatele",
"A valid password must be provided" : "Musíte zadat platné heslo",
- "Warning: Home directory for user \"{user}\" already exists" : "Varování: Osobní složka uživatele \"{user}\" již existuje.",
+ "A valid email must be provided" : "Musíte zadat platný email",
"__language_name__" : "Česky",
"Personal Info" : "Osobní informace",
"SSL root certificates" : "Kořenové certifikáty SSL",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Bezpečnostní upozornění",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Přistupujete na %s protokolem HTTP. Důrazně doporučujeme nakonfigurovat server pro použití HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
+ "Read-Only config enabled" : "Konfigurace pouze pro čtení",
+ "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." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.",
"Setup Warning" : "Upozornění nastavení",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.",
@@ -110,17 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Je použita databáze SQLite. Pro větší instalace doporučujeme toto změnit. Pro migraci na jiný typ databáze lze použít nástroj pro příkazový řádek: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Schází modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.",
- "Your PHP version is outdated" : "Vaše verze PHP je zastaralá",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vámi používaná verze PHP je zastaralá. Důrazně doporučujeme aktualizovat na verzi 5.3.8 nebo novější, protože starší verze obsahují chyby. Je možné, že tato instalace nebude fungovat správně.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP není nastavena na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Znaková sada PHP není nastavena na UTF-8. To může způsobit závažné problémy se jmény souborů se znaky neobsaženými v ASCII. Důrazně doporučujeme změnit hodnotu 'default_charset' v php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizace nefunguje",
"System locale can not be set to a one which supports UTF-8." : "Není možné nastavit znakovou sadu, která podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že se mohou vyskytnout problémy s určitými znaky v názvech souborů.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Důrazně doporučujeme nainstalovat do vašeho systém balíčky nutné pro podporu některé z následujících znakových sad: %s.",
- "URL generation in notification emails" : "Generování adresy URL v oznamovacích e-mailech",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwritewebroot\" (Doporučujeme: \"%s\")",
- "Connectivity Checks" : "Ověřování připojení",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.",
+ "URL generation in notification emails" : "Generování adresy URL v oznamovacích emailech",
+ "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\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwrite.cli.url\" (Je doporučena tato: \"%s\")",
+ "Configuration Checks" : "Ověření konfigurace",
"No problems found" : "Nebyly nalezeny žádné problémy",
"Please double check the <a href='%s'>installation guides</a>." : "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>.",
"Last cron was executed at %s." : "Poslední cron byl spuštěn v %s",
@@ -133,22 +137,25 @@ OC.L10N.register(
"Allow users to share via link" : "Povolit uživatelům sdílení pomocí odkazů",
"Enforce password protection" : "Vynutit ochranu heslem",
"Allow public uploads" : "Povolit veřejné nahrávání souborů",
+ "Allow users to send mail notification for shared files" : "Povolit uživatelům odesílat emailová upozornění pro sdílené soubory",
"Set default expiration date" : "Nastavit výchozí datum vypršení platnosti",
"Expire after " : "Vyprší po",
"days" : "dnech",
"Enforce expiration date" : "Vynutit datum vypršení",
"Allow resharing" : "Povolit znovu-sdílení",
"Restrict users to only share with users in their groups" : "Povolit sdílení pouze mezi uživateli v rámci skupiny",
- "Allow users to send mail notification for shared files" : "Povolit uživatelům odesílat e-mailová upozornění pro sdílené soubory",
+ "Allow users to send mail notification for shared files to other users" : "Povolit uživatelům odesílat emailová upozornění na sdílené soubory ostatním uživatelům",
"Exclude groups from sharing" : "Vyjmout skupiny ze sdílení",
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.",
"Enforce HTTPS" : "Vynutit HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vynutí připojování klientů k %s šifrovaným spojením.",
+ "Enforce HTTPS for subdomains" : "Vynutit HTTPS pro subdomény",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vynutí připojování klientů k %s a subdoménám šifrovaným spojením.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Připojte se k %s přes HTTPS pro povolení nebo zakázání vynucení SSL.",
"This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.",
"Send mode" : "Mód odesílání",
"From address" : "Adresa odesílatele",
- "mail" : "e-mail",
+ "mail" : "email",
"Authentication method" : "Metoda ověření",
"Authentication required" : "Vyžadováno ověření",
"Server address" : "Adresa serveru",
@@ -157,8 +164,8 @@ OC.L10N.register(
"SMTP Username" : "SMTP uživatelské jméno ",
"SMTP Password" : "SMTP heslo",
"Store credentials" : "Ukládat přihlašovací údaje",
- "Test email settings" : "Otestovat nastavení e-mailu",
- "Send email" : "Odeslat e-mail",
+ "Test email settings" : "Otestovat nastavení emailu",
+ "Send email" : "Odeslat email",
"Log level" : "Úroveň zaznamenávání",
"More" : "Více",
"Less" : "Méně",
@@ -171,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Dokumentace:",
"User Documentation" : "Uživatelská dokumentace",
"Admin Documentation" : "Dokumentace pro administrátory",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Tuto aplikaci nelze nainstalovat, protože nejsou splněny následující závislosti:",
"Update to %s" : "Aktualizovat na %s",
"Enable only for specific groups" : "Povolit pouze pro vybrané skupiny",
"Uninstall App" : "Odinstalovat aplikaci",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ahoj,<br><br>toto je oznámení o nově vytvořeném %s účtu.<br><br>Uživatelské jméno: %s<br>Přihlásit se dá zde: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Ať slouží!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámení o nově vytvořeném %s účtu.\n\nUživatelské jméno: %s\nPřihlásit se dá zde: %s\n",
"Administrator Documentation" : "Dokumentace správce",
"Online Documentation" : "Online dokumentace",
"Forum" : "Fórum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Placená podpora",
"Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů",
+ "Desktop client" : "Aplikace pro počítač",
+ "Android app" : "Aplikace pro Android",
+ "iOS app" : "iOS aplikace",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Chcete-li podpořit tento projekt\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">přidejte se k vývoji</a>\n⇥⇥nebo\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">šiřte osvětu</a>!",
"Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong> dostupných",
@@ -190,9 +204,9 @@ OC.L10N.register(
"New password" : "Nové heslo",
"Change password" : "Změnit heslo",
"Full Name" : "Celé jméno",
- "Email" : "E-mail",
- "Your email address" : "Vaše e-mailová adresa",
- "Fill in an email address to enable password recovery and receive notifications" : "Zadejte e-mailovou adresu pro umožnění obnovy zapomenutého hesla a pro přijímání upozornění",
+ "Email" : "Email",
+ "Your email address" : "Vaše emailová adresa",
+ "Fill in an email address to enable password recovery and receive notifications" : "Zadejte emailovou adresu pro umožnění obnovy zapomenutého hesla a pro přijímání upozornění",
"Profile picture" : "Profilový obrázek",
"Upload new" : "Nahrát nový",
"Select new from Files" : "Vyberte nový ze souborů",
@@ -216,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Smazat šifrovací klíče",
"Show storage location" : "Zobrazit umístění úložiště",
"Show last log in" : "Zobrazit poslední přihlášení",
- "Login Name" : "Přihlašovací jméno",
+ "Show user backend" : "Zobrazit uživatelskou podpůrnou vrstvu",
+ "Send email to new user" : "Poslat email novému uživateli",
+ "Show email address" : "Zobrazit emailovou adresu",
+ "Username" : "Uživatelské jméno",
+ "E-Mail" : "Email",
"Create" : "Vytvořit",
"Admin Recovery Password" : "Heslo obnovy správce",
"Enter the recovery password in order to recover the users files during password change" : "Zadejte heslo obnovy pro obnovení souborů uživatele při změně hesla",
- "Search Users and Groups" : "Prohledat uživatele a skupiny",
+ "Search Users" : "Hledat uživatele",
"Add Group" : "Přidat skupinu",
"Group" : "Skupina",
"Everyone" : "Všichni",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Zvolte prosím kvótu pro úložiště (např. \"512 MB\" nebo \"12 GB\")",
"Unlimited" : "Neomezeně",
"Other" : "Jiný",
- "Username" : "Uživatelské jméno",
- "Group Admin for" : "Administrátor skupiny ",
+ "Group Admin for" : "Správce skupiny ",
"Quota" : "Kvóta",
"Storage Location" : "Umístění úložiště",
+ "User Backend" : "Uživatelská podpůrná vrstva",
"Last Login" : "Poslední přihlášení",
"change full name" : "změnit celé jméno",
"set new password" : "nastavit nové heslo",
+ "change email address" : "změnit emailovou adresu",
"Default" : "Výchozí"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index b763d0efd3e..9663ffd65f9 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -1,27 +1,21 @@
{ "translations": {
- "Security & Setup Warnings" : "Upozornění bezpečnosti a nastavení",
+ "Security & Setup Warnings" : "Upozornění zabezpečení a nastavení",
"Cron" : "Cron",
"Sharing" : "Sdílení",
"Security" : "Zabezpečení",
- "Email Server" : "E-mailový server",
+ "Email Server" : "Emailový server",
"Log" : "Záznam",
"Authentication error" : "Chyba přihlášení",
"Your full name has been changed." : "Vaše celé jméno bylo změněno.",
"Unable to change full name" : "Nelze změnit celé jméno",
- "Group already exists" : "Skupina již existuje",
- "Unable to add group" : "Nelze přidat skupinu",
"Files decrypted successfully" : "Soubory úspěšně dešifrovány",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't decrypt your files, check your password and try again" : "Nebylo možno dešifrovat soubory, zkontrolujte své heslo a zkuste znovu",
"Encryption keys deleted permanently" : "Šifrovací klíče trvale smazány",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
- "Email saved" : "E-mail uložen",
- "Invalid email" : "Neplatný e-mail",
- "Unable to delete group" : "Nelze smazat skupinu",
- "Unable to delete user" : "Nelze smazat uživatele",
"Backups restored successfully" : "Zálohy úspěšně obnoveny",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Language changed" : "Jazyk byl změněn",
"Invalid request" : "Neplatný požadavek",
"Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
@@ -37,12 +31,23 @@
"Enabled" : "Povoleno",
"Not enabled" : "Vypnuto",
"Recommended" : "Doporučeno",
+ "Group already exists." : "Skupina již existuje.",
+ "Unable to add group." : "Nelze přidat skupinu.",
+ "Unable to delete group." : "Nelze smazat skupinu.",
"Saved" : "Uloženo",
- "test email settings" : "otestovat nastavení e-mailu",
- "If you received this email, the settings seem to be correct." : "Pokud jste obdrželi tento e-mail, nastavení se zdají být v pořádku.",
- "A problem occurred while sending the email. Please revise your settings." : "Při odesílání e-mailu nastala chyba. Překontrolujte prosím svá nastavení.",
- "Email sent" : "E-mail odeslán",
- "You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních e-mailů musíte nejprve nastavit svou e-mailovou adresu.",
+ "test email settings" : "otestovat nastavení emailu",
+ "If you received this email, the settings seem to be correct." : "Pokud jste obdrželi tento email, nastavení se zdají být v pořádku.",
+ "A problem occurred while sending the email. Please revise your settings." : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení.",
+ "Email sent" : "Email odeslán",
+ "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 mail address" : "Neplatná emailová adresa",
+ "Unable to create user." : "Nelze vytvořit uživatele.",
+ "Your %s account was created" : "Účet %s byl vytvořen",
+ "Unable to delete user." : "Nelze smazat uživatele.",
+ "Forbidden" : "Zakázáno",
+ "Invalid user" : "Neplatný uživatel",
+ "Unable to change mail address" : "Nelze změnit emailovou adresu",
+ "Email saved" : "Email uložen",
"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",
"Sending..." : "Odesílání...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Musíte zadat platné uživatelské jméno",
"Error creating user" : "Chyba při vytváření užiatele",
"A valid password must be provided" : "Musíte zadat platné heslo",
- "Warning: Home directory for user \"{user}\" already exists" : "Varování: Osobní složka uživatele \"{user}\" již existuje.",
+ "A valid email must be provided" : "Musíte zadat platný email",
"__language_name__" : "Česky",
"Personal Info" : "Osobní informace",
"SSL root certificates" : "Kořenové certifikáty SSL",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Bezpečnostní upozornění",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Přistupujete na %s protokolem HTTP. Důrazně doporučujeme nakonfigurovat server pro použití HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
+ "Read-Only config enabled" : "Konfigurace pouze pro čtení",
+ "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." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.",
"Setup Warning" : "Upozornění nastavení",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.",
@@ -108,17 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Je použita databáze SQLite. Pro větší instalace doporučujeme toto změnit. Pro migraci na jiný typ databáze lze použít nástroj pro příkazový řádek: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Schází modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.",
- "Your PHP version is outdated" : "Vaše verze PHP je zastaralá",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vámi používaná verze PHP je zastaralá. Důrazně doporučujeme aktualizovat na verzi 5.3.8 nebo novější, protože starší verze obsahují chyby. Je možné, že tato instalace nebude fungovat správně.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP není nastavena na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Znaková sada PHP není nastavena na UTF-8. To může způsobit závažné problémy se jmény souborů se znaky neobsaženými v ASCII. Důrazně doporučujeme změnit hodnotu 'default_charset' v php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizace nefunguje",
"System locale can not be set to a one which supports UTF-8." : "Není možné nastavit znakovou sadu, která podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že se mohou vyskytnout problémy s určitými znaky v názvech souborů.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Důrazně doporučujeme nainstalovat do vašeho systém balíčky nutné pro podporu některé z následujících znakových sad: %s.",
- "URL generation in notification emails" : "Generování adresy URL v oznamovacích e-mailech",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwritewebroot\" (Doporučujeme: \"%s\")",
- "Connectivity Checks" : "Ověřování připojení",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.",
+ "URL generation in notification emails" : "Generování adresy URL v oznamovacích emailech",
+ "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\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwrite.cli.url\" (Je doporučena tato: \"%s\")",
+ "Configuration Checks" : "Ověření konfigurace",
"No problems found" : "Nebyly nalezeny žádné problémy",
"Please double check the <a href='%s'>installation guides</a>." : "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>.",
"Last cron was executed at %s." : "Poslední cron byl spuštěn v %s",
@@ -131,22 +135,25 @@
"Allow users to share via link" : "Povolit uživatelům sdílení pomocí odkazů",
"Enforce password protection" : "Vynutit ochranu heslem",
"Allow public uploads" : "Povolit veřejné nahrávání souborů",
+ "Allow users to send mail notification for shared files" : "Povolit uživatelům odesílat emailová upozornění pro sdílené soubory",
"Set default expiration date" : "Nastavit výchozí datum vypršení platnosti",
"Expire after " : "Vyprší po",
"days" : "dnech",
"Enforce expiration date" : "Vynutit datum vypršení",
"Allow resharing" : "Povolit znovu-sdílení",
"Restrict users to only share with users in their groups" : "Povolit sdílení pouze mezi uživateli v rámci skupiny",
- "Allow users to send mail notification for shared files" : "Povolit uživatelům odesílat e-mailová upozornění pro sdílené soubory",
+ "Allow users to send mail notification for shared files to other users" : "Povolit uživatelům odesílat emailová upozornění na sdílené soubory ostatním uživatelům",
"Exclude groups from sharing" : "Vyjmout skupiny ze sdílení",
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.",
"Enforce HTTPS" : "Vynutit HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vynutí připojování klientů k %s šifrovaným spojením.",
+ "Enforce HTTPS for subdomains" : "Vynutit HTTPS pro subdomény",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vynutí připojování klientů k %s a subdoménám šifrovaným spojením.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Připojte se k %s přes HTTPS pro povolení nebo zakázání vynucení SSL.",
"This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.",
"Send mode" : "Mód odesílání",
"From address" : "Adresa odesílatele",
- "mail" : "e-mail",
+ "mail" : "email",
"Authentication method" : "Metoda ověření",
"Authentication required" : "Vyžadováno ověření",
"Server address" : "Adresa serveru",
@@ -155,8 +162,8 @@
"SMTP Username" : "SMTP uživatelské jméno ",
"SMTP Password" : "SMTP heslo",
"Store credentials" : "Ukládat přihlašovací údaje",
- "Test email settings" : "Otestovat nastavení e-mailu",
- "Send email" : "Odeslat e-mail",
+ "Test email settings" : "Otestovat nastavení emailu",
+ "Send email" : "Odeslat email",
"Log level" : "Úroveň zaznamenávání",
"More" : "Více",
"Less" : "Méně",
@@ -169,15 +176,22 @@
"Documentation:" : "Dokumentace:",
"User Documentation" : "Uživatelská dokumentace",
"Admin Documentation" : "Dokumentace pro administrátory",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Tuto aplikaci nelze nainstalovat, protože nejsou splněny následující závislosti:",
"Update to %s" : "Aktualizovat na %s",
"Enable only for specific groups" : "Povolit pouze pro vybrané skupiny",
"Uninstall App" : "Odinstalovat aplikaci",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ahoj,<br><br>toto je oznámení o nově vytvořeném %s účtu.<br><br>Uživatelské jméno: %s<br>Přihlásit se dá zde: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Ať slouží!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámení o nově vytvořeném %s účtu.\n\nUživatelské jméno: %s\nPřihlásit se dá zde: %s\n",
"Administrator Documentation" : "Dokumentace správce",
"Online Documentation" : "Online dokumentace",
"Forum" : "Fórum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Placená podpora",
"Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů",
+ "Desktop client" : "Aplikace pro počítač",
+ "Android app" : "Aplikace pro Android",
+ "iOS app" : "iOS aplikace",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Chcete-li podpořit tento projekt\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">přidejte se k vývoji</a>\n⇥⇥nebo\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">šiřte osvětu</a>!",
"Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong> dostupných",
@@ -188,9 +202,9 @@
"New password" : "Nové heslo",
"Change password" : "Změnit heslo",
"Full Name" : "Celé jméno",
- "Email" : "E-mail",
- "Your email address" : "Vaše e-mailová adresa",
- "Fill in an email address to enable password recovery and receive notifications" : "Zadejte e-mailovou adresu pro umožnění obnovy zapomenutého hesla a pro přijímání upozornění",
+ "Email" : "Email",
+ "Your email address" : "Vaše emailová adresa",
+ "Fill in an email address to enable password recovery and receive notifications" : "Zadejte emailovou adresu pro umožnění obnovy zapomenutého hesla a pro přijímání upozornění",
"Profile picture" : "Profilový obrázek",
"Upload new" : "Nahrát nový",
"Select new from Files" : "Vyberte nový ze souborů",
@@ -214,11 +228,15 @@
"Delete Encryption Keys" : "Smazat šifrovací klíče",
"Show storage location" : "Zobrazit umístění úložiště",
"Show last log in" : "Zobrazit poslední přihlášení",
- "Login Name" : "Přihlašovací jméno",
+ "Show user backend" : "Zobrazit uživatelskou podpůrnou vrstvu",
+ "Send email to new user" : "Poslat email novému uživateli",
+ "Show email address" : "Zobrazit emailovou adresu",
+ "Username" : "Uživatelské jméno",
+ "E-Mail" : "Email",
"Create" : "Vytvořit",
"Admin Recovery Password" : "Heslo obnovy správce",
"Enter the recovery password in order to recover the users files during password change" : "Zadejte heslo obnovy pro obnovení souborů uživatele při změně hesla",
- "Search Users and Groups" : "Prohledat uživatele a skupiny",
+ "Search Users" : "Hledat uživatele",
"Add Group" : "Přidat skupinu",
"Group" : "Skupina",
"Everyone" : "Všichni",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Zvolte prosím kvótu pro úložiště (např. \"512 MB\" nebo \"12 GB\")",
"Unlimited" : "Neomezeně",
"Other" : "Jiný",
- "Username" : "Uživatelské jméno",
- "Group Admin for" : "Administrátor skupiny ",
+ "Group Admin for" : "Správce skupiny ",
"Quota" : "Kvóta",
"Storage Location" : "Umístění úložiště",
+ "User Backend" : "Uživatelská podpůrná vrstva",
"Last Login" : "Poslední přihlášení",
"change full name" : "změnit celé jméno",
"set new password" : "nastavit nové heslo",
+ "change email address" : "změnit emailovou adresu",
"Default" : "Výchozí"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/settings/l10n/cy_GB.js b/settings/l10n/cy_GB.js
index b51574b8130..41a1b01d085 100644
--- a/settings/l10n/cy_GB.js
+++ b/settings/l10n/cy_GB.js
@@ -18,8 +18,7 @@ OC.L10N.register(
"New password" : "Cyfrinair newydd",
"Email" : "E-bost",
"Cancel" : "Diddymu",
- "Login Name" : "Mewngofnodi",
- "Other" : "Arall",
- "Username" : "Enw defnyddiwr"
+ "Username" : "Enw defnyddiwr",
+ "Other" : "Arall"
},
"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;");
diff --git a/settings/l10n/cy_GB.json b/settings/l10n/cy_GB.json
index 67709cc704d..5b65f09abaa 100644
--- a/settings/l10n/cy_GB.json
+++ b/settings/l10n/cy_GB.json
@@ -16,8 +16,7 @@
"New password" : "Cyfrinair newydd",
"Email" : "E-bost",
"Cancel" : "Diddymu",
- "Login Name" : "Mewngofnodi",
- "Other" : "Arall",
- "Username" : "Enw defnyddiwr"
+ "Username" : "Enw defnyddiwr",
+ "Other" : "Arall"
},"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"
} \ No newline at end of file
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index efc3da5f9df..783fce3be7f 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Adgangsfejl",
"Your full name has been changed." : "Dit fulde navn er blevet ændret.",
"Unable to change full name" : "Ikke i stand til at ændre dit fulde navn",
- "Group already exists" : "Gruppen findes allerede",
- "Unable to add group" : "Gruppen kan ikke oprettes",
"Files decrypted successfully" : "Filer dekrypteret med succes",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dine filer kunne ikke dekrypteres. Gennemse din owncloud log eller spørg din administrator",
"Couldn't decrypt your files, check your password and try again" : "Dine filer kunne ikke dekrypteres. Check din adgangskode og forsøg igen",
"Encryption keys deleted permanently" : "Krypteringsnøgle slettet permanent",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke slette dine nøgler til kryptering permanent, tjek venligst din owncloud.log eller spørg din administrator",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
- "Email saved" : "E-mailadressen er gemt",
- "Invalid email" : "Ugyldig e-mailadresse",
- "Unable to delete group" : "Gruppen kan ikke slettes",
- "Unable to delete user" : "Bruger kan ikke slettes",
"Backups restored successfully" : "Genskabelsen af sikkerhedskopierne blev gennemført",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke genskabe din krypyterings nøgle, se logfilen owncloud.log eller spørg en administrator",
"Language changed" : "Sprog ændret",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Aktiveret",
"Not enabled" : "Slået fra",
"Recommended" : "Anbefalet",
+ "Group already exists." : "Gruppen findes allerede.",
+ "Unable to add group." : "Kan ikke tilføje gruppen.",
+ "Unable to delete group." : "Kan ikke slette gruppen.",
"Saved" : "Gemt",
"test email settings" : "test e-mailindstillinger",
"If you received this email, the settings seem to be correct." : "Hvis du har modtaget denne e-mail, så lader indstillinger til at være korrekte.",
"A problem occurred while sending the email. Please revise your settings." : "Der opstod en fejl under afsendelse af e-mailen. Gennemse venligst dine indstillinger.",
"Email sent" : "E-mail afsendt",
"You need to set your user email before being able to send test emails." : "Du skal angive din bruger-e-mail før der kan sendes test-e-mail.",
+ "Invalid mail address" : "Ugyldig mailadresse",
+ "Unable to create user." : "Kan ikke oprette brugeren.",
+ "Your %s account was created" : "Din %s-konto blev oprettet",
+ "Unable to delete user." : "Kan ikke slette brugeren.",
+ "Forbidden" : "Forbudt",
+ "Invalid user" : "Ugyldig bruger",
+ "Unable to change mail address" : "Kan ikke ændre mailadresse",
+ "Email saved" : "E-mailadressen er gemt",
"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?",
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"Sending..." : "Sender...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Et gyldigt brugernavn skal angives",
"Error creating user" : "Fejl ved oprettelse af bruger",
"A valid password must be provided" : "En gyldig adgangskode skal angives",
- "Warning: Home directory for user \"{user}\" already exists" : "Advarsel: Hjemmemappen for bruger \"{user}\" findes allerede",
+ "A valid email must be provided" : "Der skal angives en gyldig e-mail",
"__language_name__" : "Dansk",
"Personal Info" : "Personlige oplysninger",
"SSL root certificates" : "SSL-rodcertifikater",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Sikkerhedsadvarsel",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du tilgår %s via HTTP. Vi anbefaler at du konfigurerer din server til i stedet at kræve HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver så data mappen ikke længere er tilgængelig, eller at du flytter data mappen uden for webserverens dokument rod. ",
+ "Read-Only config enabled" : "Skrivebeskyttet konfig. slået til",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.",
"Setup Warning" : "Opsætnings Advarsel",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator",
@@ -110,17 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite er benyttet som database. Ved store installationer anbefaler vi at ændre dette. For at migrere til en anden database benyt 'occ db:convert-type' værktøjet i et kommandovindue.",
"Module 'fileinfo' missing" : "Module 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.",
- "Your PHP version is outdated" : "Din PHP-version er forældet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP-version er forældet. Vi anbefaler at du opgraderer til 5.3.8 eller nyere, fordi ældre versioner har kendte fejl. Det er derfor muligt at installationen ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsættet er ikke angivet til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsættet er ikke angivet til UTF-8. Denne kan føre til store problemer med tegn som ikke er af typen ASCII i filnavne. Vi anbefaler kraftigt at ændre værdien for 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Landestandard fungerer ikke",
"System locale can not be set to a one which supports UTF-8." : "Systemets locale kan ikke sættes til et der bruger UTF-8.",
"This means that there might be problems with certain characters in file names." : "Det betyder at der kan være problemer med visse tegn i filnavne.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler at du installerer den krævede pakke på dit system, for at understøtte følgende locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.",
"URL generation in notification emails" : "URL-oprettelse i e-mailnotifikationer.",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwritewebroot\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
- "Connectivity Checks" : "Forbindelsestjek",
+ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
+ "Configuration Checks" : "Konfigurationstjek",
"No problems found" : "Der blev ikke fundet problemer",
"Please double check the <a href='%s'>installation guides</a>." : "Dobbelttjek venligst <a href='%s'>installations vejledningerne</a>.",
"Last cron was executed at %s." : "Seneste 'cron' blev kørt %s.",
@@ -133,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Tillad brugere at dele via link",
"Enforce password protection" : "tving kodeords beskyttelse",
"Allow public uploads" : "Tillad offentlig upload",
+ "Allow users to send mail notification for shared files" : "Tillad brugere at sende mail underretninger for delte filer",
"Set default expiration date" : "Vælg standard udløbsdato",
"Expire after " : "Udløber efter",
"days" : "dage",
"Enforce expiration date" : "Påtving udløbsdato",
"Allow resharing" : "Tillad videredeling",
"Restrict users to only share with users in their groups" : "Begræns brugere til deling med brugere i deres gruppe",
- "Allow users to send mail notification for shared files" : "Tillad brugere at sende mail underretninger for delte filer",
+ "Allow users to send mail notification for shared files to other users" : "Tillader brugere at sende mailnotifikationer for delte filer til andre brugere",
"Exclude groups from sharing" : "Ekskluder grupper fra at dele",
"These groups will still be able to receive shares, but not to initiate them." : "Disse grupper vil stadig kunne modtage delefiler, dog ikke skabe dem.",
"Enforce HTTPS" : "Gennemtving HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Tving klienten til at forbinde til %s via en kryptetet forbindelse.",
+ "Enforce HTTPS for subdomains" : "Gennemtving HTTPS for subdomæner",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Tving klienterne til at tilslutte til %s og subdomæner via en krypteret forbindelse.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Forbind venligst til din %s via HTTPS for at aktivere eller deaktivere SSL tvang.",
"This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.",
"Send mode" : "Tilstand for afsendelse",
@@ -171,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Dokumentation:",
"User Documentation" : "Brugerdokumentation",
"Admin Documentation" : "Administrator Dokumentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Dette program kan ikke installeres, da følgende afhængigheder ikke imødekommes:",
"Update to %s" : "Opdatér til %s",
"Enable only for specific groups" : "Aktivér kun for udvalgte grupper",
"Uninstall App" : "Afinstallér app",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hejsa,<br><br>dette er blot en besked om, at du nu har en %s-konto.<br><br>Dit brugernavn: %s<br>Tilgå den: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Hej!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hejsa,\n\ndette er blot en besked om, at du nu har en %s-konto.\n\nDit brugernavn: %s\nTilgå den: %s\n\n",
"Administrator Documentation" : "Administrator Dokumentation",
"Online Documentation" : "Online dokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommerciel support",
"Get the apps to sync your files" : "Hent applikationerne for at synkronisere dine filer",
+ "Desktop client" : "Skrivebordsklient",
+ "Android app" : "Android-app",
+ "iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Hvis du vil støtte projektet\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">deltag i udviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spred budskabet</a>!",
"Show First Run Wizard again" : "Vis guiden for første kørsel igen.",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brugt <strong>%s</strong> af den tilgængelige <strong>%s</strong>",
@@ -216,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Slet Krypteringsnøgler",
"Show storage location" : "Vis placering af lageret",
"Show last log in" : "Vis seneste login",
- "Login Name" : "Loginnavn",
+ "Show user backend" : "Vis bruger-backend",
+ "Send email to new user" : "Send e-mail til ny bruger",
+ "Show email address" : "Vis e-mailadresse",
+ "Username" : "Brugernavn",
+ "E-Mail" : "E-mail",
"Create" : "Ny",
"Admin Recovery Password" : "Administrator gendannelse kodeord",
"Enter the recovery password in order to recover the users files during password change" : "Indtast et gendannelse kodeord for, at kunne gendanne brugerens filer ved ændring af kodeord",
- "Search Users and Groups" : "Søg efter brugere og grupper",
+ "Search Users" : "Søg efter brugere",
"Add Group" : "Tilføj Gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Indtast venligst lagerkvote (f.eks. \"512 MB\" eller \"12 GB\")",
"Unlimited" : "Ubegrænset",
"Other" : "Andet",
- "Username" : "Brugernavn",
"Group Admin for" : "Gruppeadministrator for",
"Quota" : "Kvote",
"Storage Location" : "Placering af lageret",
+ "User Backend" : "Bruger-backend",
"Last Login" : "Seneste login",
"change full name" : "ændre fulde navn",
"set new password" : "skift kodeord",
+ "change email address" : "skift e-mailadresse",
"Default" : "Standard"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 1d58d5c083d..e815e62932f 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -8,18 +8,12 @@
"Authentication error" : "Adgangsfejl",
"Your full name has been changed." : "Dit fulde navn er blevet ændret.",
"Unable to change full name" : "Ikke i stand til at ændre dit fulde navn",
- "Group already exists" : "Gruppen findes allerede",
- "Unable to add group" : "Gruppen kan ikke oprettes",
"Files decrypted successfully" : "Filer dekrypteret med succes",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dine filer kunne ikke dekrypteres. Gennemse din owncloud log eller spørg din administrator",
"Couldn't decrypt your files, check your password and try again" : "Dine filer kunne ikke dekrypteres. Check din adgangskode og forsøg igen",
"Encryption keys deleted permanently" : "Krypteringsnøgle slettet permanent",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke slette dine nøgler til kryptering permanent, tjek venligst din owncloud.log eller spørg din administrator",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
- "Email saved" : "E-mailadressen er gemt",
- "Invalid email" : "Ugyldig e-mailadresse",
- "Unable to delete group" : "Gruppen kan ikke slettes",
- "Unable to delete user" : "Bruger kan ikke slettes",
"Backups restored successfully" : "Genskabelsen af sikkerhedskopierne blev gennemført",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke genskabe din krypyterings nøgle, se logfilen owncloud.log eller spørg en administrator",
"Language changed" : "Sprog ændret",
@@ -37,12 +31,23 @@
"Enabled" : "Aktiveret",
"Not enabled" : "Slået fra",
"Recommended" : "Anbefalet",
+ "Group already exists." : "Gruppen findes allerede.",
+ "Unable to add group." : "Kan ikke tilføje gruppen.",
+ "Unable to delete group." : "Kan ikke slette gruppen.",
"Saved" : "Gemt",
"test email settings" : "test e-mailindstillinger",
"If you received this email, the settings seem to be correct." : "Hvis du har modtaget denne e-mail, så lader indstillinger til at være korrekte.",
"A problem occurred while sending the email. Please revise your settings." : "Der opstod en fejl under afsendelse af e-mailen. Gennemse venligst dine indstillinger.",
"Email sent" : "E-mail afsendt",
"You need to set your user email before being able to send test emails." : "Du skal angive din bruger-e-mail før der kan sendes test-e-mail.",
+ "Invalid mail address" : "Ugyldig mailadresse",
+ "Unable to create user." : "Kan ikke oprette brugeren.",
+ "Your %s account was created" : "Din %s-konto blev oprettet",
+ "Unable to delete user." : "Kan ikke slette brugeren.",
+ "Forbidden" : "Forbudt",
+ "Invalid user" : "Ugyldig bruger",
+ "Unable to change mail address" : "Kan ikke ændre mailadresse",
+ "Email saved" : "E-mailadressen er gemt",
"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?",
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"Sending..." : "Sender...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Et gyldigt brugernavn skal angives",
"Error creating user" : "Fejl ved oprettelse af bruger",
"A valid password must be provided" : "En gyldig adgangskode skal angives",
- "Warning: Home directory for user \"{user}\" already exists" : "Advarsel: Hjemmemappen for bruger \"{user}\" findes allerede",
+ "A valid email must be provided" : "Der skal angives en gyldig e-mail",
"__language_name__" : "Dansk",
"Personal Info" : "Personlige oplysninger",
"SSL root certificates" : "SSL-rodcertifikater",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Sikkerhedsadvarsel",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du tilgår %s via HTTP. Vi anbefaler at du konfigurerer din server til i stedet at kræve HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver så data mappen ikke længere er tilgængelig, eller at du flytter data mappen uden for webserverens dokument rod. ",
+ "Read-Only config enabled" : "Skrivebeskyttet konfig. slået til",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.",
"Setup Warning" : "Opsætnings Advarsel",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator",
@@ -108,17 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite er benyttet som database. Ved store installationer anbefaler vi at ændre dette. For at migrere til en anden database benyt 'occ db:convert-type' værktøjet i et kommandovindue.",
"Module 'fileinfo' missing" : "Module 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.",
- "Your PHP version is outdated" : "Din PHP-version er forældet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP-version er forældet. Vi anbefaler at du opgraderer til 5.3.8 eller nyere, fordi ældre versioner har kendte fejl. Det er derfor muligt at installationen ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsættet er ikke angivet til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsættet er ikke angivet til UTF-8. Denne kan føre til store problemer med tegn som ikke er af typen ASCII i filnavne. Vi anbefaler kraftigt at ændre værdien for 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Landestandard fungerer ikke",
"System locale can not be set to a one which supports UTF-8." : "Systemets locale kan ikke sættes til et der bruger UTF-8.",
"This means that there might be problems with certain characters in file names." : "Det betyder at der kan være problemer med visse tegn i filnavne.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler at du installerer den krævede pakke på dit system, for at understøtte følgende locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.",
"URL generation in notification emails" : "URL-oprettelse i e-mailnotifikationer.",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwritewebroot\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
- "Connectivity Checks" : "Forbindelsestjek",
+ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
+ "Configuration Checks" : "Konfigurationstjek",
"No problems found" : "Der blev ikke fundet problemer",
"Please double check the <a href='%s'>installation guides</a>." : "Dobbelttjek venligst <a href='%s'>installations vejledningerne</a>.",
"Last cron was executed at %s." : "Seneste 'cron' blev kørt %s.",
@@ -131,17 +135,20 @@
"Allow users to share via link" : "Tillad brugere at dele via link",
"Enforce password protection" : "tving kodeords beskyttelse",
"Allow public uploads" : "Tillad offentlig upload",
+ "Allow users to send mail notification for shared files" : "Tillad brugere at sende mail underretninger for delte filer",
"Set default expiration date" : "Vælg standard udløbsdato",
"Expire after " : "Udløber efter",
"days" : "dage",
"Enforce expiration date" : "Påtving udløbsdato",
"Allow resharing" : "Tillad videredeling",
"Restrict users to only share with users in their groups" : "Begræns brugere til deling med brugere i deres gruppe",
- "Allow users to send mail notification for shared files" : "Tillad brugere at sende mail underretninger for delte filer",
+ "Allow users to send mail notification for shared files to other users" : "Tillader brugere at sende mailnotifikationer for delte filer til andre brugere",
"Exclude groups from sharing" : "Ekskluder grupper fra at dele",
"These groups will still be able to receive shares, but not to initiate them." : "Disse grupper vil stadig kunne modtage delefiler, dog ikke skabe dem.",
"Enforce HTTPS" : "Gennemtving HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Tving klienten til at forbinde til %s via en kryptetet forbindelse.",
+ "Enforce HTTPS for subdomains" : "Gennemtving HTTPS for subdomæner",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Tving klienterne til at tilslutte til %s og subdomæner via en krypteret forbindelse.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Forbind venligst til din %s via HTTPS for at aktivere eller deaktivere SSL tvang.",
"This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.",
"Send mode" : "Tilstand for afsendelse",
@@ -169,15 +176,22 @@
"Documentation:" : "Dokumentation:",
"User Documentation" : "Brugerdokumentation",
"Admin Documentation" : "Administrator Dokumentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Dette program kan ikke installeres, da følgende afhængigheder ikke imødekommes:",
"Update to %s" : "Opdatér til %s",
"Enable only for specific groups" : "Aktivér kun for udvalgte grupper",
"Uninstall App" : "Afinstallér app",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hejsa,<br><br>dette er blot en besked om, at du nu har en %s-konto.<br><br>Dit brugernavn: %s<br>Tilgå den: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Hej!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hejsa,\n\ndette er blot en besked om, at du nu har en %s-konto.\n\nDit brugernavn: %s\nTilgå den: %s\n\n",
"Administrator Documentation" : "Administrator Dokumentation",
"Online Documentation" : "Online dokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommerciel support",
"Get the apps to sync your files" : "Hent applikationerne for at synkronisere dine filer",
+ "Desktop client" : "Skrivebordsklient",
+ "Android app" : "Android-app",
+ "iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Hvis du vil støtte projektet\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">deltag i udviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spred budskabet</a>!",
"Show First Run Wizard again" : "Vis guiden for første kørsel igen.",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brugt <strong>%s</strong> af den tilgængelige <strong>%s</strong>",
@@ -214,11 +228,15 @@
"Delete Encryption Keys" : "Slet Krypteringsnøgler",
"Show storage location" : "Vis placering af lageret",
"Show last log in" : "Vis seneste login",
- "Login Name" : "Loginnavn",
+ "Show user backend" : "Vis bruger-backend",
+ "Send email to new user" : "Send e-mail til ny bruger",
+ "Show email address" : "Vis e-mailadresse",
+ "Username" : "Brugernavn",
+ "E-Mail" : "E-mail",
"Create" : "Ny",
"Admin Recovery Password" : "Administrator gendannelse kodeord",
"Enter the recovery password in order to recover the users files during password change" : "Indtast et gendannelse kodeord for, at kunne gendanne brugerens filer ved ændring af kodeord",
- "Search Users and Groups" : "Søg efter brugere og grupper",
+ "Search Users" : "Søg efter brugere",
"Add Group" : "Tilføj Gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Indtast venligst lagerkvote (f.eks. \"512 MB\" eller \"12 GB\")",
"Unlimited" : "Ubegrænset",
"Other" : "Andet",
- "Username" : "Brugernavn",
"Group Admin for" : "Gruppeadministrator for",
"Quota" : "Kvote",
"Storage Location" : "Placering af lageret",
+ "User Backend" : "Bruger-backend",
"Last Login" : "Seneste login",
"change full name" : "ændre fulde navn",
"set new password" : "skift kodeord",
+ "change email address" : "skift e-mailadresse",
"Default" : "Standard"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index c990e8fb86a..0d5d332c8e6 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Fehler bei der Anmeldung",
"Your full name has been changed." : "Dein vollständiger Name ist geändert worden.",
"Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
- "Group already exists" : "Gruppe existiert bereits",
- "Unable to add group" : "Gruppe konnte nicht angelegt werden",
"Files decrypted successfully" : "Dateien erfolgreich entschlüsselt",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dateien konnten nicht entschlüsselt werden, prüfe bitte Dein owncloud.log oder frage Deinen Administrator",
"Couldn't decrypt your files, check your password and try again" : "Dateien konnten nicht entschlüsselt werden, bitte prüfe Dein Passwort und versuche es erneut.",
"Encryption keys deleted permanently" : "Verschlüsselungsschlüssel dauerhaft gelöscht",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht dauerhaft gelöscht werden, prüfe bitte Dein owncloud.log oder frage Deinen Administrator",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Email saved" : "E-Mail Adresse gespeichert",
- "Invalid email" : "Ungültige E-Mail Adresse",
- "Unable to delete group" : "Gruppe konnte nicht gelöscht werden",
- "Unable to delete user" : "Benutzer konnte nicht gelöscht werden",
"Backups restored successfully" : "Backups erfolgreich wiederhergestellt",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht wiederhergestellt werden, prüfe bitte Dein owncloud.log oder frage Deinen Administrator",
"Language changed" : "Sprache geändert",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
"Recommended" : "Empfohlen",
+ "Group already exists." : "Gruppe existiert bereits.",
+ "Unable to add group." : "Gruppe konnte nicht angelegt werden.",
+ "Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
"If you received this email, the settings seem to be correct." : "Wenn Sie diese E-Mail erhalten haben, sind die Einstellungen korrekt.",
"A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfe deine Einstellungen.",
"Email sent" : "E-Mail wurde verschickt",
"You need to set your user email before being able to send test emails." : "Du musst zunächst deine Benutzer-E-Mail-Adresse setzen, bevor du Test-E-Mail verschicken kannst.",
+ "Invalid mail address" : "Ungültige E-Mail Adresse",
+ "Unable to create user." : "Benutzer konnte nicht erstellt werden.",
+ "Your %s account was created" : "Dein %s Konto wurde erstellt",
+ "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Nutzer",
+ "Unable to change mail address" : "E-Mail Adresse konnte nicht geändert werden",
+ "Email saved" : "E-Mail Adresse gespeichert",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist Du dir wirklich sicher, dass Du \"{domain}\" als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
"Sending..." : "Sende...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"Error creating user" : "Beim Anlegen des Benutzers ist ein Fehler aufgetreten",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
- "Warning: Home directory for user \"{user}\" already exists" : "Warnung: Das Benutzerverzeichnis für den Benutzer \"{user}\" existiert bereits",
+ "A valid email must be provided" : "Es muss eine gültige E-Mail Adresse angegeben werden",
"__language_name__" : "Deutsch (Persönlich)",
"Personal Info" : "Persönliche Informationen",
"SSL root certificates" : "SSL-Root-Zertifikate",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Sicherheitswarnung",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du greifst auf %s via HTTP zu. Wir empfehlen Dir dringend, Deinen Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Dein Datenverzeichnis und deine Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten dir dringend, dass du deinen Webserver dahingehend konfigurierst, dass dein Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder du verschiebst das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "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." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -110,17 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss dies geändert werden. Zur Migration in eine andere Datenbank muss der Komandozeilenbefehl: 'occ db:convert-type' verwendet werden.",
"Module 'fileinfo' missing" : "Modul 'fileinfo' fehlt ",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.",
- "Your PHP version is outdated" : "Deine PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Deine PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt. Dies kann Fehler mit Nicht-ASCII Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von 'default_charset' in der php.ini auf 'UTF-8' zu ändern.",
"Locale not working" : "Ländereinstellung funktioniert nicht",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dies bedeutet, dass Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "URL-Generierung in Mail-Benachrichtungen",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Wenn sich Deine Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setze bitte die \"overwritewebroot\"-Option in Deiner config.php auf das Web-Wurzelverzeichnis Deiner Installation (Vorschlag: \"%s\").",
- "Connectivity Checks" : "Verbindungsüberprüfungen",
+ "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\")" : "Wenn sich Deine Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setze bitte die \"overwrite.cli.url\"-Option in Deiner config.php auf das Web-Wurzelverzeichnis Deiner Installation (Vorschlag: \"%s\").",
+ "Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
"Please double check the <a href='%s'>installation guides</a>." : "Bitte prüfe die <a href='%s'>Installationsanleitungen</a>.",
"Last cron was executed at %s." : "Letzter Cron wurde um %s ausgeführt.",
@@ -133,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Erlaube Nutzern, mithilfe von Links zu teilen",
"Enforce password protection" : "Passwortschutz erzwingen",
"Allow public uploads" : "Öffentliches Hochladen erlauben",
+ "Allow users to send mail notification for shared files" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Set default expiration date" : "Setze Ablaufdatum",
"Expire after " : "Ablauf nach ",
"days" : "Tagen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Allow resharing" : "Erlaubt erneutes Teilen",
"Restrict users to only share with users in their groups" : "Erlaube Nutzern nur das Teilen in ihrer Gruppe",
- "Allow users to send mail notification for shared files" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien zu senden",
+ "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden",
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Enforce HTTPS" : "Erzwinge HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Zwingt die clientseitigen Anwendungen, verschlüsselte Verbindungen zu %s herzustellen.",
+ "Enforce HTTPS for subdomains" : "HTTPS für Subdomains erzwingen",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Zwingt die Clients, sich über eine verschlüsselte Verbindung zu %s und Subdomains zu verbinden.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Bitte verbinde dich zu deinem %s über HTTPS um die SSL-Erzwingung zu aktivieren oder zu deaktivieren.",
"This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.",
"Send mode" : "Sende-Modus",
@@ -171,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Dokumentation:",
"User Documentation" : "Dokumentation für Benutzer",
"Admin Documentation" : "Admin-Dokumentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Die App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Update to %s" : "Aktualisierung auf %s",
"Enable only for specific groups" : "Nur für spezifizierte Gruppen aktivieren",
"Uninstall App" : "App deinstallieren",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>wir möchten Dich nur wissen lassen, dass Du jetzt ein %s - Konto besitzt.<br><br>Dein Nutzername: %s<br>Öffne es: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Hallo!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwir möchten Dich nur wissen lassen, dass Du jetzt ein %s - Konto besitzt\n\nDein Nutzername: %s\nÖffne es: %s\n",
"Administrator Documentation" : "Dokumentation für Administratoren",
"Online Documentation" : "Online-Dokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommerzieller Support",
"Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter",
+ "Desktop client" : "Desktop-Client",
+ "Android app" : "Android-App",
+ "iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">nimm an der Entwicklung teil</a>\n\t\toder\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">erreiche die Welt</a>!",
"Show First Run Wizard again" : "Erstinstallation erneut durchführen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s</strong>",
@@ -216,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Verschlüsselungsschlüssel löschen",
"Show storage location" : "Speicherort anzeigen",
"Show last log in" : "Letzte Anmeldung anzeigen",
- "Login Name" : "Loginname",
+ "Show user backend" : "Nutzer-Backend anzeigen",
+ "Send email to new user" : "E-Mail an neuen Nutzer senden",
+ "Show email address" : "E-Mail Adresse anzeigen",
+ "Username" : "Benutzername",
+ "E-Mail" : "E-Mail",
"Create" : "Anlegen",
"Admin Recovery Password" : "Admin-Wiederherstellungspasswort",
"Enter the recovery password in order to recover the users files during password change" : "Gib das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Nutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: \"512 MB\" oder \"12 GB\")",
"Unlimited" : "Unbegrenzt",
"Other" : "Andere",
- "Username" : "Benutzername",
"Group Admin for" : "Gruppenadministrator für",
"Quota" : "Quota",
"Storage Location" : "Speicherort",
+ "User Backend" : "Nutzer-Backend",
"Last Login" : "Letzte Anmeldung",
"change full name" : "Vollständigen Namen ändern",
"set new password" : "Neues Passwort setzen",
+ "change email address" : "E-Mail Adresse ändern",
"Default" : "Standard"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 92f88e307c8..3a83e86d152 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -8,18 +8,12 @@
"Authentication error" : "Fehler bei der Anmeldung",
"Your full name has been changed." : "Dein vollständiger Name ist geändert worden.",
"Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
- "Group already exists" : "Gruppe existiert bereits",
- "Unable to add group" : "Gruppe konnte nicht angelegt werden",
"Files decrypted successfully" : "Dateien erfolgreich entschlüsselt",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dateien konnten nicht entschlüsselt werden, prüfe bitte Dein owncloud.log oder frage Deinen Administrator",
"Couldn't decrypt your files, check your password and try again" : "Dateien konnten nicht entschlüsselt werden, bitte prüfe Dein Passwort und versuche es erneut.",
"Encryption keys deleted permanently" : "Verschlüsselungsschlüssel dauerhaft gelöscht",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht dauerhaft gelöscht werden, prüfe bitte Dein owncloud.log oder frage Deinen Administrator",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Email saved" : "E-Mail Adresse gespeichert",
- "Invalid email" : "Ungültige E-Mail Adresse",
- "Unable to delete group" : "Gruppe konnte nicht gelöscht werden",
- "Unable to delete user" : "Benutzer konnte nicht gelöscht werden",
"Backups restored successfully" : "Backups erfolgreich wiederhergestellt",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht wiederhergestellt werden, prüfe bitte Dein owncloud.log oder frage Deinen Administrator",
"Language changed" : "Sprache geändert",
@@ -37,12 +31,23 @@
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
"Recommended" : "Empfohlen",
+ "Group already exists." : "Gruppe existiert bereits.",
+ "Unable to add group." : "Gruppe konnte nicht angelegt werden.",
+ "Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
"If you received this email, the settings seem to be correct." : "Wenn Sie diese E-Mail erhalten haben, sind die Einstellungen korrekt.",
"A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfe deine Einstellungen.",
"Email sent" : "E-Mail wurde verschickt",
"You need to set your user email before being able to send test emails." : "Du musst zunächst deine Benutzer-E-Mail-Adresse setzen, bevor du Test-E-Mail verschicken kannst.",
+ "Invalid mail address" : "Ungültige E-Mail Adresse",
+ "Unable to create user." : "Benutzer konnte nicht erstellt werden.",
+ "Your %s account was created" : "Dein %s Konto wurde erstellt",
+ "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Nutzer",
+ "Unable to change mail address" : "E-Mail Adresse konnte nicht geändert werden",
+ "Email saved" : "E-Mail Adresse gespeichert",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist Du dir wirklich sicher, dass Du \"{domain}\" als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
"Sending..." : "Sende...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"Error creating user" : "Beim Anlegen des Benutzers ist ein Fehler aufgetreten",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
- "Warning: Home directory for user \"{user}\" already exists" : "Warnung: Das Benutzerverzeichnis für den Benutzer \"{user}\" existiert bereits",
+ "A valid email must be provided" : "Es muss eine gültige E-Mail Adresse angegeben werden",
"__language_name__" : "Deutsch (Persönlich)",
"Personal Info" : "Persönliche Informationen",
"SSL root certificates" : "SSL-Root-Zertifikate",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Sicherheitswarnung",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du greifst auf %s via HTTP zu. Wir empfehlen Dir dringend, Deinen Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Dein Datenverzeichnis und deine Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten dir dringend, dass du deinen Webserver dahingehend konfigurierst, dass dein Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder du verschiebst das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "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." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -108,17 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss dies geändert werden. Zur Migration in eine andere Datenbank muss der Komandozeilenbefehl: 'occ db:convert-type' verwendet werden.",
"Module 'fileinfo' missing" : "Modul 'fileinfo' fehlt ",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.",
- "Your PHP version is outdated" : "Deine PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Deine PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt. Dies kann Fehler mit Nicht-ASCII Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von 'default_charset' in der php.ini auf 'UTF-8' zu ändern.",
"Locale not working" : "Ländereinstellung funktioniert nicht",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dies bedeutet, dass Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "URL-Generierung in Mail-Benachrichtungen",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Wenn sich Deine Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setze bitte die \"overwritewebroot\"-Option in Deiner config.php auf das Web-Wurzelverzeichnis Deiner Installation (Vorschlag: \"%s\").",
- "Connectivity Checks" : "Verbindungsüberprüfungen",
+ "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\")" : "Wenn sich Deine Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setze bitte die \"overwrite.cli.url\"-Option in Deiner config.php auf das Web-Wurzelverzeichnis Deiner Installation (Vorschlag: \"%s\").",
+ "Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
"Please double check the <a href='%s'>installation guides</a>." : "Bitte prüfe die <a href='%s'>Installationsanleitungen</a>.",
"Last cron was executed at %s." : "Letzter Cron wurde um %s ausgeführt.",
@@ -131,17 +135,20 @@
"Allow users to share via link" : "Erlaube Nutzern, mithilfe von Links zu teilen",
"Enforce password protection" : "Passwortschutz erzwingen",
"Allow public uploads" : "Öffentliches Hochladen erlauben",
+ "Allow users to send mail notification for shared files" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Set default expiration date" : "Setze Ablaufdatum",
"Expire after " : "Ablauf nach ",
"days" : "Tagen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Allow resharing" : "Erlaubt erneutes Teilen",
"Restrict users to only share with users in their groups" : "Erlaube Nutzern nur das Teilen in ihrer Gruppe",
- "Allow users to send mail notification for shared files" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien zu senden",
+ "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden",
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Enforce HTTPS" : "Erzwinge HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Zwingt die clientseitigen Anwendungen, verschlüsselte Verbindungen zu %s herzustellen.",
+ "Enforce HTTPS for subdomains" : "HTTPS für Subdomains erzwingen",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Zwingt die Clients, sich über eine verschlüsselte Verbindung zu %s und Subdomains zu verbinden.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Bitte verbinde dich zu deinem %s über HTTPS um die SSL-Erzwingung zu aktivieren oder zu deaktivieren.",
"This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.",
"Send mode" : "Sende-Modus",
@@ -169,15 +176,22 @@
"Documentation:" : "Dokumentation:",
"User Documentation" : "Dokumentation für Benutzer",
"Admin Documentation" : "Admin-Dokumentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Die App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Update to %s" : "Aktualisierung auf %s",
"Enable only for specific groups" : "Nur für spezifizierte Gruppen aktivieren",
"Uninstall App" : "App deinstallieren",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>wir möchten Dich nur wissen lassen, dass Du jetzt ein %s - Konto besitzt.<br><br>Dein Nutzername: %s<br>Öffne es: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Hallo!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwir möchten Dich nur wissen lassen, dass Du jetzt ein %s - Konto besitzt\n\nDein Nutzername: %s\nÖffne es: %s\n",
"Administrator Documentation" : "Dokumentation für Administratoren",
"Online Documentation" : "Online-Dokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommerzieller Support",
"Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter",
+ "Desktop client" : "Desktop-Client",
+ "Android app" : "Android-App",
+ "iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">nimm an der Entwicklung teil</a>\n\t\toder\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">erreiche die Welt</a>!",
"Show First Run Wizard again" : "Erstinstallation erneut durchführen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s</strong>",
@@ -214,11 +228,15 @@
"Delete Encryption Keys" : "Verschlüsselungsschlüssel löschen",
"Show storage location" : "Speicherort anzeigen",
"Show last log in" : "Letzte Anmeldung anzeigen",
- "Login Name" : "Loginname",
+ "Show user backend" : "Nutzer-Backend anzeigen",
+ "Send email to new user" : "E-Mail an neuen Nutzer senden",
+ "Show email address" : "E-Mail Adresse anzeigen",
+ "Username" : "Benutzername",
+ "E-Mail" : "E-Mail",
"Create" : "Anlegen",
"Admin Recovery Password" : "Admin-Wiederherstellungspasswort",
"Enter the recovery password in order to recover the users files during password change" : "Gib das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Nutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: \"512 MB\" oder \"12 GB\")",
"Unlimited" : "Unbegrenzt",
"Other" : "Andere",
- "Username" : "Benutzername",
"Group Admin for" : "Gruppenadministrator für",
"Quota" : "Quota",
"Storage Location" : "Speicherort",
+ "User Backend" : "Nutzer-Backend",
"Last Login" : "Letzte Anmeldung",
"change full name" : "Vollständigen Namen ändern",
"set new password" : "Neues Passwort setzen",
+ "change email address" : "E-Mail Adresse ändern",
"Default" : "Standard"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 442dae8edce..dd5503c6cd2 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Authentifizierungs-Fehler",
"Your full name has been changed." : "Ihr vollständiger Name ist geändert worden.",
"Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
- "Group already exists" : "Die Gruppe existiert bereits",
- "Unable to add group" : "Die Gruppe konnte nicht angelegt werden",
"Files decrypted successfully" : "Dateien erfolgreich entschlüsselt",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dateien konnten nicht entschlüsselt werden, prüfen Sie bitte Ihre owncloud.log oder fragen Sie Ihren Administrator",
"Couldn't decrypt your files, check your password and try again" : "Dateien konnten nicht entschlüsselt werden, bitte prüfen Sie Ihr Passwort und versuchen Sie es erneut.",
"Encryption keys deleted permanently" : "Verschlüsselungsschlüssel dauerhaft gelöscht",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht dauerhaft gelöscht werden, prüfen Sie bitte Ihre owncloud.log oder frage Deinen Administrator",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Email saved" : "E-Mail-Adresse gespeichert",
- "Invalid email" : "Ungültige E-Mail-Adresse",
- "Unable to delete group" : "Die Gruppe konnte nicht gelöscht werden",
- "Unable to delete user" : "Der Benutzer konnte nicht gelöscht werden",
"Backups restored successfully" : "Sicherungen erfolgreich wiederhergestellt",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht wiederhergestellt werden, prüfen Sie bitte Ihre owncloud.log oder fragen Sie Ihren Administrator",
"Language changed" : "Sprache geändert",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
"Recommended" : "Empfohlen",
+ "Group already exists." : "Gruppe existiert bereits.",
+ "Unable to add group." : "Gruppe konnte nicht angelegt werden.",
+ "Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
"If you received this email, the settings seem to be correct." : "Wenn Sie diese E-Mail erhalten haben, scheinen die Einstellungen richtig zu sein.",
"A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfen Sie Ihre Einstellungen.",
"Email sent" : "E-Mail gesendet",
"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 mail address" : "Ungültige E-Mail Adresse",
+ "Unable to create user." : "Benutzer konnte nicht erstellt werden.",
+ "Your %s account was created" : "Ihr %s Konto wurde erstellt",
+ "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Nutzer",
+ "Unable to change mail address" : "E-Mail Adresse konnte nicht geändert werden",
+ "Email saved" : "E-Mail-Adresse gespeichert",
"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",
"Sending..." : "Wird gesendet …",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"Error creating user" : "Beim Erstellen des Benutzers ist ein Fehler aufgetreten",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
- "Warning: Home directory for user \"{user}\" already exists" : "Warnung: Das Benutzerverzeichnis für den Benutzer \"{user}\" existiert bereits",
+ "A valid email must be provided" : "Es muss eine gültige E-Mail Adresse angegeben werden",
"__language_name__" : "Deutsch (Förmlich: Sie)",
"Personal Info" : "Persönliche Informationen",
"SSL root certificates" : "SSL-Root-Zertifikate",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Sicherheitshinweis",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sie greifen auf %s via HTTP zu. Wir empfehlen Ihnen dringend, Ihren Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ihr Datenverzeichnis und Ihre Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis außerhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "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." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -110,17 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss das geändert werden. Zur Migration in eine andere Datenbank muss in der Befehlszeile »occ db:convert-type« verwendet werden.",
"Module 'fileinfo' missing" : "Das Modul 'fileinfo' fehlt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.",
- "Your PHP version is outdated" : "Ihre PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ihre PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt. Das kann Fehler mit Nicht-ASCII-Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von »default_charset« in der php.ini auf »UTF-8« zu ändern.",
"Locale not working" : "Die Lokalisierung funktioniert nicht",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dieses bedeutet, dass es Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "Adresserstellung in E-Mail-Benachrichtungen",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Wenn sich Ihre Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der Adresserstellung kommen. Um dieses zu verhindern, stellen Sie bitte die »overwritewebroot«-Option in Ihrer config.php auf das Internetwurzelverzeichnis Ihrer Installation (Vorschlag: »%s«).",
- "Connectivity Checks" : "Verbindungsüberprüfungen",
+ "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\")" : "Wenn sich Ihre Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setzen Sie bitte die \"overwrite.cli.url\"-Option in Ihrer config.php auf das Web-Wurzelverzeichnis Ihrer Installation (Vorschlag: \"%s\").",
+ "Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
"Please double check the <a href='%s'>installation guides</a>." : "Bitte prüfen Sie die <a href='%s'>Installationsanleitungen</a>.",
"Last cron was executed at %s." : "Letzter Cron wurde um %s ausgeführt.",
@@ -133,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Benutzern erlauben, über Links Inhalte freizugeben",
"Enforce password protection" : "Passwortschutz erzwingen",
"Allow public uploads" : "Öffentliches Hochladen erlauben",
+ "Allow users to send mail notification for shared files" : "Benutzern erlauben E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Set default expiration date" : "Standardablaufdatum einstellen",
"Expire after " : "Ablauf nach ",
"days" : "Tagen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Allow resharing" : "Erlaube Weiterverteilen",
"Restrict users to only share with users in their groups" : "Nutzer nur auf das Teilen in ihren Gruppen beschränken",
- "Allow users to send mail notification for shared files" : "Benutzern erlauben E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
+ "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden",
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Enforce HTTPS" : "HTTPS erzwingen",
"Forces the clients to connect to %s via an encrypted connection." : "Zwingt die clientseitigen Anwendungen, verschlüsselte Verbindungen zu %s herzustellen.",
+ "Enforce HTTPS for subdomains" : "HTTPS für Subdomains erzwingen",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Zwingt die Clients, sich über eine verschlüsselte Verbindung zu %s und Subdomains zu verbinden.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Bitte verbinden Sie sich zu Ihrem %s über HTTPS um die SSL-Erzwingung zu aktivieren oder zu deaktivieren.",
"This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.",
"Send mode" : "Sendemodus",
@@ -171,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Dokumentation:",
"User Documentation" : "Dokumentation für Benutzer",
"Admin Documentation" : "Dokumentation für Administratoren",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Diese App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Update to %s" : "Aktualisierung auf %s",
"Enable only for specific groups" : "Nur für bestimmte Gruppen aktivieren",
"Uninstall App" : "App deinstallieren",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>wir möchten Sie nur wissen lassen, dass Sie jetzt ein %s - Konto besitzen.<br><br>Ihr Nutzername: %s<br>Öffnen Sie es: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Noch einen schönen Tag!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwir möchten Sie nur wissen lassen, dass Sie jetzt ein %s - Konto besitzen\n\nIhr Nutzername: %s\nÖffnen Sie es: %s\n",
"Administrator Documentation" : "Dokumentation für Administratoren",
"Online Documentation" : "Online-Dokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommerzieller Support",
"Get the apps to sync your files" : "Installieren Sie die Anwendungen, um Ihre Dateien zu synchronisieren",
+ "Desktop client" : "Desktop-Client",
+ "Android app" : "Android-App",
+ "iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen wollen,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">können Sie an der Entwicklung teilnehmen</a>\n\t\toder\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">anderen von diesem Projekt berichten</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
@@ -216,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Verschlüsselungsschlüssel löschen",
"Show storage location" : "Speicherort anzeigen",
"Show last log in" : "Letzte Anmeldung anzeigen",
- "Login Name" : "Loginname",
+ "Show user backend" : "Nutzer-Backend anzeigen",
+ "Send email to new user" : "E-Mail an neuen Nutzer senden",
+ "Show email address" : "E-Mail Adresse anzeigen",
+ "Username" : "Benutzername",
+ "E-Mail" : "E-Mail",
"Create" : "Erstellen",
"Admin Recovery Password" : "Admin-Passwort-Wiederherstellung",
"Enter the recovery password in order to recover the users files during password change" : "Geben Sie das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Benutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: „512 MB“ oder „12 GB“)",
"Unlimited" : "Unbegrenzt",
"Other" : "Andere",
- "Username" : "Benutzername",
"Group Admin for" : "Gruppenadministrator für",
"Quota" : "Kontingent",
"Storage Location" : "Speicherort",
+ "User Backend" : "Nutzer-Backend",
"Last Login" : "Letzte Anmeldung",
"change full name" : "Vollständigen Namen ändern",
"set new password" : "Neues Passwort setzen",
+ "change email address" : "E-Mail Adresse ändern",
"Default" : "Standard"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index b9a4eee7804..9788cadeb65 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -8,18 +8,12 @@
"Authentication error" : "Authentifizierungs-Fehler",
"Your full name has been changed." : "Ihr vollständiger Name ist geändert worden.",
"Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
- "Group already exists" : "Die Gruppe existiert bereits",
- "Unable to add group" : "Die Gruppe konnte nicht angelegt werden",
"Files decrypted successfully" : "Dateien erfolgreich entschlüsselt",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dateien konnten nicht entschlüsselt werden, prüfen Sie bitte Ihre owncloud.log oder fragen Sie Ihren Administrator",
"Couldn't decrypt your files, check your password and try again" : "Dateien konnten nicht entschlüsselt werden, bitte prüfen Sie Ihr Passwort und versuchen Sie es erneut.",
"Encryption keys deleted permanently" : "Verschlüsselungsschlüssel dauerhaft gelöscht",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht dauerhaft gelöscht werden, prüfen Sie bitte Ihre owncloud.log oder frage Deinen Administrator",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Email saved" : "E-Mail-Adresse gespeichert",
- "Invalid email" : "Ungültige E-Mail-Adresse",
- "Unable to delete group" : "Die Gruppe konnte nicht gelöscht werden",
- "Unable to delete user" : "Der Benutzer konnte nicht gelöscht werden",
"Backups restored successfully" : "Sicherungen erfolgreich wiederhergestellt",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Verschlüsselungsschlüssel konnten nicht wiederhergestellt werden, prüfen Sie bitte Ihre owncloud.log oder fragen Sie Ihren Administrator",
"Language changed" : "Sprache geändert",
@@ -37,12 +31,23 @@
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
"Recommended" : "Empfohlen",
+ "Group already exists." : "Gruppe existiert bereits.",
+ "Unable to add group." : "Gruppe konnte nicht angelegt werden.",
+ "Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
"If you received this email, the settings seem to be correct." : "Wenn Sie diese E-Mail erhalten haben, scheinen die Einstellungen richtig zu sein.",
"A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfen Sie Ihre Einstellungen.",
"Email sent" : "E-Mail gesendet",
"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 mail address" : "Ungültige E-Mail Adresse",
+ "Unable to create user." : "Benutzer konnte nicht erstellt werden.",
+ "Your %s account was created" : "Ihr %s Konto wurde erstellt",
+ "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Nutzer",
+ "Unable to change mail address" : "E-Mail Adresse konnte nicht geändert werden",
+ "Email saved" : "E-Mail-Adresse gespeichert",
"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",
"Sending..." : "Wird gesendet …",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"Error creating user" : "Beim Erstellen des Benutzers ist ein Fehler aufgetreten",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
- "Warning: Home directory for user \"{user}\" already exists" : "Warnung: Das Benutzerverzeichnis für den Benutzer \"{user}\" existiert bereits",
+ "A valid email must be provided" : "Es muss eine gültige E-Mail Adresse angegeben werden",
"__language_name__" : "Deutsch (Förmlich: Sie)",
"Personal Info" : "Persönliche Informationen",
"SSL root certificates" : "SSL-Root-Zertifikate",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Sicherheitshinweis",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sie greifen auf %s via HTTP zu. Wir empfehlen Ihnen dringend, Ihren Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ihr Datenverzeichnis und Ihre Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis außerhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "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." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -108,17 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss das geändert werden. Zur Migration in eine andere Datenbank muss in der Befehlszeile »occ db:convert-type« verwendet werden.",
"Module 'fileinfo' missing" : "Das Modul 'fileinfo' fehlt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.",
- "Your PHP version is outdated" : "Ihre PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ihre PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt. Das kann Fehler mit Nicht-ASCII-Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von »default_charset« in der php.ini auf »UTF-8« zu ändern.",
"Locale not working" : "Die Lokalisierung funktioniert nicht",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dieses bedeutet, dass es Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "Adresserstellung in E-Mail-Benachrichtungen",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Wenn sich Ihre Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der Adresserstellung kommen. Um dieses zu verhindern, stellen Sie bitte die »overwritewebroot«-Option in Ihrer config.php auf das Internetwurzelverzeichnis Ihrer Installation (Vorschlag: »%s«).",
- "Connectivity Checks" : "Verbindungsüberprüfungen",
+ "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\")" : "Wenn sich Ihre Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setzen Sie bitte die \"overwrite.cli.url\"-Option in Ihrer config.php auf das Web-Wurzelverzeichnis Ihrer Installation (Vorschlag: \"%s\").",
+ "Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
"Please double check the <a href='%s'>installation guides</a>." : "Bitte prüfen Sie die <a href='%s'>Installationsanleitungen</a>.",
"Last cron was executed at %s." : "Letzter Cron wurde um %s ausgeführt.",
@@ -131,17 +135,20 @@
"Allow users to share via link" : "Benutzern erlauben, über Links Inhalte freizugeben",
"Enforce password protection" : "Passwortschutz erzwingen",
"Allow public uploads" : "Öffentliches Hochladen erlauben",
+ "Allow users to send mail notification for shared files" : "Benutzern erlauben E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Set default expiration date" : "Standardablaufdatum einstellen",
"Expire after " : "Ablauf nach ",
"days" : "Tagen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Allow resharing" : "Erlaube Weiterverteilen",
"Restrict users to only share with users in their groups" : "Nutzer nur auf das Teilen in ihren Gruppen beschränken",
- "Allow users to send mail notification for shared files" : "Benutzern erlauben E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
+ "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden",
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Enforce HTTPS" : "HTTPS erzwingen",
"Forces the clients to connect to %s via an encrypted connection." : "Zwingt die clientseitigen Anwendungen, verschlüsselte Verbindungen zu %s herzustellen.",
+ "Enforce HTTPS for subdomains" : "HTTPS für Subdomains erzwingen",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Zwingt die Clients, sich über eine verschlüsselte Verbindung zu %s und Subdomains zu verbinden.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Bitte verbinden Sie sich zu Ihrem %s über HTTPS um die SSL-Erzwingung zu aktivieren oder zu deaktivieren.",
"This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.",
"Send mode" : "Sendemodus",
@@ -169,15 +176,22 @@
"Documentation:" : "Dokumentation:",
"User Documentation" : "Dokumentation für Benutzer",
"Admin Documentation" : "Dokumentation für Administratoren",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Diese App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Update to %s" : "Aktualisierung auf %s",
"Enable only for specific groups" : "Nur für bestimmte Gruppen aktivieren",
"Uninstall App" : "App deinstallieren",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>wir möchten Sie nur wissen lassen, dass Sie jetzt ein %s - Konto besitzen.<br><br>Ihr Nutzername: %s<br>Öffnen Sie es: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Noch einen schönen Tag!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwir möchten Sie nur wissen lassen, dass Sie jetzt ein %s - Konto besitzen\n\nIhr Nutzername: %s\nÖffnen Sie es: %s\n",
"Administrator Documentation" : "Dokumentation für Administratoren",
"Online Documentation" : "Online-Dokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommerzieller Support",
"Get the apps to sync your files" : "Installieren Sie die Anwendungen, um Ihre Dateien zu synchronisieren",
+ "Desktop client" : "Desktop-Client",
+ "Android app" : "Android-App",
+ "iOS app" : "iOS-App",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen wollen,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">können Sie an der Entwicklung teilnehmen</a>\n\t\toder\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">anderen von diesem Projekt berichten</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
@@ -214,11 +228,15 @@
"Delete Encryption Keys" : "Verschlüsselungsschlüssel löschen",
"Show storage location" : "Speicherort anzeigen",
"Show last log in" : "Letzte Anmeldung anzeigen",
- "Login Name" : "Loginname",
+ "Show user backend" : "Nutzer-Backend anzeigen",
+ "Send email to new user" : "E-Mail an neuen Nutzer senden",
+ "Show email address" : "E-Mail Adresse anzeigen",
+ "Username" : "Benutzername",
+ "E-Mail" : "E-Mail",
"Create" : "Erstellen",
"Admin Recovery Password" : "Admin-Passwort-Wiederherstellung",
"Enter the recovery password in order to recover the users files during password change" : "Geben Sie das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Benutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: „512 MB“ oder „12 GB“)",
"Unlimited" : "Unbegrenzt",
"Other" : "Andere",
- "Username" : "Benutzername",
"Group Admin for" : "Gruppenadministrator für",
"Quota" : "Kontingent",
"Storage Location" : "Speicherort",
+ "User Backend" : "Nutzer-Backend",
"Last Login" : "Letzte Anmeldung",
"change full name" : "Vollständigen Namen ändern",
"set new password" : "Neues Passwort setzen",
+ "change email address" : "E-Mail Adresse ändern",
"Default" : "Standard"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 77f9c5fda87..6b5c0595922 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"Cron" : "Cron",
"Sharing" : "Διαμοιρασμός",
"Security" : "Ασφάλεια",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Σφάλμα πιστοποίησης",
"Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
"Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
- "Group already exists" : "Η ομάδα υπάρχει ήδη",
- "Unable to add group" : "Αδυναμία προσθήκης ομάδας",
"Files decrypted successfully" : "Τα αρχεία αποκρυπτογραφήθηκαν με επιτυχία",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Δεν ήταν δυνατή η αποκρυπτογράφηση των αρχείων, παρακαλώ ελέγξτε το owncloud.log ή ενημερωθείτε από τον διαχειριστή συστημάτων σας",
"Couldn't decrypt your files, check your password and try again" : "Δεν ήταν δυνατή η αποκρυπτογράφηση των αρχείων σας, ελέγξτε τον κωδικό πρόσβασής σας και δοκιμάστε πάλι",
"Encryption keys deleted permanently" : "Τα κλειδιά κρυπτογράφησης αφαιρέθηκαν οριστικά",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Δεν ήταν δυνατή η οριστική διαγραφή των κλειδιών κρυπτογράφησής σας, παρακαλώ ελέγξτε το owncloud.log ή επικοινωνήστε με τον διαχειριστή σας",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
- "Email saved" : "Το email αποθηκεύτηκε ",
- "Invalid email" : "Μη έγκυρο email",
- "Unable to delete group" : "Αδυναμία διαγραφής ομάδας",
- "Unable to delete user" : "Αδυναμία διαγραφής χρήστη",
"Backups restored successfully" : "Η επαναφορά αντιγράφων ασφαλείας έγινε με επιτυχία",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Δεν ήταν δυνατή η επαναφορά των κλειδιών κρυπτογράφησής σας, παρακαλώ ελέγξτε το owncloud.log ή επικοινωνήστε με τον διαχειριστή σας",
"Language changed" : "Η γλώσσα άλλαξε",
@@ -38,12 +33,22 @@ OC.L10N.register(
"Enabled" : "Ενεργοποιημένο",
"Not enabled" : "Μη ενεργοποιημένο",
"Recommended" : "Προτείνεται",
+ "Group already exists." : "Η ομάδα υπάρχει ήδη.",
+ "Unable to add group." : "Αδυναμία προσθήκης ομάδας.",
+ "Unable to delete group." : "Αδυναμία διαγραφής ομάδας.",
"Saved" : "Αποθηκεύτηκαν",
"test email settings" : "δοκιμή ρυθμίσεων email",
"If you received this email, the settings seem to be correct." : "Εάν λάβατε αυτό το email, οι ρυθμίσεις δείχνουν να είναι σωστές.",
"A problem occurred while sending the email. Please revise your settings." : "Παρουσιάστηκε ένα σφάλμα κατά την αποστολή του email. Παρακαλώ αναθεωρήστε τις ρυθμίσεις σας.",
"Email sent" : "Το Email απεστάλη ",
"You need to set your user email before being able to send test emails." : "Πρέπει να ορίσετε το email του χρήστη πριν να είστε σε θέση να στείλετε δοκιμαστικά emails.",
+ "Invalid mail address" : "Μη έγκυρη διεύθυνση ταχυδρομείου.",
+ "Unable to create user." : "Αδυναμία δημιουργίας χρήστη.",
+ "Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε",
+ "Unable to delete user." : "Αδυναμία διαγραφής χρήστη.",
+ "Invalid user" : "Μη έγκυρος χρήστης",
+ "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
+ "Email saved" : "Το email αποθηκεύτηκε ",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Sending..." : "Αποστέλεται...",
@@ -83,7 +88,7 @@ OC.L10N.register(
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"Error creating user" : "Σφάλμα δημιουργίας χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
- "Warning: Home directory for user \"{user}\" already exists" : "Προειδοποίηση: Ο μητρικός κατάλογος του χρήστη \"{user}\" υπάρχει ήδη",
+ "A valid email must be provided" : "Πρέπει να εισαχθεί ένα έγκυρο email",
"__language_name__" : "__όνομα_γλώσσας__",
"Personal Info" : "Προσωπικές Πληροφορίες",
"SSL root certificates" : "Πιστοποιητικά SSL root",
@@ -101,7 +106,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Προειδοποίηση Ασφαλείας",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Έχετε πρόσβαση στο %s μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί χρήση HTTPS αντ' αυτού.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν δουλεύει. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων έξω από τη ρίζα του καταλόγου του διακομιστή.",
"Setup Warning" : "Ρύθμιση Προειδοποίησης",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.",
@@ -109,16 +113,13 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ως βάση δεδομένων χρησιμοποιείται η SQLite. Για μεγαλύτερες εγκαταστάσεις συνιστούμε να την αλλάξετε. Για να μετακινηθείτε σε μια άλλη βάση δεδομένων χρησιμοποιείστε το εργαλείο γραμμής εντολών: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Η ενοτητα 'fileinfo' λειπει",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Η PHP ενοτητα 'fileinfo' λειπει. Σας συνιστούμε να ενεργοποιήσετε αυτή την ενότητα για να έχετε καλύτερα αποτελέσματα με τον εντοπισμό τύπου MIME. ",
- "Your PHP version is outdated" : "Η έκδοση PHP είναι απαρχαιωμένη",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Η έκδοση PHP είναι απαρχαιωμένη. Συνιστούμε ανεπιφύλακτα να ενημερώσετε στην 5.3.8 ή νεώτερη καθώς παλαιότερες εκδόσεις είναι γνωστό πως περιέχουν σφάλματα. Είναι πιθανόν ότι αυτή η εγκατάσταση δεν λειτουργεί σωστά.",
"PHP charset is not set to UTF-8" : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8. Αυτό μπορεί να προκαλέσει τεράστια ζητήματα με χωρίς-ASCII χαρακτήρες στα ονόματα των αρχείων. Συνιστούμε ανεπιφύλακτα να αλλάξετε την αξία του 'default_charset' php.ini στο 'UTF-8'.",
"Locale not working" : "Η μετάφραση δεν δουλεύει",
"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 to install the required packages on your system to support one of the following locales: %s." : "Συνιστούμε σοβαρά να εγκαταστήσετε τα απαιτούμενα πακέτα στο σύστημά σας ώστε να υποστηρίζεται μια από τις ακόλουθες ρυθμίσεις τοποθεσίας: %s.",
"URL generation in notification emails" : "Δημιουργία URL στις ειδοποιήσεις ηλεκτρονικού ταχυδρομείου",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Αν η εγκατάστασή σας δεν είναι εγκατεστημένη στη ρίζα της περιοχής και χρησιμοποιεί το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwritewebroot\" στον config.php φάκελό σας στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")",
+ "Configuration Checks" : "Έλεγχοι ρυθμίσεων",
"No problems found" : "Δεν βρέθηκαν προβλήματα",
"Please double check the <a href='%s'>installation guides</a>." : "Ελέγξτε ξανά τις <a href='%s'>οδηγίες εγκατάστασης</a>.",
"Last cron was executed at %s." : "Η τελευταία εκτέλεση του cron ήταν στις %s",
@@ -131,13 +132,13 @@ OC.L10N.register(
"Allow users to share via link" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μέσω συνδέσμου",
"Enforce password protection" : "Επιβολή προστασίας με κωδικό",
"Allow public uploads" : "Επιτρέπεται το κοινόχρηστο ανέβασμα",
+ "Allow users to send mail notification for shared files" : "Επιτρέψτε στους χρήστες να στέλνουν ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου για κοινόχρηστα αρχεία",
"Set default expiration date" : "Ορισμός ερήμην ημερομηνίας λήξης",
"Expire after " : "Λήξη μετά από",
"days" : "ημέρες",
"Enforce expiration date" : "Επιβολή της ημερομηνίας λήξης",
"Allow resharing" : "Επιτρέπεται ο επαναδιαμοιρασμός",
"Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους",
- "Allow users to send mail notification for shared files" : "Επιτρέψτε στους χρήστες να στέλνουν ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου για κοινόχρηστα αρχεία",
"Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό",
"These groups will still be able to receive shares, but not to initiate them." : "Αυτές οι ομάδες θα συνεχίσουν να λαμβάνουν διαμοιρασμούς, αλλά δεν θα είναι δυνατό να τους δημιουργήσουν.",
"Enforce HTTPS" : "Επιβολή χρήσης HTTPS",
@@ -171,12 +172,16 @@ OC.L10N.register(
"Update to %s" : "Ενημέρωση σε %s",
"Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες",
"Uninstall App" : "Απεγκατάσταση Εφαρμογής",
+ "Cheers!" : "Χαιρετισμούς!",
"Administrator Documentation" : "Τεκμηρίωση Διαχειριστή",
"Online Documentation" : "Τεκμηρίωση στο Διαδίκτυο",
"Forum" : "Φόρουμ",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Εμπορική Υποστήριξη",
"Get the apps to sync your files" : "Λήψη της εφαρμογής για συγχρονισμό των αρχείων σας",
+ "Desktop client" : "Πελάτης σταθερού υπολογιστή",
+ "Android app" : "Εφαρμογή Android",
+ "iOS app" : "Εφαρμογή iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Αν θέλετε να στηρίξετε το έργο\n\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n\n⇥⇥⇥target=\"_blank\">συνησφέρετε στην ανάπτυξη</a>\n\n⇥⇥ή\n\n⇥⇥<a href=\"https://owncloud.org/promote\"\n\n⇥⇥⇥target=\"_blank\">διαδώστε το</a>!",
"Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Χρησιμοποιήσατε <strong>%s</strong> από τα <strong>%s</strong> διαθέσιμα",
@@ -213,11 +218,14 @@ OC.L10N.register(
"Delete Encryption Keys" : "Διαγραφή κλειδιών κρυπτογράφησης",
"Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης",
"Show last log in" : "Εμφάνιση τελευταίας εισόδου",
- "Login Name" : "Όνομα Σύνδεσης",
+ "Send email to new user" : "Αποστολή μηνύματος στο νέο χρήστη",
+ "Show email address" : "Εμφάνιση διεύθυνσης ηλ. αλληλογραφίας",
+ "Username" : "Όνομα χρήστη",
+ "E-Mail" : "Ηλεκτρονική αλληλογραφία",
"Create" : "Δημιουργία",
"Admin Recovery Password" : "Κωδικός Επαναφοράς Διαχειριστή ",
"Enter the recovery password in order to recover the users files during password change" : "Εισάγετε το συνθηματικό ανάκτησης ώστε να ανακτήσετε τα αρχεία χρηστών κατά την αλλαγή συνθηματικού",
- "Search Users and Groups" : "Αναζήτηση Χρηστών και Ομάδων",
+ "Search Users" : "Αναζήτηση χρηστών",
"Add Group" : "Προσθήκη Ομάδας",
"Group" : "Ομάδα",
"Everyone" : "Όλοι",
@@ -226,12 +234,12 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")",
"Unlimited" : "Απεριόριστο",
"Other" : "Άλλο",
- "Username" : "Όνομα χρήστη",
"Quota" : "Σύνολο Χώρου",
"Storage Location" : "Τοποθεσία αποθηκευτικού χώρου",
"Last Login" : "Τελευταία Σύνδεση",
"change full name" : "αλλαγή πλήρους ονόματος",
"set new password" : "επιλογή νέου κωδικού",
+ "change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index ffd24abff2d..3686c4860cc 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"Cron" : "Cron",
"Sharing" : "Διαμοιρασμός",
"Security" : "Ασφάλεια",
@@ -7,18 +8,12 @@
"Authentication error" : "Σφάλμα πιστοποίησης",
"Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
"Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
- "Group already exists" : "Η ομάδα υπάρχει ήδη",
- "Unable to add group" : "Αδυναμία προσθήκης ομάδας",
"Files decrypted successfully" : "Τα αρχεία αποκρυπτογραφήθηκαν με επιτυχία",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Δεν ήταν δυνατή η αποκρυπτογράφηση των αρχείων, παρακαλώ ελέγξτε το owncloud.log ή ενημερωθείτε από τον διαχειριστή συστημάτων σας",
"Couldn't decrypt your files, check your password and try again" : "Δεν ήταν δυνατή η αποκρυπτογράφηση των αρχείων σας, ελέγξτε τον κωδικό πρόσβασής σας και δοκιμάστε πάλι",
"Encryption keys deleted permanently" : "Τα κλειδιά κρυπτογράφησης αφαιρέθηκαν οριστικά",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Δεν ήταν δυνατή η οριστική διαγραφή των κλειδιών κρυπτογράφησής σας, παρακαλώ ελέγξτε το owncloud.log ή επικοινωνήστε με τον διαχειριστή σας",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
- "Email saved" : "Το email αποθηκεύτηκε ",
- "Invalid email" : "Μη έγκυρο email",
- "Unable to delete group" : "Αδυναμία διαγραφής ομάδας",
- "Unable to delete user" : "Αδυναμία διαγραφής χρήστη",
"Backups restored successfully" : "Η επαναφορά αντιγράφων ασφαλείας έγινε με επιτυχία",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Δεν ήταν δυνατή η επαναφορά των κλειδιών κρυπτογράφησής σας, παρακαλώ ελέγξτε το owncloud.log ή επικοινωνήστε με τον διαχειριστή σας",
"Language changed" : "Η γλώσσα άλλαξε",
@@ -36,12 +31,22 @@
"Enabled" : "Ενεργοποιημένο",
"Not enabled" : "Μη ενεργοποιημένο",
"Recommended" : "Προτείνεται",
+ "Group already exists." : "Η ομάδα υπάρχει ήδη.",
+ "Unable to add group." : "Αδυναμία προσθήκης ομάδας.",
+ "Unable to delete group." : "Αδυναμία διαγραφής ομάδας.",
"Saved" : "Αποθηκεύτηκαν",
"test email settings" : "δοκιμή ρυθμίσεων email",
"If you received this email, the settings seem to be correct." : "Εάν λάβατε αυτό το email, οι ρυθμίσεις δείχνουν να είναι σωστές.",
"A problem occurred while sending the email. Please revise your settings." : "Παρουσιάστηκε ένα σφάλμα κατά την αποστολή του email. Παρακαλώ αναθεωρήστε τις ρυθμίσεις σας.",
"Email sent" : "Το Email απεστάλη ",
"You need to set your user email before being able to send test emails." : "Πρέπει να ορίσετε το email του χρήστη πριν να είστε σε θέση να στείλετε δοκιμαστικά emails.",
+ "Invalid mail address" : "Μη έγκυρη διεύθυνση ταχυδρομείου.",
+ "Unable to create user." : "Αδυναμία δημιουργίας χρήστη.",
+ "Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε",
+ "Unable to delete user." : "Αδυναμία διαγραφής χρήστη.",
+ "Invalid user" : "Μη έγκυρος χρήστης",
+ "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
+ "Email saved" : "Το email αποθηκεύτηκε ",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Sending..." : "Αποστέλεται...",
@@ -81,7 +86,7 @@
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"Error creating user" : "Σφάλμα δημιουργίας χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
- "Warning: Home directory for user \"{user}\" already exists" : "Προειδοποίηση: Ο μητρικός κατάλογος του χρήστη \"{user}\" υπάρχει ήδη",
+ "A valid email must be provided" : "Πρέπει να εισαχθεί ένα έγκυρο email",
"__language_name__" : "__όνομα_γλώσσας__",
"Personal Info" : "Προσωπικές Πληροφορίες",
"SSL root certificates" : "Πιστοποιητικά SSL root",
@@ -99,7 +104,6 @@
"TLS" : "TLS",
"Security Warning" : "Προειδοποίηση Ασφαλείας",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Έχετε πρόσβαση στο %s μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί χρήση HTTPS αντ' αυτού.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν δουλεύει. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων έξω από τη ρίζα του καταλόγου του διακομιστή.",
"Setup Warning" : "Ρύθμιση Προειδοποίησης",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.",
@@ -107,16 +111,13 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ως βάση δεδομένων χρησιμοποιείται η SQLite. Για μεγαλύτερες εγκαταστάσεις συνιστούμε να την αλλάξετε. Για να μετακινηθείτε σε μια άλλη βάση δεδομένων χρησιμοποιείστε το εργαλείο γραμμής εντολών: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Η ενοτητα 'fileinfo' λειπει",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Η PHP ενοτητα 'fileinfo' λειπει. Σας συνιστούμε να ενεργοποιήσετε αυτή την ενότητα για να έχετε καλύτερα αποτελέσματα με τον εντοπισμό τύπου MIME. ",
- "Your PHP version is outdated" : "Η έκδοση PHP είναι απαρχαιωμένη",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Η έκδοση PHP είναι απαρχαιωμένη. Συνιστούμε ανεπιφύλακτα να ενημερώσετε στην 5.3.8 ή νεώτερη καθώς παλαιότερες εκδόσεις είναι γνωστό πως περιέχουν σφάλματα. Είναι πιθανόν ότι αυτή η εγκατάσταση δεν λειτουργεί σωστά.",
"PHP charset is not set to UTF-8" : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8. Αυτό μπορεί να προκαλέσει τεράστια ζητήματα με χωρίς-ASCII χαρακτήρες στα ονόματα των αρχείων. Συνιστούμε ανεπιφύλακτα να αλλάξετε την αξία του 'default_charset' php.ini στο 'UTF-8'.",
"Locale not working" : "Η μετάφραση δεν δουλεύει",
"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 to install the required packages on your system to support one of the following locales: %s." : "Συνιστούμε σοβαρά να εγκαταστήσετε τα απαιτούμενα πακέτα στο σύστημά σας ώστε να υποστηρίζεται μια από τις ακόλουθες ρυθμίσεις τοποθεσίας: %s.",
"URL generation in notification emails" : "Δημιουργία URL στις ειδοποιήσεις ηλεκτρονικού ταχυδρομείου",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Αν η εγκατάστασή σας δεν είναι εγκατεστημένη στη ρίζα της περιοχής και χρησιμοποιεί το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwritewebroot\" στον config.php φάκελό σας στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")",
+ "Configuration Checks" : "Έλεγχοι ρυθμίσεων",
"No problems found" : "Δεν βρέθηκαν προβλήματα",
"Please double check the <a href='%s'>installation guides</a>." : "Ελέγξτε ξανά τις <a href='%s'>οδηγίες εγκατάστασης</a>.",
"Last cron was executed at %s." : "Η τελευταία εκτέλεση του cron ήταν στις %s",
@@ -129,13 +130,13 @@
"Allow users to share via link" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μέσω συνδέσμου",
"Enforce password protection" : "Επιβολή προστασίας με κωδικό",
"Allow public uploads" : "Επιτρέπεται το κοινόχρηστο ανέβασμα",
+ "Allow users to send mail notification for shared files" : "Επιτρέψτε στους χρήστες να στέλνουν ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου για κοινόχρηστα αρχεία",
"Set default expiration date" : "Ορισμός ερήμην ημερομηνίας λήξης",
"Expire after " : "Λήξη μετά από",
"days" : "ημέρες",
"Enforce expiration date" : "Επιβολή της ημερομηνίας λήξης",
"Allow resharing" : "Επιτρέπεται ο επαναδιαμοιρασμός",
"Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους",
- "Allow users to send mail notification for shared files" : "Επιτρέψτε στους χρήστες να στέλνουν ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου για κοινόχρηστα αρχεία",
"Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό",
"These groups will still be able to receive shares, but not to initiate them." : "Αυτές οι ομάδες θα συνεχίσουν να λαμβάνουν διαμοιρασμούς, αλλά δεν θα είναι δυνατό να τους δημιουργήσουν.",
"Enforce HTTPS" : "Επιβολή χρήσης HTTPS",
@@ -169,12 +170,16 @@
"Update to %s" : "Ενημέρωση σε %s",
"Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες",
"Uninstall App" : "Απεγκατάσταση Εφαρμογής",
+ "Cheers!" : "Χαιρετισμούς!",
"Administrator Documentation" : "Τεκμηρίωση Διαχειριστή",
"Online Documentation" : "Τεκμηρίωση στο Διαδίκτυο",
"Forum" : "Φόρουμ",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Εμπορική Υποστήριξη",
"Get the apps to sync your files" : "Λήψη της εφαρμογής για συγχρονισμό των αρχείων σας",
+ "Desktop client" : "Πελάτης σταθερού υπολογιστή",
+ "Android app" : "Εφαρμογή Android",
+ "iOS app" : "Εφαρμογή iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Αν θέλετε να στηρίξετε το έργο\n\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n\n⇥⇥⇥target=\"_blank\">συνησφέρετε στην ανάπτυξη</a>\n\n⇥⇥ή\n\n⇥⇥<a href=\"https://owncloud.org/promote\"\n\n⇥⇥⇥target=\"_blank\">διαδώστε το</a>!",
"Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Χρησιμοποιήσατε <strong>%s</strong> από τα <strong>%s</strong> διαθέσιμα",
@@ -211,11 +216,14 @@
"Delete Encryption Keys" : "Διαγραφή κλειδιών κρυπτογράφησης",
"Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης",
"Show last log in" : "Εμφάνιση τελευταίας εισόδου",
- "Login Name" : "Όνομα Σύνδεσης",
+ "Send email to new user" : "Αποστολή μηνύματος στο νέο χρήστη",
+ "Show email address" : "Εμφάνιση διεύθυνσης ηλ. αλληλογραφίας",
+ "Username" : "Όνομα χρήστη",
+ "E-Mail" : "Ηλεκτρονική αλληλογραφία",
"Create" : "Δημιουργία",
"Admin Recovery Password" : "Κωδικός Επαναφοράς Διαχειριστή ",
"Enter the recovery password in order to recover the users files during password change" : "Εισάγετε το συνθηματικό ανάκτησης ώστε να ανακτήσετε τα αρχεία χρηστών κατά την αλλαγή συνθηματικού",
- "Search Users and Groups" : "Αναζήτηση Χρηστών και Ομάδων",
+ "Search Users" : "Αναζήτηση χρηστών",
"Add Group" : "Προσθήκη Ομάδας",
"Group" : "Ομάδα",
"Everyone" : "Όλοι",
@@ -224,12 +232,12 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")",
"Unlimited" : "Απεριόριστο",
"Other" : "Άλλο",
- "Username" : "Όνομα χρήστη",
"Quota" : "Σύνολο Χώρου",
"Storage Location" : "Τοποθεσία αποθηκευτικού χώρου",
"Last Login" : "Τελευταία Σύνδεση",
"change full name" : "αλλαγή πλήρους ονόματος",
"set new password" : "επιλογή νέου κωδικού",
+ "change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index a4a9af22b39..5254a5970f1 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Authentication error",
"Your full name has been changed." : "Your full name has been changed.",
"Unable to change full name" : "Unable to change full name",
- "Group already exists" : "Group already exists",
- "Unable to add group" : "Unable to add group",
"Files decrypted successfully" : "Files decrypted successfully",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Couldn't decrypt your files, please check your owncloud.log or ask your administrator",
"Couldn't decrypt your files, check your password and try again" : "Couldn't decrypt your files, check your password and try again",
"Encryption keys deleted permanently" : "Encryption keys deleted permanently",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator",
"Couldn't remove app." : "Couldn't remove app.",
- "Email saved" : "Email saved",
- "Invalid email" : "Invalid email",
- "Unable to delete group" : "Unable to delete group",
- "Unable to delete user" : "Unable to delete user",
"Backups restored successfully" : "Backups restored successfully",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator",
"Language changed" : "Language changed",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Enabled",
"Not enabled" : "Not enabled",
"Recommended" : "Recommended",
+ "Group already exists." : "Group already exists.",
+ "Unable to add group." : "Unable to add group.",
+ "Unable to delete group." : "Unable to delete group.",
"Saved" : "Saved",
"test email settings" : "test email settings",
"If you received this email, the settings seem to be correct." : "If you received this email, the settings seem to be correct.",
"A problem occurred while sending the email. Please revise your settings." : "A problem occurred whilst sending the email. Please revise your settings.",
"Email sent" : "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 mail address" : "Invalid mail address",
+ "Unable to create user." : "Unable to create user.",
+ "Your %s account was created" : "Your %s account was created",
+ "Unable to delete user." : "Unable to delete user.",
+ "Forbidden" : "Forbidden",
+ "Invalid user" : "Invalid user",
+ "Unable to change mail address" : "Unable to change mail address",
+ "Email saved" : "Email saved",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"Add trusted domain" : "Add trusted domain",
"Sending..." : "Sending...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "A valid username must be provided",
"Error creating user" : "Error creating user",
"A valid password must be provided" : "A valid password must be provided",
- "Warning: Home directory for user \"{user}\" already exists" : "Warning: Home directory for user \"{user}\" already exists",
+ "A valid email must be provided" : "A valid email must be provided",
"__language_name__" : "English (British English)",
"Personal Info" : "Personal Info",
"SSL root certificates" : "SSL root certificates",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Security Warning",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.",
+ "Read-Only config enabled" : "Read-Only config enabled",
+ "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." : "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.",
"Setup Warning" : "Setup Warning",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.",
@@ -110,17 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite is used as database. For larger installations we recommend changing this. To migrate to another database use the command line tool: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' missing",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.",
- "Your PHP version is outdated" : "Your PHP version is outdated",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly.",
"PHP charset is not set to UTF-8" : "PHP charset is not set to UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'.",
"Locale not working" : "Locale not working",
"System locale can not be set to a one which supports UTF-8." : "System locale can not be set to a one which supports UTF-8.",
"This means that there might be problems with certain characters in file names." : "This means that there might be problems with certain characters in file names.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
"URL generation in notification emails" : "URL generation in notification emails",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")",
- "Connectivity Checks" : "Connectivity Checks",
+ "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\")" : "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\")",
+ "Configuration Checks" : "Configuration Checks",
"No problems found" : "No problems found",
"Please double check the <a href='%s'>installation guides</a>." : "Please double check the <a href='%s'>installation guides</a>.",
"Last cron was executed at %s." : "Last cron was executed at %s.",
@@ -133,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Allow users to share via link",
"Enforce password protection" : "Enforce password protection",
"Allow public uploads" : "Allow public uploads",
+ "Allow users to send mail notification for shared files" : "Allow users to send mail notification for shared files",
"Set default expiration date" : "Set default expiry date",
"Expire after " : "Expire after ",
"days" : "days",
"Enforce expiration date" : "Enforce expiry date",
"Allow resharing" : "Allow resharing",
"Restrict users to only share with users in their groups" : "Restrict users to only share with users in their groups",
- "Allow users to send mail notification for shared files" : "Allow users to send mail notification for shared files",
+ "Allow users to send mail notification for shared files to other users" : "Allow users to send email notification for shared files to other users",
"Exclude groups from sharing" : "Exclude groups from sharing",
"These groups will still be able to receive shares, but not to initiate them." : "These groups will still be able to receive shares, but not to initiate them.",
"Enforce HTTPS" : "Enforce HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forces the clients to connect to %s via an encrypted connection.",
+ "Enforce HTTPS for subdomains" : "Enforce HTTPS for subdomains",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forces the clients to connect to %s and subdomains via an encrypted connection.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Please connect to your %s via HTTPS to enable or disable the SSL enforcement.",
"This is used for sending out notifications." : "This is used for sending out notifications.",
"Send mode" : "Send mode",
@@ -171,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Documentation:",
"User Documentation" : "User Documentation",
"Admin Documentation" : "Admin Documentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "This app cannot be installed because the following dependencies are not fulfilled:",
"Update to %s" : "Update to %s",
"Enable only for specific groups" : "Enable only for specific groups",
"Uninstall App" : "Uninstall App",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "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>",
+ "Cheers!" : "Cheers!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n",
"Administrator Documentation" : "Administrator Documentation",
"Online Documentation" : "Online Documentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Commercial Support",
"Get the apps to sync your files" : "Get the apps to sync your files",
+ "Desktop client" : "Desktop client",
+ "Android app" : "Android app",
+ "iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!",
"Show First Run Wizard again" : "Show First Run Wizard again",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "You have used <strong>%s</strong> of the available <strong>%s</strong>",
@@ -216,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Delete Encryption Keys",
"Show storage location" : "Show storage location",
"Show last log in" : "Show last log in",
- "Login Name" : "Login Name",
+ "Show user backend" : "Show user backend",
+ "Send email to new user" : "Send email to new user",
+ "Show email address" : "Show email address",
+ "Username" : "Username",
+ "E-Mail" : "E-Mail",
"Create" : "Create",
"Admin Recovery Password" : "Admin Recovery Password",
"Enter the recovery password in order to recover the users files during password change" : "Enter the recovery password in order to recover the user's files during password change",
- "Search Users and Groups" : "Search Users and Groups",
+ "Search Users" : "Search Users",
"Add Group" : "Add Group",
"Group" : "Group",
"Everyone" : "Everyone",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Please enter storage quota (e.g. \"512 MB\" or \"12 GB\")",
"Unlimited" : "Unlimited",
"Other" : "Other",
- "Username" : "Username",
"Group Admin for" : "Group Admin for",
"Quota" : "Quota",
"Storage Location" : "Storage Location",
+ "User Backend" : "User Backend",
"Last Login" : "Last Login",
"change full name" : "change full name",
"set new password" : "set new password",
+ "change email address" : "change email address",
"Default" : "Default"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index b7dca2c7b0f..b480c5d71c3 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -8,18 +8,12 @@
"Authentication error" : "Authentication error",
"Your full name has been changed." : "Your full name has been changed.",
"Unable to change full name" : "Unable to change full name",
- "Group already exists" : "Group already exists",
- "Unable to add group" : "Unable to add group",
"Files decrypted successfully" : "Files decrypted successfully",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Couldn't decrypt your files, please check your owncloud.log or ask your administrator",
"Couldn't decrypt your files, check your password and try again" : "Couldn't decrypt your files, check your password and try again",
"Encryption keys deleted permanently" : "Encryption keys deleted permanently",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator",
"Couldn't remove app." : "Couldn't remove app.",
- "Email saved" : "Email saved",
- "Invalid email" : "Invalid email",
- "Unable to delete group" : "Unable to delete group",
- "Unable to delete user" : "Unable to delete user",
"Backups restored successfully" : "Backups restored successfully",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator",
"Language changed" : "Language changed",
@@ -37,12 +31,23 @@
"Enabled" : "Enabled",
"Not enabled" : "Not enabled",
"Recommended" : "Recommended",
+ "Group already exists." : "Group already exists.",
+ "Unable to add group." : "Unable to add group.",
+ "Unable to delete group." : "Unable to delete group.",
"Saved" : "Saved",
"test email settings" : "test email settings",
"If you received this email, the settings seem to be correct." : "If you received this email, the settings seem to be correct.",
"A problem occurred while sending the email. Please revise your settings." : "A problem occurred whilst sending the email. Please revise your settings.",
"Email sent" : "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 mail address" : "Invalid mail address",
+ "Unable to create user." : "Unable to create user.",
+ "Your %s account was created" : "Your %s account was created",
+ "Unable to delete user." : "Unable to delete user.",
+ "Forbidden" : "Forbidden",
+ "Invalid user" : "Invalid user",
+ "Unable to change mail address" : "Unable to change mail address",
+ "Email saved" : "Email saved",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"Add trusted domain" : "Add trusted domain",
"Sending..." : "Sending...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "A valid username must be provided",
"Error creating user" : "Error creating user",
"A valid password must be provided" : "A valid password must be provided",
- "Warning: Home directory for user \"{user}\" already exists" : "Warning: Home directory for user \"{user}\" already exists",
+ "A valid email must be provided" : "A valid email must be provided",
"__language_name__" : "English (British English)",
"Personal Info" : "Personal Info",
"SSL root certificates" : "SSL root certificates",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Security Warning",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.",
+ "Read-Only config enabled" : "Read-Only config enabled",
+ "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." : "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.",
"Setup Warning" : "Setup Warning",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.",
@@ -108,17 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite is used as database. For larger installations we recommend changing this. To migrate to another database use the command line tool: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' missing",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.",
- "Your PHP version is outdated" : "Your PHP version is outdated",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly.",
"PHP charset is not set to UTF-8" : "PHP charset is not set to UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'.",
"Locale not working" : "Locale not working",
"System locale can not be set to a one which supports UTF-8." : "System locale can not be set to a one which supports UTF-8.",
"This means that there might be problems with certain characters in file names." : "This means that there might be problems with certain characters in file names.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
"URL generation in notification emails" : "URL generation in notification emails",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")",
- "Connectivity Checks" : "Connectivity Checks",
+ "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\")" : "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\")",
+ "Configuration Checks" : "Configuration Checks",
"No problems found" : "No problems found",
"Please double check the <a href='%s'>installation guides</a>." : "Please double check the <a href='%s'>installation guides</a>.",
"Last cron was executed at %s." : "Last cron was executed at %s.",
@@ -131,17 +135,20 @@
"Allow users to share via link" : "Allow users to share via link",
"Enforce password protection" : "Enforce password protection",
"Allow public uploads" : "Allow public uploads",
+ "Allow users to send mail notification for shared files" : "Allow users to send mail notification for shared files",
"Set default expiration date" : "Set default expiry date",
"Expire after " : "Expire after ",
"days" : "days",
"Enforce expiration date" : "Enforce expiry date",
"Allow resharing" : "Allow resharing",
"Restrict users to only share with users in their groups" : "Restrict users to only share with users in their groups",
- "Allow users to send mail notification for shared files" : "Allow users to send mail notification for shared files",
+ "Allow users to send mail notification for shared files to other users" : "Allow users to send email notification for shared files to other users",
"Exclude groups from sharing" : "Exclude groups from sharing",
"These groups will still be able to receive shares, but not to initiate them." : "These groups will still be able to receive shares, but not to initiate them.",
"Enforce HTTPS" : "Enforce HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forces the clients to connect to %s via an encrypted connection.",
+ "Enforce HTTPS for subdomains" : "Enforce HTTPS for subdomains",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forces the clients to connect to %s and subdomains via an encrypted connection.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Please connect to your %s via HTTPS to enable or disable the SSL enforcement.",
"This is used for sending out notifications." : "This is used for sending out notifications.",
"Send mode" : "Send mode",
@@ -169,15 +176,22 @@
"Documentation:" : "Documentation:",
"User Documentation" : "User Documentation",
"Admin Documentation" : "Admin Documentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "This app cannot be installed because the following dependencies are not fulfilled:",
"Update to %s" : "Update to %s",
"Enable only for specific groups" : "Enable only for specific groups",
"Uninstall App" : "Uninstall App",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "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>",
+ "Cheers!" : "Cheers!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n",
"Administrator Documentation" : "Administrator Documentation",
"Online Documentation" : "Online Documentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Commercial Support",
"Get the apps to sync your files" : "Get the apps to sync your files",
+ "Desktop client" : "Desktop client",
+ "Android app" : "Android app",
+ "iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!",
"Show First Run Wizard again" : "Show First Run Wizard again",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "You have used <strong>%s</strong> of the available <strong>%s</strong>",
@@ -214,11 +228,15 @@
"Delete Encryption Keys" : "Delete Encryption Keys",
"Show storage location" : "Show storage location",
"Show last log in" : "Show last log in",
- "Login Name" : "Login Name",
+ "Show user backend" : "Show user backend",
+ "Send email to new user" : "Send email to new user",
+ "Show email address" : "Show email address",
+ "Username" : "Username",
+ "E-Mail" : "E-Mail",
"Create" : "Create",
"Admin Recovery Password" : "Admin Recovery Password",
"Enter the recovery password in order to recover the users files during password change" : "Enter the recovery password in order to recover the user's files during password change",
- "Search Users and Groups" : "Search Users and Groups",
+ "Search Users" : "Search Users",
"Add Group" : "Add Group",
"Group" : "Group",
"Everyone" : "Everyone",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Please enter storage quota (e.g. \"512 MB\" or \"12 GB\")",
"Unlimited" : "Unlimited",
"Other" : "Other",
- "Username" : "Username",
"Group Admin for" : "Group Admin for",
"Quota" : "Quota",
"Storage Location" : "Storage Location",
+ "User Backend" : "User Backend",
"Last Login" : "Last Login",
"change full name" : "change full name",
"set new password" : "set new password",
+ "change email address" : "change email address",
"Default" : "Default"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js
index 5e6f2168e22..17a80f8b6ea 100644
--- a/settings/l10n/eo.js
+++ b/settings/l10n/eo.js
@@ -9,14 +9,8 @@ OC.L10N.register(
"Authentication error" : "Aŭtentiga eraro",
"Your full name has been changed." : "Via plena nomo ŝanĝitas.",
"Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
- "Group already exists" : "La grupo jam ekzistas",
- "Unable to add group" : "Ne eblis aldoni la grupon",
"Files decrypted successfully" : "La dosieroj malĉifriĝis sukcese",
"Encryption keys deleted permanently" : "La ĉifroklavojn foriĝis por ĉiam.",
- "Email saved" : "La retpoŝtadreso konserviĝis",
- "Invalid email" : "Nevalida retpoŝtadreso",
- "Unable to delete group" : "Ne eblis forigi la grupon",
- "Unable to delete user" : "Ne eblis forigi la uzanton",
"Backups restored successfully" : "La savokopioj restaŭriĝis sukcese",
"Language changed" : "La lingvo estas ŝanĝita",
"Invalid request" : "Nevalida peto",
@@ -29,6 +23,7 @@ OC.L10N.register(
"Enabled" : "Kapabligita",
"Saved" : "Konservita",
"Email sent" : "La retpoŝtaĵo sendiĝis",
+ "Email saved" : "La retpoŝtadreso konserviĝis",
"Sending..." : "Sendante...",
"All" : "Ĉio",
"Please wait...." : "Bonvolu atendi...",
@@ -60,7 +55,6 @@ OC.L10N.register(
"A valid username must be provided" : "Valida uzantonomo devas proviziĝi",
"Error creating user" : "Eraris kreo de uzanto",
"A valid password must be provided" : "Valida pasvorto devas proviziĝi",
- "Warning: Home directory for user \"{user}\" already exists" : "Averto: hejmdosierujo por la uzanto “{user”} jam ekzistas",
"__language_name__" : "Esperanto",
"SSL root certificates" : "Radikaj SSL-atestoj",
"Encryption" : "Ĉifrado",
@@ -135,9 +129,8 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Viaj ĉifroklavoj moviĝis al savokopia loko. Se io malsukcesas, vi povas restaŭri la klavojn. Nur forigu ilin porĉiame se vi certas, ke ĉiuj dosieroj malĉifriĝis korekte.",
"Restore Encryption Keys" : "Restaŭri ĉifroklavojn",
"Delete Encryption Keys" : "Forigi ĉifroklavojn",
- "Login Name" : "Ensaluti",
+ "Username" : "Uzantonomo",
"Create" : "Krei",
- "Search Users and Groups" : "Serĉi uzantojn kaj grupojn",
"Add Group" : "Aldoni grupon",
"Group" : "Grupo",
"Everyone" : "Ĉiuj",
@@ -145,7 +138,6 @@ OC.L10N.register(
"Default Quota" : "Defaŭlta kvoto",
"Unlimited" : "Senlima",
"Other" : "Alia",
- "Username" : "Uzantonomo",
"Quota" : "Kvoto",
"Last Login" : "Lasta ensaluto",
"change full name" : "ŝanĝi plenan nomon",
diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json
index 06872e6d1d0..afdf888606d 100644
--- a/settings/l10n/eo.json
+++ b/settings/l10n/eo.json
@@ -7,14 +7,8 @@
"Authentication error" : "Aŭtentiga eraro",
"Your full name has been changed." : "Via plena nomo ŝanĝitas.",
"Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
- "Group already exists" : "La grupo jam ekzistas",
- "Unable to add group" : "Ne eblis aldoni la grupon",
"Files decrypted successfully" : "La dosieroj malĉifriĝis sukcese",
"Encryption keys deleted permanently" : "La ĉifroklavojn foriĝis por ĉiam.",
- "Email saved" : "La retpoŝtadreso konserviĝis",
- "Invalid email" : "Nevalida retpoŝtadreso",
- "Unable to delete group" : "Ne eblis forigi la grupon",
- "Unable to delete user" : "Ne eblis forigi la uzanton",
"Backups restored successfully" : "La savokopioj restaŭriĝis sukcese",
"Language changed" : "La lingvo estas ŝanĝita",
"Invalid request" : "Nevalida peto",
@@ -27,6 +21,7 @@
"Enabled" : "Kapabligita",
"Saved" : "Konservita",
"Email sent" : "La retpoŝtaĵo sendiĝis",
+ "Email saved" : "La retpoŝtadreso konserviĝis",
"Sending..." : "Sendante...",
"All" : "Ĉio",
"Please wait...." : "Bonvolu atendi...",
@@ -58,7 +53,6 @@
"A valid username must be provided" : "Valida uzantonomo devas proviziĝi",
"Error creating user" : "Eraris kreo de uzanto",
"A valid password must be provided" : "Valida pasvorto devas proviziĝi",
- "Warning: Home directory for user \"{user}\" already exists" : "Averto: hejmdosierujo por la uzanto “{user”} jam ekzistas",
"__language_name__" : "Esperanto",
"SSL root certificates" : "Radikaj SSL-atestoj",
"Encryption" : "Ĉifrado",
@@ -133,9 +127,8 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Viaj ĉifroklavoj moviĝis al savokopia loko. Se io malsukcesas, vi povas restaŭri la klavojn. Nur forigu ilin porĉiame se vi certas, ke ĉiuj dosieroj malĉifriĝis korekte.",
"Restore Encryption Keys" : "Restaŭri ĉifroklavojn",
"Delete Encryption Keys" : "Forigi ĉifroklavojn",
- "Login Name" : "Ensaluti",
+ "Username" : "Uzantonomo",
"Create" : "Krei",
- "Search Users and Groups" : "Serĉi uzantojn kaj grupojn",
"Add Group" : "Aldoni grupon",
"Group" : "Grupo",
"Everyone" : "Ĉiuj",
@@ -143,7 +136,6 @@
"Default Quota" : "Defaŭlta kvoto",
"Unlimited" : "Senlima",
"Other" : "Alia",
- "Username" : "Uzantonomo",
"Quota" : "Kvoto",
"Last Login" : "Lasta ensaluto",
"change full name" : "ŝanĝi plenan nomon",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index 2a0a03a398d..fb3dbc5b570 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Error de autenticación",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Unable to change full name" : "No se puede cambiar el nombre completo",
- "Group already exists" : "El grupo ya existe",
- "Unable to add group" : "No se pudo añadir el grupo",
"Files decrypted successfully" : "Los archivos fueron descifrados",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "No se pudo descifrar sus archivos. Revise el owncloud.log o consulte con su administrador",
"Couldn't decrypt your files, check your password and try again" : "No se pudo descifrar sus archivos. Revise su contraseña e inténtelo de nuevo",
"Encryption keys deleted permanently" : "Claves de cifrado eliminadas permanentemente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "No se pudieron eliminar permanentemente sus claves de cifrado. Revise owncloud.log o consulte con su administrador.",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
- "Email saved" : "Correo electrónico guardado",
- "Invalid email" : "Correo electrónico no válido",
- "Unable to delete group" : "No se pudo eliminar el grupo",
- "Unable to delete user" : "No se pudo eliminar el usuario",
"Backups restored successfully" : "Copia de seguridad restaurada",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "No se pudieron restarurar sus claves de cifrado. Revise owncloud.log o consulte con su administrador.",
"Language changed" : "Idioma cambiado",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Habilitado",
"Not enabled" : "No habilitado",
"Recommended" : "Recomendado",
+ "Group already exists." : "El grupo ya existe.",
+ "Unable to add group." : "No se pudo agregar el grupo.",
+ "Unable to delete group." : "No se pudo eliminar el grupo.",
"Saved" : "Guardado",
"test email settings" : "probar configuración de correo electrónico",
"If you received this email, the settings seem to be correct." : "Si recibió este mensaje de correo electrónico, su configuración debe estar correcta.",
"A problem occurred while sending the email. Please revise your settings." : "Ocurrió un problema al mandar el mensaje. Revise la configuración.",
"Email sent" : "Correo electrónico enviado",
"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 mail address" : "Dirección de correo inválida",
+ "Unable to create user." : "No se pudo crear el usuario.",
+ "Your %s account was created" : "Su %s cuenta fue creada",
+ "Unable to delete user." : "No se pudo eliminar el usuario.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario no válido",
+ "Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico",
+ "Email saved" : "Correo electrónico guardado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
"Sending..." : "Enviando...",
@@ -75,7 +80,7 @@ OC.L10N.register(
"Unable to delete {objName}" : "No es posible eliminar {objName}",
"Error creating group" : "Error al crear un grupo",
"A valid group name must be provided" : "Se debe dar un nombre válido para el grupo ",
- "deleted {groupName}" : "borrado {groupName}",
+ "deleted {groupName}" : "{groupName} eliminado",
"undo" : "deshacer",
"no group" : "sin grupo",
"never" : "nunca",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"Error creating user" : "Error al crear usuario",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atención: el directorio de inicio para el usuario \"{user}\" ya existe.",
+ "A valid email must be provided" : "Se debe brindar una dirección de correo electrónico válida ",
"__language_name__" : "Castellano",
"Personal Info" : "Información personal",
"SSL root certificates" : "Certificados raíz SSL",
@@ -102,24 +107,23 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a %s vía HTTP. Le recomendamos encarecidamente que configure su servidor para que requiera HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
+ "Read-Only config enabled" : "Configuración de solo lectura activada",
+ "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." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.",
"Setup Warning" : "Advertencia de configuración",
- "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones del principales no estén accesibles.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto sea causado por un cache o acelerador, como por ejemplo Zend OPcache o eAccelerator.",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.",
"Database Performance Info" : "Información de rendimiento de la base de datos",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Se está usando SQLite como base de datos. Para instalaciones más grandes, recomendamos cambiar esto. Para migrar a otra base de datos, use la herramienta de línea de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP no está actualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"PHP charset is not set to UTF-8" : "El conjunto de caracteres de PHP no está establecido en UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El set de caracteres usado por PHP no es UTF-8. Esto puede causar grandes problemas con nombres de archivos que contengan caracteres que no sean ASCII. Recomendamos encarecidamente cambiar el valor de 'default_charset' en php.ini a 'UTF-8'.",
"Locale not working" : "La configuración regional no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"URL generation in notification emails" : "Generación de URL en mensajes de notificación",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwritewebroot\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")",
+ "Configuration Checks" : "Comprobaciones de la configuración",
"No problems found" : "No se han encontrado problemas",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"Last cron was executed at %s." : "Cron fue ejecutado por última vez a las %s.",
@@ -132,17 +136,20 @@ OC.L10N.register(
"Allow users to share via link" : "Permite a los usuarios compartir por medio de enlaces",
"Enforce password protection" : "Forzar la protección por contraseña.",
"Allow public uploads" : "Permitir subidas públicas",
+ "Allow users to send mail notification for shared files" : "Permitir a los usuarios enviar mensajes de notificación para ficheros compartidos",
"Set default expiration date" : "Establecer fecha de caducidad predeterminada",
"Expire after " : "Caduca luego de",
"days" : "días",
"Enforce expiration date" : "Imponer fecha de caducidad",
"Allow resharing" : "Permitir re-compartición",
"Restrict users to only share with users in their groups" : "Restringe a los usuarios a compartir solo con otros usuarios en sus grupos",
- "Allow users to send mail notification for shared files" : "Permitir a los usuarios enviar mensajes de notificación para ficheros compartidos",
+ "Allow users to send mail notification for shared files to other users" : "Permitir a los usuarios enviar notificaciones por correo electronico de los archivos compartidos a otros usuarios",
"Exclude groups from sharing" : "Excluye grupos de compartir",
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán, pero no podrán iniciarlos.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar a los clientes a conectarse a %s por medio de una conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Obliga a los clientes a conectarse a %s y subdominios mediante una conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor, conéctese a su %s a través de HTTPS para habilitar o deshabilitar la aplicación de SSL.",
"This is used for sending out notifications." : "Esto se usa para enviar notificaciones.",
"Send mode" : "Modo de envío",
@@ -170,15 +177,22 @@ OC.L10N.register(
"Documentation:" : "Documentación:",
"User Documentation" : "Documentación de usuario",
"Admin Documentation" : "Documentación para administradores",
- "Update to %s" : "Actualizado a %s",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no se han cumplido:",
+ "Update to %s" : "Actualizar a %s",
"Enable only for specific groups" : "Activar solamente para grupos específicos",
"Uninstall App" : "Desinstalar aplicación",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "¿Qué tal?,<br><br>este mensaje es para hacerle saber que ahora tiene una %s cuenta.<br><br>Su nombre de usuario: %s<br>Acceda en: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, ¿qué tal?,\n\nEste mensaje es para hacerte saber que ahora tienes una cuenta %s.\n\nTu nombre de usuario: %s\nAccede en: %s\n\n",
"Administrator Documentation" : "Documentación de administrador",
"Online Documentation" : "Documentación en línea",
"Forum" : "Foro",
"Bugtracker" : "Rastreador de fallos",
"Commercial Support" : "Soporte comercial",
"Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "La aplicación de Android",
+ "iOS app" : "La aplicación de iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Si desea contribuir al proyecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">únase al desarrollo</a>\n\t\to\n\t\t¡<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">corra la voz</a>!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ha usado <strong>%s</strong> de los <strong>%s</strong> disponibles",
@@ -215,11 +229,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Eliminar claves de cifrado",
"Show storage location" : "Mostrar la ubicación del almacenamiento",
"Show last log in" : "Mostrar el último inicio de sesión",
- "Login Name" : "Nombre de usuario",
+ "Show user backend" : "Mostrar motor de usuario",
+ "Send email to new user" : "Enviar correo al usuario nuevo",
+ "Show email address" : "Mostrar dirección de correo electrónico",
+ "Username" : "Nombre de usuario",
+ "E-Mail" : "Correo electrónico",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña de administración",
"Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.",
- "Search Users and Groups" : "Buscar usuarios y grupos",
+ "Search Users" : "Buscar usuarios",
"Add Group" : "Agregar grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
@@ -228,13 +246,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indique la cúota de almacenamiento (ej: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Otro",
- "Username" : "Nombre de usuario",
"Group Admin for" : "Grupo administrador para",
"Quota" : "Cuota",
"Storage Location" : "Ubicación de almacenamiento",
+ "User Backend" : "Motor de usuario",
"Last Login" : "Último inicio de sesión",
"change full name" : "cambiar el nombre completo",
"set new password" : "establecer nueva contraseña",
+ "change email address" : "cambiar dirección de correo electrónico",
"Default" : "Predeterminado"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 892bb7ab0ba..bc30c9da3e8 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -8,18 +8,12 @@
"Authentication error" : "Error de autenticación",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Unable to change full name" : "No se puede cambiar el nombre completo",
- "Group already exists" : "El grupo ya existe",
- "Unable to add group" : "No se pudo añadir el grupo",
"Files decrypted successfully" : "Los archivos fueron descifrados",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "No se pudo descifrar sus archivos. Revise el owncloud.log o consulte con su administrador",
"Couldn't decrypt your files, check your password and try again" : "No se pudo descifrar sus archivos. Revise su contraseña e inténtelo de nuevo",
"Encryption keys deleted permanently" : "Claves de cifrado eliminadas permanentemente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "No se pudieron eliminar permanentemente sus claves de cifrado. Revise owncloud.log o consulte con su administrador.",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
- "Email saved" : "Correo electrónico guardado",
- "Invalid email" : "Correo electrónico no válido",
- "Unable to delete group" : "No se pudo eliminar el grupo",
- "Unable to delete user" : "No se pudo eliminar el usuario",
"Backups restored successfully" : "Copia de seguridad restaurada",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "No se pudieron restarurar sus claves de cifrado. Revise owncloud.log o consulte con su administrador.",
"Language changed" : "Idioma cambiado",
@@ -37,12 +31,23 @@
"Enabled" : "Habilitado",
"Not enabled" : "No habilitado",
"Recommended" : "Recomendado",
+ "Group already exists." : "El grupo ya existe.",
+ "Unable to add group." : "No se pudo agregar el grupo.",
+ "Unable to delete group." : "No se pudo eliminar el grupo.",
"Saved" : "Guardado",
"test email settings" : "probar configuración de correo electrónico",
"If you received this email, the settings seem to be correct." : "Si recibió este mensaje de correo electrónico, su configuración debe estar correcta.",
"A problem occurred while sending the email. Please revise your settings." : "Ocurrió un problema al mandar el mensaje. Revise la configuración.",
"Email sent" : "Correo electrónico enviado",
"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 mail address" : "Dirección de correo inválida",
+ "Unable to create user." : "No se pudo crear el usuario.",
+ "Your %s account was created" : "Su %s cuenta fue creada",
+ "Unable to delete user." : "No se pudo eliminar el usuario.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario no válido",
+ "Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico",
+ "Email saved" : "Correo electrónico guardado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
"Sending..." : "Enviando...",
@@ -73,7 +78,7 @@
"Unable to delete {objName}" : "No es posible eliminar {objName}",
"Error creating group" : "Error al crear un grupo",
"A valid group name must be provided" : "Se debe dar un nombre válido para el grupo ",
- "deleted {groupName}" : "borrado {groupName}",
+ "deleted {groupName}" : "{groupName} eliminado",
"undo" : "deshacer",
"no group" : "sin grupo",
"never" : "nunca",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"Error creating user" : "Error al crear usuario",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atención: el directorio de inicio para el usuario \"{user}\" ya existe.",
+ "A valid email must be provided" : "Se debe brindar una dirección de correo electrónico válida ",
"__language_name__" : "Castellano",
"Personal Info" : "Información personal",
"SSL root certificates" : "Certificados raíz SSL",
@@ -100,24 +105,23 @@
"TLS" : "TLS",
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a %s vía HTTP. Le recomendamos encarecidamente que configure su servidor para que requiera HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
+ "Read-Only config enabled" : "Configuración de solo lectura activada",
+ "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." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.",
"Setup Warning" : "Advertencia de configuración",
- "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones del principales no estén accesibles.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto sea causado por un cache o acelerador, como por ejemplo Zend OPcache o eAccelerator.",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.",
"Database Performance Info" : "Información de rendimiento de la base de datos",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Se está usando SQLite como base de datos. Para instalaciones más grandes, recomendamos cambiar esto. Para migrar a otra base de datos, use la herramienta de línea de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP no está actualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"PHP charset is not set to UTF-8" : "El conjunto de caracteres de PHP no está establecido en UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El set de caracteres usado por PHP no es UTF-8. Esto puede causar grandes problemas con nombres de archivos que contengan caracteres que no sean ASCII. Recomendamos encarecidamente cambiar el valor de 'default_charset' en php.ini a 'UTF-8'.",
"Locale not working" : "La configuración regional no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"URL generation in notification emails" : "Generación de URL en mensajes de notificación",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwritewebroot\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")",
+ "Configuration Checks" : "Comprobaciones de la configuración",
"No problems found" : "No se han encontrado problemas",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"Last cron was executed at %s." : "Cron fue ejecutado por última vez a las %s.",
@@ -130,17 +134,20 @@
"Allow users to share via link" : "Permite a los usuarios compartir por medio de enlaces",
"Enforce password protection" : "Forzar la protección por contraseña.",
"Allow public uploads" : "Permitir subidas públicas",
+ "Allow users to send mail notification for shared files" : "Permitir a los usuarios enviar mensajes de notificación para ficheros compartidos",
"Set default expiration date" : "Establecer fecha de caducidad predeterminada",
"Expire after " : "Caduca luego de",
"days" : "días",
"Enforce expiration date" : "Imponer fecha de caducidad",
"Allow resharing" : "Permitir re-compartición",
"Restrict users to only share with users in their groups" : "Restringe a los usuarios a compartir solo con otros usuarios en sus grupos",
- "Allow users to send mail notification for shared files" : "Permitir a los usuarios enviar mensajes de notificación para ficheros compartidos",
+ "Allow users to send mail notification for shared files to other users" : "Permitir a los usuarios enviar notificaciones por correo electronico de los archivos compartidos a otros usuarios",
"Exclude groups from sharing" : "Excluye grupos de compartir",
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán, pero no podrán iniciarlos.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar a los clientes a conectarse a %s por medio de una conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Obliga a los clientes a conectarse a %s y subdominios mediante una conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor, conéctese a su %s a través de HTTPS para habilitar o deshabilitar la aplicación de SSL.",
"This is used for sending out notifications." : "Esto se usa para enviar notificaciones.",
"Send mode" : "Modo de envío",
@@ -168,15 +175,22 @@
"Documentation:" : "Documentación:",
"User Documentation" : "Documentación de usuario",
"Admin Documentation" : "Documentación para administradores",
- "Update to %s" : "Actualizado a %s",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no se han cumplido:",
+ "Update to %s" : "Actualizar a %s",
"Enable only for specific groups" : "Activar solamente para grupos específicos",
"Uninstall App" : "Desinstalar aplicación",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "¿Qué tal?,<br><br>este mensaje es para hacerle saber que ahora tiene una %s cuenta.<br><br>Su nombre de usuario: %s<br>Acceda en: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, ¿qué tal?,\n\nEste mensaje es para hacerte saber que ahora tienes una cuenta %s.\n\nTu nombre de usuario: %s\nAccede en: %s\n\n",
"Administrator Documentation" : "Documentación de administrador",
"Online Documentation" : "Documentación en línea",
"Forum" : "Foro",
"Bugtracker" : "Rastreador de fallos",
"Commercial Support" : "Soporte comercial",
"Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "La aplicación de Android",
+ "iOS app" : "La aplicación de iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Si desea contribuir al proyecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">únase al desarrollo</a>\n\t\to\n\t\t¡<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">corra la voz</a>!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ha usado <strong>%s</strong> de los <strong>%s</strong> disponibles",
@@ -213,11 +227,15 @@
"Delete Encryption Keys" : "Eliminar claves de cifrado",
"Show storage location" : "Mostrar la ubicación del almacenamiento",
"Show last log in" : "Mostrar el último inicio de sesión",
- "Login Name" : "Nombre de usuario",
+ "Show user backend" : "Mostrar motor de usuario",
+ "Send email to new user" : "Enviar correo al usuario nuevo",
+ "Show email address" : "Mostrar dirección de correo electrónico",
+ "Username" : "Nombre de usuario",
+ "E-Mail" : "Correo electrónico",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña de administración",
"Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.",
- "Search Users and Groups" : "Buscar usuarios y grupos",
+ "Search Users" : "Buscar usuarios",
"Add Group" : "Agregar grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
@@ -226,13 +244,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indique la cúota de almacenamiento (ej: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Otro",
- "Username" : "Nombre de usuario",
"Group Admin for" : "Grupo administrador para",
"Quota" : "Cuota",
"Storage Location" : "Ubicación de almacenamiento",
+ "User Backend" : "Motor de usuario",
"Last Login" : "Último inicio de sesión",
"change full name" : "cambiar el nombre completo",
"set new password" : "establecer nueva contraseña",
+ "change email address" : "cambiar dirección de correo electrónico",
"Default" : "Predeterminado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index 40b019f5c64..dadc67aa35d 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -9,13 +9,7 @@ OC.L10N.register(
"Authentication error" : "Error al autenticar",
"Your full name has been changed." : "Su nombre completo ha sido cambiado.",
"Unable to change full name" : "Imposible cambiar el nombre completo",
- "Group already exists" : "El grupo ya existe",
- "Unable to add group" : "No fue posible añadir el grupo",
"Files decrypted successfully" : "Archivos des-encriptados correctamente",
- "Email saved" : "e-mail guardado",
- "Invalid email" : "El e-mail no es válido ",
- "Unable to delete group" : "No fue posible borrar el grupo",
- "Unable to delete user" : "No fue posible borrar el usuario",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Pedido inválido",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
@@ -34,6 +28,7 @@ OC.L10N.register(
"If you received this email, the settings seem to be correct." : "Si recibió este correo, la configuración parece estar correcta.",
"Email sent" : "e-mail mandado",
"You need to set your user email before being able to send test emails." : "Necesita especificar el usuario de correo electrónico antes de poder enviar correos electrónicos de prueba.",
+ "Email saved" : "e-mail guardado",
"Sending..." : "Enviando...",
"All" : "Todos",
"Please wait...." : "Por favor, esperá....",
@@ -59,7 +54,6 @@ OC.L10N.register(
"A valid username must be provided" : "Debe ingresar un nombre de usuario válido",
"Error creating user" : "Error creando usuario",
"A valid password must be provided" : "Debe ingresar una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Advertencia: El directorio Home del usuario \"{user}\" ya existe",
"__language_name__" : "Castellano (Argentina)",
"SSL root certificates" : "certificados SSL raíz",
"Encryption" : "Encriptación",
@@ -76,23 +70,19 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accediendo %s vía HTTP. Se sugiere fuertemente que configure su servidor para requerir el uso de HTTPS en vez del otro.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El directorio de datos y tus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no funciona. Sugerimos fuertemente que configures tu servidor web de forma tal que el archivo de directorios no sea accesible o muevas el mismo fuera de la raíz de los documentos del servidor web.",
"Setup Warning" : "Alerta de Configuración",
"Module 'fileinfo' missing" : "El módulo 'fileinfo' no existe",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El módulo PHP 'fileinfo' no existe. Es recomendable que actives este módulo para obtener mejores resultados con la detección mime-type",
- "Your PHP version is outdated" : "Su versión de PHP está fuera de término",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP está fuera de término. Recomendamos fuertemente actualizar a 5.3.8 o a una más nueva porque se sabe que versiones anteriores están falladas. Es posible que esta instalación no funcione adecuadamente.",
"Locale not working" : "\"Locale\" no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "La localización del sistema no puede cambiarse a una que soporta UTF-8",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de archivos.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Se sugiere fuertemente instalar los paquetes requeridos en su sistema para soportar uno de las siguientes localizaciones: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprobá nuevamente la <a href='%s'>guía de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutá una tarea con cada pagina cargada.",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamarlo cada 15 minutos usando http.",
"Allow apps to use the Share API" : "Permitir a las aplicaciones usar la Share API",
"Allow public uploads" : "Permitir subidas públicas",
- "Allow resharing" : "Permitir Re-Compartir",
"Allow users to send mail notification for shared files" : "Habilitar a los usuarios para enviar notificaciones por correo para archivos compartidos",
+ "Allow resharing" : "Permitir Re-Compartir",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Fuerza al cliente a conectarse a %s por medio de una conexión encriptada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor conéctese a su %s por medio de HTTPS para habilitar o deshabilitar la característica SSL",
@@ -117,6 +107,7 @@ OC.L10N.register(
"Documentation:" : "Documentación:",
"User Documentation" : "Documentación de Usuario",
"Admin Documentation" : "Documentación de Administrador.",
+ "Cheers!" : "¡Saludos!",
"Administrator Documentation" : "Documentación de Administrador",
"Online Documentation" : "Documentación en línea",
"Forum" : "Foro",
@@ -149,7 +140,7 @@ OC.L10N.register(
"The encryption app is no longer enabled, please decrypt all your files" : "La aplicación de encriptación ya no está habilidata, por favor desencripte todos sus archivos.",
"Log-in password" : "Clave de acceso",
"Decrypt all Files" : "Desencriptar todos los archivos",
- "Login Name" : "Nombre de Usuario",
+ "Username" : "Nombre de usuario",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de contraseña de administrador",
"Enter the recovery password in order to recover the users files during password change" : "Ingresá la contraseña de recuperación para recuperar los archivos de usuario al cambiar contraseña",
@@ -158,7 +149,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor ingrese la cuota de almacenamiento (ej.: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Otros",
- "Username" : "Nombre de usuario",
"Quota" : "Cuota",
"change full name" : "Cambiar nombre completo",
"set new password" : "Configurar nueva contraseña",
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index a175d140958..3078702c1cb 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -7,13 +7,7 @@
"Authentication error" : "Error al autenticar",
"Your full name has been changed." : "Su nombre completo ha sido cambiado.",
"Unable to change full name" : "Imposible cambiar el nombre completo",
- "Group already exists" : "El grupo ya existe",
- "Unable to add group" : "No fue posible añadir el grupo",
"Files decrypted successfully" : "Archivos des-encriptados correctamente",
- "Email saved" : "e-mail guardado",
- "Invalid email" : "El e-mail no es válido ",
- "Unable to delete group" : "No fue posible borrar el grupo",
- "Unable to delete user" : "No fue posible borrar el usuario",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Pedido inválido",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
@@ -32,6 +26,7 @@
"If you received this email, the settings seem to be correct." : "Si recibió este correo, la configuración parece estar correcta.",
"Email sent" : "e-mail mandado",
"You need to set your user email before being able to send test emails." : "Necesita especificar el usuario de correo electrónico antes de poder enviar correos electrónicos de prueba.",
+ "Email saved" : "e-mail guardado",
"Sending..." : "Enviando...",
"All" : "Todos",
"Please wait...." : "Por favor, esperá....",
@@ -57,7 +52,6 @@
"A valid username must be provided" : "Debe ingresar un nombre de usuario válido",
"Error creating user" : "Error creando usuario",
"A valid password must be provided" : "Debe ingresar una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Advertencia: El directorio Home del usuario \"{user}\" ya existe",
"__language_name__" : "Castellano (Argentina)",
"SSL root certificates" : "certificados SSL raíz",
"Encryption" : "Encriptación",
@@ -74,23 +68,19 @@
"TLS" : "TLS",
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accediendo %s vía HTTP. Se sugiere fuertemente que configure su servidor para requerir el uso de HTTPS en vez del otro.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "El directorio de datos y tus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no funciona. Sugerimos fuertemente que configures tu servidor web de forma tal que el archivo de directorios no sea accesible o muevas el mismo fuera de la raíz de los documentos del servidor web.",
"Setup Warning" : "Alerta de Configuración",
"Module 'fileinfo' missing" : "El módulo 'fileinfo' no existe",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El módulo PHP 'fileinfo' no existe. Es recomendable que actives este módulo para obtener mejores resultados con la detección mime-type",
- "Your PHP version is outdated" : "Su versión de PHP está fuera de término",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP está fuera de término. Recomendamos fuertemente actualizar a 5.3.8 o a una más nueva porque se sabe que versiones anteriores están falladas. Es posible que esta instalación no funcione adecuadamente.",
"Locale not working" : "\"Locale\" no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "La localización del sistema no puede cambiarse a una que soporta UTF-8",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de archivos.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Se sugiere fuertemente instalar los paquetes requeridos en su sistema para soportar uno de las siguientes localizaciones: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprobá nuevamente la <a href='%s'>guía de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutá una tarea con cada pagina cargada.",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamarlo cada 15 minutos usando http.",
"Allow apps to use the Share API" : "Permitir a las aplicaciones usar la Share API",
"Allow public uploads" : "Permitir subidas públicas",
- "Allow resharing" : "Permitir Re-Compartir",
"Allow users to send mail notification for shared files" : "Habilitar a los usuarios para enviar notificaciones por correo para archivos compartidos",
+ "Allow resharing" : "Permitir Re-Compartir",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Fuerza al cliente a conectarse a %s por medio de una conexión encriptada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor conéctese a su %s por medio de HTTPS para habilitar o deshabilitar la característica SSL",
@@ -115,6 +105,7 @@
"Documentation:" : "Documentación:",
"User Documentation" : "Documentación de Usuario",
"Admin Documentation" : "Documentación de Administrador.",
+ "Cheers!" : "¡Saludos!",
"Administrator Documentation" : "Documentación de Administrador",
"Online Documentation" : "Documentación en línea",
"Forum" : "Foro",
@@ -147,7 +138,7 @@
"The encryption app is no longer enabled, please decrypt all your files" : "La aplicación de encriptación ya no está habilidata, por favor desencripte todos sus archivos.",
"Log-in password" : "Clave de acceso",
"Decrypt all Files" : "Desencriptar todos los archivos",
- "Login Name" : "Nombre de Usuario",
+ "Username" : "Nombre de usuario",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de contraseña de administrador",
"Enter the recovery password in order to recover the users files during password change" : "Ingresá la contraseña de recuperación para recuperar los archivos de usuario al cambiar contraseña",
@@ -156,7 +147,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor ingrese la cuota de almacenamiento (ej.: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Otros",
- "Username" : "Nombre de usuario",
"Quota" : "Cuota",
"change full name" : "Cambiar nombre completo",
"set new password" : "Configurar nueva contraseña",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index 3d117c76eef..b74457cd63b 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -8,12 +8,6 @@ OC.L10N.register(
"Authentication error" : "Error de autenticación",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Unable to change full name" : "No se puede cambiar el nombre completo",
- "Group already exists" : "El grupo ya existe",
- "Unable to add group" : "No se pudo añadir el grupo",
- "Email saved" : "Correo electrónico guardado",
- "Invalid email" : "Correo electrónico no válido",
- "Unable to delete group" : "No se pudo eliminar el grupo",
- "Unable to delete user" : "No se pudo eliminar el usuario",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Petición no válida",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
@@ -28,6 +22,7 @@ OC.L10N.register(
"Unable to change password" : "No se ha podido cambiar la contraseña",
"Enabled" : "Habilitar",
"Email sent" : "Correo electrónico enviado",
+ "Email saved" : "Correo electrónico guardado",
"All" : "Todos",
"Please wait...." : "Espere, por favor....",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -47,7 +42,6 @@ OC.L10N.register(
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"Error creating user" : "Error al crear usuario",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atención: el directorio de inicio para el usuario \"{user}\" ya existe.",
"__language_name__" : "Español (México)",
"SSL root certificates" : "Certificados raíz SSL",
"Encryption" : "Cifrado",
@@ -59,16 +53,12 @@ OC.L10N.register(
"Login" : "Iniciar sesión",
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a %s vía HTTP. Le recomendamos encarecidamente que configure su servidor para que requiera HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
"Setup Warning" : "Advertencia de configuración",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP ha caducado",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"Locale not working" : "La configuración regional no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
@@ -87,6 +77,7 @@ OC.L10N.register(
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Desarrollado por la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidad ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">código fuente</a> está bajo licencia <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"by" : "por",
"User Documentation" : "Documentación de usuario",
+ "Cheers!" : "¡Saludos!",
"Administrator Documentation" : "Documentación de administrador",
"Online Documentation" : "Documentación en línea",
"Forum" : "Foro",
@@ -118,14 +109,13 @@ OC.L10N.register(
"The encryption app is no longer enabled, please decrypt all your files" : "La aplicación de cifrado ya no está activada, descifre todos sus archivos",
"Log-in password" : "Contraseña de acceso",
"Decrypt all Files" : "Descifrar archivos",
- "Login Name" : "Nombre de usuario",
+ "Username" : "Nombre de usuario",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña de administración",
"Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indique la cúota de almacenamiento (ej: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Otro",
- "Username" : "Nombre de usuario",
"change full name" : "cambiar el nombre completo",
"set new password" : "establecer nueva contraseña",
"Default" : "Predeterminado"
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index 6f8de71f433..e6842c4e67f 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -6,12 +6,6 @@
"Authentication error" : "Error de autenticación",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Unable to change full name" : "No se puede cambiar el nombre completo",
- "Group already exists" : "El grupo ya existe",
- "Unable to add group" : "No se pudo añadir el grupo",
- "Email saved" : "Correo electrónico guardado",
- "Invalid email" : "Correo electrónico no válido",
- "Unable to delete group" : "No se pudo eliminar el grupo",
- "Unable to delete user" : "No se pudo eliminar el usuario",
"Language changed" : "Idioma cambiado",
"Invalid request" : "Petición no válida",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
@@ -26,6 +20,7 @@
"Unable to change password" : "No se ha podido cambiar la contraseña",
"Enabled" : "Habilitar",
"Email sent" : "Correo electrónico enviado",
+ "Email saved" : "Correo electrónico guardado",
"All" : "Todos",
"Please wait...." : "Espere, por favor....",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
@@ -45,7 +40,6 @@
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
"Error creating user" : "Error al crear usuario",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atención: el directorio de inicio para el usuario \"{user}\" ya existe.",
"__language_name__" : "Español (México)",
"SSL root certificates" : "Certificados raíz SSL",
"Encryption" : "Cifrado",
@@ -57,16 +51,12 @@
"Login" : "Iniciar sesión",
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a %s vía HTTP. Le recomendamos encarecidamente que configure su servidor para que requiera HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
"Setup Warning" : "Advertencia de configuración",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP ha caducado",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"Locale not working" : "La configuración regional no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
@@ -85,6 +75,7 @@
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Desarrollado por la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidad ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">código fuente</a> está bajo licencia <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"by" : "por",
"User Documentation" : "Documentación de usuario",
+ "Cheers!" : "¡Saludos!",
"Administrator Documentation" : "Documentación de administrador",
"Online Documentation" : "Documentación en línea",
"Forum" : "Foro",
@@ -116,14 +107,13 @@
"The encryption app is no longer enabled, please decrypt all your files" : "La aplicación de cifrado ya no está activada, descifre todos sus archivos",
"Log-in password" : "Contraseña de acceso",
"Decrypt all Files" : "Descifrar archivos",
- "Login Name" : "Nombre de usuario",
+ "Username" : "Nombre de usuario",
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña de administración",
"Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indique la cúota de almacenamiento (ej: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Otro",
- "Username" : "Nombre de usuario",
"change full name" : "cambiar el nombre completo",
"set new password" : "establecer nueva contraseña",
"Default" : "Predeterminado"
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index f19283c5736..b0c08b7183b 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Autentimise viga",
"Your full name has been changed." : "Sinu täispikk nimi on muudetud.",
"Unable to change full name" : "Täispika nime muutmine ebaõnnestus",
- "Group already exists" : "Grupp on juba olemas",
- "Unable to add group" : "Keela grupi lisamine",
"Files decrypted successfully" : "Failide krüpteerimine õnnestus",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Ei suutnud faile dekrüpteerida, palun kontrolli oma owncloud.log-i või küsi nõu administraatorilt",
"Couldn't decrypt your files, check your password and try again" : "Ei suutnud failde dekrüpteerida, kontrolli parooli ja proovi uuesti",
"Encryption keys deleted permanently" : "Krüpteerimisvõtmed kustutatud lõplikult",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Ei suutnud lõplikult kustutada sinu krüpteerimisvõtmeid, palun vaata owncloud.log-i või pöördu oma süsteemihalduri poole.",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
- "Email saved" : "Kiri on salvestatud",
- "Invalid email" : "Vigane e-post",
- "Unable to delete group" : "Grupi kustutamine ebaõnnestus",
- "Unable to delete user" : "Kasutaja kustutamine ebaõnnestus",
"Backups restored successfully" : "Varukoopiad taastatud edukalt.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Ei suutnud taastada sinu krüpteerimisvõtmeid, palun vaata owncloud.log-i või pöördu oma süsteemihalduri poole.",
"Language changed" : "Keel on muudetud",
@@ -45,6 +39,7 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Kirja saatmisel tekkis tõrge. Palun kontrolli üle oma seadistus.",
"Email sent" : "E-kiri on saadetud",
"You need to set your user email before being able to send test emails." : "Pead seadistama oma e-postienne kui on võimalik saata test-kirju.",
+ "Email saved" : "Kiri on salvestatud",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
"Add trusted domain" : "Lis ausaldusväärne domeen",
"Sending..." : "Saadan...",
@@ -84,7 +79,6 @@ OC.L10N.register(
"A valid username must be provided" : "Sisesta nõuetele vastav kasutajatunnus",
"Error creating user" : "Viga kasutaja loomisel",
"A valid password must be provided" : "Sisesta nõuetele vastav parool",
- "Warning: Home directory for user \"{user}\" already exists" : "Hoiatus: kasutaja \"{user}\" kodukataloog on juba olemas",
"__language_name__" : "Eesti",
"Personal Info" : "Isiklik info",
"SSL root certificates" : "SSL root sertifikaadid",
@@ -102,7 +96,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Turvahoiatus",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sa kasutad %s ligipääsuks HTTP protokolli. Soovitame tungivalt seadistada oma server selle asemel kasutama HTTPS-i.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Andmete kataloog ja failid on tõenäoliselt internetis avalikult saadaval. .htaccess fail, ei toimi. Soovitame tungivalt veebiserver seadistada selliselt, et andmete kataloog ei oleks enam vabalt saadaval või tõstaksid andmete kataloogi oma veebiserveri veebi juurkataloogist mujale.",
"Setup Warning" : "Paigalduse hoiatus",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP on seadistatud eemaldama \"inline\" dokumendi blokke. See muudab mõned rakendid kasutamatuteks.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "See on tõenäoliselt põhjustatud puhver/kiirendist nagu Zend OPcache või eAccelerator.",
@@ -110,17 +103,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Andmebaasina kasutatakse SQLite-t. Suuremate paigalduste puhul me soovitame seda muuta. Migreerimaks teisele andmebaasile kasuta seda käsurea vahendit: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Moodul 'fileinfo' puudub",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.",
- "Your PHP version is outdated" : "PHP versioon on aegunud",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Sinu PHP versioon on aegunud. Soovitame tungivalt uuenda versioonile 5.3.8 või uuemale, kuna varasemad versioonid on teadaolevalt vigased. On võimalik, et see käesolev paigaldus ei toimi korrektselt.",
"PHP charset is not set to UTF-8" : "PHP märgistik pole UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP märgistikuks pole määratud UTF-8. See võib tekitada failinimedes mitte-ASCII märkidega suuri probleeme. Me soovitame tungivalt panna failis php.ini sätte 'default_charset' väärtuseks 'UTF-8'.",
"Locale not working" : "Lokalisatsioon ei toimi",
"System locale can not be set to a one which supports UTF-8." : "Süsteemi lokaliseeringuks ei saa panna sellist, mis toetab UTF-8-t.",
"This means that there might be problems with certain characters in file names." : "See tähendab, et võib esineda probleeme failide nimedes mõnede sümbolitega.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Soovitame tungivalt paigaldada vajalikud paketid oma süsteemi tagamaks tuge järgmistele lokaliseeringutele: %s.",
"URL generation in notification emails" : "URL-ide loomine teavituskirjades",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Kui sinu sait pole paigaldatud domeeni juurkausta ja see kasutab ajastatud tegevusi, siis võib tekkide probleeme URL-ide loomisega. Nende probleemide vältimiseks sisesta palun failis config.php valikusse \"overwritewebroot\" oma veebiserveri juurkaust (Soovituslik: \"%s\")",
- "Connectivity Checks" : "Ühenduse kontrollid",
"No problems found" : "Ühtegi probleemi ei leitud",
"Please double check the <a href='%s'>installation guides</a>." : "Palun tutvu veelkord <a href='%s'>paigalduse juhenditega</a>.",
"Last cron was executed at %s." : "Cron käivitati viimati %s.",
@@ -133,17 +121,19 @@ OC.L10N.register(
"Allow users to share via link" : "Luba kasutajatel lingiga jagamist ",
"Enforce password protection" : "Sunni parooliga kaitsmist",
"Allow public uploads" : "Luba avalikud üleslaadimised",
+ "Allow users to send mail notification for shared files" : "Luba kasutajatel saata e-posti teavitusi jagatud failide kohta",
"Set default expiration date" : "Määra vaikimisi aegumise kuupäev",
"Expire after " : "Aegu pärast",
"days" : "päeva",
"Enforce expiration date" : "Sunnitud aegumise kuupäev",
"Allow resharing" : "Luba edasijagamine",
"Restrict users to only share with users in their groups" : "Luba kasutajatel jagada kasutajatega ainult oma grupi piires",
- "Allow users to send mail notification for shared files" : "Luba kasutajatel saata e-posti teavitusi jagatud failide kohta",
"Exclude groups from sharing" : "Eemalda grupid jagamisest",
"These groups will still be able to receive shares, but not to initiate them." : "Need grupid saavad vastu võtta jagamisi, kuid ise jagamisi algatada ei saa.",
"Enforce HTTPS" : "Sunni peale HTTPS-i kasutamine",
"Forces the clients to connect to %s via an encrypted connection." : "Sunnib kliente %s ühenduma krüpteeritult.",
+ "Enforce HTTPS for subdomains" : "Sunni peale HTTPS-i kasutamine",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Sunnib kliente ühenduma domeeniga %s ja selle alamdomeenidega krüpteeritult.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Palun ühendu oma %s üle HTTPS või keela SSL kasutamine.",
"This is used for sending out notifications." : "Seda kasutatakse teadete välja saatmiseks.",
"Send mode" : "Saatmise viis",
@@ -174,6 +164,7 @@ OC.L10N.register(
"Update to %s" : "Uuenda versioonile %s",
"Enable only for specific groups" : "Luba ainult kindlad grupid",
"Uninstall App" : "Eemada rakend",
+ "Cheers!" : "Terekest!",
"Administrator Documentation" : "Administraatori dokumentatsioon",
"Online Documentation" : "Online dokumentatsioon",
"Forum" : "Foorum",
@@ -216,11 +207,10 @@ OC.L10N.register(
"Delete Encryption Keys" : "Kustuta krüpteerimisvõtmed",
"Show storage location" : "Näita salvestusruumi asukohta",
"Show last log in" : "Viimane sisselogimine",
- "Login Name" : "Kasutajanimi",
+ "Username" : "Kasutajanimi",
"Create" : "Lisa",
"Admin Recovery Password" : "Admini parooli taastamine",
"Enter the recovery password in order to recover the users files during password change" : "Sisesta taasteparool kasutaja failide taastamiseks paroolivahetuse käigus",
- "Search Users and Groups" : "Otsi kasutajaid ja gruppe",
"Add Group" : "Lisa grupp",
"Group" : "Grupp",
"Everyone" : "Igaüks",
@@ -229,7 +219,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Palun sisesta mahupiir (nt: \"512 MB\" või \"12 GB\")",
"Unlimited" : "Piiramatult",
"Other" : "Muu",
- "Username" : "Kasutajanimi",
"Group Admin for" : "Grupi admin",
"Quota" : "Mahupiir",
"Storage Location" : "Mahu asukoht",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index b8390b7eac2..fea9f79bf2b 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -8,18 +8,12 @@
"Authentication error" : "Autentimise viga",
"Your full name has been changed." : "Sinu täispikk nimi on muudetud.",
"Unable to change full name" : "Täispika nime muutmine ebaõnnestus",
- "Group already exists" : "Grupp on juba olemas",
- "Unable to add group" : "Keela grupi lisamine",
"Files decrypted successfully" : "Failide krüpteerimine õnnestus",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Ei suutnud faile dekrüpteerida, palun kontrolli oma owncloud.log-i või küsi nõu administraatorilt",
"Couldn't decrypt your files, check your password and try again" : "Ei suutnud failde dekrüpteerida, kontrolli parooli ja proovi uuesti",
"Encryption keys deleted permanently" : "Krüpteerimisvõtmed kustutatud lõplikult",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Ei suutnud lõplikult kustutada sinu krüpteerimisvõtmeid, palun vaata owncloud.log-i või pöördu oma süsteemihalduri poole.",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
- "Email saved" : "Kiri on salvestatud",
- "Invalid email" : "Vigane e-post",
- "Unable to delete group" : "Grupi kustutamine ebaõnnestus",
- "Unable to delete user" : "Kasutaja kustutamine ebaõnnestus",
"Backups restored successfully" : "Varukoopiad taastatud edukalt.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Ei suutnud taastada sinu krüpteerimisvõtmeid, palun vaata owncloud.log-i või pöördu oma süsteemihalduri poole.",
"Language changed" : "Keel on muudetud",
@@ -43,6 +37,7 @@
"A problem occurred while sending the email. Please revise your settings." : "Kirja saatmisel tekkis tõrge. Palun kontrolli üle oma seadistus.",
"Email sent" : "E-kiri on saadetud",
"You need to set your user email before being able to send test emails." : "Pead seadistama oma e-postienne kui on võimalik saata test-kirju.",
+ "Email saved" : "Kiri on salvestatud",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
"Add trusted domain" : "Lis ausaldusväärne domeen",
"Sending..." : "Saadan...",
@@ -82,7 +77,6 @@
"A valid username must be provided" : "Sisesta nõuetele vastav kasutajatunnus",
"Error creating user" : "Viga kasutaja loomisel",
"A valid password must be provided" : "Sisesta nõuetele vastav parool",
- "Warning: Home directory for user \"{user}\" already exists" : "Hoiatus: kasutaja \"{user}\" kodukataloog on juba olemas",
"__language_name__" : "Eesti",
"Personal Info" : "Isiklik info",
"SSL root certificates" : "SSL root sertifikaadid",
@@ -100,7 +94,6 @@
"TLS" : "TLS",
"Security Warning" : "Turvahoiatus",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sa kasutad %s ligipääsuks HTTP protokolli. Soovitame tungivalt seadistada oma server selle asemel kasutama HTTPS-i.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Andmete kataloog ja failid on tõenäoliselt internetis avalikult saadaval. .htaccess fail, ei toimi. Soovitame tungivalt veebiserver seadistada selliselt, et andmete kataloog ei oleks enam vabalt saadaval või tõstaksid andmete kataloogi oma veebiserveri veebi juurkataloogist mujale.",
"Setup Warning" : "Paigalduse hoiatus",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP on seadistatud eemaldama \"inline\" dokumendi blokke. See muudab mõned rakendid kasutamatuteks.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "See on tõenäoliselt põhjustatud puhver/kiirendist nagu Zend OPcache või eAccelerator.",
@@ -108,17 +101,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Andmebaasina kasutatakse SQLite-t. Suuremate paigalduste puhul me soovitame seda muuta. Migreerimaks teisele andmebaasile kasuta seda käsurea vahendit: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Moodul 'fileinfo' puudub",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.",
- "Your PHP version is outdated" : "PHP versioon on aegunud",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Sinu PHP versioon on aegunud. Soovitame tungivalt uuenda versioonile 5.3.8 või uuemale, kuna varasemad versioonid on teadaolevalt vigased. On võimalik, et see käesolev paigaldus ei toimi korrektselt.",
"PHP charset is not set to UTF-8" : "PHP märgistik pole UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP märgistikuks pole määratud UTF-8. See võib tekitada failinimedes mitte-ASCII märkidega suuri probleeme. Me soovitame tungivalt panna failis php.ini sätte 'default_charset' väärtuseks 'UTF-8'.",
"Locale not working" : "Lokalisatsioon ei toimi",
"System locale can not be set to a one which supports UTF-8." : "Süsteemi lokaliseeringuks ei saa panna sellist, mis toetab UTF-8-t.",
"This means that there might be problems with certain characters in file names." : "See tähendab, et võib esineda probleeme failide nimedes mõnede sümbolitega.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Soovitame tungivalt paigaldada vajalikud paketid oma süsteemi tagamaks tuge järgmistele lokaliseeringutele: %s.",
"URL generation in notification emails" : "URL-ide loomine teavituskirjades",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Kui sinu sait pole paigaldatud domeeni juurkausta ja see kasutab ajastatud tegevusi, siis võib tekkide probleeme URL-ide loomisega. Nende probleemide vältimiseks sisesta palun failis config.php valikusse \"overwritewebroot\" oma veebiserveri juurkaust (Soovituslik: \"%s\")",
- "Connectivity Checks" : "Ühenduse kontrollid",
"No problems found" : "Ühtegi probleemi ei leitud",
"Please double check the <a href='%s'>installation guides</a>." : "Palun tutvu veelkord <a href='%s'>paigalduse juhenditega</a>.",
"Last cron was executed at %s." : "Cron käivitati viimati %s.",
@@ -131,17 +119,19 @@
"Allow users to share via link" : "Luba kasutajatel lingiga jagamist ",
"Enforce password protection" : "Sunni parooliga kaitsmist",
"Allow public uploads" : "Luba avalikud üleslaadimised",
+ "Allow users to send mail notification for shared files" : "Luba kasutajatel saata e-posti teavitusi jagatud failide kohta",
"Set default expiration date" : "Määra vaikimisi aegumise kuupäev",
"Expire after " : "Aegu pärast",
"days" : "päeva",
"Enforce expiration date" : "Sunnitud aegumise kuupäev",
"Allow resharing" : "Luba edasijagamine",
"Restrict users to only share with users in their groups" : "Luba kasutajatel jagada kasutajatega ainult oma grupi piires",
- "Allow users to send mail notification for shared files" : "Luba kasutajatel saata e-posti teavitusi jagatud failide kohta",
"Exclude groups from sharing" : "Eemalda grupid jagamisest",
"These groups will still be able to receive shares, but not to initiate them." : "Need grupid saavad vastu võtta jagamisi, kuid ise jagamisi algatada ei saa.",
"Enforce HTTPS" : "Sunni peale HTTPS-i kasutamine",
"Forces the clients to connect to %s via an encrypted connection." : "Sunnib kliente %s ühenduma krüpteeritult.",
+ "Enforce HTTPS for subdomains" : "Sunni peale HTTPS-i kasutamine",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Sunnib kliente ühenduma domeeniga %s ja selle alamdomeenidega krüpteeritult.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Palun ühendu oma %s üle HTTPS või keela SSL kasutamine.",
"This is used for sending out notifications." : "Seda kasutatakse teadete välja saatmiseks.",
"Send mode" : "Saatmise viis",
@@ -172,6 +162,7 @@
"Update to %s" : "Uuenda versioonile %s",
"Enable only for specific groups" : "Luba ainult kindlad grupid",
"Uninstall App" : "Eemada rakend",
+ "Cheers!" : "Terekest!",
"Administrator Documentation" : "Administraatori dokumentatsioon",
"Online Documentation" : "Online dokumentatsioon",
"Forum" : "Foorum",
@@ -214,11 +205,10 @@
"Delete Encryption Keys" : "Kustuta krüpteerimisvõtmed",
"Show storage location" : "Näita salvestusruumi asukohta",
"Show last log in" : "Viimane sisselogimine",
- "Login Name" : "Kasutajanimi",
+ "Username" : "Kasutajanimi",
"Create" : "Lisa",
"Admin Recovery Password" : "Admini parooli taastamine",
"Enter the recovery password in order to recover the users files during password change" : "Sisesta taasteparool kasutaja failide taastamiseks paroolivahetuse käigus",
- "Search Users and Groups" : "Otsi kasutajaid ja gruppe",
"Add Group" : "Lisa grupp",
"Group" : "Grupp",
"Everyone" : "Igaüks",
@@ -227,7 +217,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Palun sisesta mahupiir (nt: \"512 MB\" või \"12 GB\")",
"Unlimited" : "Piiramatult",
"Other" : "Muu",
- "Username" : "Kasutajanimi",
"Group Admin for" : "Grupi admin",
"Quota" : "Mahupiir",
"Storage Location" : "Mahu asukoht",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index bbf11f15ac8..081832129b3 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -9,18 +9,12 @@ OC.L10N.register(
"Authentication error" : "Autentifikazio errorea",
"Your full name has been changed." : "Zure izena aldatu egin da.",
"Unable to change full name" : "Ezin izan da izena aldatu",
- "Group already exists" : "Taldea dagoeneko existitzenda",
- "Unable to add group" : "Ezin izan da taldea gehitu",
"Files decrypted successfully" : "Fitxategiak ongi deskodetu dira.",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Ezin izan dira zure fitxategiak deskodetu, egiaztatu zure owncloud.log edo galdetu administratzaileari",
"Couldn't decrypt your files, check your password and try again" : "Ezin izan dira deskodetu zure fitxategiak, egiaztatu zure pasahitza eta saiatu berriz",
"Encryption keys deleted permanently" : "Enkriptatze gakoak behin betiko ezabatuak",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Ezin izan dira zure enkriptatze gakoak behin betiko ezabatu, egiaztatu zure owncloud.log edo galdetu administratzaileari",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
- "Email saved" : "Eposta gorde da",
- "Invalid email" : "Baliogabeko eposta",
- "Unable to delete group" : "Ezin izan da taldea ezabatu",
- "Unable to delete user" : "Ezin izan da erabiltzailea ezabatu",
"Backups restored successfully" : "Babeskopiak ongi leheneratu dira",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Ezin izan dira zure enkriptatze gakoak leheneratu, egiaztatu zure owncloud.log edo galdetu administratzaileari",
"Language changed" : "Hizkuntza aldatuta",
@@ -43,6 +37,7 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Arazo bat gertatu da eposta bidaltzean. Berrikusi zure ezarpenak.",
"Email sent" : "Eposta bidalia",
"You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
+ "Email saved" : "Eposta gorde da",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
@@ -82,7 +77,6 @@ OC.L10N.register(
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"Error creating user" : "Errore bat egon da erabiltzailea sortzean",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
- "Warning: Home directory for user \"{user}\" already exists" : "Abisua: \"{user}\" erabiltzailearen Home karpeta dagoeneko exisititzen da",
"__language_name__" : "Euskara",
"Personal Info" : "Informazio Pertsonala",
"SSL root certificates" : "SSL erro ziurtagiriak",
@@ -100,7 +94,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Segurtasun abisua",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s HTTP bidez erabiltzen ari zara. Aholkatzen dizugu zure zerbitzaria HTTPS erabil dezan.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Zure data karpeta eta zure fitxategiak internetetik zuzenean eskuragarri egon daitezke. .htaccess fitxategia ez du bere lana egiten. Aholkatzen dizugu zure web zerbitzaria ongi konfiguratzea data karpeta eskuragarri ez izateko edo data karpeta web zerbitzariaren dokumentu errotik mugitzea.",
"Setup Warning" : "Konfiguratu abisuak",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.",
@@ -108,16 +101,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite erabili da datu-base gisa. Instalazio handiagoetarako gomendatzen dugu aldatzea. Beste datu base batera migratzeko erabili komando-lerro tresna hau: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "'fileinfo' modulua falta da",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.",
- "Your PHP version is outdated" : "Zure PHP bertsioa zaharkituta dago",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Zure PHP bertsioa zaharkituta dago. Gure aholkua 5.3.8 edo bertsio berriago batera eguneratzea da, bertsio zaharragoak arazoak ematen baitituzte. Posible da instalazio honek ez funtzionatzea ongi.",
"PHP charset is not set to UTF-8" : "PHP charset ez da UTF-8 gisa ezartzen",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset ez da UTF-8 gisa ezartzen. Honek arazo larriak sor ditzake fitxategien izenetan ascii ez diren karaktereekin. Gomendatzen dizugu php.ini-ko 'default_charset'-en ordez 'UTF-8' ezartzea.",
"Locale not working" : "Lokala ez dabil",
"System locale can not be set to a one which supports UTF-8." : "Eskualdeko ezarpena ezin da UTF-8 onartzen duen batera ezarri.",
"This means that there might be problems with certain characters in file names." : "Honek esan nahi du fitxategien izenetako karaktere batzuekin arazoak egon daitezkeela.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Biziki gomendatzen dizugu beharrezkoak diren paketea zure sisteman instalatzea honi euskarria eman ahal izateko: %s.",
"URL generation in notification emails" : "URL sorrera jakinarazpen mezuetan",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Zure instalazioa ez badago domeinuaren sustraian egina eta erabiltzen badu sistemaren cron-a, arazoak izan daitezke URL sorreran. Arazo horiek saihesteko ezarri \"overwritewebroot\" opzioa zure config.php fitxategian zure instalazioaren webroot bidera (Proposatua: \"%s\")",
"No problems found" : "Ez da problemarik aurkitu",
"Please double check the <a href='%s'>installation guides</a>." : "Mesedez begiratu <a href='%s'>instalazio gidak</a>.",
"Last cron was executed at %s." : "Azken cron-a %s-etan exekutatu da",
@@ -130,13 +119,13 @@ OC.L10N.register(
"Allow users to share via link" : "Baimendu erabiltzaileak esteken bidez partekatzea",
"Enforce password protection" : "Betearazi pasahitzaren babesa",
"Allow public uploads" : "Baimendu igoera publikoak",
+ "Allow users to send mail notification for shared files" : "Baimendu erabiltzaileak epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
"Set default expiration date" : "Ezarri muga data lehenetsia",
"Expire after " : "Iraungia honen ondoren",
"days" : "egun",
"Enforce expiration date" : "Muga data betearazi",
"Allow resharing" : "Baimendu birpartekatzea",
"Restrict users to only share with users in their groups" : "Mugatu partekatzeak taldeko erabiltzaileetara",
- "Allow users to send mail notification for shared files" : "Baimendu erabiltzaileak epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
"Exclude groups from sharing" : "Baztertu taldeak partekatzean",
"These groups will still be able to receive shares, but not to initiate them." : "Talde hauek oraindik jaso ahal izango dute partekatzeak, baina ezingo dute partekatu",
"Enforce HTTPS" : "Behartu HTTPS",
@@ -170,6 +159,7 @@ OC.L10N.register(
"Update to %s" : "Eguneratu %sra",
"Enable only for specific groups" : "Baimendu bakarri talde espezifikoetarako",
"Uninstall App" : "Desinstalatu aplikazioa",
+ "Cheers!" : "Ongi izan!",
"Administrator Documentation" : "Administratzaile dokumentazioa",
"Online Documentation" : "Online dokumentazioa",
"Forum" : "Foroa",
@@ -209,11 +199,10 @@ OC.L10N.register(
"Delete Encryption Keys" : "Ezabatu enkriptatze gakoak",
"Show storage location" : "Erakutsi biltegiaren kokapena",
"Show last log in" : "Erakutsi azkeneko saio hasiera",
- "Login Name" : "Sarrera Izena",
+ "Username" : "Erabiltzaile izena",
"Create" : "Sortu",
"Admin Recovery Password" : "Administratzailearen pasahitza berreskuratzea",
"Enter the recovery password in order to recover the users files during password change" : "Berreskuratze pasahitza idatzi pasahitz aldaketan erabiltzaileen fitxategiak berreskuratzeko",
- "Search Users and Groups" : "Bilatu erabiltzaileak eta taldeak",
"Add Group" : "Gehitu taldea",
"Group" : "Taldea",
"Everyone" : "Edonor",
@@ -222,7 +211,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Mesedez sartu biltegiratze kouta (adb: \"512 MB\" edo \"12 GB\")",
"Unlimited" : "Mugarik gabe",
"Other" : "Bestelakoa",
- "Username" : "Erabiltzaile izena",
"Quota" : "Kuota",
"Storage Location" : "Biltegiaren kokapena",
"Last Login" : "Azken saio hasiera",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 5728074bbe4..865c1b680b2 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -7,18 +7,12 @@
"Authentication error" : "Autentifikazio errorea",
"Your full name has been changed." : "Zure izena aldatu egin da.",
"Unable to change full name" : "Ezin izan da izena aldatu",
- "Group already exists" : "Taldea dagoeneko existitzenda",
- "Unable to add group" : "Ezin izan da taldea gehitu",
"Files decrypted successfully" : "Fitxategiak ongi deskodetu dira.",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Ezin izan dira zure fitxategiak deskodetu, egiaztatu zure owncloud.log edo galdetu administratzaileari",
"Couldn't decrypt your files, check your password and try again" : "Ezin izan dira deskodetu zure fitxategiak, egiaztatu zure pasahitza eta saiatu berriz",
"Encryption keys deleted permanently" : "Enkriptatze gakoak behin betiko ezabatuak",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Ezin izan dira zure enkriptatze gakoak behin betiko ezabatu, egiaztatu zure owncloud.log edo galdetu administratzaileari",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
- "Email saved" : "Eposta gorde da",
- "Invalid email" : "Baliogabeko eposta",
- "Unable to delete group" : "Ezin izan da taldea ezabatu",
- "Unable to delete user" : "Ezin izan da erabiltzailea ezabatu",
"Backups restored successfully" : "Babeskopiak ongi leheneratu dira",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Ezin izan dira zure enkriptatze gakoak leheneratu, egiaztatu zure owncloud.log edo galdetu administratzaileari",
"Language changed" : "Hizkuntza aldatuta",
@@ -41,6 +35,7 @@
"A problem occurred while sending the email. Please revise your settings." : "Arazo bat gertatu da eposta bidaltzean. Berrikusi zure ezarpenak.",
"Email sent" : "Eposta bidalia",
"You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
+ "Email saved" : "Eposta gorde da",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
@@ -80,7 +75,6 @@
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"Error creating user" : "Errore bat egon da erabiltzailea sortzean",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
- "Warning: Home directory for user \"{user}\" already exists" : "Abisua: \"{user}\" erabiltzailearen Home karpeta dagoeneko exisititzen da",
"__language_name__" : "Euskara",
"Personal Info" : "Informazio Pertsonala",
"SSL root certificates" : "SSL erro ziurtagiriak",
@@ -98,7 +92,6 @@
"TLS" : "TLS",
"Security Warning" : "Segurtasun abisua",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s HTTP bidez erabiltzen ari zara. Aholkatzen dizugu zure zerbitzaria HTTPS erabil dezan.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Zure data karpeta eta zure fitxategiak internetetik zuzenean eskuragarri egon daitezke. .htaccess fitxategia ez du bere lana egiten. Aholkatzen dizugu zure web zerbitzaria ongi konfiguratzea data karpeta eskuragarri ez izateko edo data karpeta web zerbitzariaren dokumentu errotik mugitzea.",
"Setup Warning" : "Konfiguratu abisuak",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.",
@@ -106,16 +99,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite erabili da datu-base gisa. Instalazio handiagoetarako gomendatzen dugu aldatzea. Beste datu base batera migratzeko erabili komando-lerro tresna hau: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "'fileinfo' modulua falta da",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.",
- "Your PHP version is outdated" : "Zure PHP bertsioa zaharkituta dago",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Zure PHP bertsioa zaharkituta dago. Gure aholkua 5.3.8 edo bertsio berriago batera eguneratzea da, bertsio zaharragoak arazoak ematen baitituzte. Posible da instalazio honek ez funtzionatzea ongi.",
"PHP charset is not set to UTF-8" : "PHP charset ez da UTF-8 gisa ezartzen",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset ez da UTF-8 gisa ezartzen. Honek arazo larriak sor ditzake fitxategien izenetan ascii ez diren karaktereekin. Gomendatzen dizugu php.ini-ko 'default_charset'-en ordez 'UTF-8' ezartzea.",
"Locale not working" : "Lokala ez dabil",
"System locale can not be set to a one which supports UTF-8." : "Eskualdeko ezarpena ezin da UTF-8 onartzen duen batera ezarri.",
"This means that there might be problems with certain characters in file names." : "Honek esan nahi du fitxategien izenetako karaktere batzuekin arazoak egon daitezkeela.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Biziki gomendatzen dizugu beharrezkoak diren paketea zure sisteman instalatzea honi euskarria eman ahal izateko: %s.",
"URL generation in notification emails" : "URL sorrera jakinarazpen mezuetan",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Zure instalazioa ez badago domeinuaren sustraian egina eta erabiltzen badu sistemaren cron-a, arazoak izan daitezke URL sorreran. Arazo horiek saihesteko ezarri \"overwritewebroot\" opzioa zure config.php fitxategian zure instalazioaren webroot bidera (Proposatua: \"%s\")",
"No problems found" : "Ez da problemarik aurkitu",
"Please double check the <a href='%s'>installation guides</a>." : "Mesedez begiratu <a href='%s'>instalazio gidak</a>.",
"Last cron was executed at %s." : "Azken cron-a %s-etan exekutatu da",
@@ -128,13 +117,13 @@
"Allow users to share via link" : "Baimendu erabiltzaileak esteken bidez partekatzea",
"Enforce password protection" : "Betearazi pasahitzaren babesa",
"Allow public uploads" : "Baimendu igoera publikoak",
+ "Allow users to send mail notification for shared files" : "Baimendu erabiltzaileak epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
"Set default expiration date" : "Ezarri muga data lehenetsia",
"Expire after " : "Iraungia honen ondoren",
"days" : "egun",
"Enforce expiration date" : "Muga data betearazi",
"Allow resharing" : "Baimendu birpartekatzea",
"Restrict users to only share with users in their groups" : "Mugatu partekatzeak taldeko erabiltzaileetara",
- "Allow users to send mail notification for shared files" : "Baimendu erabiltzaileak epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
"Exclude groups from sharing" : "Baztertu taldeak partekatzean",
"These groups will still be able to receive shares, but not to initiate them." : "Talde hauek oraindik jaso ahal izango dute partekatzeak, baina ezingo dute partekatu",
"Enforce HTTPS" : "Behartu HTTPS",
@@ -168,6 +157,7 @@
"Update to %s" : "Eguneratu %sra",
"Enable only for specific groups" : "Baimendu bakarri talde espezifikoetarako",
"Uninstall App" : "Desinstalatu aplikazioa",
+ "Cheers!" : "Ongi izan!",
"Administrator Documentation" : "Administratzaile dokumentazioa",
"Online Documentation" : "Online dokumentazioa",
"Forum" : "Foroa",
@@ -207,11 +197,10 @@
"Delete Encryption Keys" : "Ezabatu enkriptatze gakoak",
"Show storage location" : "Erakutsi biltegiaren kokapena",
"Show last log in" : "Erakutsi azkeneko saio hasiera",
- "Login Name" : "Sarrera Izena",
+ "Username" : "Erabiltzaile izena",
"Create" : "Sortu",
"Admin Recovery Password" : "Administratzailearen pasahitza berreskuratzea",
"Enter the recovery password in order to recover the users files during password change" : "Berreskuratze pasahitza idatzi pasahitz aldaketan erabiltzaileen fitxategiak berreskuratzeko",
- "Search Users and Groups" : "Bilatu erabiltzaileak eta taldeak",
"Add Group" : "Gehitu taldea",
"Group" : "Taldea",
"Everyone" : "Edonor",
@@ -220,7 +209,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Mesedez sartu biltegiratze kouta (adb: \"512 MB\" edo \"12 GB\")",
"Unlimited" : "Mugarik gabe",
"Other" : "Bestelakoa",
- "Username" : "Erabiltzaile izena",
"Quota" : "Kuota",
"Storage Location" : "Biltegiaren kokapena",
"Last Login" : "Azken saio hasiera",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index b74bb77e221..1a963837ba4 100644
--- a/settings/l10n/fa.js
+++ b/settings/l10n/fa.js
@@ -9,15 +9,9 @@ OC.L10N.register(
"Authentication error" : "خطا در اعتبار سنجی",
"Your full name has been changed." : "نام کامل شما تغییر یافت",
"Unable to change full name" : "امکان تغییر نام کامل وجود ندارد",
- "Group already exists" : "این گروه در حال حاضر موجود است",
- "Unable to add group" : "افزودن گروه امکان پذیر نیست",
"Files decrypted successfully" : "فایل ها با موفقیت رمزگشایی شدند.",
"Encryption keys deleted permanently" : "کلیدهای رمزگذاری به طور کامل حذف شدند",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
- "Email saved" : "ایمیل ذخیره شد",
- "Invalid email" : "ایمیل غیر قابل قبول",
- "Unable to delete group" : "حذف گروه امکان پذیر نیست",
- "Unable to delete user" : "حذف کاربر امکان پذیر نیست",
"Backups restored successfully" : "پشتیبان ها با موفقیت بازیابی شدند",
"Language changed" : "زبان تغییر کرد",
"Invalid request" : "درخواست نامعتبر",
@@ -35,6 +29,7 @@ OC.L10N.register(
"Saved" : "ذخیره شد",
"test email settings" : "تنظیمات ایمیل آزمایشی",
"Email sent" : "ایمیل ارسال شد",
+ "Email saved" : "ایمیل ذخیره شد",
"Sending..." : "در حال ارسال...",
"All" : "همه",
"Please wait...." : "لطفا صبر کنید ...",
@@ -70,7 +65,6 @@ OC.L10N.register(
"A valid username must be provided" : "نام کاربری صحیح باید وارد شود",
"Error creating user" : "خطا در ایجاد کاربر",
"A valid password must be provided" : "رمز عبور صحیح باید وارد شود",
- "Warning: Home directory for user \"{user}\" already exists" : "اخطار: پوشه‌ی خانه برای کاربر \"{user}\" در حال حاضر وجود دارد",
"__language_name__" : "__language_name__",
"SSL root certificates" : "گواهی های اصلی SSL ",
"Encryption" : "رمزگذاری",
@@ -86,12 +80,10 @@ OC.L10N.register(
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "اخطار امنیتی",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "به احتمال زیاد پوشه‌ی data و فایل‌های شما از طریق اینترنت قابل دسترسی هستند. فایل .htaccess برنامه کار نمی‌کند. ما شدیداً توصیه می کنیم که شما وب سرور خودتان را طوری تنظیم کنید که پوشه‌ی data شما غیر قابل دسترسی باشد یا اینکه پوشه‌‎ی data را به خارج از ریشه‌ی اصلی وب سرور انتقال دهید.",
"Setup Warning" : "هشدار راه اندازی",
"Database Performance Info" : "اطلاعات کارایی پایگاه داده",
"Module 'fileinfo' missing" : "ماژول 'fileinfo' از کار افتاده",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "ماژول 'fileinfo' PHP از کار افتاده است.ما اکیدا توصیه می کنیم که این ماژول را فعال کنید تا نتایج بهتری به وسیله ی mime-type detection دریافت کنید.",
- "Your PHP version is outdated" : "نسخه PHP شما قدیمی است",
"Locale not working" : "زبان محلی کار نمی کند.",
"Please double check the <a href='%s'>installation guides</a>." : "لطفاً دوباره <a href='%s'>راهنمای نصب</a>را بررسی کنید.",
"Last cron was executed at %s." : "کران قبلی در %s اجرا شد.",
@@ -135,6 +127,7 @@ OC.L10N.register(
"Admin Documentation" : "مستند سازی مدیر",
"Enable only for specific groups" : "فعال سازی تنها برای گروه های خاص",
"Uninstall App" : "حذف برنامه",
+ "Cheers!" : "سلامتی!",
"Administrator Documentation" : "مستندات مدیر",
"Online Documentation" : "مستندات آنلاین",
"Forum" : "انجمن",
@@ -166,11 +159,10 @@ OC.L10N.register(
"Decrypt all Files" : "تمام فایلها رمزگشایی شود",
"Restore Encryption Keys" : "بازیابی کلید های رمزگذاری",
"Delete Encryption Keys" : "حذف کلید های رمزگذاری",
- "Login Name" : "نام کاربری",
+ "Username" : "نام کاربری",
"Create" : "ایجاد کردن",
"Admin Recovery Password" : "مدیریت بازیابی رمز عبور",
"Enter the recovery password in order to recover the users files during password change" : "در حین تغییر رمز عبور به منظور بازیابی فایل های کاربران، رمز عبور بازیابی را وارد کنید",
- "Search Users and Groups" : "جستجوی کاربران و گروه ها",
"Add Group" : "افزودن گروه",
"Group" : "گروه",
"Everyone" : "همه",
@@ -179,7 +171,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "لطفا سهمیه ذخیره سازی را وارد کنید (به عنوان مثال: \" 512MB\" یا \"12GB\")",
"Unlimited" : "نامحدود",
"Other" : "دیگر",
- "Username" : "نام کاربری",
"Quota" : "سهم",
"Storage Location" : "محل فضای ذخیره سازی",
"Last Login" : "اخرین ورود",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index 134d72baaf7..05bff418774 100644
--- a/settings/l10n/fa.json
+++ b/settings/l10n/fa.json
@@ -7,15 +7,9 @@
"Authentication error" : "خطا در اعتبار سنجی",
"Your full name has been changed." : "نام کامل شما تغییر یافت",
"Unable to change full name" : "امکان تغییر نام کامل وجود ندارد",
- "Group already exists" : "این گروه در حال حاضر موجود است",
- "Unable to add group" : "افزودن گروه امکان پذیر نیست",
"Files decrypted successfully" : "فایل ها با موفقیت رمزگشایی شدند.",
"Encryption keys deleted permanently" : "کلیدهای رمزگذاری به طور کامل حذف شدند",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
- "Email saved" : "ایمیل ذخیره شد",
- "Invalid email" : "ایمیل غیر قابل قبول",
- "Unable to delete group" : "حذف گروه امکان پذیر نیست",
- "Unable to delete user" : "حذف کاربر امکان پذیر نیست",
"Backups restored successfully" : "پشتیبان ها با موفقیت بازیابی شدند",
"Language changed" : "زبان تغییر کرد",
"Invalid request" : "درخواست نامعتبر",
@@ -33,6 +27,7 @@
"Saved" : "ذخیره شد",
"test email settings" : "تنظیمات ایمیل آزمایشی",
"Email sent" : "ایمیل ارسال شد",
+ "Email saved" : "ایمیل ذخیره شد",
"Sending..." : "در حال ارسال...",
"All" : "همه",
"Please wait...." : "لطفا صبر کنید ...",
@@ -68,7 +63,6 @@
"A valid username must be provided" : "نام کاربری صحیح باید وارد شود",
"Error creating user" : "خطا در ایجاد کاربر",
"A valid password must be provided" : "رمز عبور صحیح باید وارد شود",
- "Warning: Home directory for user \"{user}\" already exists" : "اخطار: پوشه‌ی خانه برای کاربر \"{user}\" در حال حاضر وجود دارد",
"__language_name__" : "__language_name__",
"SSL root certificates" : "گواهی های اصلی SSL ",
"Encryption" : "رمزگذاری",
@@ -84,12 +78,10 @@
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "اخطار امنیتی",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "به احتمال زیاد پوشه‌ی data و فایل‌های شما از طریق اینترنت قابل دسترسی هستند. فایل .htaccess برنامه کار نمی‌کند. ما شدیداً توصیه می کنیم که شما وب سرور خودتان را طوری تنظیم کنید که پوشه‌ی data شما غیر قابل دسترسی باشد یا اینکه پوشه‌‎ی data را به خارج از ریشه‌ی اصلی وب سرور انتقال دهید.",
"Setup Warning" : "هشدار راه اندازی",
"Database Performance Info" : "اطلاعات کارایی پایگاه داده",
"Module 'fileinfo' missing" : "ماژول 'fileinfo' از کار افتاده",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "ماژول 'fileinfo' PHP از کار افتاده است.ما اکیدا توصیه می کنیم که این ماژول را فعال کنید تا نتایج بهتری به وسیله ی mime-type detection دریافت کنید.",
- "Your PHP version is outdated" : "نسخه PHP شما قدیمی است",
"Locale not working" : "زبان محلی کار نمی کند.",
"Please double check the <a href='%s'>installation guides</a>." : "لطفاً دوباره <a href='%s'>راهنمای نصب</a>را بررسی کنید.",
"Last cron was executed at %s." : "کران قبلی در %s اجرا شد.",
@@ -133,6 +125,7 @@
"Admin Documentation" : "مستند سازی مدیر",
"Enable only for specific groups" : "فعال سازی تنها برای گروه های خاص",
"Uninstall App" : "حذف برنامه",
+ "Cheers!" : "سلامتی!",
"Administrator Documentation" : "مستندات مدیر",
"Online Documentation" : "مستندات آنلاین",
"Forum" : "انجمن",
@@ -164,11 +157,10 @@
"Decrypt all Files" : "تمام فایلها رمزگشایی شود",
"Restore Encryption Keys" : "بازیابی کلید های رمزگذاری",
"Delete Encryption Keys" : "حذف کلید های رمزگذاری",
- "Login Name" : "نام کاربری",
+ "Username" : "نام کاربری",
"Create" : "ایجاد کردن",
"Admin Recovery Password" : "مدیریت بازیابی رمز عبور",
"Enter the recovery password in order to recover the users files during password change" : "در حین تغییر رمز عبور به منظور بازیابی فایل های کاربران، رمز عبور بازیابی را وارد کنید",
- "Search Users and Groups" : "جستجوی کاربران و گروه ها",
"Add Group" : "افزودن گروه",
"Group" : "گروه",
"Everyone" : "همه",
@@ -177,7 +169,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "لطفا سهمیه ذخیره سازی را وارد کنید (به عنوان مثال: \" 512MB\" یا \"12GB\")",
"Unlimited" : "نامحدود",
"Other" : "دیگر",
- "Username" : "نام کاربری",
"Quota" : "سهم",
"Storage Location" : "محل فضای ذخیره سازی",
"Last Login" : "اخرین ورود",
diff --git a/settings/l10n/fi.js b/settings/l10n/fi.js
new file mode 100644
index 00000000000..bf1854567a1
--- /dev/null
+++ b/settings/l10n/fi.js
@@ -0,0 +1,11 @@
+OC.L10N.register(
+ "settings",
+ {
+ "Delete" : "Poista",
+ "More" : "Lisää",
+ "Password" : "Salasana",
+ "Cancel" : "Peruuta",
+ "Username" : "Käyttäjätunnus",
+ "Create" : "Luo"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/fi.json b/settings/l10n/fi.json
new file mode 100644
index 00000000000..58852d56692
--- /dev/null
+++ b/settings/l10n/fi.json
@@ -0,0 +1,9 @@
+{ "translations": {
+ "Delete" : "Poista",
+ "More" : "Lisää",
+ "Password" : "Salasana",
+ "Cancel" : "Peruuta",
+ "Username" : "Käyttäjätunnus",
+ "Create" : "Luo"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index b0cb951265e..fd61ccdec00 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Tunnistautumisvirhe",
"Your full name has been changed." : "Koko nimesi on muutettu.",
"Unable to change full name" : "Koko nimen muuttaminen epäonnistui",
- "Group already exists" : "Ryhmä on jo olemassa",
- "Unable to add group" : "Ryhmän lisäys epäonnistui",
"Files decrypted successfully" : "Tiedostojen salaus purettiin onnistuneesti",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Tiedostojen salauksen purkaminen epäonnistui. Tarkista owncloud.log-tiedosto tai ota yhteys ylläpitäjään",
"Couldn't decrypt your files, check your password and try again" : "Tiedostojen salauksen purkaminen epäonnistui. Tarkista salasanasi ja yritä uudelleen",
"Encryption keys deleted permanently" : "Salausavaimet poistettiin pysyvästi",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Salausavaintesi poistaminen pysyvästi ei onnistunut, tarkista owncloud.log tai ole yhteydessä ylläpitäjään",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
- "Email saved" : "Sähköposti tallennettu",
- "Invalid email" : "Virheellinen sähköposti",
- "Unable to delete group" : "Ryhmän poisto epäonnistui",
- "Unable to delete user" : "Käyttäjän poisto epäonnistui",
"Backups restored successfully" : "Varmuuskopiot palautettiin onnistuneesti",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Salausavaintesi palauttaminen ei onnistunut, tarkista owncloud.log tai ole yhteydessä ylläpitäjään",
"Language changed" : "Kieli on vaihdettu",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Käytössä",
"Not enabled" : "Ei käytössä",
"Recommended" : "Suositeltu",
+ "Group already exists." : "Ryhmä on jo olemassa.",
+ "Unable to add group." : "Ryhmän lisääminen ei onnistunut.",
+ "Unable to delete group." : "Ryhmän poistaminen ei onnistunut.",
"Saved" : "Tallennettu",
"test email settings" : "testaa sähköpostiasetukset",
"If you received this email, the settings seem to be correct." : "Jos sait tämän sähköpostin, kaikki asetukset vaikuttavat olevan kunnossa.",
"A problem occurred while sending the email. Please revise your settings." : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset.",
"Email sent" : "Sähköposti lähetetty",
"You need to set your user email before being able to send test emails." : "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.",
+ "Invalid mail address" : "Virheellinen sähköpostiosoite",
+ "Unable to create user." : "Käyttäjän luominen ei onnistunut.",
+ "Your %s account was created" : "%s-tilisi luotiin",
+ "Unable to delete user." : "Käyttäjän poistaminen ei onnistunut.",
+ "Forbidden" : "Estetty",
+ "Invalid user" : "Virheellinen käyttäjä",
+ "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
+ "Email saved" : "Sähköposti tallennettu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
"Add trusted domain" : "Lisää luotettu toimialue",
"Sending..." : "Lähetetään...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Anna kelvollinen käyttäjätunnus",
"Error creating user" : "Virhe käyttäjää luotaessa",
"A valid password must be provided" : "Anna kelvollinen salasana",
- "Warning: Home directory for user \"{user}\" already exists" : "Varoitus: käyttäjällä \"{user}\" on jo olemassa kotikansio",
+ "A valid email must be provided" : "Tarvitaan kelvollinen sähköpostiosoite",
"__language_name__" : "_kielen_nimi_",
"Personal Info" : "Henkilökohtaiset tiedot",
"SSL root certificates" : "SSL-juurivarmenteet",
@@ -101,20 +106,18 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Turvallisuusvaroitus",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Käytät %sia HTTP-yhteydellä. Suosittelemme määrittämään palvelimen vaatimaan salattua HTTPS-yhteyttä.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datahakemistosi ja kaikki tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi tällä hetkellä. Määritä verkkopalvelimen asetukset siten, ettei datahakemistosi ole suoraan käytettävissä tai siirrä kyseinen hakemisto pois verkkopalvelimen dokumenttijuuresta.",
+ "Read-Only config enabled" : "Vain luku -määritykset otettu käyttöön",
"Setup Warning" : "Asetusvaroitus",
"Database Performance Info" : "Tietokannan suorituskyvyn tiedot",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLitea käytetään tietokantana. Laajoja asennuksia varten tämä asetus kannattaa muuttaa. Käytä komentorivityökalua 'occ db:convert-type' siirtyäksesi toiseen tietokantaan.",
"Module 'fileinfo' missing" : "Moduuli 'fileinfo' puuttuu",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.",
- "Your PHP version is outdated" : "Käytössä oleva PHP-versio on vanhentunut",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Käytössä oleva PHP on vanhentunut. Päivitä versioon 5.3.8 tai uudempaan, koska aiemmat versiot eivät ole toimivia. On mahdollista, että tämä ownCloud-asennus ei toimi kunnolla.",
"PHP charset is not set to UTF-8" : "PHP:n merkistöä ei ole asetettu UTF-8:ksi",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP:n merkistöä ei ole asetettu UTF-8:ksi. Tämä saattaa aiheuttaa suuria ongelmia sellaisten tiedostojen kanssa, joiden nimi koostuu muista kuin ASCII-merkeistä. Suosittelemme asettamaan php.ini-tiedoston kohdan 'default_charset' arvoon 'UTF-8'.",
"Locale not working" : "Maa-asetus ei toimi",
"System locale can not be set to a one which supports UTF-8." : "Järjestelmän maa-asetusta ei voi asettaa UTF-8:aa tukevaksi.",
"This means that there might be problems with certain characters in file names." : "Tämä tarkoittaa, että tiettyjen merkkien kanssa tiedostojen nimissä saattaa olla ongelmia.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Suosittelemme vahvasti asentamaan vaaditut paketit järjestelmään, jotta jotain seuraavista maa-asetuksista on mahdollista tukea: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Suosittelemme asentamaan vaaditut paketit järjestelmään, jotta järjestelmässä on tuki yhdelle seuraavista maa-asetuksista: %s.",
"URL generation in notification emails" : "Verkko-osoitteiden luominen sähköposti-ilmoituksissa",
"No problems found" : "Ongelmia ei löytynyt",
"Please double check the <a href='%s'>installation guides</a>." : "Lue tarkasti <a href='%s'>asennusohjeet</a>.",
@@ -126,18 +129,22 @@ OC.L10N.register(
"Use system's cron service to call the cron.php file every 15 minutes." : "Käytä järjestelmän cron-palvelua cron.php-tiedoston kutsumista varten 15 minuutin välein.",
"Allow apps to use the Share API" : "Salli sovellusten käyttää jakamisen ohjelmointirajapintaa",
"Allow users to share via link" : "Salli käyttäjien jakaa linkkien kautta",
+ "Enforce password protection" : "Pakota salasanasuojaus",
"Allow public uploads" : "Salli julkiset lähetykset",
+ "Allow users to send mail notification for shared files" : "Salli käyttäjien lähettää sähköposti-ilmoituksia jaetuista tiedostoista",
"Set default expiration date" : "Aseta oletusvanhenemispäivä",
"Expire after " : "Vanhenna",
"days" : "päivän jälkeen",
"Enforce expiration date" : "Pakota vanhenemispäivä",
"Allow resharing" : "Salli uudelleenjakaminen",
"Restrict users to only share with users in their groups" : "Salli käyttäjien jakaa vain omassa ryhmässä olevien henkilöiden kesken",
- "Allow users to send mail notification for shared files" : "Salli käyttäjien lähettää sähköposti-ilmoituksia jaetuista tiedostoista",
+ "Allow users to send mail notification for shared files to other users" : "Salli käyttäjien lähettää muille käyttäjille sähköpostitse ilmoitus jaetuista tiedostoista",
"Exclude groups from sharing" : "Kiellä ryhmiä jakamasta",
"These groups will still be able to receive shares, but not to initiate them." : "Nämä ryhmät kykenevät vastaanottamaan jakoja, mutta eivät kuitenkaan itse pysty luoda jakoja.",
"Enforce HTTPS" : "Pakota HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Pakottaa asiakasohjelmistot ottamaan yhteyden %siin salatun yhteyden kautta.",
+ "Enforce HTTPS for subdomains" : "Pakota HTTPS-suojaus alidomaineille",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Pakottaa asiakkaat yhdistämään kohteeseen %s ja sen alidomaineihin salattua yhteyttä käyttäen.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Yhdistä %siin HTTPS-yhteydellä ottaaksesi käyttöön tai poistaaksesi käytöstä SSL-pakotteen.",
"This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.",
"Send mode" : "Lähetystila",
@@ -164,15 +171,22 @@ OC.L10N.register(
"Documentation:" : "Ohjeistus:",
"User Documentation" : "Käyttäjäohjeistus",
"Admin Documentation" : "Ylläpitäjän ohjeistus",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Tätä sovellusta ei voi asentaa, koska seuraavat riippuvuudet eivät täyty:",
"Update to %s" : "Päivitä versioon %s",
"Enable only for specific groups" : "Salli vain tietyille ryhmille",
"Uninstall App" : "Poista sovelluksen asennus",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei<br><br>Sinulla on nyt %s-tili.<br><br>Käyttäjätunnus: %s<br>Aloita käyttö: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Kippis!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei\n\nSinulla on nyt %s-tili.\n\nKäyttäjätunnuksesi: %s\nAloita käyttö: %s\n\n",
"Administrator Documentation" : "Ylläpito-ohjeistus",
"Online Documentation" : "Verkko-ohjeistus",
"Forum" : "Keskustelupalsta",
"Bugtracker" : "Ohjelmistovirheiden jäljitys",
"Commercial Support" : "Kaupallinen tuki",
"Get the apps to sync your files" : "Aseta sovellukset synkronoimaan tiedostosi",
+ "Desktop client" : "Työpöytäsovellus",
+ "Android app" : "Android-sovellus",
+ "iOS app" : "iOS-sovellus",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Jos haluat tukea projektia,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">osallistu kehitykseen</a>\n\t\ttai\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">levitä sanaa</a>!",
"Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
@@ -208,10 +222,14 @@ OC.L10N.register(
"Delete Encryption Keys" : "Poista salausavaimet",
"Show storage location" : "Näytä tallennustilan sijainti",
"Show last log in" : "Näytä viimeisin sisäänkirjautuminen",
- "Login Name" : "Kirjautumisnimi",
+ "Show user backend" : "Näytä käyttäjätaustaosa",
+ "Send email to new user" : "Lähetä sähköpostia uudelle käyttäjälle",
+ "Show email address" : "Näytä sähköpostiosoite",
+ "Username" : "Käyttäjätunnus",
+ "E-Mail" : "Sähköposti",
"Create" : "Luo",
"Admin Recovery Password" : "Ylläpitäjän palautussalasana",
- "Search Users and Groups" : "Etsi käyttäjiä ja ryhmiä",
+ "Search Users" : "Etsi käyttäjiä",
"Add Group" : "Lisää ryhmä",
"Group" : "Ryhmä",
"Everyone" : "Kaikki",
@@ -220,13 +238,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Määritä tallennustilan kiintiö (esim. \"512 MB\" tai \"12 GB\")",
"Unlimited" : "Rajoittamaton",
"Other" : "Muu",
- "Username" : "Käyttäjätunnus",
"Group Admin for" : "Ryhmäylläpitäjä kohteille",
"Quota" : "Kiintiö",
"Storage Location" : "Tallennustilan sijainti",
+ "User Backend" : "Käyttäjätaustaosa",
"Last Login" : "Viimeisin kirjautuminen",
"change full name" : "muuta koko nimi",
"set new password" : "aseta uusi salasana",
+ "change email address" : "vaihda sähköpostiosoite",
"Default" : "Oletus"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index 727e70de42a..dfb4006ad93 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -8,18 +8,12 @@
"Authentication error" : "Tunnistautumisvirhe",
"Your full name has been changed." : "Koko nimesi on muutettu.",
"Unable to change full name" : "Koko nimen muuttaminen epäonnistui",
- "Group already exists" : "Ryhmä on jo olemassa",
- "Unable to add group" : "Ryhmän lisäys epäonnistui",
"Files decrypted successfully" : "Tiedostojen salaus purettiin onnistuneesti",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Tiedostojen salauksen purkaminen epäonnistui. Tarkista owncloud.log-tiedosto tai ota yhteys ylläpitäjään",
"Couldn't decrypt your files, check your password and try again" : "Tiedostojen salauksen purkaminen epäonnistui. Tarkista salasanasi ja yritä uudelleen",
"Encryption keys deleted permanently" : "Salausavaimet poistettiin pysyvästi",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Salausavaintesi poistaminen pysyvästi ei onnistunut, tarkista owncloud.log tai ole yhteydessä ylläpitäjään",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
- "Email saved" : "Sähköposti tallennettu",
- "Invalid email" : "Virheellinen sähköposti",
- "Unable to delete group" : "Ryhmän poisto epäonnistui",
- "Unable to delete user" : "Käyttäjän poisto epäonnistui",
"Backups restored successfully" : "Varmuuskopiot palautettiin onnistuneesti",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Salausavaintesi palauttaminen ei onnistunut, tarkista owncloud.log tai ole yhteydessä ylläpitäjään",
"Language changed" : "Kieli on vaihdettu",
@@ -37,12 +31,23 @@
"Enabled" : "Käytössä",
"Not enabled" : "Ei käytössä",
"Recommended" : "Suositeltu",
+ "Group already exists." : "Ryhmä on jo olemassa.",
+ "Unable to add group." : "Ryhmän lisääminen ei onnistunut.",
+ "Unable to delete group." : "Ryhmän poistaminen ei onnistunut.",
"Saved" : "Tallennettu",
"test email settings" : "testaa sähköpostiasetukset",
"If you received this email, the settings seem to be correct." : "Jos sait tämän sähköpostin, kaikki asetukset vaikuttavat olevan kunnossa.",
"A problem occurred while sending the email. Please revise your settings." : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset.",
"Email sent" : "Sähköposti lähetetty",
"You need to set your user email before being able to send test emails." : "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.",
+ "Invalid mail address" : "Virheellinen sähköpostiosoite",
+ "Unable to create user." : "Käyttäjän luominen ei onnistunut.",
+ "Your %s account was created" : "%s-tilisi luotiin",
+ "Unable to delete user." : "Käyttäjän poistaminen ei onnistunut.",
+ "Forbidden" : "Estetty",
+ "Invalid user" : "Virheellinen käyttäjä",
+ "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
+ "Email saved" : "Sähköposti tallennettu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
"Add trusted domain" : "Lisää luotettu toimialue",
"Sending..." : "Lähetetään...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Anna kelvollinen käyttäjätunnus",
"Error creating user" : "Virhe käyttäjää luotaessa",
"A valid password must be provided" : "Anna kelvollinen salasana",
- "Warning: Home directory for user \"{user}\" already exists" : "Varoitus: käyttäjällä \"{user}\" on jo olemassa kotikansio",
+ "A valid email must be provided" : "Tarvitaan kelvollinen sähköpostiosoite",
"__language_name__" : "_kielen_nimi_",
"Personal Info" : "Henkilökohtaiset tiedot",
"SSL root certificates" : "SSL-juurivarmenteet",
@@ -99,20 +104,18 @@
"TLS" : "TLS",
"Security Warning" : "Turvallisuusvaroitus",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Käytät %sia HTTP-yhteydellä. Suosittelemme määrittämään palvelimen vaatimaan salattua HTTPS-yhteyttä.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datahakemistosi ja kaikki tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi tällä hetkellä. Määritä verkkopalvelimen asetukset siten, ettei datahakemistosi ole suoraan käytettävissä tai siirrä kyseinen hakemisto pois verkkopalvelimen dokumenttijuuresta.",
+ "Read-Only config enabled" : "Vain luku -määritykset otettu käyttöön",
"Setup Warning" : "Asetusvaroitus",
"Database Performance Info" : "Tietokannan suorituskyvyn tiedot",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLitea käytetään tietokantana. Laajoja asennuksia varten tämä asetus kannattaa muuttaa. Käytä komentorivityökalua 'occ db:convert-type' siirtyäksesi toiseen tietokantaan.",
"Module 'fileinfo' missing" : "Moduuli 'fileinfo' puuttuu",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.",
- "Your PHP version is outdated" : "Käytössä oleva PHP-versio on vanhentunut",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Käytössä oleva PHP on vanhentunut. Päivitä versioon 5.3.8 tai uudempaan, koska aiemmat versiot eivät ole toimivia. On mahdollista, että tämä ownCloud-asennus ei toimi kunnolla.",
"PHP charset is not set to UTF-8" : "PHP:n merkistöä ei ole asetettu UTF-8:ksi",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP:n merkistöä ei ole asetettu UTF-8:ksi. Tämä saattaa aiheuttaa suuria ongelmia sellaisten tiedostojen kanssa, joiden nimi koostuu muista kuin ASCII-merkeistä. Suosittelemme asettamaan php.ini-tiedoston kohdan 'default_charset' arvoon 'UTF-8'.",
"Locale not working" : "Maa-asetus ei toimi",
"System locale can not be set to a one which supports UTF-8." : "Järjestelmän maa-asetusta ei voi asettaa UTF-8:aa tukevaksi.",
"This means that there might be problems with certain characters in file names." : "Tämä tarkoittaa, että tiettyjen merkkien kanssa tiedostojen nimissä saattaa olla ongelmia.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Suosittelemme vahvasti asentamaan vaaditut paketit järjestelmään, jotta jotain seuraavista maa-asetuksista on mahdollista tukea: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Suosittelemme asentamaan vaaditut paketit järjestelmään, jotta järjestelmässä on tuki yhdelle seuraavista maa-asetuksista: %s.",
"URL generation in notification emails" : "Verkko-osoitteiden luominen sähköposti-ilmoituksissa",
"No problems found" : "Ongelmia ei löytynyt",
"Please double check the <a href='%s'>installation guides</a>." : "Lue tarkasti <a href='%s'>asennusohjeet</a>.",
@@ -124,18 +127,22 @@
"Use system's cron service to call the cron.php file every 15 minutes." : "Käytä järjestelmän cron-palvelua cron.php-tiedoston kutsumista varten 15 minuutin välein.",
"Allow apps to use the Share API" : "Salli sovellusten käyttää jakamisen ohjelmointirajapintaa",
"Allow users to share via link" : "Salli käyttäjien jakaa linkkien kautta",
+ "Enforce password protection" : "Pakota salasanasuojaus",
"Allow public uploads" : "Salli julkiset lähetykset",
+ "Allow users to send mail notification for shared files" : "Salli käyttäjien lähettää sähköposti-ilmoituksia jaetuista tiedostoista",
"Set default expiration date" : "Aseta oletusvanhenemispäivä",
"Expire after " : "Vanhenna",
"days" : "päivän jälkeen",
"Enforce expiration date" : "Pakota vanhenemispäivä",
"Allow resharing" : "Salli uudelleenjakaminen",
"Restrict users to only share with users in their groups" : "Salli käyttäjien jakaa vain omassa ryhmässä olevien henkilöiden kesken",
- "Allow users to send mail notification for shared files" : "Salli käyttäjien lähettää sähköposti-ilmoituksia jaetuista tiedostoista",
+ "Allow users to send mail notification for shared files to other users" : "Salli käyttäjien lähettää muille käyttäjille sähköpostitse ilmoitus jaetuista tiedostoista",
"Exclude groups from sharing" : "Kiellä ryhmiä jakamasta",
"These groups will still be able to receive shares, but not to initiate them." : "Nämä ryhmät kykenevät vastaanottamaan jakoja, mutta eivät kuitenkaan itse pysty luoda jakoja.",
"Enforce HTTPS" : "Pakota HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Pakottaa asiakasohjelmistot ottamaan yhteyden %siin salatun yhteyden kautta.",
+ "Enforce HTTPS for subdomains" : "Pakota HTTPS-suojaus alidomaineille",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Pakottaa asiakkaat yhdistämään kohteeseen %s ja sen alidomaineihin salattua yhteyttä käyttäen.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Yhdistä %siin HTTPS-yhteydellä ottaaksesi käyttöön tai poistaaksesi käytöstä SSL-pakotteen.",
"This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.",
"Send mode" : "Lähetystila",
@@ -162,15 +169,22 @@
"Documentation:" : "Ohjeistus:",
"User Documentation" : "Käyttäjäohjeistus",
"Admin Documentation" : "Ylläpitäjän ohjeistus",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Tätä sovellusta ei voi asentaa, koska seuraavat riippuvuudet eivät täyty:",
"Update to %s" : "Päivitä versioon %s",
"Enable only for specific groups" : "Salli vain tietyille ryhmille",
"Uninstall App" : "Poista sovelluksen asennus",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei<br><br>Sinulla on nyt %s-tili.<br><br>Käyttäjätunnus: %s<br>Aloita käyttö: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Kippis!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei\n\nSinulla on nyt %s-tili.\n\nKäyttäjätunnuksesi: %s\nAloita käyttö: %s\n\n",
"Administrator Documentation" : "Ylläpito-ohjeistus",
"Online Documentation" : "Verkko-ohjeistus",
"Forum" : "Keskustelupalsta",
"Bugtracker" : "Ohjelmistovirheiden jäljitys",
"Commercial Support" : "Kaupallinen tuki",
"Get the apps to sync your files" : "Aseta sovellukset synkronoimaan tiedostosi",
+ "Desktop client" : "Työpöytäsovellus",
+ "Android app" : "Android-sovellus",
+ "iOS app" : "iOS-sovellus",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Jos haluat tukea projektia,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">osallistu kehitykseen</a>\n\t\ttai\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">levitä sanaa</a>!",
"Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
@@ -206,10 +220,14 @@
"Delete Encryption Keys" : "Poista salausavaimet",
"Show storage location" : "Näytä tallennustilan sijainti",
"Show last log in" : "Näytä viimeisin sisäänkirjautuminen",
- "Login Name" : "Kirjautumisnimi",
+ "Show user backend" : "Näytä käyttäjätaustaosa",
+ "Send email to new user" : "Lähetä sähköpostia uudelle käyttäjälle",
+ "Show email address" : "Näytä sähköpostiosoite",
+ "Username" : "Käyttäjätunnus",
+ "E-Mail" : "Sähköposti",
"Create" : "Luo",
"Admin Recovery Password" : "Ylläpitäjän palautussalasana",
- "Search Users and Groups" : "Etsi käyttäjiä ja ryhmiä",
+ "Search Users" : "Etsi käyttäjiä",
"Add Group" : "Lisää ryhmä",
"Group" : "Ryhmä",
"Everyone" : "Kaikki",
@@ -218,13 +236,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Määritä tallennustilan kiintiö (esim. \"512 MB\" tai \"12 GB\")",
"Unlimited" : "Rajoittamaton",
"Other" : "Muu",
- "Username" : "Käyttäjätunnus",
"Group Admin for" : "Ryhmäylläpitäjä kohteille",
"Quota" : "Kiintiö",
"Storage Location" : "Tallennustilan sijainti",
+ "User Backend" : "Käyttäjätaustaosa",
"Last Login" : "Viimeisin kirjautuminen",
"change full name" : "muuta koko nimi",
"set new password" : "aseta uusi salasana",
+ "change email address" : "vaihda sähköpostiosoite",
"Default" : "Oletus"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index dee21d78e0f..e162e5600b3 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Erreur d'authentification",
"Your full name has been changed." : "Votre nom complet a été modifié.",
"Unable to change full name" : "Impossible de changer le nom complet",
- "Group already exists" : "Ce groupe existe déjà",
- "Unable to add group" : "Impossible d'ajouter le groupe",
"Files decrypted successfully" : "Fichiers décryptés avec succès",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Impossible de décrypter vos fichiers, veuillez vérifier votre owncloud.log ou demander à votre administrateur",
"Couldn't decrypt your files, check your password and try again" : "Impossible de décrypter vos fichiers, vérifiez votre mot de passe et essayez à nouveau",
"Encryption keys deleted permanently" : "Clés de chiffrement définitivement supprimées.",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Impossible de supprimer définitivement vos clés de chiffrement, merci de regarder journal owncloud.log ou de demander à votre administrateur",
"Couldn't remove app." : "Impossible de supprimer l'application.",
- "Email saved" : "E-mail sauvegardé",
- "Invalid email" : "E-mail invalide",
- "Unable to delete group" : "Impossible de supprimer le groupe",
- "Unable to delete user" : "Impossible de supprimer l'utilisateur",
"Backups restored successfully" : "La sauvegarde a été restaurée avec succès",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Impossible de restaurer vos clés de chiffrement, merci de regarder journal owncloud.log ou de demander à votre administrateur",
"Language changed" : "Langue changée",
@@ -34,17 +28,28 @@ OC.L10N.register(
"No user supplied" : "Aucun utilisateur fourni",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Veuillez fournir un mot de passe administrateur de récupération de données, sinon toutes les données de l'utilisateur seront perdues",
"Wrong admin recovery password. Please check the password and try again." : "Mot de passe administrateur de récupération de données non valable. Veuillez vérifier le mot de passe et essayer à nouveau.",
- "Back-end doesn't support password change, but the users encryption key was successfully updated." : "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "L'infrastructure d'arrière-plan ne permet pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès.",
"Unable to change password" : "Impossible de modifier le mot de passe",
"Enabled" : "Activées",
"Not enabled" : "Désactivées",
"Recommended" : "Recommandées",
+ "Group already exists." : "Ce groupe existe déjà.",
+ "Unable to add group." : "Impossible d'ajouter le groupe.",
+ "Unable to delete group." : "Impossible de supprimer le groupe.",
"Saved" : "Sauvegardé",
"test email settings" : "tester les paramètres d'e-mail",
"If you received this email, the settings seem to be correct." : "Si vous recevez cet email, c'est que les paramètres sont corrects",
"A problem occurred while sending the email. Please revise your settings." : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres.",
"Email sent" : "Email envoyé",
"You need to set your user email before being able to send test emails." : "Vous devez configurer votre e-mail d'utilisateur avant de pouvoir envoyer des e-mails de test.",
+ "Invalid mail address" : "Adresse email non valide",
+ "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.",
+ "Forbidden" : "Iinterdit",
+ "Invalid user" : "Utilisateur non valide",
+ "Unable to change mail address" : "Impossible de modifier l'adresse de courriel",
+ "Email saved" : "E-mail sauvegardé",
"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",
"Sending..." : "Envoi en cours...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi",
"Error creating user" : "Erreur lors de la création de l'utilisateur",
"A valid password must be provided" : "Un mot de passe valide doit être saisi",
- "Warning: Home directory for user \"{user}\" already exists" : "Attention : Le dossier Home pour l'utilisateur \"{user}\" existe déjà",
+ "A valid email must be provided" : "Vous devez fournir une adresse de courriel valide",
"__language_name__" : "Français",
"Personal Info" : "Informations personnelles",
"SSL root certificates" : "Certificats racine SSL",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Avertissement de sécurité",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vous accédez à %s via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS à la place.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou bien de le déplacer à l'extérieur de la racine du serveur web.",
+ "Read-Only config enabled" : "Configuration en mode lecture seule activée",
+ "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." : "La configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture pour chaque mise à jour.",
"Setup Warning" : "Avertissement, problème de configuration",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP est apparemment configuré pour supprimer les blocs de documentation internes. Cela rendra plusieurs applications de base inaccessibles.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La raison est probablement l'utilisation d'un cache / accélérateur tel que Zend OPcache ou eAccelerator.",
@@ -110,21 +116,18 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite est utilisée comme base de donnée. Pour des installations plus volumineuse, nous vous conseillons de changer ce réglage. Pour migrer vers une autre base de donnée, utilisez la commande : \"occ db:convert-type\"",
"Module 'fileinfo' missing" : "Module 'fileinfo' manquant",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats pour la détection des types de fichiers.",
- "Your PHP version is outdated" : "Votre version de PHP est trop ancienne",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Votre version de PHP est trop ancienne. Nous vous recommandons fortement de migrer vers une version 5.3.8 ou plus récente encore, car les versions antérieures sont réputées problématiques. Il est possible que cette installation ne fonctionne pas correctement.",
"PHP charset is not set to UTF-8" : "Le jeu de caractères PHP n'est pas réglé sur UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractère non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
"Locale not working" : "Localisation non fonctionnelle",
- "System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec un qui supporte UTF-8.",
+ "System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec prise en charge d'UTF-8.",
"This means that there might be problems with certain characters in file names." : "Cela signifie qu'il pourrait y avoir des problèmes avec certains caractères dans les noms de fichier.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nous conseillons vivement d'installer les paquets requis sur votre système pour supporter l'un des paramètres régionaux suivants : %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets requis à la prise en charge de l'un des paramètres régionaux suivants : %s",
"URL generation in notification emails" : "Génération d'URL dans les mails de notification",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwritewebroot\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")",
- "Connectivity Checks" : "Vérification de la connectivité",
+ "Configuration Checks" : "Vérification de la configuration",
"No problems found" : "Aucun problème trouvé",
"Please double check the <a href='%s'>installation guides</a>." : "Veuillez vous référer au <a href='%s'>guide d'installation</a>.",
- "Last cron was executed at %s." : "Le dernier cron s'est exécuté à %s.",
- "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
+ "Last cron was executed at %s." : "Le dernier cron s'est exécuté à la date suivante : %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à la date suivante : %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
"Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !",
"Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php est enregistré en tant que service webcron pour appeler cron.php toutes les 15 minutes via http.",
@@ -133,17 +136,20 @@ OC.L10N.register(
"Allow users to share via link" : "Autoriser les utilisateurs à partager par lien",
"Enforce password protection" : "Obliger la protection par mot de passe",
"Allow public uploads" : "Autoriser les téléversements publics",
+ "Allow users to send mail notification for shared files" : "Autoriser les utilisateurs à envoyer des notifications par courriel concernant les partages",
"Set default expiration date" : "Spécifier la date d'expiration par défaut",
"Expire after " : "Expiration après ",
"days" : "jours",
"Enforce expiration date" : "Imposer la date d'expiration",
"Allow resharing" : "Autoriser le repartage",
"Restrict users to only share with users in their groups" : "N'autoriser les partages qu'entre membres de même groupes",
- "Allow users to send mail notification for shared files" : "Autoriser les utilisateurs à envoyer des notifications par courriel concernant les partages",
+ "Allow users to send mail notification for shared files to other users" : "Autoriser les utilisateurs à envoyer une notification par courriel concernant les fichiers partagés",
"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. ",
"Enforce HTTPS" : "Forcer HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forcer les clients à se connecter à %s via une connexion chiffrée.",
+ "Enforce HTTPS for subdomains" : "Forcer HTTPS pour les sous domaines",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Force les clients à se connecter à %s et aux sous domaines via une connexion chiffrée.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Veuillez vous connecter à cette instance %s via HTTPS pour activer ou désactiver SSL.",
"This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.",
"Send mode" : "Mode d'envoi",
@@ -171,18 +177,25 @@ OC.L10N.register(
"Documentation:" : "Documentation :",
"User Documentation" : "Documentation utilisateur",
"Admin Documentation" : "Documentation administrateur",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Cette application ne peut être installée à cause de ces dépendances non satisfaites:",
"Update to %s" : "Mettre à niveau vers la version %s",
"Enable only for specific groups" : "Activer uniquement pour certains groupes",
"Uninstall App" : "Désinstaller l'application",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "À bientôt !",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n",
"Administrator Documentation" : "Documentation administrateur",
"Online Documentation" : "Documentation en ligne",
"Forum" : "Forum",
"Bugtracker" : "Suivi de bugs",
"Commercial Support" : "Support commercial",
"Get the apps to sync your files" : "Obtenez les applications de synchronisation de vos fichiers",
+ "Desktop client" : "Client de bureau",
+ "Android app" : "Application Android",
+ "iOS app" : "Application iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Si voulez soutenir le projet, \n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">rejoignez le développement</a>\n\t\tou \n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">parlez-en</a> !",
- "Show First Run Wizard again" : "Revoir le premier lancement de l'installeur",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vous avez utilisé <strong>%s</strong> des <strong>%s<strong> disponibles",
+ "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
+ "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> des <strong>%s<strong> disponibles",
"Password" : "Mot de passe",
"Your password was changed" : "Votre mot de passe a été changé",
"Unable to change your password" : "Impossible de changer votre mot de passe",
@@ -215,12 +228,16 @@ OC.L10N.register(
"Restore Encryption Keys" : "Restaurer les clés de chiffrement",
"Delete Encryption Keys" : "Supprimer les clés de chiffrement",
"Show storage location" : "Afficher l'emplacement du stockage",
- "Show last log in" : "Montrer la dernière identification",
- "Login Name" : "Nom d'utilisateur",
+ "Show last log in" : "Montrer la dernière connexion",
+ "Show user backend" : "Montrer la source de l'identifiant",
+ "Send email to new user" : "Envoyer un courriel au nouvel utilisateur",
+ "Show email address" : "Afficher l'adresse email",
+ "Username" : "Nom d'utilisateur",
+ "E-Mail" : "Courriel",
"Create" : "Créer",
"Admin Recovery Password" : "Récupération du mot de passe administrateur",
- "Enter the recovery password in order to recover the users files during password change" : "Entrer le mot de passe de récupération dans le but de récupérer les fichiers utilisateurs pendant le changement de mot de passe",
- "Search Users and Groups" : "Chercher parmi les utilisateurs et groupes",
+ "Enter the recovery password in order to recover the users files during password change" : "Entrez le mot de passe de récupération pour récupérer les fichiers utilisateurs pendant le changement de mot de passe",
+ "Search Users" : "Recherche des utilisateurs",
"Add Group" : "Ajouter un groupe",
"Group" : "Groupe",
"Everyone" : "Tout le monde",
@@ -229,13 +246,13 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Veuillez entrer le quota de stockage (ex. \"512 MB\" ou \"12 GB\")",
"Unlimited" : "Illimité",
"Other" : "Autre",
- "Username" : "Nom d'utilisateur",
"Group Admin for" : "Administrateur de groupe pour",
"Quota" : "Quota",
"Storage Location" : "Emplacement du Stockage",
"Last Login" : "Dernière Connexion",
"change full name" : "Modifier le nom complet",
"set new password" : "Changer le mot de passe",
+ "change email address" : "changer l'adresse email",
"Default" : "Défaut"
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 40bc023ea1b..44c54937989 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -8,18 +8,12 @@
"Authentication error" : "Erreur d'authentification",
"Your full name has been changed." : "Votre nom complet a été modifié.",
"Unable to change full name" : "Impossible de changer le nom complet",
- "Group already exists" : "Ce groupe existe déjà",
- "Unable to add group" : "Impossible d'ajouter le groupe",
"Files decrypted successfully" : "Fichiers décryptés avec succès",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Impossible de décrypter vos fichiers, veuillez vérifier votre owncloud.log ou demander à votre administrateur",
"Couldn't decrypt your files, check your password and try again" : "Impossible de décrypter vos fichiers, vérifiez votre mot de passe et essayez à nouveau",
"Encryption keys deleted permanently" : "Clés de chiffrement définitivement supprimées.",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Impossible de supprimer définitivement vos clés de chiffrement, merci de regarder journal owncloud.log ou de demander à votre administrateur",
"Couldn't remove app." : "Impossible de supprimer l'application.",
- "Email saved" : "E-mail sauvegardé",
- "Invalid email" : "E-mail invalide",
- "Unable to delete group" : "Impossible de supprimer le groupe",
- "Unable to delete user" : "Impossible de supprimer l'utilisateur",
"Backups restored successfully" : "La sauvegarde a été restaurée avec succès",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Impossible de restaurer vos clés de chiffrement, merci de regarder journal owncloud.log ou de demander à votre administrateur",
"Language changed" : "Langue changée",
@@ -32,17 +26,28 @@
"No user supplied" : "Aucun utilisateur fourni",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Veuillez fournir un mot de passe administrateur de récupération de données, sinon toutes les données de l'utilisateur seront perdues",
"Wrong admin recovery password. Please check the password and try again." : "Mot de passe administrateur de récupération de données non valable. Veuillez vérifier le mot de passe et essayer à nouveau.",
- "Back-end doesn't support password change, but the users encryption key was successfully updated." : "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "L'infrastructure d'arrière-plan ne permet pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès.",
"Unable to change password" : "Impossible de modifier le mot de passe",
"Enabled" : "Activées",
"Not enabled" : "Désactivées",
"Recommended" : "Recommandées",
+ "Group already exists." : "Ce groupe existe déjà.",
+ "Unable to add group." : "Impossible d'ajouter le groupe.",
+ "Unable to delete group." : "Impossible de supprimer le groupe.",
"Saved" : "Sauvegardé",
"test email settings" : "tester les paramètres d'e-mail",
"If you received this email, the settings seem to be correct." : "Si vous recevez cet email, c'est que les paramètres sont corrects",
"A problem occurred while sending the email. Please revise your settings." : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres.",
"Email sent" : "Email envoyé",
"You need to set your user email before being able to send test emails." : "Vous devez configurer votre e-mail d'utilisateur avant de pouvoir envoyer des e-mails de test.",
+ "Invalid mail address" : "Adresse email non valide",
+ "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.",
+ "Forbidden" : "Iinterdit",
+ "Invalid user" : "Utilisateur non valide",
+ "Unable to change mail address" : "Impossible de modifier l'adresse de courriel",
+ "Email saved" : "E-mail sauvegardé",
"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",
"Sending..." : "Envoi en cours...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi",
"Error creating user" : "Erreur lors de la création de l'utilisateur",
"A valid password must be provided" : "Un mot de passe valide doit être saisi",
- "Warning: Home directory for user \"{user}\" already exists" : "Attention : Le dossier Home pour l'utilisateur \"{user}\" existe déjà",
+ "A valid email must be provided" : "Vous devez fournir une adresse de courriel valide",
"__language_name__" : "Français",
"Personal Info" : "Informations personnelles",
"SSL root certificates" : "Certificats racine SSL",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Avertissement de sécurité",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vous accédez à %s via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS à la place.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou bien de le déplacer à l'extérieur de la racine du serveur web.",
+ "Read-Only config enabled" : "Configuration en mode lecture seule activée",
+ "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." : "La configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture pour chaque mise à jour.",
"Setup Warning" : "Avertissement, problème de configuration",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP est apparemment configuré pour supprimer les blocs de documentation internes. Cela rendra plusieurs applications de base inaccessibles.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La raison est probablement l'utilisation d'un cache / accélérateur tel que Zend OPcache ou eAccelerator.",
@@ -108,21 +114,18 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite est utilisée comme base de donnée. Pour des installations plus volumineuse, nous vous conseillons de changer ce réglage. Pour migrer vers une autre base de donnée, utilisez la commande : \"occ db:convert-type\"",
"Module 'fileinfo' missing" : "Module 'fileinfo' manquant",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats pour la détection des types de fichiers.",
- "Your PHP version is outdated" : "Votre version de PHP est trop ancienne",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Votre version de PHP est trop ancienne. Nous vous recommandons fortement de migrer vers une version 5.3.8 ou plus récente encore, car les versions antérieures sont réputées problématiques. Il est possible que cette installation ne fonctionne pas correctement.",
"PHP charset is not set to UTF-8" : "Le jeu de caractères PHP n'est pas réglé sur UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractère non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
"Locale not working" : "Localisation non fonctionnelle",
- "System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec un qui supporte UTF-8.",
+ "System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec prise en charge d'UTF-8.",
"This means that there might be problems with certain characters in file names." : "Cela signifie qu'il pourrait y avoir des problèmes avec certains caractères dans les noms de fichier.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nous conseillons vivement d'installer les paquets requis sur votre système pour supporter l'un des paramètres régionaux suivants : %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets requis à la prise en charge de l'un des paramètres régionaux suivants : %s",
"URL generation in notification emails" : "Génération d'URL dans les mails de notification",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwritewebroot\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")",
- "Connectivity Checks" : "Vérification de la connectivité",
+ "Configuration Checks" : "Vérification de la configuration",
"No problems found" : "Aucun problème trouvé",
"Please double check the <a href='%s'>installation guides</a>." : "Veuillez vous référer au <a href='%s'>guide d'installation</a>.",
- "Last cron was executed at %s." : "Le dernier cron s'est exécuté à %s.",
- "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
+ "Last cron was executed at %s." : "Le dernier cron s'est exécuté à la date suivante : %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à la date suivante : %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
"Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !",
"Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php est enregistré en tant que service webcron pour appeler cron.php toutes les 15 minutes via http.",
@@ -131,17 +134,20 @@
"Allow users to share via link" : "Autoriser les utilisateurs à partager par lien",
"Enforce password protection" : "Obliger la protection par mot de passe",
"Allow public uploads" : "Autoriser les téléversements publics",
+ "Allow users to send mail notification for shared files" : "Autoriser les utilisateurs à envoyer des notifications par courriel concernant les partages",
"Set default expiration date" : "Spécifier la date d'expiration par défaut",
"Expire after " : "Expiration après ",
"days" : "jours",
"Enforce expiration date" : "Imposer la date d'expiration",
"Allow resharing" : "Autoriser le repartage",
"Restrict users to only share with users in their groups" : "N'autoriser les partages qu'entre membres de même groupes",
- "Allow users to send mail notification for shared files" : "Autoriser les utilisateurs à envoyer des notifications par courriel concernant les partages",
+ "Allow users to send mail notification for shared files to other users" : "Autoriser les utilisateurs à envoyer une notification par courriel concernant les fichiers partagés",
"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. ",
"Enforce HTTPS" : "Forcer HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forcer les clients à se connecter à %s via une connexion chiffrée.",
+ "Enforce HTTPS for subdomains" : "Forcer HTTPS pour les sous domaines",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Force les clients à se connecter à %s et aux sous domaines via une connexion chiffrée.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Veuillez vous connecter à cette instance %s via HTTPS pour activer ou désactiver SSL.",
"This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.",
"Send mode" : "Mode d'envoi",
@@ -169,18 +175,25 @@
"Documentation:" : "Documentation :",
"User Documentation" : "Documentation utilisateur",
"Admin Documentation" : "Documentation administrateur",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Cette application ne peut être installée à cause de ces dépendances non satisfaites:",
"Update to %s" : "Mettre à niveau vers la version %s",
"Enable only for specific groups" : "Activer uniquement pour certains groupes",
"Uninstall App" : "Désinstaller l'application",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "À bientôt !",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n",
"Administrator Documentation" : "Documentation administrateur",
"Online Documentation" : "Documentation en ligne",
"Forum" : "Forum",
"Bugtracker" : "Suivi de bugs",
"Commercial Support" : "Support commercial",
"Get the apps to sync your files" : "Obtenez les applications de synchronisation de vos fichiers",
+ "Desktop client" : "Client de bureau",
+ "Android app" : "Application Android",
+ "iOS app" : "Application iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Si voulez soutenir le projet, \n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">rejoignez le développement</a>\n\t\tou \n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">parlez-en</a> !",
- "Show First Run Wizard again" : "Revoir le premier lancement de l'installeur",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vous avez utilisé <strong>%s</strong> des <strong>%s<strong> disponibles",
+ "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
+ "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> des <strong>%s<strong> disponibles",
"Password" : "Mot de passe",
"Your password was changed" : "Votre mot de passe a été changé",
"Unable to change your password" : "Impossible de changer votre mot de passe",
@@ -213,12 +226,16 @@
"Restore Encryption Keys" : "Restaurer les clés de chiffrement",
"Delete Encryption Keys" : "Supprimer les clés de chiffrement",
"Show storage location" : "Afficher l'emplacement du stockage",
- "Show last log in" : "Montrer la dernière identification",
- "Login Name" : "Nom d'utilisateur",
+ "Show last log in" : "Montrer la dernière connexion",
+ "Show user backend" : "Montrer la source de l'identifiant",
+ "Send email to new user" : "Envoyer un courriel au nouvel utilisateur",
+ "Show email address" : "Afficher l'adresse email",
+ "Username" : "Nom d'utilisateur",
+ "E-Mail" : "Courriel",
"Create" : "Créer",
"Admin Recovery Password" : "Récupération du mot de passe administrateur",
- "Enter the recovery password in order to recover the users files during password change" : "Entrer le mot de passe de récupération dans le but de récupérer les fichiers utilisateurs pendant le changement de mot de passe",
- "Search Users and Groups" : "Chercher parmi les utilisateurs et groupes",
+ "Enter the recovery password in order to recover the users files during password change" : "Entrez le mot de passe de récupération pour récupérer les fichiers utilisateurs pendant le changement de mot de passe",
+ "Search Users" : "Recherche des utilisateurs",
"Add Group" : "Ajouter un groupe",
"Group" : "Groupe",
"Everyone" : "Tout le monde",
@@ -227,13 +244,13 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Veuillez entrer le quota de stockage (ex. \"512 MB\" ou \"12 GB\")",
"Unlimited" : "Illimité",
"Other" : "Autre",
- "Username" : "Nom d'utilisateur",
"Group Admin for" : "Administrateur de groupe pour",
"Quota" : "Quota",
"Storage Location" : "Emplacement du Stockage",
"Last Login" : "Dernière Connexion",
"change full name" : "Modifier le nom complet",
"set new password" : "Changer le mot de passe",
+ "change email address" : "changer l'adresse email",
"Default" : "Défaut"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 6baea02501f..8cded7dd394 100644
--- a/settings/l10n/gl.js
+++ b/settings/l10n/gl.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Seguridade & Avisos de configuración",
"Cron" : "Cron",
"Sharing" : "Compartindo",
"Security" : "Seguranza",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Produciuse un erro de autenticación",
"Your full name has been changed." : "O seu nome completo foi cambiado",
"Unable to change full name" : "Non é posíbel cambiar o nome completo",
- "Group already exists" : "O grupo xa existe",
- "Unable to add group" : "Non é posíbel engadir o grupo",
"Files decrypted successfully" : "Ficheiros descifrados satisfactoriamente",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Non foi posíbel descifrar os seus ficheiros. revise o ficheiro de rexistro owncloud.log, ou pregúntelle ao administrador",
"Couldn't decrypt your files, check your password and try again" : "Non foi posíbel descifrar os seus ficheiros. revise o seu contrasinal e ténteo de novo",
"Encryption keys deleted permanently" : "As chaves de cifrado foron eliminadas permanentemente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Non foi posíbel eliminar permanentemente as chaves de cifrado. revise o ficheiro de rexistro owncloud.log, ou pregúntelle ao administrador",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
- "Email saved" : "Correo gardado",
- "Invalid email" : "Correo incorrecto",
- "Unable to delete group" : "Non é posíbel eliminar o grupo.",
- "Unable to delete user" : "Non é posíbel eliminar o usuario",
"Backups restored successfully" : "As copias de seguranza foron restauradas satisfactoriamente",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Non foi posíbel restaurar as chaves de cifrado. revise o ficheiro de rexistro owncloud.log, ou pregúntelle ao administrador",
"Language changed" : "O idioma cambiou",
@@ -36,11 +31,27 @@ OC.L10N.register(
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "A infraestrutura non admite o cambio de contrasinal, mais a chave de cifrado dos usuarios foi actualizada correctamente.",
"Unable to change password" : "Non é posíbel cambiar o contrasinal",
"Enabled" : "Activado",
+ "Not enabled" : "Non habilitado",
+ "Recommended" : "Recomendado",
+ "Group already exists." : "Xa existe o grupo.",
+ "Unable to add group." : "Non é posíbel engadir o grupo.",
+ "Unable to delete group." : "Non é posíbel eliminar o grupo.",
"Saved" : "Gardado",
"test email settings" : "correo de proba dos axustes",
"If you received this email, the settings seem to be correct." : "Se recibiu este correo, semella que a configuración é correcta.",
+ "A problem occurred while sending the email. Please revise your settings." : "Produciuse un erro mentras enviaba o correo. Por favor revise a súa configuración.",
"Email sent" : "Correo enviado",
"You need to set your user email before being able to send test emails." : "É necesario configurar o correo do usuario antes de poder enviar mensaxes de correo de proba.",
+ "Invalid mail address" : "Enderezo de correo incorrecto",
+ "Unable to create user." : "Non é posíbel crear o usuario.",
+ "Your %s account was created" : "Foi creada a conta %s",
+ "Unable to delete user." : "Non é posíbel eliminar o usuario.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario incorrecto",
+ "Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
+ "Email saved" : "Correo gardado",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ten certeza de querer engadir \"{domain}\" como dominio de confianza?",
+ "Add trusted domain" : "Engadir dominio de confianza",
"Sending..." : "Enviando...",
"All" : "Todo",
"Please wait...." : "Agarde...",
@@ -60,6 +71,7 @@ OC.L10N.register(
"So-so password" : "Contrasinal non moi aló",
"Good password" : "Bo contrasinal",
"Strong password" : "Contrasinal forte",
+ "Valid until {date}" : "Válido ate {date}",
"Delete" : "Eliminar",
"Decrypting files... Please wait, this can take some time." : "Descifrando ficheiros... isto pode levar un anaco.",
"Delete encryption keys permanently." : "Eliminar permanentemente as chaves de cifrado.",
@@ -70,14 +82,16 @@ OC.L10N.register(
"A valid group name must be provided" : "Debe fornecer un nome de grupo",
"deleted {groupName}" : "{groupName} foi eliminado",
"undo" : "desfacer",
+ "no group" : "sen grupo",
"never" : "nunca",
"deleted {userName}" : "{userName} foi eliminado",
"add group" : "engadir un grupo",
"A valid username must be provided" : "Debe fornecer un nome de usuario",
"Error creating user" : "Produciuse un erro ao crear o usuario",
"A valid password must be provided" : "Debe fornecer un contrasinal",
- "Warning: Home directory for user \"{user}\" already exists" : "Aviso: O directorio persoal para o usuario «{user}» xa existe",
+ "A valid email must be provided" : "Ten que fornecer un correo funcional",
"__language_name__" : "Galego",
+ "Personal Info" : "Información personal",
"SSL root certificates" : "Certificados raíz SSL",
"Encryption" : "Cifrado",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (problemas críticos, erros, avisos, información, depuración)",
@@ -93,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Aviso de seguranza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accedendo a %s a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través de internet. O ficheiro .htaccess non está a traballar. Suxerímoslle que configure o seu servidor web de tal maneira que o cartafol de datos non estea accesíbel ou que mova o o directorio de datos fóra da raíz de documentos do servidor web.",
+ "Read-Only config enabled" : "Activada a restrición da configuración a só lectura",
+ "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." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.",
"Setup Warning" : "Configurar os avisos",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.",
@@ -101,16 +116,16 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Empregarase SQLite como base de datos. Para instalacións máis grandes recomendámoslle que cambie isto. Para migrar a outra base de datos use a ferramenta en liña de ordes: «occ db:convert-type»",
"Module 'fileinfo' missing" : "Non se atopou o módulo «fileinfo»",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.",
- "Your PHP version is outdated" : "A versión de PHP está desactualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A versión de PHP está desactualizada. Recomendámoslle que a actualice á versión 5.3.8 ou posterior xa que as versións anteriores son coñecidas por estragarse. É probábel que esta instalación no estea a funcionar correctamente.",
"PHP charset is not set to UTF-8" : "O xogo de caracteres de PHP non está estabelecido a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "O xogo de caracteres de PHP non está estabelecido a UTF-8. Isto pode causar problemas importantes con caracteres non-ASCII nos nomes de ficheiro. Recomendámoslle que cambie o valor de php.ini «default_charset» a «UTF-8».",
"Locale not working" : "A configuración rexional non funciona",
"System locale can not be set to a one which supports UTF-8." : "Non é posíbel estabelecer a configuración rexional do sistema a unha que admita UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que pode haber problemas con certos caracteres en nomes de ficheiro.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Recomendamoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomendámoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
"URL generation in notification emails" : "Xeración dos URL nos correos de notificación",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a instalación non foi feita na raíz do dominio e usa o sistema de cron, poden xurdir problemas coa xeración dos URL. Para evitar estes problemas, axuste a opción «overwritewebroot» no ficheiro config.php ás ruta de webroot da súa instalación (suxírese: «%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\")" : "Se a instalación no está feita na raíz do dominio e usa o sistema cron, pode haber problemas coa xeración de URL. Para evitar estes problemas, axuste a opción «overwrite.cli.url» no seu ficheiro config.php á ruta webroot da instalación (suxestión: «%s»)",
+ "Configuration Checks" : "Comprobacións da configuración",
+ "No problems found" : "Non se atoparon problemas",
"Please double check the <a href='%s'>installation guides</a>." : "Volva comprobar as <a href='%s'>guías de instalación</a>",
"Last cron was executed at %s." : "O último «cron» executouse ás %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "O último «cron» executouse ás %s. Isto supón que pasou máis dunha hora. polo que semella que algo vai mal.",
@@ -122,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Permitir que os usuarios compartan a través de ligazóns",
"Enforce password protection" : "Forzar a protección por contrasinal",
"Allow public uploads" : "Permitir os envíos públicos",
+ "Allow users to send mail notification for shared files" : "Permitirlle aos usuarios enviar notificacións por correo para os ficheiros compartidos",
"Set default expiration date" : "Definir a data predeterminada de caducidade",
"Expire after " : "Caduca após",
"days" : "días",
"Enforce expiration date" : "Obrigar a data de caducidade",
"Allow resharing" : "Permitir compartir",
"Restrict users to only share with users in their groups" : "Restrinxir aos usuarios a compartir só cos usuarios dos seus grupos",
- "Allow users to send mail notification for shared files" : "Permitirlle aos usuarios enviar notificacións por correo para os ficheiros compartidos",
+ "Allow users to send mail notification for shared files to other users" : "Permitirlle aos usuarios enviar notificacións por correo a outros usuarios para notificarlles os ficheiros compartidos",
"Exclude groups from sharing" : "Excluír grupos da compartición",
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar que os clientes se conecten a %s empregando unha conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para os subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forzar que os clientes se conecten a %s e aos subdominios empregando unha conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Conéctese a %s empregando HTTPS para activar ou desactivar o forzado de SSL.",
"This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.",
"Send mode" : "Modo de envío",
@@ -145,6 +163,7 @@ OC.L10N.register(
"Credentials" : "Credenciais",
"SMTP Username" : "Nome de usuario SMTP",
"SMTP Password" : "Contrasinal SMTP",
+ "Store credentials" : "Gardar credenciais",
"Test email settings" : "Correo de proba dos axustes",
"Send email" : "Enviar o correo",
"Log level" : "Nivel de rexistro",
@@ -153,18 +172,28 @@ OC.L10N.register(
"Version" : "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Desenvolvido pola <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidade ownCloud</a>, o <a href=\"https://github.com/owncloud\" target=\"_blank\">código fonte</a> está baixo a licenza <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Máis aplicativos",
+ "Add your app" : "Engada o seu aplicativo",
"by" : "por",
+ "licensed" : "licencidado",
"Documentation:" : "Documentación:",
"User Documentation" : "Documentación do usuario",
"Admin Documentation" : "Documentación do administrador",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Non é posíbel instalar esta aplicación por mor de non cumprirse as dependencias:",
+ "Update to %s" : "Actualizar a %s",
"Enable only for specific groups" : "Activar só para grupos específicos",
"Uninstall App" : "Desinstalar unha aplicación",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ola,<br><br>Só facerlle saber que dispón da conta %s.<br><br>O seu nome de usuario: %s<br>Para acceder a ela: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Saúdos!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ola,\n\nSó facerlle saber que dispón da conta %s.\n\nO seu nome de usuario: %s\nPara acceder a ela: %s\n",
"Administrator Documentation" : "Documentación do administrador",
"Online Documentation" : "Documentación na Rede",
"Forum" : "Foro",
"Bugtracker" : "Seguemento de fallos",
"Commercial Support" : "Asistencia comercial",
"Get the apps to sync your files" : "Obteña as aplicacións para sincronizar os seus ficheiros",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "Aplicación Android",
+ "iOS app" : "Aplicación iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se quere colaborar co proxecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">participar no desenvolvemento</a>\n\t\tou\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">axudar a difundilo</a>!",
"Show First Run Wizard again" : "Amosar o axudante da primeira execución outra vez",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ten en uso <strong>%s</strong> do total dispoñíbel de <strong>%s</strong>",
@@ -188,6 +217,10 @@ OC.L10N.register(
"Choose as profile image" : "Escolla unha imaxe para o perfil",
"Language" : "Idioma",
"Help translate" : "Axude na tradución",
+ "Common Name" : "Nome común",
+ "Valid until" : "Válido ate",
+ "Issued By" : "Proporcionado por",
+ "Valid until %s" : "Válido ate %s",
"Import Root Certificate" : "Importar o certificado raíz",
"The encryption app is no longer enabled, please decrypt all your files" : "A aplicación de cifrado non está activada, descifre todos os ficheiros",
"Log-in password" : "Contrasinal de acceso",
@@ -195,11 +228,17 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "As chaves de cifrado foron movidas á copia de seguranza. Se ten algún problema pode restaurar as chaves. Elimineas permanentemente só se está seguro de que é posíbel descifrar correctamente todos os ficheiros.",
"Restore Encryption Keys" : "Restaurar as chaves de cifrado",
"Delete Encryption Keys" : "Eliminar as chaves de cifrado",
- "Login Name" : "Nome de acceso",
+ "Show storage location" : "Mostrar localización de almacenamento",
+ "Show last log in" : "Mostrar última conexión",
+ "Show user backend" : "Amosar a infraestrutura do usuario",
+ "Send email to new user" : "Enviar correo ao novo usuario",
+ "Show email address" : "Amosar o enderezo de correo",
+ "Username" : "Nome de usuario",
+ "E-Mail" : "Correo-e",
"Create" : "Crear",
"Admin Recovery Password" : "Contrasinal de recuperación do administrador",
"Enter the recovery password in order to recover the users files during password change" : "Introduza o contrasinal de recuperación para recuperar os ficheiros dos usuarios durante o cambio de contrasinal",
- "Search Users and Groups" : "Buscar usuarios e grupos",
+ "Search Users" : "Busca de usuarios",
"Add Group" : "Engadir un grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
@@ -208,12 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Introduza a cota de almacenamento (p.ex. «512 MB» ou «12 GB»)",
"Unlimited" : "Sen límites",
"Other" : "Outro",
- "Username" : "Nome de usuario",
+ "Group Admin for" : "Grupo de Admin para",
"Quota" : "Cota",
"Storage Location" : "Localización do almacenamento",
+ "User Backend" : "Infraestrutura do usuario",
"Last Login" : "Último acceso",
"change full name" : "Cambiar o nome completo",
"set new password" : "estabelecer un novo contrasinal",
+ "change email address" : "cambiar o enderezo de correo",
"Default" : "Predeterminado"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index dfc7c123dce..8c6382c5936 100644
--- a/settings/l10n/gl.json
+++ b/settings/l10n/gl.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Seguridade & Avisos de configuración",
"Cron" : "Cron",
"Sharing" : "Compartindo",
"Security" : "Seguranza",
@@ -7,18 +8,12 @@
"Authentication error" : "Produciuse un erro de autenticación",
"Your full name has been changed." : "O seu nome completo foi cambiado",
"Unable to change full name" : "Non é posíbel cambiar o nome completo",
- "Group already exists" : "O grupo xa existe",
- "Unable to add group" : "Non é posíbel engadir o grupo",
"Files decrypted successfully" : "Ficheiros descifrados satisfactoriamente",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Non foi posíbel descifrar os seus ficheiros. revise o ficheiro de rexistro owncloud.log, ou pregúntelle ao administrador",
"Couldn't decrypt your files, check your password and try again" : "Non foi posíbel descifrar os seus ficheiros. revise o seu contrasinal e ténteo de novo",
"Encryption keys deleted permanently" : "As chaves de cifrado foron eliminadas permanentemente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Non foi posíbel eliminar permanentemente as chaves de cifrado. revise o ficheiro de rexistro owncloud.log, ou pregúntelle ao administrador",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
- "Email saved" : "Correo gardado",
- "Invalid email" : "Correo incorrecto",
- "Unable to delete group" : "Non é posíbel eliminar o grupo.",
- "Unable to delete user" : "Non é posíbel eliminar o usuario",
"Backups restored successfully" : "As copias de seguranza foron restauradas satisfactoriamente",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Non foi posíbel restaurar as chaves de cifrado. revise o ficheiro de rexistro owncloud.log, ou pregúntelle ao administrador",
"Language changed" : "O idioma cambiou",
@@ -34,11 +29,27 @@
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "A infraestrutura non admite o cambio de contrasinal, mais a chave de cifrado dos usuarios foi actualizada correctamente.",
"Unable to change password" : "Non é posíbel cambiar o contrasinal",
"Enabled" : "Activado",
+ "Not enabled" : "Non habilitado",
+ "Recommended" : "Recomendado",
+ "Group already exists." : "Xa existe o grupo.",
+ "Unable to add group." : "Non é posíbel engadir o grupo.",
+ "Unable to delete group." : "Non é posíbel eliminar o grupo.",
"Saved" : "Gardado",
"test email settings" : "correo de proba dos axustes",
"If you received this email, the settings seem to be correct." : "Se recibiu este correo, semella que a configuración é correcta.",
+ "A problem occurred while sending the email. Please revise your settings." : "Produciuse un erro mentras enviaba o correo. Por favor revise a súa configuración.",
"Email sent" : "Correo enviado",
"You need to set your user email before being able to send test emails." : "É necesario configurar o correo do usuario antes de poder enviar mensaxes de correo de proba.",
+ "Invalid mail address" : "Enderezo de correo incorrecto",
+ "Unable to create user." : "Non é posíbel crear o usuario.",
+ "Your %s account was created" : "Foi creada a conta %s",
+ "Unable to delete user." : "Non é posíbel eliminar o usuario.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario incorrecto",
+ "Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
+ "Email saved" : "Correo gardado",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ten certeza de querer engadir \"{domain}\" como dominio de confianza?",
+ "Add trusted domain" : "Engadir dominio de confianza",
"Sending..." : "Enviando...",
"All" : "Todo",
"Please wait...." : "Agarde...",
@@ -58,6 +69,7 @@
"So-so password" : "Contrasinal non moi aló",
"Good password" : "Bo contrasinal",
"Strong password" : "Contrasinal forte",
+ "Valid until {date}" : "Válido ate {date}",
"Delete" : "Eliminar",
"Decrypting files... Please wait, this can take some time." : "Descifrando ficheiros... isto pode levar un anaco.",
"Delete encryption keys permanently." : "Eliminar permanentemente as chaves de cifrado.",
@@ -68,14 +80,16 @@
"A valid group name must be provided" : "Debe fornecer un nome de grupo",
"deleted {groupName}" : "{groupName} foi eliminado",
"undo" : "desfacer",
+ "no group" : "sen grupo",
"never" : "nunca",
"deleted {userName}" : "{userName} foi eliminado",
"add group" : "engadir un grupo",
"A valid username must be provided" : "Debe fornecer un nome de usuario",
"Error creating user" : "Produciuse un erro ao crear o usuario",
"A valid password must be provided" : "Debe fornecer un contrasinal",
- "Warning: Home directory for user \"{user}\" already exists" : "Aviso: O directorio persoal para o usuario «{user}» xa existe",
+ "A valid email must be provided" : "Ten que fornecer un correo funcional",
"__language_name__" : "Galego",
+ "Personal Info" : "Información personal",
"SSL root certificates" : "Certificados raíz SSL",
"Encryption" : "Cifrado",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (problemas críticos, erros, avisos, información, depuración)",
@@ -91,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Aviso de seguranza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accedendo a %s a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través de internet. O ficheiro .htaccess non está a traballar. Suxerímoslle que configure o seu servidor web de tal maneira que o cartafol de datos non estea accesíbel ou que mova o o directorio de datos fóra da raíz de documentos do servidor web.",
+ "Read-Only config enabled" : "Activada a restrición da configuración a só lectura",
+ "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." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.",
"Setup Warning" : "Configurar os avisos",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.",
@@ -99,16 +114,16 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Empregarase SQLite como base de datos. Para instalacións máis grandes recomendámoslle que cambie isto. Para migrar a outra base de datos use a ferramenta en liña de ordes: «occ db:convert-type»",
"Module 'fileinfo' missing" : "Non se atopou o módulo «fileinfo»",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.",
- "Your PHP version is outdated" : "A versión de PHP está desactualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A versión de PHP está desactualizada. Recomendámoslle que a actualice á versión 5.3.8 ou posterior xa que as versións anteriores son coñecidas por estragarse. É probábel que esta instalación no estea a funcionar correctamente.",
"PHP charset is not set to UTF-8" : "O xogo de caracteres de PHP non está estabelecido a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "O xogo de caracteres de PHP non está estabelecido a UTF-8. Isto pode causar problemas importantes con caracteres non-ASCII nos nomes de ficheiro. Recomendámoslle que cambie o valor de php.ini «default_charset» a «UTF-8».",
"Locale not working" : "A configuración rexional non funciona",
"System locale can not be set to a one which supports UTF-8." : "Non é posíbel estabelecer a configuración rexional do sistema a unha que admita UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que pode haber problemas con certos caracteres en nomes de ficheiro.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Recomendamoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomendámoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
"URL generation in notification emails" : "Xeración dos URL nos correos de notificación",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a instalación non foi feita na raíz do dominio e usa o sistema de cron, poden xurdir problemas coa xeración dos URL. Para evitar estes problemas, axuste a opción «overwritewebroot» no ficheiro config.php ás ruta de webroot da súa instalación (suxírese: «%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\")" : "Se a instalación no está feita na raíz do dominio e usa o sistema cron, pode haber problemas coa xeración de URL. Para evitar estes problemas, axuste a opción «overwrite.cli.url» no seu ficheiro config.php á ruta webroot da instalación (suxestión: «%s»)",
+ "Configuration Checks" : "Comprobacións da configuración",
+ "No problems found" : "Non se atoparon problemas",
"Please double check the <a href='%s'>installation guides</a>." : "Volva comprobar as <a href='%s'>guías de instalación</a>",
"Last cron was executed at %s." : "O último «cron» executouse ás %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "O último «cron» executouse ás %s. Isto supón que pasou máis dunha hora. polo que semella que algo vai mal.",
@@ -120,17 +135,20 @@
"Allow users to share via link" : "Permitir que os usuarios compartan a través de ligazóns",
"Enforce password protection" : "Forzar a protección por contrasinal",
"Allow public uploads" : "Permitir os envíos públicos",
+ "Allow users to send mail notification for shared files" : "Permitirlle aos usuarios enviar notificacións por correo para os ficheiros compartidos",
"Set default expiration date" : "Definir a data predeterminada de caducidade",
"Expire after " : "Caduca após",
"days" : "días",
"Enforce expiration date" : "Obrigar a data de caducidade",
"Allow resharing" : "Permitir compartir",
"Restrict users to only share with users in their groups" : "Restrinxir aos usuarios a compartir só cos usuarios dos seus grupos",
- "Allow users to send mail notification for shared files" : "Permitirlle aos usuarios enviar notificacións por correo para os ficheiros compartidos",
+ "Allow users to send mail notification for shared files to other users" : "Permitirlle aos usuarios enviar notificacións por correo a outros usuarios para notificarlles os ficheiros compartidos",
"Exclude groups from sharing" : "Excluír grupos da compartición",
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar que os clientes se conecten a %s empregando unha conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para os subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forzar que os clientes se conecten a %s e aos subdominios empregando unha conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Conéctese a %s empregando HTTPS para activar ou desactivar o forzado de SSL.",
"This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.",
"Send mode" : "Modo de envío",
@@ -143,6 +161,7 @@
"Credentials" : "Credenciais",
"SMTP Username" : "Nome de usuario SMTP",
"SMTP Password" : "Contrasinal SMTP",
+ "Store credentials" : "Gardar credenciais",
"Test email settings" : "Correo de proba dos axustes",
"Send email" : "Enviar o correo",
"Log level" : "Nivel de rexistro",
@@ -151,18 +170,28 @@
"Version" : "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Desenvolvido pola <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidade ownCloud</a>, o <a href=\"https://github.com/owncloud\" target=\"_blank\">código fonte</a> está baixo a licenza <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Máis aplicativos",
+ "Add your app" : "Engada o seu aplicativo",
"by" : "por",
+ "licensed" : "licencidado",
"Documentation:" : "Documentación:",
"User Documentation" : "Documentación do usuario",
"Admin Documentation" : "Documentación do administrador",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Non é posíbel instalar esta aplicación por mor de non cumprirse as dependencias:",
+ "Update to %s" : "Actualizar a %s",
"Enable only for specific groups" : "Activar só para grupos específicos",
"Uninstall App" : "Desinstalar unha aplicación",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ola,<br><br>Só facerlle saber que dispón da conta %s.<br><br>O seu nome de usuario: %s<br>Para acceder a ela: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Saúdos!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ola,\n\nSó facerlle saber que dispón da conta %s.\n\nO seu nome de usuario: %s\nPara acceder a ela: %s\n",
"Administrator Documentation" : "Documentación do administrador",
"Online Documentation" : "Documentación na Rede",
"Forum" : "Foro",
"Bugtracker" : "Seguemento de fallos",
"Commercial Support" : "Asistencia comercial",
"Get the apps to sync your files" : "Obteña as aplicacións para sincronizar os seus ficheiros",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "Aplicación Android",
+ "iOS app" : "Aplicación iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se quere colaborar co proxecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">participar no desenvolvemento</a>\n\t\tou\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">axudar a difundilo</a>!",
"Show First Run Wizard again" : "Amosar o axudante da primeira execución outra vez",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ten en uso <strong>%s</strong> do total dispoñíbel de <strong>%s</strong>",
@@ -186,6 +215,10 @@
"Choose as profile image" : "Escolla unha imaxe para o perfil",
"Language" : "Idioma",
"Help translate" : "Axude na tradución",
+ "Common Name" : "Nome común",
+ "Valid until" : "Válido ate",
+ "Issued By" : "Proporcionado por",
+ "Valid until %s" : "Válido ate %s",
"Import Root Certificate" : "Importar o certificado raíz",
"The encryption app is no longer enabled, please decrypt all your files" : "A aplicación de cifrado non está activada, descifre todos os ficheiros",
"Log-in password" : "Contrasinal de acceso",
@@ -193,11 +226,17 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "As chaves de cifrado foron movidas á copia de seguranza. Se ten algún problema pode restaurar as chaves. Elimineas permanentemente só se está seguro de que é posíbel descifrar correctamente todos os ficheiros.",
"Restore Encryption Keys" : "Restaurar as chaves de cifrado",
"Delete Encryption Keys" : "Eliminar as chaves de cifrado",
- "Login Name" : "Nome de acceso",
+ "Show storage location" : "Mostrar localización de almacenamento",
+ "Show last log in" : "Mostrar última conexión",
+ "Show user backend" : "Amosar a infraestrutura do usuario",
+ "Send email to new user" : "Enviar correo ao novo usuario",
+ "Show email address" : "Amosar o enderezo de correo",
+ "Username" : "Nome de usuario",
+ "E-Mail" : "Correo-e",
"Create" : "Crear",
"Admin Recovery Password" : "Contrasinal de recuperación do administrador",
"Enter the recovery password in order to recover the users files during password change" : "Introduza o contrasinal de recuperación para recuperar os ficheiros dos usuarios durante o cambio de contrasinal",
- "Search Users and Groups" : "Buscar usuarios e grupos",
+ "Search Users" : "Busca de usuarios",
"Add Group" : "Engadir un grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
@@ -206,12 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Introduza a cota de almacenamento (p.ex. «512 MB» ou «12 GB»)",
"Unlimited" : "Sen límites",
"Other" : "Outro",
- "Username" : "Nome de usuario",
+ "Group Admin for" : "Grupo de Admin para",
"Quota" : "Cota",
"Storage Location" : "Localización do almacenamento",
+ "User Backend" : "Infraestrutura do usuario",
"Last Login" : "Último acceso",
"change full name" : "Cambiar o nome completo",
"set new password" : "estabelecer un novo contrasinal",
+ "change email address" : "cambiar o enderezo de correo",
"Default" : "Predeterminado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index 23c2d6f9d15..b273cc2d082 100644
--- a/settings/l10n/he.js
+++ b/settings/l10n/he.js
@@ -6,12 +6,6 @@ OC.L10N.register(
"Security" : "אבטחה",
"Log" : "יומן",
"Authentication error" : "שגיאת הזדהות",
- "Group already exists" : "הקבוצה כבר קיימת",
- "Unable to add group" : "לא ניתן להוסיף קבוצה",
- "Email saved" : "הדוא״ל נשמר",
- "Invalid email" : "דוא״ל לא חוקי",
- "Unable to delete group" : "לא ניתן למחוק את הקבוצה",
- "Unable to delete user" : "לא ניתן למחוק את המשתמש",
"Language changed" : "שפה השתנתה",
"Invalid request" : "בקשה לא חוקית",
"Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
@@ -20,6 +14,7 @@ OC.L10N.register(
"Couldn't update app." : "לא ניתן לעדכן את היישום.",
"Saved" : "נשמר",
"Email sent" : "הודעת הדוא״ל נשלחה",
+ "Email saved" : "הדוא״ל נשמר",
"All" : "הכל",
"Please wait...." : "נא להמתין…",
"Disable" : "בטל",
@@ -80,14 +75,13 @@ OC.L10N.register(
"Language" : "פה",
"Help translate" : "עזרה בתרגום",
"Import Root Certificate" : "ייבוא אישור אבטחת שורש",
- "Login Name" : "שם כניסה",
+ "Username" : "שם משתמש",
"Create" : "יצירה",
"Admin Recovery Password" : "ססמת השחזור של המנהל",
"Group" : "קבוצה",
"Default Quota" : "מכסת בררת המחדל",
"Unlimited" : "ללא הגבלה",
"Other" : "אחר",
- "Username" : "שם משתמש",
"Quota" : "מכסה",
"set new password" : "הגדרת ססמה חדשה",
"Default" : "בררת מחדל"
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index 3acf0e04f67..2e0ca52fad4 100644
--- a/settings/l10n/he.json
+++ b/settings/l10n/he.json
@@ -4,12 +4,6 @@
"Security" : "אבטחה",
"Log" : "יומן",
"Authentication error" : "שגיאת הזדהות",
- "Group already exists" : "הקבוצה כבר קיימת",
- "Unable to add group" : "לא ניתן להוסיף קבוצה",
- "Email saved" : "הדוא״ל נשמר",
- "Invalid email" : "דוא״ל לא חוקי",
- "Unable to delete group" : "לא ניתן למחוק את הקבוצה",
- "Unable to delete user" : "לא ניתן למחוק את המשתמש",
"Language changed" : "שפה השתנתה",
"Invalid request" : "בקשה לא חוקית",
"Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
@@ -18,6 +12,7 @@
"Couldn't update app." : "לא ניתן לעדכן את היישום.",
"Saved" : "נשמר",
"Email sent" : "הודעת הדוא״ל נשלחה",
+ "Email saved" : "הדוא״ל נשמר",
"All" : "הכל",
"Please wait...." : "נא להמתין…",
"Disable" : "בטל",
@@ -78,14 +73,13 @@
"Language" : "פה",
"Help translate" : "עזרה בתרגום",
"Import Root Certificate" : "ייבוא אישור אבטחת שורש",
- "Login Name" : "שם כניסה",
+ "Username" : "שם משתמש",
"Create" : "יצירה",
"Admin Recovery Password" : "ססמת השחזור של המנהל",
"Group" : "קבוצה",
"Default Quota" : "מכסת בררת המחדל",
"Unlimited" : "ללא הגבלה",
"Other" : "אחר",
- "Username" : "שם משתמש",
"Quota" : "מכסה",
"set new password" : "הגדרת ססמה חדשה",
"Default" : "בררת מחדל"
diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js
index 6ccc12a97c0..4291345571d 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -9,18 +9,12 @@ OC.L10N.register(
"Authentication error" : "Pogrešna autentikacija",
"Your full name has been changed." : "Vaše puno ime je promijenjeno.",
"Unable to change full name" : "Puno ime nije moguće promijeniti.",
- "Group already exists" : "Grupa već postoji",
- "Unable to add group" : "Grupu nije moguće dodati",
"Files decrypted successfully" : "Datoteke uspješno dešifrirane",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Vaše datoteke nije moguće dešifrirati, molimo provjerite svoj owncloud.logili kontaktirajte svog administratora.",
"Couldn't decrypt your files, check your password and try again" : "Vaše datoteke nije moguće dešifrirati, provjerite svoju lozinku i pokušajte ponovno.",
"Encryption keys deleted permanently" : "Ključevi za šifriranje trajno izbrisani",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće trajno izbrisati, molimo provjerite svoj owncloud.logili kontaktirajte svog administratora.",
"Couldn't remove app." : "Nije moguće ukloniti app.",
- "Email saved" : "E-pošta spremljena",
- "Invalid email" : "E-pošta neispravna",
- "Unable to delete group" : "Grupu nije moguće izbrisati",
- "Unable to delete user" : "Korisnika nije moguće izbrisati",
"Backups restored successfully" : "Sigurnosne kopije uspješno obnovljene",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće obnoviti, molimo provjerite svoj owncloud.logili kontaktirajte svog administratora.",
"Language changed" : "Promjena jezika",
@@ -41,6 +35,7 @@ OC.L10N.register(
"If you received this email, the settings seem to be correct." : "Ako ste ovu e-poštu primili,čini se da su postavke ispravne.",
"Email sent" : "E-pošta je poslana",
"You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.",
+ "Email saved" : "E-pošta spremljena",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -79,7 +74,6 @@ OC.L10N.register(
"A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
"Error creating user" : "Pogrešno kreiranje korisnika",
"A valid password must be provided" : "Nužno je navesti valjanu lozinku",
- "Warning: Home directory for user \"{user}\" already exists" : "Upozorenje: Osnovni direktorij za korisnika \"{user}\" već postoji",
"__language_name__" : "__jezik_naziv___",
"SSL root certificates" : "SSL Root certifikati",
"Encryption" : "Šifriranje",
@@ -96,7 +90,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Sigurnosno upozorenje",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vi %s pristupate putem HTTP. Toplo vam preporučujemo da svoj poslužitelj konfigurirate takoda umjesto HTTP zahtijeva korištenje HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vašem podatkovnom direktoriju i vašim datotekama pristup je vjerojatno moguć s interneta.Datoteka .htaccess ne radi. Toplo vam preporučujemo da svoj web poslužitelj konfigurirate tako daje pristup podatkovnom direktoriju nemoguć ili pak podatkovni direktorij premjestite izvan korijena dokumentaweb poslužitelja.",
"Setup Warning" : "Upozorenje programa za postavljanje",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je očigledno postavljen na strip inline doc blocks. To će nekoliko osnovnih aplikacija učiniti nedostupnima.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Uzrok tome je vjerojatno neki ubrzivač predmemoriranja kao što je Zend OPcache ilieAccelerator.",
@@ -104,16 +97,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite se koristi kao baza podataka. Za veće instalacije preporučujemo da se to promijeni.Za migraciju na neku drugu bazu podataka koristite naredbeni redak: 'occ db: convert-type'",
"Module 'fileinfo' missing" : "Nedostaje modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Tolo vam preporučjemo da taj modul omogućitekako biste dobili najbolje rezultate u detekciji mime vrste.",
- "Your PHP version is outdated" : "Vaša verzija PHP je zastarjela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vaša verzija PHP je zastarjela. Tolo vam preporučujemo da je ažurirate na 5.3.8.ili još novije jer je poznato da su starije verzije neispravne. Moguće je da ovainstalacija ne radi ispravno.",
"PHP charset is not set to UTF-8" : "PHP Charset nije postavljen na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset nije postavljen na UTF-8. To može prouzročiti ozbiljne probleme s non-ASCII znakovimau nazivima datoteka. Toplo vam preporučujemo da vrijednost 'default_charset' php.ini promijeniteu 'UTF-8'.",
"Locale not working" : "Regionalna shema ne radi",
"System locale can not be set to a one which supports UTF-8." : "Regionalnu shemu sustava nemoguće je postaviti na neku koja podržava UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znači da se mogu javiti problemi s određenim znakovima u datoteci.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Toplo preporučpujemo da u svoj sustav instalirate potrebne pakete koji će podržatijednu od sljedećih regionalnih shema: %s.",
"URL generation in notification emails" : "Generiranje URL-a u notifikacijskoj e-pošti",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ako vaša instalacija nije instalirana u korijenu domene i koristi sustav cron,mogu se javiti problemi s generiranjem URL. Da biste takve probleme izbjegli,molimo postavite opciju \"overwritewebroot\" u vašoj datoteci config.php.na webroot path vaše instalacije (Predlažemo: \"%s\").",
"Please double check the <a href='%s'>installation guides</a>." : "Molimo provjerite <a href='%s'> instalacijske vodiče </a>.",
"Last cron was executed at %s." : "Zadnji cron je izvršen na %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Zadnji cron izvršen je na %s. Bilo je to prije više od jednog sata, čini se da nešto nije u redu.",
@@ -125,13 +114,13 @@ OC.L10N.register(
"Allow users to share via link" : "Dopustite korisnicia dijeljenje putem veze",
"Enforce password protection" : "Nametnite zaštitu lozinki",
"Allow public uploads" : "Dopustite javno učitavanje sadržaja",
+ "Allow users to send mail notification for shared files" : "Dopustite korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
"Set default expiration date" : "Postavite zadani datum isteka",
"Expire after " : "Istek nakon",
"days" : "dana",
"Enforce expiration date" : "Nametnite datum isteka",
"Allow resharing" : "Dopustite ponovno dijeljenje zajedničkih resursa",
"Restrict users to only share with users in their groups" : "Ograničite korisnike na meusobno dijeljenje resursa samo s korisnicima unutar svoje grupe",
- "Allow users to send mail notification for shared files" : "Dopustite korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
"Exclude groups from sharing" : "Isključite grupe iz dijeljenja zajedničkih resursa",
"These groups will still be able to receive shares, but not to initiate them." : "Ove će grupe još uvijek moći primati dijeljene resurse, ali ne i inicirati ih",
"Enforce HTTPS" : "Nametnite HTTPS",
@@ -161,6 +150,7 @@ OC.L10N.register(
"Admin Documentation" : "Admin dokumentacija",
"Enable only for specific groups" : "Omogućite samo za specifične grupe",
"Uninstall App" : "Deinstalirajte app",
+ "Cheers!" : "Cheers!",
"Administrator Documentation" : "Dokumentacija administratora",
"Online Documentation" : "Online dokumentacija",
"Forum" : "Forum",
@@ -203,11 +193,10 @@ OC.L10N.register(
"Delete Encryption Keys" : "Izbrišite ključeve za šifriranje",
"Show storage location" : "Prikaži mjesto pohrane",
"Show last log in" : "Prikaži zadnje spajanje",
- "Login Name" : "Ime za prijavu",
+ "Username" : "Korisničko ime",
"Create" : "Kreirajte",
"Admin Recovery Password" : "Admin lozinka za oporavak",
"Enter the recovery password in order to recover the users files during password change" : "Unesite lozinku za oporavak da biste oporavili korisničke datoteke tijekom promjene lozinke",
- "Search Users and Groups" : "Pretražite korisnike i grupe",
"Add Group" : "Dodajte grupu",
"Group" : "Grupa",
"Everyone" : "Svi",
@@ -216,7 +205,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Molimo unesite kvotu za spremanje (npr: \"512 MB\" ili \"12 GB\")",
"Unlimited" : "Neograničeno",
"Other" : "Ostalo",
- "Username" : "Korisničko ime",
"Quota" : "Kvota",
"Storage Location" : "Mjesto za spremanje",
"Last Login" : "Zadnja prijava",
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index 57075ab7984..39586f6d652 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -7,18 +7,12 @@
"Authentication error" : "Pogrešna autentikacija",
"Your full name has been changed." : "Vaše puno ime je promijenjeno.",
"Unable to change full name" : "Puno ime nije moguće promijeniti.",
- "Group already exists" : "Grupa već postoji",
- "Unable to add group" : "Grupu nije moguće dodati",
"Files decrypted successfully" : "Datoteke uspješno dešifrirane",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Vaše datoteke nije moguće dešifrirati, molimo provjerite svoj owncloud.logili kontaktirajte svog administratora.",
"Couldn't decrypt your files, check your password and try again" : "Vaše datoteke nije moguće dešifrirati, provjerite svoju lozinku i pokušajte ponovno.",
"Encryption keys deleted permanently" : "Ključevi za šifriranje trajno izbrisani",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće trajno izbrisati, molimo provjerite svoj owncloud.logili kontaktirajte svog administratora.",
"Couldn't remove app." : "Nije moguće ukloniti app.",
- "Email saved" : "E-pošta spremljena",
- "Invalid email" : "E-pošta neispravna",
- "Unable to delete group" : "Grupu nije moguće izbrisati",
- "Unable to delete user" : "Korisnika nije moguće izbrisati",
"Backups restored successfully" : "Sigurnosne kopije uspješno obnovljene",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Vaše ključeve za šifriranje nije moguće obnoviti, molimo provjerite svoj owncloud.logili kontaktirajte svog administratora.",
"Language changed" : "Promjena jezika",
@@ -39,6 +33,7 @@
"If you received this email, the settings seem to be correct." : "Ako ste ovu e-poštu primili,čini se da su postavke ispravne.",
"Email sent" : "E-pošta je poslana",
"You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.",
+ "Email saved" : "E-pošta spremljena",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
@@ -77,7 +72,6 @@
"A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
"Error creating user" : "Pogrešno kreiranje korisnika",
"A valid password must be provided" : "Nužno je navesti valjanu lozinku",
- "Warning: Home directory for user \"{user}\" already exists" : "Upozorenje: Osnovni direktorij za korisnika \"{user}\" već postoji",
"__language_name__" : "__jezik_naziv___",
"SSL root certificates" : "SSL Root certifikati",
"Encryption" : "Šifriranje",
@@ -94,7 +88,6 @@
"TLS" : "TLS",
"Security Warning" : "Sigurnosno upozorenje",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vi %s pristupate putem HTTP. Toplo vam preporučujemo da svoj poslužitelj konfigurirate takoda umjesto HTTP zahtijeva korištenje HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vašem podatkovnom direktoriju i vašim datotekama pristup je vjerojatno moguć s interneta.Datoteka .htaccess ne radi. Toplo vam preporučujemo da svoj web poslužitelj konfigurirate tako daje pristup podatkovnom direktoriju nemoguć ili pak podatkovni direktorij premjestite izvan korijena dokumentaweb poslužitelja.",
"Setup Warning" : "Upozorenje programa za postavljanje",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je očigledno postavljen na strip inline doc blocks. To će nekoliko osnovnih aplikacija učiniti nedostupnima.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Uzrok tome je vjerojatno neki ubrzivač predmemoriranja kao što je Zend OPcache ilieAccelerator.",
@@ -102,16 +95,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite se koristi kao baza podataka. Za veće instalacije preporučujemo da se to promijeni.Za migraciju na neku drugu bazu podataka koristite naredbeni redak: 'occ db: convert-type'",
"Module 'fileinfo' missing" : "Nedostaje modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Tolo vam preporučjemo da taj modul omogućitekako biste dobili najbolje rezultate u detekciji mime vrste.",
- "Your PHP version is outdated" : "Vaša verzija PHP je zastarjela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vaša verzija PHP je zastarjela. Tolo vam preporučujemo da je ažurirate na 5.3.8.ili još novije jer je poznato da su starije verzije neispravne. Moguće je da ovainstalacija ne radi ispravno.",
"PHP charset is not set to UTF-8" : "PHP Charset nije postavljen na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset nije postavljen na UTF-8. To može prouzročiti ozbiljne probleme s non-ASCII znakovimau nazivima datoteka. Toplo vam preporučujemo da vrijednost 'default_charset' php.ini promijeniteu 'UTF-8'.",
"Locale not working" : "Regionalna shema ne radi",
"System locale can not be set to a one which supports UTF-8." : "Regionalnu shemu sustava nemoguće je postaviti na neku koja podržava UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znači da se mogu javiti problemi s određenim znakovima u datoteci.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Toplo preporučpujemo da u svoj sustav instalirate potrebne pakete koji će podržatijednu od sljedećih regionalnih shema: %s.",
"URL generation in notification emails" : "Generiranje URL-a u notifikacijskoj e-pošti",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ako vaša instalacija nije instalirana u korijenu domene i koristi sustav cron,mogu se javiti problemi s generiranjem URL. Da biste takve probleme izbjegli,molimo postavite opciju \"overwritewebroot\" u vašoj datoteci config.php.na webroot path vaše instalacije (Predlažemo: \"%s\").",
"Please double check the <a href='%s'>installation guides</a>." : "Molimo provjerite <a href='%s'> instalacijske vodiče </a>.",
"Last cron was executed at %s." : "Zadnji cron je izvršen na %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Zadnji cron izvršen je na %s. Bilo je to prije više od jednog sata, čini se da nešto nije u redu.",
@@ -123,13 +112,13 @@
"Allow users to share via link" : "Dopustite korisnicia dijeljenje putem veze",
"Enforce password protection" : "Nametnite zaštitu lozinki",
"Allow public uploads" : "Dopustite javno učitavanje sadržaja",
+ "Allow users to send mail notification for shared files" : "Dopustite korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
"Set default expiration date" : "Postavite zadani datum isteka",
"Expire after " : "Istek nakon",
"days" : "dana",
"Enforce expiration date" : "Nametnite datum isteka",
"Allow resharing" : "Dopustite ponovno dijeljenje zajedničkih resursa",
"Restrict users to only share with users in their groups" : "Ograničite korisnike na meusobno dijeljenje resursa samo s korisnicima unutar svoje grupe",
- "Allow users to send mail notification for shared files" : "Dopustite korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
"Exclude groups from sharing" : "Isključite grupe iz dijeljenja zajedničkih resursa",
"These groups will still be able to receive shares, but not to initiate them." : "Ove će grupe još uvijek moći primati dijeljene resurse, ali ne i inicirati ih",
"Enforce HTTPS" : "Nametnite HTTPS",
@@ -159,6 +148,7 @@
"Admin Documentation" : "Admin dokumentacija",
"Enable only for specific groups" : "Omogućite samo za specifične grupe",
"Uninstall App" : "Deinstalirajte app",
+ "Cheers!" : "Cheers!",
"Administrator Documentation" : "Dokumentacija administratora",
"Online Documentation" : "Online dokumentacija",
"Forum" : "Forum",
@@ -201,11 +191,10 @@
"Delete Encryption Keys" : "Izbrišite ključeve za šifriranje",
"Show storage location" : "Prikaži mjesto pohrane",
"Show last log in" : "Prikaži zadnje spajanje",
- "Login Name" : "Ime za prijavu",
+ "Username" : "Korisničko ime",
"Create" : "Kreirajte",
"Admin Recovery Password" : "Admin lozinka za oporavak",
"Enter the recovery password in order to recover the users files during password change" : "Unesite lozinku za oporavak da biste oporavili korisničke datoteke tijekom promjene lozinke",
- "Search Users and Groups" : "Pretražite korisnike i grupe",
"Add Group" : "Dodajte grupu",
"Group" : "Grupa",
"Everyone" : "Svi",
@@ -214,7 +203,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Molimo unesite kvotu za spremanje (npr: \"512 MB\" ili \"12 GB\")",
"Unlimited" : "Neograničeno",
"Other" : "Ostalo",
- "Username" : "Korisničko ime",
"Quota" : "Kvota",
"Storage Location" : "Mjesto za spremanje",
"Last Login" : "Zadnja prijava",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index d347ac8846a..1f019f760d8 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -9,18 +9,12 @@ OC.L10N.register(
"Authentication error" : "Azonosítási hiba",
"Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
"Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
- "Group already exists" : "A csoport már létezik",
- "Unable to add group" : "A csoport nem hozható létre",
"Files decrypted successfully" : "A fájlok titkosítását sikeresen megszüntettük.",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Fájljainak titkosítását nem sikerült megszüntetni, kérjük forduljon a rendszergazdához!",
"Couldn't decrypt your files, check your password and try again" : "Fájljainak titkosítását nem sikerült megszüntetni, ellenőrizze a jelszavát, és próbálja újra!",
"Encryption keys deleted permanently" : "A titkosítási kulcsait véglegesen töröltük.",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "A titkosítási kulcsait nem sikerült véglegesen törölni, kérjük ellenőrizze az owncloud.log naplófájlt, vagy forduljon a rendszergazdához!",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
- "Email saved" : "Elmentettük az e-mail címet",
- "Invalid email" : "Hibás e-mail",
- "Unable to delete group" : "A csoport nem törölhető",
- "Unable to delete user" : "A felhasználó nem törölhető",
"Backups restored successfully" : "A kulcsokat sikereresen visszaállítottuk a mentésekből.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "A titkosítási kulcsok visszaállítása nem sikerült. Kérjük ellenőrizze az owncloud.log naplófájlt vagy forduljon a rendszergazdához!",
"Language changed" : "A nyelv megváltozott",
@@ -42,6 +36,7 @@ OC.L10N.register(
"If you received this email, the settings seem to be correct." : "Amennyiben megérkezett ez az e-mail akkor a beállítások megfelelők.",
"Email sent" : "Az e-mailt elküldtük",
"You need to set your user email before being able to send test emails." : "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.",
+ "Email saved" : "Elmentettük az e-mail címet",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
"Sending..." : "Küldés...",
@@ -79,7 +74,6 @@ OC.L10N.register(
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"Error creating user" : "A felhasználó nem hozható létre",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
- "Warning: Home directory for user \"{user}\" already exists" : "Figyelmeztetés: A felhasználó \"{user}\" kezdő könyvtára már létezik",
"__language_name__" : "__language_name__",
"SSL root certificates" : "SSL tanúsítványok",
"Encryption" : "Titkosítás",
@@ -96,7 +90,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Biztonsági figyelmeztetés",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "A %s szolgáltatás elérése jelenleg HTTP-n keresztül történik. Nagyon ajánlott, hogy a kiszolgálót úgy állítsa be, hogy az elérés HTTPS-en keresztül történjék.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Az adatkönytára és az itt levő fájlok valószínűleg elérhetők az internetről. Az ownCloud által beillesztett .htaccess fájl nem működik. Nagyon erősen ajánlott, hogy a webszervert úgy konfigurálja, hogy az adatkönyvtár ne legyen közvetlenül kívülről elérhető, vagy az adatkönyvtárt tegye a webszerver dokumentumfáján kívülre.",
"Setup Warning" : "A beállítással kapcsolatos figyelmeztetés",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
@@ -104,16 +97,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "A kiválasztott adatbázis az SQLite. Nagyobb telepítések esetén ezt érdemes megváltoztatni. Másik adatbázisra való áttéréshez használja a következő parancssori eszközt: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "A 'fileinfo' modul hiányzik",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
- "Your PHP version is outdated" : "A PHP verzió túl régi",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A PHP verzió túl régi. Nagyon ajánlott legalább az 5.3.8-as vagy újabb verzióra frissíteni, mert a régebbi verziónál léteznek ismert hibák. Ezért lehetséges, hogy ez a telepítés majd nem működik megfelelően.",
"PHP charset is not set to UTF-8" : "A PHP-karakterkészlet nem UTF-8-ra van állítva",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A PHP-karakterkészlet nem UTF-8-ra van állítva. Ez komoly problémákat okozhat, ha valaki olyan fájlnevet használ, amiben nem csupán ASCII karakterek fordulnak elő. Feltétlenül javasoljuk, hogy a php.ini-ben a 'default_charset' paramétert állítsa 'UTF-8'-ra!",
"Locale not working" : "A nyelvi lokalizáció nem működik",
"System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs állományai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.",
"This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"URL generation in notification emails" : "URL-képzés az értesítő e-mailekben",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwritewebroot\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>.",
"Last cron was executed at %s." : "Az utolsó cron feladat ekkor futott le: %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Az utolsó cron feladat ekkor futott le: %s. Ez több, mint 1 órája történt, valami nincs rendben.",
@@ -125,13 +114,13 @@ OC.L10N.register(
"Allow users to share via link" : "Engedjük meg az állományok linkekkel történő megosztását",
"Enforce password protection" : "Legyen kötelező a linkek jelszóval való védelme",
"Allow public uploads" : "Nyilvános feltöltés engedélyezése",
+ "Allow users to send mail notification for shared files" : "A felhasználók küldhessenek e-mail értesítést a megosztás létrejöttéről",
"Set default expiration date" : "Alapértelmezett lejárati idő beállítása",
"Expire after " : "A lejárat legyen",
"days" : "nap",
"Enforce expiration date" : "A beállított lejárati idő legyen kötelezően érvényes",
"Allow resharing" : "A megosztás továbbadásának engedélyezése",
"Restrict users to only share with users in their groups" : "A csoporttagok csak a saját csoportjukon belül oszthassanak meg anyagokat",
- "Allow users to send mail notification for shared files" : "A felhasználók küldhessenek e-mail értesítést a megosztás létrejöttéről",
"Exclude groups from sharing" : "Csoportok megosztási jogának tiltása",
"These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.",
"Enforce HTTPS" : "Kötelező HTTPS",
@@ -161,6 +150,7 @@ OC.L10N.register(
"Admin Documentation" : "Adminisztrátori leírás",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
"Uninstall App" : "Az alkalmazás eltávolítása",
+ "Cheers!" : "Üdv.",
"Administrator Documentation" : "Üzemeltetői leírás",
"Online Documentation" : "Online leírás",
"Forum" : "Fórum",
@@ -197,11 +187,10 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "A titkosító kulcsai egy mentési területre kerültek. Ha valami hiba történik, még vissza tudja állítani a titkosító kulcsait. Csak akkor törölje őket véglegesen, ha biztos benne, hogy minden állományt sikerült a visszaállítani a titkosított állapotából.",
"Restore Encryption Keys" : "A titkosító kulcsok visszaállítása",
"Delete Encryption Keys" : "A titkosító kulcsok törlése",
- "Login Name" : "Bejelentkezési név",
+ "Username" : "Felhasználónév",
"Create" : "Létrehozás",
"Admin Recovery Password" : "Adminisztrátori jelszó az állományok visszanyerésére",
"Enter the recovery password in order to recover the users files during password change" : "Adja meg az adatok visszanyeréséhez szükséges jelszót arra az esetre, ha a felhasználók megváltoztatják a jelszavukat",
- "Search Users and Groups" : "Keresés a felhasználók és a csoportok között",
"Add Group" : "Csoport létrehozása",
"Group" : "Csoport",
"Everyone" : "Mindenki",
@@ -210,7 +199,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Kérjük adja meg a tárolási kvótát (pl. \"512 MB\" vagy \"12 GB\")",
"Unlimited" : "Korlátlan",
"Other" : "Más",
- "Username" : "Felhasználónév",
"Quota" : "Kvóta",
"Storage Location" : "A háttértár helye",
"Last Login" : "Utolsó bejelentkezés",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 0c8cffbd89a..1b4517ae70a 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -7,18 +7,12 @@
"Authentication error" : "Azonosítási hiba",
"Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
"Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
- "Group already exists" : "A csoport már létezik",
- "Unable to add group" : "A csoport nem hozható létre",
"Files decrypted successfully" : "A fájlok titkosítását sikeresen megszüntettük.",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Fájljainak titkosítását nem sikerült megszüntetni, kérjük forduljon a rendszergazdához!",
"Couldn't decrypt your files, check your password and try again" : "Fájljainak titkosítását nem sikerült megszüntetni, ellenőrizze a jelszavát, és próbálja újra!",
"Encryption keys deleted permanently" : "A titkosítási kulcsait véglegesen töröltük.",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "A titkosítási kulcsait nem sikerült véglegesen törölni, kérjük ellenőrizze az owncloud.log naplófájlt, vagy forduljon a rendszergazdához!",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
- "Email saved" : "Elmentettük az e-mail címet",
- "Invalid email" : "Hibás e-mail",
- "Unable to delete group" : "A csoport nem törölhető",
- "Unable to delete user" : "A felhasználó nem törölhető",
"Backups restored successfully" : "A kulcsokat sikereresen visszaállítottuk a mentésekből.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "A titkosítási kulcsok visszaállítása nem sikerült. Kérjük ellenőrizze az owncloud.log naplófájlt vagy forduljon a rendszergazdához!",
"Language changed" : "A nyelv megváltozott",
@@ -40,6 +34,7 @@
"If you received this email, the settings seem to be correct." : "Amennyiben megérkezett ez az e-mail akkor a beállítások megfelelők.",
"Email sent" : "Az e-mailt elküldtük",
"You need to set your user email before being able to send test emails." : "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.",
+ "Email saved" : "Elmentettük az e-mail címet",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
"Sending..." : "Küldés...",
@@ -77,7 +72,6 @@
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"Error creating user" : "A felhasználó nem hozható létre",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
- "Warning: Home directory for user \"{user}\" already exists" : "Figyelmeztetés: A felhasználó \"{user}\" kezdő könyvtára már létezik",
"__language_name__" : "__language_name__",
"SSL root certificates" : "SSL tanúsítványok",
"Encryption" : "Titkosítás",
@@ -94,7 +88,6 @@
"TLS" : "TLS",
"Security Warning" : "Biztonsági figyelmeztetés",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "A %s szolgáltatás elérése jelenleg HTTP-n keresztül történik. Nagyon ajánlott, hogy a kiszolgálót úgy állítsa be, hogy az elérés HTTPS-en keresztül történjék.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Az adatkönytára és az itt levő fájlok valószínűleg elérhetők az internetről. Az ownCloud által beillesztett .htaccess fájl nem működik. Nagyon erősen ajánlott, hogy a webszervert úgy konfigurálja, hogy az adatkönyvtár ne legyen közvetlenül kívülről elérhető, vagy az adatkönyvtárt tegye a webszerver dokumentumfáján kívülre.",
"Setup Warning" : "A beállítással kapcsolatos figyelmeztetés",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
@@ -102,16 +95,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "A kiválasztott adatbázis az SQLite. Nagyobb telepítések esetén ezt érdemes megváltoztatni. Másik adatbázisra való áttéréshez használja a következő parancssori eszközt: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "A 'fileinfo' modul hiányzik",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
- "Your PHP version is outdated" : "A PHP verzió túl régi",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A PHP verzió túl régi. Nagyon ajánlott legalább az 5.3.8-as vagy újabb verzióra frissíteni, mert a régebbi verziónál léteznek ismert hibák. Ezért lehetséges, hogy ez a telepítés majd nem működik megfelelően.",
"PHP charset is not set to UTF-8" : "A PHP-karakterkészlet nem UTF-8-ra van állítva",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A PHP-karakterkészlet nem UTF-8-ra van állítva. Ez komoly problémákat okozhat, ha valaki olyan fájlnevet használ, amiben nem csupán ASCII karakterek fordulnak elő. Feltétlenül javasoljuk, hogy a php.ini-ben a 'default_charset' paramétert állítsa 'UTF-8'-ra!",
"Locale not working" : "A nyelvi lokalizáció nem működik",
"System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs állományai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.",
"This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"URL generation in notification emails" : "URL-képzés az értesítő e-mailekben",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwritewebroot\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>.",
"Last cron was executed at %s." : "Az utolsó cron feladat ekkor futott le: %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Az utolsó cron feladat ekkor futott le: %s. Ez több, mint 1 órája történt, valami nincs rendben.",
@@ -123,13 +112,13 @@
"Allow users to share via link" : "Engedjük meg az állományok linkekkel történő megosztását",
"Enforce password protection" : "Legyen kötelező a linkek jelszóval való védelme",
"Allow public uploads" : "Nyilvános feltöltés engedélyezése",
+ "Allow users to send mail notification for shared files" : "A felhasználók küldhessenek e-mail értesítést a megosztás létrejöttéről",
"Set default expiration date" : "Alapértelmezett lejárati idő beállítása",
"Expire after " : "A lejárat legyen",
"days" : "nap",
"Enforce expiration date" : "A beállított lejárati idő legyen kötelezően érvényes",
"Allow resharing" : "A megosztás továbbadásának engedélyezése",
"Restrict users to only share with users in their groups" : "A csoporttagok csak a saját csoportjukon belül oszthassanak meg anyagokat",
- "Allow users to send mail notification for shared files" : "A felhasználók küldhessenek e-mail értesítést a megosztás létrejöttéről",
"Exclude groups from sharing" : "Csoportok megosztási jogának tiltása",
"These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.",
"Enforce HTTPS" : "Kötelező HTTPS",
@@ -159,6 +148,7 @@
"Admin Documentation" : "Adminisztrátori leírás",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
"Uninstall App" : "Az alkalmazás eltávolítása",
+ "Cheers!" : "Üdv.",
"Administrator Documentation" : "Üzemeltetői leírás",
"Online Documentation" : "Online leírás",
"Forum" : "Fórum",
@@ -195,11 +185,10 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "A titkosító kulcsai egy mentési területre kerültek. Ha valami hiba történik, még vissza tudja állítani a titkosító kulcsait. Csak akkor törölje őket véglegesen, ha biztos benne, hogy minden állományt sikerült a visszaállítani a titkosított állapotából.",
"Restore Encryption Keys" : "A titkosító kulcsok visszaállítása",
"Delete Encryption Keys" : "A titkosító kulcsok törlése",
- "Login Name" : "Bejelentkezési név",
+ "Username" : "Felhasználónév",
"Create" : "Létrehozás",
"Admin Recovery Password" : "Adminisztrátori jelszó az állományok visszanyerésére",
"Enter the recovery password in order to recover the users files during password change" : "Adja meg az adatok visszanyeréséhez szükséges jelszót arra az esetre, ha a felhasználók megváltoztatják a jelszavukat",
- "Search Users and Groups" : "Keresés a felhasználók és a csoportok között",
"Add Group" : "Csoport létrehozása",
"Group" : "Csoport",
"Everyone" : "Mindenki",
@@ -208,7 +197,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Kérjük adja meg a tárolási kvótát (pl. \"512 MB\" vagy \"12 GB\")",
"Unlimited" : "Korlátlan",
"Other" : "Más",
- "Username" : "Felhasználónév",
"Quota" : "Kvóta",
"Storage Location" : "A háttértár helye",
"Last Login" : "Utolsó bejelentkezés",
diff --git a/settings/l10n/ia.js b/settings/l10n/ia.js
index e48d44c9335..c99334823cf 100644
--- a/settings/l10n/ia.js
+++ b/settings/l10n/ia.js
@@ -18,6 +18,7 @@ OC.L10N.register(
"Security Warning" : "Aviso de securitate",
"More" : "Plus",
"by" : "per",
+ "Cheers!" : "Acclamationes!",
"Get the apps to sync your files" : "Obtene le apps (applicationes) pro synchronizar tu files",
"Password" : "Contrasigno",
"Unable to change your password" : "Non pote cambiar tu contrasigno",
@@ -30,11 +31,11 @@ OC.L10N.register(
"Cancel" : "Cancellar",
"Language" : "Linguage",
"Help translate" : "Adjuta a traducer",
+ "Username" : "Nomine de usator",
"Create" : "Crear",
"Group" : "Gruppo",
"Default Quota" : "Quota predeterminate",
"Other" : "Altere",
- "Username" : "Nomine de usator",
"Quota" : "Quota"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ia.json b/settings/l10n/ia.json
index c1acf295b4a..7f9a97ba283 100644
--- a/settings/l10n/ia.json
+++ b/settings/l10n/ia.json
@@ -16,6 +16,7 @@
"Security Warning" : "Aviso de securitate",
"More" : "Plus",
"by" : "per",
+ "Cheers!" : "Acclamationes!",
"Get the apps to sync your files" : "Obtene le apps (applicationes) pro synchronizar tu files",
"Password" : "Contrasigno",
"Unable to change your password" : "Non pote cambiar tu contrasigno",
@@ -28,11 +29,11 @@
"Cancel" : "Cancellar",
"Language" : "Linguage",
"Help translate" : "Adjuta a traducer",
+ "Username" : "Nomine de usator",
"Create" : "Crear",
"Group" : "Gruppo",
"Default Quota" : "Quota predeterminate",
"Other" : "Altere",
- "Username" : "Nomine de usator",
"Quota" : "Quota"
},"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 0db6558b0fd..a64f0c10d92 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Peringatan Keamanan dan Setelan",
"Cron" : "Cron",
"Sharing" : "Berbagi",
"Security" : "Keamanan",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Terjadi kesalahan saat otentikasi",
"Your full name has been changed." : "Nama lengkap Anda telah diubah",
"Unable to change full name" : "Tidak dapat mengubah nama lengkap",
- "Group already exists" : "Grup sudah ada",
- "Unable to add group" : "Tidak dapat menambah grup",
"Files decrypted successfully" : "Berkas berhasil dideskripsi",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Tidak dapat mendeskripsi berkas Anda, mohon periksa owncloud.log Anda atau tanyakan pada administrator Anda",
"Couldn't decrypt your files, check your password and try again" : "Tidak dapat mendeskripsi berkas Anda, periksa sandi Anda dan coba lagi",
"Encryption keys deleted permanently" : "Kunci enkripsi dihapus secara permanen",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Tidak dapat menghapus kunci enkripsi anda secara permanen, mohon periksa owncloud.log atau tanyakan pada administrator Anda",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
- "Email saved" : "Email disimpan",
- "Invalid email" : "Email tidak valid",
- "Unable to delete group" : "Tidak dapat menghapus grup",
- "Unable to delete user" : "Tidak dapat menghapus pengguna",
"Backups restored successfully" : "Cadangan berhasil dipulihkan",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Tidak dapat memulihkan kunci enkripsi Anda, mohon periksa owncloud.log Anda atau tanyakan pada administrator Anda.",
"Language changed" : "Bahasa telah diubah",
@@ -38,12 +33,18 @@ OC.L10N.register(
"Enabled" : "Diaktifkan",
"Not enabled" : "Tidak diaktifkan",
"Recommended" : "Direkomendasikan",
+ "Group already exists." : "Grup sudah ada.",
+ "Unable to add group." : "Tidak dapat menambah grup.",
+ "Unable to delete group." : "Tidak dapat menghapus grup.",
"Saved" : "Disimpan",
"test email settings" : "pengaturan email percobaan",
"If you received this email, the settings seem to be correct." : "Jika Anda menerma email ini, pengaturan tampaknya sudah benar.",
"A problem occurred while sending the email. Please revise your settings." : "Muncul masalah tidak terduga saat mengirim email. Mohon merevisi pengaturan Anda.",
"Email sent" : "Email terkirim",
"You need to set your user email before being able to send test emails." : "Anda perlu menetapkan email pengguna Anda sebelum dapat mengirim email percobaan.",
+ "Unable to create user." : "Tidak dapat membuat pengguna.",
+ "Unable to delete user." : "Tidak dapat menghapus pengguna.",
+ "Email saved" : "Email disimpan",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah And yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"Add trusted domain" : "Tambah domain terpercaya",
"Sending..." : "Mengirim",
@@ -83,7 +84,6 @@ OC.L10N.register(
"A valid username must be provided" : "Harus memberikan nama pengguna yang benar",
"Error creating user" : "Terjadi kesalahan saat membuat pengguna",
"A valid password must be provided" : "Harus memberikan sandi yang benar",
- "Warning: Home directory for user \"{user}\" already exists" : "Peringatan: Direktori home untuk pengguna \"{user}\" sudah ada",
"__language_name__" : "__language_name__",
"Personal Info" : "Info Pribadi",
"SSL root certificates" : "Sertifikat root SSL",
@@ -101,7 +101,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Peringatan Keamanan",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Anda mengakses %s melalui HTTP. Kami sangat menyarankan Anda untuk mengkonfigurasi server dengan menggunakan HTTPS sebagai gantinya.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Direktori data dan berkas Anda mungkin dapat diakses dari internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan untuk mengkonfigurasi server web Anda agar direktori data tidak lagi dapat diakses atau Anda dapat memindahkan direktori data di luar dokumen root webserver.",
+ "Read-Only config enabled" : "Konfig Hanya-Baca diaktifkan",
+ "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." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.",
"Setup Warning" : "Peringatan Pengaturan",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Tampaknya pengaturan PHP strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.",
@@ -109,16 +110,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite akan digunakan sebagai basis data. Untuk instalasi besar, kami merekomendasikan untuk mengubahnya. Untuk berpindah ke basis data lainnya, gunakan alat baris perintah: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modul 'fileinfo' tidak ada",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.",
- "Your PHP version is outdated" : "Versi PHP telah usang",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Versi PHP telah usang. Kami sangat menyarankan untuk diperbarui ke versi 5.3.8 atau yang lebih baru karena versi lama diketahui rusak. Ada kemungkinan bahwa instalasi ini tidak bekerja dengan benar.",
"PHP charset is not set to UTF-8" : "Charset PHP tidak disetel ke UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Charset PHP tidak disetel ke UTF-8. Hal ini dapat menyebabkan masalah besar dengan karakter non-ASCII di nama berkas. Kami sangat merekomendasikan untuk mengubah nilai 'default_charset' php.ini ke 'UTF-8'.",
"Locale not working" : "Kode pelokalan tidak berfungsi",
"System locale can not be set to a one which supports UTF-8." : "Sistem lokal tidak dapat diatur untuk satu yang mendukung UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ini artinya mungkin ada masalah dengan karakter tertentu pada nama berkas.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Kami sangat menyarankan untuk menginstal paket yang dibutuhkan pada sistem agar mendukung salah satu bahasa berikut: %s.",
"URL generation in notification emails" : "URL dibuat dalam email pemberitahuan",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak terinstal didalam root domain dan menggunakan cron sistem, ini dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah ini, mohon atur opsi \"overwritewebroot\" didalam berkas config.php ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")",
"No problems found" : "Masalah tidak ditemukan",
"Please double check the <a href='%s'>installation guides</a>." : "Silakan periksa ulang <a href='%s'>panduan instalasi</a>.",
"Last cron was executed at %s." : "Cron terakhir dieksekusi pada %s.",
@@ -131,13 +128,13 @@ OC.L10N.register(
"Allow users to share via link" : "Izinkan pengguna untuk membagikan via tautan",
"Enforce password protection" : "Berlakukan perlindungan sandi",
"Allow public uploads" : "Izinkan unggahan publik",
+ "Allow users to send mail notification for shared files" : "Izinkan pengguna untuk mengirimkan email pemberitahuan untuk berkas berbagi",
"Set default expiration date" : "Atur tanggal kadaluarsa default",
"Expire after " : "Kadaluarsa setelah",
"days" : "hari",
"Enforce expiration date" : "Berlakukan tanggal kadaluarsa",
"Allow resharing" : "Izinkan pembagian ulang",
"Restrict users to only share with users in their groups" : "Batasi pengguna untuk hanya membagikan dengan pengguna didalam grup mereka",
- "Allow users to send mail notification for shared files" : "Izinkan pengguna untuk mengirimkan email pemberitahuan untuk berkas berbagi",
"Exclude groups from sharing" : "Tidak termasuk grup untuk berbagi",
"These groups will still be able to receive shares, but not to initiate them." : "Grup ini akan tetap dapat menerima berbagi, tatapi tidak dapat membagikan.",
"Enforce HTTPS" : "Selalu Gunakan HTTPS",
@@ -172,6 +169,7 @@ OC.L10N.register(
"Update to %s" : "Perbarui ke %s",
"Enable only for specific groups" : "Aktifkan hanya untuk grup tertentu",
"Uninstall App" : "Copot aplikasi",
+ "Cheers!" : "Horee!",
"Administrator Documentation" : "Dokumentasi Administrator",
"Online Documentation" : "Dokumentasi Online",
"Forum" : "Forum",
@@ -214,11 +212,10 @@ OC.L10N.register(
"Delete Encryption Keys" : "Hapus Kuncu Enkripsi",
"Show storage location" : "Tampilkan kolasi penyimpanan",
"Show last log in" : "Tampilkan masuk terakhir",
- "Login Name" : "Nama Masuk",
+ "Username" : "Nama pengguna",
"Create" : "Buat",
"Admin Recovery Password" : "Sandi pemulihan Admin",
"Enter the recovery password in order to recover the users files during password change" : "Masukkan sandi pemulihan untuk memulihkan berkas pengguna saat penggantian sandi",
- "Search Users and Groups" : "Telusuri Pengguna dan Grup",
"Add Group" : "Tambah Grup",
"Group" : "Grup",
"Everyone" : "Semua orang",
@@ -227,7 +224,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Silakan masukkan jumlah penyimpanan (contoh: \"512 MB\" atau \"12 GB\")",
"Unlimited" : "Tak terbatas",
"Other" : "Lainnya",
- "Username" : "Nama pengguna",
"Group Admin for" : "Grup Admin untuk",
"Quota" : "Quota",
"Storage Location" : "Lokasi Penyimpanan",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index a5aeb52afd0..81fe6e59fe8 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Peringatan Keamanan dan Setelan",
"Cron" : "Cron",
"Sharing" : "Berbagi",
"Security" : "Keamanan",
@@ -7,18 +8,12 @@
"Authentication error" : "Terjadi kesalahan saat otentikasi",
"Your full name has been changed." : "Nama lengkap Anda telah diubah",
"Unable to change full name" : "Tidak dapat mengubah nama lengkap",
- "Group already exists" : "Grup sudah ada",
- "Unable to add group" : "Tidak dapat menambah grup",
"Files decrypted successfully" : "Berkas berhasil dideskripsi",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Tidak dapat mendeskripsi berkas Anda, mohon periksa owncloud.log Anda atau tanyakan pada administrator Anda",
"Couldn't decrypt your files, check your password and try again" : "Tidak dapat mendeskripsi berkas Anda, periksa sandi Anda dan coba lagi",
"Encryption keys deleted permanently" : "Kunci enkripsi dihapus secara permanen",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Tidak dapat menghapus kunci enkripsi anda secara permanen, mohon periksa owncloud.log atau tanyakan pada administrator Anda",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
- "Email saved" : "Email disimpan",
- "Invalid email" : "Email tidak valid",
- "Unable to delete group" : "Tidak dapat menghapus grup",
- "Unable to delete user" : "Tidak dapat menghapus pengguna",
"Backups restored successfully" : "Cadangan berhasil dipulihkan",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Tidak dapat memulihkan kunci enkripsi Anda, mohon periksa owncloud.log Anda atau tanyakan pada administrator Anda.",
"Language changed" : "Bahasa telah diubah",
@@ -36,12 +31,18 @@
"Enabled" : "Diaktifkan",
"Not enabled" : "Tidak diaktifkan",
"Recommended" : "Direkomendasikan",
+ "Group already exists." : "Grup sudah ada.",
+ "Unable to add group." : "Tidak dapat menambah grup.",
+ "Unable to delete group." : "Tidak dapat menghapus grup.",
"Saved" : "Disimpan",
"test email settings" : "pengaturan email percobaan",
"If you received this email, the settings seem to be correct." : "Jika Anda menerma email ini, pengaturan tampaknya sudah benar.",
"A problem occurred while sending the email. Please revise your settings." : "Muncul masalah tidak terduga saat mengirim email. Mohon merevisi pengaturan Anda.",
"Email sent" : "Email terkirim",
"You need to set your user email before being able to send test emails." : "Anda perlu menetapkan email pengguna Anda sebelum dapat mengirim email percobaan.",
+ "Unable to create user." : "Tidak dapat membuat pengguna.",
+ "Unable to delete user." : "Tidak dapat menghapus pengguna.",
+ "Email saved" : "Email disimpan",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah And yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"Add trusted domain" : "Tambah domain terpercaya",
"Sending..." : "Mengirim",
@@ -81,7 +82,6 @@
"A valid username must be provided" : "Harus memberikan nama pengguna yang benar",
"Error creating user" : "Terjadi kesalahan saat membuat pengguna",
"A valid password must be provided" : "Harus memberikan sandi yang benar",
- "Warning: Home directory for user \"{user}\" already exists" : "Peringatan: Direktori home untuk pengguna \"{user}\" sudah ada",
"__language_name__" : "__language_name__",
"Personal Info" : "Info Pribadi",
"SSL root certificates" : "Sertifikat root SSL",
@@ -99,7 +99,8 @@
"TLS" : "TLS",
"Security Warning" : "Peringatan Keamanan",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Anda mengakses %s melalui HTTP. Kami sangat menyarankan Anda untuk mengkonfigurasi server dengan menggunakan HTTPS sebagai gantinya.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Direktori data dan berkas Anda mungkin dapat diakses dari internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan untuk mengkonfigurasi server web Anda agar direktori data tidak lagi dapat diakses atau Anda dapat memindahkan direktori data di luar dokumen root webserver.",
+ "Read-Only config enabled" : "Konfig Hanya-Baca diaktifkan",
+ "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." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.",
"Setup Warning" : "Peringatan Pengaturan",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Tampaknya pengaturan PHP strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.",
@@ -107,16 +108,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite akan digunakan sebagai basis data. Untuk instalasi besar, kami merekomendasikan untuk mengubahnya. Untuk berpindah ke basis data lainnya, gunakan alat baris perintah: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modul 'fileinfo' tidak ada",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.",
- "Your PHP version is outdated" : "Versi PHP telah usang",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Versi PHP telah usang. Kami sangat menyarankan untuk diperbarui ke versi 5.3.8 atau yang lebih baru karena versi lama diketahui rusak. Ada kemungkinan bahwa instalasi ini tidak bekerja dengan benar.",
"PHP charset is not set to UTF-8" : "Charset PHP tidak disetel ke UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Charset PHP tidak disetel ke UTF-8. Hal ini dapat menyebabkan masalah besar dengan karakter non-ASCII di nama berkas. Kami sangat merekomendasikan untuk mengubah nilai 'default_charset' php.ini ke 'UTF-8'.",
"Locale not working" : "Kode pelokalan tidak berfungsi",
"System locale can not be set to a one which supports UTF-8." : "Sistem lokal tidak dapat diatur untuk satu yang mendukung UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ini artinya mungkin ada masalah dengan karakter tertentu pada nama berkas.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Kami sangat menyarankan untuk menginstal paket yang dibutuhkan pada sistem agar mendukung salah satu bahasa berikut: %s.",
"URL generation in notification emails" : "URL dibuat dalam email pemberitahuan",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak terinstal didalam root domain dan menggunakan cron sistem, ini dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah ini, mohon atur opsi \"overwritewebroot\" didalam berkas config.php ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")",
"No problems found" : "Masalah tidak ditemukan",
"Please double check the <a href='%s'>installation guides</a>." : "Silakan periksa ulang <a href='%s'>panduan instalasi</a>.",
"Last cron was executed at %s." : "Cron terakhir dieksekusi pada %s.",
@@ -129,13 +126,13 @@
"Allow users to share via link" : "Izinkan pengguna untuk membagikan via tautan",
"Enforce password protection" : "Berlakukan perlindungan sandi",
"Allow public uploads" : "Izinkan unggahan publik",
+ "Allow users to send mail notification for shared files" : "Izinkan pengguna untuk mengirimkan email pemberitahuan untuk berkas berbagi",
"Set default expiration date" : "Atur tanggal kadaluarsa default",
"Expire after " : "Kadaluarsa setelah",
"days" : "hari",
"Enforce expiration date" : "Berlakukan tanggal kadaluarsa",
"Allow resharing" : "Izinkan pembagian ulang",
"Restrict users to only share with users in their groups" : "Batasi pengguna untuk hanya membagikan dengan pengguna didalam grup mereka",
- "Allow users to send mail notification for shared files" : "Izinkan pengguna untuk mengirimkan email pemberitahuan untuk berkas berbagi",
"Exclude groups from sharing" : "Tidak termasuk grup untuk berbagi",
"These groups will still be able to receive shares, but not to initiate them." : "Grup ini akan tetap dapat menerima berbagi, tatapi tidak dapat membagikan.",
"Enforce HTTPS" : "Selalu Gunakan HTTPS",
@@ -170,6 +167,7 @@
"Update to %s" : "Perbarui ke %s",
"Enable only for specific groups" : "Aktifkan hanya untuk grup tertentu",
"Uninstall App" : "Copot aplikasi",
+ "Cheers!" : "Horee!",
"Administrator Documentation" : "Dokumentasi Administrator",
"Online Documentation" : "Dokumentasi Online",
"Forum" : "Forum",
@@ -212,11 +210,10 @@
"Delete Encryption Keys" : "Hapus Kuncu Enkripsi",
"Show storage location" : "Tampilkan kolasi penyimpanan",
"Show last log in" : "Tampilkan masuk terakhir",
- "Login Name" : "Nama Masuk",
+ "Username" : "Nama pengguna",
"Create" : "Buat",
"Admin Recovery Password" : "Sandi pemulihan Admin",
"Enter the recovery password in order to recover the users files during password change" : "Masukkan sandi pemulihan untuk memulihkan berkas pengguna saat penggantian sandi",
- "Search Users and Groups" : "Telusuri Pengguna dan Grup",
"Add Group" : "Tambah Grup",
"Group" : "Grup",
"Everyone" : "Semua orang",
@@ -225,7 +222,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Silakan masukkan jumlah penyimpanan (contoh: \"512 MB\" atau \"12 GB\")",
"Unlimited" : "Tak terbatas",
"Other" : "Lainnya",
- "Username" : "Nama pengguna",
"Group Admin for" : "Grup Admin untuk",
"Quota" : "Quota",
"Storage Location" : "Lokasi Penyimpanan",
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index b73009b405f..e96a48f0f46 100644
--- a/settings/l10n/is.js
+++ b/settings/l10n/is.js
@@ -2,18 +2,13 @@ OC.L10N.register(
"settings",
{
"Authentication error" : "Villa við auðkenningu",
- "Group already exists" : "Hópur er þegar til",
- "Unable to add group" : "Ekki tókst að bæta við hóp",
- "Email saved" : "Netfang vistað",
- "Invalid email" : "Ógilt netfang",
- "Unable to delete group" : "Ekki tókst að eyða hóp",
- "Unable to delete user" : "Ekki tókst að eyða notenda",
"Language changed" : "Tungumáli breytt",
"Invalid request" : "Ógild fyrirspurn",
"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 notenda við hópinn %s",
"Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Email sent" : "Tölvupóstur sendur",
+ "Email saved" : "Netfang vistað",
"Please wait...." : "Andartak....",
"Disable" : "Gera óvirkt",
"Enable" : "Virkja",
@@ -53,10 +48,10 @@ OC.L10N.register(
"Language" : "Tungumál",
"Help translate" : "Hjálpa við þýðingu",
"Import Root Certificate" : "Flytja inn rótar skilríki",
+ "Username" : "Notendanafn",
"Create" : "Búa til",
"Unlimited" : "Ótakmarkað",
"Other" : "Annað",
- "Username" : "Notendanafn",
"Default" : "Sjálfgefið"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index 5a70c190216..4e28a7fe72c 100644
--- a/settings/l10n/is.json
+++ b/settings/l10n/is.json
@@ -1,17 +1,12 @@
{ "translations": {
"Authentication error" : "Villa við auðkenningu",
- "Group already exists" : "Hópur er þegar til",
- "Unable to add group" : "Ekki tókst að bæta við hóp",
- "Email saved" : "Netfang vistað",
- "Invalid email" : "Ógilt netfang",
- "Unable to delete group" : "Ekki tókst að eyða hóp",
- "Unable to delete user" : "Ekki tókst að eyða notenda",
"Language changed" : "Tungumáli breytt",
"Invalid request" : "Ógild fyrirspurn",
"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 notenda við hópinn %s",
"Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Email sent" : "Tölvupóstur sendur",
+ "Email saved" : "Netfang vistað",
"Please wait...." : "Andartak....",
"Disable" : "Gera óvirkt",
"Enable" : "Virkja",
@@ -51,10 +46,10 @@
"Language" : "Tungumál",
"Help translate" : "Hjálpa við þýðingu",
"Import Root Certificate" : "Flytja inn rótar skilríki",
+ "Username" : "Notendanafn",
"Create" : "Búa til",
"Unlimited" : "Ótakmarkað",
"Other" : "Annað",
- "Username" : "Notendanafn",
"Default" : "Sjálfgefið"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 713ed4e686f..adf098dfb25 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Errore di autenticazione",
"Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
"Unable to change full name" : "Impossibile cambiare il nome completo",
- "Group already exists" : "Il gruppo esiste già",
- "Unable to add group" : "Impossibile aggiungere il gruppo",
"Files decrypted successfully" : "File decifrato correttamente",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Impossibile decifrare i tuoi file, controlla il file owncloud.log o chiedi al tuo amministratore",
"Couldn't decrypt your files, check your password and try again" : "Impossibile decifrare i tuoi file, controlla la password e prova ancora",
"Encryption keys deleted permanently" : "Chiavi di cifratura eliminate definitivamente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Impossibile eliminare definitivamente le chiavi di cifratura, controlla il file owncloud.log o chiedi al tuo amministratore",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
- "Email saved" : "Email salvata",
- "Invalid email" : "Email non valida",
- "Unable to delete group" : "Impossibile eliminare il gruppo",
- "Unable to delete user" : "Impossibile eliminare l'utente",
"Backups restored successfully" : "Copie di sicurezza ripristinate correttamente",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Impossibile ripristinare le chiavi di cifratura, controlla il file owncloud.log o chiedi al tuo amministratore",
"Language changed" : "Lingua modificata",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Abilitata",
"Not enabled" : "Non abilitata",
"Recommended" : "Consigliata",
+ "Group already exists." : "Il gruppo esiste già.",
+ "Unable to add group." : "Impossibile aggiungere il gruppo.",
+ "Unable to delete group." : "Impossibile eliminare il gruppo.",
"Saved" : "Salvato",
"test email settings" : "prova impostazioni email",
"If you received this email, the settings seem to be correct." : "Se hai ricevuto questa email, le impostazioni dovrebbero essere corrette.",
"A problem occurred while sending the email. Please revise your settings." : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni.",
"Email sent" : "Email inviata",
"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 mail address" : "Indirizzo email non valido",
+ "Unable to create user." : "Impossibile creare l'utente.",
+ "Your %s account was created" : "Il tuo account %s è stato creato",
+ "Unable to delete user." : "Impossibile eliminare l'utente.",
+ "Forbidden" : "Vietato",
+ "Invalid user" : "Utente non valido",
+ "Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta",
+ "Email saved" : "Email salvata",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
"Sending..." : "Invio in corso...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"Error creating user" : "Errore durante la creazione dell'utente",
"A valid password must be provided" : "Deve essere fornita una password valida",
- "Warning: Home directory for user \"{user}\" already exists" : "Avviso: la cartella home dell'utente \"{user}\" esiste già",
+ "A valid email must be provided" : "Deve essere fornito un indirizzo email valido",
"__language_name__" : "Italiano",
"Personal Info" : "Informazioni personali",
"SSL root certificates" : "Certificati SSL radice",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Avviso di sicurezza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sei connesso a %s tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere l'utilizzo del protocollo HTTPS al posto di HTTP.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
+ "Read-Only config enabled" : "Configurazione di sola lettura abilitata",
+ "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." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.",
"Setup Warning" : "Avviso di configurazione",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.",
@@ -110,16 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite è utilizzato come database. Per installazioni grandi, consigliamo di cambiarlo. Per migrare a un altro database, utilizzare lo strumento da riga di comando: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulo 'fileinfo' mancante",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
- "Your PHP version is outdated" : "La tua versione di PHP è obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La tua versione di PHP è obsoleta. Ti consigliamo vivamente di aggiornare alla versione 5.3.8 o successiva poiché sono noti problemi con le vecchie versioni. L'installazione attuale potrebbe non funzionare correttamente.",
"PHP charset is not set to UTF-8" : "Il set di caratteri di PHP non è impostato a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Il set di caratteri di PHP non è impostato a UTF-8. Ciò può essere causa di problemi con i caratteri non ASCII nei nomi dei file. Consigliamo vivamente di cambiare il valore di 'default_charset' nel file php.ini a 'UTF-8'.",
"Locale not working" : "Locale non funzionante",
"System locale can not be set to a one which supports UTF-8." : "La localizzazione di sistema non può essere impostata a una che supporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ciò significa che potrebbero esserci problemi con alcuni caratteri nei nomi dei file.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle\nlocalizzazioni seguenti: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.",
"URL generation in notification emails" : "Generazione di URL nelle email di notifica",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwritewebroot\" nel file config.php al percorso della radice del sito della tua installazione (Suggerito: \"%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\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwrite.cli.url\" nel file config.php al percorso della radice del sito della tua installazione (Consigliato: \"%s\")",
+ "Configuration Checks" : "Controlli di configurazione",
"No problems found" : "Nessun problema trovato",
"Please double check the <a href='%s'>installation guides</a>." : "Leggi attentamente le <a href='%s'>guide d'installazione</a>.",
"Last cron was executed at %s." : "L'ultimo cron è stato eseguito alle %s.",
@@ -132,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Consenti agli utenti di condivere tramite collegamento",
"Enforce password protection" : "Imponi la protezione con password",
"Allow public uploads" : "Consenti caricamenti pubblici",
+ "Allow users to send mail notification for shared files" : "Consenti agli utenti di inviare email di notifica per i file condivisi",
"Set default expiration date" : "Imposta data di scadenza predefinita",
"Expire after " : "Scadenza dopo",
"days" : "giorni",
"Enforce expiration date" : "Forza la data di scadenza",
"Allow resharing" : "Consenti la ri-condivisione",
"Restrict users to only share with users in their groups" : "Limita gli utenti a condividere solo con gli utenti nei loro gruppi",
- "Allow users to send mail notification for shared files" : "Consenti agli utenti di inviare email di notifica per i file condivisi",
+ "Allow users to send mail notification for shared files to other users" : "Consenti agli utenti di inviare email di notifica per i file condivisi con altri utenti",
"Exclude groups from sharing" : "Escludi gruppi dalla condivisione",
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
"Enforce HTTPS" : "Forza HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forza i client a connettersi a %s tramite una connessione cifrata.",
+ "Enforce HTTPS for subdomains" : "Forza HTTPS per i sottodomini",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forza i client a connettersi a %s e ai sottodomini tramite una connessione cifrata.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connettiti al tuo %s tramite HTTPS per abilitare o disabilitare l'applicazione di SSL.",
"This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.",
"Send mode" : "Modalità di invio",
@@ -170,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Documentazione:",
"User Documentation" : "Documentazione utente",
"Admin Documentation" : "Documentazione di amministrazione",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Questa applicazione non può essere installata perché le seguenti dipendenze non sono soddisfatte:",
"Update to %s" : "Aggiornato a %s",
"Enable only for specific groups" : "Abilita solo per gruppi specifici",
"Uninstall App" : "Disinstalla applicazione",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ciao,<br><br>volevo informarti che ora hai un account %s.<br><br>Il tuo nome utente: %s<br>Accedi: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Saluti!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevo informarti che ora hai un account %s.\n\nIl tuo nome utente: %s\nAccedi: %s\n\n",
"Administrator Documentation" : "Documentazione amministratore",
"Online Documentation" : "Documentazione in linea",
"Forum" : "Forum",
"Bugtracker" : "Sistema di tracciamento bug",
"Commercial Support" : "Supporto commerciale",
"Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file",
+ "Desktop client" : "Client desktop",
+ "Android app" : "Applicazione Android",
+ "iOS app" : "Applicazione iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se vuoi supportare il progetto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">diventa uno sviluppatore</a>\n\t\to\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">diffondi il verbo</a>!",
"Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Hai utilizzato <strong>%s</strong> dei <strong>%s</strong> disponibili",
@@ -215,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Elimina chiavi di cifratura",
"Show storage location" : "Mostra posizione di archiviazione",
"Show last log in" : "Mostra ultimo accesso",
- "Login Name" : "Nome utente",
+ "Show user backend" : "Mostra il motore utente",
+ "Send email to new user" : "Invia email al nuovo utente",
+ "Show email address" : "Mostra l'indirizzo email",
+ "Username" : "Nome utente",
+ "E-Mail" : "Posta elettronica",
"Create" : "Crea",
"Admin Recovery Password" : "Password di ripristino amministrativa",
"Enter the recovery password in order to recover the users files during password change" : "Digita la password di ripristino per recuperare i file degli utenti durante la modifica della password.",
- "Search Users and Groups" : "Cerca utenti e gruppi",
+ "Search Users" : "Cerca utenti",
"Add Group" : "Aggiungi gruppo",
"Group" : "Gruppo",
"Everyone" : "Chiunque",
@@ -228,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Digita la quota di archiviazione (ad es.: \"512 MB\" or \"12 GB\")",
"Unlimited" : "Illimitata",
"Other" : "Altro",
- "Username" : "Nome utente",
"Group Admin for" : "Gruppo di amministrazione per",
"Quota" : "Quote",
"Storage Location" : "Posizione di archiviazione",
+ "User Backend" : "Motore utente",
"Last Login" : "Ultimo accesso",
"change full name" : "modica nome completo",
"set new password" : "imposta una nuova password",
+ "change email address" : "cambia l'indirizzo email",
"Default" : "Predefinito"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 2e88a90b551..59a368d79ac 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -8,18 +8,12 @@
"Authentication error" : "Errore di autenticazione",
"Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
"Unable to change full name" : "Impossibile cambiare il nome completo",
- "Group already exists" : "Il gruppo esiste già",
- "Unable to add group" : "Impossibile aggiungere il gruppo",
"Files decrypted successfully" : "File decifrato correttamente",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Impossibile decifrare i tuoi file, controlla il file owncloud.log o chiedi al tuo amministratore",
"Couldn't decrypt your files, check your password and try again" : "Impossibile decifrare i tuoi file, controlla la password e prova ancora",
"Encryption keys deleted permanently" : "Chiavi di cifratura eliminate definitivamente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Impossibile eliminare definitivamente le chiavi di cifratura, controlla il file owncloud.log o chiedi al tuo amministratore",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
- "Email saved" : "Email salvata",
- "Invalid email" : "Email non valida",
- "Unable to delete group" : "Impossibile eliminare il gruppo",
- "Unable to delete user" : "Impossibile eliminare l'utente",
"Backups restored successfully" : "Copie di sicurezza ripristinate correttamente",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Impossibile ripristinare le chiavi di cifratura, controlla il file owncloud.log o chiedi al tuo amministratore",
"Language changed" : "Lingua modificata",
@@ -37,12 +31,23 @@
"Enabled" : "Abilitata",
"Not enabled" : "Non abilitata",
"Recommended" : "Consigliata",
+ "Group already exists." : "Il gruppo esiste già.",
+ "Unable to add group." : "Impossibile aggiungere il gruppo.",
+ "Unable to delete group." : "Impossibile eliminare il gruppo.",
"Saved" : "Salvato",
"test email settings" : "prova impostazioni email",
"If you received this email, the settings seem to be correct." : "Se hai ricevuto questa email, le impostazioni dovrebbero essere corrette.",
"A problem occurred while sending the email. Please revise your settings." : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni.",
"Email sent" : "Email inviata",
"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 mail address" : "Indirizzo email non valido",
+ "Unable to create user." : "Impossibile creare l'utente.",
+ "Your %s account was created" : "Il tuo account %s è stato creato",
+ "Unable to delete user." : "Impossibile eliminare l'utente.",
+ "Forbidden" : "Vietato",
+ "Invalid user" : "Utente non valido",
+ "Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta",
+ "Email saved" : "Email salvata",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
"Sending..." : "Invio in corso...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"Error creating user" : "Errore durante la creazione dell'utente",
"A valid password must be provided" : "Deve essere fornita una password valida",
- "Warning: Home directory for user \"{user}\" already exists" : "Avviso: la cartella home dell'utente \"{user}\" esiste già",
+ "A valid email must be provided" : "Deve essere fornito un indirizzo email valido",
"__language_name__" : "Italiano",
"Personal Info" : "Informazioni personali",
"SSL root certificates" : "Certificati SSL radice",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Avviso di sicurezza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sei connesso a %s tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere l'utilizzo del protocollo HTTPS al posto di HTTP.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
+ "Read-Only config enabled" : "Configurazione di sola lettura abilitata",
+ "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." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.",
"Setup Warning" : "Avviso di configurazione",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.",
@@ -108,16 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite è utilizzato come database. Per installazioni grandi, consigliamo di cambiarlo. Per migrare a un altro database, utilizzare lo strumento da riga di comando: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulo 'fileinfo' mancante",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
- "Your PHP version is outdated" : "La tua versione di PHP è obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La tua versione di PHP è obsoleta. Ti consigliamo vivamente di aggiornare alla versione 5.3.8 o successiva poiché sono noti problemi con le vecchie versioni. L'installazione attuale potrebbe non funzionare correttamente.",
"PHP charset is not set to UTF-8" : "Il set di caratteri di PHP non è impostato a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Il set di caratteri di PHP non è impostato a UTF-8. Ciò può essere causa di problemi con i caratteri non ASCII nei nomi dei file. Consigliamo vivamente di cambiare il valore di 'default_charset' nel file php.ini a 'UTF-8'.",
"Locale not working" : "Locale non funzionante",
"System locale can not be set to a one which supports UTF-8." : "La localizzazione di sistema non può essere impostata a una che supporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ciò significa che potrebbero esserci problemi con alcuni caratteri nei nomi dei file.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle\nlocalizzazioni seguenti: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.",
"URL generation in notification emails" : "Generazione di URL nelle email di notifica",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwritewebroot\" nel file config.php al percorso della radice del sito della tua installazione (Suggerito: \"%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\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwrite.cli.url\" nel file config.php al percorso della radice del sito della tua installazione (Consigliato: \"%s\")",
+ "Configuration Checks" : "Controlli di configurazione",
"No problems found" : "Nessun problema trovato",
"Please double check the <a href='%s'>installation guides</a>." : "Leggi attentamente le <a href='%s'>guide d'installazione</a>.",
"Last cron was executed at %s." : "L'ultimo cron è stato eseguito alle %s.",
@@ -130,17 +135,20 @@
"Allow users to share via link" : "Consenti agli utenti di condivere tramite collegamento",
"Enforce password protection" : "Imponi la protezione con password",
"Allow public uploads" : "Consenti caricamenti pubblici",
+ "Allow users to send mail notification for shared files" : "Consenti agli utenti di inviare email di notifica per i file condivisi",
"Set default expiration date" : "Imposta data di scadenza predefinita",
"Expire after " : "Scadenza dopo",
"days" : "giorni",
"Enforce expiration date" : "Forza la data di scadenza",
"Allow resharing" : "Consenti la ri-condivisione",
"Restrict users to only share with users in their groups" : "Limita gli utenti a condividere solo con gli utenti nei loro gruppi",
- "Allow users to send mail notification for shared files" : "Consenti agli utenti di inviare email di notifica per i file condivisi",
+ "Allow users to send mail notification for shared files to other users" : "Consenti agli utenti di inviare email di notifica per i file condivisi con altri utenti",
"Exclude groups from sharing" : "Escludi gruppi dalla condivisione",
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
"Enforce HTTPS" : "Forza HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forza i client a connettersi a %s tramite una connessione cifrata.",
+ "Enforce HTTPS for subdomains" : "Forza HTTPS per i sottodomini",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forza i client a connettersi a %s e ai sottodomini tramite una connessione cifrata.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connettiti al tuo %s tramite HTTPS per abilitare o disabilitare l'applicazione di SSL.",
"This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.",
"Send mode" : "Modalità di invio",
@@ -168,15 +176,22 @@
"Documentation:" : "Documentazione:",
"User Documentation" : "Documentazione utente",
"Admin Documentation" : "Documentazione di amministrazione",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Questa applicazione non può essere installata perché le seguenti dipendenze non sono soddisfatte:",
"Update to %s" : "Aggiornato a %s",
"Enable only for specific groups" : "Abilita solo per gruppi specifici",
"Uninstall App" : "Disinstalla applicazione",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ciao,<br><br>volevo informarti che ora hai un account %s.<br><br>Il tuo nome utente: %s<br>Accedi: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Saluti!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevo informarti che ora hai un account %s.\n\nIl tuo nome utente: %s\nAccedi: %s\n\n",
"Administrator Documentation" : "Documentazione amministratore",
"Online Documentation" : "Documentazione in linea",
"Forum" : "Forum",
"Bugtracker" : "Sistema di tracciamento bug",
"Commercial Support" : "Supporto commerciale",
"Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file",
+ "Desktop client" : "Client desktop",
+ "Android app" : "Applicazione Android",
+ "iOS app" : "Applicazione iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se vuoi supportare il progetto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">diventa uno sviluppatore</a>\n\t\to\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">diffondi il verbo</a>!",
"Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Hai utilizzato <strong>%s</strong> dei <strong>%s</strong> disponibili",
@@ -213,11 +228,15 @@
"Delete Encryption Keys" : "Elimina chiavi di cifratura",
"Show storage location" : "Mostra posizione di archiviazione",
"Show last log in" : "Mostra ultimo accesso",
- "Login Name" : "Nome utente",
+ "Show user backend" : "Mostra il motore utente",
+ "Send email to new user" : "Invia email al nuovo utente",
+ "Show email address" : "Mostra l'indirizzo email",
+ "Username" : "Nome utente",
+ "E-Mail" : "Posta elettronica",
"Create" : "Crea",
"Admin Recovery Password" : "Password di ripristino amministrativa",
"Enter the recovery password in order to recover the users files during password change" : "Digita la password di ripristino per recuperare i file degli utenti durante la modifica della password.",
- "Search Users and Groups" : "Cerca utenti e gruppi",
+ "Search Users" : "Cerca utenti",
"Add Group" : "Aggiungi gruppo",
"Group" : "Gruppo",
"Everyone" : "Chiunque",
@@ -226,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Digita la quota di archiviazione (ad es.: \"512 MB\" or \"12 GB\")",
"Unlimited" : "Illimitata",
"Other" : "Altro",
- "Username" : "Nome utente",
"Group Admin for" : "Gruppo di amministrazione per",
"Quota" : "Quote",
"Storage Location" : "Posizione di archiviazione",
+ "User Backend" : "Motore utente",
"Last Login" : "Ultimo accesso",
"change full name" : "modica nome completo",
"set new password" : "imposta una nuova password",
+ "change email address" : "cambia l'indirizzo email",
"Default" : "Predefinito"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 1e8e5b35233..68382ae44b0 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "認証エラー",
"Your full name has been changed." : "名前を変更しました。",
"Unable to change full name" : "名前を変更できません",
- "Group already exists" : "グループはすでに存在します",
- "Unable to add group" : "グループを追加できません",
"Files decrypted successfully" : "ファイルの復号化に成功しました",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "ファイルを復号化することができませんでした。owncloud.logを調査するか、管理者に連絡してください。",
"Couldn't decrypt your files, check your password and try again" : "ファイルを復号化することができませんでした。パスワードを確認のうえ再試行してください。",
"Encryption keys deleted permanently" : "暗号化キーは完全に削除されます",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "暗号化キーを完全に削除できませんでした。owncloud.logを確認するか、管理者に問い合わせてください。",
"Couldn't remove app." : "アプリが削除できませんでした。",
- "Email saved" : "メールアドレスを保存しました",
- "Invalid email" : "無効なメールアドレス",
- "Unable to delete group" : "グループを削除できません",
- "Unable to delete user" : "ユーザーを削除できません",
"Backups restored successfully" : "バックアップの復元に成功しました",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "暗号化キーを復元できませんでした。owncloud.logを確認するか、管理者に問い合わせてください。",
"Language changed" : "言語が変更されました",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "有効",
"Not enabled" : "無効",
"Recommended" : "推奨",
+ "Group already exists." : "グループは既に存在しています",
+ "Unable to add group." : "グループを追加できません",
+ "Unable to delete group." : "グループを削除できません",
"Saved" : "保存されました",
"test email settings" : "メール設定のテスト",
"If you received this email, the settings seem to be correct." : "このメールを受け取ったら、設定は正しいはずです。",
"A problem occurred while sending the email. Please revise your settings." : "メールの送信中に問題が発生しました。設定を確認してください。",
"Email sent" : "メールを送信しました",
"You need to set your user email before being able to send test emails." : "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。",
+ "Invalid mail address" : "無効なメールアドレスです",
+ "Unable to create user." : "ユーザを追加できません",
+ "Your %s account was created" : "アカウント %s を作成しました",
+ "Unable to delete user." : "ユーザを削除できません",
+ "Forbidden" : "禁止",
+ "Invalid user" : "無効なユーザー",
+ "Unable to change mail address" : "メールアドレスを変更できません",
+ "Email saved" : "メールアドレスを保存しました",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
"Add trusted domain" : "信頼するドメイン名に追加",
"Sending..." : "送信中…",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "有効なユーザー名を指定する必要があります",
"Error creating user" : "ユーザー作成エラー",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
- "Warning: Home directory for user \"{user}\" already exists" : "警告: ユーザー \"{user}\" のホームディレクトリはすでに存在します",
+ "A valid email must be provided" : "有効なメールアドレスを指定する必要があります",
"__language_name__" : "Japanese (日本語)",
"Personal Info" : "個人情報",
"SSL root certificates" : "SSLルート証明書",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "セキュリティ警告",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "HTTP経由で %s にアクセスしています。HTTPSを使用するようサーバーを設定することを強くおすすめします。",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートから移動するよう強く提案します。",
+ "Read-Only config enabled" : "\"config\"は読み取り専用になってます",
+ "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." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要",
"Setup Warning" : "セットアップ警告",
"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 等のキャッシュ/アクセラレータが原因かもしれません。",
@@ -110,16 +116,14 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite をデータベースとして利用しています。大規模な運用では、利用しないことをお勧めします。別のデータベースへ移行する場合は、コマンドラインツール: 'occ db:convert-type'を使ってください。",
"Module 'fileinfo' missing" : "モジュール 'fileinfo' が見つかりません",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。",
- "Your PHP version is outdated" : "PHPバーションが古くなっています。",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHPバーションが古くなっています。古いバージョンには既知の問題があるため、5.3.8以降のバージョンにアップデートすることを強く推奨します。このインストール状態では正常に動作しない可能性があります。",
"PHP charset is not set to UTF-8" : "PHP の文字コードは UTF-8 に設定されていません",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP の文字コードは UTF-8 に設定されていません。ファイル名に非アスキー文字が含まれる場合は、大きな問題となる可能性があります。php.ini の 'default_charset' の値を 'UTF-8' に変更することを強くお勧めします。",
"Locale not working" : "ロケールが動作していません",
"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 to install the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするために、システムに必要なパッケージをインストールすることを強くおすすめします: %s。",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするために、システムに必要なパッケージをインストールすることを強くおすすめします: %s。",
"URL generation in notification emails" : "通知メールにURLを生成",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "もし、URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwritewebroot\" オプションをインストールしたパスに設定してください。(推奨: \"%s\")",
+ "Configuration Checks" : "設定を確認",
"No problems found" : "問題は見つかりませんでした",
"Please double check the <a href='%s'>installation guides</a>." : "<a href='%s'>インストールガイド</a>をよく確認してください。",
"Last cron was executed at %s." : "直近では%sにcronが実行されました。",
@@ -132,17 +136,20 @@ OC.L10N.register(
"Allow users to share via link" : "URLリンクで共有を許可する",
"Enforce password protection" : "常にパスワード保護を有効にする",
"Allow public uploads" : "パブリックなアップロードを許可する",
+ "Allow users to send mail notification for shared files" : "共有ファイルに関するメール通知の送信をユーザーに許可する",
"Set default expiration date" : "有効期限のデフォルト値を設定",
"Expire after " : "無効になるまで",
"days" : "日",
"Enforce expiration date" : "有効期限を反映させる",
"Allow resharing" : "再共有を許可する",
"Restrict users to only share with users in their groups" : "グループ内のユーザーでのみ共有するように制限する",
- "Allow users to send mail notification for shared files" : "共有ファイルに関するメール通知の送信をユーザーに許可する",
+ "Allow users to send mail notification for shared files to other users" : "共有ファイルに関するメール通知の送信をユーザに許可する",
"Exclude groups from sharing" : "共有可能なグループから除外",
"These groups will still be able to receive shares, but not to initiate them." : "このグループでは、フォルダー共有を開始することはできませんが、共有されたフォルダーを参照することはできます。",
"Enforce HTTPS" : "常にHTTPSを使用する",
"Forces the clients to connect to %s via an encrypted connection." : "クライアントから %sへの接続を常に暗号化します。",
+ "Enforce HTTPS for subdomains" : "サブドメインのHTTPSを強制する",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "%s とサブドメインへの暗号化接続をクライアントに強制する。",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "強制的なSSL接続を有効/無効にするには、HTTPS経由で %s へ接続してください。",
"This is used for sending out notifications." : "通知を送信する際に使用します。",
"Send mode" : "送信モード",
@@ -170,15 +177,22 @@ OC.L10N.register(
"Documentation:" : "ドキュメント:",
"User Documentation" : "ユーザードキュメント",
"Admin Documentation" : "管理者ドキュメント",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "次の依存関係は無いためこのアプリをインストールできません",
"Update to %s" : "%sにアップデート",
"Enable only for specific groups" : "特定のグループのみ有効に",
"Uninstall App" : "アプリをアンインストール",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用可能になったことをお知らせします。<br><br>ユーザー名: %s<br>以下のURLからアクセス: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "それでは!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用可能になったことをお知らせします。\n\nユーザー名: %s\n接続URL: %s\n\n",
"Administrator Documentation" : "管理者ドキュメント",
"Online Documentation" : "オンラインドキュメント",
"Forum" : "フォーラム",
"Bugtracker" : "バグトラッカー",
"Commercial Support" : "商用サポート",
"Get the apps to sync your files" : "ファイルを同期するためのアプリを取得",
+ "Desktop client" : "デスクトップクライアント",
+ "Android app" : "Androidアプリ",
+ "iOS app" : "iOSアプリ",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "もしプロジェクトをサポートしていただけるなら、\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">開発に参加する</a>\n\t\t、もしくは\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">プロジェクトを広く伝えてください</a>!",
"Show First Run Wizard again" : "初回ウィザードを再表示する",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "現在 <strong>%s</strong> / <strong>%s</strong> を利用しています",
@@ -215,11 +229,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "暗号化キーを削除する",
"Show storage location" : "データの保存場所を表示",
"Show last log in" : "最終ログインを表示",
- "Login Name" : "ログイン名",
+ "Show user backend" : "ユーザバックエンドを表示",
+ "Send email to new user" : "新規ユーザーにメールを送信",
+ "Show email address" : "メールアドレスを表示",
+ "Username" : "ユーザーID",
+ "E-Mail" : "Eメール",
"Create" : "作成",
"Admin Recovery Password" : "管理者リカバリパスワード",
"Enter the recovery password in order to recover the users files during password change" : "パスワード変更時のユーザーのファイルを回復するため、リカバリパスワードを入力してください",
- "Search Users and Groups" : "ユーザーとグループを検索",
+ "Search Users" : "ユーザーを検索",
"Add Group" : "グループを追加",
"Group" : "グループ",
"Everyone" : "すべてのユーザー",
@@ -228,13 +246,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "ストレージのクォータを入力してください (例: \"512MB\" や \"12 GB\")",
"Unlimited" : "無制限",
"Other" : "その他",
- "Username" : "ユーザーID",
"Group Admin for" : "グループ管理者",
"Quota" : "クオータ",
"Storage Location" : "データの保存場所",
+ "User Backend" : "ユーザバックエンド",
"Last Login" : "最終ログイン",
"change full name" : "名前を変更",
"set new password" : "新しいパスワードを設定",
+ "change email address" : "メールアドレスを変更",
"Default" : "デフォルト"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index e601e3963d0..2dfc1033763 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -8,18 +8,12 @@
"Authentication error" : "認証エラー",
"Your full name has been changed." : "名前を変更しました。",
"Unable to change full name" : "名前を変更できません",
- "Group already exists" : "グループはすでに存在します",
- "Unable to add group" : "グループを追加できません",
"Files decrypted successfully" : "ファイルの復号化に成功しました",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "ファイルを復号化することができませんでした。owncloud.logを調査するか、管理者に連絡してください。",
"Couldn't decrypt your files, check your password and try again" : "ファイルを復号化することができませんでした。パスワードを確認のうえ再試行してください。",
"Encryption keys deleted permanently" : "暗号化キーは完全に削除されます",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "暗号化キーを完全に削除できませんでした。owncloud.logを確認するか、管理者に問い合わせてください。",
"Couldn't remove app." : "アプリが削除できませんでした。",
- "Email saved" : "メールアドレスを保存しました",
- "Invalid email" : "無効なメールアドレス",
- "Unable to delete group" : "グループを削除できません",
- "Unable to delete user" : "ユーザーを削除できません",
"Backups restored successfully" : "バックアップの復元に成功しました",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "暗号化キーを復元できませんでした。owncloud.logを確認するか、管理者に問い合わせてください。",
"Language changed" : "言語が変更されました",
@@ -37,12 +31,23 @@
"Enabled" : "有効",
"Not enabled" : "無効",
"Recommended" : "推奨",
+ "Group already exists." : "グループは既に存在しています",
+ "Unable to add group." : "グループを追加できません",
+ "Unable to delete group." : "グループを削除できません",
"Saved" : "保存されました",
"test email settings" : "メール設定のテスト",
"If you received this email, the settings seem to be correct." : "このメールを受け取ったら、設定は正しいはずです。",
"A problem occurred while sending the email. Please revise your settings." : "メールの送信中に問題が発生しました。設定を確認してください。",
"Email sent" : "メールを送信しました",
"You need to set your user email before being able to send test emails." : "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。",
+ "Invalid mail address" : "無効なメールアドレスです",
+ "Unable to create user." : "ユーザを追加できません",
+ "Your %s account was created" : "アカウント %s を作成しました",
+ "Unable to delete user." : "ユーザを削除できません",
+ "Forbidden" : "禁止",
+ "Invalid user" : "無効なユーザー",
+ "Unable to change mail address" : "メールアドレスを変更できません",
+ "Email saved" : "メールアドレスを保存しました",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
"Add trusted domain" : "信頼するドメイン名に追加",
"Sending..." : "送信中…",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "有効なユーザー名を指定する必要があります",
"Error creating user" : "ユーザー作成エラー",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
- "Warning: Home directory for user \"{user}\" already exists" : "警告: ユーザー \"{user}\" のホームディレクトリはすでに存在します",
+ "A valid email must be provided" : "有効なメールアドレスを指定する必要があります",
"__language_name__" : "Japanese (日本語)",
"Personal Info" : "個人情報",
"SSL root certificates" : "SSLルート証明書",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "セキュリティ警告",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "HTTP経由で %s にアクセスしています。HTTPSを使用するようサーバーを設定することを強くおすすめします。",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートから移動するよう強く提案します。",
+ "Read-Only config enabled" : "\"config\"は読み取り専用になってます",
+ "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." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要",
"Setup Warning" : "セットアップ警告",
"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 等のキャッシュ/アクセラレータが原因かもしれません。",
@@ -108,16 +114,14 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite をデータベースとして利用しています。大規模な運用では、利用しないことをお勧めします。別のデータベースへ移行する場合は、コマンドラインツール: 'occ db:convert-type'を使ってください。",
"Module 'fileinfo' missing" : "モジュール 'fileinfo' が見つかりません",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。",
- "Your PHP version is outdated" : "PHPバーションが古くなっています。",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHPバーションが古くなっています。古いバージョンには既知の問題があるため、5.3.8以降のバージョンにアップデートすることを強く推奨します。このインストール状態では正常に動作しない可能性があります。",
"PHP charset is not set to UTF-8" : "PHP の文字コードは UTF-8 に設定されていません",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP の文字コードは UTF-8 に設定されていません。ファイル名に非アスキー文字が含まれる場合は、大きな問題となる可能性があります。php.ini の 'default_charset' の値を 'UTF-8' に変更することを強くお勧めします。",
"Locale not working" : "ロケールが動作していません",
"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 to install the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするために、システムに必要なパッケージをインストールすることを強くおすすめします: %s。",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするために、システムに必要なパッケージをインストールすることを強くおすすめします: %s。",
"URL generation in notification emails" : "通知メールにURLを生成",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "もし、URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwritewebroot\" オプションをインストールしたパスに設定してください。(推奨: \"%s\")",
+ "Configuration Checks" : "設定を確認",
"No problems found" : "問題は見つかりませんでした",
"Please double check the <a href='%s'>installation guides</a>." : "<a href='%s'>インストールガイド</a>をよく確認してください。",
"Last cron was executed at %s." : "直近では%sにcronが実行されました。",
@@ -130,17 +134,20 @@
"Allow users to share via link" : "URLリンクで共有を許可する",
"Enforce password protection" : "常にパスワード保護を有効にする",
"Allow public uploads" : "パブリックなアップロードを許可する",
+ "Allow users to send mail notification for shared files" : "共有ファイルに関するメール通知の送信をユーザーに許可する",
"Set default expiration date" : "有効期限のデフォルト値を設定",
"Expire after " : "無効になるまで",
"days" : "日",
"Enforce expiration date" : "有効期限を反映させる",
"Allow resharing" : "再共有を許可する",
"Restrict users to only share with users in their groups" : "グループ内のユーザーでのみ共有するように制限する",
- "Allow users to send mail notification for shared files" : "共有ファイルに関するメール通知の送信をユーザーに許可する",
+ "Allow users to send mail notification for shared files to other users" : "共有ファイルに関するメール通知の送信をユーザに許可する",
"Exclude groups from sharing" : "共有可能なグループから除外",
"These groups will still be able to receive shares, but not to initiate them." : "このグループでは、フォルダー共有を開始することはできませんが、共有されたフォルダーを参照することはできます。",
"Enforce HTTPS" : "常にHTTPSを使用する",
"Forces the clients to connect to %s via an encrypted connection." : "クライアントから %sへの接続を常に暗号化します。",
+ "Enforce HTTPS for subdomains" : "サブドメインのHTTPSを強制する",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "%s とサブドメインへの暗号化接続をクライアントに強制する。",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "強制的なSSL接続を有効/無効にするには、HTTPS経由で %s へ接続してください。",
"This is used for sending out notifications." : "通知を送信する際に使用します。",
"Send mode" : "送信モード",
@@ -168,15 +175,22 @@
"Documentation:" : "ドキュメント:",
"User Documentation" : "ユーザードキュメント",
"Admin Documentation" : "管理者ドキュメント",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "次の依存関係は無いためこのアプリをインストールできません",
"Update to %s" : "%sにアップデート",
"Enable only for specific groups" : "特定のグループのみ有効に",
"Uninstall App" : "アプリをアンインストール",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用可能になったことをお知らせします。<br><br>ユーザー名: %s<br>以下のURLからアクセス: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "それでは!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用可能になったことをお知らせします。\n\nユーザー名: %s\n接続URL: %s\n\n",
"Administrator Documentation" : "管理者ドキュメント",
"Online Documentation" : "オンラインドキュメント",
"Forum" : "フォーラム",
"Bugtracker" : "バグトラッカー",
"Commercial Support" : "商用サポート",
"Get the apps to sync your files" : "ファイルを同期するためのアプリを取得",
+ "Desktop client" : "デスクトップクライアント",
+ "Android app" : "Androidアプリ",
+ "iOS app" : "iOSアプリ",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "もしプロジェクトをサポートしていただけるなら、\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">開発に参加する</a>\n\t\t、もしくは\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">プロジェクトを広く伝えてください</a>!",
"Show First Run Wizard again" : "初回ウィザードを再表示する",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "現在 <strong>%s</strong> / <strong>%s</strong> を利用しています",
@@ -213,11 +227,15 @@
"Delete Encryption Keys" : "暗号化キーを削除する",
"Show storage location" : "データの保存場所を表示",
"Show last log in" : "最終ログインを表示",
- "Login Name" : "ログイン名",
+ "Show user backend" : "ユーザバックエンドを表示",
+ "Send email to new user" : "新規ユーザーにメールを送信",
+ "Show email address" : "メールアドレスを表示",
+ "Username" : "ユーザーID",
+ "E-Mail" : "Eメール",
"Create" : "作成",
"Admin Recovery Password" : "管理者リカバリパスワード",
"Enter the recovery password in order to recover the users files during password change" : "パスワード変更時のユーザーのファイルを回復するため、リカバリパスワードを入力してください",
- "Search Users and Groups" : "ユーザーとグループを検索",
+ "Search Users" : "ユーザーを検索",
"Add Group" : "グループを追加",
"Group" : "グループ",
"Everyone" : "すべてのユーザー",
@@ -226,13 +244,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "ストレージのクォータを入力してください (例: \"512MB\" や \"12 GB\")",
"Unlimited" : "無制限",
"Other" : "その他",
- "Username" : "ユーザーID",
"Group Admin for" : "グループ管理者",
"Quota" : "クオータ",
"Storage Location" : "データの保存場所",
+ "User Backend" : "ユーザバックエンド",
"Last Login" : "最終ログイン",
"change full name" : "名前を変更",
"set new password" : "新しいパスワードを設定",
+ "change email address" : "メールアドレスを変更",
"Default" : "デフォルト"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js
index 09d8c25290b..e8a61debfa8 100644
--- a/settings/l10n/ka_GE.js
+++ b/settings/l10n/ka_GE.js
@@ -6,12 +6,6 @@ OC.L10N.register(
"Security" : "უსაფრთხოება",
"Log" : "ლოგი",
"Authentication error" : "ავთენტიფიკაციის შეცდომა",
- "Group already exists" : "ჯგუფი უკვე არსებობს",
- "Unable to add group" : "ჯგუფის დამატება ვერ მოხერხდა",
- "Email saved" : "იმეილი შენახულია",
- "Invalid email" : "არასწორი იმეილი",
- "Unable to delete group" : "ჯგუფის წაშლა ვერ მოხერხდა",
- "Unable to delete user" : "მომხმარებლის წაშლა ვერ მოხერხდა",
"Language changed" : "ენა შეცვლილია",
"Invalid request" : "არასწორი მოთხოვნა",
"Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
@@ -19,6 +13,7 @@ OC.L10N.register(
"Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.",
"Email sent" : "იმეილი გაიგზავნა",
+ "Email saved" : "იმეილი შენახულია",
"All" : "ყველა",
"Please wait...." : "დაიცადეთ....",
"Disable" : "გამორთვა",
@@ -79,12 +74,11 @@ OC.L10N.register(
"Language" : "ენა",
"Help translate" : "თარგმნის დახმარება",
"Import Root Certificate" : "Root სერთიფიკატის იმპორტირება",
- "Login Name" : "მომხმარებლის სახელი",
+ "Username" : "მომხმარებლის სახელი",
"Create" : "შექმნა",
"Default Quota" : "საწყისი ქვოტა",
"Unlimited" : "ულიმიტო",
"Other" : "სხვა",
- "Username" : "მომხმარებლის სახელი",
"Quota" : "ქვოტა",
"set new password" : "დააყენეთ ახალი პაროლი",
"Default" : "საწყისი პარამეტრები"
diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json
index e3a1f410e67..5794fa90692 100644
--- a/settings/l10n/ka_GE.json
+++ b/settings/l10n/ka_GE.json
@@ -4,12 +4,6 @@
"Security" : "უსაფრთხოება",
"Log" : "ლოგი",
"Authentication error" : "ავთენტიფიკაციის შეცდომა",
- "Group already exists" : "ჯგუფი უკვე არსებობს",
- "Unable to add group" : "ჯგუფის დამატება ვერ მოხერხდა",
- "Email saved" : "იმეილი შენახულია",
- "Invalid email" : "არასწორი იმეილი",
- "Unable to delete group" : "ჯგუფის წაშლა ვერ მოხერხდა",
- "Unable to delete user" : "მომხმარებლის წაშლა ვერ მოხერხდა",
"Language changed" : "ენა შეცვლილია",
"Invalid request" : "არასწორი მოთხოვნა",
"Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
@@ -17,6 +11,7 @@
"Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.",
"Email sent" : "იმეილი გაიგზავნა",
+ "Email saved" : "იმეილი შენახულია",
"All" : "ყველა",
"Please wait...." : "დაიცადეთ....",
"Disable" : "გამორთვა",
@@ -77,12 +72,11 @@
"Language" : "ენა",
"Help translate" : "თარგმნის დახმარება",
"Import Root Certificate" : "Root სერთიფიკატის იმპორტირება",
- "Login Name" : "მომხმარებლის სახელი",
+ "Username" : "მომხმარებლის სახელი",
"Create" : "შექმნა",
"Default Quota" : "საწყისი ქვოტა",
"Unlimited" : "ულიმიტო",
"Other" : "სხვა",
- "Username" : "მომხმარებლის სახელი",
"Quota" : "ქვოტა",
"set new password" : "დააყენეთ ახალი პაროლი",
"Default" : "საწყისი პარამეტრები"
diff --git a/settings/l10n/km.js b/settings/l10n/km.js
index 9814b26f128..33977b5e821 100644
--- a/settings/l10n/km.js
+++ b/settings/l10n/km.js
@@ -7,12 +7,6 @@ OC.L10N.register(
"Email Server" : "ម៉ាស៊ីន​បម្រើ​អ៊ីមែល",
"Log" : "Log",
"Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
- "Group already exists" : "មាន​ក្រុម​នេះ​រួច​ហើយ",
- "Unable to add group" : "មិន​អាច​បន្ថែម​ក្រុម",
- "Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
- "Invalid email" : "អ៊ីមែល​មិន​ត្រឹម​ត្រូវ",
- "Unable to delete group" : "មិន​អាច​លុប​ក្រុម​បាន",
- "Unable to delete user" : "មិន​អាច​លុប​អ្នក​ប្រើ​បាន",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
"Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
@@ -26,6 +20,7 @@ OC.L10N.register(
"If you received this email, the settings seem to be correct." : "ប្រសិន​បើ​អ្នក​ទទួល​បាន​អ៊ីមែល​នេះ មាន​ន័យ​ថា​ការ​កំណត់​គឺ​បាន​ត្រឹមម​ត្រូវ​ហើយ។",
"Email sent" : "បាន​ផ្ញើ​អ៊ីមែល",
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
+ "Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
"Sending..." : "កំពុង​ផ្ញើ...",
"Please wait...." : "សូម​រង់​ចាំ....",
"Error while disabling app" : "មាន​កំហុស​ពេល​កំពុង​បិទកម្មវិធី",
@@ -101,12 +96,11 @@ OC.L10N.register(
"Help translate" : "ជួយ​បក​ប្រែ",
"Log-in password" : "ពាក្យ​សម្ងាត់​ចូល​គណនី",
"Decrypt all Files" : "Decrypt ឯកសារ​ទាំង​អស់",
- "Login Name" : "ចូល",
+ "Username" : "ឈ្មោះ​អ្នកប្រើ",
"Create" : "បង្កើត",
"Admin Recovery Password" : "ការ​ស្វែង​រក​ពាក្យ​សម្ងាត់របស់ប្រធាន​វេបសាយ",
"Unlimited" : "មិន​កំណត់",
"Other" : "ផ្សេងៗ",
- "Username" : "ឈ្មោះ​អ្នកប្រើ",
"set new password" : "កំណត់​ពាក្យ​សម្ងាត់​ថ្មី",
"Default" : "លំនាំ​ដើម"
},
diff --git a/settings/l10n/km.json b/settings/l10n/km.json
index 91e65cac226..4758adb9265 100644
--- a/settings/l10n/km.json
+++ b/settings/l10n/km.json
@@ -5,12 +5,6 @@
"Email Server" : "ម៉ាស៊ីន​បម្រើ​អ៊ីមែល",
"Log" : "Log",
"Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
- "Group already exists" : "មាន​ក្រុម​នេះ​រួច​ហើយ",
- "Unable to add group" : "មិន​អាច​បន្ថែម​ក្រុម",
- "Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
- "Invalid email" : "អ៊ីមែល​មិន​ត្រឹម​ត្រូវ",
- "Unable to delete group" : "មិន​អាច​លុប​ក្រុម​បាន",
- "Unable to delete user" : "មិន​អាច​លុប​អ្នក​ប្រើ​បាន",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
"Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
@@ -24,6 +18,7 @@
"If you received this email, the settings seem to be correct." : "ប្រសិន​បើ​អ្នក​ទទួល​បាន​អ៊ីមែល​នេះ មាន​ន័យ​ថា​ការ​កំណត់​គឺ​បាន​ត្រឹមម​ត្រូវ​ហើយ។",
"Email sent" : "បាន​ផ្ញើ​អ៊ីមែល",
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
+ "Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
"Sending..." : "កំពុង​ផ្ញើ...",
"Please wait...." : "សូម​រង់​ចាំ....",
"Error while disabling app" : "មាន​កំហុស​ពេល​កំពុង​បិទកម្មវិធី",
@@ -99,12 +94,11 @@
"Help translate" : "ជួយ​បក​ប្រែ",
"Log-in password" : "ពាក្យ​សម្ងាត់​ចូល​គណនី",
"Decrypt all Files" : "Decrypt ឯកសារ​ទាំង​អស់",
- "Login Name" : "ចូល",
+ "Username" : "ឈ្មោះ​អ្នកប្រើ",
"Create" : "បង្កើត",
"Admin Recovery Password" : "ការ​ស្វែង​រក​ពាក្យ​សម្ងាត់របស់ប្រធាន​វេបសាយ",
"Unlimited" : "មិន​កំណត់",
"Other" : "ផ្សេងៗ",
- "Username" : "ឈ្មោះ​អ្នកប្រើ",
"set new password" : "កំណត់​ពាក្យ​សម្ងាត់​ថ្មី",
"Default" : "លំនាំ​ដើម"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js
new file mode 100644
index 00000000000..8d7bd3c2a1f
--- /dev/null
+++ b/settings/l10n/kn.js
@@ -0,0 +1,163 @@
+OC.L10N.register(
+ "settings",
+ {
+ "Security & Setup Warnings" : "ಭದ್ರತಾ ಮತ್ತು ಸೆಟಪ್ ಎಚ್ಚರಿಕೆಗಳು",
+ "Sharing" : "ಹಂಚಿಕೆ",
+ "Security" : "ಭದ್ರತೆ",
+ "Email Server" : "ಇ-ಅಂಚೆಯ ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರ",
+ "Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
+ "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
+ "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.",
+ "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
+ "Files decrypted successfully" : "ಕಡತಗಳನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅಸಂಕೇತಿಕರಿಸಿದೆ",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "ನಿಮ್ಮ ಕಡತಗಳನ್ನು ಅಸಂಕೇತಿಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, owncloud.log ಪರಿಶೀಲಿಸಿ ಅಥವಾ ನಿಮ್ಮ ನಿರ್ವಾಹಕರ ಸಹಾಯ ಕೇಳಿ",
+ "Encryption keys deleted permanently" : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಖಯಃ ಅಳಿಸಿ",
+ "Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Backups restored successfully" : " ಹಿಂದೆ ಉಳಿಸಿದ ಅನುಕರಣಿತ ಪ್ರತಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "ನಿಮ್ಮ ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ, ನಿಮ್ಮ owncloud.log ಪರಿಶೀಲಿಸಿ ಅಥವಾ ನಿಮ್ಮ ನಿರ್ವಾಹಕರ ಸಹಾಯ ಕೇಳಿ",
+ "Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
+ "Invalid request" : "ಅಮಾನ್ಯ ಕೋರಿಕೆ",
+ "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." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
+ "Wrong password" : "ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "No user supplied" : "ಯಾವುದೇ ಬಳಕೆದಾರನ ಹೆಸರನ್ನು ನೀಡಿರುವುದಿಲ್ಲ",
+ "Unable to change password" : "ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ",
+ "Not enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿಲ್ಲ",
+ "Recommended" : "ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ",
+ "Group already exists." : "ಗುಂಪು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.",
+ "Unable to add group." : "ಗುಂಪುನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ.",
+ "Unable to delete group." : "ಗುಂಪುನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.",
+ "Saved" : "ಉಳಿಸಿದ",
+ "test email settings" : "ಪರೀರ್ಕ್ಷಾತ ಇ-ಅಂಚೆಯ ಆಯ್ಕೇ",
+ "If you received this email, the settings seem to be correct." : "ನೀವು ಈ ಇ-ಅಂಚೆಯನ್ನು ಪಡೆದ ಪಕ್ಷದಲ್ಲಿ, ಆಯ್ಕೇ ಸರಿಯಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ.",
+ "A problem occurred while sending the email. Please revise your settings." : "ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ದೋಷವೊಂದು ಸಂಭವಿಸಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಆಯ್ಕೆಗಳನ್ನು ಪರಿಷ್ಕರಿಸಿಕೊಳ್ಳಿ .",
+ "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ",
+ "You need to set your user email before being able to send test emails." : "ನೀವು ಪರೀಕ್ಷಾ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ಮುನ್ನ ನಿಮ್ಮ ಬಳಕೆದಾರ ಇ-ಅಂಚೆಯನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.",
+ "Invalid mail address" : "ಅಮಾನ್ಯ ಇ-ಅಂಚೆ ವಿಳಾಸ",
+ "Unable to create user." : "ಬಳಕೆದಾರನ ಖಾತೆ ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.",
+ "Your %s account was created" : "ನಿಮ್ಮ%s ಖಾತೆಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿದೆ",
+ "Unable to delete user." : "ಬಳಕೆದಾರನ ಹೆಸರುನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.",
+ "Forbidden" : "ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ",
+ "Invalid user" : "ಅಮಾನ್ಯ ಬಳಕೆದಾರ",
+ "Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
+ "Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
+ "All" : "ಎಲ್ಲಾ",
+ "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
+ "Error while disabling app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Disable" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ",
+ "Enable" : "ಸಕ್ರಿಯಗೊಳಿಸು",
+ "Error while enabling app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Updating...." : "ಆಧುನೀಕರಿಸುಲಾಗುತ್ತಿದೇ ....",
+ "Error while updating app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ನವೀಕರಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Updated" : "ಆಧುನೀಕರಿಸಲಾಗಿದೆ",
+ "Uninstalling ...." : "ಅಳಿಸಿಹಾಕುವುದು ...",
+ "Error while uninstalling app" : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Uninstall" : "ಅಳಿಸಿ",
+ "Select a profile picture" : "ಸಂಕ್ಷಿಪ್ತ ವ್ಯಕ್ತಿಚಿತ್ರ ಒಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಿ",
+ "Very weak password" : "ಅತೀ ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "Weak password" : "ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "So-so password" : "ಊಹಿಸಬಹುದಾದ ಗುಪ್ತಪದ",
+ "Good password" : "ಉತ್ತಮ ಗುಪ್ತಪದ",
+ "Strong password" : "ಪ್ರಬಲ ಗುಪ್ತಪದ",
+ "Valid until {date}" : "{date} ವರೆಗೆ ಚಾಲ್ತಿಯಲ್ಲಿರುತ್ತದೆ",
+ "Delete" : "ಅಳಿಸಿ",
+ "Decrypting files... Please wait, this can take some time." : "ನಿರೀಕ್ಷಿಸಿ, ಕಡತಗಳನ್ನು ಅಸಂಕೇತಿಕರಿಸಲಾಗುತ್ತಿದೆ ... ಇದು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು.",
+ "Delete encryption keys permanently." : "ಶಾಶ್ವತವಾಗಿ ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಅಳಿಸಿ.",
+ "Restore encryption keys." : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಿ.",
+ "Groups" : "ಗುಂಪುಗಳು",
+ "Unable to delete {objName}" : "{objName} ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ",
+ "Error creating group" : "ಗುಂಪುನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "A valid group name must be provided" : "ಮಾನ್ಯ ಗುಂಪಿನ ಹೆಸರನ್ನು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "deleted {groupName}" : "ಅಳಿಸಲಾಗಿದೆ {groupName}",
+ "undo" : "ಹಿಂದಿರುಗಿಸು",
+ "no group" : "ಯಾವುದೇ ಗುಂಪಿನಲ್ಲಿಲ್ಲ",
+ "never" : "ಎಂದಿಗೂ",
+ "deleted {userName}" : "{userName} ಬಳಕೆಯ ಹೆಸರುನ್ನು ಅಳಿಸಲಾಗಿದೆ ",
+ "add group" : "ಗುಂಪುನ್ನು ಸೇರಿಸಿ",
+ "A valid username must be provided" : "ಮಾನ್ಯ ಬಳಕೆದಾರ ಹೆಸರು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "Error creating user" : "ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸುವಾಗ ಲೊಪವಾಗಿದೆ",
+ "A valid password must be provided" : "ಸರಿಯಾದ ಬಳಕೆದಾರ ಗುಪ್ತಪದ ಒದಗಿಸಬೇಕಾಗಿದೆ",
+ "A valid email must be provided" : "ಮಾನ್ಯ ಬಳಕೆದಾರ ಇ-ಅಂಚೆಯನ್ನು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "__language_name__" : "ಕನ್ನಡ",
+ "Personal Info" : "ವೈಯಕ್ತಿಕ ಮಾಹಿತಿ",
+ "Encryption" : "ರಹಸ್ಯ ಸಂಕೇತೀಕರಿಸು",
+ "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" : "ಮಾರಕ ಸಮಸ್ಯೆಗಳು ಮಾತ್ರ",
+ "None" : "ಯಾವುದೂ ಇಲ್ಲ",
+ "Login" : "ಖಾತೆ ಪ್ರವೇಶಿಸು",
+ "Plain" : "ಸರಳ",
+ "Security Warning" : "ಭದ್ರತಾ ಎಚ್ಚರಿಕೆ",
+ "Read-Only config enabled" : "ಸಂರಚನೆಯಲ್ಲಿ ಓದವ ಹಕ್ಕುನ್ನು ಮಾತ್ರ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ",
+ "Setup Warning" : "ಸಿದ್ಧತೆಯ ಎಚ್ಚರಿಕೆ",
+ "Database Performance Info" : "ದತ್ತಸಂಚಯದ ಸಾಧನೆ ಮಾಹಿತಿ",
+ "Module 'fileinfo' missing" : "ಕಾರ್ಯಕ್ರಮದ 'fileinfo' ಭಾಗ ಕಾಣೆಯಾದಂತ್ತಿದೆ",
+ "Locale not working" : "ಲಿಪಿ ಸಂಯೋಜಕದಲಿ ವ್ಯತೆ",
+ "No problems found" : "ಯಾವ ವ್ಯಕ್ತಿಯೂ ಕಂಡುಬಂದಿಲ್ಲ",
+ "Expire after " : "ನಿಶ್ವಸಿಸುವ ಅವಧಿ",
+ "days" : "ದಿನಗಳು",
+ "Enforce expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಬಲವ೦ತವಾಗಿ ಜಾರಿಗೆ ಮಾಡಿ",
+ "Send mode" : "ಕಳುಹಿಸುವ ಕ್ರಮ",
+ "mail" : "ಅಂಚೆ",
+ "Authentication method" : "ದೃಢೀಕರಣ ವಿಧಾನ",
+ "Authentication required" : "ದೃಢೀಕರಣ ಅಗತ್ಯವಿದೆ",
+ "Server address" : "ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರದ ವಿಳಾಸ",
+ "Port" : "ರೇವು",
+ "Credentials" : "ರುಜುವಾತುಗಳು",
+ "SMTP Username" : "SMTP ಬಳಕೆದಾರ ಹೆಸರು",
+ "SMTP Password" : "SMTP ಗುಪ್ತ ಪದ",
+ "Test email settings" : "ಪರೀರ್ಕ್ಷಾತ ಇ-ಅಂಚೆಯ ಆಯ್ಕೇ",
+ "Send email" : "ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸಿ",
+ "Log level" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆಯ ಮಟ್ಟದ",
+ "More" : "ಇನ್ನಷ್ಟು",
+ "Less" : "ಕಡಿಮೆ",
+ "Version" : "ಆವೃತ್ತಿ",
+ "Documentation:" : "ದಾಖಲೆ:",
+ "User Documentation" : "ಬಳಕೆದಾರ ದಾಖಲೆಗಳು",
+ "Admin Documentation" : "ನಿರ್ವಾಹಕರ ದಾಖಲೆಗಳು",
+ "Enable only for specific groups" : "ಕೇವಲ ನಿರ್ದಿಷ್ಟ ಗುಂಪುಗಳಿಗೆ ಸಕ್ರಿಯಗೊಳಿಸಿ",
+ "Uninstall App" : "ಅಳಿಸಿ",
+ "Cheers!" : "ಆನಂದಿಸಿ !",
+ "Administrator Documentation" : "ನಿರ್ವಾಹಕರ ದಾಖಲೆ",
+ "Online Documentation" : "ಅಂತರ್ಜಾಲದಲ್ಲಿರುವ ದಾಖಲೆ",
+ "Forum" : "ವೇದಿಕೆ",
+ "Bugtracker" : "ವಿವಾದಾ೦ಶ ಅನ್ವಷಕ ",
+ "Commercial Support" : "ವಾಣಿಜ್ಯ ಬೆಂಬಲ",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Your password was changed" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿತು",
+ "Unable to change your password" : "ನಿನ್ನ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Current password" : "ಪ್ರಸ್ತುತ ಗುಪ್ತಪದ",
+ "New password" : "ಹೊಸ ಗುಪ್ತಪದ",
+ "Change password" : "ಗುಪ್ತ ಪದವನ್ನು ಬದಲಾಯಿಸಿ",
+ "Full Name" : "ಪೂರ್ಣ ಹೆಸರು",
+ "Email" : "ಇ-ಅಂಚೆ",
+ "Your email address" : "ನಿಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸ",
+ "Cancel" : "ರದ್ದು",
+ "Language" : "ಭಾಷೆ",
+ "Help translate" : "ಭಾಷಾಂತರಿಸಲು ಸಹಾಯ ಮಾಡಿ",
+ "Decrypt all Files" : "ಎಲ್ಲಾ ಕಡತಗಳನ್ನು ಅಸಂಕೇತೀಕರಿಸು",
+ "Restore Encryption Keys" : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಿ",
+ "Delete Encryption Keys" : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಅಳಿಸಿ",
+ "Username" : "ಬಳಕೆಯ ಹೆಸರು",
+ "E-Mail" : "ಇ-ಅಂಚೆ ವಿಳಾಸ",
+ "Create" : "ಸೃಷ್ಟಿಸಿ",
+ "Add Group" : "ಗುಂಪುನ್ನು ಸೇರಿಸಿ",
+ "Group" : "ಗುಂಪು",
+ "Everyone" : "ಪ್ರತಿಯೊಬ್ಬರೂ",
+ "Admins" : "ನಿರ್ವಾಹಕರು",
+ "Other" : "ಇತರೆ",
+ "Quota" : "ಪಾಲು",
+ "Storage Location" : " ಸಂಗ್ರಹ ಸ್ಥಳ",
+ "Last Login" : "ಹಿಂದಿನ ಖಾತೆ ಪ್ರವೇಶ",
+ "change full name" : "ಪೂರ್ಣ ಹೆಸರು ಬದಲಾಯಿಸಬಹುದು",
+ "set new password" : "ಹೊಸ ಗುಪ್ತಪದವನ್ನು ಹೊಂದಿಸಿ",
+ "change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ",
+ "Default" : "ಆರಂಭದ ಪ್ರತಿ"
+},
+"nplurals=1; plural=0;");
diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json
new file mode 100644
index 00000000000..e3e8491ab5b
--- /dev/null
+++ b/settings/l10n/kn.json
@@ -0,0 +1,161 @@
+{ "translations": {
+ "Security & Setup Warnings" : "ಭದ್ರತಾ ಮತ್ತು ಸೆಟಪ್ ಎಚ್ಚರಿಕೆಗಳು",
+ "Sharing" : "ಹಂಚಿಕೆ",
+ "Security" : "ಭದ್ರತೆ",
+ "Email Server" : "ಇ-ಅಂಚೆಯ ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರ",
+ "Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
+ "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
+ "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.",
+ "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
+ "Files decrypted successfully" : "ಕಡತಗಳನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅಸಂಕೇತಿಕರಿಸಿದೆ",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "ನಿಮ್ಮ ಕಡತಗಳನ್ನು ಅಸಂಕೇತಿಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, owncloud.log ಪರಿಶೀಲಿಸಿ ಅಥವಾ ನಿಮ್ಮ ನಿರ್ವಾಹಕರ ಸಹಾಯ ಕೇಳಿ",
+ "Encryption keys deleted permanently" : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಖಯಃ ಅಳಿಸಿ",
+ "Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Backups restored successfully" : " ಹಿಂದೆ ಉಳಿಸಿದ ಅನುಕರಣಿತ ಪ್ರತಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "ನಿಮ್ಮ ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ, ನಿಮ್ಮ owncloud.log ಪರಿಶೀಲಿಸಿ ಅಥವಾ ನಿಮ್ಮ ನಿರ್ವಾಹಕರ ಸಹಾಯ ಕೇಳಿ",
+ "Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
+ "Invalid request" : "ಅಮಾನ್ಯ ಕೋರಿಕೆ",
+ "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." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
+ "Wrong password" : "ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "No user supplied" : "ಯಾವುದೇ ಬಳಕೆದಾರನ ಹೆಸರನ್ನು ನೀಡಿರುವುದಿಲ್ಲ",
+ "Unable to change password" : "ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ",
+ "Not enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿಲ್ಲ",
+ "Recommended" : "ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ",
+ "Group already exists." : "ಗುಂಪು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.",
+ "Unable to add group." : "ಗುಂಪುನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ.",
+ "Unable to delete group." : "ಗುಂಪುನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.",
+ "Saved" : "ಉಳಿಸಿದ",
+ "test email settings" : "ಪರೀರ್ಕ್ಷಾತ ಇ-ಅಂಚೆಯ ಆಯ್ಕೇ",
+ "If you received this email, the settings seem to be correct." : "ನೀವು ಈ ಇ-ಅಂಚೆಯನ್ನು ಪಡೆದ ಪಕ್ಷದಲ್ಲಿ, ಆಯ್ಕೇ ಸರಿಯಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ.",
+ "A problem occurred while sending the email. Please revise your settings." : "ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ದೋಷವೊಂದು ಸಂಭವಿಸಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಆಯ್ಕೆಗಳನ್ನು ಪರಿಷ್ಕರಿಸಿಕೊಳ್ಳಿ .",
+ "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ",
+ "You need to set your user email before being able to send test emails." : "ನೀವು ಪರೀಕ್ಷಾ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ಮುನ್ನ ನಿಮ್ಮ ಬಳಕೆದಾರ ಇ-ಅಂಚೆಯನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.",
+ "Invalid mail address" : "ಅಮಾನ್ಯ ಇ-ಅಂಚೆ ವಿಳಾಸ",
+ "Unable to create user." : "ಬಳಕೆದಾರನ ಖಾತೆ ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.",
+ "Your %s account was created" : "ನಿಮ್ಮ%s ಖಾತೆಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿದೆ",
+ "Unable to delete user." : "ಬಳಕೆದಾರನ ಹೆಸರುನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.",
+ "Forbidden" : "ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ",
+ "Invalid user" : "ಅಮಾನ್ಯ ಬಳಕೆದಾರ",
+ "Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
+ "Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
+ "All" : "ಎಲ್ಲಾ",
+ "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
+ "Error while disabling app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Disable" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ",
+ "Enable" : "ಸಕ್ರಿಯಗೊಳಿಸು",
+ "Error while enabling app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Updating...." : "ಆಧುನೀಕರಿಸುಲಾಗುತ್ತಿದೇ ....",
+ "Error while updating app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ನವೀಕರಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Updated" : "ಆಧುನೀಕರಿಸಲಾಗಿದೆ",
+ "Uninstalling ...." : "ಅಳಿಸಿಹಾಕುವುದು ...",
+ "Error while uninstalling app" : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
+ "Uninstall" : "ಅಳಿಸಿ",
+ "Select a profile picture" : "ಸಂಕ್ಷಿಪ್ತ ವ್ಯಕ್ತಿಚಿತ್ರ ಒಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಿ",
+ "Very weak password" : "ಅತೀ ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "Weak password" : "ದುರ್ಬಲ ಗುಪ್ತಪದ",
+ "So-so password" : "ಊಹಿಸಬಹುದಾದ ಗುಪ್ತಪದ",
+ "Good password" : "ಉತ್ತಮ ಗುಪ್ತಪದ",
+ "Strong password" : "ಪ್ರಬಲ ಗುಪ್ತಪದ",
+ "Valid until {date}" : "{date} ವರೆಗೆ ಚಾಲ್ತಿಯಲ್ಲಿರುತ್ತದೆ",
+ "Delete" : "ಅಳಿಸಿ",
+ "Decrypting files... Please wait, this can take some time." : "ನಿರೀಕ್ಷಿಸಿ, ಕಡತಗಳನ್ನು ಅಸಂಕೇತಿಕರಿಸಲಾಗುತ್ತಿದೆ ... ಇದು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು.",
+ "Delete encryption keys permanently." : "ಶಾಶ್ವತವಾಗಿ ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಅಳಿಸಿ.",
+ "Restore encryption keys." : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಿ.",
+ "Groups" : "ಗುಂಪುಗಳು",
+ "Unable to delete {objName}" : "{objName} ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ",
+ "Error creating group" : "ಗುಂಪುನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ",
+ "A valid group name must be provided" : "ಮಾನ್ಯ ಗುಂಪಿನ ಹೆಸರನ್ನು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "deleted {groupName}" : "ಅಳಿಸಲಾಗಿದೆ {groupName}",
+ "undo" : "ಹಿಂದಿರುಗಿಸು",
+ "no group" : "ಯಾವುದೇ ಗುಂಪಿನಲ್ಲಿಲ್ಲ",
+ "never" : "ಎಂದಿಗೂ",
+ "deleted {userName}" : "{userName} ಬಳಕೆಯ ಹೆಸರುನ್ನು ಅಳಿಸಲಾಗಿದೆ ",
+ "add group" : "ಗುಂಪುನ್ನು ಸೇರಿಸಿ",
+ "A valid username must be provided" : "ಮಾನ್ಯ ಬಳಕೆದಾರ ಹೆಸರು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "Error creating user" : "ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸುವಾಗ ಲೊಪವಾಗಿದೆ",
+ "A valid password must be provided" : "ಸರಿಯಾದ ಬಳಕೆದಾರ ಗುಪ್ತಪದ ಒದಗಿಸಬೇಕಾಗಿದೆ",
+ "A valid email must be provided" : "ಮಾನ್ಯ ಬಳಕೆದಾರ ಇ-ಅಂಚೆಯನ್ನು ಒದಗಿಸಬೇಕಾಗುತ್ತದೆ",
+ "__language_name__" : "ಕನ್ನಡ",
+ "Personal Info" : "ವೈಯಕ್ತಿಕ ಮಾಹಿತಿ",
+ "Encryption" : "ರಹಸ್ಯ ಸಂಕೇತೀಕರಿಸು",
+ "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" : "ಮಾರಕ ಸಮಸ್ಯೆಗಳು ಮಾತ್ರ",
+ "None" : "ಯಾವುದೂ ಇಲ್ಲ",
+ "Login" : "ಖಾತೆ ಪ್ರವೇಶಿಸು",
+ "Plain" : "ಸರಳ",
+ "Security Warning" : "ಭದ್ರತಾ ಎಚ್ಚರಿಕೆ",
+ "Read-Only config enabled" : "ಸಂರಚನೆಯಲ್ಲಿ ಓದವ ಹಕ್ಕುನ್ನು ಮಾತ್ರ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ",
+ "Setup Warning" : "ಸಿದ್ಧತೆಯ ಎಚ್ಚರಿಕೆ",
+ "Database Performance Info" : "ದತ್ತಸಂಚಯದ ಸಾಧನೆ ಮಾಹಿತಿ",
+ "Module 'fileinfo' missing" : "ಕಾರ್ಯಕ್ರಮದ 'fileinfo' ಭಾಗ ಕಾಣೆಯಾದಂತ್ತಿದೆ",
+ "Locale not working" : "ಲಿಪಿ ಸಂಯೋಜಕದಲಿ ವ್ಯತೆ",
+ "No problems found" : "ಯಾವ ವ್ಯಕ್ತಿಯೂ ಕಂಡುಬಂದಿಲ್ಲ",
+ "Expire after " : "ನಿಶ್ವಸಿಸುವ ಅವಧಿ",
+ "days" : "ದಿನಗಳು",
+ "Enforce expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಬಲವ೦ತವಾಗಿ ಜಾರಿಗೆ ಮಾಡಿ",
+ "Send mode" : "ಕಳುಹಿಸುವ ಕ್ರಮ",
+ "mail" : "ಅಂಚೆ",
+ "Authentication method" : "ದೃಢೀಕರಣ ವಿಧಾನ",
+ "Authentication required" : "ದೃಢೀಕರಣ ಅಗತ್ಯವಿದೆ",
+ "Server address" : "ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರದ ವಿಳಾಸ",
+ "Port" : "ರೇವು",
+ "Credentials" : "ರುಜುವಾತುಗಳು",
+ "SMTP Username" : "SMTP ಬಳಕೆದಾರ ಹೆಸರು",
+ "SMTP Password" : "SMTP ಗುಪ್ತ ಪದ",
+ "Test email settings" : "ಪರೀರ್ಕ್ಷಾತ ಇ-ಅಂಚೆಯ ಆಯ್ಕೇ",
+ "Send email" : "ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸಿ",
+ "Log level" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆಯ ಮಟ್ಟದ",
+ "More" : "ಇನ್ನಷ್ಟು",
+ "Less" : "ಕಡಿಮೆ",
+ "Version" : "ಆವೃತ್ತಿ",
+ "Documentation:" : "ದಾಖಲೆ:",
+ "User Documentation" : "ಬಳಕೆದಾರ ದಾಖಲೆಗಳು",
+ "Admin Documentation" : "ನಿರ್ವಾಹಕರ ದಾಖಲೆಗಳು",
+ "Enable only for specific groups" : "ಕೇವಲ ನಿರ್ದಿಷ್ಟ ಗುಂಪುಗಳಿಗೆ ಸಕ್ರಿಯಗೊಳಿಸಿ",
+ "Uninstall App" : "ಅಳಿಸಿ",
+ "Cheers!" : "ಆನಂದಿಸಿ !",
+ "Administrator Documentation" : "ನಿರ್ವಾಹಕರ ದಾಖಲೆ",
+ "Online Documentation" : "ಅಂತರ್ಜಾಲದಲ್ಲಿರುವ ದಾಖಲೆ",
+ "Forum" : "ವೇದಿಕೆ",
+ "Bugtracker" : "ವಿವಾದಾ೦ಶ ಅನ್ವಷಕ ",
+ "Commercial Support" : "ವಾಣಿಜ್ಯ ಬೆಂಬಲ",
+ "Password" : "ಗುಪ್ತ ಪದ",
+ "Your password was changed" : "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿತು",
+ "Unable to change your password" : "ನಿನ್ನ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Current password" : "ಪ್ರಸ್ತುತ ಗುಪ್ತಪದ",
+ "New password" : "ಹೊಸ ಗುಪ್ತಪದ",
+ "Change password" : "ಗುಪ್ತ ಪದವನ್ನು ಬದಲಾಯಿಸಿ",
+ "Full Name" : "ಪೂರ್ಣ ಹೆಸರು",
+ "Email" : "ಇ-ಅಂಚೆ",
+ "Your email address" : "ನಿಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸ",
+ "Cancel" : "ರದ್ದು",
+ "Language" : "ಭಾಷೆ",
+ "Help translate" : "ಭಾಷಾಂತರಿಸಲು ಸಹಾಯ ಮಾಡಿ",
+ "Decrypt all Files" : "ಎಲ್ಲಾ ಕಡತಗಳನ್ನು ಅಸಂಕೇತೀಕರಿಸು",
+ "Restore Encryption Keys" : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಿ",
+ "Delete Encryption Keys" : "ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಗಳನ್ನು ಅಳಿಸಿ",
+ "Username" : "ಬಳಕೆಯ ಹೆಸರು",
+ "E-Mail" : "ಇ-ಅಂಚೆ ವಿಳಾಸ",
+ "Create" : "ಸೃಷ್ಟಿಸಿ",
+ "Add Group" : "ಗುಂಪುನ್ನು ಸೇರಿಸಿ",
+ "Group" : "ಗುಂಪು",
+ "Everyone" : "ಪ್ರತಿಯೊಬ್ಬರೂ",
+ "Admins" : "ನಿರ್ವಾಹಕರು",
+ "Other" : "ಇತರೆ",
+ "Quota" : "ಪಾಲು",
+ "Storage Location" : " ಸಂಗ್ರಹ ಸ್ಥಳ",
+ "Last Login" : "ಹಿಂದಿನ ಖಾತೆ ಪ್ರವೇಶ",
+ "change full name" : "ಪೂರ್ಣ ಹೆಸರು ಬದಲಾಯಿಸಬಹುದು",
+ "set new password" : "ಹೊಸ ಗುಪ್ತಪದವನ್ನು ಹೊಂದಿಸಿ",
+ "change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ",
+ "Default" : "ಆರಂಭದ ಪ್ರತಿ"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index 4d8ccf751e2..f7bb827c36b 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -9,13 +9,7 @@ OC.L10N.register(
"Authentication error" : "인증 오류",
"Your full name has been changed." : "전체 이름이 변경되었습니다.",
"Unable to change full name" : "전체 이름을 변경할 수 없음",
- "Group already exists" : "그룹이 이미 존재함",
- "Unable to add group" : "그룹을 추가할 수 없음",
"Couldn't remove app." : "앱을 제거할수 없습니다.",
- "Email saved" : "이메일 저장됨",
- "Invalid email" : "잘못된 이메일 주소",
- "Unable to delete group" : "그룹을 삭제할 수 없음",
- "Unable to delete user" : "사용자를 삭제할 수 없음.",
"Backups restored successfully" : "성공적으로 백업을 복원했습니다",
"Language changed" : "언어가 변경됨",
"Invalid request" : "잘못된 요청",
@@ -32,6 +26,7 @@ OC.L10N.register(
"Enabled" : "활성화",
"Saved" : "저장됨",
"Email sent" : "이메일 발송됨",
+ "Email saved" : "이메일 저장됨",
"Sending..." : "보내는 중...",
"All" : "모두",
"Please wait...." : "기다려 주십시오....",
@@ -63,7 +58,6 @@ OC.L10N.register(
"A valid username must be provided" : "올바른 사용자 이름을 입력해야 함",
"Error creating user" : "사용자 생성 오류",
"A valid password must be provided" : "올바른 암호를 입력해야 함",
- "Warning: Home directory for user \"{user}\" already exists" : "경고: 사용자 \"{user}\"의 홈 디렉터리가 이미 존재합니다",
"__language_name__" : "한국어",
"SSL root certificates" : "SSL 루트 인증서",
"Encryption" : "암호화",
@@ -79,17 +73,13 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "보안 경고",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s에 HTTP로 접근하고 있습니다. 서버에서 HTTPS를 사용하도록 설정하는 것을 추천합니다.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "데이터 디렉터리와 파일을 인터넷에서 접근할 수도 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 접근할 수 없도록 하거나, 웹 서버 문서 경로 외부로 데이터 디렉터리를 옮기십시오.",
"Setup Warning" : "설정 경고",
"Database Performance Info" : "데이터베이스 성능 정보",
"Module 'fileinfo' missing" : "모듈 'fileinfo'가 없음",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.",
- "Your PHP version is outdated" : "PHP 버전이 오래됨",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP 버전이 오래되었습니다. 오래된 버전은 작동하지 않을 수도 있기 때문에 PHP 5.3.8 이상을 사용하는 것을 추천합니다.",
"Locale not working" : "로캘이 작동하지 않음",
"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 to install the required packages on your system to support one of the following locales: %s." : "다음 로캘을 지원하도록 시스템 설정을 변경하는 것을 추천합니다: %s",
"Please double check the <a href='%s'>installation guides</a>." : "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오.",
"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에 접근합니다.",
@@ -120,6 +110,7 @@ OC.L10N.register(
"Admin Documentation" : "운영자 문서",
"Enable only for specific groups" : "특정 그룹에만 허용",
"Uninstall App" : "앱 제거",
+ "Cheers!" : "감사합니다!",
"Administrator Documentation" : "관리자 문서",
"Online Documentation" : "온라인 문서",
"Forum" : "포럼",
@@ -153,11 +144,10 @@ OC.L10N.register(
"Decrypt all Files" : "모든 파일 복호화",
"Restore Encryption Keys" : "암호화 키 복원",
"Delete Encryption Keys" : "암호화 키 삭제",
- "Login Name" : "로그인 이름",
+ "Username" : "사용자 이름",
"Create" : "만들기",
"Admin Recovery Password" : "관리자 복구 암호",
"Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오",
- "Search Users and Groups" : "사용자와 그룹 검색",
"Add Group" : "그룹 추가",
"Group" : "그룹",
"Admins" : "관리자",
@@ -165,7 +155,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "저장소 할당량을 입력하십시오 (예: \"512 MB\", \"12 GB\")",
"Unlimited" : "무제한",
"Other" : "기타",
- "Username" : "사용자 이름",
"Quota" : "할당량",
"Last Login" : "마지막 로그인",
"change full name" : "전체 이름 변경",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index 882b9ef8c83..611ff44dfba 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -7,13 +7,7 @@
"Authentication error" : "인증 오류",
"Your full name has been changed." : "전체 이름이 변경되었습니다.",
"Unable to change full name" : "전체 이름을 변경할 수 없음",
- "Group already exists" : "그룹이 이미 존재함",
- "Unable to add group" : "그룹을 추가할 수 없음",
"Couldn't remove app." : "앱을 제거할수 없습니다.",
- "Email saved" : "이메일 저장됨",
- "Invalid email" : "잘못된 이메일 주소",
- "Unable to delete group" : "그룹을 삭제할 수 없음",
- "Unable to delete user" : "사용자를 삭제할 수 없음.",
"Backups restored successfully" : "성공적으로 백업을 복원했습니다",
"Language changed" : "언어가 변경됨",
"Invalid request" : "잘못된 요청",
@@ -30,6 +24,7 @@
"Enabled" : "활성화",
"Saved" : "저장됨",
"Email sent" : "이메일 발송됨",
+ "Email saved" : "이메일 저장됨",
"Sending..." : "보내는 중...",
"All" : "모두",
"Please wait...." : "기다려 주십시오....",
@@ -61,7 +56,6 @@
"A valid username must be provided" : "올바른 사용자 이름을 입력해야 함",
"Error creating user" : "사용자 생성 오류",
"A valid password must be provided" : "올바른 암호를 입력해야 함",
- "Warning: Home directory for user \"{user}\" already exists" : "경고: 사용자 \"{user}\"의 홈 디렉터리가 이미 존재합니다",
"__language_name__" : "한국어",
"SSL root certificates" : "SSL 루트 인증서",
"Encryption" : "암호화",
@@ -77,17 +71,13 @@
"TLS" : "TLS",
"Security Warning" : "보안 경고",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s에 HTTP로 접근하고 있습니다. 서버에서 HTTPS를 사용하도록 설정하는 것을 추천합니다.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "데이터 디렉터리와 파일을 인터넷에서 접근할 수도 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 접근할 수 없도록 하거나, 웹 서버 문서 경로 외부로 데이터 디렉터리를 옮기십시오.",
"Setup Warning" : "설정 경고",
"Database Performance Info" : "데이터베이스 성능 정보",
"Module 'fileinfo' missing" : "모듈 'fileinfo'가 없음",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.",
- "Your PHP version is outdated" : "PHP 버전이 오래됨",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP 버전이 오래되었습니다. 오래된 버전은 작동하지 않을 수도 있기 때문에 PHP 5.3.8 이상을 사용하는 것을 추천합니다.",
"Locale not working" : "로캘이 작동하지 않음",
"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 to install the required packages on your system to support one of the following locales: %s." : "다음 로캘을 지원하도록 시스템 설정을 변경하는 것을 추천합니다: %s",
"Please double check the <a href='%s'>installation guides</a>." : "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오.",
"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에 접근합니다.",
@@ -118,6 +108,7 @@
"Admin Documentation" : "운영자 문서",
"Enable only for specific groups" : "특정 그룹에만 허용",
"Uninstall App" : "앱 제거",
+ "Cheers!" : "감사합니다!",
"Administrator Documentation" : "관리자 문서",
"Online Documentation" : "온라인 문서",
"Forum" : "포럼",
@@ -151,11 +142,10 @@
"Decrypt all Files" : "모든 파일 복호화",
"Restore Encryption Keys" : "암호화 키 복원",
"Delete Encryption Keys" : "암호화 키 삭제",
- "Login Name" : "로그인 이름",
+ "Username" : "사용자 이름",
"Create" : "만들기",
"Admin Recovery Password" : "관리자 복구 암호",
"Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오",
- "Search Users and Groups" : "사용자와 그룹 검색",
"Add Group" : "그룹 추가",
"Group" : "그룹",
"Admins" : "관리자",
@@ -163,7 +153,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "저장소 할당량을 입력하십시오 (예: \"512 MB\", \"12 GB\")",
"Unlimited" : "무제한",
"Other" : "기타",
- "Username" : "사용자 이름",
"Quota" : "할당량",
"Last Login" : "마지막 로그인",
"change full name" : "전체 이름 변경",
diff --git a/settings/l10n/ku_IQ.js b/settings/l10n/ku_IQ.js
index 15cd8c68225..e78805c8cae 100644
--- a/settings/l10n/ku_IQ.js
+++ b/settings/l10n/ku_IQ.js
@@ -12,7 +12,6 @@ OC.L10N.register(
"New password" : "وشەی نهێنی نوێ",
"Email" : "ئیمه‌یل",
"Cancel" : "لابردن",
- "Login Name" : "چوونەژوورەوە",
"Username" : "ناوی به‌کارهێنه‌ر"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ku_IQ.json b/settings/l10n/ku_IQ.json
index 1e6fe7a51e9..c3bcd408956 100644
--- a/settings/l10n/ku_IQ.json
+++ b/settings/l10n/ku_IQ.json
@@ -10,7 +10,6 @@
"New password" : "وشەی نهێنی نوێ",
"Email" : "ئیمه‌یل",
"Cancel" : "لابردن",
- "Login Name" : "چوونەژوورەوە",
"Username" : "ناوی به‌کارهێنه‌ر"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js
index 2a49739460f..7f4fdc7a7a7 100644
--- a/settings/l10n/lb.js
+++ b/settings/l10n/lb.js
@@ -4,17 +4,12 @@ OC.L10N.register(
"Cron" : "Cron",
"Log" : "Log",
"Authentication error" : "Authentifikatioun's Fehler",
- "Group already exists" : "Group existeiert schon.",
- "Unable to add group" : "Onmeiglech Grupp beizefügen.",
- "Email saved" : "E-mail gespäichert",
- "Invalid email" : "Ongülteg e-mail",
- "Unable to delete group" : "Onmeiglech d'Grup ze läschen.",
- "Unable to delete user" : "Onmeiglech User zu läschen.",
"Language changed" : "Sprooch huet geännert",
"Invalid request" : "Ongülteg Requête",
"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",
"Email sent" : "Email geschéckt",
+ "Email saved" : "E-mail gespäichert",
"All" : "All",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
@@ -31,6 +26,7 @@ OC.L10N.register(
"More" : "Méi",
"Less" : "Manner",
"by" : "vun",
+ "Cheers!" : "Prost!",
"Password" : "Passwuert",
"Unable to change your password" : "Konnt däin Passwuert net änneren",
"Current password" : "Momentan 't Passwuert",
@@ -41,12 +37,11 @@ OC.L10N.register(
"Cancel" : "Ofbriechen",
"Language" : "Sprooch",
"Help translate" : "Hëllef iwwersetzen",
- "Login Name" : "Login",
+ "Username" : "Benotzernumm",
"Create" : "Erstellen",
"Group" : "Grupp",
"Default Quota" : "Standard Quota",
"Other" : "Aner",
- "Username" : "Benotzernumm",
"Quota" : "Quota"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json
index 6f18a4362e1..a54465c1671 100644
--- a/settings/l10n/lb.json
+++ b/settings/l10n/lb.json
@@ -2,17 +2,12 @@
"Cron" : "Cron",
"Log" : "Log",
"Authentication error" : "Authentifikatioun's Fehler",
- "Group already exists" : "Group existeiert schon.",
- "Unable to add group" : "Onmeiglech Grupp beizefügen.",
- "Email saved" : "E-mail gespäichert",
- "Invalid email" : "Ongülteg e-mail",
- "Unable to delete group" : "Onmeiglech d'Grup ze läschen.",
- "Unable to delete user" : "Onmeiglech User zu läschen.",
"Language changed" : "Sprooch huet geännert",
"Invalid request" : "Ongülteg Requête",
"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",
"Email sent" : "Email geschéckt",
+ "Email saved" : "E-mail gespäichert",
"All" : "All",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
@@ -29,6 +24,7 @@
"More" : "Méi",
"Less" : "Manner",
"by" : "vun",
+ "Cheers!" : "Prost!",
"Password" : "Passwuert",
"Unable to change your password" : "Konnt däin Passwuert net änneren",
"Current password" : "Momentan 't Passwuert",
@@ -39,12 +35,11 @@
"Cancel" : "Ofbriechen",
"Language" : "Sprooch",
"Help translate" : "Hëllef iwwersetzen",
- "Login Name" : "Login",
+ "Username" : "Benotzernumm",
"Create" : "Erstellen",
"Group" : "Grupp",
"Default Quota" : "Standard Quota",
"Other" : "Aner",
- "Username" : "Benotzernumm",
"Quota" : "Quota"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index da3c2eb229e..c707eb1bac2 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -6,12 +6,6 @@ OC.L10N.register(
"Security" : "Saugumas",
"Log" : "Žurnalas",
"Authentication error" : "Autentikacijos klaida",
- "Group already exists" : "Grupė jau egzistuoja",
- "Unable to add group" : "Nepavyko pridėti grupės",
- "Email saved" : "El. paštas išsaugotas",
- "Invalid email" : "Netinkamas el. paštas",
- "Unable to delete group" : "Nepavyko ištrinti grupės",
- "Unable to delete user" : "Nepavyko ištrinti vartotojo",
"Language changed" : "Kalba pakeista",
"Invalid request" : "Klaidinga užklausa",
"Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
@@ -26,6 +20,7 @@ OC.L10N.register(
"Unable to change password" : "Nepavyksta pakeisti slaptažodžio",
"Enabled" : "Įjungta",
"Email sent" : "Laiškas išsiųstas",
+ "Email saved" : "El. paštas išsaugotas",
"All" : "Viskas",
"Please wait...." : "Prašome palaukti...",
"Error while disabling app" : "Klaida išjungiant programą",
@@ -45,7 +40,6 @@ OC.L10N.register(
"A valid username must be provided" : "Vartotojo vardas turi būti tinkamas",
"Error creating user" : "Klaida kuriant vartotoją",
"A valid password must be provided" : "Slaptažodis turi būti tinkamas",
- "Warning: Home directory for user \"{user}\" already exists" : "Įspėjimas: Vartotojo \"{user}\" namų aplankas jau egzistuoja",
"__language_name__" : "Lietuvių",
"SSL root certificates" : "SSL sertifikatas",
"Encryption" : "Šifravimas",
@@ -53,7 +47,6 @@ OC.L10N.register(
"None" : "Nieko",
"Login" : "Prisijungti",
"Security Warning" : "Saugumo pranešimas",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsų duomenų katalogas ir Jūsų failai turbūt yra pasiekiami per internetą. Failas .htaccess neveikia. Mes labai rekomenduojame sukonfigūruoti serverį taip, kad katalogas nebūtų daugiau pasiekiamas, arba iškelkite duomenis kitur iš webserverio šakninio aplanko.",
"Setup Warning" : "Nustatyti perspėjimą",
"Module 'fileinfo' missing" : "Trūksta 'fileinfo' modulio",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
@@ -77,12 +70,16 @@ OC.L10N.register(
"More apps" : "Daugiau programų",
"by" : " ",
"User Documentation" : "Naudotojo dokumentacija",
+ "Cheers!" : "Sveikinimai!",
"Administrator Documentation" : "Administratoriaus dokumentacija",
"Online Documentation" : "Dokumentacija tinkle",
"Forum" : "Forumas",
"Bugtracker" : "Klaidų sekimas",
"Commercial Support" : "Komercinis palaikymas",
"Get the apps to sync your files" : "Atsisiųskite programėlių, kad sinchronizuotumėte savo failus",
+ "Desktop client" : "Darbastalio klientas",
+ "Android app" : "Android programa",
+ "iOS app" : "iOS programa",
"Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš galimų <strong>%s</strong>",
"Password" : "Slaptažodis",
@@ -106,7 +103,7 @@ OC.L10N.register(
"Import Root Certificate" : "Įkelti pagrindinį sertifikatą",
"Log-in password" : "Prisijungimo slaptažodis",
"Decrypt all Files" : "Iššifruoti visus failus",
- "Login Name" : "Vartotojo vardas",
+ "Username" : "Prisijungimo vardas",
"Create" : "Sukurti",
"Admin Recovery Password" : "Administracinis atkūrimo slaptažodis",
"Enter the recovery password in order to recover the users files during password change" : "Įveskite atkūrimo slaptažodį, kad atkurti naudotojo failus keičiant slaptažodį",
@@ -114,7 +111,6 @@ OC.L10N.register(
"Default Quota" : "Numatytoji kvota",
"Unlimited" : "Neribota",
"Other" : "Kita",
- "Username" : "Prisijungimo vardas",
"Quota" : "Limitas",
"change full name" : "keisti pilną vardą",
"set new password" : "nustatyti naują slaptažodį",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index 0118eede4a5..f561cdb1a24 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -4,12 +4,6 @@
"Security" : "Saugumas",
"Log" : "Žurnalas",
"Authentication error" : "Autentikacijos klaida",
- "Group already exists" : "Grupė jau egzistuoja",
- "Unable to add group" : "Nepavyko pridėti grupės",
- "Email saved" : "El. paštas išsaugotas",
- "Invalid email" : "Netinkamas el. paštas",
- "Unable to delete group" : "Nepavyko ištrinti grupės",
- "Unable to delete user" : "Nepavyko ištrinti vartotojo",
"Language changed" : "Kalba pakeista",
"Invalid request" : "Klaidinga užklausa",
"Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
@@ -24,6 +18,7 @@
"Unable to change password" : "Nepavyksta pakeisti slaptažodžio",
"Enabled" : "Įjungta",
"Email sent" : "Laiškas išsiųstas",
+ "Email saved" : "El. paštas išsaugotas",
"All" : "Viskas",
"Please wait...." : "Prašome palaukti...",
"Error while disabling app" : "Klaida išjungiant programą",
@@ -43,7 +38,6 @@
"A valid username must be provided" : "Vartotojo vardas turi būti tinkamas",
"Error creating user" : "Klaida kuriant vartotoją",
"A valid password must be provided" : "Slaptažodis turi būti tinkamas",
- "Warning: Home directory for user \"{user}\" already exists" : "Įspėjimas: Vartotojo \"{user}\" namų aplankas jau egzistuoja",
"__language_name__" : "Lietuvių",
"SSL root certificates" : "SSL sertifikatas",
"Encryption" : "Šifravimas",
@@ -51,7 +45,6 @@
"None" : "Nieko",
"Login" : "Prisijungti",
"Security Warning" : "Saugumo pranešimas",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsų duomenų katalogas ir Jūsų failai turbūt yra pasiekiami per internetą. Failas .htaccess neveikia. Mes labai rekomenduojame sukonfigūruoti serverį taip, kad katalogas nebūtų daugiau pasiekiamas, arba iškelkite duomenis kitur iš webserverio šakninio aplanko.",
"Setup Warning" : "Nustatyti perspėjimą",
"Module 'fileinfo' missing" : "Trūksta 'fileinfo' modulio",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
@@ -75,12 +68,16 @@
"More apps" : "Daugiau programų",
"by" : " ",
"User Documentation" : "Naudotojo dokumentacija",
+ "Cheers!" : "Sveikinimai!",
"Administrator Documentation" : "Administratoriaus dokumentacija",
"Online Documentation" : "Dokumentacija tinkle",
"Forum" : "Forumas",
"Bugtracker" : "Klaidų sekimas",
"Commercial Support" : "Komercinis palaikymas",
"Get the apps to sync your files" : "Atsisiųskite programėlių, kad sinchronizuotumėte savo failus",
+ "Desktop client" : "Darbastalio klientas",
+ "Android app" : "Android programa",
+ "iOS app" : "iOS programa",
"Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš galimų <strong>%s</strong>",
"Password" : "Slaptažodis",
@@ -104,7 +101,7 @@
"Import Root Certificate" : "Įkelti pagrindinį sertifikatą",
"Log-in password" : "Prisijungimo slaptažodis",
"Decrypt all Files" : "Iššifruoti visus failus",
- "Login Name" : "Vartotojo vardas",
+ "Username" : "Prisijungimo vardas",
"Create" : "Sukurti",
"Admin Recovery Password" : "Administracinis atkūrimo slaptažodis",
"Enter the recovery password in order to recover the users files during password change" : "Įveskite atkūrimo slaptažodį, kad atkurti naudotojo failus keičiant slaptažodį",
@@ -112,7 +109,6 @@
"Default Quota" : "Numatytoji kvota",
"Unlimited" : "Neribota",
"Other" : "Kita",
- "Username" : "Prisijungimo vardas",
"Quota" : "Limitas",
"change full name" : "keisti pilną vardą",
"set new password" : "nustatyti naują slaptažodį",
diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js
index 899d29a32c9..9d07761e32e 100644
--- a/settings/l10n/lv.js
+++ b/settings/l10n/lv.js
@@ -1,55 +1,124 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Drošības & iestatījumu brīdinājumi",
"Cron" : "Cron",
"Sharing" : "Dalīšanās",
"Security" : "Drošība",
+ "Email Server" : "E-pasta serveris",
"Log" : "Žurnāls",
"Authentication error" : "Autentifikācijas kļūda",
- "Group already exists" : "Grupa jau eksistē",
- "Unable to add group" : "Nevar pievienot grupu",
- "Email saved" : "E-pasts tika saglabāts",
- "Invalid email" : "Nederīgs epasts",
- "Unable to delete group" : "Nevar izdzēst grupu",
- "Unable to delete user" : "Nevar izdzēst lietotāju",
+ "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
+ "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
+ "Files decrypted successfully" : "Fails veiksmīgi atšifrēts",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebija iespējams atšifrēt jūsu failus. Lūdzu pārbaudiet owncloud.log failu vai palūdziet to jūsu administratoram",
+ "Couldn't decrypt your files, check your password and try again" : "Nebija iespējams atšifrētu jūsu failus, pārbaudiet jūsu paroli un mēģiniet vēlreiz",
+ "Encryption keys deleted permanently" : "Šifrēšanas atslēgas pilnībā izdzēstas",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebija iespējams pilnībā dzēst jūsu šifrēšanas atslēgas. Lūdzu pārbaudiet owncloud.log failu vai palūdziet to jūsu administratoram",
+ "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
+ "Backups restored successfully" : "Rezerves kopijas veiksmīgi atjaunotas",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebija iespējams atjaunot jūsu šifrēšanas atslēgas. Lūdzu pārbaudiet owncloud.log failu vai palūdziet to jūsu administratoram",
"Language changed" : "Valoda tika nomainīta",
"Invalid request" : "Nederīgs vaicājums",
"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.",
+ "Wrong password" : "Nepareiza parole",
+ "No user supplied" : "Nav norādīts lietotājs",
+ "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.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Aizmugursistēma neatbalsta paroles maiņu, bet lietotāja šifrēšanas atslēga tika veiksmīgi atjaunota.",
+ "Unable to change password" : "Nav iespējams nomainīt paroli",
+ "Enabled" : "Pievienots",
+ "Not enabled" : "Nav pievienots",
+ "Recommended" : "Rekomendēts",
+ "Group already exists." : "Grupa jau eksistē.",
+ "Unable to add group." : "Nevar pievienot grupu.",
+ "Unable to delete group." : "Nevar izdzēst grupu.",
+ "Saved" : "Saglabāts",
+ "test email settings" : "testēt e-pasta iestatījumus",
+ "If you received this email, the settings seem to be correct." : "Ja jūs saņēmāt šo e-pastu, tad izskatās, ka iestatījum ir pareizi.",
+ "A problem occurred while sending the email. Please revise your settings." : "Neizdevās nosūtīt e-pastu. Lūdzu pārskatiet savus iestatījumus.",
"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 mail address" : "Nepareiza e-pasta adrese",
+ "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.",
+ "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",
+ "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?",
+ "Add trusted domain" : "Pievienot uzticamu domēnu",
+ "Sending..." : "Sūta...",
"All" : "Visi",
"Please wait...." : "Lūdzu, uzgaidiet....",
+ "Error while disabling app" : "Kļūda, atvienojot lietotni",
"Disable" : "Deaktivēt",
"Enable" : "Aktivēt",
+ "Error while enabling app" : "Kļūda, pievienojot lietotni",
"Updating...." : "Atjaunina....",
"Error while updating app" : "Kļūda, atjauninot lietotni",
"Updated" : "Atjaunināta",
+ "Uninstalling ...." : "Atinstalē ....",
+ "Error while uninstalling app" : "Kļūda, atinstalējot lietotni",
+ "Uninstall" : "Atinstalēt",
+ "Select a profile picture" : "Izvēlieties profila attēlu",
+ "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",
+ "Valid until {date}" : "Valīds līdz {date}",
"Delete" : "Dzēst",
"Decrypting files... Please wait, this can take some time." : "Atšifrēju failus... Uzgaidiet tas var ilgt kādu laiku.",
+ "Delete encryption keys permanently." : "Dzēst šifrēšanas atslēgas pilnībā",
+ "Restore encryption keys." : "Atjaunot šifrēšanas atslēgas.",
"Groups" : "Grupas",
+ "Unable to delete {objName}" : "Nevar izdzēst {objName}",
+ "Error creating group" : "Kļūda, veidojot grupu",
+ "A valid group name must be provided" : "Jānorāda derīgs grupas nosaukums",
+ "deleted {groupName}" : "grupa {groupName} dzēsta",
"undo" : "atsaukt",
+ "no group" : "neviena grupa",
"never" : "nekad",
+ "deleted {userName}" : "lietotājs {userName} dzēsts",
"add group" : "pievienot grupu",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
"Error creating user" : "Kļūda, veidojot lietotāju",
"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__" : "__valodas_nosaukums__",
+ "Personal Info" : "Personīgā informācija",
"SSL root certificates" : "SSL saknes sertifikāti",
"Encryption" : "Šifrēšana",
+ "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",
"None" : "Nav",
"Login" : "Ierakstīties",
+ "Plain" : "vienkāršs teksts",
+ "NT LAN Manager" : "NT LAN Pārvaldnieks",
+ "SSL" : "SSL",
+ "TLS" : "TLS",
"Security Warning" : "Brīdinājums par drošību",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsu datu direktorija un faili visticamāk ir pieejami no interneta. .htaccess fails nedarbojas. Ir rekomendēts konfigurēt serveri tā lai jūsu datu direktorija nav lasāma vai pārvietot to ārpus tīmekļa servera dokumentu mapes.",
"Setup Warning" : "Iestatīšanas brīdinājums",
"Module 'fileinfo' missing" : "Trūkst modulis “fileinfo”",
"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.",
"Locale not working" : "Lokāle nestrādā",
"Please double check the <a href='%s'>installation guides</a>." : "Lūdzu, vēlreiz pārbaudiet <a href='%s'>instalēšanas palīdzību</a>.",
+ "Last cron was executed at %s." : "Pēdējo reizi Cron tika izpildīts %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Pēdējo reizi Cron tika izpildīts %s. Tas ir vairāk kā pirms stundas, kaut kas nav kārtībā.",
"Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu",
"Allow apps to use the Share API" : "Ļauj lietotnēm izmantot koplietošanas API",
+ "Allow users to share via link" : "Ļaut lietotājiem dalīties caur saitēm",
"Allow public uploads" : "Atļaut publisko augšupielādi",
+ "Expire after " : "Nederīga pēc",
+ "days" : "dienas",
"Allow resharing" : "Atļaut atkārtotu koplietošanu",
"Enforce HTTPS" : "Uzspiest HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Uzspiest klientiem pieslēgties pie %s caur šifrētu savienojumu.",
@@ -71,6 +140,9 @@ OC.L10N.register(
"Bugtracker" : "Kļūdu sekotājs",
"Commercial Support" : "Komerciālais atbalsts",
"Get the apps to sync your files" : "Saņem lietotnes, lai sinhronizētu savas datnes",
+ "Desktop client" : "Darbvirsmas klients",
+ "Android app" : "Android lietotne",
+ "iOS app" : "iOS lietotne",
"Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs lietojat <strong>%s</strong> no pieejamajiem <strong>%s</strong>",
"Password" : "Parole",
@@ -79,15 +151,20 @@ OC.L10N.register(
"Current password" : "Pašreizējā parole",
"New password" : "Jauna parole",
"Change password" : "Mainīt paroli",
+ "Full Name" : "Pilns vārds",
"Email" : "E-pasts",
"Your email address" : "Jūsu e-pasta adrese",
+ "Profile picture" : "Profila attēls",
+ "Upload new" : "Ielādēt jaunu",
+ "Select new from Files" : "Izvēlēties jaunu no Failiem",
+ "Remove image" : "Novākt attēlu",
"Cancel" : "Atcelt",
"Language" : "Valoda",
"Help translate" : "Palīdzi tulkot",
"Import Root Certificate" : "Importēt saknes sertifikātus",
"Log-in password" : "Pieslēgšanās parole",
"Decrypt all Files" : "Atšifrēt visus failus",
- "Login Name" : "Ierakstīšanās vārds",
+ "Username" : "Lietotājvārds",
"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ā.",
@@ -95,7 +172,6 @@ OC.L10N.register(
"Default Quota" : "Apjoms pēc noklusējuma",
"Unlimited" : "Neierobežota",
"Other" : "Cits",
- "Username" : "Lietotājvārds",
"Quota" : "Apjoms",
"set new password" : "iestatīt jaunu paroli",
"Default" : "Noklusējuma"
diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json
index 2cc167d78ae..813f0d667f4 100644
--- a/settings/l10n/lv.json
+++ b/settings/l10n/lv.json
@@ -1,53 +1,122 @@
{ "translations": {
+ "Security & Setup Warnings" : "Drošības & iestatījumu brīdinājumi",
"Cron" : "Cron",
"Sharing" : "Dalīšanās",
"Security" : "Drošība",
+ "Email Server" : "E-pasta serveris",
"Log" : "Žurnāls",
"Authentication error" : "Autentifikācijas kļūda",
- "Group already exists" : "Grupa jau eksistē",
- "Unable to add group" : "Nevar pievienot grupu",
- "Email saved" : "E-pasts tika saglabāts",
- "Invalid email" : "Nederīgs epasts",
- "Unable to delete group" : "Nevar izdzēst grupu",
- "Unable to delete user" : "Nevar izdzēst lietotāju",
+ "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
+ "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
+ "Files decrypted successfully" : "Fails veiksmīgi atšifrēts",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebija iespējams atšifrēt jūsu failus. Lūdzu pārbaudiet owncloud.log failu vai palūdziet to jūsu administratoram",
+ "Couldn't decrypt your files, check your password and try again" : "Nebija iespējams atšifrētu jūsu failus, pārbaudiet jūsu paroli un mēģiniet vēlreiz",
+ "Encryption keys deleted permanently" : "Šifrēšanas atslēgas pilnībā izdzēstas",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebija iespējams pilnībā dzēst jūsu šifrēšanas atslēgas. Lūdzu pārbaudiet owncloud.log failu vai palūdziet to jūsu administratoram",
+ "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
+ "Backups restored successfully" : "Rezerves kopijas veiksmīgi atjaunotas",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebija iespējams atjaunot jūsu šifrēšanas atslēgas. Lūdzu pārbaudiet owncloud.log failu vai palūdziet to jūsu administratoram",
"Language changed" : "Valoda tika nomainīta",
"Invalid request" : "Nederīgs vaicājums",
"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.",
+ "Wrong password" : "Nepareiza parole",
+ "No user supplied" : "Nav norādīts lietotājs",
+ "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.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Aizmugursistēma neatbalsta paroles maiņu, bet lietotāja šifrēšanas atslēga tika veiksmīgi atjaunota.",
+ "Unable to change password" : "Nav iespējams nomainīt paroli",
+ "Enabled" : "Pievienots",
+ "Not enabled" : "Nav pievienots",
+ "Recommended" : "Rekomendēts",
+ "Group already exists." : "Grupa jau eksistē.",
+ "Unable to add group." : "Nevar pievienot grupu.",
+ "Unable to delete group." : "Nevar izdzēst grupu.",
+ "Saved" : "Saglabāts",
+ "test email settings" : "testēt e-pasta iestatījumus",
+ "If you received this email, the settings seem to be correct." : "Ja jūs saņēmāt šo e-pastu, tad izskatās, ka iestatījum ir pareizi.",
+ "A problem occurred while sending the email. Please revise your settings." : "Neizdevās nosūtīt e-pastu. Lūdzu pārskatiet savus iestatījumus.",
"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 mail address" : "Nepareiza e-pasta adrese",
+ "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.",
+ "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",
+ "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?",
+ "Add trusted domain" : "Pievienot uzticamu domēnu",
+ "Sending..." : "Sūta...",
"All" : "Visi",
"Please wait...." : "Lūdzu, uzgaidiet....",
+ "Error while disabling app" : "Kļūda, atvienojot lietotni",
"Disable" : "Deaktivēt",
"Enable" : "Aktivēt",
+ "Error while enabling app" : "Kļūda, pievienojot lietotni",
"Updating...." : "Atjaunina....",
"Error while updating app" : "Kļūda, atjauninot lietotni",
"Updated" : "Atjaunināta",
+ "Uninstalling ...." : "Atinstalē ....",
+ "Error while uninstalling app" : "Kļūda, atinstalējot lietotni",
+ "Uninstall" : "Atinstalēt",
+ "Select a profile picture" : "Izvēlieties profila attēlu",
+ "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",
+ "Valid until {date}" : "Valīds līdz {date}",
"Delete" : "Dzēst",
"Decrypting files... Please wait, this can take some time." : "Atšifrēju failus... Uzgaidiet tas var ilgt kādu laiku.",
+ "Delete encryption keys permanently." : "Dzēst šifrēšanas atslēgas pilnībā",
+ "Restore encryption keys." : "Atjaunot šifrēšanas atslēgas.",
"Groups" : "Grupas",
+ "Unable to delete {objName}" : "Nevar izdzēst {objName}",
+ "Error creating group" : "Kļūda, veidojot grupu",
+ "A valid group name must be provided" : "Jānorāda derīgs grupas nosaukums",
+ "deleted {groupName}" : "grupa {groupName} dzēsta",
"undo" : "atsaukt",
+ "no group" : "neviena grupa",
"never" : "nekad",
+ "deleted {userName}" : "lietotājs {userName} dzēsts",
"add group" : "pievienot grupu",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
"Error creating user" : "Kļūda, veidojot lietotāju",
"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__" : "__valodas_nosaukums__",
+ "Personal Info" : "Personīgā informācija",
"SSL root certificates" : "SSL saknes sertifikāti",
"Encryption" : "Šifrēšana",
+ "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",
"None" : "Nav",
"Login" : "Ierakstīties",
+ "Plain" : "vienkāršs teksts",
+ "NT LAN Manager" : "NT LAN Pārvaldnieks",
+ "SSL" : "SSL",
+ "TLS" : "TLS",
"Security Warning" : "Brīdinājums par drošību",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Jūsu datu direktorija un faili visticamāk ir pieejami no interneta. .htaccess fails nedarbojas. Ir rekomendēts konfigurēt serveri tā lai jūsu datu direktorija nav lasāma vai pārvietot to ārpus tīmekļa servera dokumentu mapes.",
"Setup Warning" : "Iestatīšanas brīdinājums",
"Module 'fileinfo' missing" : "Trūkst modulis “fileinfo”",
"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.",
"Locale not working" : "Lokāle nestrādā",
"Please double check the <a href='%s'>installation guides</a>." : "Lūdzu, vēlreiz pārbaudiet <a href='%s'>instalēšanas palīdzību</a>.",
+ "Last cron was executed at %s." : "Pēdējo reizi Cron tika izpildīts %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Pēdējo reizi Cron tika izpildīts %s. Tas ir vairāk kā pirms stundas, kaut kas nav kārtībā.",
"Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu",
"Allow apps to use the Share API" : "Ļauj lietotnēm izmantot koplietošanas API",
+ "Allow users to share via link" : "Ļaut lietotājiem dalīties caur saitēm",
"Allow public uploads" : "Atļaut publisko augšupielādi",
+ "Expire after " : "Nederīga pēc",
+ "days" : "dienas",
"Allow resharing" : "Atļaut atkārtotu koplietošanu",
"Enforce HTTPS" : "Uzspiest HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Uzspiest klientiem pieslēgties pie %s caur šifrētu savienojumu.",
@@ -69,6 +138,9 @@
"Bugtracker" : "Kļūdu sekotājs",
"Commercial Support" : "Komerciālais atbalsts",
"Get the apps to sync your files" : "Saņem lietotnes, lai sinhronizētu savas datnes",
+ "Desktop client" : "Darbvirsmas klients",
+ "Android app" : "Android lietotne",
+ "iOS app" : "iOS lietotne",
"Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Jūs lietojat <strong>%s</strong> no pieejamajiem <strong>%s</strong>",
"Password" : "Parole",
@@ -77,15 +149,20 @@
"Current password" : "Pašreizējā parole",
"New password" : "Jauna parole",
"Change password" : "Mainīt paroli",
+ "Full Name" : "Pilns vārds",
"Email" : "E-pasts",
"Your email address" : "Jūsu e-pasta adrese",
+ "Profile picture" : "Profila attēls",
+ "Upload new" : "Ielādēt jaunu",
+ "Select new from Files" : "Izvēlēties jaunu no Failiem",
+ "Remove image" : "Novākt attēlu",
"Cancel" : "Atcelt",
"Language" : "Valoda",
"Help translate" : "Palīdzi tulkot",
"Import Root Certificate" : "Importēt saknes sertifikātus",
"Log-in password" : "Pieslēgšanās parole",
"Decrypt all Files" : "Atšifrēt visus failus",
- "Login Name" : "Ierakstīšanās vārds",
+ "Username" : "Lietotājvārds",
"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ā.",
@@ -93,7 +170,6 @@
"Default Quota" : "Apjoms pēc noklusējuma",
"Unlimited" : "Neierobežota",
"Other" : "Cits",
- "Username" : "Lietotājvārds",
"Quota" : "Apjoms",
"set new password" : "iestatīt jaunu paroli",
"Default" : "Noklusējuma"
diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js
index 32438b0651b..e1b52193ee6 100644
--- a/settings/l10n/mk.js
+++ b/settings/l10n/mk.js
@@ -9,14 +9,8 @@ OC.L10N.register(
"Authentication error" : "Грешка во автентикација",
"Your full name has been changed." : "Вашето целосно име е променето.",
"Unable to change full name" : "Не можам да го променам целото име",
- "Group already exists" : "Групата веќе постои",
- "Unable to add group" : "Неможе да додадам група",
"Files decrypted successfully" : "Датотектие се успешно декриптирани",
"Encryption keys deleted permanently" : "Енкрипциските клучеви се трајно избришани",
- "Email saved" : "Електронската пошта е снимена",
- "Invalid email" : "Неисправна електронска пошта",
- "Unable to delete group" : "Неможе да избришам група",
- "Unable to delete user" : "Неможам да избришам корисник",
"Backups restored successfully" : "Бекапите се успешно реставрирани",
"Language changed" : "Јазикот е сменет",
"Invalid request" : "Неправилно барање",
@@ -31,6 +25,7 @@ OC.L10N.register(
"Saved" : "Снимено",
"test email settings" : "провери ги нагодувањата за електронска пошта",
"Email sent" : "Е-порака пратена",
+ "Email saved" : "Електронската пошта е снимена",
"Sending..." : "Испраќам...",
"All" : "Сите",
"Please wait...." : "Ве молам почекајте ...",
@@ -75,7 +70,6 @@ OC.L10N.register(
"Security Warning" : "Безбедносно предупредување",
"Setup Warning" : "Предупредување при подесување",
"Database Performance Info" : "Информација за перформансите на базата на податоци",
- "Your PHP version is outdated" : "Вашаа верзија на PHP е застарена",
"Locale not working" : "Локалето не функционира",
"Execute one task with each page loaded" : "Изврши по една задача со секоја вчитана страница",
"Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување",
@@ -113,6 +107,7 @@ OC.L10N.register(
"User Documentation" : "Корисничка документација",
"Admin Documentation" : "Админстраторска документација",
"Enable only for specific groups" : "Овозможи само на специфицирани групи",
+ "Cheers!" : "Поздрав!",
"Administrator Documentation" : "Администраторска документација",
"Online Documentation" : "Документација на интернет",
"Forum" : "Форум",
@@ -145,10 +140,9 @@ OC.L10N.register(
"Decrypt all Files" : "Дешифрирај ги сите датотеки",
"Restore Encryption Keys" : "Обнови ги енкрипциските клучеви",
"Delete Encryption Keys" : "Избриши ги енкрипцисиките клучеви",
- "Login Name" : "Име за најава",
+ "Username" : "Корисничко име",
"Create" : "Создај",
"Admin Recovery Password" : "Обновување на Admin лозинката",
- "Search Users and Groups" : "Барај корисници и групи",
"Add Group" : "Додади група",
"Group" : "Група",
"Everyone" : "Секој",
@@ -157,7 +151,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ве молам внесете квота за просторот (нпр: \"512 MB\" или \"12 GB\")",
"Unlimited" : "Неограничено",
"Other" : "Останато",
- "Username" : "Корисничко име",
"Quota" : "Квота",
"Storage Location" : "Локација на сториџот",
"Last Login" : "Последна најава",
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index 93cbf16b885..f92fcd0935a 100644
--- a/settings/l10n/mk.json
+++ b/settings/l10n/mk.json
@@ -7,14 +7,8 @@
"Authentication error" : "Грешка во автентикација",
"Your full name has been changed." : "Вашето целосно име е променето.",
"Unable to change full name" : "Не можам да го променам целото име",
- "Group already exists" : "Групата веќе постои",
- "Unable to add group" : "Неможе да додадам група",
"Files decrypted successfully" : "Датотектие се успешно декриптирани",
"Encryption keys deleted permanently" : "Енкрипциските клучеви се трајно избришани",
- "Email saved" : "Електронската пошта е снимена",
- "Invalid email" : "Неисправна електронска пошта",
- "Unable to delete group" : "Неможе да избришам група",
- "Unable to delete user" : "Неможам да избришам корисник",
"Backups restored successfully" : "Бекапите се успешно реставрирани",
"Language changed" : "Јазикот е сменет",
"Invalid request" : "Неправилно барање",
@@ -29,6 +23,7 @@
"Saved" : "Снимено",
"test email settings" : "провери ги нагодувањата за електронска пошта",
"Email sent" : "Е-порака пратена",
+ "Email saved" : "Електронската пошта е снимена",
"Sending..." : "Испраќам...",
"All" : "Сите",
"Please wait...." : "Ве молам почекајте ...",
@@ -73,7 +68,6 @@
"Security Warning" : "Безбедносно предупредување",
"Setup Warning" : "Предупредување при подесување",
"Database Performance Info" : "Информација за перформансите на базата на податоци",
- "Your PHP version is outdated" : "Вашаа верзија на PHP е застарена",
"Locale not working" : "Локалето не функционира",
"Execute one task with each page loaded" : "Изврши по една задача со секоја вчитана страница",
"Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување",
@@ -111,6 +105,7 @@
"User Documentation" : "Корисничка документација",
"Admin Documentation" : "Админстраторска документација",
"Enable only for specific groups" : "Овозможи само на специфицирани групи",
+ "Cheers!" : "Поздрав!",
"Administrator Documentation" : "Администраторска документација",
"Online Documentation" : "Документација на интернет",
"Forum" : "Форум",
@@ -143,10 +138,9 @@
"Decrypt all Files" : "Дешифрирај ги сите датотеки",
"Restore Encryption Keys" : "Обнови ги енкрипциските клучеви",
"Delete Encryption Keys" : "Избриши ги енкрипцисиките клучеви",
- "Login Name" : "Име за најава",
+ "Username" : "Корисничко име",
"Create" : "Создај",
"Admin Recovery Password" : "Обновување на Admin лозинката",
- "Search Users and Groups" : "Барај корисници и групи",
"Add Group" : "Додади група",
"Group" : "Група",
"Everyone" : "Секој",
@@ -155,7 +149,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ве молам внесете квота за просторот (нпр: \"512 MB\" или \"12 GB\")",
"Unlimited" : "Неограничено",
"Other" : "Останато",
- "Username" : "Корисничко име",
"Quota" : "Квота",
"Storage Location" : "Локација на сториџот",
"Last Login" : "Последна најава",
diff --git a/settings/l10n/mn.js b/settings/l10n/mn.js
new file mode 100644
index 00000000000..8c4c35c57cc
--- /dev/null
+++ b/settings/l10n/mn.js
@@ -0,0 +1,27 @@
+OC.L10N.register(
+ "settings",
+ {
+ "Security & Setup Warnings" : "Аюулгүй байдал болон Тохиргооны анхааруулга",
+ "Cron" : "Крон",
+ "Sharing" : "Түгээлт",
+ "Security" : "Аюулгүй байдал",
+ "Email Server" : "И-мэйл сервер",
+ "Log" : "Лог бичилт",
+ "Authentication error" : "Нотолгооны алдаа",
+ "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.",
+ "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна",
+ "Files decrypted successfully" : "Файл амжилттай хөрвүүлэгдлээ",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Таны файлыг хөрвүүлж чадахгүй байна, та админаасаа асуух эсвэл өөрийнхөө лог бичилтийг шалгана уу",
+ "Couldn't decrypt your files, check your password and try again" : "Таны файлыг хөрвүүлж чадахгүй байна, та нууц үгээ шалгаад дахин оролдоно уу",
+ "Encryption keys deleted permanently" : "Хөрвүүлэгч түлхүүр үгнүүд бүр мөсөн устгагдлаа",
+ "Couldn't remove app." : "Апп-ыг устгаж чадсангүй",
+ "Backups restored successfully" : "Нөөцүүд амжилттай сэргээгдлээ",
+ "Language changed" : "Хэл солигдлоо",
+ "Invalid request" : "Буруу хүсэлт",
+ "Admins can't remove themself from the admin group" : "Админууд өөрсдийгөө Админ бүлгээс хасаж чадахгүй",
+ "All" : "Бүгд",
+ "Password" : "Нууц үг",
+ "Email" : "И-мэйл",
+ "Username" : "Хэрэглэгчийн нэр"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/mn.json b/settings/l10n/mn.json
new file mode 100644
index 00000000000..1f390dd194e
--- /dev/null
+++ b/settings/l10n/mn.json
@@ -0,0 +1,25 @@
+{ "translations": {
+ "Security & Setup Warnings" : "Аюулгүй байдал болон Тохиргооны анхааруулга",
+ "Cron" : "Крон",
+ "Sharing" : "Түгээлт",
+ "Security" : "Аюулгүй байдал",
+ "Email Server" : "И-мэйл сервер",
+ "Log" : "Лог бичилт",
+ "Authentication error" : "Нотолгооны алдаа",
+ "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.",
+ "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна",
+ "Files decrypted successfully" : "Файл амжилттай хөрвүүлэгдлээ",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Таны файлыг хөрвүүлж чадахгүй байна, та админаасаа асуух эсвэл өөрийнхөө лог бичилтийг шалгана уу",
+ "Couldn't decrypt your files, check your password and try again" : "Таны файлыг хөрвүүлж чадахгүй байна, та нууц үгээ шалгаад дахин оролдоно уу",
+ "Encryption keys deleted permanently" : "Хөрвүүлэгч түлхүүр үгнүүд бүр мөсөн устгагдлаа",
+ "Couldn't remove app." : "Апп-ыг устгаж чадсангүй",
+ "Backups restored successfully" : "Нөөцүүд амжилттай сэргээгдлээ",
+ "Language changed" : "Хэл солигдлоо",
+ "Invalid request" : "Буруу хүсэлт",
+ "Admins can't remove themself from the admin group" : "Админууд өөрсдийгөө Админ бүлгээс хасаж чадахгүй",
+ "All" : "Бүгд",
+ "Password" : "Нууц үг",
+ "Email" : "И-мэйл",
+ "Username" : "Хэрэглэгчийн нэр"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/settings/l10n/ms_MY.js b/settings/l10n/ms_MY.js
index 99c41bf6a81..55aff18e08c 100644
--- a/settings/l10n/ms_MY.js
+++ b/settings/l10n/ms_MY.js
@@ -3,10 +3,9 @@ OC.L10N.register(
{
"Log" : "Log",
"Authentication error" : "Ralat pengesahan",
- "Email saved" : "Emel disimpan",
- "Invalid email" : "Emel tidak sah",
"Language changed" : "Bahasa diubah",
"Invalid request" : "Permintaan tidak sah",
+ "Email saved" : "Emel disimpan",
"Disable" : "Nyahaktif",
"Enable" : "Aktif",
"Delete" : "Padam",
@@ -30,11 +29,10 @@ OC.L10N.register(
"Cancel" : "Batal",
"Language" : "Bahasa",
"Help translate" : "Bantu terjemah",
- "Login Name" : "Log masuk",
+ "Username" : "Nama pengguna",
"Create" : "Buat",
"Default Quota" : "Kuota Lalai",
"Other" : "Lain",
- "Username" : "Nama pengguna",
"Quota" : "Kuota"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/ms_MY.json b/settings/l10n/ms_MY.json
index 506590d06f9..60c90b91a40 100644
--- a/settings/l10n/ms_MY.json
+++ b/settings/l10n/ms_MY.json
@@ -1,10 +1,9 @@
{ "translations": {
"Log" : "Log",
"Authentication error" : "Ralat pengesahan",
- "Email saved" : "Emel disimpan",
- "Invalid email" : "Emel tidak sah",
"Language changed" : "Bahasa diubah",
"Invalid request" : "Permintaan tidak sah",
+ "Email saved" : "Emel disimpan",
"Disable" : "Nyahaktif",
"Enable" : "Aktif",
"Delete" : "Padam",
@@ -28,11 +27,10 @@
"Cancel" : "Batal",
"Language" : "Bahasa",
"Help translate" : "Bantu terjemah",
- "Login Name" : "Log masuk",
+ "Username" : "Nama pengguna",
"Create" : "Buat",
"Default Quota" : "Kuota Lalai",
"Other" : "Lain",
- "Username" : "Nama pengguna",
"Quota" : "Kuota"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 1e68033f940..0231c747f93 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Advarsler for sikkerhet og oppsett",
"Cron" : "Cron",
"Sharing" : "Deling",
"Security" : "Sikkerhet",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Autentiseringsfeil",
"Your full name has been changed." : "Ditt fulle navn er blitt endret.",
"Unable to change full name" : "Klarte ikke å endre fullt navn",
- "Group already exists" : "Gruppen finnes allerede",
- "Unable to add group" : "Kan ikke legge til gruppe",
"Files decrypted successfully" : "Dekryptering av filer vellykket",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Kunne ikke dekryptere filene dine. Sjekk owncloud.log eller spør administratoren",
"Couldn't decrypt your files, check your password and try again" : "Kunne ikke dekryptere filene dine. Sjekk passordet ditt og prøv igjen",
"Encryption keys deleted permanently" : "Krypteringsnøkler permanent slettet",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke slette krypteringsnøklene dine permanent. Sjekk owncloud.log eller spør administratoren",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Email saved" : "Epost lagret",
- "Invalid email" : "Ugyldig epost",
- "Unable to delete group" : "Kan ikke slette gruppe",
- "Unable to delete user" : "Kan ikke slette bruker",
"Backups restored successfully" : "Vellykket gjenoppretting fra sikkerhetskopier",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke gjenopprette krypteringsnøklene dine. Sjekk owncloud.log eller spør administratoren",
"Language changed" : "Språk endret",
@@ -36,11 +31,25 @@ OC.L10N.register(
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.",
"Unable to change password" : "Kunne ikke endre passord",
"Enabled" : "Aktiv",
+ "Not enabled" : "Ikke aktivert",
+ "Recommended" : "Anbefalt",
+ "Group already exists." : "Gruppe finnes allerede.",
+ "Unable to add group." : "Kan ikke legge til gruppe.",
+ "Unable to delete group." : "Kan ikke slette gruppe.",
"Saved" : "Lagret",
"test email settings" : "Test av innstillinger for e-post",
"If you received this email, the settings seem to be correct." : "Hvis du mottar denne e-posten er innstillingene tydeligvis korrekte.",
+ "A problem occurred while sending the email. Please revise your settings." : "Et problem oppstod med sending av e-post. Sjekk innstillingene.",
"Email sent" : "E-post sendt",
"You need to set your user email before being able to send test emails." : "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.",
+ "Invalid mail address" : "Ugyldig e-postadresse",
+ "Unable to create user." : "Kan ikke opprette bruker.",
+ "Your %s account was created" : "%s-kontoen din ble opprettet",
+ "Unable to delete user." : "Kan ikke slette bruker.",
+ "Forbidden" : "Forbudt",
+ "Invalid user" : "Ugyldig bruker",
+ "Unable to change mail address" : "Kan ikke endre epost-adresse",
+ "Email saved" : "Epost lagret",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som tiltrodd domene?",
"Add trusted domain" : "Legg til et tiltrodd domene",
"Sending..." : "Sender...",
@@ -73,14 +82,16 @@ OC.L10N.register(
"A valid group name must be provided" : "Et gyldig gruppenavn må oppgis",
"deleted {groupName}" : "slettet {groupName}",
"undo" : "angre",
+ "no group" : "ingen gruppe",
"never" : "aldri",
"deleted {userName}" : "slettet {userName}",
"add group" : "legg til gruppe",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"Error creating user" : "Feil ved oppretting av bruker",
"A valid password must be provided" : "Oppgi et gyldig passord",
- "Warning: Home directory for user \"{user}\" already exists" : "Advarsel: Hjemmemappe for bruker \"{user}\" eksisterer allerede",
+ "A valid email must be provided" : "En gyldig e-postadresse må oppgis",
"__language_name__" : "__language_name__",
+ "Personal Info" : "Personlig informasjon",
"SSL root certificates" : "SSL rotsertifikater",
"Encryption" : "Kryptering",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
@@ -96,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Sikkerhetsadvarsel",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du aksesserer %s via HTTP. Vi anbefaler på det sterkeste at du konfigurerer serveren til å kreve bruk av HTTPS i stedet.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer. Vi anbefaler på det sterkeste at du konfigurerer web-serveren din slik at datamappen ikke lenger er tilgjengelig eller at du flytter datamappen ut av web-serverens dokument-rotmappe.",
+ "Read-Only config enabled" : "Skrivebeskyttet konfigurasjon aktivert",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
"Setup Warning" : "Installasjonsadvarsel",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
@@ -104,16 +116,14 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite brukes som database. For større installasjoner anbefaler vi å endre dette. For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
- "Your PHP version is outdated" : "Din PHP-versjon er udatert",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP-versjonen din er utdatert. Vi anbefaler på det sterkeste at du oppdaterer til 5.3.8 eller nyere fordi eldre versjoner ikke vil virke. Det er mulig at denne installasjoner ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsett er ikke satt til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsett er ikke satt til UTF-8. Dette kan forårsake store problemer med tegn som ikke er ASCII i filnavn. Vi anbefaler på det sterkeste å endre verdien av 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Nasjonale innstillinger virker ikke",
"System locale can not be set to a one which supports UTF-8." : "Kan ikke sette systemets nasjonale innstillinger til en som støtter UTF-8.",
"This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler på det sterkeste å installere pakkene som er nødvendig for at systemet skal støtte en av følgende nasjonale innstillinger: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.",
"URL generation in notification emails" : "URL-generering i varsel-eposter",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker system cron, kan det bli problemer med URL-generering. For å forhindre disse problemene, sett \"overwritewebroot\" i filen config.php til webroot-stien for installasjonen din (Forslag: \"%s\")",
+ "Configuration Checks" : "Konfigurasjons-sjekker",
"No problems found" : "Ingen problemer funnet",
"Please double check the <a href='%s'>installation guides</a>." : "Vennligst dobbelsjekk <a href='%s'>installasjonsguiden</a>.",
"Last cron was executed at %s." : "Siste cron ble utført %s.",
@@ -126,17 +136,20 @@ OC.L10N.register(
"Allow users to share via link" : "Tillat brukere å dele via lenke",
"Enforce password protection" : "Tving passordbeskyttelse",
"Allow public uploads" : "Tillat offentlig opplasting",
+ "Allow users to send mail notification for shared files" : "Tlllat at brukere sender e-postvarsler for delte filer",
"Set default expiration date" : "Sett standard utløpsdato",
"Expire after " : "Utløper etter",
"days" : "dager",
"Enforce expiration date" : "Tving utløpsdato",
"Allow resharing" : "TIllat videre deling",
"Restrict users to only share with users in their groups" : "Begrens brukere til kun å dele med brukere i deres grupper",
- "Allow users to send mail notification for shared files" : "Tlllat at brukere sender e-postvarsler for delte filer",
+ "Allow users to send mail notification for shared files to other users" : "Tillat at brukere sender varsler om delte filer på e-post til andre brukere",
"Exclude groups from sharing" : "Utelukk grupper fra deling",
"These groups will still be able to receive shares, but not to initiate them." : "Disse gruppene vil fremdeles kunne motta delinger men ikke lage dem.",
"Enforce HTTPS" : "Tving HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Tvinger klientene til å koble til %s via en kryptert forbindelse.",
+ "Enforce HTTPS for subdomains" : "Krev HTTPS for underdomener",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Tvinger klientene til å koble til %s og underdomener via en kryptert forbindelse.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Vennligst koble til din %s via HTTPS for å aktivere eller deaktivere tvungen SSL.",
"This is used for sending out notifications." : "Dette brukes for utsending av varsler.",
"Send mode" : "Sendemåte",
@@ -149,6 +162,7 @@ OC.L10N.register(
"Credentials" : "Påloggingsdetaljer",
"SMTP Username" : "SMTP-brukernavn",
"SMTP Password" : "SMTP-passord",
+ "Store credentials" : "Lagre påloggingsdetaljer",
"Test email settings" : "Test innstillinger for e-post",
"Send email" : "Send e-post",
"Log level" : "Loggnivå",
@@ -156,21 +170,32 @@ OC.L10N.register(
"Less" : "Mindre",
"Version" : "Versjon",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Utviklet av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-fellesskapet</a>. <a href=\"https://github.com/owncloud\" target=\"_blank\">Kildekoden</a> er lisensiert under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+ "More apps" : "Flere apper",
+ "Add your app" : "Legg til din app",
"by" : "av",
+ "licensed" : "lisensiert",
"Documentation:" : "Dokumentasjon:",
"User Documentation" : "Brukerdokumentasjon",
"Admin Documentation" : "Admin-dokumentasjon",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
+ "Update to %s" : "Oppdater til %s",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
"Uninstall App" : "Avinstaller app",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei,<br><br>vil bare informere om at du nå har en %s-konto.<br><br>Brukernavnet ditt: %s<br>Gå dit: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Ha det!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nVil bare informere om at du nå har en %s-konto.\n\nBrukernavnet ditt: %s\nGå dit: %s\n\n",
"Administrator Documentation" : "Dokumentasjon for administratorer",
"Online Documentation" : "Online dokumentasjon",
"Forum" : "Forum",
"Bugtracker" : "Innmelding og sporing av feil",
"Commercial Support" : "Forretningsstøtte",
"Get the apps to sync your files" : "Hent apper som synkroniserer filene dine",
+ "Desktop client" : "Skrivebordsklient",
+ "Android app" : "Android-app",
+ "iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Hvis du vil støtte prosjektet kan du\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">delta i utviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spre budskapet</a>!",
"Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av tilgjengelig <strong>%s</strong>",
+ "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av de tilgjengelige <strong>%s</strong>",
"Password" : "Passord",
"Your password was changed" : "Passord har blitt endret",
"Unable to change your password" : "Kunne ikke endre passordet ditt",
@@ -204,11 +229,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Slett krypteringsnøkler",
"Show storage location" : "Vis lagringssted",
"Show last log in" : "Vis site innlogging",
- "Login Name" : "Brukernavn",
+ "Show user backend" : "Vis bruker-server",
+ "Send email to new user" : "Send e-post til ny bruker",
+ "Show email address" : "Vis e-postadresse",
+ "Username" : "Brukernavn",
+ "E-Mail" : "E-post",
"Create" : "Opprett",
"Admin Recovery Password" : "Administrativt gjenopprettingspassord",
"Enter the recovery password in order to recover the users files during password change" : "Legg inn gjenopprettingspassordet for å gjenopprette brukerfilene når passordet endres",
- "Search Users and Groups" : "Søk i brukere og grupper",
+ "Search Users" : "Søk brukere",
"Add Group" : "Legg til gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
@@ -217,12 +246,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Legg inn lagringskvote (f.eks. \"512 MB\" eller \"12 GB\")",
"Unlimited" : "Ubegrenset",
"Other" : "Annet",
- "Username" : "Brukernavn",
+ "Group Admin for" : "Gruppeadministrator for",
"Quota" : "Kvote",
"Storage Location" : "Lagringsplassering",
+ "User Backend" : "Bruker-server",
"Last Login" : "Siste innlogging",
"change full name" : "endre fullt navn",
"set new password" : "sett nytt passord",
+ "change email address" : "endre e-postadresse",
"Default" : "Standard"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index c6ec81f064c..2f1f8a35d2d 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Advarsler for sikkerhet og oppsett",
"Cron" : "Cron",
"Sharing" : "Deling",
"Security" : "Sikkerhet",
@@ -7,18 +8,12 @@
"Authentication error" : "Autentiseringsfeil",
"Your full name has been changed." : "Ditt fulle navn er blitt endret.",
"Unable to change full name" : "Klarte ikke å endre fullt navn",
- "Group already exists" : "Gruppen finnes allerede",
- "Unable to add group" : "Kan ikke legge til gruppe",
"Files decrypted successfully" : "Dekryptering av filer vellykket",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Kunne ikke dekryptere filene dine. Sjekk owncloud.log eller spør administratoren",
"Couldn't decrypt your files, check your password and try again" : "Kunne ikke dekryptere filene dine. Sjekk passordet ditt og prøv igjen",
"Encryption keys deleted permanently" : "Krypteringsnøkler permanent slettet",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke slette krypteringsnøklene dine permanent. Sjekk owncloud.log eller spør administratoren",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Email saved" : "Epost lagret",
- "Invalid email" : "Ugyldig epost",
- "Unable to delete group" : "Kan ikke slette gruppe",
- "Unable to delete user" : "Kan ikke slette bruker",
"Backups restored successfully" : "Vellykket gjenoppretting fra sikkerhetskopier",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kunne ikke gjenopprette krypteringsnøklene dine. Sjekk owncloud.log eller spør administratoren",
"Language changed" : "Språk endret",
@@ -34,11 +29,25 @@
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.",
"Unable to change password" : "Kunne ikke endre passord",
"Enabled" : "Aktiv",
+ "Not enabled" : "Ikke aktivert",
+ "Recommended" : "Anbefalt",
+ "Group already exists." : "Gruppe finnes allerede.",
+ "Unable to add group." : "Kan ikke legge til gruppe.",
+ "Unable to delete group." : "Kan ikke slette gruppe.",
"Saved" : "Lagret",
"test email settings" : "Test av innstillinger for e-post",
"If you received this email, the settings seem to be correct." : "Hvis du mottar denne e-posten er innstillingene tydeligvis korrekte.",
+ "A problem occurred while sending the email. Please revise your settings." : "Et problem oppstod med sending av e-post. Sjekk innstillingene.",
"Email sent" : "E-post sendt",
"You need to set your user email before being able to send test emails." : "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.",
+ "Invalid mail address" : "Ugyldig e-postadresse",
+ "Unable to create user." : "Kan ikke opprette bruker.",
+ "Your %s account was created" : "%s-kontoen din ble opprettet",
+ "Unable to delete user." : "Kan ikke slette bruker.",
+ "Forbidden" : "Forbudt",
+ "Invalid user" : "Ugyldig bruker",
+ "Unable to change mail address" : "Kan ikke endre epost-adresse",
+ "Email saved" : "Epost lagret",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som tiltrodd domene?",
"Add trusted domain" : "Legg til et tiltrodd domene",
"Sending..." : "Sender...",
@@ -71,14 +80,16 @@
"A valid group name must be provided" : "Et gyldig gruppenavn må oppgis",
"deleted {groupName}" : "slettet {groupName}",
"undo" : "angre",
+ "no group" : "ingen gruppe",
"never" : "aldri",
"deleted {userName}" : "slettet {userName}",
"add group" : "legg til gruppe",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"Error creating user" : "Feil ved oppretting av bruker",
"A valid password must be provided" : "Oppgi et gyldig passord",
- "Warning: Home directory for user \"{user}\" already exists" : "Advarsel: Hjemmemappe for bruker \"{user}\" eksisterer allerede",
+ "A valid email must be provided" : "En gyldig e-postadresse må oppgis",
"__language_name__" : "__language_name__",
+ "Personal Info" : "Personlig informasjon",
"SSL root certificates" : "SSL rotsertifikater",
"Encryption" : "Kryptering",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
@@ -94,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Sikkerhetsadvarsel",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du aksesserer %s via HTTP. Vi anbefaler på det sterkeste at du konfigurerer serveren til å kreve bruk av HTTPS i stedet.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer. Vi anbefaler på det sterkeste at du konfigurerer web-serveren din slik at datamappen ikke lenger er tilgjengelig eller at du flytter datamappen ut av web-serverens dokument-rotmappe.",
+ "Read-Only config enabled" : "Skrivebeskyttet konfigurasjon aktivert",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
"Setup Warning" : "Installasjonsadvarsel",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
@@ -102,16 +114,14 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite brukes som database. For større installasjoner anbefaler vi å endre dette. For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
- "Your PHP version is outdated" : "Din PHP-versjon er udatert",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP-versjonen din er utdatert. Vi anbefaler på det sterkeste at du oppdaterer til 5.3.8 eller nyere fordi eldre versjoner ikke vil virke. Det er mulig at denne installasjoner ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsett er ikke satt til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsett er ikke satt til UTF-8. Dette kan forårsake store problemer med tegn som ikke er ASCII i filnavn. Vi anbefaler på det sterkeste å endre verdien av 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Nasjonale innstillinger virker ikke",
"System locale can not be set to a one which supports UTF-8." : "Kan ikke sette systemets nasjonale innstillinger til en som støtter UTF-8.",
"This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler på det sterkeste å installere pakkene som er nødvendig for at systemet skal støtte en av følgende nasjonale innstillinger: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.",
"URL generation in notification emails" : "URL-generering i varsel-eposter",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker system cron, kan det bli problemer med URL-generering. For å forhindre disse problemene, sett \"overwritewebroot\" i filen config.php til webroot-stien for installasjonen din (Forslag: \"%s\")",
+ "Configuration Checks" : "Konfigurasjons-sjekker",
"No problems found" : "Ingen problemer funnet",
"Please double check the <a href='%s'>installation guides</a>." : "Vennligst dobbelsjekk <a href='%s'>installasjonsguiden</a>.",
"Last cron was executed at %s." : "Siste cron ble utført %s.",
@@ -124,17 +134,20 @@
"Allow users to share via link" : "Tillat brukere å dele via lenke",
"Enforce password protection" : "Tving passordbeskyttelse",
"Allow public uploads" : "Tillat offentlig opplasting",
+ "Allow users to send mail notification for shared files" : "Tlllat at brukere sender e-postvarsler for delte filer",
"Set default expiration date" : "Sett standard utløpsdato",
"Expire after " : "Utløper etter",
"days" : "dager",
"Enforce expiration date" : "Tving utløpsdato",
"Allow resharing" : "TIllat videre deling",
"Restrict users to only share with users in their groups" : "Begrens brukere til kun å dele med brukere i deres grupper",
- "Allow users to send mail notification for shared files" : "Tlllat at brukere sender e-postvarsler for delte filer",
+ "Allow users to send mail notification for shared files to other users" : "Tillat at brukere sender varsler om delte filer på e-post til andre brukere",
"Exclude groups from sharing" : "Utelukk grupper fra deling",
"These groups will still be able to receive shares, but not to initiate them." : "Disse gruppene vil fremdeles kunne motta delinger men ikke lage dem.",
"Enforce HTTPS" : "Tving HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Tvinger klientene til å koble til %s via en kryptert forbindelse.",
+ "Enforce HTTPS for subdomains" : "Krev HTTPS for underdomener",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Tvinger klientene til å koble til %s og underdomener via en kryptert forbindelse.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Vennligst koble til din %s via HTTPS for å aktivere eller deaktivere tvungen SSL.",
"This is used for sending out notifications." : "Dette brukes for utsending av varsler.",
"Send mode" : "Sendemåte",
@@ -147,6 +160,7 @@
"Credentials" : "Påloggingsdetaljer",
"SMTP Username" : "SMTP-brukernavn",
"SMTP Password" : "SMTP-passord",
+ "Store credentials" : "Lagre påloggingsdetaljer",
"Test email settings" : "Test innstillinger for e-post",
"Send email" : "Send e-post",
"Log level" : "Loggnivå",
@@ -154,21 +168,32 @@
"Less" : "Mindre",
"Version" : "Versjon",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Utviklet av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-fellesskapet</a>. <a href=\"https://github.com/owncloud\" target=\"_blank\">Kildekoden</a> er lisensiert under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+ "More apps" : "Flere apper",
+ "Add your app" : "Legg til din app",
"by" : "av",
+ "licensed" : "lisensiert",
"Documentation:" : "Dokumentasjon:",
"User Documentation" : "Brukerdokumentasjon",
"Admin Documentation" : "Admin-dokumentasjon",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
+ "Update to %s" : "Oppdater til %s",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
"Uninstall App" : "Avinstaller app",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei,<br><br>vil bare informere om at du nå har en %s-konto.<br><br>Brukernavnet ditt: %s<br>Gå dit: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Ha det!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nVil bare informere om at du nå har en %s-konto.\n\nBrukernavnet ditt: %s\nGå dit: %s\n\n",
"Administrator Documentation" : "Dokumentasjon for administratorer",
"Online Documentation" : "Online dokumentasjon",
"Forum" : "Forum",
"Bugtracker" : "Innmelding og sporing av feil",
"Commercial Support" : "Forretningsstøtte",
"Get the apps to sync your files" : "Hent apper som synkroniserer filene dine",
+ "Desktop client" : "Skrivebordsklient",
+ "Android app" : "Android-app",
+ "iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Hvis du vil støtte prosjektet kan du\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">delta i utviklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spre budskapet</a>!",
"Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt",
- "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av tilgjengelig <strong>%s</strong>",
+ "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har brukt <strong>%s</strong> av de tilgjengelige <strong>%s</strong>",
"Password" : "Passord",
"Your password was changed" : "Passord har blitt endret",
"Unable to change your password" : "Kunne ikke endre passordet ditt",
@@ -202,11 +227,15 @@
"Delete Encryption Keys" : "Slett krypteringsnøkler",
"Show storage location" : "Vis lagringssted",
"Show last log in" : "Vis site innlogging",
- "Login Name" : "Brukernavn",
+ "Show user backend" : "Vis bruker-server",
+ "Send email to new user" : "Send e-post til ny bruker",
+ "Show email address" : "Vis e-postadresse",
+ "Username" : "Brukernavn",
+ "E-Mail" : "E-post",
"Create" : "Opprett",
"Admin Recovery Password" : "Administrativt gjenopprettingspassord",
"Enter the recovery password in order to recover the users files during password change" : "Legg inn gjenopprettingspassordet for å gjenopprette brukerfilene når passordet endres",
- "Search Users and Groups" : "Søk i brukere og grupper",
+ "Search Users" : "Søk brukere",
"Add Group" : "Legg til gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
@@ -215,12 +244,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Legg inn lagringskvote (f.eks. \"512 MB\" eller \"12 GB\")",
"Unlimited" : "Ubegrenset",
"Other" : "Annet",
- "Username" : "Brukernavn",
+ "Group Admin for" : "Gruppeadministrator for",
"Quota" : "Kvote",
"Storage Location" : "Lagringsplassering",
+ "User Backend" : "Bruker-server",
"Last Login" : "Siste innlogging",
"change full name" : "endre fullt navn",
"set new password" : "sett nytt passord",
+ "change email address" : "endre e-postadresse",
"Default" : "Standard"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index c282e31a975..1082afb6e0e 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Authenticatie fout",
"Your full name has been changed." : "Uw volledige naam is gewijzigd.",
"Unable to change full name" : "Kan de volledige naam niet wijzigen",
- "Group already exists" : "Groep bestaat al",
- "Unable to add group" : "Niet in staat om groep toe te voegen",
"Files decrypted successfully" : "Bestanden succesvol ontsleuteld",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Kon uw bestanden niet ontsleutelem. Controleer uw owncloud logs of vraag het uw beheerder",
"Couldn't decrypt your files, check your password and try again" : "Kon uw bestanden niet ontsleutelen. Controleer uw wachtwoord en probeer het opnieuw",
"Encryption keys deleted permanently" : "Cryptosleutels permanent verwijderd",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Kom uw cryptosleutels niet permanent verwijderen. Controleer uw owncloud.log, of neem contact op met uw beheerder.",
"Couldn't remove app." : "Kon app niet verwijderen.",
- "Email saved" : "E-mail bewaard",
- "Invalid email" : "Ongeldige e-mail",
- "Unable to delete group" : "Niet in staat om groep te verwijderen",
- "Unable to delete user" : "Niet in staat om gebruiker te verwijderen",
"Backups restored successfully" : "Backup succesvol terggezet",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kon uw cryptosleutels niet herstellen. Controleer uw owncloud.log of neem contact op met uw beheerder",
"Language changed" : "Taal aangepast",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Geactiveerd",
"Not enabled" : "Niet ingeschakeld",
"Recommended" : "Aanbevolen",
+ "Group already exists." : "Groep bestaat al.",
+ "Unable to add group." : "Kan groep niet toevoegen.",
+ "Unable to delete group." : "Kan groep niet verwijderen.",
"Saved" : "Bewaard",
"test email settings" : "test e-mailinstellingen",
"If you received this email, the settings seem to be correct." : "Als u dit e-mailbericht ontvangt, lijken de instellingen juist.",
"A problem occurred while sending the email. Please revise your settings." : "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen.",
"Email sent" : "E-mail verzonden",
"You need to set your user email before being able to send test emails." : "U moet uw e-mailadres invoeren voordat u testberichten kunt versturen.",
+ "Invalid mail address" : "Ongeldig e-mailadres",
+ "Unable to create user." : "Kan gebruiker niet aanmaken.",
+ "Your %s account was created" : "Uw %s account is aangemaakt",
+ "Unable to delete user." : "Kan gebruiker niet afvoeren.",
+ "Forbidden" : "Verboden",
+ "Invalid user" : "Ongeldige gebruiker",
+ "Unable to change mail address" : "Kan e-mailadressen niet wijzigen",
+ "Email saved" : "E-mail bewaard",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet u zeker dat u \"{domain}\" als een vertrouwd domein wilt toevoegen?",
"Add trusted domain" : "Vertrouwd domein toevoegen",
"Sending..." : "Versturen...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven",
"Error creating user" : "Fout bij aanmaken gebruiker",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
- "Warning: Home directory for user \"{user}\" already exists" : "Waarschuwing: Home directory voor gebruiker \"{user}\" bestaat al",
+ "A valid email must be provided" : "Er moet een geldig e-mailadres worden opgegeven",
"__language_name__" : "Nederlands",
"Personal Info" : "Persoonlijke info",
"SSL root certificates" : "SSL root certificaten",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Beveiligingswaarschuwing",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "U bent met %s verbonden over HTTP. We adviseren met klem uw server zo te configureren dat alleen HTTPS kan worden gebruikt.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datamap niet bereikbaar is vanaf het internet of om uw datamap te verplaatsen naar een locatie buiten de document root van de webserver.",
+ "Read-Only config enabled" : "Alleen-lezen config geactiveerd",
+ "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." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.",
"Setup Warning" : "Instellingswaarschuwing",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.",
@@ -110,17 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we dit aan te passen. Om te migreren naar een andere database moet u deze commandoregel tool gebruiken: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' ontbreekt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.",
- "Your PHP version is outdated" : "Uw PHP versie is verouderd",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Uw PHP versie is verouderd. We adviseren met klem om bij te werken naar versie 5.3.8 of later, omdat oudere versies corrupt kunnen zijn. Het is mogelijk dat deze installatie niet goed werkt.",
"PHP charset is not set to UTF-8" : "PHP characterset is niet ingesteld op UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP characterset is niet ingesteld op UTF-8. Dit kan flinke problemen opleveren met niet-ASCII tekens in bestandsnamen. We adviseren om de waarde van 'default_charset' in php.ini te wijzigen in 'UTF-8'.",
"Locale not working" : "Taalbestand werkt niet",
"System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.",
"This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
"URL generation in notification emails" : "URL genereren in notificatie e-mails",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwritewebroot\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
- "Connectivity Checks" : "Verbindingscontroles",
+ "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\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
+ "Configuration Checks" : "Configuratie Controles",
"No problems found" : "Geen problemen gevonden",
"Please double check the <a href='%s'>installation guides</a>." : "Controleer de <a href='%s'>installatiehandleiding</a> goed.",
"Last cron was executed at %s." : "Laatst uitgevoerde cron op %s.",
@@ -133,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Sta gebruikers toe om te delen via een link",
"Enforce password protection" : "Dwing wachtwoordbeveiliging af",
"Allow public uploads" : "Sta publieke uploads toe",
+ "Allow users to send mail notification for shared files" : "Sta gebruikers toe om e-mailnotificaties te versturen voor gedeelde bestanden",
"Set default expiration date" : "Stel standaard vervaldatum in",
"Expire after " : "Vervalt na",
"days" : "dagen",
"Enforce expiration date" : "Verplicht de vervaldatum",
"Allow resharing" : "Toestaan opnieuw delen",
"Restrict users to only share with users in their groups" : "Laat gebruikers alleen delen met andere gebruikers in hun groepen",
- "Allow users to send mail notification for shared files" : "Sta gebruikers toe om e-mailnotificaties te versturen voor gedeelde bestanden",
+ "Allow users to send mail notification for shared files to other users" : "Sta gebruikers toe om e-mailnotificaties aan andere gebruikers te versturen voor gedeelde bestanden",
"Exclude groups from sharing" : "Sluit groepen uit van delen",
"These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen bestanden ontvangen, maar kunnen ze niet starten.",
"Enforce HTTPS" : "Afdwingen HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Dwingt de clients om een versleutelde verbinding te maken met %s",
+ "Enforce HTTPS for subdomains" : "HTTPS afdwingen voor subdomeinen",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Dwingt de clients om een versleutelde verbinding te maken met %s en de subdomeinen.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Maak verbinding naar uw %s via HTTPS om een geforceerde versleutelde verbinding in- of uit te schakelen.",
"This is used for sending out notifications." : "Dit wordt gestuurd voor het verzenden van meldingen.",
"Send mode" : "Verstuurmodus",
@@ -171,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Documentatie:",
"User Documentation" : "Gebruikersdocumentatie",
"Admin Documentation" : "Beheerdocumentatie",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Deze app kan niet worden geïnstalleerd omdat de volgende afhankelijkheden niet zijn ingevuld:",
"Update to %s" : "Bijgewerkt naar %s",
"Enable only for specific groups" : "Alleen voor bepaalde groepen activeren",
"Uninstall App" : "De-installeren app",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen u laten weten dat u nu een %s account hebt.<br><br>Uw gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Proficiat!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen u laten weten dat u nu een %s account hebt.\n\nUw gebruikersnaam: %s\nGa naar: %s\n\n",
"Administrator Documentation" : "Beheerdersdocumentatie",
"Online Documentation" : "Online documentatie",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Commerciële ondersteuning",
"Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren",
+ "Desktop client" : "Desktop client",
+ "Android app" : "Android app",
+ "iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Als u het project wilt ondersteunen\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">ontwikkel mee</a>\n\t\tof\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">verkondig het nieuws</a>!",
"Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "U heeft <strong>%s</strong> gebruikt van de beschikbare <strong>%s</strong>",
@@ -216,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Verwijder cryptosleutels",
"Show storage location" : "Toon opslaglocatie",
"Show last log in" : "Toon laatste inlog",
- "Login Name" : "Inlognaam",
+ "Show user backend" : "Toon backend gebruiker",
+ "Send email to new user" : "Verstuur e-mail aan nieuwe gebruiker",
+ "Show email address" : "Toon e-mailadres",
+ "Username" : "Gebruikersnaam",
+ "E-Mail" : "E-mail",
"Create" : "Aanmaken",
"Admin Recovery Password" : "Beheer herstel wachtwoord",
"Enter the recovery password in order to recover the users files during password change" : "Voer het herstel wachtwoord in om de gebruikersbestanden terug te halen bij wachtwoordwijziging",
- "Search Users and Groups" : "Zoeken naar gebruikers en groepen",
+ "Search Users" : "Zoek gebruikers",
"Add Group" : "Toevoegen groep",
"Group" : "Groep",
"Everyone" : "Iedereen",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Geef de opslagquotering op (bijv. \"512 MB\" of \"12 GB\")",
"Unlimited" : "Ongelimiteerd",
"Other" : "Anders",
- "Username" : "Gebruikersnaam",
"Group Admin for" : "Groepsbeheerder voor",
"Quota" : "Limieten",
"Storage Location" : "Opslaglocatie",
+ "User Backend" : "Backend gebruiker",
"Last Login" : "Laatste inlog",
"change full name" : "wijzigen volledige naam",
"set new password" : "Instellen nieuw wachtwoord",
+ "change email address" : "wijzig e-mailadres",
"Default" : "Standaard"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index e4cd7312510..54837b152a5 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -8,18 +8,12 @@
"Authentication error" : "Authenticatie fout",
"Your full name has been changed." : "Uw volledige naam is gewijzigd.",
"Unable to change full name" : "Kan de volledige naam niet wijzigen",
- "Group already exists" : "Groep bestaat al",
- "Unable to add group" : "Niet in staat om groep toe te voegen",
"Files decrypted successfully" : "Bestanden succesvol ontsleuteld",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Kon uw bestanden niet ontsleutelem. Controleer uw owncloud logs of vraag het uw beheerder",
"Couldn't decrypt your files, check your password and try again" : "Kon uw bestanden niet ontsleutelen. Controleer uw wachtwoord en probeer het opnieuw",
"Encryption keys deleted permanently" : "Cryptosleutels permanent verwijderd",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Kom uw cryptosleutels niet permanent verwijderen. Controleer uw owncloud.log, of neem contact op met uw beheerder.",
"Couldn't remove app." : "Kon app niet verwijderen.",
- "Email saved" : "E-mail bewaard",
- "Invalid email" : "Ongeldige e-mail",
- "Unable to delete group" : "Niet in staat om groep te verwijderen",
- "Unable to delete user" : "Niet in staat om gebruiker te verwijderen",
"Backups restored successfully" : "Backup succesvol terggezet",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kon uw cryptosleutels niet herstellen. Controleer uw owncloud.log of neem contact op met uw beheerder",
"Language changed" : "Taal aangepast",
@@ -37,12 +31,23 @@
"Enabled" : "Geactiveerd",
"Not enabled" : "Niet ingeschakeld",
"Recommended" : "Aanbevolen",
+ "Group already exists." : "Groep bestaat al.",
+ "Unable to add group." : "Kan groep niet toevoegen.",
+ "Unable to delete group." : "Kan groep niet verwijderen.",
"Saved" : "Bewaard",
"test email settings" : "test e-mailinstellingen",
"If you received this email, the settings seem to be correct." : "Als u dit e-mailbericht ontvangt, lijken de instellingen juist.",
"A problem occurred while sending the email. Please revise your settings." : "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen.",
"Email sent" : "E-mail verzonden",
"You need to set your user email before being able to send test emails." : "U moet uw e-mailadres invoeren voordat u testberichten kunt versturen.",
+ "Invalid mail address" : "Ongeldig e-mailadres",
+ "Unable to create user." : "Kan gebruiker niet aanmaken.",
+ "Your %s account was created" : "Uw %s account is aangemaakt",
+ "Unable to delete user." : "Kan gebruiker niet afvoeren.",
+ "Forbidden" : "Verboden",
+ "Invalid user" : "Ongeldige gebruiker",
+ "Unable to change mail address" : "Kan e-mailadressen niet wijzigen",
+ "Email saved" : "E-mail bewaard",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet u zeker dat u \"{domain}\" als een vertrouwd domein wilt toevoegen?",
"Add trusted domain" : "Vertrouwd domein toevoegen",
"Sending..." : "Versturen...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven",
"Error creating user" : "Fout bij aanmaken gebruiker",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
- "Warning: Home directory for user \"{user}\" already exists" : "Waarschuwing: Home directory voor gebruiker \"{user}\" bestaat al",
+ "A valid email must be provided" : "Er moet een geldig e-mailadres worden opgegeven",
"__language_name__" : "Nederlands",
"Personal Info" : "Persoonlijke info",
"SSL root certificates" : "SSL root certificaten",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Beveiligingswaarschuwing",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "U bent met %s verbonden over HTTP. We adviseren met klem uw server zo te configureren dat alleen HTTPS kan worden gebruikt.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datamap niet bereikbaar is vanaf het internet of om uw datamap te verplaatsen naar een locatie buiten de document root van de webserver.",
+ "Read-Only config enabled" : "Alleen-lezen config geactiveerd",
+ "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." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.",
"Setup Warning" : "Instellingswaarschuwing",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.",
@@ -108,17 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we dit aan te passen. Om te migreren naar een andere database moet u deze commandoregel tool gebruiken: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' ontbreekt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.",
- "Your PHP version is outdated" : "Uw PHP versie is verouderd",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Uw PHP versie is verouderd. We adviseren met klem om bij te werken naar versie 5.3.8 of later, omdat oudere versies corrupt kunnen zijn. Het is mogelijk dat deze installatie niet goed werkt.",
"PHP charset is not set to UTF-8" : "PHP characterset is niet ingesteld op UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP characterset is niet ingesteld op UTF-8. Dit kan flinke problemen opleveren met niet-ASCII tekens in bestandsnamen. We adviseren om de waarde van 'default_charset' in php.ini te wijzigen in 'UTF-8'.",
"Locale not working" : "Taalbestand werkt niet",
"System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.",
"This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
"URL generation in notification emails" : "URL genereren in notificatie e-mails",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwritewebroot\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
- "Connectivity Checks" : "Verbindingscontroles",
+ "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\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
+ "Configuration Checks" : "Configuratie Controles",
"No problems found" : "Geen problemen gevonden",
"Please double check the <a href='%s'>installation guides</a>." : "Controleer de <a href='%s'>installatiehandleiding</a> goed.",
"Last cron was executed at %s." : "Laatst uitgevoerde cron op %s.",
@@ -131,17 +135,20 @@
"Allow users to share via link" : "Sta gebruikers toe om te delen via een link",
"Enforce password protection" : "Dwing wachtwoordbeveiliging af",
"Allow public uploads" : "Sta publieke uploads toe",
+ "Allow users to send mail notification for shared files" : "Sta gebruikers toe om e-mailnotificaties te versturen voor gedeelde bestanden",
"Set default expiration date" : "Stel standaard vervaldatum in",
"Expire after " : "Vervalt na",
"days" : "dagen",
"Enforce expiration date" : "Verplicht de vervaldatum",
"Allow resharing" : "Toestaan opnieuw delen",
"Restrict users to only share with users in their groups" : "Laat gebruikers alleen delen met andere gebruikers in hun groepen",
- "Allow users to send mail notification for shared files" : "Sta gebruikers toe om e-mailnotificaties te versturen voor gedeelde bestanden",
+ "Allow users to send mail notification for shared files to other users" : "Sta gebruikers toe om e-mailnotificaties aan andere gebruikers te versturen voor gedeelde bestanden",
"Exclude groups from sharing" : "Sluit groepen uit van delen",
"These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen bestanden ontvangen, maar kunnen ze niet starten.",
"Enforce HTTPS" : "Afdwingen HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Dwingt de clients om een versleutelde verbinding te maken met %s",
+ "Enforce HTTPS for subdomains" : "HTTPS afdwingen voor subdomeinen",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Dwingt de clients om een versleutelde verbinding te maken met %s en de subdomeinen.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Maak verbinding naar uw %s via HTTPS om een geforceerde versleutelde verbinding in- of uit te schakelen.",
"This is used for sending out notifications." : "Dit wordt gestuurd voor het verzenden van meldingen.",
"Send mode" : "Verstuurmodus",
@@ -169,15 +176,22 @@
"Documentation:" : "Documentatie:",
"User Documentation" : "Gebruikersdocumentatie",
"Admin Documentation" : "Beheerdocumentatie",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Deze app kan niet worden geïnstalleerd omdat de volgende afhankelijkheden niet zijn ingevuld:",
"Update to %s" : "Bijgewerkt naar %s",
"Enable only for specific groups" : "Alleen voor bepaalde groepen activeren",
"Uninstall App" : "De-installeren app",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen u laten weten dat u nu een %s account hebt.<br><br>Uw gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Proficiat!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen u laten weten dat u nu een %s account hebt.\n\nUw gebruikersnaam: %s\nGa naar: %s\n\n",
"Administrator Documentation" : "Beheerdersdocumentatie",
"Online Documentation" : "Online documentatie",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Commerciële ondersteuning",
"Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren",
+ "Desktop client" : "Desktop client",
+ "Android app" : "Android app",
+ "iOS app" : "iOS app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Als u het project wilt ondersteunen\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">ontwikkel mee</a>\n\t\tof\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">verkondig het nieuws</a>!",
"Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "U heeft <strong>%s</strong> gebruikt van de beschikbare <strong>%s</strong>",
@@ -214,11 +228,15 @@
"Delete Encryption Keys" : "Verwijder cryptosleutels",
"Show storage location" : "Toon opslaglocatie",
"Show last log in" : "Toon laatste inlog",
- "Login Name" : "Inlognaam",
+ "Show user backend" : "Toon backend gebruiker",
+ "Send email to new user" : "Verstuur e-mail aan nieuwe gebruiker",
+ "Show email address" : "Toon e-mailadres",
+ "Username" : "Gebruikersnaam",
+ "E-Mail" : "E-mail",
"Create" : "Aanmaken",
"Admin Recovery Password" : "Beheer herstel wachtwoord",
"Enter the recovery password in order to recover the users files during password change" : "Voer het herstel wachtwoord in om de gebruikersbestanden terug te halen bij wachtwoordwijziging",
- "Search Users and Groups" : "Zoeken naar gebruikers en groepen",
+ "Search Users" : "Zoek gebruikers",
"Add Group" : "Toevoegen groep",
"Group" : "Groep",
"Everyone" : "Iedereen",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Geef de opslagquotering op (bijv. \"512 MB\" of \"12 GB\")",
"Unlimited" : "Ongelimiteerd",
"Other" : "Anders",
- "Username" : "Gebruikersnaam",
"Group Admin for" : "Groepsbeheerder voor",
"Quota" : "Limieten",
"Storage Location" : "Opslaglocatie",
+ "User Backend" : "Backend gebruiker",
"Last Login" : "Laatste inlog",
"change full name" : "wijzigen volledige naam",
"set new password" : "Instellen nieuw wachtwoord",
+ "change email address" : "wijzig e-mailadres",
"Default" : "Standaard"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js
index ec89452b020..cf686040086 100644
--- a/settings/l10n/nn_NO.js
+++ b/settings/l10n/nn_NO.js
@@ -6,12 +6,6 @@ OC.L10N.register(
"Security" : "Tryggleik",
"Log" : "Logg",
"Authentication error" : "Autentiseringsfeil",
- "Group already exists" : "Gruppa finst allereie",
- "Unable to add group" : "Klarte ikkje leggja til gruppa",
- "Email saved" : "E-postadresse lagra",
- "Invalid email" : "Ugyldig e-postadresse",
- "Unable to delete group" : "Klarte ikkje å sletta gruppa",
- "Unable to delete user" : "Klarte ikkje sletta brukaren",
"Language changed" : "Språk endra",
"Invalid request" : "Ugyldig førespurnad",
"Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
@@ -25,6 +19,7 @@ OC.L10N.register(
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Bakstykket støttar ikkje passordendring, men krypteringsnøkkelen til brukaren blei oppdatert.",
"Unable to change password" : "Klarte ikkje å endra passordet",
"Email sent" : "E-post sendt",
+ "Email saved" : "E-postadresse lagra",
"All" : "Alle",
"Please wait...." : "Ver venleg og vent …",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
@@ -50,7 +45,6 @@ OC.L10N.register(
"Encryption" : "Kryptering",
"Login" : "Logg inn",
"Security Warning" : "Tryggleiksåtvaring",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappa og filene dine er sannsynlegvis leselege frå nettet. Fila .htaccess fungerer ikkje. Me rår deg sterkt til å konfigurera vevtenaren din sånn at datamappa di ikkje lenger er tilgjengeleg; alternativt kan du flytta datamappa ut av dokumentrot til vevtenaren.",
"Setup Warning" : "Oppsettsåtvaring",
"Module 'fileinfo' missing" : "Modulen «fileinfo» manglar",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen «fileinfo» manglar. Me rår sterkt til å slå på denne modulen for å best mogleg oppdaga MIME-typar.",
@@ -98,14 +92,13 @@ OC.L10N.register(
"Help translate" : "Hjelp oss å omsetja",
"Log-in password" : "Innloggingspassord",
"Decrypt all Files" : "Dekrypter alle filene",
- "Login Name" : "Innloggingsnamn",
+ "Username" : "Brukarnamn",
"Create" : "Lag",
"Admin Recovery Password" : "Gjenopprettingspassord for administrator",
"Enter the recovery password in order to recover the users files during password change" : "Skriv inn gjenopprettingspassordet brukt for å gjenoppretta brukarfilene ved passordendring",
"Group" : "Gruppe",
"Unlimited" : "Ubegrensa",
"Other" : "Anna",
- "Username" : "Brukarnamn",
"Quota" : "Kvote",
"set new password" : "lag nytt passord",
"Default" : "Standard"
diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json
index d0ad4d92356..f0275d8805b 100644
--- a/settings/l10n/nn_NO.json
+++ b/settings/l10n/nn_NO.json
@@ -4,12 +4,6 @@
"Security" : "Tryggleik",
"Log" : "Logg",
"Authentication error" : "Autentiseringsfeil",
- "Group already exists" : "Gruppa finst allereie",
- "Unable to add group" : "Klarte ikkje leggja til gruppa",
- "Email saved" : "E-postadresse lagra",
- "Invalid email" : "Ugyldig e-postadresse",
- "Unable to delete group" : "Klarte ikkje å sletta gruppa",
- "Unable to delete user" : "Klarte ikkje sletta brukaren",
"Language changed" : "Språk endra",
"Invalid request" : "Ugyldig førespurnad",
"Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
@@ -23,6 +17,7 @@
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Bakstykket støttar ikkje passordendring, men krypteringsnøkkelen til brukaren blei oppdatert.",
"Unable to change password" : "Klarte ikkje å endra passordet",
"Email sent" : "E-post sendt",
+ "Email saved" : "E-postadresse lagra",
"All" : "Alle",
"Please wait...." : "Ver venleg og vent …",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
@@ -48,7 +43,6 @@
"Encryption" : "Kryptering",
"Login" : "Logg inn",
"Security Warning" : "Tryggleiksåtvaring",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datamappa og filene dine er sannsynlegvis leselege frå nettet. Fila .htaccess fungerer ikkje. Me rår deg sterkt til å konfigurera vevtenaren din sånn at datamappa di ikkje lenger er tilgjengeleg; alternativt kan du flytta datamappa ut av dokumentrot til vevtenaren.",
"Setup Warning" : "Oppsettsåtvaring",
"Module 'fileinfo' missing" : "Modulen «fileinfo» manglar",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen «fileinfo» manglar. Me rår sterkt til å slå på denne modulen for å best mogleg oppdaga MIME-typar.",
@@ -96,14 +90,13 @@
"Help translate" : "Hjelp oss å omsetja",
"Log-in password" : "Innloggingspassord",
"Decrypt all Files" : "Dekrypter alle filene",
- "Login Name" : "Innloggingsnamn",
+ "Username" : "Brukarnamn",
"Create" : "Lag",
"Admin Recovery Password" : "Gjenopprettingspassord for administrator",
"Enter the recovery password in order to recover the users files during password change" : "Skriv inn gjenopprettingspassordet brukt for å gjenoppretta brukarfilene ved passordendring",
"Group" : "Gruppe",
"Unlimited" : "Ubegrensa",
"Other" : "Anna",
- "Username" : "Brukarnamn",
"Quota" : "Kvote",
"set new password" : "lag nytt passord",
"Default" : "Standard"
diff --git a/settings/l10n/oc.js b/settings/l10n/oc.js
index 1764b2dbf9f..0c025b54d1e 100644
--- a/settings/l10n/oc.js
+++ b/settings/l10n/oc.js
@@ -5,16 +5,11 @@ OC.L10N.register(
"Sharing" : "Al partejar",
"Log" : "Jornal",
"Authentication error" : "Error d'autentificacion",
- "Group already exists" : "Lo grop existís ja",
- "Unable to add group" : "Pas capable d'apondre un grop",
- "Email saved" : "Corrièl enregistrat",
- "Invalid email" : "Corrièl incorrècte",
- "Unable to delete group" : "Pas capable d'escafar un grop",
- "Unable to delete user" : "Pas capable d'escafar un usancièr",
"Language changed" : "Lengas cambiadas",
"Invalid request" : "Demanda invalida",
"Unable to add user to group %s" : "Pas capable d'apondre un usancièr al grop %s",
"Unable to remove user from group %s" : "Pas capable de tira un usancièr del grop %s",
+ "Email saved" : "Corrièl enregistrat",
"Disable" : "Desactiva",
"Enable" : "Activa",
"Delete" : "Escafa",
@@ -38,11 +33,10 @@ OC.L10N.register(
"Cancel" : "Annula",
"Language" : "Lenga",
"Help translate" : "Ajuda a la revirada",
- "Login Name" : "Login",
+ "Username" : "Non d'usancièr",
"Create" : "Crea",
"Default Quota" : "Quota per defaut",
"Other" : "Autres",
- "Username" : "Non d'usancièr",
"Quota" : "Quota"
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/oc.json b/settings/l10n/oc.json
index a01af9dea16..dbf2a7f3dfd 100644
--- a/settings/l10n/oc.json
+++ b/settings/l10n/oc.json
@@ -3,16 +3,11 @@
"Sharing" : "Al partejar",
"Log" : "Jornal",
"Authentication error" : "Error d'autentificacion",
- "Group already exists" : "Lo grop existís ja",
- "Unable to add group" : "Pas capable d'apondre un grop",
- "Email saved" : "Corrièl enregistrat",
- "Invalid email" : "Corrièl incorrècte",
- "Unable to delete group" : "Pas capable d'escafar un grop",
- "Unable to delete user" : "Pas capable d'escafar un usancièr",
"Language changed" : "Lengas cambiadas",
"Invalid request" : "Demanda invalida",
"Unable to add user to group %s" : "Pas capable d'apondre un usancièr al grop %s",
"Unable to remove user from group %s" : "Pas capable de tira un usancièr del grop %s",
+ "Email saved" : "Corrièl enregistrat",
"Disable" : "Desactiva",
"Enable" : "Activa",
"Delete" : "Escafa",
@@ -36,11 +31,10 @@
"Cancel" : "Annula",
"Language" : "Lenga",
"Help translate" : "Ajuda a la revirada",
- "Login Name" : "Login",
+ "Username" : "Non d'usancièr",
"Create" : "Crea",
"Default Quota" : "Quota per defaut",
"Other" : "Autres",
- "Username" : "Non d'usancièr",
"Quota" : "Quota"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/pa.js b/settings/l10n/pa.js
index ef0c5083b06..e5e000082f3 100644
--- a/settings/l10n/pa.js
+++ b/settings/l10n/pa.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Password" : "ਪਾਸਵਰ",
"Change password" : "ਪਾਸਵਰਡ ਬਦਲੋ",
"Cancel" : "ਰੱਦ ਕਰੋ",
- "Login Name" : "ਲਾਗਇਨ",
"Username" : "ਯੂਜ਼ਰ-ਨਾਂ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/pa.json b/settings/l10n/pa.json
index 4f836b1b384..4bea8e234ea 100644
--- a/settings/l10n/pa.json
+++ b/settings/l10n/pa.json
@@ -17,7 +17,6 @@
"Password" : "ਪਾਸਵਰ",
"Change password" : "ਪਾਸਵਰਡ ਬਦਲੋ",
"Cancel" : "ਰੱਦ ਕਰੋ",
- "Login Name" : "ਲਾਗਇਨ",
"Username" : "ਯੂਜ਼ਰ-ਨਾਂ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index 1e72d2c2239..501908586a6 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -9,18 +9,12 @@ OC.L10N.register(
"Authentication error" : "Błąd uwierzytelniania",
"Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
"Unable to change full name" : "Nie można zmienić pełnej nazwy",
- "Group already exists" : "Grupa już istnieje",
- "Unable to add group" : "Nie można dodać grupy",
"Files decrypted successfully" : "Pliki zostały poprawnie zdeszyfrowane",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nie można zdeszyfrować Twoich plików, proszę sprawdzić owncloud.log lub zapytać administratora",
"Couldn't decrypt your files, check your password and try again" : "Nie można zdeszyfrować Twoich plików, sprawdź swoje hasło i spróbuj ponownie",
"Encryption keys deleted permanently" : "Klucze szyfrujące zostały trwale usunięte",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nie można trwale usunąć Twoich kluczy szyfrujących, proszę sprawdź owncloud.log lub zapytaj administratora",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
- "Email saved" : "E-mail zapisany",
- "Invalid email" : "Nieprawidłowy e-mail",
- "Unable to delete group" : "Nie można usunąć grupy",
- "Unable to delete user" : "Nie można usunąć użytkownika",
"Backups restored successfully" : "Archiwum zostało prawidłowo przywrócone",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nie można przywrócić kluczy szyfrujących, proszę sprawdzić owncloud.log lub zapytać administratora",
"Language changed" : "Zmieniono język",
@@ -44,6 +38,7 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Pojawił się problem podczas wysyłania email. Proszę sprawdzić ponownie ustawienia",
"Email sent" : "E-mail wysłany",
"You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
+ "Email saved" : "E-mail zapisany",
"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ę",
"Sending..." : "Wysyłam...",
@@ -83,7 +78,6 @@ OC.L10N.register(
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"Error creating user" : "Błąd podczas tworzenia użytkownika",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
- "Warning: Home directory for user \"{user}\" already exists" : "Ostrzeżenie: Katalog domowy dla użytkownika \"{user}\" już istnieje",
"__language_name__" : "polski",
"Personal Info" : "Informacje osobiste",
"SSL root certificates" : "Główny certyfikat SSL",
@@ -101,7 +95,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Ostrzeżenie o zabezpieczeniach",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Uzyskujesz dostęp do %s za pomocą protokołu HTTP. Zalecamy skonfigurować swój serwer z użyciem protokołu HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Twój katalog danych i pliki są prawdopodobnie dostępne z Internetu. Plik .htaccess, który dostarcza ownCloud nie działa. Sugerujemy, aby skonfigurować serwer WWW w taki sposób, aby katalog danych nie był dostępny lub przenieść katalog danych poza główny katalog serwera WWW.",
"Setup Warning" : "Ostrzeżenia konfiguracji",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Wygląda na to, że ustawienia PHP ucinają bloki wklejonych dokumentów. To sprawi, że niektóre wbudowane aplikacje będą niedostępne.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dzieje się tak prawdopodobnie przez cache lub akcelerator taki jak Zend OPcache lub eAccelerator.",
@@ -109,16 +102,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Jako baza danych został użyty SQLite. Dla większych instalacji doradzamy zmianę na inną. Aby zmigrować do innej bazy danych, użyj narzędzia linii poleceń: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Brak modułu „fileinfo”",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Brak modułu PHP „fileinfo”. Zalecamy włączenie tego modułu, aby uzyskać najlepsze wyniki podczas wykrywania typów MIME.",
- "Your PHP version is outdated" : "Twoja wersja PHP jest za stara",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Twoja wersja PHP jest za stara. Rekomendujemy przynajmniej wersje 5.3.8. Jeśli masz starsza wersję ownCloud może nie działać poprawnie.",
"PHP charset is not set to UTF-8" : "Kodowanie PHP nie jest ustawione na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Zestaw znaków PHP nie jest ustawiony na UTF-8. Może to spowodować poważne problemy ze znakami non-ASCII w nazwach plików. Gorąco doradzamy zmianę wartości 'default_charset' w php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizacja nie działa",
"System locale can not be set to a one which supports UTF-8." : "Ustawienia regionalne systemu nie można ustawić na jeden, który obsługuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "Oznacza to, że mogą być problemy z niektórymi znakami w nazwach plików.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Zalecamy, aby zainstalować wymagane pakiety w systemie, jeden z następujących języków: %s.",
"URL generation in notification emails" : "Generowanie URL w powiadomieniach email",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jeśli Twoja instalacja nie jest zainstalowana w katalogu głównym serwera www, a system używa cron-a, mogą występować problemy z generowaniem URL-i. Aby uniknąć tych problemów, proszę ustawić opcję \"overwritewebroot\" w pliku config.php na ścieżkę z adresu www Twojej instalacji (Sugerowane: \"%s\")",
"No problems found" : "Nie ma żadnych problemów",
"Please double check the <a href='%s'>installation guides</a>." : "Sprawdź podwójnie <a href='%s'>wskazówki instalacji</a>.",
"Last cron was executed at %s." : "Ostatni cron był uruchomiony %s.",
@@ -131,13 +120,13 @@ OC.L10N.register(
"Allow users to share via link" : "Pozwól użytkownikom współdzielić przez link",
"Enforce password protection" : "Wymuś zabezpieczenie hasłem",
"Allow public uploads" : "Pozwól na publiczne wczytywanie",
+ "Allow users to send mail notification for shared files" : "Zezwól użytkownikom na wysyłanie powiadomień email dla udostępnionych plików",
"Set default expiration date" : "Ustaw domyślną datę wygaśnięcia",
"Expire after " : "Wygaś po",
"days" : "dniach",
"Enforce expiration date" : "Wymuś datę wygaśnięcia",
"Allow resharing" : "Zezwalaj na ponowne udostępnianie",
"Restrict users to only share with users in their groups" : "Ogranicz użytkowników do współdzielenia wyłącznie pomiędzy użytkownikami swoich grup",
- "Allow users to send mail notification for shared files" : "Zezwól użytkownikom na wysyłanie powiadomień email dla udostępnionych plików",
"Exclude groups from sharing" : "Wyklucz grupy z udostępniania",
"These groups will still be able to receive shares, but not to initiate them." : "Grupy te nadal będą mogli otrzymywać udostępnione udziały, ale nie do ich inicjowania.",
"Enforce HTTPS" : "Wymuś HTTPS",
@@ -171,6 +160,7 @@ OC.L10N.register(
"Update to %s" : "Aktualizuj do %s",
"Enable only for specific groups" : "Włącz tylko dla określonych grup",
"Uninstall App" : "Odinstaluj aplikację",
+ "Cheers!" : "Pozdrawiam!",
"Administrator Documentation" : "Dokumentacja administratora",
"Online Documentation" : "Dokumentacja online",
"Forum" : "Forum",
@@ -213,11 +203,10 @@ OC.L10N.register(
"Delete Encryption Keys" : "Usuń klucze szyfrujące",
"Show storage location" : "Pokaż miejsce przechowywania",
"Show last log in" : "Pokaż ostatni login",
- "Login Name" : "Login",
+ "Username" : "Nazwa użytkownika",
"Create" : "Utwórz",
"Admin Recovery Password" : "Odzyskiwanie hasła administratora",
"Enter the recovery password in order to recover the users files during password change" : "Wpisz hasło odzyskiwania, aby odzyskać pliki użytkowników podczas zmiany hasła",
- "Search Users and Groups" : "Przeszukuj użytkowników i grupy",
"Add Group" : "Dodaj grupę",
"Group" : "Grupa",
"Everyone" : "Wszyscy",
@@ -226,7 +215,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Proszę ustawić ograniczenie zasobów (np. \"512 MB\" albo \"12 GB)",
"Unlimited" : "Bez limitu",
"Other" : "Inne",
- "Username" : "Nazwa użytkownika",
"Group Admin for" : "Grupa Admin dla",
"Quota" : "Udział",
"Storage Location" : "Lokalizacja magazynu",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index 6ea3b9aaddc..b349c101578 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -7,18 +7,12 @@
"Authentication error" : "Błąd uwierzytelniania",
"Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
"Unable to change full name" : "Nie można zmienić pełnej nazwy",
- "Group already exists" : "Grupa już istnieje",
- "Unable to add group" : "Nie można dodać grupy",
"Files decrypted successfully" : "Pliki zostały poprawnie zdeszyfrowane",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nie można zdeszyfrować Twoich plików, proszę sprawdzić owncloud.log lub zapytać administratora",
"Couldn't decrypt your files, check your password and try again" : "Nie można zdeszyfrować Twoich plików, sprawdź swoje hasło i spróbuj ponownie",
"Encryption keys deleted permanently" : "Klucze szyfrujące zostały trwale usunięte",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nie można trwale usunąć Twoich kluczy szyfrujących, proszę sprawdź owncloud.log lub zapytaj administratora",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
- "Email saved" : "E-mail zapisany",
- "Invalid email" : "Nieprawidłowy e-mail",
- "Unable to delete group" : "Nie można usunąć grupy",
- "Unable to delete user" : "Nie można usunąć użytkownika",
"Backups restored successfully" : "Archiwum zostało prawidłowo przywrócone",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nie można przywrócić kluczy szyfrujących, proszę sprawdzić owncloud.log lub zapytać administratora",
"Language changed" : "Zmieniono język",
@@ -42,6 +36,7 @@
"A problem occurred while sending the email. Please revise your settings." : "Pojawił się problem podczas wysyłania email. Proszę sprawdzić ponownie ustawienia",
"Email sent" : "E-mail wysłany",
"You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
+ "Email saved" : "E-mail zapisany",
"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ę",
"Sending..." : "Wysyłam...",
@@ -81,7 +76,6 @@
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"Error creating user" : "Błąd podczas tworzenia użytkownika",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
- "Warning: Home directory for user \"{user}\" already exists" : "Ostrzeżenie: Katalog domowy dla użytkownika \"{user}\" już istnieje",
"__language_name__" : "polski",
"Personal Info" : "Informacje osobiste",
"SSL root certificates" : "Główny certyfikat SSL",
@@ -99,7 +93,6 @@
"TLS" : "TLS",
"Security Warning" : "Ostrzeżenie o zabezpieczeniach",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Uzyskujesz dostęp do %s za pomocą protokołu HTTP. Zalecamy skonfigurować swój serwer z użyciem protokołu HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Twój katalog danych i pliki są prawdopodobnie dostępne z Internetu. Plik .htaccess, który dostarcza ownCloud nie działa. Sugerujemy, aby skonfigurować serwer WWW w taki sposób, aby katalog danych nie był dostępny lub przenieść katalog danych poza główny katalog serwera WWW.",
"Setup Warning" : "Ostrzeżenia konfiguracji",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Wygląda na to, że ustawienia PHP ucinają bloki wklejonych dokumentów. To sprawi, że niektóre wbudowane aplikacje będą niedostępne.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dzieje się tak prawdopodobnie przez cache lub akcelerator taki jak Zend OPcache lub eAccelerator.",
@@ -107,16 +100,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Jako baza danych został użyty SQLite. Dla większych instalacji doradzamy zmianę na inną. Aby zmigrować do innej bazy danych, użyj narzędzia linii poleceń: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Brak modułu „fileinfo”",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Brak modułu PHP „fileinfo”. Zalecamy włączenie tego modułu, aby uzyskać najlepsze wyniki podczas wykrywania typów MIME.",
- "Your PHP version is outdated" : "Twoja wersja PHP jest za stara",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Twoja wersja PHP jest za stara. Rekomendujemy przynajmniej wersje 5.3.8. Jeśli masz starsza wersję ownCloud może nie działać poprawnie.",
"PHP charset is not set to UTF-8" : "Kodowanie PHP nie jest ustawione na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Zestaw znaków PHP nie jest ustawiony na UTF-8. Może to spowodować poważne problemy ze znakami non-ASCII w nazwach plików. Gorąco doradzamy zmianę wartości 'default_charset' w php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizacja nie działa",
"System locale can not be set to a one which supports UTF-8." : "Ustawienia regionalne systemu nie można ustawić na jeden, który obsługuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "Oznacza to, że mogą być problemy z niektórymi znakami w nazwach plików.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Zalecamy, aby zainstalować wymagane pakiety w systemie, jeden z następujących języków: %s.",
"URL generation in notification emails" : "Generowanie URL w powiadomieniach email",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jeśli Twoja instalacja nie jest zainstalowana w katalogu głównym serwera www, a system używa cron-a, mogą występować problemy z generowaniem URL-i. Aby uniknąć tych problemów, proszę ustawić opcję \"overwritewebroot\" w pliku config.php na ścieżkę z adresu www Twojej instalacji (Sugerowane: \"%s\")",
"No problems found" : "Nie ma żadnych problemów",
"Please double check the <a href='%s'>installation guides</a>." : "Sprawdź podwójnie <a href='%s'>wskazówki instalacji</a>.",
"Last cron was executed at %s." : "Ostatni cron był uruchomiony %s.",
@@ -129,13 +118,13 @@
"Allow users to share via link" : "Pozwól użytkownikom współdzielić przez link",
"Enforce password protection" : "Wymuś zabezpieczenie hasłem",
"Allow public uploads" : "Pozwól na publiczne wczytywanie",
+ "Allow users to send mail notification for shared files" : "Zezwól użytkownikom na wysyłanie powiadomień email dla udostępnionych plików",
"Set default expiration date" : "Ustaw domyślną datę wygaśnięcia",
"Expire after " : "Wygaś po",
"days" : "dniach",
"Enforce expiration date" : "Wymuś datę wygaśnięcia",
"Allow resharing" : "Zezwalaj na ponowne udostępnianie",
"Restrict users to only share with users in their groups" : "Ogranicz użytkowników do współdzielenia wyłącznie pomiędzy użytkownikami swoich grup",
- "Allow users to send mail notification for shared files" : "Zezwól użytkownikom na wysyłanie powiadomień email dla udostępnionych plików",
"Exclude groups from sharing" : "Wyklucz grupy z udostępniania",
"These groups will still be able to receive shares, but not to initiate them." : "Grupy te nadal będą mogli otrzymywać udostępnione udziały, ale nie do ich inicjowania.",
"Enforce HTTPS" : "Wymuś HTTPS",
@@ -169,6 +158,7 @@
"Update to %s" : "Aktualizuj do %s",
"Enable only for specific groups" : "Włącz tylko dla określonych grup",
"Uninstall App" : "Odinstaluj aplikację",
+ "Cheers!" : "Pozdrawiam!",
"Administrator Documentation" : "Dokumentacja administratora",
"Online Documentation" : "Dokumentacja online",
"Forum" : "Forum",
@@ -211,11 +201,10 @@
"Delete Encryption Keys" : "Usuń klucze szyfrujące",
"Show storage location" : "Pokaż miejsce przechowywania",
"Show last log in" : "Pokaż ostatni login",
- "Login Name" : "Login",
+ "Username" : "Nazwa użytkownika",
"Create" : "Utwórz",
"Admin Recovery Password" : "Odzyskiwanie hasła administratora",
"Enter the recovery password in order to recover the users files during password change" : "Wpisz hasło odzyskiwania, aby odzyskać pliki użytkowników podczas zmiany hasła",
- "Search Users and Groups" : "Przeszukuj użytkowników i grupy",
"Add Group" : "Dodaj grupę",
"Group" : "Grupa",
"Everyone" : "Wszyscy",
@@ -224,7 +213,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Proszę ustawić ograniczenie zasobów (np. \"512 MB\" albo \"12 GB)",
"Unlimited" : "Bez limitu",
"Other" : "Inne",
- "Username" : "Nazwa użytkownika",
"Group Admin for" : "Grupa Admin dla",
"Quota" : "Udział",
"Storage Location" : "Lokalizacja magazynu",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 6103cf7deb1..fb8f98b3195 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Erro de autenticação",
"Your full name has been changed." : "Seu nome completo foi alterado.",
"Unable to change full name" : "Não é possível alterar o nome completo",
- "Group already exists" : "O Grupo já existe",
- "Unable to add group" : "Não foi possível adicionar grupo",
"Files decrypted successfully" : "Arquivos descriptografados com sucesso",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível descriptografar os arquivos, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Couldn't decrypt your files, check your password and try again" : "Não foi possível descriptografar os arquivos, verifique sua senha e tente novamente",
"Encryption keys deleted permanently" : "Chaves de criptografia excluídas permanentemente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível excluir permanentemente suas chaves de criptografia, por favor, verifique o seu owncloud.log ou pergunte ao seu administrador",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
- "Email saved" : "E-mail salvo",
- "Invalid email" : "E-mail inválido",
- "Unable to delete group" : "Não foi possível remover grupo",
- "Unable to delete user" : "Não foi possível remover usuário",
"Backups restored successfully" : "Backup restaurado com sucesso",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível salvar as chaves de criptografia, por favor, verifique o seu owncloud.log ou pergunte ao seu administrador",
"Language changed" : "Idioma alterado",
@@ -39,12 +33,23 @@ OC.L10N.register(
"Enabled" : "Habilitado",
"Not enabled" : "Desabilitado",
"Recommended" : "Recomendado",
+ "Group already exists." : "O Grupo já existe.",
+ "Unable to add group." : "Não é possível adicionar grupo.",
+ "Unable to delete group." : "Não é possível excluir grupo.",
"Saved" : "Salvo",
"test email settings" : "testar configurações de email",
"If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail, as configurações parecem estar corretas.",
"A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações.",
"Email sent" : "E-mail enviado",
"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 mail address" : "Endereço de e-mail inválido",
+ "Unable to create user." : "Não é possível criar usuário.",
+ "Your %s account was created" : "Sua conta %s foi criada",
+ "Unable to delete user." : "Não é possível excluir usuário.",
+ "Forbidden" : "Proibido",
+ "Invalid user" : "Usuário inválido",
+ "Unable to change mail address" : "Não é possível trocar o endereço de email",
+ "Email saved" : "E-mail salvo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que você quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" : "Adicionar domínio confiável",
"Sending..." : "Enviando...",
@@ -84,7 +89,7 @@ OC.L10N.register(
"A valid username must be provided" : "Forneça um nome de usuário válido",
"Error creating user" : "Erro ao criar usuário",
"A valid password must be provided" : "Forneça uma senha válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Aviso: O diretório home para o usuário \"{user}\" já existe",
+ "A valid email must be provided" : "Deve ser informado um e-mail válido",
"__language_name__" : "__language_name__",
"Personal Info" : "Informação Pessoal",
"SSL root certificates" : "Certificados SSL raíz",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Aviso de Segurança",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Você está acessando %s via HTTP. Sugerimos você configurar o servidor para exigir o uso de HTTPS em seu lugar.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Seu diretório de dados e seus arquivos são, provavelmente, acessíveis a partir da internet. O arquivo htaccess. não está funcionando. Nós sugerimos fortemente que você configure o seu servidor web de uma forma que o diretório de dados não esteja mais acessível ou mova o diretório de dados para fora do raiz do servidor.",
+ "Read-Only config enabled" : "Somente-Leitura configuração ativada",
+ "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." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.",
"Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
@@ -110,17 +116,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usada como base de dados. Para grandes instalações recomendamos mudar isso. Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db: converter-type'",
"Module 'fileinfo' missing" : "Módulo 'fileinfo' faltando",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter uma melhor detecção do tipo de mídia (mime-type).",
- "Your PHP version is outdated" : "Sua versão de PHP está desatualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está desatualizada. Recomendamos a atualização para 5.3.8 ou mais recente, pois as versões mais antigas são conhecidas por serem quebradas. É possível que esta instalação não esteja funcionando corretamente.",
"PHP charset is not set to UTF-8" : "A configuração de caracteres no PHP não está definida para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A configuração de caracteres para o PHP não está definida para UTF-8. Isto pode causar problemas com caracteres não-ASCII em nomes de arquivos. Nós fortemente recomendamos a troca da definição de caracteres de 'default_charset' no arquivo de configuração php.ini para 'UTF-8'.",
"Locale not working" : "Localização não funcionando",
"System locale can not be set to a one which supports UTF-8." : "Localidade do sistema não pode ser definido como um que suporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isso significa que pode haver problemas com certos caracteres nos nomes de arquivo.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nós fortemente sugerimos instalar os pacotes necessários no seu sistema para suportar uma das seguintes localidades: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.",
"URL generation in notification emails" : "Geração de URL em e-mails de notificação",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
- "Connectivity Checks" : "Verificações de Conectividade",
+ "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\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwrite.cli.url\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
+ "Configuration Checks" : "Verificações de Configuração",
"No problems found" : "Nenhum problema encontrado",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, confira o <a href='%s'>guia de instalação</a>.",
"Last cron was executed at %s." : "Último cron foi executado em %s.",
@@ -133,17 +137,20 @@ OC.L10N.register(
"Allow users to share via link" : "Permitir que os usuários compartilhem por link",
"Enforce password protection" : "Reforce a proteção por senha",
"Allow public uploads" : "Permitir envio público",
+ "Allow users to send mail notification for shared files" : "Permitir aos usuários enviar notificação de email para arquivos compartilhados",
"Set default expiration date" : "Configurar a data de expiração",
"Expire after " : "Expirar depois de",
"days" : "dias",
"Enforce expiration date" : "Fazer cumprir a data de expiração",
"Allow resharing" : "Permitir recompartilhamento",
"Restrict users to only share with users in their groups" : "Restringir os usuários a compartilhar somente com os usuários em seus grupos",
- "Allow users to send mail notification for shared files" : "Permitir aos usuários enviar notificação de email para arquivos compartilhados",
+ "Allow users to send mail notification for shared files to other users" : "Permitir aos usuários enviar notificação de email de arquivos compartilhados para outros usuários",
"Exclude groups from sharing" : "Excluir grupos de compartilhamento",
"These groups will still be able to receive shares, but not to initiate them." : "Esses grupos ainda serão capazes de receber compartilhamentos, mas não para iniciá-los.",
"Enforce HTTPS" : "Forçar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Obrigar os clientes que se conectem a %s através de uma conexão criptografada.",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS para subdomínios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força os clientes se conectem a %s e subdomínios através de uma conexão criptografada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor, se conectar ao seu %s via HTTPS para forçar ativar ou desativar SSL.",
"This is used for sending out notifications." : "Isto é usado para o envio de notificações.",
"Send mode" : "Modo enviar",
@@ -171,15 +178,22 @@ OC.L10N.register(
"Documentation:" : "Documentação:",
"User Documentation" : "Documentação de Usuário",
"Admin Documentation" : "Documentação de Administrador",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Este aplicativo não pode ser instalado porque as seguintes dependências não forão cumpridas:",
"Update to %s" : "Atualizado para %s",
"Enable only for specific groups" : "Ativar apenas para grupos específicos",
"Uninstall App" : "Desinstalar Aplicativo",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Saúde!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n",
"Administrator Documentation" : "Documentação de Administrador",
"Online Documentation" : "Documentação Online",
"Forum" : "Fórum",
"Bugtracker" : "Rastreador de Bugs",
"Commercial Support" : "Suporte Comercial",
"Get the apps to sync your files" : "Faça com que os apps sincronizem seus arquivos",
+ "Desktop client" : "Cliente Desktop",
+ "Android app" : "App Android",
+ "iOS app" : "App iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se você deseja dar suporte ao projeto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">junte-se ao desenvolvimento</a>\n⇥⇥or\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">espalhe pelo mundo</a>!",
"Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Você usou <strong>%s</strong> do seu espaço de <strong>%s</strong>",
@@ -216,11 +230,15 @@ OC.L10N.register(
"Delete Encryption Keys" : "Eliminar Chaves de Criptografia",
"Show storage location" : "Mostrar localização de armazenamento",
"Show last log in" : "Mostrar o último acesso",
- "Login Name" : "Nome de Login",
+ "Show user backend" : "Mostrar administrador do usuário",
+ "Send email to new user" : "Enviar um email para o novo usuário",
+ "Show email address" : "Mostrar o endereço de email",
+ "Username" : "Nome de Usuário",
+ "E-Mail" : "E-Mail",
"Create" : "Criar",
"Admin Recovery Password" : "Recuperação da Senha do Administrador",
"Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação para recuperar os arquivos dos usuários durante a mudança de senha.",
- "Search Users and Groups" : "Pesquisar Usuários e Grupos",
+ "Search Users" : "Pesquisar Usuários",
"Add Group" : "Adicionar Grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor insira cota de armazenamento (ex: \"512\" ou \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Outro",
- "Username" : "Nome de Usuário",
"Group Admin for" : "Grupo Admin para",
"Quota" : "Cota",
"Storage Location" : "Local de Armazenamento",
+ "User Backend" : "Administrador do Usuário",
"Last Login" : "Último Login",
"change full name" : "alterar nome completo",
"set new password" : "definir nova senha",
+ "change email address" : "Trocar o endereço de email",
"Default" : "Padrão"
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 60eb59db740..fefe03b83ac 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -8,18 +8,12 @@
"Authentication error" : "Erro de autenticação",
"Your full name has been changed." : "Seu nome completo foi alterado.",
"Unable to change full name" : "Não é possível alterar o nome completo",
- "Group already exists" : "O Grupo já existe",
- "Unable to add group" : "Não foi possível adicionar grupo",
"Files decrypted successfully" : "Arquivos descriptografados com sucesso",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível descriptografar os arquivos, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Couldn't decrypt your files, check your password and try again" : "Não foi possível descriptografar os arquivos, verifique sua senha e tente novamente",
"Encryption keys deleted permanently" : "Chaves de criptografia excluídas permanentemente",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível excluir permanentemente suas chaves de criptografia, por favor, verifique o seu owncloud.log ou pergunte ao seu administrador",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
- "Email saved" : "E-mail salvo",
- "Invalid email" : "E-mail inválido",
- "Unable to delete group" : "Não foi possível remover grupo",
- "Unable to delete user" : "Não foi possível remover usuário",
"Backups restored successfully" : "Backup restaurado com sucesso",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível salvar as chaves de criptografia, por favor, verifique o seu owncloud.log ou pergunte ao seu administrador",
"Language changed" : "Idioma alterado",
@@ -37,12 +31,23 @@
"Enabled" : "Habilitado",
"Not enabled" : "Desabilitado",
"Recommended" : "Recomendado",
+ "Group already exists." : "O Grupo já existe.",
+ "Unable to add group." : "Não é possível adicionar grupo.",
+ "Unable to delete group." : "Não é possível excluir grupo.",
"Saved" : "Salvo",
"test email settings" : "testar configurações de email",
"If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail, as configurações parecem estar corretas.",
"A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações.",
"Email sent" : "E-mail enviado",
"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 mail address" : "Endereço de e-mail inválido",
+ "Unable to create user." : "Não é possível criar usuário.",
+ "Your %s account was created" : "Sua conta %s foi criada",
+ "Unable to delete user." : "Não é possível excluir usuário.",
+ "Forbidden" : "Proibido",
+ "Invalid user" : "Usuário inválido",
+ "Unable to change mail address" : "Não é possível trocar o endereço de email",
+ "Email saved" : "E-mail salvo",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que você quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" : "Adicionar domínio confiável",
"Sending..." : "Enviando...",
@@ -82,7 +87,7 @@
"A valid username must be provided" : "Forneça um nome de usuário válido",
"Error creating user" : "Erro ao criar usuário",
"A valid password must be provided" : "Forneça uma senha válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Aviso: O diretório home para o usuário \"{user}\" já existe",
+ "A valid email must be provided" : "Deve ser informado um e-mail válido",
"__language_name__" : "__language_name__",
"Personal Info" : "Informação Pessoal",
"SSL root certificates" : "Certificados SSL raíz",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Aviso de Segurança",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Você está acessando %s via HTTP. Sugerimos você configurar o servidor para exigir o uso de HTTPS em seu lugar.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Seu diretório de dados e seus arquivos são, provavelmente, acessíveis a partir da internet. O arquivo htaccess. não está funcionando. Nós sugerimos fortemente que você configure o seu servidor web de uma forma que o diretório de dados não esteja mais acessível ou mova o diretório de dados para fora do raiz do servidor.",
+ "Read-Only config enabled" : "Somente-Leitura configuração ativada",
+ "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." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.",
"Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
@@ -108,17 +114,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usada como base de dados. Para grandes instalações recomendamos mudar isso. Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db: converter-type'",
"Module 'fileinfo' missing" : "Módulo 'fileinfo' faltando",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter uma melhor detecção do tipo de mídia (mime-type).",
- "Your PHP version is outdated" : "Sua versão de PHP está desatualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está desatualizada. Recomendamos a atualização para 5.3.8 ou mais recente, pois as versões mais antigas são conhecidas por serem quebradas. É possível que esta instalação não esteja funcionando corretamente.",
"PHP charset is not set to UTF-8" : "A configuração de caracteres no PHP não está definida para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A configuração de caracteres para o PHP não está definida para UTF-8. Isto pode causar problemas com caracteres não-ASCII em nomes de arquivos. Nós fortemente recomendamos a troca da definição de caracteres de 'default_charset' no arquivo de configuração php.ini para 'UTF-8'.",
"Locale not working" : "Localização não funcionando",
"System locale can not be set to a one which supports UTF-8." : "Localidade do sistema não pode ser definido como um que suporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isso significa que pode haver problemas com certos caracteres nos nomes de arquivo.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nós fortemente sugerimos instalar os pacotes necessários no seu sistema para suportar uma das seguintes localidades: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.",
"URL generation in notification emails" : "Geração de URL em e-mails de notificação",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
- "Connectivity Checks" : "Verificações de Conectividade",
+ "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\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwrite.cli.url\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
+ "Configuration Checks" : "Verificações de Configuração",
"No problems found" : "Nenhum problema encontrado",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, confira o <a href='%s'>guia de instalação</a>.",
"Last cron was executed at %s." : "Último cron foi executado em %s.",
@@ -131,17 +135,20 @@
"Allow users to share via link" : "Permitir que os usuários compartilhem por link",
"Enforce password protection" : "Reforce a proteção por senha",
"Allow public uploads" : "Permitir envio público",
+ "Allow users to send mail notification for shared files" : "Permitir aos usuários enviar notificação de email para arquivos compartilhados",
"Set default expiration date" : "Configurar a data de expiração",
"Expire after " : "Expirar depois de",
"days" : "dias",
"Enforce expiration date" : "Fazer cumprir a data de expiração",
"Allow resharing" : "Permitir recompartilhamento",
"Restrict users to only share with users in their groups" : "Restringir os usuários a compartilhar somente com os usuários em seus grupos",
- "Allow users to send mail notification for shared files" : "Permitir aos usuários enviar notificação de email para arquivos compartilhados",
+ "Allow users to send mail notification for shared files to other users" : "Permitir aos usuários enviar notificação de email de arquivos compartilhados para outros usuários",
"Exclude groups from sharing" : "Excluir grupos de compartilhamento",
"These groups will still be able to receive shares, but not to initiate them." : "Esses grupos ainda serão capazes de receber compartilhamentos, mas não para iniciá-los.",
"Enforce HTTPS" : "Forçar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Obrigar os clientes que se conectem a %s através de uma conexão criptografada.",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS para subdomínios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força os clientes se conectem a %s e subdomínios através de uma conexão criptografada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor, se conectar ao seu %s via HTTPS para forçar ativar ou desativar SSL.",
"This is used for sending out notifications." : "Isto é usado para o envio de notificações.",
"Send mode" : "Modo enviar",
@@ -169,15 +176,22 @@
"Documentation:" : "Documentação:",
"User Documentation" : "Documentação de Usuário",
"Admin Documentation" : "Documentação de Administrador",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Este aplicativo não pode ser instalado porque as seguintes dependências não forão cumpridas:",
"Update to %s" : "Atualizado para %s",
"Enable only for specific groups" : "Ativar apenas para grupos específicos",
"Uninstall App" : "Desinstalar Aplicativo",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Saúde!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n",
"Administrator Documentation" : "Documentação de Administrador",
"Online Documentation" : "Documentação Online",
"Forum" : "Fórum",
"Bugtracker" : "Rastreador de Bugs",
"Commercial Support" : "Suporte Comercial",
"Get the apps to sync your files" : "Faça com que os apps sincronizem seus arquivos",
+ "Desktop client" : "Cliente Desktop",
+ "Android app" : "App Android",
+ "iOS app" : "App iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se você deseja dar suporte ao projeto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">junte-se ao desenvolvimento</a>\n⇥⇥or\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">espalhe pelo mundo</a>!",
"Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Você usou <strong>%s</strong> do seu espaço de <strong>%s</strong>",
@@ -214,11 +228,15 @@
"Delete Encryption Keys" : "Eliminar Chaves de Criptografia",
"Show storage location" : "Mostrar localização de armazenamento",
"Show last log in" : "Mostrar o último acesso",
- "Login Name" : "Nome de Login",
+ "Show user backend" : "Mostrar administrador do usuário",
+ "Send email to new user" : "Enviar um email para o novo usuário",
+ "Show email address" : "Mostrar o endereço de email",
+ "Username" : "Nome de Usuário",
+ "E-Mail" : "E-Mail",
"Create" : "Criar",
"Admin Recovery Password" : "Recuperação da Senha do Administrador",
"Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação para recuperar os arquivos dos usuários durante a mudança de senha.",
- "Search Users and Groups" : "Pesquisar Usuários e Grupos",
+ "Search Users" : "Pesquisar Usuários",
"Add Group" : "Adicionar Grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor insira cota de armazenamento (ex: \"512\" ou \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Outro",
- "Username" : "Nome de Usuário",
"Group Admin for" : "Grupo Admin para",
"Quota" : "Cota",
"Storage Location" : "Local de Armazenamento",
+ "User Backend" : "Administrador do Usuário",
"Last Login" : "Último Login",
"change full name" : "alterar nome completo",
"set new password" : "definir nova senha",
+ "change email address" : "Trocar o endereço de email",
"Default" : "Padrão"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 6847eb46393..ce2e707597e 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -1,93 +1,95 @@
OC.L10N.register(
"settings",
{
- "Security & Setup Warnings" : "Avisos de Segurança e Configuração",
+ "Security & Setup Warnings" : "Avisos de Configuração e Segurança",
"Cron" : "Cron",
"Sharing" : "Partilha",
"Security" : "Segurança",
- "Email Server" : "Servidor de email",
+ "Email Server" : "Servidor de e-mail",
"Log" : "Registo",
"Authentication error" : "Erro na autenticação",
"Your full name has been changed." : "O seu nome completo foi alterado.",
"Unable to change full name" : "Não foi possível alterar o seu nome completo",
- "Group already exists" : "O grupo já existe",
- "Unable to add group" : "Impossível acrescentar o grupo",
"Files decrypted successfully" : "Ficheiros desencriptados com sucesso",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível desencriptar os seus arquivos. Verifique a sua owncloud.log ou pergunte ao seu administrador",
- "Couldn't decrypt your files, check your password and try again" : "Não foi possível desencriptar os seus arquivos. Verifique a sua senha e tente novamente",
- "Encryption keys deleted permanently" : "A chave de encriptação foi eliminada permanentemente",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível excluir permanentemente a sua chave de encriptação. Verifique a sua owncloud.log ou pergunte ao seu administrador",
- "Couldn't remove app." : "Impossível remover aplicação.",
- "Email saved" : "Email guardado",
- "Invalid email" : "Email inválido",
- "Unable to delete group" : "Impossível apagar grupo",
- "Unable to delete user" : "Impossível apagar utilizador",
- "Backups restored successfully" : "Cópias de segurança foram restauradas com sucesso",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nao foi possivel restaurar as suas chaves de encriptacao. Verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Couldn't decrypt your files, check your password and try again" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua palavra-passe e tente novamente",
+ "Encryption keys deleted permanently" : "As chaves de encriptação foram eliminadas para sempre",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível apagar as suas chaves de encriptação. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Couldn't remove app." : "Não foi possível remover a aplicação.",
+ "Backups restored successfully" : "Cópias de segurança restauradas com sucesso",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possivel restaurar as suas chaves de encriptacao. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido Inválido",
- "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles mesmos do grupo admin.",
- "Unable to add user to group %s" : "Impossível acrescentar utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Impossível apagar utilizador do grupo %s",
- "Couldn't update app." : "Não foi possível actualizar a aplicação.",
- "Wrong password" : "Password errada",
- "No user supplied" : "Nenhum utilizador especificado.",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor forneça uma palavra chave de recuperação de administrador, caso contrário todos os dados de utilizador serão perdidos",
- "Wrong admin recovery password. Please check the password and try again." : "Palavra chave de recuperação de administrador errada. Por favor verifique a palavra chave e tente de novo.",
- "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Não foi possível alterar a sua palavra-passe, mas a chave de encriptação foi atualizada.",
- "Unable to change password" : "Não foi possível alterar a sua password",
+ "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.",
+ "Wrong password" : "Palavra-passe errada",
+ "No user supplied" : "Nenhum utilizador especificado",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma palavra-passe de recuperação de administrador, caso contrário seráo perdidos todos os dados",
+ "Wrong admin recovery password. Please check the password and try again." : "Palavra-passe de recuperação de administrador errada. Por favor, verifique a palavra-passe e tente novamente.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Não foi possível alterar a sua palavra-passe, mas a chave de codificação foi atualizada com sucesso.",
+ "Unable to change password" : "Não foi possível alterar a sua palavra-passe ",
"Enabled" : "Ativada",
- "Not enabled" : "Desactivado",
+ "Not enabled" : "Desativada",
"Recommended" : "Recomendado",
+ "Group already exists." : "O grupo já existe.",
+ "Unable to add group." : "Impossível acrescentar o grupo.",
+ "Unable to delete group." : "Impossível apagar grupo.",
"Saved" : "Guardado",
- "test email settings" : "testar configurações de email",
- "If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail as configurações parecem estar correctas",
- "A problem occurred while sending the email. Please revise your settings." : "Um problema ocorreu ao enviar o email. Por favor verifique as suas definições.",
- "Email sent" : "E-mail enviado",
+ "test email settings" : "testar as definições de e-mail",
+ "If you received this email, the settings seem to be correct." : "Se recebeu este e-mail, as configurações parecem estar corretas",
+ "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema durante o envio do e-mail. Por favor, verifique as suas configurações..",
+ "Email sent" : "Mensagem enviada",
"You need to set your user email before being able to send test emails." : "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
+ "Invalid mail address" : "Endereço de correio eletrónico inválido",
+ "Unable to create user." : "Impossível criar o utilizador.",
+ "Unable to delete user." : "Impossível apagar o utilizador.",
+ "Forbidden" : "Proibido",
+ "Invalid user" : "Utilizador inválido",
+ "Email saved" : "E-mail guardado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" : "Adicionar domínio confiável ",
"Sending..." : "A enviar...",
"All" : "Todos",
- "Please wait...." : "Por favor aguarde...",
- "Error while disabling app" : "Erro enquanto desactivava a aplicação",
- "Disable" : "Desactivar",
- "Enable" : "Activar",
- "Error while enabling app" : "Erro enquanto activava a aplicação",
- "Updating...." : "A Actualizar...",
- "Error while updating app" : "Erro enquanto actualizava a aplicação",
- "Updated" : "Actualizado",
- "Uninstalling ...." : "Desinstalando ....",
- "Error while uninstalling app" : "Erro durante a desinstalação da aplicação",
+ "Please wait...." : "Por favor, aguarde...",
+ "Error while disabling app" : "Ocorreu um erro enquanto desativava a app",
+ "Disable" : "Desativar",
+ "Enable" : "Ativar",
+ "Error while enabling app" : "Ocorreu um erro enquanto ativava a app",
+ "Updating...." : "A atualizar...",
+ "Error while updating app" : "Ocorreu um erro enquanto atualizava a app",
+ "Updated" : "Atualizada",
+ "Uninstalling ...." : "A desinstalar....",
+ "Error while uninstalling app" : "Ocorreu um erro durante a desinstalação da app",
"Uninstall" : "Desinstalar",
- "Select a profile picture" : "Seleccione uma fotografia de perfil",
- "Very weak password" : "Password muito fraca",
- "Weak password" : "Password fraca",
- "So-so password" : "Password aceitável",
- "Good password" : "Password Forte",
- "Strong password" : "Password muito forte",
- "Valid until {date}" : "Válido até {date}",
- "Delete" : "Eliminar",
- "Decrypting files... Please wait, this can take some time." : "A desencriptar os ficheiros... Por favor aguarde, esta operação pode demorar algum tempo.",
- "Delete encryption keys permanently." : "Excluir as chaves encriptadas de forma permanente.",
- "Restore encryption keys." : "Restaurar chaves encriptadas.",
+ "Select a profile picture" : "Selecione uma fotografia de perfil",
+ "Very weak password" : "Palavra-passe muito fraca",
+ "Weak password" : "Palavra-passe fraca",
+ "So-so password" : "Palavra-passe aceitável",
+ "Good password" : "Palavra-passe boa",
+ "Strong password" : "Palavra-passe forte",
+ "Valid until {date}" : "Válida até {date}",
+ "Delete" : "Apagar",
+ "Decrypting files... Please wait, this can take some time." : "A descodificar os ficheiros... Por favor, aguarde, esta operação pode demorar algum tempo.",
+ "Delete encryption keys permanently." : "Apagar as chaves encriptadas para sempre.",
+ "Restore encryption keys." : "Restaurar as chaves encriptadas.",
"Groups" : "Grupos",
- "Unable to delete {objName}" : "Impossível apagar {objNome}",
- "Error creating group" : "Erro ao criar grupo",
- "A valid group name must be provided" : "Um nome válido do grupo tem de ser fornecido",
- "deleted {groupName}" : "apagar {Nome do grupo}",
- "undo" : "desfazer",
+ "Unable to delete {objName}" : "Não é possível apagar {objNome}",
+ "Error creating group" : "Ocorreu um erro ao criar o grupo",
+ "A valid group name must be provided" : "Deve ser indicado um nome de grupo válido",
+ "deleted {groupName}" : "{groupName} apagado",
+ "undo" : "Anular",
"no group" : "sem grupo",
"never" : "nunca",
- "deleted {userName}" : "apagar{utilizador}",
+ "deleted {userName}" : "{userName} apagado",
"add group" : "Adicionar grupo",
- "A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
- "Error creating user" : "Erro a criar utilizador",
- "A valid password must be provided" : "Uma password válida deve ser fornecida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atenção: a pasta pessoal do utilizador \"{user}\" já existe",
+ "A valid username must be provided" : "Deve ser indicado um nome de utilizador válido",
+ "Error creating user" : "Ocorreu um erro ao criar o utilizador",
+ "A valid password must be provided" : "Deve ser indicada uma palavra-passe válida",
"__language_name__" : "__language_name__",
"Personal Info" : "Informação Pessoal",
- "SSL root certificates" : "Certificados SSL de raiz",
+ "SSL root certificates" : "Certificados de raiz SSL",
"Encryption" : "Encriptação",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
"Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais",
@@ -95,32 +97,29 @@ OC.L10N.register(
"Errors and fatal issues" : "Erros e problemas fatais",
"Fatal issues only" : "Apenas problemas fatais",
"None" : "Nenhum",
- "Login" : "Login",
+ "Login" : "Iniciar Sessão",
"Plain" : "Plano",
- "NT LAN Manager" : "Gestor de NT LAN",
+ "NT LAN Manager" : "Gestor de REDE NT",
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Aviso de Segurança",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder %s via HTTP. Recomendamos vivamente que configure o servidor para forçar o uso de HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
- "Setup Warning" : "Aviso de setup",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder a %s via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS.",
+ "Read-Only config enabled" : "Configuração Só-de-Leitura ativada",
+ "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." : "A configuração Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.",
+ "Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado a remover blocos doc em linha. Isto vai fazer algumas aplicações basicas inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.",
- "Database Performance Info" : "Informação sobre desempenho da Base de Dados",
+ "Database Performance Info" : "Informação do Desempenho da Base de Dados",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usado como base de dados. Para grandes instalações nós recomendamos a alterar isso. Para mudar para outra base de dados use o comando de linha: 'occ db:convert-type'",
- "Module 'fileinfo' missing" : "Falta o módulo 'fileinfo'",
+ "Module 'fileinfo' missing" : "Módulo 'fileinfo' em falta",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.",
- "Your PHP version is outdated" : "A sua versão do PHP está ultrapassada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está ultrapassada. Recomendamos que actualize para a versão 5.3.8 ou mais recente, devido às versões anteriores conterem problemas. É também possível que esta instalação não esteja a funcionar correctamente.",
- "PHP charset is not set to UTF-8" : "PHP charset não está definido para UTF-8",
+ "PHP charset is not set to UTF-8" : "O conjunto de carateres PHP não está definido para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset não está definido como UTF-8. Isso pode causar grandes problemas com caracteres não-ASCII em nomes de arquivo. Recomendamos para alterar o valor de php.ini 'default_charset' para 'UTF-8'.",
- "Locale not working" : "Internacionalização não está a funcionar",
- "System locale can not be set to a one which supports UTF-8." : "Não é possível pôr as definições de sistema compatíveis com UTF-8.",
+ "Locale not working" : "A internacionalização não está a funcionar",
+ "System locale can not be set to a one which supports UTF-8." : "Não é possível definir a internacionalização do sistema para um que suporte o UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que podem haver problemas com alguns caracteres nos nomes dos ficheiros.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Recomendamos fortemente que instale no seu sistema todos os pacotes necessários para suportar os seguintes locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós recomendamos fortemente que instale no seu sistema os pacotes necessários para suportar uma das seguintes locallidades: %s.",
"URL generation in notification emails" : "Geração URL em e-mails de notificação",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não está instalada na raiz do domínio e usa o sistema cron, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" no ficheiro config.php para o caminho webroot da sua instalação (sugestão: \"%s\")",
- "Connectivity Checks" : "Verificações de Conectividade",
"No problems found" : "Nenhum problema encontrado",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor verifique <a href='%s'>installation guides</a>.",
"Last cron was executed at %s." : "O ultimo cron foi executado em %s.",
@@ -131,33 +130,35 @@ OC.L10N.register(
"Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.",
"Allow apps to use the Share API" : "Permitir que os utilizadores usem a API de partilha",
"Allow users to share via link" : "Permitir que os utilizadores partilhem através do link",
- "Enforce password protection" : "Forçar protecção da palavra passe",
+ "Enforce password protection" : "Forçar proteção por palavra-passe",
"Allow public uploads" : "Permitir Envios Públicos",
+ "Allow users to send mail notification for shared files" : "Permita que o utilizador envie notificações por correio electrónico para ficheiros partilhados",
"Set default expiration date" : "Especificar a data padrão de expiração",
"Expire after " : "Expira após",
"days" : "dias",
"Enforce expiration date" : "Forçar a data de expiração",
"Allow resharing" : "Permitir repartilha",
"Restrict users to only share with users in their groups" : "Restringe os utilizadores só a partilhar com utilizadores do seu grupo",
- "Allow users to send mail notification for shared files" : "Permita que o utilizador envie notificações por correio electrónico para ficheiros partilhados",
"Exclude groups from sharing" : "Excluir grupos das partilhas",
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderão receber partilhas, mas não poderão iniciá-las.",
"Enforce HTTPS" : "Forçar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forçar os clientes a ligar a %s através de uma ligação encriptada",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS para subdomínios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força os clientes a ligar a %s e a subdomínios via uma ligação encriptada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor ligue-se a %s através de uma ligação HTTPS para ligar/desligar o uso de ligação por SSL",
"This is used for sending out notifications." : "Isto é utilizado para enviar notificações",
- "Send mode" : "Modo de envio",
+ "Send mode" : "Modo de Envio",
"From address" : "Do endereço",
"mail" : "Correio",
- "Authentication method" : "Método de autenticação",
+ "Authentication method" : "Método de Autenticação",
"Authentication required" : "Autenticação necessária",
- "Server address" : "Endereço do servidor",
- "Port" : "Porto",
+ "Server address" : "Endereço do Servidor",
+ "Port" : "Porta",
"Credentials" : "Credenciais",
"SMTP Username" : "Nome de utilizador SMTP",
- "SMTP Password" : "Password SMTP",
+ "SMTP Password" : "Palavra-passe SMTP",
"Store credentials" : "Armazenar credenciais",
- "Test email settings" : "Testar configurações de email",
+ "Test email settings" : "Testar definições de e-mail",
"Send email" : "Enviar email",
"Log level" : "Nível do registo",
"More" : "Mais",
@@ -174,25 +175,28 @@ OC.L10N.register(
"Update to %s" : "Actualizar para %s",
"Enable only for specific groups" : "Activar só para grupos específicos",
"Uninstall App" : "Desinstalar aplicação",
+ "Cheers!" : "Parabéns!",
"Administrator Documentation" : "Documentação de administrador.",
"Online Documentation" : "Documentação Online",
"Forum" : "Fórum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Suporte Comercial",
"Get the apps to sync your files" : "Obtenha as aplicações para sincronizar os seus ficheiros",
+ "Android app" : "Aplicação Android",
+ "iOS app" : "Aplicação iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se quer ajudar no projecto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">aderir desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">espalhe a palavra</a>!",
"Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usou <strong>%s</strong> do disponivel <strong>%s</strong>",
- "Password" : "Password",
+ "Password" : "Palavra-passe",
"Your password was changed" : "A sua palavra-passe foi alterada",
- "Unable to change your password" : "Não foi possivel alterar a sua palavra-chave",
- "Current password" : "Palavra-chave actual",
- "New password" : "Nova palavra-chave",
- "Change password" : "Alterar palavra-chave",
+ "Unable to change your password" : "Não foi possível alterar a sua palavra-passe",
+ "Current password" : "Palavra-passe atual",
+ "New password" : "Nova palavra-passe",
+ "Change password" : "Alterar palavra-passe",
"Full Name" : "Nome completo",
"Email" : "Email",
"Your email address" : "O seu endereço de email",
- "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação de senha e receber notificações",
+ "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação da palavra-passe e receber notificações",
"Profile picture" : "Foto do perfil",
"Upload new" : "Carregar novo",
"Select new from Files" : "Seleccionar novo a partir dos ficheiros",
@@ -209,18 +213,19 @@ OC.L10N.register(
"Valid until %s" : "Válido até %s",
"Import Root Certificate" : "Importar Certificado Root",
"The encryption app is no longer enabled, please decrypt all your files" : "A aplicação de encriptação já não está ativa, por favor desincripte todos os seus ficheiros",
- "Log-in password" : "Password de entrada",
+ "Log-in password" : "Palavra-passe de Iniciar a Sessão",
"Decrypt all Files" : "Desencriptar todos os ficheiros",
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "As suas chaves de encriptação foram movidas para um local de segurança. Em caso de algo correr mal você pode restaurar as chaves. Só deve eliminar as chaves permanentemente se tiver certeza absoluta que os ficheiros são decrepitados correctamente.",
"Restore Encryption Keys" : "Restaurar as chaves de encriptação",
"Delete Encryption Keys" : "Apagar as chaves de encriptação",
"Show storage location" : "Mostrar a localização do armazenamento",
"Show last log in" : "Mostrar ultimo acesso de entrada",
- "Login Name" : "Nome de utilizador",
+ "Username" : "Nome de utilizador",
+ "E-Mail" : "Correio Eletrónico",
"Create" : "Criar",
- "Admin Recovery Password" : "Recuperar password de administrador",
- "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os arquivos de usuários durante a mudança de senha",
- "Search Users and Groups" : "Pesquisa Utilizadores e Grupos",
+ "Admin Recovery Password" : "Recuperação da Palavra-passe de Administrador",
+ "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os ficheiros dos utilizadores durante a mudança da palavra-passe",
+ "Search Users" : "Procurar Utilizadores",
"Add Group" : "Adicionar grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
@@ -229,13 +234,13 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Insira a quota de armazenamento (ex: \"512 MB\" ou \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Outro",
- "Username" : "Nome de utilizador",
"Group Admin for" : "Administrador de Grupo para",
"Quota" : "Quota",
"Storage Location" : "Localização do Armazenamento",
"Last Login" : "Ultimo acesso",
"change full name" : "alterar nome completo",
"set new password" : "definir nova palavra-passe",
+ "change email address" : "alterar endereço do correio eletrónico",
"Default" : "Padrão"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 6af97b64a8a..e6414eee113 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -1,91 +1,93 @@
{ "translations": {
- "Security & Setup Warnings" : "Avisos de Segurança e Configuração",
+ "Security & Setup Warnings" : "Avisos de Configuração e Segurança",
"Cron" : "Cron",
"Sharing" : "Partilha",
"Security" : "Segurança",
- "Email Server" : "Servidor de email",
+ "Email Server" : "Servidor de e-mail",
"Log" : "Registo",
"Authentication error" : "Erro na autenticação",
"Your full name has been changed." : "O seu nome completo foi alterado.",
"Unable to change full name" : "Não foi possível alterar o seu nome completo",
- "Group already exists" : "O grupo já existe",
- "Unable to add group" : "Impossível acrescentar o grupo",
"Files decrypted successfully" : "Ficheiros desencriptados com sucesso",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível desencriptar os seus arquivos. Verifique a sua owncloud.log ou pergunte ao seu administrador",
- "Couldn't decrypt your files, check your password and try again" : "Não foi possível desencriptar os seus arquivos. Verifique a sua senha e tente novamente",
- "Encryption keys deleted permanently" : "A chave de encriptação foi eliminada permanentemente",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível excluir permanentemente a sua chave de encriptação. Verifique a sua owncloud.log ou pergunte ao seu administrador",
- "Couldn't remove app." : "Impossível remover aplicação.",
- "Email saved" : "Email guardado",
- "Invalid email" : "Email inválido",
- "Unable to delete group" : "Impossível apagar grupo",
- "Unable to delete user" : "Impossível apagar utilizador",
- "Backups restored successfully" : "Cópias de segurança foram restauradas com sucesso",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nao foi possivel restaurar as suas chaves de encriptacao. Verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Couldn't decrypt your files, check your password and try again" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua palavra-passe e tente novamente",
+ "Encryption keys deleted permanently" : "As chaves de encriptação foram eliminadas para sempre",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível apagar as suas chaves de encriptação. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Couldn't remove app." : "Não foi possível remover a aplicação.",
+ "Backups restored successfully" : "Cópias de segurança restauradas com sucesso",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possivel restaurar as suas chaves de encriptacao. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido Inválido",
- "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles mesmos do grupo admin.",
- "Unable to add user to group %s" : "Impossível acrescentar utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Impossível apagar utilizador do grupo %s",
- "Couldn't update app." : "Não foi possível actualizar a aplicação.",
- "Wrong password" : "Password errada",
- "No user supplied" : "Nenhum utilizador especificado.",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor forneça uma palavra chave de recuperação de administrador, caso contrário todos os dados de utilizador serão perdidos",
- "Wrong admin recovery password. Please check the password and try again." : "Palavra chave de recuperação de administrador errada. Por favor verifique a palavra chave e tente de novo.",
- "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Não foi possível alterar a sua palavra-passe, mas a chave de encriptação foi atualizada.",
- "Unable to change password" : "Não foi possível alterar a sua password",
+ "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.",
+ "Wrong password" : "Palavra-passe errada",
+ "No user supplied" : "Nenhum utilizador especificado",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma palavra-passe de recuperação de administrador, caso contrário seráo perdidos todos os dados",
+ "Wrong admin recovery password. Please check the password and try again." : "Palavra-passe de recuperação de administrador errada. Por favor, verifique a palavra-passe e tente novamente.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Não foi possível alterar a sua palavra-passe, mas a chave de codificação foi atualizada com sucesso.",
+ "Unable to change password" : "Não foi possível alterar a sua palavra-passe ",
"Enabled" : "Ativada",
- "Not enabled" : "Desactivado",
+ "Not enabled" : "Desativada",
"Recommended" : "Recomendado",
+ "Group already exists." : "O grupo já existe.",
+ "Unable to add group." : "Impossível acrescentar o grupo.",
+ "Unable to delete group." : "Impossível apagar grupo.",
"Saved" : "Guardado",
- "test email settings" : "testar configurações de email",
- "If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail as configurações parecem estar correctas",
- "A problem occurred while sending the email. Please revise your settings." : "Um problema ocorreu ao enviar o email. Por favor verifique as suas definições.",
- "Email sent" : "E-mail enviado",
+ "test email settings" : "testar as definições de e-mail",
+ "If you received this email, the settings seem to be correct." : "Se recebeu este e-mail, as configurações parecem estar corretas",
+ "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema durante o envio do e-mail. Por favor, verifique as suas configurações..",
+ "Email sent" : "Mensagem enviada",
"You need to set your user email before being able to send test emails." : "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
+ "Invalid mail address" : "Endereço de correio eletrónico inválido",
+ "Unable to create user." : "Impossível criar o utilizador.",
+ "Unable to delete user." : "Impossível apagar o utilizador.",
+ "Forbidden" : "Proibido",
+ "Invalid user" : "Utilizador inválido",
+ "Email saved" : "E-mail guardado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" : "Adicionar domínio confiável ",
"Sending..." : "A enviar...",
"All" : "Todos",
- "Please wait...." : "Por favor aguarde...",
- "Error while disabling app" : "Erro enquanto desactivava a aplicação",
- "Disable" : "Desactivar",
- "Enable" : "Activar",
- "Error while enabling app" : "Erro enquanto activava a aplicação",
- "Updating...." : "A Actualizar...",
- "Error while updating app" : "Erro enquanto actualizava a aplicação",
- "Updated" : "Actualizado",
- "Uninstalling ...." : "Desinstalando ....",
- "Error while uninstalling app" : "Erro durante a desinstalação da aplicação",
+ "Please wait...." : "Por favor, aguarde...",
+ "Error while disabling app" : "Ocorreu um erro enquanto desativava a app",
+ "Disable" : "Desativar",
+ "Enable" : "Ativar",
+ "Error while enabling app" : "Ocorreu um erro enquanto ativava a app",
+ "Updating...." : "A atualizar...",
+ "Error while updating app" : "Ocorreu um erro enquanto atualizava a app",
+ "Updated" : "Atualizada",
+ "Uninstalling ...." : "A desinstalar....",
+ "Error while uninstalling app" : "Ocorreu um erro durante a desinstalação da app",
"Uninstall" : "Desinstalar",
- "Select a profile picture" : "Seleccione uma fotografia de perfil",
- "Very weak password" : "Password muito fraca",
- "Weak password" : "Password fraca",
- "So-so password" : "Password aceitável",
- "Good password" : "Password Forte",
- "Strong password" : "Password muito forte",
- "Valid until {date}" : "Válido até {date}",
- "Delete" : "Eliminar",
- "Decrypting files... Please wait, this can take some time." : "A desencriptar os ficheiros... Por favor aguarde, esta operação pode demorar algum tempo.",
- "Delete encryption keys permanently." : "Excluir as chaves encriptadas de forma permanente.",
- "Restore encryption keys." : "Restaurar chaves encriptadas.",
+ "Select a profile picture" : "Selecione uma fotografia de perfil",
+ "Very weak password" : "Palavra-passe muito fraca",
+ "Weak password" : "Palavra-passe fraca",
+ "So-so password" : "Palavra-passe aceitável",
+ "Good password" : "Palavra-passe boa",
+ "Strong password" : "Palavra-passe forte",
+ "Valid until {date}" : "Válida até {date}",
+ "Delete" : "Apagar",
+ "Decrypting files... Please wait, this can take some time." : "A descodificar os ficheiros... Por favor, aguarde, esta operação pode demorar algum tempo.",
+ "Delete encryption keys permanently." : "Apagar as chaves encriptadas para sempre.",
+ "Restore encryption keys." : "Restaurar as chaves encriptadas.",
"Groups" : "Grupos",
- "Unable to delete {objName}" : "Impossível apagar {objNome}",
- "Error creating group" : "Erro ao criar grupo",
- "A valid group name must be provided" : "Um nome válido do grupo tem de ser fornecido",
- "deleted {groupName}" : "apagar {Nome do grupo}",
- "undo" : "desfazer",
+ "Unable to delete {objName}" : "Não é possível apagar {objNome}",
+ "Error creating group" : "Ocorreu um erro ao criar o grupo",
+ "A valid group name must be provided" : "Deve ser indicado um nome de grupo válido",
+ "deleted {groupName}" : "{groupName} apagado",
+ "undo" : "Anular",
"no group" : "sem grupo",
"never" : "nunca",
- "deleted {userName}" : "apagar{utilizador}",
+ "deleted {userName}" : "{userName} apagado",
"add group" : "Adicionar grupo",
- "A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
- "Error creating user" : "Erro a criar utilizador",
- "A valid password must be provided" : "Uma password válida deve ser fornecida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atenção: a pasta pessoal do utilizador \"{user}\" já existe",
+ "A valid username must be provided" : "Deve ser indicado um nome de utilizador válido",
+ "Error creating user" : "Ocorreu um erro ao criar o utilizador",
+ "A valid password must be provided" : "Deve ser indicada uma palavra-passe válida",
"__language_name__" : "__language_name__",
"Personal Info" : "Informação Pessoal",
- "SSL root certificates" : "Certificados SSL de raiz",
+ "SSL root certificates" : "Certificados de raiz SSL",
"Encryption" : "Encriptação",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
"Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais",
@@ -93,32 +95,29 @@
"Errors and fatal issues" : "Erros e problemas fatais",
"Fatal issues only" : "Apenas problemas fatais",
"None" : "Nenhum",
- "Login" : "Login",
+ "Login" : "Iniciar Sessão",
"Plain" : "Plano",
- "NT LAN Manager" : "Gestor de NT LAN",
+ "NT LAN Manager" : "Gestor de REDE NT",
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Aviso de Segurança",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder %s via HTTP. Recomendamos vivamente que configure o servidor para forçar o uso de HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
- "Setup Warning" : "Aviso de setup",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder a %s via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS.",
+ "Read-Only config enabled" : "Configuração Só-de-Leitura ativada",
+ "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." : "A configuração Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.",
+ "Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado a remover blocos doc em linha. Isto vai fazer algumas aplicações basicas inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.",
- "Database Performance Info" : "Informação sobre desempenho da Base de Dados",
+ "Database Performance Info" : "Informação do Desempenho da Base de Dados",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usado como base de dados. Para grandes instalações nós recomendamos a alterar isso. Para mudar para outra base de dados use o comando de linha: 'occ db:convert-type'",
- "Module 'fileinfo' missing" : "Falta o módulo 'fileinfo'",
+ "Module 'fileinfo' missing" : "Módulo 'fileinfo' em falta",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.",
- "Your PHP version is outdated" : "A sua versão do PHP está ultrapassada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está ultrapassada. Recomendamos que actualize para a versão 5.3.8 ou mais recente, devido às versões anteriores conterem problemas. É também possível que esta instalação não esteja a funcionar correctamente.",
- "PHP charset is not set to UTF-8" : "PHP charset não está definido para UTF-8",
+ "PHP charset is not set to UTF-8" : "O conjunto de carateres PHP não está definido para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset não está definido como UTF-8. Isso pode causar grandes problemas com caracteres não-ASCII em nomes de arquivo. Recomendamos para alterar o valor de php.ini 'default_charset' para 'UTF-8'.",
- "Locale not working" : "Internacionalização não está a funcionar",
- "System locale can not be set to a one which supports UTF-8." : "Não é possível pôr as definições de sistema compatíveis com UTF-8.",
+ "Locale not working" : "A internacionalização não está a funcionar",
+ "System locale can not be set to a one which supports UTF-8." : "Não é possível definir a internacionalização do sistema para um que suporte o UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que podem haver problemas com alguns caracteres nos nomes dos ficheiros.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Recomendamos fortemente que instale no seu sistema todos os pacotes necessários para suportar os seguintes locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós recomendamos fortemente que instale no seu sistema os pacotes necessários para suportar uma das seguintes locallidades: %s.",
"URL generation in notification emails" : "Geração URL em e-mails de notificação",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não está instalada na raiz do domínio e usa o sistema cron, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" no ficheiro config.php para o caminho webroot da sua instalação (sugestão: \"%s\")",
- "Connectivity Checks" : "Verificações de Conectividade",
"No problems found" : "Nenhum problema encontrado",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor verifique <a href='%s'>installation guides</a>.",
"Last cron was executed at %s." : "O ultimo cron foi executado em %s.",
@@ -129,33 +128,35 @@
"Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.",
"Allow apps to use the Share API" : "Permitir que os utilizadores usem a API de partilha",
"Allow users to share via link" : "Permitir que os utilizadores partilhem através do link",
- "Enforce password protection" : "Forçar protecção da palavra passe",
+ "Enforce password protection" : "Forçar proteção por palavra-passe",
"Allow public uploads" : "Permitir Envios Públicos",
+ "Allow users to send mail notification for shared files" : "Permita que o utilizador envie notificações por correio electrónico para ficheiros partilhados",
"Set default expiration date" : "Especificar a data padrão de expiração",
"Expire after " : "Expira após",
"days" : "dias",
"Enforce expiration date" : "Forçar a data de expiração",
"Allow resharing" : "Permitir repartilha",
"Restrict users to only share with users in their groups" : "Restringe os utilizadores só a partilhar com utilizadores do seu grupo",
- "Allow users to send mail notification for shared files" : "Permita que o utilizador envie notificações por correio electrónico para ficheiros partilhados",
"Exclude groups from sharing" : "Excluir grupos das partilhas",
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderão receber partilhas, mas não poderão iniciá-las.",
"Enforce HTTPS" : "Forçar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forçar os clientes a ligar a %s através de uma ligação encriptada",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS para subdomínios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força os clientes a ligar a %s e a subdomínios via uma ligação encriptada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor ligue-se a %s através de uma ligação HTTPS para ligar/desligar o uso de ligação por SSL",
"This is used for sending out notifications." : "Isto é utilizado para enviar notificações",
- "Send mode" : "Modo de envio",
+ "Send mode" : "Modo de Envio",
"From address" : "Do endereço",
"mail" : "Correio",
- "Authentication method" : "Método de autenticação",
+ "Authentication method" : "Método de Autenticação",
"Authentication required" : "Autenticação necessária",
- "Server address" : "Endereço do servidor",
- "Port" : "Porto",
+ "Server address" : "Endereço do Servidor",
+ "Port" : "Porta",
"Credentials" : "Credenciais",
"SMTP Username" : "Nome de utilizador SMTP",
- "SMTP Password" : "Password SMTP",
+ "SMTP Password" : "Palavra-passe SMTP",
"Store credentials" : "Armazenar credenciais",
- "Test email settings" : "Testar configurações de email",
+ "Test email settings" : "Testar definições de e-mail",
"Send email" : "Enviar email",
"Log level" : "Nível do registo",
"More" : "Mais",
@@ -172,25 +173,28 @@
"Update to %s" : "Actualizar para %s",
"Enable only for specific groups" : "Activar só para grupos específicos",
"Uninstall App" : "Desinstalar aplicação",
+ "Cheers!" : "Parabéns!",
"Administrator Documentation" : "Documentação de administrador.",
"Online Documentation" : "Documentação Online",
"Forum" : "Fórum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Suporte Comercial",
"Get the apps to sync your files" : "Obtenha as aplicações para sincronizar os seus ficheiros",
+ "Android app" : "Aplicação Android",
+ "iOS app" : "Aplicação iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se quer ajudar no projecto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">aderir desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">espalhe a palavra</a>!",
"Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usou <strong>%s</strong> do disponivel <strong>%s</strong>",
- "Password" : "Password",
+ "Password" : "Palavra-passe",
"Your password was changed" : "A sua palavra-passe foi alterada",
- "Unable to change your password" : "Não foi possivel alterar a sua palavra-chave",
- "Current password" : "Palavra-chave actual",
- "New password" : "Nova palavra-chave",
- "Change password" : "Alterar palavra-chave",
+ "Unable to change your password" : "Não foi possível alterar a sua palavra-passe",
+ "Current password" : "Palavra-passe atual",
+ "New password" : "Nova palavra-passe",
+ "Change password" : "Alterar palavra-passe",
"Full Name" : "Nome completo",
"Email" : "Email",
"Your email address" : "O seu endereço de email",
- "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação de senha e receber notificações",
+ "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação da palavra-passe e receber notificações",
"Profile picture" : "Foto do perfil",
"Upload new" : "Carregar novo",
"Select new from Files" : "Seleccionar novo a partir dos ficheiros",
@@ -207,18 +211,19 @@
"Valid until %s" : "Válido até %s",
"Import Root Certificate" : "Importar Certificado Root",
"The encryption app is no longer enabled, please decrypt all your files" : "A aplicação de encriptação já não está ativa, por favor desincripte todos os seus ficheiros",
- "Log-in password" : "Password de entrada",
+ "Log-in password" : "Palavra-passe de Iniciar a Sessão",
"Decrypt all Files" : "Desencriptar todos os ficheiros",
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "As suas chaves de encriptação foram movidas para um local de segurança. Em caso de algo correr mal você pode restaurar as chaves. Só deve eliminar as chaves permanentemente se tiver certeza absoluta que os ficheiros são decrepitados correctamente.",
"Restore Encryption Keys" : "Restaurar as chaves de encriptação",
"Delete Encryption Keys" : "Apagar as chaves de encriptação",
"Show storage location" : "Mostrar a localização do armazenamento",
"Show last log in" : "Mostrar ultimo acesso de entrada",
- "Login Name" : "Nome de utilizador",
+ "Username" : "Nome de utilizador",
+ "E-Mail" : "Correio Eletrónico",
"Create" : "Criar",
- "Admin Recovery Password" : "Recuperar password de administrador",
- "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os arquivos de usuários durante a mudança de senha",
- "Search Users and Groups" : "Pesquisa Utilizadores e Grupos",
+ "Admin Recovery Password" : "Recuperação da Palavra-passe de Administrador",
+ "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os ficheiros dos utilizadores durante a mudança da palavra-passe",
+ "Search Users" : "Procurar Utilizadores",
"Add Group" : "Adicionar grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
@@ -227,13 +232,13 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Insira a quota de armazenamento (ex: \"512 MB\" ou \"12 GB\")",
"Unlimited" : "Ilimitado",
"Other" : "Outro",
- "Username" : "Nome de utilizador",
"Group Admin for" : "Administrador de Grupo para",
"Quota" : "Quota",
"Storage Location" : "Localização do Armazenamento",
"Last Login" : "Ultimo acesso",
"change full name" : "alterar nome completo",
"set new password" : "definir nova palavra-passe",
+ "change email address" : "alterar endereço do correio eletrónico",
"Default" : "Padrão"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js
index f903cbcda9c..3a8f42484ab 100644
--- a/settings/l10n/ro.js
+++ b/settings/l10n/ro.js
@@ -8,15 +8,9 @@ OC.L10N.register(
"Authentication error" : "Eroare la autentificare",
"Your full name has been changed." : "Numele tău complet a fost schimbat.",
"Unable to change full name" : "Nu s-a puput schimba numele complet",
- "Group already exists" : "Grupul există deja",
- "Unable to add group" : "Nu s-a putut adăuga grupul",
"Files decrypted successfully" : "Fișierele au fost decriptate cu succes",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nu s-a puput decripta fișierele tale, verifică owncloud.log sau întreabă administratorul",
"Couldn't decrypt your files, check your password and try again" : "Nu s-a puput decripta fișierele tale, verifică parola și încearcă din nou",
- "Email saved" : "E-mail salvat",
- "Invalid email" : "E-mail invalid",
- "Unable to delete group" : "Nu s-a putut șterge grupul",
- "Unable to delete user" : "Nu s-a putut șterge utilizatorul",
"Language changed" : "Limba a fost schimbată",
"Invalid request" : "Cerere eronată",
"Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul admin",
@@ -32,6 +26,7 @@ OC.L10N.register(
"test email settings" : "verifică setările de e-mail",
"If you received this email, the settings seem to be correct." : "Dacă ai primit acest e-mail atunci setările par a fi corecte.",
"Email sent" : "Mesajul a fost expediat",
+ "Email saved" : "E-mail salvat",
"Sending..." : "Se expediază...",
"All" : "Toate ",
"Please wait...." : "Aşteptaţi vă rog....",
@@ -56,7 +51,6 @@ OC.L10N.register(
"A valid username must be provided" : "Trebuie să furnizaţi un nume de utilizator valid",
"Error creating user" : "Eroare la crearea utilizatorului",
"A valid password must be provided" : "Trebuie să furnizaţi o parolă validă",
- "Warning: Home directory for user \"{user}\" already exists" : "Avertizare: Dosarul Acasă pentru utilizatorul \"{user}\" deja există",
"__language_name__" : "_language_name_",
"SSL root certificates" : "Certificate SSL root",
"Encryption" : "Încriptare",
@@ -68,14 +62,13 @@ OC.L10N.register(
"Setup Warning" : "Atenţie la implementare",
"Module 'fileinfo' missing" : "Modulul \"Fileinfo\" lipsește",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Modulul PHP \"Fileinfo\" lipsește. Va recomandam sa activaţi acest modul pentru a obține cele mai bune rezultate cu detectarea mime-type.",
- "Your PHP version is outdated" : "Versiunea PHP folosită este învechită",
"Locale not working" : "Localizarea nu funcționează",
"Please double check the <a href='%s'>installation guides</a>." : "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</a>.",
"Execute one task with each page loaded" : "Execută o sarcină la fiecare pagină încărcată",
"Allow apps to use the Share API" : "Permite aplicațiilor să folosească API-ul de partajare",
"Allow public uploads" : "Permite încărcări publice",
- "Allow resharing" : "Permite repartajarea",
"Allow users to send mail notification for shared files" : "Permite utilizatorilor sa expedieze notificări prin e-mail pentru dosarele comune",
+ "Allow resharing" : "Permite repartajarea",
"Forces the clients to connect to %s via an encrypted connection." : "Forțează clienții să se conecteze la %s folosind o conexiune sigură",
"Send mode" : "Modul de expediere",
"Authentication method" : "Modul de autentificare",
@@ -121,7 +114,7 @@ OC.L10N.register(
"Import Root Certificate" : "Importă certificat root",
"Log-in password" : "Parolă",
"Decrypt all Files" : "Decriptează toate fișierele",
- "Login Name" : "Autentificare",
+ "Username" : "Nume utilizator",
"Create" : "Crează",
"Admin Recovery Password" : "Parolă de recuperare a Administratorului",
"Enter the recovery password in order to recover the users files during password change" : "Introdu parola de recuperare pentru a recupera fișierele utilizatorilor în timpul schimbării parolei",
@@ -129,7 +122,6 @@ OC.L10N.register(
"Default Quota" : "Cotă implicită",
"Unlimited" : "Nelimitată",
"Other" : "Altele",
- "Username" : "Nume utilizator",
"Quota" : "Cotă",
"change full name" : "schimbă numele complet",
"set new password" : "setează parolă nouă",
diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json
index 39abac22679..0b0db32c56c 100644
--- a/settings/l10n/ro.json
+++ b/settings/l10n/ro.json
@@ -6,15 +6,9 @@
"Authentication error" : "Eroare la autentificare",
"Your full name has been changed." : "Numele tău complet a fost schimbat.",
"Unable to change full name" : "Nu s-a puput schimba numele complet",
- "Group already exists" : "Grupul există deja",
- "Unable to add group" : "Nu s-a putut adăuga grupul",
"Files decrypted successfully" : "Fișierele au fost decriptate cu succes",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nu s-a puput decripta fișierele tale, verifică owncloud.log sau întreabă administratorul",
"Couldn't decrypt your files, check your password and try again" : "Nu s-a puput decripta fișierele tale, verifică parola și încearcă din nou",
- "Email saved" : "E-mail salvat",
- "Invalid email" : "E-mail invalid",
- "Unable to delete group" : "Nu s-a putut șterge grupul",
- "Unable to delete user" : "Nu s-a putut șterge utilizatorul",
"Language changed" : "Limba a fost schimbată",
"Invalid request" : "Cerere eronată",
"Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul admin",
@@ -30,6 +24,7 @@
"test email settings" : "verifică setările de e-mail",
"If you received this email, the settings seem to be correct." : "Dacă ai primit acest e-mail atunci setările par a fi corecte.",
"Email sent" : "Mesajul a fost expediat",
+ "Email saved" : "E-mail salvat",
"Sending..." : "Se expediază...",
"All" : "Toate ",
"Please wait...." : "Aşteptaţi vă rog....",
@@ -54,7 +49,6 @@
"A valid username must be provided" : "Trebuie să furnizaţi un nume de utilizator valid",
"Error creating user" : "Eroare la crearea utilizatorului",
"A valid password must be provided" : "Trebuie să furnizaţi o parolă validă",
- "Warning: Home directory for user \"{user}\" already exists" : "Avertizare: Dosarul Acasă pentru utilizatorul \"{user}\" deja există",
"__language_name__" : "_language_name_",
"SSL root certificates" : "Certificate SSL root",
"Encryption" : "Încriptare",
@@ -66,14 +60,13 @@
"Setup Warning" : "Atenţie la implementare",
"Module 'fileinfo' missing" : "Modulul \"Fileinfo\" lipsește",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Modulul PHP \"Fileinfo\" lipsește. Va recomandam sa activaţi acest modul pentru a obține cele mai bune rezultate cu detectarea mime-type.",
- "Your PHP version is outdated" : "Versiunea PHP folosită este învechită",
"Locale not working" : "Localizarea nu funcționează",
"Please double check the <a href='%s'>installation guides</a>." : "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</a>.",
"Execute one task with each page loaded" : "Execută o sarcină la fiecare pagină încărcată",
"Allow apps to use the Share API" : "Permite aplicațiilor să folosească API-ul de partajare",
"Allow public uploads" : "Permite încărcări publice",
- "Allow resharing" : "Permite repartajarea",
"Allow users to send mail notification for shared files" : "Permite utilizatorilor sa expedieze notificări prin e-mail pentru dosarele comune",
+ "Allow resharing" : "Permite repartajarea",
"Forces the clients to connect to %s via an encrypted connection." : "Forțează clienții să se conecteze la %s folosind o conexiune sigură",
"Send mode" : "Modul de expediere",
"Authentication method" : "Modul de autentificare",
@@ -119,7 +112,7 @@
"Import Root Certificate" : "Importă certificat root",
"Log-in password" : "Parolă",
"Decrypt all Files" : "Decriptează toate fișierele",
- "Login Name" : "Autentificare",
+ "Username" : "Nume utilizator",
"Create" : "Crează",
"Admin Recovery Password" : "Parolă de recuperare a Administratorului",
"Enter the recovery password in order to recover the users files during password change" : "Introdu parola de recuperare pentru a recupera fișierele utilizatorilor în timpul schimbării parolei",
@@ -127,7 +120,6 @@
"Default Quota" : "Cotă implicită",
"Unlimited" : "Nelimitată",
"Other" : "Altele",
- "Username" : "Nume utilizator",
"Quota" : "Cotă",
"change full name" : "schimbă numele complet",
"set new password" : "setează parolă nouă",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 4e3eea6d1ea..3c6c1fd956f 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -10,20 +10,14 @@ OC.L10N.register(
"Authentication error" : "Ошибка аутентификации",
"Your full name has been changed." : "Ваше полное имя было изменено.",
"Unable to change full name" : "Невозможно изменить полное имя",
- "Group already exists" : "Группа уже существует",
- "Unable to add group" : "Невозможно добавить группу",
"Files decrypted successfully" : "Дешифрование файлов прошло успешно",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Ошибка при дешифровании файлов. Обратитесь к вашему системному администратору. Доп информация в owncloud.log",
- "Couldn't decrypt your files, check your password and try again" : "Ошибка при дешифровании файлов. Проверьте Ваш пароль и повторите попытку",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Не удалось расшифровать ваши файлы, проверьте файл owncloud.log или обратитесь к вашему администратору.",
+ "Couldn't decrypt your files, check your password and try again" : "Ошибка при дешифровании файлов. Проверьте пароль и повторите попытку",
"Encryption keys deleted permanently" : "Ключи шифрования перманентно удалены",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Не получается удалить ваши ключи шифрования, пожалуйста проверьте файл owncloud.log или обратитесь к Администратору",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Не удалось удалить ваши ключи шифрования, проверьте файл owncloud.log или обратитесь к вашему администратору",
"Couldn't remove app." : "Невозможно удалить приложение.",
- "Email saved" : "Email сохранен",
- "Invalid email" : "Неправильный Email",
- "Unable to delete group" : "Невозможно удалить группу",
- "Unable to delete user" : "Невозможно удалить пользователя",
"Backups restored successfully" : "Резервная копия успешно восстановлена",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Не получается восстановить ваши ключи шифрования, пожалуйста проверьте файл owncloud.log или обратитесь к Администратору.",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Не удалось восстановить ваши ключи шифрования, проверьте файл owncloud.log или обратитесь к вашему администратору.",
"Language changed" : "Язык изменён",
"Invalid request" : "Неправильный запрос",
"Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы admin",
@@ -32,19 +26,30 @@ OC.L10N.register(
"Couldn't update app." : "Невозможно обновить приложение",
"Wrong password" : "Неправильный пароль",
"No user supplied" : "Пользователь не задан",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "Пожалуйста введите администраторский пароль восстановления, иначе все пользовательские данные будут утеряны",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Введите администраторский пароль восстановления, иначе все пользовательские данные будут утеряны",
"Wrong admin recovery password. Please check the password and try again." : "Неправильный пароль восстановления. Проверьте пароль и попробуйте еще раз.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Используемый механизм не поддерживает смену паролей, но пользовательский ключ шифрования был успешно обновлён",
"Unable to change password" : "Невозможно изменить пароль",
"Enabled" : "Включено",
"Not enabled" : "Выключено",
"Recommended" : "Рекомендовано",
+ "Group already exists." : "Группа уже существует.",
+ "Unable to add group." : "Невозможно добавить группу.",
+ "Unable to delete group." : "Невозможно удалить группу.",
"Saved" : "Сохранено",
"test email settings" : "проверить настройки почты",
"If you received this email, the settings seem to be correct." : "Если вы получили это письмо, настройки верны.",
- "A problem occurred while sending the email. Please revise your settings." : "Возникла проблема при отправке письма. Пожалуйста, проверьте ваши настройки.",
+ "A problem occurred while sending the email. Please revise your settings." : "Возникла проблема при отправке письма. Проверьте ваши настройки.",
"Email sent" : "Письмо отправлено",
"You need to set your user email before being able to send test emails." : "Вы должны настроить свой e-mail пользователя прежде чем отправлять тестовые сообщения.",
+ "Invalid mail address" : "Некорректный почтовый адрес",
+ "Unable to create user." : "Невозможно создать пользователя.",
+ "Your %s account was created" : "Учетная запись %s создана",
+ "Unable to delete user." : "Невозможно удалить пользователя.",
+ "Forbidden" : "Запрещено",
+ "Invalid user" : "Неверный пользователь",
+ "Unable to change mail address" : "Невозможно изменить адрес электронной почты",
+ "Email saved" : "Email сохранен",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
"Sending..." : "Отправляется ...",
@@ -83,8 +88,8 @@ OC.L10N.register(
"add group" : "добавить группу",
"A valid username must be provided" : "Укажите правильное имя пользователя",
"Error creating user" : "Ошибка создания пользователя",
- "A valid password must be provided" : "Укажите валидный пароль",
- "Warning: Home directory for user \"{user}\" already exists" : "Предупреждение: домашняя папка пользователя \"{user}\" уже существует",
+ "A valid password must be provided" : "Предоставте подходящий пароль",
+ "A valid email must be provided" : "Введите корректный адрес email",
"__language_name__" : "Русский ",
"Personal Info" : "Личная информация",
"SSL root certificates" : "Корневые сертификаты SSL",
@@ -102,7 +107,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Предупреждение безопасности",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Вы обращаетесь к %s используя HTTP. Мы настоятельно рекомендуем вам настроить сервер на использование HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Похоже, что папка с Вашими данными и Ваши файлы доступны из интернета. Файл .htaccess не работает. Мы настойчиво предлагаем Вам сконфигурировать вебсервер таким образом, чтобы папка с Вашими данными более не была доступна или переместите папку с данными куда-нибудь в другое место вне основной папки документов вебсервера.",
+ "Read-Only config enabled" : "Конфигурационный файл в режиме только для чтения.",
+ "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." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса не возможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.",
"Setup Warning" : "Предупреждение установки",
"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.",
@@ -110,19 +116,17 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В качестве Базы Данных используется SQLite. Для больших установок рекомендуется использовать другие типы Баз Данных. Чтобы переехать на другую Базу Данных используйте инструмент командной строки: 'ooc: db:conver-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' отсутствует",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.",
- "Your PHP version is outdated" : "Ваша версия PHP устарела",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваша версия PHP устарела. Мы настоятельно рекомендуем обновиться до 5.3.8 или новее, так как старые версии работают не корректно. Вполне возможно, что эта установка не работает должным образом.",
"PHP charset is not set to UTF-8" : "Кодировка PHP не совпадает с UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодировка PHP не совпадает с UTF-8. Это может вызвать трудности с именами файлов, содержащими нелатинские символы. Мы настоятельно рекомендуем сменить значение переменной default_charset в файле php.ini на UTF-8.",
"Locale not working" : "Локализация не работает",
"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 to install the required packages on your system to support one of the following locales: %s." : "Мы настоятельно рекомендуем установить требуемые пакеты в систему, для поддержки одной из следующих локалей: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.",
"URL generation in notification emails" : "Генерирование URL в уведомляющих электронных письмах",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует планировщик cron системы, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию verwritewebroot файла config.php равной пути папки установки. (Вероятно, это \"%s\".)",
- "Connectivity Checks" : "Проверка соединения",
+ "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\")" : "Если ваша копия ownCloud установлена не в корне домена и использует планировщик cron системы, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)",
+ "Configuration Checks" : "Проверка конфигурации",
"No problems found" : "Проблемы не найдены",
- "Please double check the <a href='%s'>installation guides</a>." : "Пожалуйста, дважды просмотрите <a href='%s'>инструкции по установке</a>.",
+ "Please double check the <a href='%s'>installation guides</a>." : "Подробно изучите <a href='%s'>инструкции по установке</a>.",
"Last cron was executed at %s." : "Последняя cron-задача была запущена: %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Последняя cron-задача была запущена: %s. Это было больше часа назад, кажется что-то не так.",
"Cron was not executed yet!" : "Cron-задачи ещё не запускались!",
@@ -133,20 +137,23 @@ OC.L10N.register(
"Allow users to share via link" : "Разрешить пользователям публикации через ссылки",
"Enforce password protection" : "Защита паролем обязательна",
"Allow public uploads" : "Разрешить открытые загрузки",
+ "Allow users to send mail notification for shared files" : "Разрешить пользователям оповещать почтой об открытии доступа к файлам",
"Set default expiration date" : "Установить срок действия по-умолчанию",
"Expire after " : "Заканчивается через",
"days" : "дней",
"Enforce expiration date" : "Срок действия обязателен",
- "Allow resharing" : "Разрешить переоткрытие общего доступа",
- "Restrict users to only share with users in their groups" : "Разрешить пользователям публикации только внутри их групп",
- "Allow users to send mail notification for shared files" : "Разрешить пользователю оповещать почтой о расшаренных файлах",
+ "Allow resharing" : "Разрешить повторное открытие общего доступа",
+ "Restrict users to only share with users in their groups" : "Разрешить пользователям делиться только с членами их групп",
+ "Allow users to send mail notification for shared files to other users" : "Разрешить пользователям оповещать почтой других пользователей об открытии доступа к файлам",
"Exclude groups from sharing" : "Исключить группы из общего доступа",
- "These groups will still be able to receive shares, but not to initiate them." : "Эти группы смогут получать общие файлы, но не смогут отправлять их.",
+ "These groups will still be able to receive shares, but not to initiate them." : "Эти группы смогут получать общие ресурсы, но не могут их принять.",
"Enforce HTTPS" : "HTTPS соединение обязательно",
"Forces the clients to connect to %s via an encrypted connection." : "Принудить клиентов подключаться к %s через шифрованное соединение.",
+ "Enforce HTTPS for subdomains" : "HTTPS соединение обязательно для субдоменов",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Принудить клиентов подключаться к %s и субдоменам через шифрованное соединение.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Пожалуйста, подключитесь к %s используя HTTPS чтобы включить или отключить обязательные SSL подключения.",
"This is used for sending out notifications." : "Используется для отправки уведомлений.",
- "Send mode" : "Отправить сообщение",
+ "Send mode" : "Способ отправки",
"From address" : "Адрес отправителя",
"mail" : "почта",
"Authentication method" : "Метод проверки подлинности",
@@ -156,9 +163,9 @@ OC.L10N.register(
"Credentials" : "Учётные данные",
"SMTP Username" : "Пользователь SMTP",
"SMTP Password" : "Пароль SMTP",
- "Store credentials" : "Хранить учётные данные",
+ "Store credentials" : "Сохранить учётные данные",
"Test email settings" : "Проверить настройки почты",
- "Send email" : "Отправить сообщение",
+ "Send email" : "Отправить email",
"Log level" : "Уровень детализации журнала",
"More" : "Больше",
"Less" : "Меньше",
@@ -166,32 +173,39 @@ OC.L10N.register(
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Разрабатывается <a href=\"http://ownCloud.org/contact\" target=\"_blank\">сообществом ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">исходный код</a> доступен под лицензией <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Ещё приложения",
"Add your app" : "Добавить своё приложение",
- "by" : ":",
+ "by" : "автор",
"licensed" : "Лицензировано",
"Documentation:" : "Документация:",
"User Documentation" : "Пользовательская документация",
"Admin Documentation" : "Документация администратора",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Приложение не может быть установлено, следующие зависимости не удовлетворены:",
"Update to %s" : "Обновить до %s",
"Enable only for specific groups" : "Включить только для этих групп",
"Uninstall App" : "Удалить приложение",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здравствуйте,<br><br>Просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: %s<br>Зайти: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Удачи!",
+ "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",
"Administrator Documentation" : "Документация администратора",
"Online Documentation" : "Online документация",
"Forum" : "Форум",
"Bugtracker" : "Багтрекер",
"Commercial Support" : "Коммерческая поддержка",
"Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов",
+ "Desktop client" : "Клиент для ПК",
+ "Android app" : "Android приложение",
+ "iOS app" : "iOS приложение",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Если вы хотите поддержать проект,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">присоединяйтесь к разработке</a>\n\t\tиди\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">содействуйте распространению</a>!",
"Show First Run Wizard again" : "Показать помощник настройки",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Вы использовали <strong>%s</strong> из доступных <strong>%s</strong>",
"Password" : "Пароль",
- "Your password was changed" : "Ваш пароль изменён",
+ "Your password was changed" : "Пароль изменён",
"Unable to change your password" : "Невозможно сменить пароль",
"Current password" : "Текущий пароль",
"New password" : "Новый пароль",
"Change password" : "Сменить пароль",
"Full Name" : "Полное имя",
"Email" : "E-mail",
- "Your email address" : "Ваш адрес электронной почты",
+ "Your email address" : "Адрес электронной почты",
"Fill in an email address to enable password recovery and receive notifications" : "Введите свой email-адрес для того, чтобы включить возможность восстановления пароля и получения уведомлений",
"Profile picture" : "Аватар",
"Upload new" : "Загрузить новый",
@@ -208,19 +222,23 @@ OC.L10N.register(
"Issued By" : "Выдан",
"Valid until %s" : "Действительно до %s",
"Import Root Certificate" : "Импортировать корневые сертификаты",
- "The encryption app is no longer enabled, please decrypt all your files" : "Приложение для шифрования выключено, пожалуйста, расшифруйте ваши файлы",
+ "The encryption app is no longer enabled, please decrypt all your files" : "Приложение шифрования выключено, расшифруйте все ваши файлы",
"Log-in password" : "Пароль входа",
"Decrypt all Files" : "Снять шифрование со всех файлов",
- "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Ваши ключи шифрования были архивированы. Если что-то пойдёт не так, вы сможете восстановить ключи. Удаляйте ключи из архива только тогда, когда вы будете уверены, что все файлы были успешно расшифрованы.",
+ "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Ключи шифрования были архивированы. Если что-то пойдёт не так, вы сможете восстановить ключи. Удаляйте ключи из архива только тогда, когда вы будете уверены, что все файлы были успешно расшифрованы.",
"Restore Encryption Keys" : "Восстановить Ключи Шифрования",
"Delete Encryption Keys" : "Удалить Ключи Шифрования",
"Show storage location" : "Показать местонахождение хранилища",
"Show last log in" : "Показать последний вход в систему",
- "Login Name" : "Имя пользователя",
+ "Show user backend" : "Показать пользовательский бэкенд",
+ "Send email to new user" : "Отправлять сообщение на email новому пользователю",
+ "Show email address" : "Показывать адрес email",
+ "Username" : "Имя пользователя",
+ "E-Mail" : "E-Mail",
"Create" : "Создать",
"Admin Recovery Password" : "Восстановление пароля администратора",
"Enter the recovery password in order to recover the users files during password change" : "Введите пароль для того, чтобы восстановить файлы пользователей при смене пароля",
- "Search Users and Groups" : "Искать пользователей и групп",
+ "Search Users" : "Искать пользователей",
"Add Group" : "Добавить группу",
"Group" : "Группа",
"Everyone" : "Все",
@@ -229,13 +247,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Пожалуйста, введите квоту на хранилище (например: \"512 MB\" или \"12 GB\")",
"Unlimited" : "Неограниченно",
"Other" : "Другое",
- "Username" : "Имя пользователя",
"Group Admin for" : "Для группы Администраторов",
"Quota" : "Квота",
"Storage Location" : "Место хранилища",
+ "User Backend" : "Пользовательский бэкенд",
"Last Login" : "Последний вход",
"change full name" : "изменить полное имя",
"set new password" : "установить новый пароль",
+ "change email address" : "изменить адрес email",
"Default" : "По умолчанию"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 352dde9bf37..35c16073c63 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -8,20 +8,14 @@
"Authentication error" : "Ошибка аутентификации",
"Your full name has been changed." : "Ваше полное имя было изменено.",
"Unable to change full name" : "Невозможно изменить полное имя",
- "Group already exists" : "Группа уже существует",
- "Unable to add group" : "Невозможно добавить группу",
"Files decrypted successfully" : "Дешифрование файлов прошло успешно",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Ошибка при дешифровании файлов. Обратитесь к вашему системному администратору. Доп информация в owncloud.log",
- "Couldn't decrypt your files, check your password and try again" : "Ошибка при дешифровании файлов. Проверьте Ваш пароль и повторите попытку",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Не удалось расшифровать ваши файлы, проверьте файл owncloud.log или обратитесь к вашему администратору.",
+ "Couldn't decrypt your files, check your password and try again" : "Ошибка при дешифровании файлов. Проверьте пароль и повторите попытку",
"Encryption keys deleted permanently" : "Ключи шифрования перманентно удалены",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Не получается удалить ваши ключи шифрования, пожалуйста проверьте файл owncloud.log или обратитесь к Администратору",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Не удалось удалить ваши ключи шифрования, проверьте файл owncloud.log или обратитесь к вашему администратору",
"Couldn't remove app." : "Невозможно удалить приложение.",
- "Email saved" : "Email сохранен",
- "Invalid email" : "Неправильный Email",
- "Unable to delete group" : "Невозможно удалить группу",
- "Unable to delete user" : "Невозможно удалить пользователя",
"Backups restored successfully" : "Резервная копия успешно восстановлена",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Не получается восстановить ваши ключи шифрования, пожалуйста проверьте файл owncloud.log или обратитесь к Администратору.",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Не удалось восстановить ваши ключи шифрования, проверьте файл owncloud.log или обратитесь к вашему администратору.",
"Language changed" : "Язык изменён",
"Invalid request" : "Неправильный запрос",
"Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы admin",
@@ -30,19 +24,30 @@
"Couldn't update app." : "Невозможно обновить приложение",
"Wrong password" : "Неправильный пароль",
"No user supplied" : "Пользователь не задан",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "Пожалуйста введите администраторский пароль восстановления, иначе все пользовательские данные будут утеряны",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Введите администраторский пароль восстановления, иначе все пользовательские данные будут утеряны",
"Wrong admin recovery password. Please check the password and try again." : "Неправильный пароль восстановления. Проверьте пароль и попробуйте еще раз.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Используемый механизм не поддерживает смену паролей, но пользовательский ключ шифрования был успешно обновлён",
"Unable to change password" : "Невозможно изменить пароль",
"Enabled" : "Включено",
"Not enabled" : "Выключено",
"Recommended" : "Рекомендовано",
+ "Group already exists." : "Группа уже существует.",
+ "Unable to add group." : "Невозможно добавить группу.",
+ "Unable to delete group." : "Невозможно удалить группу.",
"Saved" : "Сохранено",
"test email settings" : "проверить настройки почты",
"If you received this email, the settings seem to be correct." : "Если вы получили это письмо, настройки верны.",
- "A problem occurred while sending the email. Please revise your settings." : "Возникла проблема при отправке письма. Пожалуйста, проверьте ваши настройки.",
+ "A problem occurred while sending the email. Please revise your settings." : "Возникла проблема при отправке письма. Проверьте ваши настройки.",
"Email sent" : "Письмо отправлено",
"You need to set your user email before being able to send test emails." : "Вы должны настроить свой e-mail пользователя прежде чем отправлять тестовые сообщения.",
+ "Invalid mail address" : "Некорректный почтовый адрес",
+ "Unable to create user." : "Невозможно создать пользователя.",
+ "Your %s account was created" : "Учетная запись %s создана",
+ "Unable to delete user." : "Невозможно удалить пользователя.",
+ "Forbidden" : "Запрещено",
+ "Invalid user" : "Неверный пользователь",
+ "Unable to change mail address" : "Невозможно изменить адрес электронной почты",
+ "Email saved" : "Email сохранен",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
"Sending..." : "Отправляется ...",
@@ -81,8 +86,8 @@
"add group" : "добавить группу",
"A valid username must be provided" : "Укажите правильное имя пользователя",
"Error creating user" : "Ошибка создания пользователя",
- "A valid password must be provided" : "Укажите валидный пароль",
- "Warning: Home directory for user \"{user}\" already exists" : "Предупреждение: домашняя папка пользователя \"{user}\" уже существует",
+ "A valid password must be provided" : "Предоставте подходящий пароль",
+ "A valid email must be provided" : "Введите корректный адрес email",
"__language_name__" : "Русский ",
"Personal Info" : "Личная информация",
"SSL root certificates" : "Корневые сертификаты SSL",
@@ -100,7 +105,8 @@
"TLS" : "TLS",
"Security Warning" : "Предупреждение безопасности",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Вы обращаетесь к %s используя HTTP. Мы настоятельно рекомендуем вам настроить сервер на использование HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Похоже, что папка с Вашими данными и Ваши файлы доступны из интернета. Файл .htaccess не работает. Мы настойчиво предлагаем Вам сконфигурировать вебсервер таким образом, чтобы папка с Вашими данными более не была доступна или переместите папку с данными куда-нибудь в другое место вне основной папки документов вебсервера.",
+ "Read-Only config enabled" : "Конфигурационный файл в режиме только для чтения.",
+ "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." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса не возможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.",
"Setup Warning" : "Предупреждение установки",
"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.",
@@ -108,19 +114,17 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В качестве Базы Данных используется SQLite. Для больших установок рекомендуется использовать другие типы Баз Данных. Чтобы переехать на другую Базу Данных используйте инструмент командной строки: 'ooc: db:conver-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' отсутствует",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.",
- "Your PHP version is outdated" : "Ваша версия PHP устарела",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваша версия PHP устарела. Мы настоятельно рекомендуем обновиться до 5.3.8 или новее, так как старые версии работают не корректно. Вполне возможно, что эта установка не работает должным образом.",
"PHP charset is not set to UTF-8" : "Кодировка PHP не совпадает с UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодировка PHP не совпадает с UTF-8. Это может вызвать трудности с именами файлов, содержащими нелатинские символы. Мы настоятельно рекомендуем сменить значение переменной default_charset в файле php.ini на UTF-8.",
"Locale not working" : "Локализация не работает",
"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 to install the required packages on your system to support one of the following locales: %s." : "Мы настоятельно рекомендуем установить требуемые пакеты в систему, для поддержки одной из следующих локалей: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.",
"URL generation in notification emails" : "Генерирование URL в уведомляющих электронных письмах",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует планировщик cron системы, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию verwritewebroot файла config.php равной пути папки установки. (Вероятно, это \"%s\".)",
- "Connectivity Checks" : "Проверка соединения",
+ "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\")" : "Если ваша копия ownCloud установлена не в корне домена и использует планировщик cron системы, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)",
+ "Configuration Checks" : "Проверка конфигурации",
"No problems found" : "Проблемы не найдены",
- "Please double check the <a href='%s'>installation guides</a>." : "Пожалуйста, дважды просмотрите <a href='%s'>инструкции по установке</a>.",
+ "Please double check the <a href='%s'>installation guides</a>." : "Подробно изучите <a href='%s'>инструкции по установке</a>.",
"Last cron was executed at %s." : "Последняя cron-задача была запущена: %s.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Последняя cron-задача была запущена: %s. Это было больше часа назад, кажется что-то не так.",
"Cron was not executed yet!" : "Cron-задачи ещё не запускались!",
@@ -131,20 +135,23 @@
"Allow users to share via link" : "Разрешить пользователям публикации через ссылки",
"Enforce password protection" : "Защита паролем обязательна",
"Allow public uploads" : "Разрешить открытые загрузки",
+ "Allow users to send mail notification for shared files" : "Разрешить пользователям оповещать почтой об открытии доступа к файлам",
"Set default expiration date" : "Установить срок действия по-умолчанию",
"Expire after " : "Заканчивается через",
"days" : "дней",
"Enforce expiration date" : "Срок действия обязателен",
- "Allow resharing" : "Разрешить переоткрытие общего доступа",
- "Restrict users to only share with users in their groups" : "Разрешить пользователям публикации только внутри их групп",
- "Allow users to send mail notification for shared files" : "Разрешить пользователю оповещать почтой о расшаренных файлах",
+ "Allow resharing" : "Разрешить повторное открытие общего доступа",
+ "Restrict users to only share with users in their groups" : "Разрешить пользователям делиться только с членами их групп",
+ "Allow users to send mail notification for shared files to other users" : "Разрешить пользователям оповещать почтой других пользователей об открытии доступа к файлам",
"Exclude groups from sharing" : "Исключить группы из общего доступа",
- "These groups will still be able to receive shares, but not to initiate them." : "Эти группы смогут получать общие файлы, но не смогут отправлять их.",
+ "These groups will still be able to receive shares, but not to initiate them." : "Эти группы смогут получать общие ресурсы, но не могут их принять.",
"Enforce HTTPS" : "HTTPS соединение обязательно",
"Forces the clients to connect to %s via an encrypted connection." : "Принудить клиентов подключаться к %s через шифрованное соединение.",
+ "Enforce HTTPS for subdomains" : "HTTPS соединение обязательно для субдоменов",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Принудить клиентов подключаться к %s и субдоменам через шифрованное соединение.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Пожалуйста, подключитесь к %s используя HTTPS чтобы включить или отключить обязательные SSL подключения.",
"This is used for sending out notifications." : "Используется для отправки уведомлений.",
- "Send mode" : "Отправить сообщение",
+ "Send mode" : "Способ отправки",
"From address" : "Адрес отправителя",
"mail" : "почта",
"Authentication method" : "Метод проверки подлинности",
@@ -154,9 +161,9 @@
"Credentials" : "Учётные данные",
"SMTP Username" : "Пользователь SMTP",
"SMTP Password" : "Пароль SMTP",
- "Store credentials" : "Хранить учётные данные",
+ "Store credentials" : "Сохранить учётные данные",
"Test email settings" : "Проверить настройки почты",
- "Send email" : "Отправить сообщение",
+ "Send email" : "Отправить email",
"Log level" : "Уровень детализации журнала",
"More" : "Больше",
"Less" : "Меньше",
@@ -164,32 +171,39 @@
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Разрабатывается <a href=\"http://ownCloud.org/contact\" target=\"_blank\">сообществом ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">исходный код</a> доступен под лицензией <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Ещё приложения",
"Add your app" : "Добавить своё приложение",
- "by" : ":",
+ "by" : "автор",
"licensed" : "Лицензировано",
"Documentation:" : "Документация:",
"User Documentation" : "Пользовательская документация",
"Admin Documentation" : "Документация администратора",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Приложение не может быть установлено, следующие зависимости не удовлетворены:",
"Update to %s" : "Обновить до %s",
"Enable only for specific groups" : "Включить только для этих групп",
"Uninstall App" : "Удалить приложение",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здравствуйте,<br><br>Просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: %s<br>Зайти: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Удачи!",
+ "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",
"Administrator Documentation" : "Документация администратора",
"Online Documentation" : "Online документация",
"Forum" : "Форум",
"Bugtracker" : "Багтрекер",
"Commercial Support" : "Коммерческая поддержка",
"Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов",
+ "Desktop client" : "Клиент для ПК",
+ "Android app" : "Android приложение",
+ "iOS app" : "iOS приложение",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Если вы хотите поддержать проект,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">присоединяйтесь к разработке</a>\n\t\tиди\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">содействуйте распространению</a>!",
"Show First Run Wizard again" : "Показать помощник настройки",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Вы использовали <strong>%s</strong> из доступных <strong>%s</strong>",
"Password" : "Пароль",
- "Your password was changed" : "Ваш пароль изменён",
+ "Your password was changed" : "Пароль изменён",
"Unable to change your password" : "Невозможно сменить пароль",
"Current password" : "Текущий пароль",
"New password" : "Новый пароль",
"Change password" : "Сменить пароль",
"Full Name" : "Полное имя",
"Email" : "E-mail",
- "Your email address" : "Ваш адрес электронной почты",
+ "Your email address" : "Адрес электронной почты",
"Fill in an email address to enable password recovery and receive notifications" : "Введите свой email-адрес для того, чтобы включить возможность восстановления пароля и получения уведомлений",
"Profile picture" : "Аватар",
"Upload new" : "Загрузить новый",
@@ -206,19 +220,23 @@
"Issued By" : "Выдан",
"Valid until %s" : "Действительно до %s",
"Import Root Certificate" : "Импортировать корневые сертификаты",
- "The encryption app is no longer enabled, please decrypt all your files" : "Приложение для шифрования выключено, пожалуйста, расшифруйте ваши файлы",
+ "The encryption app is no longer enabled, please decrypt all your files" : "Приложение шифрования выключено, расшифруйте все ваши файлы",
"Log-in password" : "Пароль входа",
"Decrypt all Files" : "Снять шифрование со всех файлов",
- "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Ваши ключи шифрования были архивированы. Если что-то пойдёт не так, вы сможете восстановить ключи. Удаляйте ключи из архива только тогда, когда вы будете уверены, что все файлы были успешно расшифрованы.",
+ "Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Ключи шифрования были архивированы. Если что-то пойдёт не так, вы сможете восстановить ключи. Удаляйте ключи из архива только тогда, когда вы будете уверены, что все файлы были успешно расшифрованы.",
"Restore Encryption Keys" : "Восстановить Ключи Шифрования",
"Delete Encryption Keys" : "Удалить Ключи Шифрования",
"Show storage location" : "Показать местонахождение хранилища",
"Show last log in" : "Показать последний вход в систему",
- "Login Name" : "Имя пользователя",
+ "Show user backend" : "Показать пользовательский бэкенд",
+ "Send email to new user" : "Отправлять сообщение на email новому пользователю",
+ "Show email address" : "Показывать адрес email",
+ "Username" : "Имя пользователя",
+ "E-Mail" : "E-Mail",
"Create" : "Создать",
"Admin Recovery Password" : "Восстановление пароля администратора",
"Enter the recovery password in order to recover the users files during password change" : "Введите пароль для того, чтобы восстановить файлы пользователей при смене пароля",
- "Search Users and Groups" : "Искать пользователей и групп",
+ "Search Users" : "Искать пользователей",
"Add Group" : "Добавить группу",
"Group" : "Группа",
"Everyone" : "Все",
@@ -227,13 +245,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Пожалуйста, введите квоту на хранилище (например: \"512 MB\" или \"12 GB\")",
"Unlimited" : "Неограниченно",
"Other" : "Другое",
- "Username" : "Имя пользователя",
"Group Admin for" : "Для группы Администраторов",
"Quota" : "Квота",
"Storage Location" : "Место хранилища",
+ "User Backend" : "Пользовательский бэкенд",
"Last Login" : "Последний вход",
"change full name" : "изменить полное имя",
"set new password" : "установить новый пароль",
+ "change email address" : "изменить адрес email",
"Default" : "По умолчанию"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/si_LK.js b/settings/l10n/si_LK.js
index 55acf32e881..619fbb88051 100644
--- a/settings/l10n/si_LK.js
+++ b/settings/l10n/si_LK.js
@@ -4,16 +4,11 @@ OC.L10N.register(
"Sharing" : "හුවමාරු කිරීම",
"Log" : "ලඝුව",
"Authentication error" : "සත්‍යාපන දෝෂයක්",
- "Group already exists" : "කණ්ඩායම දැනටමත් තිබේ",
- "Unable to add group" : "කාණඩයක් එක් කළ නොහැකි විය",
- "Email saved" : "වි-තැපෑල සුරකින ලදී",
- "Invalid email" : "අවලංගු වි-තැපෑල",
- "Unable to delete group" : "කණ්ඩායම මැකීමට නොහැක",
- "Unable to delete user" : "පරිශීලකයා මැකීමට නොහැක",
"Language changed" : "භාෂාව ාවනස් කිරීම",
"Invalid request" : "අවලංගු අයැදුමක්",
"Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
"Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
+ "Email saved" : "වි-තැපෑල සුරකින ලදී",
"Disable" : "අක්‍රිය කරන්න",
"Enable" : "සක්‍රිය කරන්න",
"Delete" : "මකා දමන්න",
@@ -44,11 +39,10 @@ OC.L10N.register(
"Language" : "භාෂාව",
"Help translate" : "පරිවර්ථන සහය",
"Import Root Certificate" : "මූල සහතිකය ආයාත කරන්න",
- "Login Name" : "ප්‍රවිශ්ටය",
+ "Username" : "පරිශීලක නම",
"Create" : "තනන්න",
"Default Quota" : "සාමාන්‍ය සලාකය",
"Other" : "වෙනත්",
- "Username" : "පරිශීලක නම",
"Quota" : "සලාකය"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/si_LK.json b/settings/l10n/si_LK.json
index 2b763e6387d..3977e75e3d2 100644
--- a/settings/l10n/si_LK.json
+++ b/settings/l10n/si_LK.json
@@ -2,16 +2,11 @@
"Sharing" : "හුවමාරු කිරීම",
"Log" : "ලඝුව",
"Authentication error" : "සත්‍යාපන දෝෂයක්",
- "Group already exists" : "කණ්ඩායම දැනටමත් තිබේ",
- "Unable to add group" : "කාණඩයක් එක් කළ නොහැකි විය",
- "Email saved" : "වි-තැපෑල සුරකින ලදී",
- "Invalid email" : "අවලංගු වි-තැපෑල",
- "Unable to delete group" : "කණ්ඩායම මැකීමට නොහැක",
- "Unable to delete user" : "පරිශීලකයා මැකීමට නොහැක",
"Language changed" : "භාෂාව ාවනස් කිරීම",
"Invalid request" : "අවලංගු අයැදුමක්",
"Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
"Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
+ "Email saved" : "වි-තැපෑල සුරකින ලදී",
"Disable" : "අක්‍රිය කරන්න",
"Enable" : "සක්‍රිය කරන්න",
"Delete" : "මකා දමන්න",
@@ -42,11 +37,10 @@
"Language" : "භාෂාව",
"Help translate" : "පරිවර්ථන සහය",
"Import Root Certificate" : "මූල සහතිකය ආයාත කරන්න",
- "Login Name" : "ප්‍රවිශ්ටය",
+ "Username" : "පරිශීලක නම",
"Create" : "තනන්න",
"Default Quota" : "සාමාන්‍ය සලාකය",
"Other" : "වෙනත්",
- "Username" : "පරිශීලක නම",
"Quota" : "සලාකය"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 2bea7839552..471a643f4a5 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Chyba autentifikácie",
"Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
"Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
- "Group already exists" : "Skupina už existuje",
- "Unable to add group" : "Nie je možné pridať skupinu",
"Files decrypted successfully" : "Súbory sú úspešne dešifrované",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nemožno dešifrovať vaše súbory, skontrolujte svoj owncloud.log alebo požiadajte o pomoc adminstrátora",
"Couldn't decrypt your files, check your password and try again" : "Nemožno dešifrovať vaše súbory, skontrolujte svoje heslo a skúste to znova",
"Encryption keys deleted permanently" : "Šifrovacie kľúče sú trvale vymazané",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebolo možné natrvalo vymazať vaše šifrovacie kľúče, skontrolujte si prosím owncloud.log alebo kontaktujte svojho správcu",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
- "Email saved" : "Email uložený",
- "Invalid email" : "Neplatný email",
- "Unable to delete group" : "Nie je možné odstrániť skupinu",
- "Unable to delete user" : "Nie je možné odstrániť používateľa",
"Backups restored successfully" : "Zálohy boli úspešne obnovené",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebolo možné obnoviť vaše šifrovacie kľúče, skontrolujte si prosím owncloud.log alebo kontaktujte svojho správcu",
"Language changed" : "Jazyk zmenený",
@@ -45,6 +39,7 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Vyskytol sa problém pri odosielaní emailu. Prosím, znovu skontrolujte svoje nastavenia.",
"Email sent" : "Email odoslaný",
"You need to set your user email before being able to send test emails." : "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
+ "Email saved" : "Email uložený",
"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",
"Sending..." : "Odosielam...",
@@ -84,7 +79,6 @@ OC.L10N.register(
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"Error creating user" : "Chyba pri vytváraní používateľa",
"A valid password must be provided" : "Musíte zadať platné heslo",
- "Warning: Home directory for user \"{user}\" already exists" : "Upozornenie: Domovský priečinok používateľa \"{user}\" už existuje",
"__language_name__" : "Slovensky",
"Personal Info" : "Osobné informácie",
"SSL root certificates" : "Koreňové SSL certifikáty",
@@ -102,7 +96,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Bezpečnostné upozornenie",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Do %s máte prístup cez HTTP. Dôrazne odporúčame nakonfigurovať server tak, aby namiesto toho vyžadoval použitie HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný, alebo presunúť priečinok s dátami mimo priestor sprístupňovaný webovým serverom.",
"Setup Warning" : "Nastavenia oznámení a upozornení",
"PHP is apparently setup 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.",
@@ -110,17 +103,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ako databáza je použitá SQLite. Pre väčšie inštalácie vám to odporúčame zmeniť. Na prenos do inej databázy použite nástroj príkazového riadka: \"occ db:convert-typ\"",
"Module 'fileinfo' missing" : "Chýba modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu.",
- "Your PHP version is outdated" : "Vaša PHP verzia je zastaraná",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Táto verzia PHP je zastaraná. Dôrazne vám odporúčame aktualizovať na verziu 5.3.8 alebo novšiu, lebo staršie verzie sú chybné. Je možné, že táto inštalácia nebude fungovať správne.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP nie je nastavená na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Predvolená znaková sada PHP nie je nastavená na UTF-8. To môže spôsobiť veľké problémy v prípade ne-ASCII znakov v názvoch súborov. Dôrazne odporúčame zmeniť hodnotu \"default_charset\" v php.ini na \"UTF-8\".",
"Locale not working" : "Lokalizácia nefunguje",
"System locale can not be set to a one which supports UTF-8." : "Nie je možné nastaviť znakovú sadu, ktorá podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že sa môžu vyskytnúť problémy s niektorými znakmi v názvoch súborov.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Dôrazne doporučujeme nainštalovať na váš systém požadované balíčky podporujúce jednu z nasledovných znakových sád: %s.",
"URL generation in notification emails" : "Generovanie adresy URL v oznamovacích emailoch",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Inštalácia mimo koreňový priečinok domény a používanie systémového príkazu cron môže spôsobiť problém s generovaním správnej URL. Pre zabránenie týmto chybám nastavte prosím správnu cestu v svojom config.php súbore pre hodnotu \"overwritewebroot\" (Doporučujeme: \"%s\")",
- "Connectivity Checks" : "Overovanie pripojenia",
"No problems found" : "Nenašli sa žiadne problémy",
"Please double check the <a href='%s'>installation guides</a>." : "Prosím skontrolujte <a href='%s'>inštalačnú príručku</a>.",
"Last cron was executed at %s." : "Posledný cron bol spustený %s.",
@@ -133,13 +121,13 @@ OC.L10N.register(
"Allow users to share via link" : "Povoliť používateľom zdieľanie pomocou odkazov",
"Enforce password protection" : "Vynútiť ochranu heslom",
"Allow public uploads" : "Povoliť verejné nahrávanie súborov",
+ "Allow users to send mail notification for shared files" : "Povoliť používateľom zasielať emailom oznámenie o zdieľaní súborov",
"Set default expiration date" : "Nastaviť predvolený dátum expirácie",
"Expire after " : "Platnosť do",
"days" : "dni",
"Enforce expiration date" : "Vynútiť dátum expirácie",
"Allow resharing" : "Povoliť zdieľanie ďalej",
"Restrict users to only share with users in their groups" : "Povoliť používateľom zdieľanie len medzi nimi v rámci skupiny",
- "Allow users to send mail notification for shared files" : "Povoliť používateľom zasielať emailom oznámenie o zdieľaní súborov",
"Exclude groups from sharing" : "Vybrať skupiny zo zdieľania",
"These groups will still be able to receive shares, but not to initiate them." : "Tieto skupiny budú môcť stále zdieľať, ale sami nemôžu zdieľať ostatným.",
"Enforce HTTPS" : "Vynútiť HTTPS",
@@ -174,12 +162,15 @@ OC.L10N.register(
"Update to %s" : "Aktualizovať na %s",
"Enable only for specific groups" : "Povoliť len pre vybrané skupiny",
"Uninstall App" : "Odinštalovanie aplikácie",
+ "Cheers!" : "Pekný deň!",
"Administrator Documentation" : "Príručka administrátora",
"Online Documentation" : "Online príručka",
"Forum" : "Fórum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Komerčná podpora",
"Get the apps to sync your files" : "Získať aplikácie na synchronizáciu vašich súborov",
+ "Android app" : "Android aplikácia",
+ "iOS app" : "iOS aplikácia",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Ak chcete podporiť projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">pridajte sa do vývoja</a>\n\t\talebo\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">pomáhajte šíriť povedomie</a>!",
"Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Použili ste <strong>%s</strong> z <strong>%s</strong> dostupných ",
@@ -216,11 +207,11 @@ OC.L10N.register(
"Delete Encryption Keys" : "Vymazať šifrovacie kľúče",
"Show storage location" : "Zobraziť umiestnenie úložiska",
"Show last log in" : "Zobraziť posledné prihlásenie",
- "Login Name" : "Prihlasovacie meno",
+ "Username" : "Používateľské meno",
"Create" : "Vytvoriť",
"Admin Recovery Password" : "Obnovenie hesla administrátora",
"Enter the recovery password in order to recover the users files during password change" : "Zadajte heslo pre obnovenie súborov používateľa pri zmene hesla",
- "Search Users and Groups" : "Prehľadať používateľov a skupiny",
+ "Search Users" : "Hľadať používateľov",
"Add Group" : "Pridať skupinu",
"Group" : "Skupina",
"Everyone" : "Všetci",
@@ -229,7 +220,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Prosím zadajte kvótu úložného priestoru (napr.: \"512 MB​​\" alebo \"12 GB\")",
"Unlimited" : "Nelimitované",
"Other" : "Iné",
- "Username" : "Používateľské meno",
"Group Admin for" : "Administrátor skupiny",
"Quota" : "Kvóta",
"Storage Location" : "Umiestnenie úložiska",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index 15e4d67b4cf..d6fd78b4aaa 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -8,18 +8,12 @@
"Authentication error" : "Chyba autentifikácie",
"Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
"Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
- "Group already exists" : "Skupina už existuje",
- "Unable to add group" : "Nie je možné pridať skupinu",
"Files decrypted successfully" : "Súbory sú úspešne dešifrované",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nemožno dešifrovať vaše súbory, skontrolujte svoj owncloud.log alebo požiadajte o pomoc adminstrátora",
"Couldn't decrypt your files, check your password and try again" : "Nemožno dešifrovať vaše súbory, skontrolujte svoje heslo a skúste to znova",
"Encryption keys deleted permanently" : "Šifrovacie kľúče sú trvale vymazané",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebolo možné natrvalo vymazať vaše šifrovacie kľúče, skontrolujte si prosím owncloud.log alebo kontaktujte svojho správcu",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
- "Email saved" : "Email uložený",
- "Invalid email" : "Neplatný email",
- "Unable to delete group" : "Nie je možné odstrániť skupinu",
- "Unable to delete user" : "Nie je možné odstrániť používateľa",
"Backups restored successfully" : "Zálohy boli úspešne obnovené",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebolo možné obnoviť vaše šifrovacie kľúče, skontrolujte si prosím owncloud.log alebo kontaktujte svojho správcu",
"Language changed" : "Jazyk zmenený",
@@ -43,6 +37,7 @@
"A problem occurred while sending the email. Please revise your settings." : "Vyskytol sa problém pri odosielaní emailu. Prosím, znovu skontrolujte svoje nastavenia.",
"Email sent" : "Email odoslaný",
"You need to set your user email before being able to send test emails." : "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
+ "Email saved" : "Email uložený",
"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",
"Sending..." : "Odosielam...",
@@ -82,7 +77,6 @@
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"Error creating user" : "Chyba pri vytváraní používateľa",
"A valid password must be provided" : "Musíte zadať platné heslo",
- "Warning: Home directory for user \"{user}\" already exists" : "Upozornenie: Domovský priečinok používateľa \"{user}\" už existuje",
"__language_name__" : "Slovensky",
"Personal Info" : "Osobné informácie",
"SSL root certificates" : "Koreňové SSL certifikáty",
@@ -100,7 +94,6 @@
"TLS" : "TLS",
"Security Warning" : "Bezpečnostné upozornenie",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Do %s máte prístup cez HTTP. Dôrazne odporúčame nakonfigurovať server tak, aby namiesto toho vyžadoval použitie HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný, alebo presunúť priečinok s dátami mimo priestor sprístupňovaný webovým serverom.",
"Setup Warning" : "Nastavenia oznámení a upozornení",
"PHP is apparently setup 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.",
@@ -108,17 +101,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ako databáza je použitá SQLite. Pre väčšie inštalácie vám to odporúčame zmeniť. Na prenos do inej databázy použite nástroj príkazového riadka: \"occ db:convert-typ\"",
"Module 'fileinfo' missing" : "Chýba modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu.",
- "Your PHP version is outdated" : "Vaša PHP verzia je zastaraná",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Táto verzia PHP je zastaraná. Dôrazne vám odporúčame aktualizovať na verziu 5.3.8 alebo novšiu, lebo staršie verzie sú chybné. Je možné, že táto inštalácia nebude fungovať správne.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP nie je nastavená na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Predvolená znaková sada PHP nie je nastavená na UTF-8. To môže spôsobiť veľké problémy v prípade ne-ASCII znakov v názvoch súborov. Dôrazne odporúčame zmeniť hodnotu \"default_charset\" v php.ini na \"UTF-8\".",
"Locale not working" : "Lokalizácia nefunguje",
"System locale can not be set to a one which supports UTF-8." : "Nie je možné nastaviť znakovú sadu, ktorá podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že sa môžu vyskytnúť problémy s niektorými znakmi v názvoch súborov.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Dôrazne doporučujeme nainštalovať na váš systém požadované balíčky podporujúce jednu z nasledovných znakových sád: %s.",
"URL generation in notification emails" : "Generovanie adresy URL v oznamovacích emailoch",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Inštalácia mimo koreňový priečinok domény a používanie systémového príkazu cron môže spôsobiť problém s generovaním správnej URL. Pre zabránenie týmto chybám nastavte prosím správnu cestu v svojom config.php súbore pre hodnotu \"overwritewebroot\" (Doporučujeme: \"%s\")",
- "Connectivity Checks" : "Overovanie pripojenia",
"No problems found" : "Nenašli sa žiadne problémy",
"Please double check the <a href='%s'>installation guides</a>." : "Prosím skontrolujte <a href='%s'>inštalačnú príručku</a>.",
"Last cron was executed at %s." : "Posledný cron bol spustený %s.",
@@ -131,13 +119,13 @@
"Allow users to share via link" : "Povoliť používateľom zdieľanie pomocou odkazov",
"Enforce password protection" : "Vynútiť ochranu heslom",
"Allow public uploads" : "Povoliť verejné nahrávanie súborov",
+ "Allow users to send mail notification for shared files" : "Povoliť používateľom zasielať emailom oznámenie o zdieľaní súborov",
"Set default expiration date" : "Nastaviť predvolený dátum expirácie",
"Expire after " : "Platnosť do",
"days" : "dni",
"Enforce expiration date" : "Vynútiť dátum expirácie",
"Allow resharing" : "Povoliť zdieľanie ďalej",
"Restrict users to only share with users in their groups" : "Povoliť používateľom zdieľanie len medzi nimi v rámci skupiny",
- "Allow users to send mail notification for shared files" : "Povoliť používateľom zasielať emailom oznámenie o zdieľaní súborov",
"Exclude groups from sharing" : "Vybrať skupiny zo zdieľania",
"These groups will still be able to receive shares, but not to initiate them." : "Tieto skupiny budú môcť stále zdieľať, ale sami nemôžu zdieľať ostatným.",
"Enforce HTTPS" : "Vynútiť HTTPS",
@@ -172,12 +160,15 @@
"Update to %s" : "Aktualizovať na %s",
"Enable only for specific groups" : "Povoliť len pre vybrané skupiny",
"Uninstall App" : "Odinštalovanie aplikácie",
+ "Cheers!" : "Pekný deň!",
"Administrator Documentation" : "Príručka administrátora",
"Online Documentation" : "Online príručka",
"Forum" : "Fórum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Komerčná podpora",
"Get the apps to sync your files" : "Získať aplikácie na synchronizáciu vašich súborov",
+ "Android app" : "Android aplikácia",
+ "iOS app" : "iOS aplikácia",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Ak chcete podporiť projekt\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">pridajte sa do vývoja</a>\n\t\talebo\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">pomáhajte šíriť povedomie</a>!",
"Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Použili ste <strong>%s</strong> z <strong>%s</strong> dostupných ",
@@ -214,11 +205,11 @@
"Delete Encryption Keys" : "Vymazať šifrovacie kľúče",
"Show storage location" : "Zobraziť umiestnenie úložiska",
"Show last log in" : "Zobraziť posledné prihlásenie",
- "Login Name" : "Prihlasovacie meno",
+ "Username" : "Používateľské meno",
"Create" : "Vytvoriť",
"Admin Recovery Password" : "Obnovenie hesla administrátora",
"Enter the recovery password in order to recover the users files during password change" : "Zadajte heslo pre obnovenie súborov používateľa pri zmene hesla",
- "Search Users and Groups" : "Prehľadať používateľov a skupiny",
+ "Search Users" : "Hľadať používateľov",
"Add Group" : "Pridať skupinu",
"Group" : "Skupina",
"Everyone" : "Všetci",
@@ -227,7 +218,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Prosím zadajte kvótu úložného priestoru (napr.: \"512 MB​​\" alebo \"12 GB\")",
"Unlimited" : "Nelimitované",
"Other" : "Iné",
- "Username" : "Používateľské meno",
"Group Admin for" : "Administrátor skupiny",
"Quota" : "Kvóta",
"Storage Location" : "Umiestnenie úložiska",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index a3b39dce1b2..886d9efee8f 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Varnostna in nastavitvena opozorila",
"Cron" : "Periodično opravilo",
"Sharing" : "Souporaba",
"Security" : "Varnost",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Napaka med overjanjem",
"Your full name has been changed." : "Vaše polno ime je spremenjeno.",
"Unable to change full name" : "Ni mogoče spremeniti polnega imena",
- "Group already exists" : "Skupina že obstaja",
- "Unable to add group" : "Skupine ni mogoče dodati",
"Files decrypted successfully" : "Datoteke so uspešno odšifrirane",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Datotek ni mogoče odšifrirati. Preverite dnevnik owncloud.log ali pa se posvetujte s skrbnikom.",
"Couldn't decrypt your files, check your password and try again" : "Datotek ni mogoče odšifrirati. Preverite geslo in poskusite znova.",
"Encryption keys deleted permanently" : "Šifrirni ključi so trajno izbrisani",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Ni mogoče trajno izbrisati šifrirnih ključev. Preverite dnevnik owncloud.log ali pa stopite v stik s skrbnikom sistema.",
"Couldn't remove app." : "Ni mogoče odstraniti programa.",
- "Email saved" : "Elektronski naslov je shranjen",
- "Invalid email" : "Neveljaven elektronski naslov",
- "Unable to delete group" : "Skupine ni mogoče izbrisati",
- "Unable to delete user" : "Uporabnika ni mogoče izbrisati",
"Backups restored successfully" : "Varnostne kopije so uspešno obnovljene.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Ni mogoče obnoviti šifrirnih ključev. Preverite dnevnik owncloud.log ali pa stopite v stik s skrbnikom sistema.",
"Language changed" : "Jezik je spremenjen",
@@ -44,6 +39,11 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Prišlo je do napake med pošiljanjem sporočila na elektronski naslov. Spremeniti je treba nastavitve.",
"Email sent" : "Elektronska pošta je poslana",
"You need to set your user email before being able to send test emails." : "Pred preizkusnim pošiljanjem sporočil je treba nastaviti elektronski naslov uporabnika.",
+ "Invalid mail address" : "Neveljaven elektronski naslov",
+ "Unable to create user." : "Ni mogoče ustvariti uporabnika.",
+ "Unable to delete user." : "Ni mogoče izbrisati uporabnika",
+ "Invalid user" : "Neveljavni podatki uporabnika",
+ "Email saved" : "Elektronski naslov je shranjen",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?",
"Add trusted domain" : "Dodaj varno domeno",
"Sending..." : "Poteka pošiljanje ...",
@@ -83,7 +83,6 @@ OC.L10N.register(
"A valid username must be provided" : "Navedeno mora biti veljavno uporabniško ime",
"Error creating user" : "Napaka ustvarjanja uporabnika",
"A valid password must be provided" : "Navedeno mora biti veljavno geslo",
- "Warning: Home directory for user \"{user}\" already exists" : "Opozorilo: osebna mapa uporabnika \"{user}\" že obstaja",
"__language_name__" : "Slovenščina",
"Personal Info" : "Osebni podatki",
"SSL root certificates" : "Korenska potrdila SSL",
@@ -101,18 +100,15 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Varnostno opozorilo",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Dostop do %s poteka preko HTTP. Priporočljivo je nastaviti strežnik na privzeto uporabo varne povezave preko protokola HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaša podatkovna mapa in datoteke so najverjetneje dosegljive preko interneta. Datoteka .htaccess ni ustrezno nastavljena. Priporočljivo je nastaviti spletni strežnik tako, da podatkovna mapa ni prosto dostopna. To je mogoče zagotoviti tudi tako, da je mapa premaknjena iz neustrezne korenske v podrejeno mapo .",
"Setup Warning" : "Opozorilo nastavitve",
"Database Performance Info" : "Podrobnosti delovanja podatkovne zbirke",
"Module 'fileinfo' missing" : "Manjka modul 'fileinfo'.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Manjka modul PHP 'fileinfo'. Priporočljivo je omogočiti ta modul za popolno zaznavanje vrst MIME.",
- "Your PHP version is outdated" : "Nameščena različica PHP je zastarela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Nameščena različica PHP je zastarela. Priporočljivo je posodobiti namestitev na različico 5.3.8 ali novejše, saj starejše različice ne podpirajo vseh zmožnosti. Mogoče je, da namestitev ne deluje pravilno.",
"PHP charset is not set to UTF-8" : "Jezikovni znakovni nabor PHP ni določen kot UTF-8",
"Locale not working" : "Jezikovne prilagoditve ne delujejo.",
"System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.",
"This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Priporočljivo je namestiti zahtevane pakete v sistem za podporo ene izmed navedenih jezikovnih možnosti: %s",
+ "URL generation in notification emails" : "Ustvarjanje naslova URL v elektronskih sporočilih",
"No problems found" : "Ni zaznanih težav",
"Please double check the <a href='%s'>installation guides</a>." : "Preverite <a href='%s'>navodila namestitve</a>.",
"Last cron was executed at %s." : "Zadnje periodično opravilo cron je bilo izvedeno ob %s.",
@@ -125,17 +121,19 @@ OC.L10N.register(
"Allow users to share via link" : "Uporabnikom dovoli omogočanje souporabe s povezavami",
"Enforce password protection" : "Vsili zaščito z geslom",
"Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak",
+ "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.",
"Set default expiration date" : "Nastavitev privzetega datuma poteka",
"Expire after " : "Preteče po",
"days" : "dneh",
"Enforce expiration date" : "Vsili datum preteka",
"Allow resharing" : "Dovoli nadaljnjo souporabo",
"Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine",
- "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.",
"Exclude groups from sharing" : "Izloči skupine iz souporabe",
"These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti",
"Enforce HTTPS" : "Zahtevaj uporabo HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vsili povezavo odjemalca z %s preko šifrirane povezave.",
+ "Enforce HTTPS for subdomains" : "Vsili protokol HTTPS za podrejene domene",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vsili povezavo odjemalcev na naslovu %s in na vseh podrejenih domenah preko šifrirane povezave. ",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Za nastavljanje šifriranja SSL je treba vzpostaviti povezavo z mestom %s preko protokola HTTPS.",
"This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.",
"Send mode" : "Način pošiljanja",
@@ -164,12 +162,16 @@ OC.L10N.register(
"Update to %s" : "Posodobi na %s",
"Enable only for specific groups" : "Omogoči le za posamezne skupine",
"Uninstall App" : "Odstrani program",
+ "Cheers!" : "Na zdravje!",
"Administrator Documentation" : "Skrbniška dokumentacija",
"Online Documentation" : "Spletna dokumentacija",
"Forum" : "Forum",
"Bugtracker" : "Sledilnik hroščev",
"Commercial Support" : "Podpora strankam",
"Get the apps to sync your files" : "Pridobi programe za usklajevanje datotek",
+ "Desktop client" : "Namizni odjemalec",
+ "Android app" : "Program za Android",
+ "iOS app" : "Program za iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Če želite podpreti projekt,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">prispevajte k razvoju</a>\n\t\tali pa\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">seznanite druge o zmožnostih oblaka.</a>!",
"Show First Run Wizard again" : "Zaženi čarovnika prvega zagona",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Uporabljenega je <strong>%s</strong> od razpoložljivih <strong>%s</strong> prostora.",
@@ -204,11 +206,11 @@ OC.L10N.register(
"Delete Encryption Keys" : "Izbriši šifrirne ključe",
"Show storage location" : "Pokaži mesto shrambe",
"Show last log in" : "Pokaži podatke zadnje prijave",
- "Login Name" : "Prijavno ime",
+ "Username" : "Uporabniško ime",
"Create" : "Ustvari",
"Admin Recovery Password" : "Obnovitev skrbniškega gesla",
"Enter the recovery password in order to recover the users files during password change" : "Vnesite geslo, ki omogoča obnovitev uporabniških datotek med spreminjanjem gesla",
- "Search Users and Groups" : "Iskanje uporabnikov in skupin",
+ "Search Users" : "Poišči med uporabniki",
"Add Group" : "Dodaj skupino",
"Group" : "Skupina",
"Everyone" : "Vsi",
@@ -217,7 +219,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Vnesite količinsko omejitev prostora (na primer: \"512 MB\" ali \"12 GB\")",
"Unlimited" : "Neomejeno",
"Other" : "Drugo",
- "Username" : "Uporabniško ime",
"Group Admin for" : "Skrbnik skupine za",
"Quota" : "Količinska omejitev",
"Storage Location" : "Mesto shrambe",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 7ec03873132..a5487eb5b4f 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Varnostna in nastavitvena opozorila",
"Cron" : "Periodično opravilo",
"Sharing" : "Souporaba",
"Security" : "Varnost",
@@ -7,18 +8,12 @@
"Authentication error" : "Napaka med overjanjem",
"Your full name has been changed." : "Vaše polno ime je spremenjeno.",
"Unable to change full name" : "Ni mogoče spremeniti polnega imena",
- "Group already exists" : "Skupina že obstaja",
- "Unable to add group" : "Skupine ni mogoče dodati",
"Files decrypted successfully" : "Datoteke so uspešno odšifrirane",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Datotek ni mogoče odšifrirati. Preverite dnevnik owncloud.log ali pa se posvetujte s skrbnikom.",
"Couldn't decrypt your files, check your password and try again" : "Datotek ni mogoče odšifrirati. Preverite geslo in poskusite znova.",
"Encryption keys deleted permanently" : "Šifrirni ključi so trajno izbrisani",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Ni mogoče trajno izbrisati šifrirnih ključev. Preverite dnevnik owncloud.log ali pa stopite v stik s skrbnikom sistema.",
"Couldn't remove app." : "Ni mogoče odstraniti programa.",
- "Email saved" : "Elektronski naslov je shranjen",
- "Invalid email" : "Neveljaven elektronski naslov",
- "Unable to delete group" : "Skupine ni mogoče izbrisati",
- "Unable to delete user" : "Uporabnika ni mogoče izbrisati",
"Backups restored successfully" : "Varnostne kopije so uspešno obnovljene.",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Ni mogoče obnoviti šifrirnih ključev. Preverite dnevnik owncloud.log ali pa stopite v stik s skrbnikom sistema.",
"Language changed" : "Jezik je spremenjen",
@@ -42,6 +37,11 @@
"A problem occurred while sending the email. Please revise your settings." : "Prišlo je do napake med pošiljanjem sporočila na elektronski naslov. Spremeniti je treba nastavitve.",
"Email sent" : "Elektronska pošta je poslana",
"You need to set your user email before being able to send test emails." : "Pred preizkusnim pošiljanjem sporočil je treba nastaviti elektronski naslov uporabnika.",
+ "Invalid mail address" : "Neveljaven elektronski naslov",
+ "Unable to create user." : "Ni mogoče ustvariti uporabnika.",
+ "Unable to delete user." : "Ni mogoče izbrisati uporabnika",
+ "Invalid user" : "Neveljavni podatki uporabnika",
+ "Email saved" : "Elektronski naslov je shranjen",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?",
"Add trusted domain" : "Dodaj varno domeno",
"Sending..." : "Poteka pošiljanje ...",
@@ -81,7 +81,6 @@
"A valid username must be provided" : "Navedeno mora biti veljavno uporabniško ime",
"Error creating user" : "Napaka ustvarjanja uporabnika",
"A valid password must be provided" : "Navedeno mora biti veljavno geslo",
- "Warning: Home directory for user \"{user}\" already exists" : "Opozorilo: osebna mapa uporabnika \"{user}\" že obstaja",
"__language_name__" : "Slovenščina",
"Personal Info" : "Osebni podatki",
"SSL root certificates" : "Korenska potrdila SSL",
@@ -99,18 +98,15 @@
"TLS" : "TLS",
"Security Warning" : "Varnostno opozorilo",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Dostop do %s poteka preko HTTP. Priporočljivo je nastaviti strežnik na privzeto uporabo varne povezave preko protokola HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Vaša podatkovna mapa in datoteke so najverjetneje dosegljive preko interneta. Datoteka .htaccess ni ustrezno nastavljena. Priporočljivo je nastaviti spletni strežnik tako, da podatkovna mapa ni prosto dostopna. To je mogoče zagotoviti tudi tako, da je mapa premaknjena iz neustrezne korenske v podrejeno mapo .",
"Setup Warning" : "Opozorilo nastavitve",
"Database Performance Info" : "Podrobnosti delovanja podatkovne zbirke",
"Module 'fileinfo' missing" : "Manjka modul 'fileinfo'.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Manjka modul PHP 'fileinfo'. Priporočljivo je omogočiti ta modul za popolno zaznavanje vrst MIME.",
- "Your PHP version is outdated" : "Nameščena različica PHP je zastarela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Nameščena različica PHP je zastarela. Priporočljivo je posodobiti namestitev na različico 5.3.8 ali novejše, saj starejše različice ne podpirajo vseh zmožnosti. Mogoče je, da namestitev ne deluje pravilno.",
"PHP charset is not set to UTF-8" : "Jezikovni znakovni nabor PHP ni določen kot UTF-8",
"Locale not working" : "Jezikovne prilagoditve ne delujejo.",
"System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.",
"This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Priporočljivo je namestiti zahtevane pakete v sistem za podporo ene izmed navedenih jezikovnih možnosti: %s",
+ "URL generation in notification emails" : "Ustvarjanje naslova URL v elektronskih sporočilih",
"No problems found" : "Ni zaznanih težav",
"Please double check the <a href='%s'>installation guides</a>." : "Preverite <a href='%s'>navodila namestitve</a>.",
"Last cron was executed at %s." : "Zadnje periodično opravilo cron je bilo izvedeno ob %s.",
@@ -123,17 +119,19 @@
"Allow users to share via link" : "Uporabnikom dovoli omogočanje souporabe s povezavami",
"Enforce password protection" : "Vsili zaščito z geslom",
"Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak",
+ "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.",
"Set default expiration date" : "Nastavitev privzetega datuma poteka",
"Expire after " : "Preteče po",
"days" : "dneh",
"Enforce expiration date" : "Vsili datum preteka",
"Allow resharing" : "Dovoli nadaljnjo souporabo",
"Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine",
- "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.",
"Exclude groups from sharing" : "Izloči skupine iz souporabe",
"These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti",
"Enforce HTTPS" : "Zahtevaj uporabo HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vsili povezavo odjemalca z %s preko šifrirane povezave.",
+ "Enforce HTTPS for subdomains" : "Vsili protokol HTTPS za podrejene domene",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vsili povezavo odjemalcev na naslovu %s in na vseh podrejenih domenah preko šifrirane povezave. ",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Za nastavljanje šifriranja SSL je treba vzpostaviti povezavo z mestom %s preko protokola HTTPS.",
"This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.",
"Send mode" : "Način pošiljanja",
@@ -162,12 +160,16 @@
"Update to %s" : "Posodobi na %s",
"Enable only for specific groups" : "Omogoči le za posamezne skupine",
"Uninstall App" : "Odstrani program",
+ "Cheers!" : "Na zdravje!",
"Administrator Documentation" : "Skrbniška dokumentacija",
"Online Documentation" : "Spletna dokumentacija",
"Forum" : "Forum",
"Bugtracker" : "Sledilnik hroščev",
"Commercial Support" : "Podpora strankam",
"Get the apps to sync your files" : "Pridobi programe za usklajevanje datotek",
+ "Desktop client" : "Namizni odjemalec",
+ "Android app" : "Program za Android",
+ "iOS app" : "Program za iOS",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Če želite podpreti projekt,\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">prispevajte k razvoju</a>\n\t\tali pa\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">seznanite druge o zmožnostih oblaka.</a>!",
"Show First Run Wizard again" : "Zaženi čarovnika prvega zagona",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Uporabljenega je <strong>%s</strong> od razpoložljivih <strong>%s</strong> prostora.",
@@ -202,11 +204,11 @@
"Delete Encryption Keys" : "Izbriši šifrirne ključe",
"Show storage location" : "Pokaži mesto shrambe",
"Show last log in" : "Pokaži podatke zadnje prijave",
- "Login Name" : "Prijavno ime",
+ "Username" : "Uporabniško ime",
"Create" : "Ustvari",
"Admin Recovery Password" : "Obnovitev skrbniškega gesla",
"Enter the recovery password in order to recover the users files during password change" : "Vnesite geslo, ki omogoča obnovitev uporabniških datotek med spreminjanjem gesla",
- "Search Users and Groups" : "Iskanje uporabnikov in skupin",
+ "Search Users" : "Poišči med uporabniki",
"Add Group" : "Dodaj skupino",
"Group" : "Skupina",
"Everyone" : "Vsi",
@@ -215,7 +217,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Vnesite količinsko omejitev prostora (na primer: \"512 MB\" ali \"12 GB\")",
"Unlimited" : "Neomejeno",
"Other" : "Drugo",
- "Username" : "Uporabniško ime",
"Group Admin for" : "Skrbnik skupine za",
"Quota" : "Količinska omejitev",
"Storage Location" : "Mesto shrambe",
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index 60ad553efea..1dbc3daf465 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -1,17 +1,23 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Paralajmërimet e Sigurisë dhe Konfigurimit",
"Cron" : "Cron",
"Sharing" : "Ndarje",
"Security" : "Siguria",
+ "Email Server" : "Serveri Email",
"Log" : "Historik aktiviteti",
"Authentication error" : "Gabim autentifikimi",
- "Group already exists" : "Grupi ekziston",
- "Unable to add group" : "E pamundur të shtohet grupi",
- "Email saved" : "Email u ruajt",
- "Invalid email" : "Email jo i vlefshëm",
- "Unable to delete group" : "E pamundur të fshihet grupi",
- "Unable to delete user" : "E pamundur të fshihet përdoruesi",
+ "Your full name has been changed." : "Emri juaj i plotë ka ndryshuar.",
+ "Unable to change full name" : "Nuk mund të ndryshohet emri i plotë",
+ "Files decrypted successfully" : "Skedarët janë dëshifruar me sukses",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't decrypt your files, check your password and try again" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni fjalëkalimin tuaj dhe provoni përsëri.",
+ "Encryption keys deleted permanently" : "Çelësat e shifrimit u fshinë përfundimisht",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të fshihen përfundimisht çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't remove app." : "Nuk mund të hiqet aplikacioni.",
+ "Backups restored successfully" : "Kopjet rezervë u restauruan me sukses",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të restaurohen çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
"Language changed" : "Gjuha u ndryshua",
"Invalid request" : "Kërkesë e pavlefshme",
"Admins can't remove themself from the admin group" : "Administratorët nuk mund të heqin vehten prej grupit admin",
@@ -19,9 +25,18 @@ OC.L10N.register(
"Unable to remove user from group %s" : "E pamundur të hiqet përdoruesi nga grupi %s",
"Couldn't update app." : "E pamundur të përditësohet app.",
"Wrong password" : "Fjalëkalim i gabuar",
+ "No user supplied" : "Nuk është dhënë asnjë përdorues",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Ju lutem jepni një fjalëkalim restaurimi administrativ, në të kundërt të gjitha të dhënat do humbasin",
+ "Wrong admin recovery password. Please check the password and try again." : "Fjalëkalim i gabuar restaurimi administrativ. Ju lutem kontrolloni fjalëkalimin dhe provoni përsëri.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Paneli i kontrollit nuk mbështet ndryshimin e fjalëkalimit, por çelësi i shifrimit të përdoruesit u modifikua me sukses.",
"Unable to change password" : "Fjalëkalimi nuk mund të ndryshohet",
+ "Enabled" : "Aktivizuar",
+ "Not enabled" : "Jo aktive",
+ "Recommended" : "E rekomanduar",
"Saved" : "U ruajt",
+ "test email settings" : "parametra test për email",
"Email sent" : "Email-i u dërgua",
+ "Email saved" : "Email u ruajt",
"Sending..." : "Duke dërguar",
"All" : "Të gjitha",
"Please wait...." : "Ju lutem prisni...",
@@ -31,6 +46,11 @@ OC.L10N.register(
"Error while updating app" : "Gabim gjatë përditësimit të app",
"Updated" : "I përditësuar",
"Select a profile picture" : "Zgjidh një foto profili",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Delete" : "Fshi",
"Groups" : "Grupet",
"deleted {groupName}" : "u fshi {groupName}",
@@ -73,6 +93,7 @@ OC.L10N.register(
"by" : "nga",
"Documentation:" : "Dokumentacioni:",
"User Documentation" : "Dokumentacion përdoruesi",
+ "Cheers!" : "Gjithë të mirat",
"Administrator Documentation" : "Dokumentacion administratori",
"Online Documentation" : "Dokumentacion online",
"Forum" : "Forumi",
@@ -97,17 +118,15 @@ OC.L10N.register(
"Language" : "Gjuha",
"Help translate" : "Ndihmoni në përkthim",
"Log-in password" : "Fjalëkalimi i hyrjes",
- "Login Name" : "Emri i Përdoruesit",
+ "Username" : "Përdoruesi",
"Create" : "Krijo",
"Admin Recovery Password" : "Rigjetja e fjalëkalimit të Admin",
"Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalimin e rigjetjes për të rigjetur skedarët e përdoruesit gjatë ndryshimit të fjalëkalimit",
- "Search Users and Groups" : "Kërko Përdorues apo Grupe",
"Add Group" : "Shto Grup",
"Group" : "Grup",
"Everyone" : "Të gjithë",
"Unlimited" : "E pakufizuar",
"Other" : "Tjetër",
- "Username" : "Përdoruesi",
"Last Login" : "Hyrja e fundit",
"change full name" : "ndrysho emrin e plotë",
"set new password" : "vendos fjalëkalim të ri",
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index 852ce5f3004..18352750616 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -1,15 +1,21 @@
{ "translations": {
+ "Security & Setup Warnings" : "Paralajmërimet e Sigurisë dhe Konfigurimit",
"Cron" : "Cron",
"Sharing" : "Ndarje",
"Security" : "Siguria",
+ "Email Server" : "Serveri Email",
"Log" : "Historik aktiviteti",
"Authentication error" : "Gabim autentifikimi",
- "Group already exists" : "Grupi ekziston",
- "Unable to add group" : "E pamundur të shtohet grupi",
- "Email saved" : "Email u ruajt",
- "Invalid email" : "Email jo i vlefshëm",
- "Unable to delete group" : "E pamundur të fshihet grupi",
- "Unable to delete user" : "E pamundur të fshihet përdoruesi",
+ "Your full name has been changed." : "Emri juaj i plotë ka ndryshuar.",
+ "Unable to change full name" : "Nuk mund të ndryshohet emri i plotë",
+ "Files decrypted successfully" : "Skedarët janë dëshifruar me sukses",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't decrypt your files, check your password and try again" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni fjalëkalimin tuaj dhe provoni përsëri.",
+ "Encryption keys deleted permanently" : "Çelësat e shifrimit u fshinë përfundimisht",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të fshihen përfundimisht çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't remove app." : "Nuk mund të hiqet aplikacioni.",
+ "Backups restored successfully" : "Kopjet rezervë u restauruan me sukses",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të restaurohen çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
"Language changed" : "Gjuha u ndryshua",
"Invalid request" : "Kërkesë e pavlefshme",
"Admins can't remove themself from the admin group" : "Administratorët nuk mund të heqin vehten prej grupit admin",
@@ -17,9 +23,18 @@
"Unable to remove user from group %s" : "E pamundur të hiqet përdoruesi nga grupi %s",
"Couldn't update app." : "E pamundur të përditësohet app.",
"Wrong password" : "Fjalëkalim i gabuar",
+ "No user supplied" : "Nuk është dhënë asnjë përdorues",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Ju lutem jepni një fjalëkalim restaurimi administrativ, në të kundërt të gjitha të dhënat do humbasin",
+ "Wrong admin recovery password. Please check the password and try again." : "Fjalëkalim i gabuar restaurimi administrativ. Ju lutem kontrolloni fjalëkalimin dhe provoni përsëri.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Paneli i kontrollit nuk mbështet ndryshimin e fjalëkalimit, por çelësi i shifrimit të përdoruesit u modifikua me sukses.",
"Unable to change password" : "Fjalëkalimi nuk mund të ndryshohet",
+ "Enabled" : "Aktivizuar",
+ "Not enabled" : "Jo aktive",
+ "Recommended" : "E rekomanduar",
"Saved" : "U ruajt",
+ "test email settings" : "parametra test për email",
"Email sent" : "Email-i u dërgua",
+ "Email saved" : "Email u ruajt",
"Sending..." : "Duke dërguar",
"All" : "Të gjitha",
"Please wait...." : "Ju lutem prisni...",
@@ -29,6 +44,11 @@
"Error while updating app" : "Gabim gjatë përditësimit të app",
"Updated" : "I përditësuar",
"Select a profile picture" : "Zgjidh një foto profili",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Delete" : "Fshi",
"Groups" : "Grupet",
"deleted {groupName}" : "u fshi {groupName}",
@@ -71,6 +91,7 @@
"by" : "nga",
"Documentation:" : "Dokumentacioni:",
"User Documentation" : "Dokumentacion përdoruesi",
+ "Cheers!" : "Gjithë të mirat",
"Administrator Documentation" : "Dokumentacion administratori",
"Online Documentation" : "Dokumentacion online",
"Forum" : "Forumi",
@@ -95,17 +116,15 @@
"Language" : "Gjuha",
"Help translate" : "Ndihmoni në përkthim",
"Log-in password" : "Fjalëkalimi i hyrjes",
- "Login Name" : "Emri i Përdoruesit",
+ "Username" : "Përdoruesi",
"Create" : "Krijo",
"Admin Recovery Password" : "Rigjetja e fjalëkalimit të Admin",
"Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalimin e rigjetjes për të rigjetur skedarët e përdoruesit gjatë ndryshimit të fjalëkalimit",
- "Search Users and Groups" : "Kërko Përdorues apo Grupe",
"Add Group" : "Shto Grup",
"Group" : "Grup",
"Everyone" : "Të gjithë",
"Unlimited" : "E pakufizuar",
"Other" : "Tjetër",
- "Username" : "Përdoruesi",
"Last Login" : "Hyrja e fundit",
"change full name" : "ndrysho emrin e plotë",
"set new password" : "vendos fjalëkalim të ri",
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index a01d9861750..a0d388d1dc9 100644
--- a/settings/l10n/sr.js
+++ b/settings/l10n/sr.js
@@ -5,12 +5,6 @@ OC.L10N.register(
"Security" : "Безбедност",
"Log" : "Бележење",
"Authentication error" : "Грешка при провери идентитета",
- "Group already exists" : "Група већ постоји",
- "Unable to add group" : "Не могу да додам групу",
- "Email saved" : "Е-порука сачувана",
- "Invalid email" : "Неисправна е-адреса",
- "Unable to delete group" : "Не могу да уклоним групу",
- "Unable to delete user" : "Не могу да уклоним корисника",
"Language changed" : "Језик је промењен",
"Invalid request" : "Неисправан захтев",
"Admins can't remove themself from the admin group" : "Управници не могу себе уклонити из админ групе",
@@ -18,6 +12,7 @@ OC.L10N.register(
"Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Couldn't update app." : "Не могу да ажурирам апликацију.",
"Email sent" : "Порука је послата",
+ "Email saved" : "Е-порука сачувана",
"Please wait...." : "Сачекајте…",
"Disable" : "Искључи",
"Enable" : "Омогући",
@@ -74,13 +69,12 @@ OC.L10N.register(
"Cancel" : "Откажи",
"Language" : "Језик",
"Help translate" : " Помозите у превођењу",
- "Login Name" : "Корисничко име",
+ "Username" : "Корисничко име",
"Create" : "Направи",
"Group" : "Група",
"Default Quota" : "Подразумевано ограничење",
"Unlimited" : "Неограничено",
"Other" : "Друго",
- "Username" : "Корисничко име",
"Quota" : "Ограничење",
"set new password" : "постави нову лозинку",
"Default" : "Подразумевано"
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index 39858457640..a8314f1ccb5 100644
--- a/settings/l10n/sr.json
+++ b/settings/l10n/sr.json
@@ -3,12 +3,6 @@
"Security" : "Безбедност",
"Log" : "Бележење",
"Authentication error" : "Грешка при провери идентитета",
- "Group already exists" : "Група већ постоји",
- "Unable to add group" : "Не могу да додам групу",
- "Email saved" : "Е-порука сачувана",
- "Invalid email" : "Неисправна е-адреса",
- "Unable to delete group" : "Не могу да уклоним групу",
- "Unable to delete user" : "Не могу да уклоним корисника",
"Language changed" : "Језик је промењен",
"Invalid request" : "Неисправан захтев",
"Admins can't remove themself from the admin group" : "Управници не могу себе уклонити из админ групе",
@@ -16,6 +10,7 @@
"Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Couldn't update app." : "Не могу да ажурирам апликацију.",
"Email sent" : "Порука је послата",
+ "Email saved" : "Е-порука сачувана",
"Please wait...." : "Сачекајте…",
"Disable" : "Искључи",
"Enable" : "Омогући",
@@ -72,13 +67,12 @@
"Cancel" : "Откажи",
"Language" : "Језик",
"Help translate" : " Помозите у превођењу",
- "Login Name" : "Корисничко име",
+ "Username" : "Корисничко име",
"Create" : "Направи",
"Group" : "Група",
"Default Quota" : "Подразумевано ограничење",
"Unlimited" : "Неограничено",
"Other" : "Друго",
- "Username" : "Корисничко име",
"Quota" : "Ограничење",
"set new password" : "постави нову лозинку",
"Default" : "Подразумевано"
diff --git a/settings/l10n/sr@latin.js b/settings/l10n/sr@latin.js
index 1a85ab01f37..19ed79764db 100644
--- a/settings/l10n/sr@latin.js
+++ b/settings/l10n/sr@latin.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"Authentication error" : "Greška pri autentifikaciji",
"Language changed" : "Jezik je izmenjen",
"Invalid request" : "Neispravan zahtev",
+ "Saved" : "Sačuvano",
"Email sent" : "Email poslat",
"Very weak password" : "Veoma slaba lozinka",
"Weak password" : "Slaba lozinka",
@@ -12,8 +13,11 @@ OC.L10N.register(
"Strong password" : "Jaka lozinka",
"Delete" : "Obriši",
"Groups" : "Grupe",
+ "never" : "nikad",
"Security Warning" : "Bezbednosno upozorenje",
+ "Port" : "Port",
"by" : "od",
+ "Cheers!" : "U zdravlje!",
"Password" : "Lozinka",
"Unable to change your password" : "Ne mogu da izmenim vašu lozinku",
"Current password" : "Trenutna lozinka",
@@ -22,9 +26,9 @@ OC.L10N.register(
"Email" : "E-mail",
"Cancel" : "Otkaži",
"Language" : "Jezik",
+ "Username" : "Korisničko ime",
"Create" : "Napravi",
"Group" : "Grupa",
- "Other" : "Drugo",
- "Username" : "Korisničko ime"
+ "Other" : "Drugo"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/sr@latin.json b/settings/l10n/sr@latin.json
index 654c8ded122..2fc6fe4ca07 100644
--- a/settings/l10n/sr@latin.json
+++ b/settings/l10n/sr@latin.json
@@ -2,6 +2,7 @@
"Authentication error" : "Greška pri autentifikaciji",
"Language changed" : "Jezik je izmenjen",
"Invalid request" : "Neispravan zahtev",
+ "Saved" : "Sačuvano",
"Email sent" : "Email poslat",
"Very weak password" : "Veoma slaba lozinka",
"Weak password" : "Slaba lozinka",
@@ -10,8 +11,11 @@
"Strong password" : "Jaka lozinka",
"Delete" : "Obriši",
"Groups" : "Grupe",
+ "never" : "nikad",
"Security Warning" : "Bezbednosno upozorenje",
+ "Port" : "Port",
"by" : "od",
+ "Cheers!" : "U zdravlje!",
"Password" : "Lozinka",
"Unable to change your password" : "Ne mogu da izmenim vašu lozinku",
"Current password" : "Trenutna lozinka",
@@ -20,9 +24,9 @@
"Email" : "E-mail",
"Cancel" : "Otkaži",
"Language" : "Jezik",
+ "Username" : "Korisničko ime",
"Create" : "Napravi",
"Group" : "Grupa",
- "Other" : "Drugo",
- "Username" : "Korisničko ime"
+ "Other" : "Drugo"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index c87c180bb6e..e3c5edff674 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Säkerhets & Inställningsvarningar",
"Cron" : "Cron",
"Sharing" : "Dela",
"Security" : "Säkerhet",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Fel vid autentisering",
"Your full name has been changed." : "Hela ditt namn har ändrats",
"Unable to change full name" : "Kunde inte ändra hela namnet",
- "Group already exists" : "Gruppen finns redan",
- "Unable to add group" : "Kan inte lägga till grupp",
"Files decrypted successfully" : "Filerna dekrypterades utan fel",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Det gick inte att dekryptera dina filer, kontrollera din owncloud.log eller fråga administratören",
"Couldn't decrypt your files, check your password and try again" : "Det gick inte att dekryptera filerna, kontrollera ditt lösenord och försök igen",
"Encryption keys deleted permanently" : "Krypteringsnycklar raderades permanent",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Det gick inte att permanent ta bort dina krypteringsnycklar, kontrollera din owncloud.log eller fråga din administratör",
"Couldn't remove app." : "Kunde inte ta bort applikationen.",
- "Email saved" : "E-post sparad",
- "Invalid email" : "Ogiltig e-post",
- "Unable to delete group" : "Kan inte radera grupp",
- "Unable to delete user" : "Kan inte radera användare",
"Backups restored successfully" : "Återställning av säkerhetskopior lyckades",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kan inte återställa dina krypteringsnycklar, vänligen kontrollera din owncloud.log eller fråga din administratör.",
"Language changed" : "Språk ändrades",
@@ -38,24 +33,36 @@ OC.L10N.register(
"Enabled" : "Aktiverad",
"Not enabled" : "Inte aktiverad",
"Recommended" : "Rekomenderad",
+ "Group already exists." : "Gruppen finns redan.",
+ "Unable to add group." : "Lyckades inte lägga till grupp.",
+ "Unable to delete group." : "Lyckades inte radera grupp.",
"Saved" : "Sparad",
"test email settings" : "testa e-post inställningar",
"If you received this email, the settings seem to be correct." : "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta.",
+ "A problem occurred while sending the email. Please revise your settings." : "Ett problem uppstod när e-postmeddelandet skickades. Vänligen se över dina inställningar.",
"Email sent" : "E-post skickat",
"You need to set your user email before being able to send test emails." : "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.",
+ "Invalid mail address" : "Ogiltig e-postadress",
+ "Unable to create user." : "Kan inte skapa användare.",
+ "Your %s account was created" : "Ditt %s konto skapades",
+ "Unable to delete user." : "Kan inte radera användare.",
+ "Forbidden" : "Förbjuden",
+ "Invalid user" : "Ogiltig användare",
+ "Unable to change mail address" : "Kan inte ändra e-postadress",
+ "Email saved" : "E-post sparad",
"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?",
- "Add trusted domain" : "Lägg till trusted domain",
- "Sending..." : "Skickar...",
+ "Add trusted domain" : "Lägg till betrodd domän",
+ "Sending..." : "Skickar ...",
"All" : "Alla",
- "Please wait...." : "Var god vänta...",
+ "Please wait...." : "Var god vänta ...",
"Error while disabling app" : "Fel vid inaktivering av app",
"Disable" : "Deaktivera",
"Enable" : "Aktivera",
"Error while enabling app" : "Fel vid aktivering av app",
- "Updating...." : "Uppdaterar...",
+ "Updating...." : "Uppdaterar ...",
"Error while updating app" : "Fel uppstod vid uppdatering av appen",
"Updated" : "Uppdaterad",
- "Uninstalling ...." : "Avinstallerar ....",
+ "Uninstalling ...." : "Avinstallerar ...",
"Error while uninstalling app" : "Ett fel inträffade när applikatonen avinstallerades",
"Uninstall" : "Avinstallera",
"Select a profile picture" : "Välj en profilbild",
@@ -66,7 +73,7 @@ OC.L10N.register(
"Strong password" : "Starkt lösenord",
"Valid until {date}" : "Giltig t.o.m. {date}",
"Delete" : "Radera",
- "Decrypting files... Please wait, this can take some time." : "Dekrypterar filer... Vänligen vänta, detta kan ta en stund.",
+ "Decrypting files... Please wait, this can take some time." : "Dekrypterar filer ... Vänligen vänta, detta kan ta en stund.",
"Delete encryption keys permanently." : "Radera krypteringsnycklar permanent",
"Restore encryption keys." : "Återställ krypteringsnycklar",
"Groups" : "Grupper",
@@ -75,14 +82,16 @@ OC.L10N.register(
"A valid group name must be provided" : "Ett giltigt gruppnamn måste anges",
"deleted {groupName}" : "raderade {groupName} ",
"undo" : "ångra",
+ "no group" : "ingen grupp",
"never" : "aldrig",
"deleted {userName}" : "raderade {userName}",
"add group" : "lägg till grupp",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"Error creating user" : "Fel vid skapande av användare",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
- "Warning: Home directory for user \"{user}\" already exists" : "Varning: Hem katalogen för varje användare \"{användare}\" finns redan",
+ "A valid email must be provided" : "En giltig e-postadress måste anges",
"__language_name__" : "__language_name__",
+ "Personal Info" : "Personlig info",
"SSL root certificates" : "SSL rotcertifikat",
"Encryption" : "Kryptering",
"Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)",
@@ -98,39 +107,49 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Säkerhetsvarning",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du ansluter till %s via HTTP. Vi rekommenderar starkt att du konfigurerar din server att använda HTTPS istället.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din datakatalog och dina filer är förmodligen åtkomliga från internet. Filen .htaccess fungerar inte. Vi rekommenderar starkt att du konfigurerar din webbserver så att datakatalogen inte längre är åtkomlig eller du flyttar datakatalogen utanför webbserverns rotkatalog.",
+ "Read-Only config enabled" : "Skrivskyddad konfiguration påslagen",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Lär-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.",
"Setup Warning" : "Installationsvarning",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställd för att rensa inline doc block. Detta kommer att göra flera kärnapplikationer otillgängliga.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache eller eAccelerator.",
"Database Performance Info" : "Databasprestanda Information",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite används som databas. För större installationer rekommenderar vi att ändra på detta. För att migrera till en annan databas, använd kommandoverktyget: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen \"fileinfo\" saknas",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.",
- "Your PHP version is outdated" : "Din PHP version är föråldrad",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP version är föråldrad. Vi rekommenderar starkt att uppdatera till 5.3.8 eller nyare eftersom äldre versioner är obrukbara. Det är möjligt att denna installation inte fungerar korrekt.",
- "Locale not working" : "Locale fungerar inte",
+ "PHP charset is not set to UTF-8" : "PHP-teckenuppsättning är inte satt till UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-teckenuppsättning är inte satt till UTF-8. Detta kan orsaka stora problem med icke-ASCII-tecken i filnamn. Vi rekommenderar starkt att ändra värdet \"default_charset\" i php.ini till \"UTF-8\".",
+ "Locale not working" : "\"Locale\" fungerar inte",
"System locale can not be set to a one which supports UTF-8." : "Systemspråk kan inte ställas in till ett som stödjer UTF-8.",
"This means that there might be problems with certain characters in file names." : "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de paket som krävs på ditt system för att stödja en av följande systemspråk: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de nödvändiga paketen på ditt system för att stödja en av följande språkversioner: %s.",
+ "URL generation in notification emails" : "URL-generering i notifieringsmejl",
+ "Configuration Checks" : "Konfigurationskontroller",
+ "No problems found" : "Inga problem hittades",
"Please double check the <a href='%s'>installation guides</a>." : "Var god kontrollera <a href='%s'>installationsguiden</a>.",
"Last cron was executed at %s." : "Sista cron kördes vid %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Sista cron kördes vid %s. Detta är mer än en timme sedan, något verkar fel.",
"Cron was not executed yet!" : "Cron kördes inte ännu!",
"Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.",
"Allow apps to use the Share API" : "Tillåt applikationer att använda delat API",
"Allow users to share via link" : "Tillåt användare att dela via länk",
"Enforce password protection" : "Tillämpa lösenordskydd",
"Allow public uploads" : "Tillåt offentlig uppladdning",
+ "Allow users to send mail notification for shared files" : "Tillåt användare att skicka mailnotifieringar för delade filer",
"Set default expiration date" : "Ställ in standardutgångsdatum",
"Expire after " : "Förfaller efter",
"days" : "dagar",
"Enforce expiration date" : "Tillämpa förfallodatum",
"Allow resharing" : "Tillåt vidaredelning",
"Restrict users to only share with users in their groups" : "Begränsa användare till att enbart kunna dela med användare i deras grupper",
- "Allow users to send mail notification for shared files" : "Tillåt användare att skicka mailnotifieringar för delade filer",
+ "Allow users to send mail notification for shared files to other users" : "Tillåt användare att skicka mejlnotifiering för delade filer till andra användare",
"Exclude groups from sharing" : "Exkludera grupp från att dela",
"These groups will still be able to receive shares, but not to initiate them." : "Dessa grupper kommer fortfarande kunna ta emot delningar, men inte skapa delningar.",
"Enforce HTTPS" : "Kräv HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Tvingar klienterna att ansluta till %s via en krypterad anslutning.",
+ "Enforce HTTPS for subdomains" : "Framtvinga HTTPS för underdomäner",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Tvingar klienter att ansluta till %s och underdomäner via en krypterad anslutning.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Anslut till din %s via HTTPS för att aktivera/deaktivera SSL",
"This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.",
"Send mode" : "Sändningsläge",
@@ -141,9 +160,10 @@ OC.L10N.register(
"Server address" : "Serveradress",
"Port" : "Port",
"Credentials" : "Inloggningsuppgifter",
- "SMTP Username" : "SMTP användarnamn",
- "SMTP Password" : "SMTP lösenord",
- "Test email settings" : "Testa e-post inställningar",
+ "SMTP Username" : "SMTP-användarnamn",
+ "SMTP Password" : "SMTP-lösenord",
+ "Store credentials" : "Lagra inloggningsuppgifter",
+ "Test email settings" : "Testa e-postinställningar",
"Send email" : "Skicka e-post",
"Log level" : "Nivå på loggning",
"More" : "Mer",
@@ -151,19 +171,28 @@ OC.L10N.register(
"Version" : "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Utvecklad av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud Community</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">källkoden</a> är licenserad under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Fler appar",
+ "Add your app" : "Lägg till din app",
"by" : "av",
+ "licensed" : "licensierad",
"Documentation:" : "Dokumentation:",
"User Documentation" : "Användardokumentation",
"Admin Documentation" : "Administratörsdokumentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Denna applikation kan inte installeras då följande beroenden inte är uppfyllda: %s",
"Update to %s" : "Uppdatera till %s",
"Enable only for specific groups" : "Aktivera endast för specifika grupper",
- "Uninstall App" : "Avinstallera Applikation",
+ "Uninstall App" : "Avinstallera applikation",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>vill bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det genom: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Ha de fint!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nvill bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det genom: %s\n",
"Administrator Documentation" : "Administratörsdokumentation",
"Online Documentation" : "Onlinedokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommersiell support",
"Get the apps to sync your files" : "Skaffa apparna för att synkronisera dina filer",
+ "Desktop client" : "Skrivbordsklient",
+ "Android app" : "Android-app",
+ "iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Om du vill stödja projektet\n<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">hjälp till med utvecklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">sprid budskapet vidare</a>!",
"Show First Run Wizard again" : "Visa Första uppstarts-guiden igen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har använt <strong>%s</strong> av tillgängliga <strong>%s</strong>",
@@ -187,6 +216,10 @@ OC.L10N.register(
"Choose as profile image" : "Välj som profilbild",
"Language" : "Språk",
"Help translate" : "Hjälp att översätta",
+ "Common Name" : "Vanligt namn",
+ "Valid until" : "Giltigt till",
+ "Issued By" : "Utfärdat av",
+ "Valid until %s" : "Giltigt till %s",
"Import Root Certificate" : "Importera rotcertifikat",
"The encryption app is no longer enabled, please decrypt all your files" : "Krypteringsapplikationen är inte längre aktiverad, vänligen dekryptera alla dina filer",
"Log-in password" : "Inloggningslösenord",
@@ -194,11 +227,17 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Dina krypteringsnycklar flyttas till en backup. Om något gick fel kan du återställa nycklarna. Bara ta bort dem permanent om du är säker på att alla filer dekrypteras korrekt.",
"Restore Encryption Keys" : "Återställ krypteringsnycklar",
"Delete Encryption Keys" : "Radera krypteringsnycklar",
- "Login Name" : "Inloggningsnamn",
+ "Show storage location" : "Visa lagringsplats",
+ "Show last log in" : "Visa senaste inloggning",
+ "Show user backend" : "Visa användar-back-end",
+ "Send email to new user" : "Skicka e-post till ny användare",
+ "Show email address" : "Visa e-postadress",
+ "Username" : "Användarnamn",
+ "E-Mail" : "E-post",
"Create" : "Skapa",
- "Admin Recovery Password" : "Admin återställningslösenord",
+ "Admin Recovery Password" : "Admin-återställningslösenord",
"Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte",
- "Search Users and Groups" : "Sök Användare och Grupper",
+ "Search Users" : "Sök användare",
"Add Group" : "Lägg till Grupp",
"Group" : "Grupp",
"Everyone" : "Alla",
@@ -207,12 +246,14 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")",
"Unlimited" : "Obegränsad",
"Other" : "Annat",
- "Username" : "Användarnamn",
+ "Group Admin for" : "Gruppadministratör för",
"Quota" : "Kvot",
"Storage Location" : "Lagringsplats",
+ "User Backend" : "Användar-back-end",
"Last Login" : "Senaste inloggning",
"change full name" : "ändra hela namnet",
"set new password" : "ange nytt lösenord",
+ "change email address" : "ändra e-postadress",
"Default" : "Förvald"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index d89f0b53b89..780839d1f7e 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Säkerhets & Inställningsvarningar",
"Cron" : "Cron",
"Sharing" : "Dela",
"Security" : "Säkerhet",
@@ -7,18 +8,12 @@
"Authentication error" : "Fel vid autentisering",
"Your full name has been changed." : "Hela ditt namn har ändrats",
"Unable to change full name" : "Kunde inte ändra hela namnet",
- "Group already exists" : "Gruppen finns redan",
- "Unable to add group" : "Kan inte lägga till grupp",
"Files decrypted successfully" : "Filerna dekrypterades utan fel",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Det gick inte att dekryptera dina filer, kontrollera din owncloud.log eller fråga administratören",
"Couldn't decrypt your files, check your password and try again" : "Det gick inte att dekryptera filerna, kontrollera ditt lösenord och försök igen",
"Encryption keys deleted permanently" : "Krypteringsnycklar raderades permanent",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Det gick inte att permanent ta bort dina krypteringsnycklar, kontrollera din owncloud.log eller fråga din administratör",
"Couldn't remove app." : "Kunde inte ta bort applikationen.",
- "Email saved" : "E-post sparad",
- "Invalid email" : "Ogiltig e-post",
- "Unable to delete group" : "Kan inte radera grupp",
- "Unable to delete user" : "Kan inte radera användare",
"Backups restored successfully" : "Återställning av säkerhetskopior lyckades",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Kan inte återställa dina krypteringsnycklar, vänligen kontrollera din owncloud.log eller fråga din administratör.",
"Language changed" : "Språk ändrades",
@@ -36,24 +31,36 @@
"Enabled" : "Aktiverad",
"Not enabled" : "Inte aktiverad",
"Recommended" : "Rekomenderad",
+ "Group already exists." : "Gruppen finns redan.",
+ "Unable to add group." : "Lyckades inte lägga till grupp.",
+ "Unable to delete group." : "Lyckades inte radera grupp.",
"Saved" : "Sparad",
"test email settings" : "testa e-post inställningar",
"If you received this email, the settings seem to be correct." : "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta.",
+ "A problem occurred while sending the email. Please revise your settings." : "Ett problem uppstod när e-postmeddelandet skickades. Vänligen se över dina inställningar.",
"Email sent" : "E-post skickat",
"You need to set your user email before being able to send test emails." : "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.",
+ "Invalid mail address" : "Ogiltig e-postadress",
+ "Unable to create user." : "Kan inte skapa användare.",
+ "Your %s account was created" : "Ditt %s konto skapades",
+ "Unable to delete user." : "Kan inte radera användare.",
+ "Forbidden" : "Förbjuden",
+ "Invalid user" : "Ogiltig användare",
+ "Unable to change mail address" : "Kan inte ändra e-postadress",
+ "Email saved" : "E-post sparad",
"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?",
- "Add trusted domain" : "Lägg till trusted domain",
- "Sending..." : "Skickar...",
+ "Add trusted domain" : "Lägg till betrodd domän",
+ "Sending..." : "Skickar ...",
"All" : "Alla",
- "Please wait...." : "Var god vänta...",
+ "Please wait...." : "Var god vänta ...",
"Error while disabling app" : "Fel vid inaktivering av app",
"Disable" : "Deaktivera",
"Enable" : "Aktivera",
"Error while enabling app" : "Fel vid aktivering av app",
- "Updating...." : "Uppdaterar...",
+ "Updating...." : "Uppdaterar ...",
"Error while updating app" : "Fel uppstod vid uppdatering av appen",
"Updated" : "Uppdaterad",
- "Uninstalling ...." : "Avinstallerar ....",
+ "Uninstalling ...." : "Avinstallerar ...",
"Error while uninstalling app" : "Ett fel inträffade när applikatonen avinstallerades",
"Uninstall" : "Avinstallera",
"Select a profile picture" : "Välj en profilbild",
@@ -64,7 +71,7 @@
"Strong password" : "Starkt lösenord",
"Valid until {date}" : "Giltig t.o.m. {date}",
"Delete" : "Radera",
- "Decrypting files... Please wait, this can take some time." : "Dekrypterar filer... Vänligen vänta, detta kan ta en stund.",
+ "Decrypting files... Please wait, this can take some time." : "Dekrypterar filer ... Vänligen vänta, detta kan ta en stund.",
"Delete encryption keys permanently." : "Radera krypteringsnycklar permanent",
"Restore encryption keys." : "Återställ krypteringsnycklar",
"Groups" : "Grupper",
@@ -73,14 +80,16 @@
"A valid group name must be provided" : "Ett giltigt gruppnamn måste anges",
"deleted {groupName}" : "raderade {groupName} ",
"undo" : "ångra",
+ "no group" : "ingen grupp",
"never" : "aldrig",
"deleted {userName}" : "raderade {userName}",
"add group" : "lägg till grupp",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"Error creating user" : "Fel vid skapande av användare",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
- "Warning: Home directory for user \"{user}\" already exists" : "Varning: Hem katalogen för varje användare \"{användare}\" finns redan",
+ "A valid email must be provided" : "En giltig e-postadress måste anges",
"__language_name__" : "__language_name__",
+ "Personal Info" : "Personlig info",
"SSL root certificates" : "SSL rotcertifikat",
"Encryption" : "Kryptering",
"Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)",
@@ -96,39 +105,49 @@
"TLS" : "TLS",
"Security Warning" : "Säkerhetsvarning",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du ansluter till %s via HTTP. Vi rekommenderar starkt att du konfigurerar din server att använda HTTPS istället.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din datakatalog och dina filer är förmodligen åtkomliga från internet. Filen .htaccess fungerar inte. Vi rekommenderar starkt att du konfigurerar din webbserver så att datakatalogen inte längre är åtkomlig eller du flyttar datakatalogen utanför webbserverns rotkatalog.",
+ "Read-Only config enabled" : "Skrivskyddad konfiguration påslagen",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Lär-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.",
"Setup Warning" : "Installationsvarning",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställd för att rensa inline doc block. Detta kommer att göra flera kärnapplikationer otillgängliga.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache eller eAccelerator.",
"Database Performance Info" : "Databasprestanda Information",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite används som databas. För större installationer rekommenderar vi att ändra på detta. För att migrera till en annan databas, använd kommandoverktyget: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen \"fileinfo\" saknas",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.",
- "Your PHP version is outdated" : "Din PHP version är föråldrad",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP version är föråldrad. Vi rekommenderar starkt att uppdatera till 5.3.8 eller nyare eftersom äldre versioner är obrukbara. Det är möjligt att denna installation inte fungerar korrekt.",
- "Locale not working" : "Locale fungerar inte",
+ "PHP charset is not set to UTF-8" : "PHP-teckenuppsättning är inte satt till UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-teckenuppsättning är inte satt till UTF-8. Detta kan orsaka stora problem med icke-ASCII-tecken i filnamn. Vi rekommenderar starkt att ändra värdet \"default_charset\" i php.ini till \"UTF-8\".",
+ "Locale not working" : "\"Locale\" fungerar inte",
"System locale can not be set to a one which supports UTF-8." : "Systemspråk kan inte ställas in till ett som stödjer UTF-8.",
"This means that there might be problems with certain characters in file names." : "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de paket som krävs på ditt system för att stödja en av följande systemspråk: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de nödvändiga paketen på ditt system för att stödja en av följande språkversioner: %s.",
+ "URL generation in notification emails" : "URL-generering i notifieringsmejl",
+ "Configuration Checks" : "Konfigurationskontroller",
+ "No problems found" : "Inga problem hittades",
"Please double check the <a href='%s'>installation guides</a>." : "Var god kontrollera <a href='%s'>installationsguiden</a>.",
"Last cron was executed at %s." : "Sista cron kördes vid %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Sista cron kördes vid %s. Detta är mer än en timme sedan, något verkar fel.",
"Cron was not executed yet!" : "Cron kördes inte ännu!",
"Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.",
"Allow apps to use the Share API" : "Tillåt applikationer att använda delat API",
"Allow users to share via link" : "Tillåt användare att dela via länk",
"Enforce password protection" : "Tillämpa lösenordskydd",
"Allow public uploads" : "Tillåt offentlig uppladdning",
+ "Allow users to send mail notification for shared files" : "Tillåt användare att skicka mailnotifieringar för delade filer",
"Set default expiration date" : "Ställ in standardutgångsdatum",
"Expire after " : "Förfaller efter",
"days" : "dagar",
"Enforce expiration date" : "Tillämpa förfallodatum",
"Allow resharing" : "Tillåt vidaredelning",
"Restrict users to only share with users in their groups" : "Begränsa användare till att enbart kunna dela med användare i deras grupper",
- "Allow users to send mail notification for shared files" : "Tillåt användare att skicka mailnotifieringar för delade filer",
+ "Allow users to send mail notification for shared files to other users" : "Tillåt användare att skicka mejlnotifiering för delade filer till andra användare",
"Exclude groups from sharing" : "Exkludera grupp från att dela",
"These groups will still be able to receive shares, but not to initiate them." : "Dessa grupper kommer fortfarande kunna ta emot delningar, men inte skapa delningar.",
"Enforce HTTPS" : "Kräv HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Tvingar klienterna att ansluta till %s via en krypterad anslutning.",
+ "Enforce HTTPS for subdomains" : "Framtvinga HTTPS för underdomäner",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Tvingar klienter att ansluta till %s och underdomäner via en krypterad anslutning.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Anslut till din %s via HTTPS för att aktivera/deaktivera SSL",
"This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.",
"Send mode" : "Sändningsläge",
@@ -139,9 +158,10 @@
"Server address" : "Serveradress",
"Port" : "Port",
"Credentials" : "Inloggningsuppgifter",
- "SMTP Username" : "SMTP användarnamn",
- "SMTP Password" : "SMTP lösenord",
- "Test email settings" : "Testa e-post inställningar",
+ "SMTP Username" : "SMTP-användarnamn",
+ "SMTP Password" : "SMTP-lösenord",
+ "Store credentials" : "Lagra inloggningsuppgifter",
+ "Test email settings" : "Testa e-postinställningar",
"Send email" : "Skicka e-post",
"Log level" : "Nivå på loggning",
"More" : "Mer",
@@ -149,19 +169,28 @@
"Version" : "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Utvecklad av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud Community</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">källkoden</a> är licenserad under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Fler appar",
+ "Add your app" : "Lägg till din app",
"by" : "av",
+ "licensed" : "licensierad",
"Documentation:" : "Dokumentation:",
"User Documentation" : "Användardokumentation",
"Admin Documentation" : "Administratörsdokumentation",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Denna applikation kan inte installeras då följande beroenden inte är uppfyllda: %s",
"Update to %s" : "Uppdatera till %s",
"Enable only for specific groups" : "Aktivera endast för specifika grupper",
- "Uninstall App" : "Avinstallera Applikation",
+ "Uninstall App" : "Avinstallera applikation",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>vill bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det genom: <a href=\"%s\">%s</a><br><br>",
+ "Cheers!" : "Ha de fint!",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nvill bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det genom: %s\n",
"Administrator Documentation" : "Administratörsdokumentation",
"Online Documentation" : "Onlinedokumentation",
"Forum" : "Forum",
"Bugtracker" : "Bugtracker",
"Commercial Support" : "Kommersiell support",
"Get the apps to sync your files" : "Skaffa apparna för att synkronisera dina filer",
+ "Desktop client" : "Skrivbordsklient",
+ "Android app" : "Android-app",
+ "iOS app" : "iOS-app",
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Om du vill stödja projektet\n<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">hjälp till med utvecklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">sprid budskapet vidare</a>!",
"Show First Run Wizard again" : "Visa Första uppstarts-guiden igen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du har använt <strong>%s</strong> av tillgängliga <strong>%s</strong>",
@@ -185,6 +214,10 @@
"Choose as profile image" : "Välj som profilbild",
"Language" : "Språk",
"Help translate" : "Hjälp att översätta",
+ "Common Name" : "Vanligt namn",
+ "Valid until" : "Giltigt till",
+ "Issued By" : "Utfärdat av",
+ "Valid until %s" : "Giltigt till %s",
"Import Root Certificate" : "Importera rotcertifikat",
"The encryption app is no longer enabled, please decrypt all your files" : "Krypteringsapplikationen är inte längre aktiverad, vänligen dekryptera alla dina filer",
"Log-in password" : "Inloggningslösenord",
@@ -192,11 +225,17 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Dina krypteringsnycklar flyttas till en backup. Om något gick fel kan du återställa nycklarna. Bara ta bort dem permanent om du är säker på att alla filer dekrypteras korrekt.",
"Restore Encryption Keys" : "Återställ krypteringsnycklar",
"Delete Encryption Keys" : "Radera krypteringsnycklar",
- "Login Name" : "Inloggningsnamn",
+ "Show storage location" : "Visa lagringsplats",
+ "Show last log in" : "Visa senaste inloggning",
+ "Show user backend" : "Visa användar-back-end",
+ "Send email to new user" : "Skicka e-post till ny användare",
+ "Show email address" : "Visa e-postadress",
+ "Username" : "Användarnamn",
+ "E-Mail" : "E-post",
"Create" : "Skapa",
- "Admin Recovery Password" : "Admin återställningslösenord",
+ "Admin Recovery Password" : "Admin-återställningslösenord",
"Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte",
- "Search Users and Groups" : "Sök Användare och Grupper",
+ "Search Users" : "Sök användare",
"Add Group" : "Lägg till Grupp",
"Group" : "Grupp",
"Everyone" : "Alla",
@@ -205,12 +244,14 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")",
"Unlimited" : "Obegränsad",
"Other" : "Annat",
- "Username" : "Användarnamn",
+ "Group Admin for" : "Gruppadministratör för",
"Quota" : "Kvot",
"Storage Location" : "Lagringsplats",
+ "User Backend" : "Användar-back-end",
"Last Login" : "Senaste inloggning",
"change full name" : "ändra hela namnet",
"set new password" : "ange nytt lösenord",
+ "change email address" : "ändra e-postadress",
"Default" : "Förvald"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ta_LK.js b/settings/l10n/ta_LK.js
index 45c3b753b45..97e05966861 100644
--- a/settings/l10n/ta_LK.js
+++ b/settings/l10n/ta_LK.js
@@ -2,16 +2,11 @@ OC.L10N.register(
"settings",
{
"Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
- "Group already exists" : "குழு ஏற்கனவே உள்ளது",
- "Unable to add group" : "குழுவை சேர்க்க முடியாது",
- "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
- "Invalid email" : "செல்லுபடியற்ற மின்னஞ்சல்",
- "Unable to delete group" : "குழுவை நீக்க முடியாது",
- "Unable to delete user" : "பயனாளரை நீக்க முடியாது",
"Language changed" : "மொழி மாற்றப்பட்டது",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
"Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
"Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
+ "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
"All" : "எல்லாம்",
"Disable" : "இயலுமைப்ப",
"Enable" : "இயலுமைப்படுத்துக",
@@ -45,11 +40,10 @@ OC.L10N.register(
"Language" : "மொழி",
"Help translate" : "மொழிபெயர்க்க உதவி",
"Import Root Certificate" : "வேர் சான்றிதழை இறக்குமதி செய்க",
- "Login Name" : "புகுபதிகை",
+ "Username" : "பயனாளர் பெயர்",
"Create" : "உருவாக்குக",
"Default Quota" : "பொது இருப்பு பங்கு",
"Other" : "மற்றவை",
- "Username" : "பயனாளர் பெயர்",
"Quota" : "பங்கு"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ta_LK.json b/settings/l10n/ta_LK.json
index ab306822e2c..7f01a9150d3 100644
--- a/settings/l10n/ta_LK.json
+++ b/settings/l10n/ta_LK.json
@@ -1,15 +1,10 @@
{ "translations": {
"Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
- "Group already exists" : "குழு ஏற்கனவே உள்ளது",
- "Unable to add group" : "குழுவை சேர்க்க முடியாது",
- "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
- "Invalid email" : "செல்லுபடியற்ற மின்னஞ்சல்",
- "Unable to delete group" : "குழுவை நீக்க முடியாது",
- "Unable to delete user" : "பயனாளரை நீக்க முடியாது",
"Language changed" : "மொழி மாற்றப்பட்டது",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
"Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
"Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
+ "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
"All" : "எல்லாம்",
"Disable" : "இயலுமைப்ப",
"Enable" : "இயலுமைப்படுத்துக",
@@ -43,11 +38,10 @@
"Language" : "மொழி",
"Help translate" : "மொழிபெயர்க்க உதவி",
"Import Root Certificate" : "வேர் சான்றிதழை இறக்குமதி செய்க",
- "Login Name" : "புகுபதிகை",
+ "Username" : "பயனாளர் பெயர்",
"Create" : "உருவாக்குக",
"Default Quota" : "பொது இருப்பு பங்கு",
"Other" : "மற்றவை",
- "Username" : "பயனாளர் பெயர்",
"Quota" : "பங்கு"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js
index c000b4419de..99e44100214 100644
--- a/settings/l10n/th_TH.js
+++ b/settings/l10n/th_TH.js
@@ -5,12 +5,6 @@ OC.L10N.register(
"Sharing" : "การแชร์ข้อมูล",
"Log" : "บันทึกการเปลี่ยนแปลง",
"Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน",
- "Group already exists" : "มีกลุ่มดังกล่าวอยู่ในระบบอยู่แล้ว",
- "Unable to add group" : "ไม่สามารถเพิ่มกลุ่มได้",
- "Email saved" : "อีเมลถูกบันทึกแล้ว",
- "Invalid email" : "อีเมลไม่ถูกต้อง",
- "Unable to delete group" : "ไม่สามารถลบกลุ่มได้",
- "Unable to delete user" : "ไม่สามารถลบผู้ใช้งานได้",
"Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว",
"Invalid request" : "คำร้องขอไม่ถูกต้อง",
"Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
@@ -18,6 +12,7 @@ OC.L10N.register(
"Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ",
"Email sent" : "ส่งอีเมล์แล้ว",
+ "Email saved" : "อีเมลถูกบันทึกแล้ว",
"All" : "ทั้งหมด",
"Please wait...." : "กรุณารอสักครู่...",
"Disable" : "ปิดใช้งาน",
@@ -68,12 +63,11 @@ OC.L10N.register(
"Language" : "ภาษา",
"Help translate" : "ช่วยกันแปล",
"Import Root Certificate" : "นำเข้าข้อมูลใบรับรองความปลอดภัยจาก Root",
- "Login Name" : "ชื่อที่ใช้สำหรับเข้าสู่ระบบ",
+ "Username" : "ชื่อผู้ใช้งาน",
"Create" : "สร้าง",
"Default Quota" : "โควต้าที่กำหนดไว้เริ่มต้น",
"Unlimited" : "ไม่จำกัดจำนวน",
"Other" : "อื่นๆ",
- "Username" : "ชื่อผู้ใช้งาน",
"Quota" : "พื้นที่",
"set new password" : "ตั้งค่ารหัสผ่านใหม่",
"Default" : "ค่าเริ่มต้น"
diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json
index a66be05967b..b2dddc747ea 100644
--- a/settings/l10n/th_TH.json
+++ b/settings/l10n/th_TH.json
@@ -3,12 +3,6 @@
"Sharing" : "การแชร์ข้อมูล",
"Log" : "บันทึกการเปลี่ยนแปลง",
"Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน",
- "Group already exists" : "มีกลุ่มดังกล่าวอยู่ในระบบอยู่แล้ว",
- "Unable to add group" : "ไม่สามารถเพิ่มกลุ่มได้",
- "Email saved" : "อีเมลถูกบันทึกแล้ว",
- "Invalid email" : "อีเมลไม่ถูกต้อง",
- "Unable to delete group" : "ไม่สามารถลบกลุ่มได้",
- "Unable to delete user" : "ไม่สามารถลบผู้ใช้งานได้",
"Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว",
"Invalid request" : "คำร้องขอไม่ถูกต้อง",
"Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
@@ -16,6 +10,7 @@
"Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ",
"Email sent" : "ส่งอีเมล์แล้ว",
+ "Email saved" : "อีเมลถูกบันทึกแล้ว",
"All" : "ทั้งหมด",
"Please wait...." : "กรุณารอสักครู่...",
"Disable" : "ปิดใช้งาน",
@@ -66,12 +61,11 @@
"Language" : "ภาษา",
"Help translate" : "ช่วยกันแปล",
"Import Root Certificate" : "นำเข้าข้อมูลใบรับรองความปลอดภัยจาก Root",
- "Login Name" : "ชื่อที่ใช้สำหรับเข้าสู่ระบบ",
+ "Username" : "ชื่อผู้ใช้งาน",
"Create" : "สร้าง",
"Default Quota" : "โควต้าที่กำหนดไว้เริ่มต้น",
"Unlimited" : "ไม่จำกัดจำนวน",
"Other" : "อื่นๆ",
- "Username" : "ชื่อผู้ใช้งาน",
"Quota" : "พื้นที่",
"set new password" : "ตั้งค่ารหัสผ่านใหม่",
"Default" : "ค่าเริ่มต้น"
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index 05aef6f2889..50933e2f862 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"settings",
{
- "Security & Setup Warnings" : "Güvelik & Kurulum Uyarıları",
+ "Security & Setup Warnings" : "Güvelik ve Kurulum Uyarıları",
"Cron" : "Cron",
"Sharing" : "Paylaşım",
"Security" : "Güvenlik",
@@ -10,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Kimlik doğrulama hatası",
"Your full name has been changed." : "Tam adınız değiştirildi.",
"Unable to change full name" : "Tam adınız değiştirilirken hata",
- "Group already exists" : "Grup zaten mevcut",
- "Unable to add group" : "Grup eklenemiyor",
"Files decrypted successfully" : "Dosyaların şifrelemesi başarıyla kaldırıldı",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dosyalarınızın şifrelemesi kaldırılamadı, lütfen owncloud.log dosyasına bakın veya yöneticinizle iletişime geçin",
"Couldn't decrypt your files, check your password and try again" : "Dosyalarınızın şifrelemesi kaldırılamadı, parolanızı denetleyip yeniden deneyin",
"Encryption keys deleted permanently" : "Şifreleme anahtarları kalıcı olarak silindi",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Şifreleme anahtarlarınız kalıcı olarak silinemedi, lütfen owncloud.log dosyasını denetleyin veya yöneticinize danışın",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
- "Email saved" : "E-posta kaydedildi",
- "Invalid email" : "Geçersiz e-posta",
- "Unable to delete group" : "Grup silinemiyor",
- "Unable to delete user" : "Kullanıcı silinemiyor",
"Backups restored successfully" : "Yedekler başarıyla geri yüklendi",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Şifreleme anahtarlarınız geri yüklenemedi, lütfen owncloud.log dosyasını denetleyin veya yöneticinize danışın",
"Language changed" : "Dil değiştirildi",
@@ -39,12 +33,18 @@ OC.L10N.register(
"Enabled" : "Etkin",
"Not enabled" : "Etkin değil",
"Recommended" : "Önerilen",
+ "Group already exists." : "Grup zaten mevcut.",
+ "Unable to add group." : "Grup ekleme başarısız.",
+ "Unable to delete group." : "Grubu silme başarısız.",
"Saved" : "Kaydedildi",
"test email settings" : "e-posta ayarlarını sına",
"If you received this email, the settings seem to be correct." : "Eğer bu e-postayı aldıysanız, ayarlar doğru gibi görünüyor.",
"A problem occurred while sending the email. Please revise your settings." : "E-posta gönderilirken bir sorun oluştu. Lütfen ayarlarınızı gözden geçirin.",
"Email sent" : "E-posta gönderildi",
"You need to set your user email before being able to send test emails." : "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamanız gerekiyor.",
+ "Unable to create user." : "Kullanıcı oluşturma başarısız.",
+ "Unable to delete user." : "Kullanıcı silme başarısız.",
+ "Email saved" : "E-posta kaydedildi",
"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?",
"Add trusted domain" : "Güvenilir alan adı ekle",
"Sending..." : "Gönderiliyor...",
@@ -84,7 +84,6 @@ OC.L10N.register(
"A valid username must be provided" : "Geçerli bir kullanıcı adı mutlaka sağlanmalı",
"Error creating user" : "Kullanıcı oluşturulurken hata",
"A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı",
- "Warning: Home directory for user \"{user}\" already exists" : "Uyarı: \"{user}\" kullanıcısı için zaten bir Ev dizini mevcut",
"__language_name__" : "Türkçe",
"Personal Info" : "Kişisel Bilgi",
"SSL root certificates" : "SSL kök sertifikaları",
@@ -102,7 +101,8 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Güvenlik Uyarısı",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s erişiminiz HTTP aracılığıyla yapılıyor. Sunucunuzu, HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Veri dizininiz ve dosyalarınız muhtemelen İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri dizinine erişimi kapatmanızı veya veri dizinini web sunucu belge kök dizini dışına almanızı şiddetle tavsiye ederiz.",
+ "Read-Only config enabled" : "Salt Okunur yapılandırma etkin",
+ "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." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.",
"Setup Warning" : "Kurulum Uyarısı",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.",
@@ -110,17 +110,15 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için bunu değiştirmenizi öneririz. Farklı bir veritabanına geçiş yapmak için komut satırı aracını kullanın: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modül 'fileinfo' kayıp",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modülü 'fileinfo' kayıp. MIME türü tanıma ile en iyi sonuçları elde etmek için bu modülü etkinleştirmenizi öneririz.",
- "Your PHP version is outdated" : "PHP sürümünüz eski",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP sürümünüz eski. Eski sürümlerde sorun olduğundan 5.3.8 veya daha yeni bir sürüme güncellemenizi şiddetle tavsiye ederiz. Bu kurulumun da doğru çalışmaması da olasıdır.",
"PHP charset is not set to UTF-8" : "PHP karakter kümesi UTF-8 olarak ayarlı değil",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP karakter kümesi UTF-8 olarak ayarlı değil. Bu, dosya isimlerindeki ASCII olmayan karakterler için büyük sorunlara yol açabilir. php.ini içerisindeki 'default_charset' ayarını 'UTF-8' olarak ayarlamanızı şiddetle tavsiye ediyoruz.",
"Locale not working" : "Yerel çalışmıyor",
"System locale can not be set to a one which supports UTF-8." : "Sistem yereli, UTF-8 destekleyenlerden biri olarak ayarlanamadı.",
"This means that there might be problems with certain characters in file names." : "Bu, dosya adlarında belirli karakterlerde problem olabileceği anlamına gelir.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
"URL generation in notification emails" : "Bildirim e-postalarında URL oluşturulması",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar olabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwritewebroot\" seçeneğini ayarlayın (Önerilen: \"%s\")",
- "No problems found" : "Sorun bulunamadı",
+ "Configuration Checks" : "Yapılandırma Kontrolleri",
+ "No problems found" : "Hiç sorun yok",
"Please double check the <a href='%s'>installation guides</a>." : "Lütfen <a href='%s'>kurulum rehberlerini</a> iki kez kontrol edin.",
"Last cron was executed at %s." : "Son cron %s zamanında çalıştırıldı.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Son cron %s zamanında çalıştırıldı. Bu bir saatten daha uzun bir süre, bir şeyler yanlış gibi görünüyor.",
@@ -132,17 +130,20 @@ OC.L10N.register(
"Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşmasına izin ver",
"Enforce password protection" : "Parola korumasını zorla",
"Allow public uploads" : "Herkes tarafından yüklemeye izin ver",
+ "Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
"Set default expiration date" : "Öntanımlı son kullanma tarihini ayarla",
"Expire after " : "Süre",
"days" : "gün sonra dolsun",
"Enforce expiration date" : "Son kullanma tarihini zorla",
"Allow resharing" : "Yeniden paylaşıma izin ver",
- "Restrict users to only share with users in their groups" : "Kullanıcıların sadece kendi gruplarındaki kullanıcılarla paylaşmasına sınırla",
- "Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
+ "Restrict users to only share with users in their groups" : "Kullanıcıların, dosyaları sadece kendi gruplarındaki kullanıcılarla paylaşmasına izin ver",
+ "Allow users to send mail notification for shared files to other users" : "Kullanıcıların diğer kullanıcılara, paylaşılmış dosyalar için posta bildirimi göndermesine izin ver",
"Exclude groups from sharing" : "Grupları paylaşma eyleminden hariç tut",
"These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar hala paylaşımları alabilecek, ancak başlatamayacaktır.",
"Enforce HTTPS" : "HTTPS bağlantısına zorla",
"Forces the clients to connect to %s via an encrypted connection." : "İstemcileri %s'a şifreli bir bağlantı ile bağlanmaya zorlar.",
+ "Enforce HTTPS for subdomains" : "Alt alan adları için HTTPS bağlantısına zorla",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "İstemcileri %s ve alt alan adlarına şifreli bir bağlantı ile bağlanmaya zorlar.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "SSL zorlamasını etkinleştirmek ya da devre dışı bırakmak için lütfen %s'a HTTPS ile bağlanın.",
"This is used for sending out notifications." : "Bu, bildirimler gönderilirken kullanılır.",
"Send mode" : "Gönderme kipi",
@@ -163,16 +164,18 @@ OC.L10N.register(
"Less" : "Daha az",
"Version" : "Sürüm",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud topluluğu</a> tarafından geliştirilmiş olup, <a href=\"https://github.com/owncloud\" target=\"_blank\">kaynak kodu</a>, <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> altında lisanslanmıştır.",
- "More apps" : "Daha fazla Uygulama",
+ "More apps" : "Daha fazla uygulama",
"Add your app" : "Uygulamanızı ekleyin",
"by" : "oluşturan",
"licensed" : "lisanslı",
"Documentation:" : "Belgelendirme:",
"User Documentation" : "Kullanıcı Belgelendirmesi",
"Admin Documentation" : "Yönetici Belgelendirmesi",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:",
"Update to %s" : "%s sürümüne güncelle",
"Enable only for specific groups" : "Sadece belirli gruplar için etkinleştir",
"Uninstall App" : "Uygulamayı Kaldır",
+ "Cheers!" : "Hoşça kalın!",
"Administrator Documentation" : "Yönetici Belgelendirmesi",
"Online Documentation" : "Çevrimiçi Belgelendirme",
"Forum" : "Forum",
@@ -215,11 +218,11 @@ OC.L10N.register(
"Delete Encryption Keys" : "Şifreleme Anahtarlarını Sil",
"Show storage location" : "Depolama konumunu göster",
"Show last log in" : "Son oturum açılma zamanını göster",
- "Login Name" : "Giriş Adı",
+ "Username" : "Kullanıcı Adı",
"Create" : "Oluştur",
"Admin Recovery Password" : "Yönetici Kurtarma Parolası",
"Enter the recovery password in order to recover the users files during password change" : "Parola değiştirme sırasında kullanıcı dosyalarını kurtarmak için kurtarma parolasını girin",
- "Search Users and Groups" : "Kullanıcı ve Grupları Ara",
+ "Search Users" : "Kullanıcı Ara",
"Add Group" : "Grup Ekle",
"Group" : "Grup",
"Everyone" : "Herkes",
@@ -228,7 +231,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lütfen disk alanı kotasını girin (örnek: \"512MB\" veya \"12GB\")",
"Unlimited" : "Sınırsız",
"Other" : "Diğer",
- "Username" : "Kullanıcı Adı",
"Group Admin for" : "Grup Yöneticisi",
"Quota" : "Kota",
"Storage Location" : "Depolama Konumu",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 7a84edb5ac9..190e8094937 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Security & Setup Warnings" : "Güvelik & Kurulum Uyarıları",
+ "Security & Setup Warnings" : "Güvelik ve Kurulum Uyarıları",
"Cron" : "Cron",
"Sharing" : "Paylaşım",
"Security" : "Güvenlik",
@@ -8,18 +8,12 @@
"Authentication error" : "Kimlik doğrulama hatası",
"Your full name has been changed." : "Tam adınız değiştirildi.",
"Unable to change full name" : "Tam adınız değiştirilirken hata",
- "Group already exists" : "Grup zaten mevcut",
- "Unable to add group" : "Grup eklenemiyor",
"Files decrypted successfully" : "Dosyaların şifrelemesi başarıyla kaldırıldı",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Dosyalarınızın şifrelemesi kaldırılamadı, lütfen owncloud.log dosyasına bakın veya yöneticinizle iletişime geçin",
"Couldn't decrypt your files, check your password and try again" : "Dosyalarınızın şifrelemesi kaldırılamadı, parolanızı denetleyip yeniden deneyin",
"Encryption keys deleted permanently" : "Şifreleme anahtarları kalıcı olarak silindi",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Şifreleme anahtarlarınız kalıcı olarak silinemedi, lütfen owncloud.log dosyasını denetleyin veya yöneticinize danışın",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
- "Email saved" : "E-posta kaydedildi",
- "Invalid email" : "Geçersiz e-posta",
- "Unable to delete group" : "Grup silinemiyor",
- "Unable to delete user" : "Kullanıcı silinemiyor",
"Backups restored successfully" : "Yedekler başarıyla geri yüklendi",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Şifreleme anahtarlarınız geri yüklenemedi, lütfen owncloud.log dosyasını denetleyin veya yöneticinize danışın",
"Language changed" : "Dil değiştirildi",
@@ -37,12 +31,18 @@
"Enabled" : "Etkin",
"Not enabled" : "Etkin değil",
"Recommended" : "Önerilen",
+ "Group already exists." : "Grup zaten mevcut.",
+ "Unable to add group." : "Grup ekleme başarısız.",
+ "Unable to delete group." : "Grubu silme başarısız.",
"Saved" : "Kaydedildi",
"test email settings" : "e-posta ayarlarını sına",
"If you received this email, the settings seem to be correct." : "Eğer bu e-postayı aldıysanız, ayarlar doğru gibi görünüyor.",
"A problem occurred while sending the email. Please revise your settings." : "E-posta gönderilirken bir sorun oluştu. Lütfen ayarlarınızı gözden geçirin.",
"Email sent" : "E-posta gönderildi",
"You need to set your user email before being able to send test emails." : "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamanız gerekiyor.",
+ "Unable to create user." : "Kullanıcı oluşturma başarısız.",
+ "Unable to delete user." : "Kullanıcı silme başarısız.",
+ "Email saved" : "E-posta kaydedildi",
"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?",
"Add trusted domain" : "Güvenilir alan adı ekle",
"Sending..." : "Gönderiliyor...",
@@ -82,7 +82,6 @@
"A valid username must be provided" : "Geçerli bir kullanıcı adı mutlaka sağlanmalı",
"Error creating user" : "Kullanıcı oluşturulurken hata",
"A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı",
- "Warning: Home directory for user \"{user}\" already exists" : "Uyarı: \"{user}\" kullanıcısı için zaten bir Ev dizini mevcut",
"__language_name__" : "Türkçe",
"Personal Info" : "Kişisel Bilgi",
"SSL root certificates" : "SSL kök sertifikaları",
@@ -100,7 +99,8 @@
"TLS" : "TLS",
"Security Warning" : "Güvenlik Uyarısı",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s erişiminiz HTTP aracılığıyla yapılıyor. Sunucunuzu, HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Veri dizininiz ve dosyalarınız muhtemelen İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri dizinine erişimi kapatmanızı veya veri dizinini web sunucu belge kök dizini dışına almanızı şiddetle tavsiye ederiz.",
+ "Read-Only config enabled" : "Salt Okunur yapılandırma etkin",
+ "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." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.",
"Setup Warning" : "Kurulum Uyarısı",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.",
@@ -108,17 +108,15 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için bunu değiştirmenizi öneririz. Farklı bir veritabanına geçiş yapmak için komut satırı aracını kullanın: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modül 'fileinfo' kayıp",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modülü 'fileinfo' kayıp. MIME türü tanıma ile en iyi sonuçları elde etmek için bu modülü etkinleştirmenizi öneririz.",
- "Your PHP version is outdated" : "PHP sürümünüz eski",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP sürümünüz eski. Eski sürümlerde sorun olduğundan 5.3.8 veya daha yeni bir sürüme güncellemenizi şiddetle tavsiye ederiz. Bu kurulumun da doğru çalışmaması da olasıdır.",
"PHP charset is not set to UTF-8" : "PHP karakter kümesi UTF-8 olarak ayarlı değil",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP karakter kümesi UTF-8 olarak ayarlı değil. Bu, dosya isimlerindeki ASCII olmayan karakterler için büyük sorunlara yol açabilir. php.ini içerisindeki 'default_charset' ayarını 'UTF-8' olarak ayarlamanızı şiddetle tavsiye ediyoruz.",
"Locale not working" : "Yerel çalışmıyor",
"System locale can not be set to a one which supports UTF-8." : "Sistem yereli, UTF-8 destekleyenlerden biri olarak ayarlanamadı.",
"This means that there might be problems with certain characters in file names." : "Bu, dosya adlarında belirli karakterlerde problem olabileceği anlamına gelir.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
"URL generation in notification emails" : "Bildirim e-postalarında URL oluşturulması",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar olabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwritewebroot\" seçeneğini ayarlayın (Önerilen: \"%s\")",
- "No problems found" : "Sorun bulunamadı",
+ "Configuration Checks" : "Yapılandırma Kontrolleri",
+ "No problems found" : "Hiç sorun yok",
"Please double check the <a href='%s'>installation guides</a>." : "Lütfen <a href='%s'>kurulum rehberlerini</a> iki kez kontrol edin.",
"Last cron was executed at %s." : "Son cron %s zamanında çalıştırıldı.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Son cron %s zamanında çalıştırıldı. Bu bir saatten daha uzun bir süre, bir şeyler yanlış gibi görünüyor.",
@@ -130,17 +128,20 @@
"Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşmasına izin ver",
"Enforce password protection" : "Parola korumasını zorla",
"Allow public uploads" : "Herkes tarafından yüklemeye izin ver",
+ "Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
"Set default expiration date" : "Öntanımlı son kullanma tarihini ayarla",
"Expire after " : "Süre",
"days" : "gün sonra dolsun",
"Enforce expiration date" : "Son kullanma tarihini zorla",
"Allow resharing" : "Yeniden paylaşıma izin ver",
- "Restrict users to only share with users in their groups" : "Kullanıcıların sadece kendi gruplarındaki kullanıcılarla paylaşmasına sınırla",
- "Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
+ "Restrict users to only share with users in their groups" : "Kullanıcıların, dosyaları sadece kendi gruplarındaki kullanıcılarla paylaşmasına izin ver",
+ "Allow users to send mail notification for shared files to other users" : "Kullanıcıların diğer kullanıcılara, paylaşılmış dosyalar için posta bildirimi göndermesine izin ver",
"Exclude groups from sharing" : "Grupları paylaşma eyleminden hariç tut",
"These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar hala paylaşımları alabilecek, ancak başlatamayacaktır.",
"Enforce HTTPS" : "HTTPS bağlantısına zorla",
"Forces the clients to connect to %s via an encrypted connection." : "İstemcileri %s'a şifreli bir bağlantı ile bağlanmaya zorlar.",
+ "Enforce HTTPS for subdomains" : "Alt alan adları için HTTPS bağlantısına zorla",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "İstemcileri %s ve alt alan adlarına şifreli bir bağlantı ile bağlanmaya zorlar.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "SSL zorlamasını etkinleştirmek ya da devre dışı bırakmak için lütfen %s'a HTTPS ile bağlanın.",
"This is used for sending out notifications." : "Bu, bildirimler gönderilirken kullanılır.",
"Send mode" : "Gönderme kipi",
@@ -161,16 +162,18 @@
"Less" : "Daha az",
"Version" : "Sürüm",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud topluluğu</a> tarafından geliştirilmiş olup, <a href=\"https://github.com/owncloud\" target=\"_blank\">kaynak kodu</a>, <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> altında lisanslanmıştır.",
- "More apps" : "Daha fazla Uygulama",
+ "More apps" : "Daha fazla uygulama",
"Add your app" : "Uygulamanızı ekleyin",
"by" : "oluşturan",
"licensed" : "lisanslı",
"Documentation:" : "Belgelendirme:",
"User Documentation" : "Kullanıcı Belgelendirmesi",
"Admin Documentation" : "Yönetici Belgelendirmesi",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:",
"Update to %s" : "%s sürümüne güncelle",
"Enable only for specific groups" : "Sadece belirli gruplar için etkinleştir",
"Uninstall App" : "Uygulamayı Kaldır",
+ "Cheers!" : "Hoşça kalın!",
"Administrator Documentation" : "Yönetici Belgelendirmesi",
"Online Documentation" : "Çevrimiçi Belgelendirme",
"Forum" : "Forum",
@@ -213,11 +216,11 @@
"Delete Encryption Keys" : "Şifreleme Anahtarlarını Sil",
"Show storage location" : "Depolama konumunu göster",
"Show last log in" : "Son oturum açılma zamanını göster",
- "Login Name" : "Giriş Adı",
+ "Username" : "Kullanıcı Adı",
"Create" : "Oluştur",
"Admin Recovery Password" : "Yönetici Kurtarma Parolası",
"Enter the recovery password in order to recover the users files during password change" : "Parola değiştirme sırasında kullanıcı dosyalarını kurtarmak için kurtarma parolasını girin",
- "Search Users and Groups" : "Kullanıcı ve Grupları Ara",
+ "Search Users" : "Kullanıcı Ara",
"Add Group" : "Grup Ekle",
"Group" : "Grup",
"Everyone" : "Herkes",
@@ -226,7 +229,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lütfen disk alanı kotasını girin (örnek: \"512MB\" veya \"12GB\")",
"Unlimited" : "Sınırsız",
"Other" : "Diğer",
- "Username" : "Kullanıcı Adı",
"Group Admin for" : "Grup Yöneticisi",
"Quota" : "Kota",
"Storage Location" : "Depolama Konumu",
diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js
index c3ce07cae69..9affc7e8372 100644
--- a/settings/l10n/ug.js
+++ b/settings/l10n/ug.js
@@ -5,18 +5,13 @@ OC.L10N.register(
"Security" : "بىخەتەرلىك",
"Log" : "خاتىرە",
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
- "Group already exists" : "گۇرۇپپا مەۋجۇت",
- "Unable to add group" : "گۇرۇپپا قوشقىلى بولمايدۇ",
- "Email saved" : "تورخەت ساقلاندى",
- "Invalid email" : "ئىناۋەتسىز تورخەت",
- "Unable to delete group" : "گۇرۇپپىنى ئۆچۈرەلمىدى",
- "Unable to delete user" : "ئىشلەتكۈچىنى ئۆچۈرەلمىدى",
"Language changed" : "تىل ئۆزگەردى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
"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." : "ئەپنى يېڭىلىيالمايدۇ.",
+ "Email saved" : "تورخەت ساقلاندى",
"All" : "ھەممىسى",
"Please wait...." : "سەل كۈتۈڭ…",
"Disable" : "چەكلە",
@@ -61,11 +56,10 @@ OC.L10N.register(
"Cancel" : "ۋاز كەچ",
"Language" : "تىل",
"Help translate" : "تەرجىمىگە ياردەم",
- "Login Name" : "تىزىمغا كىرىش ئاتى",
+ "Username" : "ئىشلەتكۈچى ئاتى",
"Create" : "قۇر",
"Unlimited" : "چەكسىز",
"Other" : "باشقا",
- "Username" : "ئىشلەتكۈچى ئاتى",
"set new password" : "يېڭى ئىم تەڭشە",
"Default" : "كۆڭۈلدىكى"
},
diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json
index fac830441bd..869d599f9d1 100644
--- a/settings/l10n/ug.json
+++ b/settings/l10n/ug.json
@@ -3,18 +3,13 @@
"Security" : "بىخەتەرلىك",
"Log" : "خاتىرە",
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
- "Group already exists" : "گۇرۇپپا مەۋجۇت",
- "Unable to add group" : "گۇرۇپپا قوشقىلى بولمايدۇ",
- "Email saved" : "تورخەت ساقلاندى",
- "Invalid email" : "ئىناۋەتسىز تورخەت",
- "Unable to delete group" : "گۇرۇپپىنى ئۆچۈرەلمىدى",
- "Unable to delete user" : "ئىشلەتكۈچىنى ئۆچۈرەلمىدى",
"Language changed" : "تىل ئۆزگەردى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
"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." : "ئەپنى يېڭىلىيالمايدۇ.",
+ "Email saved" : "تورخەت ساقلاندى",
"All" : "ھەممىسى",
"Please wait...." : "سەل كۈتۈڭ…",
"Disable" : "چەكلە",
@@ -59,11 +54,10 @@
"Cancel" : "ۋاز كەچ",
"Language" : "تىل",
"Help translate" : "تەرجىمىگە ياردەم",
- "Login Name" : "تىزىمغا كىرىش ئاتى",
+ "Username" : "ئىشلەتكۈچى ئاتى",
"Create" : "قۇر",
"Unlimited" : "چەكسىز",
"Other" : "باشقا",
- "Username" : "ئىشلەتكۈچى ئاتى",
"set new password" : "يېڭى ئىم تەڭشە",
"Default" : "كۆڭۈلدىكى"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index 71e5de126cf..59fcc97723a 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Попередження Налаштувань та Безпеки",
"Cron" : "Cron",
"Sharing" : "Спільний доступ",
"Security" : "Безпека",
@@ -9,18 +10,12 @@ OC.L10N.register(
"Authentication error" : "Помилка автентифікації",
"Your full name has been changed." : "Ваше ім'я було змінене",
"Unable to change full name" : "Неможливо змінити ім'я",
- "Group already exists" : "Група вже існує",
- "Unable to add group" : "Не вдалося додати групу",
"Files decrypted successfully" : "Файли розшифровані успішно",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Помилка розшифровки файлів, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
"Couldn't decrypt your files, check your password and try again" : "Помилка розшифровки файлів, перевірте пароль та спробуйте ще раз",
"Encryption keys deleted permanently" : "Ключі шифрування видалені назавжди",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Неможливо видалити назавжди ключі шифрування, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
"Couldn't remove app." : "Неможливо видалити додаток.",
- "Email saved" : "Адресу збережено",
- "Invalid email" : "Невірна адреса",
- "Unable to delete group" : "Не вдалося видалити групу",
- "Unable to delete user" : "Не вдалося видалити користувача",
"Backups restored successfully" : "Резервна копія успішно відновлена",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Неможливо відновити ключі шифрування, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
"Language changed" : "Мова змінена",
@@ -44,6 +39,7 @@ OC.L10N.register(
"A problem occurred while sending the email. Please revise your settings." : "Під час надсилання листа виникли проблеми. Будь ласка перевірте налаштування.",
"Email sent" : "Ел. пошта надіслана",
"You need to set your user email before being able to send test emails." : "Перед надсиланням тестових повідомлень ви повинні вказати свою електронну адресу.",
+ "Email saved" : "Адресу збережено",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
"Add trusted domain" : "Додати довірений домен",
"Sending..." : "Надсилання...",
@@ -83,7 +79,6 @@ OC.L10N.register(
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
"Error creating user" : "Помилка при створенні користувача",
"A valid password must be provided" : "Потрібно задати вірний пароль",
- "Warning: Home directory for user \"{user}\" already exists" : "Попередження: домашня тека користувача \"{user}\" вже існує",
"__language_name__" : "__language_name__",
"Personal Info" : "Особиста інформація",
"SSL root certificates" : "SSL корневі сертифікати",
@@ -101,7 +96,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "Попередження про небезпеку",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Ви звертаєтесь до %s за допомогою HTTP. Ми наполегливо рекомендуємо вам налаштувати сервер на використання HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ваш каталог з даними та Ваші файли можливо доступні з Інтернету. Файл .htaccess, наданий з ownCloud, не працює. Ми наполегливо рекомендуємо Вам налаштувати свій веб-сервер таким чином, щоб каталог data більше не був доступний, або перемістити каталог data за межі кореневого каталогу документів веб-сервера.",
"Setup Warning" : "Попередження при Налаштуванні",
"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.",
@@ -109,16 +103,13 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В якості бази даних використовується SQLite. Для більш навантажених серверів, ми рекомендуємо користуватися іншими типами баз даних. Для зміни типу бази даних використовуйте інструмент командного рядка: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' відсутній",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.",
- "Your PHP version is outdated" : "Ваш версія PHP застаріла",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваш версія PHP застаріла. Ми наполегливо рекомендуємо оновитися до версії 5.3.8 або новішої, оскільки старі версії працюють не правильно. ",
"PHP charset is not set to UTF-8" : "Кодування PHP не співпадає з UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодування PHP не співпадає з UTF-8. Це може викликати проблеми іменами файлів, які містять нелатинські символи. Ми наполегливо рекомендуємо змінити значення перемінної default_charset у файлі php.ini на UTF-8.",
"Locale not working" : "Локалізація не працює",
"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 to install the required packages on your system to support one of the following locales: %s." : "Ми наполегливо рекомендуємо встановити необхідні пакети в систему, для підтримки наступних локалей: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Пропонуємо встановити необхідні пакети для вашої системи для підтримки однієї з наступних мов %s.",
"URL generation in notification emails" : "Генерування URL для повідомлень в електроних листах",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Якщо ваша копія ownCloud встановлена не в корені домену та використовує систему планування CRON, можливі проблеми з генерацією правильних URL. Щоб уникнути цього, встановіть опцію overwritewebroot файла config.php відповідно до теки розташування установки (Ймовірніше за все, це \"%s\")",
"No problems found" : "Проблем не виявленно",
"Please double check the <a href='%s'>installation guides</a>." : "Будь ласка, перевірте <a href='%s'>інструкції по встановленню</a>.",
"Last cron was executed at %s." : "Останню cron-задачу було запущено: %s.",
@@ -131,17 +122,19 @@ OC.L10N.register(
"Allow users to share via link" : "Дозволити користувачам ділитися через посилання",
"Enforce password protection" : "Захист паролем обов'язковий",
"Allow public uploads" : "Дозволити публічне завантаження",
+ "Allow users to send mail notification for shared files" : "Дозволити користувачам сповіщати листами про спільний доступ до файлів",
"Set default expiration date" : "Встановити термін дії за замовчуванням",
"Expire after " : "Скінчиться через",
"days" : "днів",
"Enforce expiration date" : "Термін дії обов'язково",
"Allow resharing" : "Дозволити перевідкривати спільний доступ",
"Restrict users to only share with users in their groups" : "Дозволити користувачам відкривати спільний доступ лише для користувачів з їхньої групи",
- "Allow users to send mail notification for shared files" : "Дозволити користувачам сповіщати листами про спільний доступ до файлів",
"Exclude groups from sharing" : "Виключити групи зі спільного доступу",
"These groups will still be able to receive shares, but not to initiate them." : "Ці групи зможуть отримувати спільні файли, але не зможуть відправляти їх.",
"Enforce HTTPS" : "Примусове застосування HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Зобов'язати клієнтів під'єднуватись до %s через шифроване з'єднання.",
+ "Enforce HTTPS for subdomains" : "Примусове застосувати HTTPS для піддоменів",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Змушувати клієнтів під'єднуватися до %s та піддоменів за допомогою зашифрованого з'єднання.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Будь ласка, під'єднайтесь до цього %s за допомогою HTTPS, щоб увімкнути або вимкнути використання SSL.",
"This is used for sending out notifications." : "Використовується для відсилання повідомлень.",
"Send mode" : "Надіслати повідомлення",
@@ -172,6 +165,7 @@ OC.L10N.register(
"Update to %s" : "Оновити до %s",
"Enable only for specific groups" : "Включити тільки для конкретних груп",
"Uninstall App" : "Видалити додаток",
+ "Cheers!" : "Будьмо!",
"Administrator Documentation" : "Документація Адміністратора",
"Online Documentation" : "Он-Лайн Документація",
"Forum" : "Форум",
@@ -214,11 +208,11 @@ OC.L10N.register(
"Delete Encryption Keys" : "Видалити ключі шифрування",
"Show storage location" : "Показати місцезнаходження сховища",
"Show last log in" : "Показати останній вхід в систему",
- "Login Name" : "Ім'я Логіну",
+ "Username" : "Ім'я користувача",
"Create" : "Створити",
"Admin Recovery Password" : "Пароль адміністратора для відновлення",
"Enter the recovery password in order to recover the users files during password change" : "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю",
- "Search Users and Groups" : "Шукати користувачів та групи",
+ "Search Users" : "Шукати користувачів",
"Add Group" : "Додати групу",
"Group" : "Група",
"Everyone" : "Всі",
@@ -227,7 +221,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Будь ласка, вкажіть розмір сховища (наприклад: \"512 MB\" або \"12 GB\")",
"Unlimited" : "Необмежено",
"Other" : "Інше",
- "Username" : "Ім'я користувача",
"Group Admin for" : "Адміністратор групи",
"Quota" : "Квота",
"Storage Location" : "Місцезнаходження сховища",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index 3a3c79a7253..e338b6be518 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Попередження Налаштувань та Безпеки",
"Cron" : "Cron",
"Sharing" : "Спільний доступ",
"Security" : "Безпека",
@@ -7,18 +8,12 @@
"Authentication error" : "Помилка автентифікації",
"Your full name has been changed." : "Ваше ім'я було змінене",
"Unable to change full name" : "Неможливо змінити ім'я",
- "Group already exists" : "Група вже існує",
- "Unable to add group" : "Не вдалося додати групу",
"Files decrypted successfully" : "Файли розшифровані успішно",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Помилка розшифровки файлів, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
"Couldn't decrypt your files, check your password and try again" : "Помилка розшифровки файлів, перевірте пароль та спробуйте ще раз",
"Encryption keys deleted permanently" : "Ключі шифрування видалені назавжди",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Неможливо видалити назавжди ключі шифрування, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
"Couldn't remove app." : "Неможливо видалити додаток.",
- "Email saved" : "Адресу збережено",
- "Invalid email" : "Невірна адреса",
- "Unable to delete group" : "Не вдалося видалити групу",
- "Unable to delete user" : "Не вдалося видалити користувача",
"Backups restored successfully" : "Резервна копія успішно відновлена",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Неможливо відновити ключі шифрування, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
"Language changed" : "Мова змінена",
@@ -42,6 +37,7 @@
"A problem occurred while sending the email. Please revise your settings." : "Під час надсилання листа виникли проблеми. Будь ласка перевірте налаштування.",
"Email sent" : "Ел. пошта надіслана",
"You need to set your user email before being able to send test emails." : "Перед надсиланням тестових повідомлень ви повинні вказати свою електронну адресу.",
+ "Email saved" : "Адресу збережено",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
"Add trusted domain" : "Додати довірений домен",
"Sending..." : "Надсилання...",
@@ -81,7 +77,6 @@
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
"Error creating user" : "Помилка при створенні користувача",
"A valid password must be provided" : "Потрібно задати вірний пароль",
- "Warning: Home directory for user \"{user}\" already exists" : "Попередження: домашня тека користувача \"{user}\" вже існує",
"__language_name__" : "__language_name__",
"Personal Info" : "Особиста інформація",
"SSL root certificates" : "SSL корневі сертифікати",
@@ -99,7 +94,6 @@
"TLS" : "TLS",
"Security Warning" : "Попередження про небезпеку",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Ви звертаєтесь до %s за допомогою HTTP. Ми наполегливо рекомендуємо вам налаштувати сервер на використання HTTPS.",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ваш каталог з даними та Ваші файли можливо доступні з Інтернету. Файл .htaccess, наданий з ownCloud, не працює. Ми наполегливо рекомендуємо Вам налаштувати свій веб-сервер таким чином, щоб каталог data більше не був доступний, або перемістити каталог data за межі кореневого каталогу документів веб-сервера.",
"Setup Warning" : "Попередження при Налаштуванні",
"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.",
@@ -107,16 +101,13 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В якості бази даних використовується SQLite. Для більш навантажених серверів, ми рекомендуємо користуватися іншими типами баз даних. Для зміни типу бази даних використовуйте інструмент командного рядка: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' відсутній",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.",
- "Your PHP version is outdated" : "Ваш версія PHP застаріла",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваш версія PHP застаріла. Ми наполегливо рекомендуємо оновитися до версії 5.3.8 або новішої, оскільки старі версії працюють не правильно. ",
"PHP charset is not set to UTF-8" : "Кодування PHP не співпадає з UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодування PHP не співпадає з UTF-8. Це може викликати проблеми іменами файлів, які містять нелатинські символи. Ми наполегливо рекомендуємо змінити значення перемінної default_charset у файлі php.ini на UTF-8.",
"Locale not working" : "Локалізація не працює",
"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 to install the required packages on your system to support one of the following locales: %s." : "Ми наполегливо рекомендуємо встановити необхідні пакети в систему, для підтримки наступних локалей: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Пропонуємо встановити необхідні пакети для вашої системи для підтримки однієї з наступних мов %s.",
"URL generation in notification emails" : "Генерування URL для повідомлень в електроних листах",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Якщо ваша копія ownCloud встановлена не в корені домену та використовує систему планування CRON, можливі проблеми з генерацією правильних URL. Щоб уникнути цього, встановіть опцію overwritewebroot файла config.php відповідно до теки розташування установки (Ймовірніше за все, це \"%s\")",
"No problems found" : "Проблем не виявленно",
"Please double check the <a href='%s'>installation guides</a>." : "Будь ласка, перевірте <a href='%s'>інструкції по встановленню</a>.",
"Last cron was executed at %s." : "Останню cron-задачу було запущено: %s.",
@@ -129,17 +120,19 @@
"Allow users to share via link" : "Дозволити користувачам ділитися через посилання",
"Enforce password protection" : "Захист паролем обов'язковий",
"Allow public uploads" : "Дозволити публічне завантаження",
+ "Allow users to send mail notification for shared files" : "Дозволити користувачам сповіщати листами про спільний доступ до файлів",
"Set default expiration date" : "Встановити термін дії за замовчуванням",
"Expire after " : "Скінчиться через",
"days" : "днів",
"Enforce expiration date" : "Термін дії обов'язково",
"Allow resharing" : "Дозволити перевідкривати спільний доступ",
"Restrict users to only share with users in their groups" : "Дозволити користувачам відкривати спільний доступ лише для користувачів з їхньої групи",
- "Allow users to send mail notification for shared files" : "Дозволити користувачам сповіщати листами про спільний доступ до файлів",
"Exclude groups from sharing" : "Виключити групи зі спільного доступу",
"These groups will still be able to receive shares, but not to initiate them." : "Ці групи зможуть отримувати спільні файли, але не зможуть відправляти їх.",
"Enforce HTTPS" : "Примусове застосування HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Зобов'язати клієнтів під'єднуватись до %s через шифроване з'єднання.",
+ "Enforce HTTPS for subdomains" : "Примусове застосувати HTTPS для піддоменів",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Змушувати клієнтів під'єднуватися до %s та піддоменів за допомогою зашифрованого з'єднання.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Будь ласка, під'єднайтесь до цього %s за допомогою HTTPS, щоб увімкнути або вимкнути використання SSL.",
"This is used for sending out notifications." : "Використовується для відсилання повідомлень.",
"Send mode" : "Надіслати повідомлення",
@@ -170,6 +163,7 @@
"Update to %s" : "Оновити до %s",
"Enable only for specific groups" : "Включити тільки для конкретних груп",
"Uninstall App" : "Видалити додаток",
+ "Cheers!" : "Будьмо!",
"Administrator Documentation" : "Документація Адміністратора",
"Online Documentation" : "Он-Лайн Документація",
"Forum" : "Форум",
@@ -212,11 +206,11 @@
"Delete Encryption Keys" : "Видалити ключі шифрування",
"Show storage location" : "Показати місцезнаходження сховища",
"Show last log in" : "Показати останній вхід в систему",
- "Login Name" : "Ім'я Логіну",
+ "Username" : "Ім'я користувача",
"Create" : "Створити",
"Admin Recovery Password" : "Пароль адміністратора для відновлення",
"Enter the recovery password in order to recover the users files during password change" : "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю",
- "Search Users and Groups" : "Шукати користувачів та групи",
+ "Search Users" : "Шукати користувачів",
"Add Group" : "Додати групу",
"Group" : "Група",
"Everyone" : "Всі",
@@ -225,7 +219,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Будь ласка, вкажіть розмір сховища (наприклад: \"512 MB\" або \"12 GB\")",
"Unlimited" : "Необмежено",
"Other" : "Інше",
- "Username" : "Ім'я користувача",
"Group Admin for" : "Адміністратор групи",
"Quota" : "Квота",
"Storage Location" : "Місцезнаходження сховища",
diff --git a/settings/l10n/ur_PK.js b/settings/l10n/ur_PK.js
index f9a042bc94f..d98ee1592d2 100644
--- a/settings/l10n/ur_PK.js
+++ b/settings/l10n/ur_PK.js
@@ -12,10 +12,11 @@ OC.L10N.register(
"Security Warning" : "حفاظتی انتباہ",
"More" : "مزید",
"Less" : "کم",
+ "Cheers!" : "واہ!",
"Password" : "پاسورڈ",
"New password" : "نیا پاسورڈ",
"Cancel" : "منسوخ کریں",
- "Other" : "دیگر",
- "Username" : "یوزر نیم"
+ "Username" : "یوزر نیم",
+ "Other" : "دیگر"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ur_PK.json b/settings/l10n/ur_PK.json
index 99a7bda9ad7..726d31d4171 100644
--- a/settings/l10n/ur_PK.json
+++ b/settings/l10n/ur_PK.json
@@ -10,10 +10,11 @@
"Security Warning" : "حفاظتی انتباہ",
"More" : "مزید",
"Less" : "کم",
+ "Cheers!" : "واہ!",
"Password" : "پاسورڈ",
"New password" : "نیا پاسورڈ",
"Cancel" : "منسوخ کریں",
- "Other" : "دیگر",
- "Username" : "یوزر نیم"
+ "Username" : "یوزر نیم",
+ "Other" : "دیگر"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/vi.js b/settings/l10n/vi.js
index ef9221683d1..4e2a994628c 100644
--- a/settings/l10n/vi.js
+++ b/settings/l10n/vi.js
@@ -7,12 +7,6 @@ OC.L10N.register(
"Authentication error" : "Lỗi xác thực",
"Your full name has been changed." : "Họ và tên đã được thay đổi.",
"Unable to change full name" : "Họ và tên không thể đổi ",
- "Group already exists" : "Nhóm đã tồn tại",
- "Unable to add group" : "Không thể thêm nhóm",
- "Email saved" : "Lưu email",
- "Invalid email" : "Email không hợp lệ",
- "Unable to delete group" : "Không thể xóa nhóm",
- "Unable to delete user" : "Không thể xóa người dùng",
"Language changed" : "Ngôn ngữ đã được thay đổi",
"Invalid request" : "Yêu cầu không hợp lệ",
"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ý",
@@ -21,6 +15,7 @@ OC.L10N.register(
"Couldn't update app." : "Không thể cập nhật ứng dụng",
"Enabled" : "Bật",
"Email sent" : "Email đã được gửi",
+ "Email saved" : "Lưu email",
"All" : "Tất cả",
"Please wait...." : "Xin hãy đợi...",
"Disable" : "Tắt",
@@ -38,7 +33,6 @@ OC.L10N.register(
"None" : "Không gì cả",
"Login" : "Đăng nhập",
"Security Warning" : "Cảnh bảo bảo mật",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Thư mục và các tập tin của bạn có thể được truy cập từ Internet. Tập tin .htaccess không làm việc. Chúng tôi đề nghị bạn cấu hình ebserver ,phân quyền lại thư mục dữ liệu và cấp quyền truy cập hoặc di chuyển thư mục dữ liệu bên ngoài tài liệu gốc máy chủ web.",
"Execute one task with each page loaded" : "Thực thi tác vụ mỗi khi trang được tải",
"Allow apps to use the Share API" : "Cho phép các ứng dụng sử dụng chia sẻ API",
"Allow resharing" : "Cho phép chia sẻ lại",
@@ -51,6 +45,7 @@ OC.L10N.register(
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Được phát triển bởi <a href=\"http://ownCloud.org/contact\" target=\"_blank\">cộng đồng ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">mã nguồn </a> đã được cấp phép theo chuẩn <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"by" : "bởi",
"User Documentation" : "Tài liệu người sử dụng",
+ "Cheers!" : "Chúc mừng!",
"Administrator Documentation" : "Tài liệu quản trị",
"Online Documentation" : "Tài liệu trực tuyến",
"Forum" : "Diễn đàn",
@@ -75,13 +70,12 @@ OC.L10N.register(
"Language" : "Ngôn ngữ",
"Help translate" : "Hỗ trợ dịch thuật",
"Import Root Certificate" : "Nhập Root Certificate",
- "Login Name" : "Tên đăng nhập",
+ "Username" : "Tên đăng nhập",
"Create" : "Tạo",
"Group" : "N",
"Default Quota" : "Hạn ngạch mặt định",
"Unlimited" : "Không giới hạn",
"Other" : "Khác",
- "Username" : "Tên đăng nhập",
"Quota" : "Hạn ngạch",
"change full name" : "Đổi họ và t",
"set new password" : "đặt mật khẩu mới",
diff --git a/settings/l10n/vi.json b/settings/l10n/vi.json
index d927ecf1661..c875e9aa622 100644
--- a/settings/l10n/vi.json
+++ b/settings/l10n/vi.json
@@ -5,12 +5,6 @@
"Authentication error" : "Lỗi xác thực",
"Your full name has been changed." : "Họ và tên đã được thay đổi.",
"Unable to change full name" : "Họ và tên không thể đổi ",
- "Group already exists" : "Nhóm đã tồn tại",
- "Unable to add group" : "Không thể thêm nhóm",
- "Email saved" : "Lưu email",
- "Invalid email" : "Email không hợp lệ",
- "Unable to delete group" : "Không thể xóa nhóm",
- "Unable to delete user" : "Không thể xóa người dùng",
"Language changed" : "Ngôn ngữ đã được thay đổi",
"Invalid request" : "Yêu cầu không hợp lệ",
"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ý",
@@ -19,6 +13,7 @@
"Couldn't update app." : "Không thể cập nhật ứng dụng",
"Enabled" : "Bật",
"Email sent" : "Email đã được gửi",
+ "Email saved" : "Lưu email",
"All" : "Tất cả",
"Please wait...." : "Xin hãy đợi...",
"Disable" : "Tắt",
@@ -36,7 +31,6 @@
"None" : "Không gì cả",
"Login" : "Đăng nhập",
"Security Warning" : "Cảnh bảo bảo mật",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Thư mục và các tập tin của bạn có thể được truy cập từ Internet. Tập tin .htaccess không làm việc. Chúng tôi đề nghị bạn cấu hình ebserver ,phân quyền lại thư mục dữ liệu và cấp quyền truy cập hoặc di chuyển thư mục dữ liệu bên ngoài tài liệu gốc máy chủ web.",
"Execute one task with each page loaded" : "Thực thi tác vụ mỗi khi trang được tải",
"Allow apps to use the Share API" : "Cho phép các ứng dụng sử dụng chia sẻ API",
"Allow resharing" : "Cho phép chia sẻ lại",
@@ -49,6 +43,7 @@
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Được phát triển bởi <a href=\"http://ownCloud.org/contact\" target=\"_blank\">cộng đồng ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">mã nguồn </a> đã được cấp phép theo chuẩn <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"by" : "bởi",
"User Documentation" : "Tài liệu người sử dụng",
+ "Cheers!" : "Chúc mừng!",
"Administrator Documentation" : "Tài liệu quản trị",
"Online Documentation" : "Tài liệu trực tuyến",
"Forum" : "Diễn đàn",
@@ -73,13 +68,12 @@
"Language" : "Ngôn ngữ",
"Help translate" : "Hỗ trợ dịch thuật",
"Import Root Certificate" : "Nhập Root Certificate",
- "Login Name" : "Tên đăng nhập",
+ "Username" : "Tên đăng nhập",
"Create" : "Tạo",
"Group" : "N",
"Default Quota" : "Hạn ngạch mặt định",
"Unlimited" : "Không giới hạn",
"Other" : "Khác",
- "Username" : "Tên đăng nhập",
"Quota" : "Hạn ngạch",
"change full name" : "Đổi họ và t",
"set new password" : "đặt mật khẩu mới",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index f111d768d95..23c3d927474 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -9,18 +9,12 @@ OC.L10N.register(
"Authentication error" : "认证错误",
"Your full name has been changed." : "您的全名已修改。",
"Unable to change full name" : "无法修改全名",
- "Group already exists" : "已存在该组",
- "Unable to add group" : "无法增加组",
"Files decrypted successfully" : "文件解密成功",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "无法解密您的文件,请检查您的 owncloud.log 或询问管理员",
"Couldn't decrypt your files, check your password and try again" : "无法解密您的文件,请检查密码并重试。",
"Encryption keys deleted permanently" : "加密密钥已经永久删除",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "无法永久删除您的加密密钥,请检查 owncloud.log 或联系管理员",
"Couldn't remove app." : "无法删除应用。",
- "Email saved" : "电子邮件已保存",
- "Invalid email" : "无效的电子邮件",
- "Unable to delete group" : "无法删除组",
- "Unable to delete user" : "无法删除用户",
"Backups restored successfully" : "恢复备份成功",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "无法恢复加密密钥,请检查 owncloud.log 或联系管理员",
"Language changed" : "语言已修改",
@@ -41,6 +35,7 @@ OC.L10N.register(
"If you received this email, the settings seem to be correct." : "如果您收到了这封邮件,看起来设置没有问题。",
"Email sent" : "邮件已发送",
"You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。",
+ "Email saved" : "电子邮件已保存",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?",
"Add trusted domain" : "添加信任域",
"Sending..." : "正在发送...",
@@ -79,7 +74,6 @@ OC.L10N.register(
"A valid username must be provided" : "必须提供合法的用户名",
"Error creating user" : "创建用户出错",
"A valid password must be provided" : "必须提供合法的密码",
- "Warning: Home directory for user \"{user}\" already exists" : "警告:用户 \"{user}\" 的家目录已存在",
"__language_name__" : "简体中文",
"SSL root certificates" : "SSL根证书",
"Encryption" : "加密",
@@ -96,7 +90,6 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "安全警告",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "您正通过 HTTP 访问 %s。我们强烈建议您配置你的服务器来要求使用 HTTPS。",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的数据文件夹和文件可由互联网访问。OwnCloud提供的.htaccess文件未生效。我们强烈建议您配置服务器,以使数据文件夹不可被访问,或者将数据文件夹移到web服务器以外。",
"Setup Warning" : "设置警告",
"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。",
@@ -104,16 +97,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite 正在使用。我们建议大型网站切换到其他数据库。请使用命令行工具:“occ db:convert-type”迁移数据库",
"Module 'fileinfo' missing" : "模块'文件信息'丢失",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.",
- "Your PHP version is outdated" : "您的 PHP 版本不是最新版",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已过期。强烈建议更新至 5.3.8 或者更新版本因为老版本存在已知问题。本次安装可能并未正常工作。",
"PHP charset is not set to UTF-8" : "PHP字符集没有设置为UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP字符集没有设置为UTF-8。这会导致非ASC||字符的文件名出现乱码。我们强烈建议修改php.ini文件中的'default_charset' 的值为 'UTF-8'",
"Locale not working" : "本地化无法工作",
"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 to install the required packages on your system to support one of the following locales: %s." : "强烈建议在您的系统上安装需要的软件包来支持以下语系之一:%s。",
"URL generation in notification emails" : "在通知邮件里生成URL",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你没有安装ownCloud在域名的根目录里,并使用系统的crom,这会导致URL的生成出错。要避免这个问题,请设置 config.php 文件中的\"overwritewebroot\" 参数值为你的实际安装web路径。(建议为: \"%s\")",
"No problems found" : "未发现问题",
"Please double check the <a href='%s'>installation guides</a>." : "请认真检查<a href='%s'>安装指南</a>.",
"Last cron was executed at %s." : "上次定时任务执行于 %s。",
@@ -126,13 +115,13 @@ OC.L10N.register(
"Allow users to share via link" : "允许用户通过链接分享文件",
"Enforce password protection" : "强制密码保护",
"Allow public uploads" : "允许公开上传",
+ "Allow users to send mail notification for shared files" : "允许用户发送共享文件的邮件通知",
"Set default expiration date" : "设置默认过期日期",
"Expire after " : "过期于",
"days" : "天",
"Enforce expiration date" : "强制过期日期",
"Allow resharing" : "允许再次共享",
"Restrict users to only share with users in their groups" : "限制仅与组内用户分享",
- "Allow users to send mail notification for shared files" : "允许用户发送共享文件的邮件通知",
"Exclude groups from sharing" : "在分享中排除组",
"These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。",
"Enforce HTTPS" : "强制使用 HTTPS",
@@ -163,6 +152,7 @@ OC.L10N.register(
"Admin Documentation" : "管理员文档",
"Enable only for specific groups" : "仅对特定的组开放",
"Uninstall App" : "下载应用",
+ "Cheers!" : "干杯!",
"Administrator Documentation" : "管理员文档",
"Online Documentation" : "在线文档",
"Forum" : "论坛",
@@ -205,11 +195,10 @@ OC.L10N.register(
"Delete Encryption Keys" : "删除加密密钥",
"Show storage location" : "显示存储位置",
"Show last log in" : "显示最后登录",
- "Login Name" : "登录名称",
+ "Username" : "用户名",
"Create" : "创建",
"Admin Recovery Password" : "管理恢复密码",
"Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件",
- "Search Users and Groups" : "搜索用户和组",
"Add Group" : "增加组",
"Group" : "分组",
"Everyone" : "所有人",
@@ -218,7 +207,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储限额 (ex: \"512 MB\" or \"12 GB\")",
"Unlimited" : "无限",
"Other" : "其它",
- "Username" : "用户名",
"Quota" : "配额",
"Storage Location" : "存储空间位置",
"Last Login" : "最后登录",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index d110874bb69..0f870b0b624 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -7,18 +7,12 @@
"Authentication error" : "认证错误",
"Your full name has been changed." : "您的全名已修改。",
"Unable to change full name" : "无法修改全名",
- "Group already exists" : "已存在该组",
- "Unable to add group" : "无法增加组",
"Files decrypted successfully" : "文件解密成功",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "无法解密您的文件,请检查您的 owncloud.log 或询问管理员",
"Couldn't decrypt your files, check your password and try again" : "无法解密您的文件,请检查密码并重试。",
"Encryption keys deleted permanently" : "加密密钥已经永久删除",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "无法永久删除您的加密密钥,请检查 owncloud.log 或联系管理员",
"Couldn't remove app." : "无法删除应用。",
- "Email saved" : "电子邮件已保存",
- "Invalid email" : "无效的电子邮件",
- "Unable to delete group" : "无法删除组",
- "Unable to delete user" : "无法删除用户",
"Backups restored successfully" : "恢复备份成功",
"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "无法恢复加密密钥,请检查 owncloud.log 或联系管理员",
"Language changed" : "语言已修改",
@@ -39,6 +33,7 @@
"If you received this email, the settings seem to be correct." : "如果您收到了这封邮件,看起来设置没有问题。",
"Email sent" : "邮件已发送",
"You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。",
+ "Email saved" : "电子邮件已保存",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?",
"Add trusted domain" : "添加信任域",
"Sending..." : "正在发送...",
@@ -77,7 +72,6 @@
"A valid username must be provided" : "必须提供合法的用户名",
"Error creating user" : "创建用户出错",
"A valid password must be provided" : "必须提供合法的密码",
- "Warning: Home directory for user \"{user}\" already exists" : "警告:用户 \"{user}\" 的家目录已存在",
"__language_name__" : "简体中文",
"SSL root certificates" : "SSL根证书",
"Encryption" : "加密",
@@ -94,7 +88,6 @@
"TLS" : "TLS",
"Security Warning" : "安全警告",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "您正通过 HTTP 访问 %s。我们强烈建议您配置你的服务器来要求使用 HTTPS。",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的数据文件夹和文件可由互联网访问。OwnCloud提供的.htaccess文件未生效。我们强烈建议您配置服务器,以使数据文件夹不可被访问,或者将数据文件夹移到web服务器以外。",
"Setup Warning" : "设置警告",
"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。",
@@ -102,16 +95,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite 正在使用。我们建议大型网站切换到其他数据库。请使用命令行工具:“occ db:convert-type”迁移数据库",
"Module 'fileinfo' missing" : "模块'文件信息'丢失",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.",
- "Your PHP version is outdated" : "您的 PHP 版本不是最新版",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已过期。强烈建议更新至 5.3.8 或者更新版本因为老版本存在已知问题。本次安装可能并未正常工作。",
"PHP charset is not set to UTF-8" : "PHP字符集没有设置为UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP字符集没有设置为UTF-8。这会导致非ASC||字符的文件名出现乱码。我们强烈建议修改php.ini文件中的'default_charset' 的值为 'UTF-8'",
"Locale not working" : "本地化无法工作",
"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 to install the required packages on your system to support one of the following locales: %s." : "强烈建议在您的系统上安装需要的软件包来支持以下语系之一:%s。",
"URL generation in notification emails" : "在通知邮件里生成URL",
- "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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你没有安装ownCloud在域名的根目录里,并使用系统的crom,这会导致URL的生成出错。要避免这个问题,请设置 config.php 文件中的\"overwritewebroot\" 参数值为你的实际安装web路径。(建议为: \"%s\")",
"No problems found" : "未发现问题",
"Please double check the <a href='%s'>installation guides</a>." : "请认真检查<a href='%s'>安装指南</a>.",
"Last cron was executed at %s." : "上次定时任务执行于 %s。",
@@ -124,13 +113,13 @@
"Allow users to share via link" : "允许用户通过链接分享文件",
"Enforce password protection" : "强制密码保护",
"Allow public uploads" : "允许公开上传",
+ "Allow users to send mail notification for shared files" : "允许用户发送共享文件的邮件通知",
"Set default expiration date" : "设置默认过期日期",
"Expire after " : "过期于",
"days" : "天",
"Enforce expiration date" : "强制过期日期",
"Allow resharing" : "允许再次共享",
"Restrict users to only share with users in their groups" : "限制仅与组内用户分享",
- "Allow users to send mail notification for shared files" : "允许用户发送共享文件的邮件通知",
"Exclude groups from sharing" : "在分享中排除组",
"These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。",
"Enforce HTTPS" : "强制使用 HTTPS",
@@ -161,6 +150,7 @@
"Admin Documentation" : "管理员文档",
"Enable only for specific groups" : "仅对特定的组开放",
"Uninstall App" : "下载应用",
+ "Cheers!" : "干杯!",
"Administrator Documentation" : "管理员文档",
"Online Documentation" : "在线文档",
"Forum" : "论坛",
@@ -203,11 +193,10 @@
"Delete Encryption Keys" : "删除加密密钥",
"Show storage location" : "显示存储位置",
"Show last log in" : "显示最后登录",
- "Login Name" : "登录名称",
+ "Username" : "用户名",
"Create" : "创建",
"Admin Recovery Password" : "管理恢复密码",
"Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件",
- "Search Users and Groups" : "搜索用户和组",
"Add Group" : "增加组",
"Group" : "分组",
"Everyone" : "所有人",
@@ -216,7 +205,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储限额 (ex: \"512 MB\" or \"12 GB\")",
"Unlimited" : "无限",
"Other" : "其它",
- "Username" : "用户名",
"Quota" : "配额",
"Storage Location" : "存储空间位置",
"Last Login" : "最后登录",
diff --git a/settings/l10n/zh_HK.js b/settings/l10n/zh_HK.js
index 652941492ab..d18e7efc536 100644
--- a/settings/l10n/zh_HK.js
+++ b/settings/l10n/zh_HK.js
@@ -1,30 +1,64 @@
OC.L10N.register(
"settings",
{
+ "Sharing" : "分享",
+ "Security" : "安全",
+ "Email Server" : "電子郵件伺服器",
+ "Log" : "日誌",
"Wrong password" : "密碼錯誤",
"Enabled" : "啟用",
+ "Not enabled" : "未啟用",
+ "Recommended" : "建議",
"Saved" : "已儲存",
+ "test email settings" : "測試電子郵件設定",
"Email sent" : "郵件已傳",
"Sending..." : "發送中...",
+ "All" : "所有",
+ "Please wait...." : "請稍候....",
"Disable" : "停用",
"Enable" : "啟用",
"Updating...." : "更新中....",
"Updated" : "已更新",
+ "Uninstalling ...." : "正在解除安裝 ....",
+ "Uninstall" : "解除安裝",
"Delete" : "刪除",
"Groups" : "群組",
+ "undo" : "復原",
"Encryption" : "加密",
"None" : "空",
"Login" : "登入",
"SSL" : "SSL",
"TLS" : "TLS",
+ "days" : "天",
+ "Enforce HTTPS" : "強制使用 HTTPS",
+ "Server address" : "伺服器地址",
"Port" : "連接埠",
+ "SMTP Username" : "SMTP 使用者名稱",
+ "SMTP Password" : "SMTP 密碼",
+ "Log level" : "日誌等級",
"More" : "更多",
+ "Version" : "版本",
+ "More apps" : "更多應用程式",
+ "Forum" : "討論區",
+ "Android app" : "Android 應用程式",
+ "iOS app" : "iOS 應用程式",
"Password" : "密碼",
"New password" : "新密碼",
"Change password" : "更改密碼",
"Email" : "電郵",
+ "Your email address" : "你的電郵地址",
+ "Remove image" : "刪除圖片",
"Cancel" : "取消",
+ "Language" : "語言",
+ "Help translate" : "幫忙翻譯",
+ "Log-in password" : "登入密碼",
+ "Username" : "用戶名稱",
"Create" : "新增",
- "Username" : "用戶名稱"
+ "Group" : "群組",
+ "Everyone" : "所有人",
+ "Unlimited" : "無限",
+ "Other" : "其他",
+ "Last Login" : "最後登入",
+ "Default" : "預設"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/zh_HK.json b/settings/l10n/zh_HK.json
index 2d07f517691..e984020fcbc 100644
--- a/settings/l10n/zh_HK.json
+++ b/settings/l10n/zh_HK.json
@@ -1,28 +1,62 @@
{ "translations": {
+ "Sharing" : "分享",
+ "Security" : "安全",
+ "Email Server" : "電子郵件伺服器",
+ "Log" : "日誌",
"Wrong password" : "密碼錯誤",
"Enabled" : "啟用",
+ "Not enabled" : "未啟用",
+ "Recommended" : "建議",
"Saved" : "已儲存",
+ "test email settings" : "測試電子郵件設定",
"Email sent" : "郵件已傳",
"Sending..." : "發送中...",
+ "All" : "所有",
+ "Please wait...." : "請稍候....",
"Disable" : "停用",
"Enable" : "啟用",
"Updating...." : "更新中....",
"Updated" : "已更新",
+ "Uninstalling ...." : "正在解除安裝 ....",
+ "Uninstall" : "解除安裝",
"Delete" : "刪除",
"Groups" : "群組",
+ "undo" : "復原",
"Encryption" : "加密",
"None" : "空",
"Login" : "登入",
"SSL" : "SSL",
"TLS" : "TLS",
+ "days" : "天",
+ "Enforce HTTPS" : "強制使用 HTTPS",
+ "Server address" : "伺服器地址",
"Port" : "連接埠",
+ "SMTP Username" : "SMTP 使用者名稱",
+ "SMTP Password" : "SMTP 密碼",
+ "Log level" : "日誌等級",
"More" : "更多",
+ "Version" : "版本",
+ "More apps" : "更多應用程式",
+ "Forum" : "討論區",
+ "Android app" : "Android 應用程式",
+ "iOS app" : "iOS 應用程式",
"Password" : "密碼",
"New password" : "新密碼",
"Change password" : "更改密碼",
"Email" : "電郵",
+ "Your email address" : "你的電郵地址",
+ "Remove image" : "刪除圖片",
"Cancel" : "取消",
+ "Language" : "語言",
+ "Help translate" : "幫忙翻譯",
+ "Log-in password" : "登入密碼",
+ "Username" : "用戶名稱",
"Create" : "新增",
- "Username" : "用戶名稱"
+ "Group" : "群組",
+ "Everyone" : "所有人",
+ "Unlimited" : "無限",
+ "Other" : "其他",
+ "Last Login" : "最後登入",
+ "Default" : "預設"
},"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 9a3f4e60ea5..6e744d29fdc 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -9,15 +9,9 @@ OC.L10N.register(
"Authentication error" : "認證錯誤",
"Your full name has been changed." : "您的全名已變更。",
"Unable to change full name" : "無法變更全名",
- "Group already exists" : "群組已存在",
- "Unable to add group" : "群組增加失敗",
"Files decrypted successfully" : "檔案解密成功",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "無法解密您的檔案,請檢查您的 owncloud.log 或是詢問您的管理者",
"Couldn't decrypt your files, check your password and try again" : "無法解密您的檔案,確認您的密碼並再重試一次",
- "Email saved" : "Email已儲存",
- "Invalid email" : "無效的email",
- "Unable to delete group" : "群組刪除錯誤",
- "Unable to delete user" : "使用者刪除錯誤",
"Language changed" : "語言已變更",
"Invalid request" : "無效請求",
"Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
@@ -31,11 +25,13 @@ OC.L10N.register(
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "後端不支援變更密碼,但成功更新使用者的加密金鑰",
"Unable to change password" : "無法修改密碼",
"Enabled" : "已啓用",
+ "Recommended" : "建議",
"Saved" : "已儲存",
"test email settings" : "測試郵件設定",
"If you received this email, the settings seem to be correct." : "假如您收到這個郵件,此設定看起來是正確的。",
"Email sent" : "Email 已寄出",
"You need to set your user email before being able to send test emails." : "在準備要寄出測試郵件時您需要設定您的使用者郵件。",
+ "Email saved" : "Email已儲存",
"Sending..." : "寄送中...",
"All" : "所有",
"Please wait...." : "請稍候...",
@@ -61,7 +57,6 @@ OC.L10N.register(
"A valid username must be provided" : "必須提供一個有效的用戶名",
"Error creating user" : "建立用戶時出現錯誤",
"A valid password must be provided" : "一定要提供一個有效的密碼",
- "Warning: Home directory for user \"{user}\" already exists" : "警告:使用者 {user} 的家目錄已經存在",
"__language_name__" : "__language_name__",
"SSL root certificates" : "SSL 根憑證",
"Encryption" : "加密",
@@ -78,16 +73,12 @@ OC.L10N.register(
"TLS" : "TLS",
"Security Warning" : "安全性警告",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "您正透過未加密網頁存取 %s。我們強烈建議您設定您的主機必須使用加密網頁。",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的資料目錄 (Data Directory) 和檔案可能可以由網際網路上面公開存取。Owncloud 所提供的 .htaccess 設定檔並未生效,我們強烈建議您設定您的網頁伺服器以防止資料目錄被公開存取,或將您的資料目錄移出網頁伺服器的 document root 。",
"Setup Warning" : "設定警告",
"Module 'fileinfo' missing" : "遺失 'fileinfo' 模組",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "未偵測到 PHP 模組 'fileinfo'。我們強烈建議啟用這個模組以取得最好的 mime-type 支援。",
- "Your PHP version is outdated" : "您的 PHP 版本已過期",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已過期。我們強烈建議更新到 5.3.8 或更新的版本,因為舊的版本已知會毀損。這個可能會在安裝後無法使用。",
"Locale not working" : "語系無法運作",
"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 to install the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s",
"Please double check the <a href='%s'>installation guides</a>." : "請參考<a href='%s'>安裝指南</a>。",
"Last cron was executed at %s." : "最後的排程已執行於 %s。",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "最後的排程已執行於 %s。現在過了好幾個小時,看起來是有錯誤。",
@@ -96,8 +87,8 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每15分鐘呼叫 cron.php",
"Allow apps to use the Share API" : "允許 apps 使用分享 API",
"Allow public uploads" : "允許任何人上傳",
- "Allow resharing" : "允許轉貼分享",
"Allow users to send mail notification for shared files" : "允許使用者寄送有關分享檔案的郵件通知",
+ "Allow resharing" : "允許轉貼分享",
"Enforce HTTPS" : "強制啟用 HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "強迫用戶端使用加密連線連接到 %s",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "請使用 HTTPS 連線到 %s 以啓用或停用強制 SSL 加密。",
@@ -123,6 +114,7 @@ OC.L10N.register(
"Documentation:" : "文件:",
"User Documentation" : "用戶說明文件",
"Admin Documentation" : "管理者文件",
+ "Cheers!" : "太棒了!",
"Administrator Documentation" : "管理者說明文件",
"Online Documentation" : "線上說明文件",
"Forum" : "論壇",
@@ -155,7 +147,7 @@ OC.L10N.register(
"The encryption app is no longer enabled, please decrypt all your files" : "加密的軟體不能長時間啟用,請解密所有您的檔案",
"Log-in password" : "登入密碼",
"Decrypt all Files" : "解密所有檔案",
- "Login Name" : "登入名稱",
+ "Username" : "使用者名稱",
"Create" : "建立",
"Admin Recovery Password" : "管理者復原密碼",
"Enter the recovery password in order to recover the users files during password change" : "為了修改密碼時能夠取回使用者資料,請輸入另一組還原用密碼",
@@ -164,7 +156,6 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "請輸入空間配額(例如: \"512 MB\"或是 \"12 GB\")",
"Unlimited" : "無限制",
"Other" : "其他",
- "Username" : "使用者名稱",
"Quota" : "容量限制",
"change full name" : "變更全名",
"set new password" : "設定新密碼",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index b7ef00d523c..85984c2228e 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -7,15 +7,9 @@
"Authentication error" : "認證錯誤",
"Your full name has been changed." : "您的全名已變更。",
"Unable to change full name" : "無法變更全名",
- "Group already exists" : "群組已存在",
- "Unable to add group" : "群組增加失敗",
"Files decrypted successfully" : "檔案解密成功",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "無法解密您的檔案,請檢查您的 owncloud.log 或是詢問您的管理者",
"Couldn't decrypt your files, check your password and try again" : "無法解密您的檔案,確認您的密碼並再重試一次",
- "Email saved" : "Email已儲存",
- "Invalid email" : "無效的email",
- "Unable to delete group" : "群組刪除錯誤",
- "Unable to delete user" : "使用者刪除錯誤",
"Language changed" : "語言已變更",
"Invalid request" : "無效請求",
"Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
@@ -29,11 +23,13 @@
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "後端不支援變更密碼,但成功更新使用者的加密金鑰",
"Unable to change password" : "無法修改密碼",
"Enabled" : "已啓用",
+ "Recommended" : "建議",
"Saved" : "已儲存",
"test email settings" : "測試郵件設定",
"If you received this email, the settings seem to be correct." : "假如您收到這個郵件,此設定看起來是正確的。",
"Email sent" : "Email 已寄出",
"You need to set your user email before being able to send test emails." : "在準備要寄出測試郵件時您需要設定您的使用者郵件。",
+ "Email saved" : "Email已儲存",
"Sending..." : "寄送中...",
"All" : "所有",
"Please wait...." : "請稍候...",
@@ -59,7 +55,6 @@
"A valid username must be provided" : "必須提供一個有效的用戶名",
"Error creating user" : "建立用戶時出現錯誤",
"A valid password must be provided" : "一定要提供一個有效的密碼",
- "Warning: Home directory for user \"{user}\" already exists" : "警告:使用者 {user} 的家目錄已經存在",
"__language_name__" : "__language_name__",
"SSL root certificates" : "SSL 根憑證",
"Encryption" : "加密",
@@ -76,16 +71,12 @@
"TLS" : "TLS",
"Security Warning" : "安全性警告",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "您正透過未加密網頁存取 %s。我們強烈建議您設定您的主機必須使用加密網頁。",
- "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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "您的資料目錄 (Data Directory) 和檔案可能可以由網際網路上面公開存取。Owncloud 所提供的 .htaccess 設定檔並未生效,我們強烈建議您設定您的網頁伺服器以防止資料目錄被公開存取,或將您的資料目錄移出網頁伺服器的 document root 。",
"Setup Warning" : "設定警告",
"Module 'fileinfo' missing" : "遺失 'fileinfo' 模組",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "未偵測到 PHP 模組 'fileinfo'。我們強烈建議啟用這個模組以取得最好的 mime-type 支援。",
- "Your PHP version is outdated" : "您的 PHP 版本已過期",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已過期。我們強烈建議更新到 5.3.8 或更新的版本,因為舊的版本已知會毀損。這個可能會在安裝後無法使用。",
"Locale not working" : "語系無法運作",
"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 to install the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s",
"Please double check the <a href='%s'>installation guides</a>." : "請參考<a href='%s'>安裝指南</a>。",
"Last cron was executed at %s." : "最後的排程已執行於 %s。",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "最後的排程已執行於 %s。現在過了好幾個小時,看起來是有錯誤。",
@@ -94,8 +85,8 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每15分鐘呼叫 cron.php",
"Allow apps to use the Share API" : "允許 apps 使用分享 API",
"Allow public uploads" : "允許任何人上傳",
- "Allow resharing" : "允許轉貼分享",
"Allow users to send mail notification for shared files" : "允許使用者寄送有關分享檔案的郵件通知",
+ "Allow resharing" : "允許轉貼分享",
"Enforce HTTPS" : "強制啟用 HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "強迫用戶端使用加密連線連接到 %s",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "請使用 HTTPS 連線到 %s 以啓用或停用強制 SSL 加密。",
@@ -121,6 +112,7 @@
"Documentation:" : "文件:",
"User Documentation" : "用戶說明文件",
"Admin Documentation" : "管理者文件",
+ "Cheers!" : "太棒了!",
"Administrator Documentation" : "管理者說明文件",
"Online Documentation" : "線上說明文件",
"Forum" : "論壇",
@@ -153,7 +145,7 @@
"The encryption app is no longer enabled, please decrypt all your files" : "加密的軟體不能長時間啟用,請解密所有您的檔案",
"Log-in password" : "登入密碼",
"Decrypt all Files" : "解密所有檔案",
- "Login Name" : "登入名稱",
+ "Username" : "使用者名稱",
"Create" : "建立",
"Admin Recovery Password" : "管理者復原密碼",
"Enter the recovery password in order to recover the users files during password change" : "為了修改密碼時能夠取回使用者資料,請輸入另一組還原用密碼",
@@ -162,7 +154,6 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "請輸入空間配額(例如: \"512 MB\"或是 \"12 GB\")",
"Unlimited" : "無限制",
"Other" : "其他",
- "Username" : "使用者名稱",
"Quota" : "容量限制",
"change full name" : "變更全名",
"set new password" : "設定新密碼",
diff --git a/settings/middleware/subadminmiddleware.php b/settings/middleware/subadminmiddleware.php
new file mode 100644
index 00000000000..a5c005e3148
--- /dev/null
+++ b/settings/middleware/subadminmiddleware.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Middleware;
+
+use OC\AppFramework\Http;
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Middleware;
+
+/**
+ * Verifies whether an user has at least subadmin rights.
+ * To bypass use the `@NoSubadminRequired` annotation
+ *
+ * @package OC\Settings\Middleware
+ */
+class SubadminMiddleware extends Middleware {
+ /** @var bool */
+ protected $isSubAdmin;
+ /** @var ControllerMethodReflector */
+ protected $reflector;
+
+ /**
+ * @param ControllerMethodReflector $reflector
+ * @param bool $isSubAdmin
+ */
+ public function __construct(ControllerMethodReflector $reflector,
+ $isSubAdmin) {
+ $this->reflector = $reflector;
+ $this->isSubAdmin = $isSubAdmin;
+ }
+
+ /**
+ * Check if sharing is enabled before the controllers is executed
+ * @param \OCP\AppFramework\Controller $controller
+ * @param string $methodName
+ * @throws \Exception
+ */
+ public function beforeController($controller, $methodName) {
+ if(!$this->reflector->hasAnnotation('NoSubadminRequired')) {
+ if(!$this->isSubAdmin) {
+ throw new \Exception('Logged in user must be a subadmin');
+ }
+ }
+ }
+
+ /**
+ * Return 403 page in case of an exception
+ * @param \OCP\AppFramework\Controller $controller
+ * @param string $methodName
+ * @param \Exception $exception
+ * @return TemplateResponse
+ */
+ public function afterException($controller, $methodName, \Exception $exception) {
+ return new TemplateResponse('core', '403', array(), 'guest');
+ }
+
+}
diff --git a/settings/personal.php b/settings/personal.php
index 4c06eecd223..f181c9cb2c1 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -9,14 +9,15 @@ OC_Util::checkLoggedIn();
$defaults = new OC_Defaults(); // initialize themable default strings and urls
$certificateManager = \OC::$server->getCertificateManager();
+$config = \OC::$server->getConfig();
// Highlight navigation entry
OC_Util::addScript( 'settings', 'personal' );
OC_Util::addStyle( 'settings', 'settings' );
-OC_Util::addScript( '3rdparty', 'strengthify/jquery.strengthify' );
-OC_Util::addStyle( '3rdparty', 'strengthify/strengthify' );
+\OC_Util::addVendorScript('strengthify/jquery.strengthify');
+\OC_Util::addVendorStyle('strengthify/strengthify');
\OC_Util::addScript('files', 'jquery.fileupload');
-if (\OC_Config::getValue('enable_avatars', true) === true) {
+if ($config->getSystemValue('enable_avatars', true) === true) {
\OC_Util::addVendorScript('jcrop/js/jquery.Jcrop');
\OC_Util::addVendorStyle('jcrop/css/jquery.Jcrop');
}
@@ -26,9 +27,9 @@ OC_App::setActiveNavigationEntry( 'personal' );
$storageInfo=OC_Helper::getStorageInfo('/');
-$email=OC_Preferences::getValue(OC_User::getUser(), 'settings', 'email', '');
+$email=$config->getUserValue(OC_User::getUser(), 'settings', 'email', '');
-$userLang=OC_Preferences::getValue( OC_User::getUser(), 'core', 'lang', OC_L10N::findLanguage() );
+$userLang=$config->getUserValue( OC_User::getUser(), 'core', 'lang', OC_L10N::findLanguage() );
$languageCodes=OC_L10N::findAvailableLanguages();
//check if encryption was enabled in the past
@@ -74,9 +75,9 @@ usort( $languages, function ($a, $b) {
//links to clients
$clients = array(
- 'desktop' => OC_Config::getValue('customclient_desktop', $defaults->getSyncClientUrl()),
- 'android' => OC_Config::getValue('customclient_android', $defaults->getAndroidClientUrl()),
- 'ios' => OC_Config::getValue('customclient_ios', $defaults->getiOSClientUrl())
+ 'desktop' => $config->getSystemValue('customclient_desktop', $defaults->getSyncClientUrl()),
+ 'android' => $config->getSystemValue('customclient_android', $defaults->getAndroidClientUrl()),
+ 'ios' => $config->getSystemValue('customclient_ios', $defaults->getiOSClientUrl())
);
// Return template
@@ -95,7 +96,7 @@ $tmpl->assign('displayName', OC_User::getDisplayName());
$tmpl->assign('enableDecryptAll' , $enableDecryptAll);
$tmpl->assign('backupKeysExists' , $backupKeysExists);
$tmpl->assign('filesStillEncrypted' , $filesStillEncrypted);
-$tmpl->assign('enableAvatars', \OC_Config::getValue('enable_avatars', true));
+$tmpl->assign('enableAvatars', $config->getSystemValue('enable_avatars', true));
$tmpl->assign('avatarChangeSupported', OC_User::canUserChangeAvatar(OC_User::getUser()));
$tmpl->assign('certs', $certificateManager->listCertificates());
@@ -114,7 +115,7 @@ $formsMap = array_map(function($form){
$anchor = str_replace(' ', '-', $anchor);
return array(
- 'anchor' => $anchor,
+ 'anchor' => 'goto-' . $anchor,
'section-name' => $sectionName,
'form' => $form
);
diff --git a/settings/routes.php b/settings/routes.php
index 82167ea6396..150746665d3 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -9,13 +9,26 @@
namespace OC\Settings;
$application = new Application();
-$application->registerRoutes($this, array('routes' =>array(
- array('name' => 'MailSettings#setMailSettings', 'url' => '/settings/admin/mailsettings', 'verb' => 'POST'),
- array('name' => 'MailSettings#storeCredentials', 'url' => '/settings/admin/mailsettings/credentials', 'verb' => 'POST'),
- array('name' => 'MailSettings#sendTestMail', 'url' => '/settings/admin/mailtest', 'verb' => 'POST'),
- array('name' => 'AppSettings#listCategories', 'url' => '/settings/apps/categories', 'verb' => 'GET'),
- array('name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET')
-)));
+$application->registerRoutes($this, array(
+ 'resources' => array(
+ 'groups' => array('url' => '/settings/users/groups'),
+ 'users' => array('url' => '/settings/users/users')
+ ),
+ 'routes' => array(
+ array('name' => 'MailSettings#setMailSettings', 'url' => '/settings/admin/mailsettings', 'verb' => 'POST'),
+ array('name' => 'MailSettings#storeCredentials', 'url' => '/settings/admin/mailsettings/credentials', 'verb' => 'POST'),
+ array('name' => 'MailSettings#sendTestMail', 'url' => '/settings/admin/mailtest', 'verb' => 'POST'),
+ array('name' => 'AppSettings#listCategories', 'url' => '/settings/apps/categories', 'verb' => 'GET'),
+ array('name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET'),
+ array('name' => 'SecuritySettings#enforceSSL', 'url' => '/settings/admin/security/ssl', 'verb' => 'POST'),
+ array('name' => 'SecuritySettings#enforceSSLForSubdomains', 'url' => '/settings/admin/security/ssl/subdomains', 'verb' => 'POST'),
+ array('name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'),
+ array('name' => 'Users#setMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'),
+ array('name' => 'LogSettings#setLogLevel', 'url' => '/settings/admin/log/level', 'verb' => 'POST'),
+ array('name' => 'LogSettings#getEntries', 'url' => '/settings/admin/log/entries', 'verb' => 'GET'),
+ array('name' => 'LogSettings#download', 'url' => '/settings/admin/log/download', 'verb' => 'GET'),
+ )
+));
/** @var $this \OCP\Route\IRouter */
@@ -34,26 +47,14 @@ $this->create('settings_admin', '/settings/admin')
->actionInclude('settings/admin.php');
// Settings ajax actions
// users
-$this->create('settings_ajax_userlist', '/settings/ajax/userlist')
- ->actionInclude('settings/ajax/userlist.php');
-$this->create('settings_ajax_grouplist', '/settings/ajax/grouplist')
- ->actionInclude('settings/ajax/grouplist.php');
$this->create('settings_ajax_everyonecount', '/settings/ajax/geteveryonecount')
->actionInclude('settings/ajax/geteveryonecount.php');
-$this->create('settings_ajax_createuser', '/settings/ajax/createuser.php')
- ->actionInclude('settings/ajax/createuser.php');
-$this->create('settings_ajax_removeuser', '/settings/ajax/removeuser.php')
- ->actionInclude('settings/ajax/removeuser.php');
$this->create('settings_ajax_setquota', '/settings/ajax/setquota.php')
->actionInclude('settings/ajax/setquota.php');
-$this->create('settings_ajax_creategroup', '/settings/ajax/creategroup.php')
- ->actionInclude('settings/ajax/creategroup.php');
$this->create('settings_ajax_togglegroups', '/settings/ajax/togglegroups.php')
->actionInclude('settings/ajax/togglegroups.php');
$this->create('settings_ajax_togglesubadmins', '/settings/ajax/togglesubadmins.php')
->actionInclude('settings/ajax/togglesubadmins.php');
-$this->create('settings_ajax_removegroup', '/settings/ajax/removegroup.php')
- ->actionInclude('settings/ajax/removegroup.php');
$this->create('settings_users_changepassword', '/settings/users/changepassword')
->post()
->action('OC\Settings\ChangePassword\Controller', 'changeUserPassword');
@@ -65,8 +66,6 @@ $this->create('settings_ajax_changegorupname', '/settings/ajax/changegroupname.p
$this->create('settings_personal_changepassword', '/settings/personal/changepassword')
->post()
->action('OC\Settings\ChangePassword\Controller', 'changePersonalPassword');
-$this->create('settings_ajax_lostpassword', '/settings/ajax/lostpassword.php')
- ->actionInclude('settings/ajax/lostpassword.php');
$this->create('settings_ajax_setlanguage', '/settings/ajax/setlanguage.php')
->actionInclude('settings/ajax/setlanguage.php');
$this->create('settings_ajax_decryptall', '/settings/ajax/decryptall.php')
@@ -91,12 +90,6 @@ $this->create('settings_ajax_uninstallapp', '/settings/ajax/uninstallapp.php')
$this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php')
->actionInclude('settings/ajax/navigationdetect.php');
// admin
-$this->create('settings_ajax_getlog', '/settings/ajax/getlog.php')
- ->actionInclude('settings/ajax/getlog.php');
-$this->create('settings_ajax_setloglevel', '/settings/ajax/setloglevel.php')
- ->actionInclude('settings/ajax/setloglevel.php');
-$this->create('settings_ajax_setsecurity', '/settings/ajax/setsecurity.php')
- ->actionInclude('settings/ajax/setsecurity.php');
$this->create('settings_ajax_excludegroups', '/settings/ajax/excludegroups.php')
->actionInclude('settings/ajax/excludegroups.php');
$this->create('settings_ajax_checksetup', '/settings/ajax/checksetup')
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 0033845c74e..41b60b64428 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -83,17 +83,17 @@ if (!$_['isConnectedViaHTTPS']) {
<?php
}
-// is htaccess working ?
-if (!$_['htaccessworking']) {
- ?>
+// is read only config enabled
+if ($_['readOnlyConfigEnabled']) {
+?>
<div class="section">
- <h2><?php p($l->t('Security Warning'));?></h2>
+ <h2><?php p($l->t('Read-Only config enabled'));?></h2>
<span class="securitywarning">
- <?php p($l->t('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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.')); ?>
+ <?php p($l->t('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.')); ?>
</span>
-</div>
+ </div>
<?php
}
// Are doc blocks accessible?
@@ -139,20 +139,6 @@ if (!$_['has_fileinfo']) {
<?php
}
-// is PHP at least at 5.3.8?
-if ($_['old_php']) {
- ?>
- <div class="section">
- <h2><?php p($l->t('Your PHP version is outdated'));?></h2>
-
- <span class="connectionwarning">
- <?php p($l->t('Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly.')); ?>
- </span>
-
- </div>
-<?php
-}
-
// is PHP charset set to UTF8?
if (!$_['isPhpCharSetUtf8']) {
?>
@@ -184,7 +170,7 @@ if (!$_['isLocaleWorking']) {
?>
<br>
<?php
- p($l->t('We strongly suggest to install the required packages on your system to support one of the following locales: %s.', array($locales)));
+ p($l->t('We strongly suggest installing the required packages on your system to support one of the following locales: %s.', array($locales)));
?>
</span>
@@ -192,13 +178,13 @@ if (!$_['isLocaleWorking']) {
<?php
}
-if ($_['suggestedOverwriteWebroot']) {
+if ($_['suggestedOverwriteCliUrl']) {
?>
<div class="section">
<h2><?php p($l->t('URL generation in notification emails'));?></h2>
<span class="connectionwarning">
- <?php p($l->t('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 "overwritewebroot" option in your config.php file to the webroot path of your installation (Suggested: "%s")', $_['suggestedOverwriteWebroot'])); ?>
+ <?php p($l->t('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")', $_['suggestedOverwriteCliUrl'])); ?>
</span>
</div>
@@ -206,7 +192,7 @@ if ($_['suggestedOverwriteWebroot']) {
}
?>
<div id="postsetupchecks" class="section">
- <h2><?php p($l->t('Connectivity Checks'));?></h2>
+ <h2><?php p($l->t('Configuration Checks'));?></h2>
<div class="loading"></div>
<div class="success hidden"><?php p($l->t('No problems found'));?></div>
<div class="errors hidden"></div>
@@ -285,10 +271,15 @@ if ($_['suggestedOverwriteWebroot']) {
<input type="checkbox" name="shareapi_enforce_links_password" id="enforceLinkPassword"
value="1" <?php if ($_['enforceLinkPassword']) print_unescaped('checked="checked"'); ?> />
<label for="enforceLinkPassword"><?php p($l->t('Enforce password protection'));?></label><br/>
+
<input type="checkbox" name="shareapi_allow_public_upload" id="allowPublicUpload"
value="1" <?php if ($_['allowPublicUpload'] == 'yes') print_unescaped('checked="checked"'); ?> />
<label for="allowPublicUpload"><?php p($l->t('Allow public uploads'));?></label><br/>
+ <input type="checkbox" name="shareapi_allow_public_notification" id="allowPublicMailNotification"
+ value="1" <?php if ($_['allowPublicMailNotification'] == 'yes') print_unescaped('checked="checked"'); ?> />
+ <label for="allowPublicMailNotification"><?php p($l->t('Allow users to send mail notification for shared files'));?></label><br/>
+
<input type="checkbox" name="shareapi_default_expire_date" id="shareapiDefaultExpireDate"
value="1" <?php if ($_['shareDefaultExpireDateSet'] === 'yes') print_unescaped('checked="checked"'); ?> />
<label for="shareapiDefaultExpireDate"><?php p($l->t('Set default expiration date'));?></label><br/>
@@ -316,7 +307,7 @@ if ($_['suggestedOverwriteWebroot']) {
<p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>">
<input type="checkbox" name="shareapi_allow_mail_notification" id="allowMailNotification"
value="1" <?php if ($_['allowMailNotification'] === 'yes') print_unescaped('checked="checked"'); ?> />
- <label for="allowMailNotification"><?php p($l->t('Allow users to send mail notification for shared files'));?></label><br/>
+ <label for="allowMailNotification"><?php p($l->t('Allow users to send mail notification for shared files to other users'));?></label><br/>
</p>
<p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>">
<input type="checkbox" name="shareapi_exclude_groups" id="shareapiExcludeGroups"
@@ -336,9 +327,9 @@ if ($_['suggestedOverwriteWebroot']) {
<input type="checkbox" name="forcessl" id="forcessl"
<?php if ($_['enforceHTTPSEnabled']) {
print_unescaped('checked="checked" ');
- print_unescaped('value="false"');
- } else {
print_unescaped('value="true"');
+ } else {
+ print_unescaped('value="false"');
}
?>
<?php if (!$_['isConnectedViaHTTPS']) p('disabled'); ?> />
@@ -346,7 +337,23 @@ if ($_['suggestedOverwriteWebroot']) {
<em><?php p($l->t(
'Forces the clients to connect to %s via an encrypted connection.',
$theme->getName()
- )); ?></em>
+ )); ?></em><br/>
+ <span id="forceSSLforSubdomainsSpan" <?php if(!$_['enforceHTTPSEnabled']) { print_unescaped('class="hidden"'); } ?>>
+ <input type="checkbox" name="forceSSLforSubdomains" id="forceSSLforSubdomains"
+ <?php if ($_['forceSSLforSubdomainsEnabled']) {
+ print_unescaped('checked="checked" ');
+ print_unescaped('value="true"');
+ } else {
+ print_unescaped('value="false"');
+ }
+ ?>
+ <?php if (!$_['isConnectedViaHTTPS']) { p('disabled'); } ?> />
+ <label for="forceSSLforSubdomains"><?php p($l->t('Enforce HTTPS for subdomains'));?></label><br/>
+ <em><?php p($l->t(
+ 'Forces the clients to connect to %s and subdomains via an encrypted connection.',
+ $theme->getName()
+ )); ?></em>
+ </span>
<?php if (!$_['isConnectedViaHTTPS']) {
print_unescaped("<br/><em>");
p($l->t(
@@ -396,7 +403,7 @@ if ($_['suggestedOverwriteWebroot']) {
<p>
<label for="mail_from_address"><?php p($l->t( 'From address' )); ?></label>
<input type="text" name='mail_from_address' id="mail_from_address" placeholder="<?php p($l->t('mail'))?>"
- value='<?php p($_['mail_from_address']) ?>' />
+ value='<?php p($_['mail_from_address']) ?>' />@
<input type="text" name='mail_domain' id="mail_domain" placeholder="example.com"
value='<?php p($_['mail_domain']) ?>' />
</p>
@@ -455,6 +462,7 @@ if ($_['suggestedOverwriteWebroot']) {
<option value='<?php p($i)?>' <?php p($selected) ?>><?php p($levelLabels[$i])?></option>
<?php endfor;?>
</select>
+<?php if ($_['showLog'] && $_['doesLogFileExist']): ?>
<table id="log" class="grid">
<?php foreach ($_['entries'] as $entry): ?>
<tr>
@@ -477,11 +485,20 @@ if ($_['suggestedOverwriteWebroot']) {
</tr>
<?php endforeach;?>
</table>
+ <?php if ($_['logFileSize'] > 0): ?>
+ <a href="<?php print_unescaped(OC::$server->getURLGenerator()->linkToRoute('settings.LogSettings.download')); ?>" class="button" id="downloadLog"><?php p($l->t('Download logfile'));?></a>
+ <?php endif; ?>
<?php if ($_['entriesremain']): ?>
<input id="moreLog" type="button" value="<?php p($l->t('More'));?>...">
<input id="lessLog" type="button" value="<?php p($l->t('Less'));?>...">
<?php endif; ?>
-
+ <?php if ($_['logFileSize'] > (100 * 1024 * 1024)): ?>
+ <br>
+ <em>
+ <?php p($l->t('The logfile is bigger than 100MB. Downloading it may take some time!')); ?>
+ </em>
+ <?php endif; ?>
+ <?php endif; ?>
</div>
<div class="section">
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 1ad37000f39..02cab16dec5 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -5,10 +5,10 @@
<?php if(OC_Config::getValue('appstoreenabled', true) === true): ?>
<li>
- <a class="app-external" target="_blank" href="http://apps.owncloud.com/?xsortmode=high"><?php p($l->t('More apps'));?> …</a>
+ <a class="app-external" target="_blank" href="https://apps.owncloud.com/?xsortmode=high"><?php p($l->t('More apps'));?> …</a>
</li>
<li>
- <a class="app-external" target="_blank" href="http://owncloud.org/dev"><?php p($l->t('Add your app'));?> …</a>
+ <a class="app-external" target="_blank" href="https://owncloud.org/dev"><?php p($l->t('Add your app'));?> …</a>
</li>
<?php endif; ?>
</script>
@@ -22,8 +22,8 @@
<h2 class="app-name"><a href="{{detailpage}}" target="_blank">{{name}}</a></h2>
<div class="app-version"> {{version}}</div>
<div class="app-author"><?php p($l->t('by')); ?> {{author}}
- {{#if license}}
- ({{license}}-<?php p($l->t('licensed')); ?>)
+ {{#if licence}}
+ ({{licence}}-<?php p($l->t('licensed')); ?>)
{{/if}}
</div>
{{#if score}}
@@ -51,6 +51,17 @@
{{/if}}
</p>
{{/if}}
+ {{#unless canInstall}}
+ <div class="app-dependencies">
+ <p><?php p($l->t('This app cannot be installed because the following dependencies are not fulfilled:')); ?></p>
+ <ul class="missing-dependencies">
+ {{#each missingDependencies}}
+ <li>{{this}}</li>
+ {{/each}}
+ </ul>
+ </div>
+ {{/unless}}
+
{{#if update}}
<input class="update" type="submit" value="<?php p($l->t('Update to %s', array('{{update}}'))); ?>" data-appid="{{id}}" />
{{/if}}
@@ -61,7 +72,7 @@
<br />
<input type="hidden" id="group_select" title="<?php p($l->t('All')); ?>" style="width: 200px">
{{else}}
- <input class="enable" type="submit" data-appid="{{id}}" data-active="false" value="<?php p($l->t("Enable"));?>"/>
+ <input class="enable" type="submit" data-appid="{{id}}" data-active="false" {{#unless canInstall}}disabled="disabled"{{/unless}} value="<?php p($l->t("Enable"));?>"/>
{{/if}}
{{#if canUnInstall}}
<input class="uninstall" type="submit" value="<?php p($l->t('Uninstall App')); ?>" data-appid="{{id}}" />
diff --git a/settings/templates/email.new_user.php b/settings/templates/email.new_user.php
new file mode 100644
index 00000000000..74149632cb8
--- /dev/null
+++ b/settings/templates/email.new_user.php
@@ -0,0 +1,36 @@
+<table cellspacing="0" cellpadding="0" border="0" width="100%">
+ <tr><td>
+ <table cellspacing="0" cellpadding="0" border="0" width="600px">
+ <tr>
+ <td bgcolor="<?php p($theme->getMailHeaderColor());?>" width="20px">&nbsp;</td>
+ <td bgcolor="<?php p($theme->getMailHeaderColor());?>">
+ <img src="<?php p(OC_Helper::makeURLAbsolute(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
+ </td>
+ </tr>
+ <tr><td colspan="2">&nbsp;</td></tr>
+ <tr>
+ <td width="20px">&nbsp;</td>
+ <td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;">
+ <?php
+ print_unescaped($l->t('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>', array($theme->getName(), $_['username'], $_['url'], $_['url'])));
+
+ // TRANSLATORS term at the end of a mail
+ p($l->t('Cheers!'));
+ ?>
+ </td>
+ </tr>
+ <tr><td colspan="2">&nbsp;</td></tr>
+ <tr>
+ <td width="20px">&nbsp;</td>
+ <td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;">--<br>
+ <?php p($theme->getName()); ?> -
+ <?php p($theme->getSlogan()); ?>
+ <br><a href="<?php p($theme->getBaseUrl()); ?>"><?php p($theme->getBaseUrl());?></a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">&nbsp;</td>
+ </tr>
+ </table>
+ </td></tr>
+</table>
diff --git a/settings/templates/email.new_user_plain_text.php b/settings/templates/email.new_user_plain_text.php
new file mode 100644
index 00000000000..79559a87020
--- /dev/null
+++ b/settings/templates/email.new_user_plain_text.php
@@ -0,0 +1,10 @@
+<?php
+print_unescaped($l->t("Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n", array($theme->getName(), $_['username'], $_['url'])));
+
+// TRANSLATORS term at the end of a mail
+p($l->t("Cheers!"));
+?>
+
+ --
+<?php p($theme->getName() . ' - ' . $theme->getSlogan()); ?>
+<?php print_unescaped("\n".$theme->getBaseUrl());
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index cc04de5ec38..ad61f398b1c 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -24,13 +24,16 @@
<div class="clientsbox center">
<h2><?php p($l->t('Get the apps to sync your files'));?></h2>
<a href="<?php p($_['clients']['desktop']); ?>" target="_blank">
- <img src="<?php print_unescaped(OCP\Util::imagePath('core', 'desktopapp.png')); ?>" />
+ <img src="<?php print_unescaped(OCP\Util::imagePath('core', 'desktopapp.png')); ?>"
+ alt="<?php p($l->t('Desktop client'));?>" />
</a>
<a href="<?php p($_['clients']['android']); ?>" target="_blank">
- <img src="<?php print_unescaped(OCP\Util::imagePath('core', 'googleplay.png')); ?>" />
+ <img src="<?php print_unescaped(OCP\Util::imagePath('core', 'googleplay.png')); ?>"
+ alt="<?php p($l->t('Android app'));?>" />
</a>
<a href="<?php p($_['clients']['ios']); ?>" target="_blank">
- <img src="<?php print_unescaped(OCP\Util::imagePath('core', 'appstore.png')); ?>" />
+ <img src="<?php print_unescaped(OCP\Util::imagePath('core', 'appstore.png')); ?>"
+ alt="<?php p($l->t('iOS app'));?>" />
</a>
<?php if (OC_Util::getEditionString() === ''): ?>
@@ -63,6 +66,7 @@
<?php
if($_['passwordChangeSupported']) {
+ script('jquery-showpassword');
?>
<form id="passwordform" class="section">
<h2><?php p($l->t('Password'));?></h2>
@@ -88,7 +92,9 @@ if($_['passwordChangeSupported']) {
if($_['displayNameChangeSupported']) {
?>
<form id="displaynameform" class="section">
- <h2><?php echo $l->t('Full Name');?></h2>
+ <h2>
+ <label for="displayName"><?php echo $l->t('Full Name');?></label>
+ </h2>
<input type="text" id="displayName" name="displayName"
value="<?php p($_['displayName'])?>"
autocomplete="on" autocapitalize="off" autocorrect="off" />
@@ -103,7 +109,9 @@ if($_['displayNameChangeSupported']) {
if($_['passwordChangeSupported']) {
?>
<form id="lostpassword" class="section">
- <h2><?php p($l->t('Email'));?></h2>
+ <h2>
+ <label for="email"><?php p($l->t('Email'));?></label>
+ </h2>
<input type="email" name="email" id="email" value="<?php p($_['email']); ?>"
placeholder="<?php p($l->t('Your email address'));?>"
autocomplete="on" autocapitalize="off" autocorrect="off" />
@@ -138,7 +146,9 @@ if($_['passwordChangeSupported']) {
<?php endif; ?>
<form class="section">
- <h2><?php p($l->t('Language'));?></h2>
+ <h2>
+ <label for="languageinput"><?php p($l->t('Language'));?></label>
+ </h2>
<select id="languageinput" name="lang" data-placeholder="<?php p($l->t('Language'));?>">
<option value="<?php p($_['activelanguage']['code']);?>">
<?php p($_['activelanguage']['name']);?>
diff --git a/settings/templates/users/main.php b/settings/templates/users/main.php
index d2b7652f142..73552f8ad2e 100644
--- a/settings/templates/users/main.php
+++ b/settings/templates/users/main.php
@@ -4,6 +4,19 @@
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
+
+script('settings', [
+ 'users/deleteHandler',
+ 'users/filter',
+ 'users/users',
+ 'users/groups'
+]);
+script('core', [
+ 'multiselect',
+ 'singleselect'
+]);
+style('settings', 'settings');
+
$userlistParams = array();
$allGroups=array();
foreach($_["groups"] as $group) {
@@ -31,14 +44,36 @@ translation('settings');
<?php print_unescaped($this->inc('users/part.setquota')); ?>
<div id="userlistoptions">
- <p><label>
- <input type="checkbox" name="StorageLocation" value="StorageLocation" id="CheckboxStorageLocation">
+ <p>
+ <input type="checkbox" name="StorageLocation" value="StorageLocation" id="CheckboxStorageLocation">
+ <label for="CheckboxStorageLocation">
<?php p($l->t('Show storage location')) ?>
- </label></p>
- <p><label>
+ </label>
+ </p>
+ <p>
<input type="checkbox" name="LastLogin" value="LastLogin" id="CheckboxLastLogin">
- <?php p($l->t('Show last log in')) ?>
- </label></p>
+ <label for="CheckboxLastLogin">
+ <?php p($l->t('Show last log in')) ?>
+ </label>
+ </p>
+ <p>
+ <input type="checkbox" name="UserBackend" value="UserBackend" id="CheckboxUserBackend">
+ <label for="CheckboxUserBackend">
+ <?php p($l->t('Show user backend')) ?>
+ </label>
+ </p>
+ <p>
+ <input type="checkbox" name="MailOnUserCreate" value="MailOnUserCreate" id="CheckboxMailOnUserCreate">
+ <label for="CheckboxMailOnUserCreate">
+ <?php p($l->t('Send email to new user')) ?>
+ </label>
+ </p>
+ <p>
+ <input type="checkbox" name="EmailAddress" value="EmailAddress" id="CheckboxEmailAddress">
+ <label for="CheckboxEmailAddress">
+ <?php p($l->t('Show email address')) ?>
+ </label>
+ </p>
</div>
</div>
</div>
diff --git a/settings/templates/users/part.createuser.php b/settings/templates/users/part.createuser.php
index edec7587eb5..9d9886f694c 100644
--- a/settings/templates/users/part.createuser.php
+++ b/settings/templates/users/part.createuser.php
@@ -1,12 +1,15 @@
<div id="controls">
<form id="newuser" autocomplete="off">
<input id="newusername" type="text"
- placeholder="<?php p($l->t('Login Name'))?>"
+ placeholder="<?php p($l->t('Username'))?>"
autocomplete="off" autocapitalize="off" autocorrect="off" />
<input
type="password" id="newuserpassword"
placeholder="<?php p($l->t('Password'))?>"
autocomplete="off" autocapitalize="off" autocorrect="off" />
+ <input id="newemail" type="text" style="display:none"
+ placeholder="<?php p($l->t('E-Mail'))?>"
+ autocomplete="off" autocapitalize="off" autocorrect="off" />
<select
class="groupsselect" id="newusergroups" data-placeholder="groups"
title="<?php p($l->t('Groups'))?>" multiple="multiple">
@@ -29,6 +32,6 @@
</div>
<?php endif; ?>
<form autocomplete="off" id="usersearchform">
- <input type="text" class="input userFilter" placeholder="<?php p($l->t('Search Users and Groups')); ?>" />
+ <input type="text" class="input userFilter" placeholder="<?php p($l->t('Search Users')); ?>" />
</form>
</div>
diff --git a/settings/templates/users/part.userlist.php b/settings/templates/users/part.userlist.php
index 964aef600a2..4346920e43a 100644
--- a/settings/templates/users/part.userlist.php
+++ b/settings/templates/users/part.userlist.php
@@ -7,25 +7,26 @@
<th id='headerName'><?php p($l->t('Username'))?></th>
<th id="headerDisplayName"><?php p($l->t( 'Full Name' )); ?></th>
<th id="headerPassword"><?php p($l->t( 'Password' )); ?></th>
+ <th class="mailAddress"><?php p($l->t( 'Email' )); ?></th>
<th id="headerGroups"><?php p($l->t( 'Groups' )); ?></th>
<?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
<th id="headerSubAdmins"><?php p($l->t('Group Admin for')); ?></th>
<?php endif;?>
<th id="headerQuota"><?php p($l->t('Quota')); ?></th>
- <th id="headerStorageLocation"><?php p($l->t('Storage Location')); ?></th>
- <th id="headerLastLogin"><?php p($l->t('Last Login')); ?></th>
+ <th class="storageLocation"><?php p($l->t('Storage Location')); ?></th>
+ <th class="userBackend"><?php p($l->t('User Backend')); ?></th>
+ <th class="lastLogin"><?php p($l->t('Last Login')); ?></th>
<th id="headerRemove">&nbsp;</th>
</tr>
</thead>
<tbody>
- <?php foreach($_["users"] as $user): ?>
- <tr data-uid="<?php p($user["name"]) ?>"
- data-displayname="<?php p($user["displayName"]) ?>">
+ <!-- the following <tr> is used as a template for the JS part -->
+ <tr style="display:none">
<?php if ($_['enableAvatars']): ?>
- <td class="avatar"><div class="avatardiv"></div></td>
+ <td class="avatar"><div class="avatardiv"></div></td>
<?php endif; ?>
- <td class="name"><?php p($user["name"]); ?></td>
- <td class="displayName"><span><?php p($user["displayName"]); ?></span> <img class="svg action"
+ <td class="name"></td>
+ <td class="displayName"><span></span> <img class="svg action"
src="<?php p(image_path('core', 'actions/rename.svg'))?>"
alt="<?php p($l->t("change full name"))?>" title="<?php p($l->t("change full name"))?>"/>
</td>
@@ -33,84 +34,36 @@
src="<?php print_unescaped(image_path('core', 'actions/rename.svg'))?>"
alt="<?php p($l->t("set new password"))?>" title="<?php p($l->t("set new password"))?>"/>
</td>
- <td class="groups">
- <select
- class="groupsselect"
- data-username="<?php p($user['name']) ;?>"
- data-user-groups="<?php p(json_encode($user['groups'])) ;?>"
- data-placeholder="groups" title="<?php p($l->t('no group'))?>"
- multiple="multiple">
- <?php foreach($_["adminGroup"] as $adminGroup): ?>
- <option value="<?php p($adminGroup['name']);?>"><?php p($adminGroup['name']); ?></option>
- <?php endforeach; ?>
- <?php foreach($_["groups"] as $group): ?>
- <option value="<?php p($group['name']);?>"><?php p($group['name']);?></option>
- <?php endforeach;?>
- </select>
+ <td class="mailAddress"><span></span> <img class="svg action"
+ src="<?php p(image_path('core', 'actions/rename.svg'))?>"
+ alt="<?php p($l->t('change email address'))?>" title="<?php p($l->t('change email address'))?>"/>
</td>
+ <td class="groups"></td>
<?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
- <td class="subadmins">
- <select
- class="subadminsselect"
- data-username="<?php p($user['name']) ;?>"
- data-subadmin="<?php p(json_encode($user['subadmin']));?>"
- data-placeholder="subadmins" title="<?php p($l->t('no group'))?>"
- multiple="multiple">
- <?php foreach($_["subadmingroups"] as $group): ?>
- <option value="<?php p($group);?>"><?php p($group);?></option>
- <?php endforeach;?>
- </select>
- </td>
+ <td class="subadmins"></td>
<?php endif;?>
<td class="quota">
<select class='quota-user' data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>">
- <option
- <?php if($user['quota'] === 'default') print_unescaped('selected="selected"');?>
- value='default'>
+ <option value='default'>
<?php p($l->t('Default'));?>
</option>
- <option
- <?php if($user['quota'] === 'none') print_unescaped('selected="selected"');?>
- value='none'>
+ <option value='none'>
<?php p($l->t('Unlimited'));?>
</option>
<?php foreach($_['quota_preset'] as $preset):?>
- <option
- <?php if($user['quota']==$preset) print_unescaped('selected="selected"');?>
- value='<?php p($preset);?>'>
- <?php p($preset);?>
- </option>
+ <option value='<?php p($preset);?>'>
+ <?php p($preset);?>
+ </option>
<?php endforeach;?>
- <?php if($user['isQuotaUserDefined']):?>
- <option selected="selected" value='<?php p($user['quota']);?>'>
- <?php p($user['quota']);?>
- </option>
- <?php endif;?>
<option value='other' data-new>
- <?php p($l->t('Other'));?>
- ...
+ <?php p($l->t('Other'));?> ...
</option>
</select>
</td>
- <td class="storageLocation"><?php p($user["storageLocation"]); ?></td>
- <?php
- if($user["lastLogin"] === 0) {
- $lastLogin = $l->t('never');
- $lastLoginDate = $lastLogin;
- } else {
- $lastLogin = relative_modified_date($user["lastLogin"]);
- $lastLoginDate = \OC_Util::formatDate($user["lastLogin"]);
- }
- ?>
- <td class="lastLogin" title="<?php p('<span class="usersLastLoginTooltip">'.$lastLoginDate.'</span>'); ?>"><?php p($lastLogin); ?></td>
- <td class="remove">
- <?php if($user['name']!=OC_User::getUser()):?>
- <a href="#" class="action delete" original-title="<?php p($l->t('Delete'))?>">
- <img src="<?php print_unescaped(image_path('core', 'actions/delete.svg')) ?>" class="svg" />
- </a>
- <?php endif;?>
- </td>
+ <td class="storageLocation"></td>
+ <td class="userBackend"></td>
+ <td class="lastLogin"></td>
+ <td class="remove"></td>
</tr>
- <?php endforeach; ?>
</tbody>
</table>
diff --git a/settings/tests/js/users/deleteHandlerSpec.js b/settings/tests/js/users/deleteHandlerSpec.js
index 6b6328be801..c6d88b32411 100644
--- a/settings/tests/js/users/deleteHandlerSpec.js
+++ b/settings/tests/js/users/deleteHandlerSpec.js
@@ -85,7 +85,7 @@ describe('DeleteHandler tests', function() {
// previous one was delete
expect(fakeServer.requests.length).toEqual(1);
var request = fakeServer.requests[0];
- expect(request.url).toEqual(OC.webroot + '/index.php/settings/ajax/dummyendpoint.php');
+ expect(request.url).toEqual(OC.webroot + '/index.php/dummyendpoint.php/some_uid');
});
it('automatically deletes after timeout', function() {
var handler = init(markCallback, removeCallback, undoCallback);
@@ -98,7 +98,7 @@ describe('DeleteHandler tests', function() {
clock.tick(3000);
expect(fakeServer.requests.length).toEqual(1);
var request = fakeServer.requests[0];
- expect(request.url).toEqual(OC.webroot + '/index.php/settings/ajax/dummyendpoint.php');
+ expect(request.url).toEqual(OC.webroot + '/index.php/dummyendpoint.php/some_uid');
});
it('deletes when deleteEntry is called', function() {
var handler = init(markCallback, removeCallback, undoCallback);
@@ -107,7 +107,7 @@ describe('DeleteHandler tests', function() {
handler.deleteEntry();
expect(fakeServer.requests.length).toEqual(1);
var request = fakeServer.requests[0];
- expect(request.url).toEqual(OC.webroot + '/index.php/settings/ajax/dummyendpoint.php');
+ expect(request.url).toEqual(OC.webroot + '/index.php/dummyendpoint.php/some_uid');
});
it('cancels deletion when undo is clicked', function() {
var handler = init(markCallback, removeCallback, undoCallback);
@@ -135,7 +135,7 @@ describe('DeleteHandler tests', function() {
expect(fakeServer.requests.length).toEqual(0);
});
it('calls removeCallback after successful server side deletion', function() {
- fakeServer.respondWith(/\/index\.php\/settings\/ajax\/dummyendpoint.php/, [
+ fakeServer.respondWith(/\/index\.php\/dummyendpoint.php\/some_uid/, [
200,
{ 'Content-Type': 'application/json' },
JSON.stringify({status: 'success'})
@@ -148,7 +148,6 @@ describe('DeleteHandler tests', function() {
expect(fakeServer.requests.length).toEqual(1);
var request = fakeServer.requests[0];
var query = OC.parseQueryString(request.requestBody);
- expect(query.paramid).toEqual('some_uid');
expect(removeCallback.calledOnce).toEqual(true);
expect(undoCallback.notCalled).toEqual(true);
@@ -157,7 +156,7 @@ describe('DeleteHandler tests', function() {
it('calls undoCallback and shows alert after failed server side deletion', function() {
// stub t to avoid extra calls
var tStub = sinon.stub(window, 't').returns('text');
- fakeServer.respondWith(/\/index\.php\/settings\/ajax\/dummyendpoint.php/, [
+ fakeServer.respondWith(/\/index\.php\/dummyendpoint.php\/some_uid/, [
200,
{ 'Content-Type': 'application/json' },
JSON.stringify({status: 'error', data: {message: 'test error'}})
@@ -171,7 +170,6 @@ describe('DeleteHandler tests', function() {
expect(fakeServer.requests.length).toEqual(1);
var request = fakeServer.requests[0];
var query = OC.parseQueryString(request.requestBody);
- expect(query.paramid).toEqual('some_uid');
expect(removeCallback.notCalled).toEqual(true);
expect(undoCallback.calledOnce).toEqual(true);
diff --git a/settings/users.php b/settings/users.php
index 85f160a1552..75109f9ef74 100644
--- a/settings/users.php
+++ b/settings/users.php
@@ -7,20 +7,13 @@
OC_Util::checkSubAdminUser();
-// We have some javascript foo!
-OC_Util::addScript('settings', 'users/deleteHandler');
-OC_Util::addScript('settings', 'users/filter');
-OC_Util::addScript( 'settings', 'users/users' );
-OC_Util::addScript( 'settings', 'users/groups' );
-OC_Util::addScript( 'core', 'multiselect' );
-OC_Util::addScript( 'core', 'singleselect' );
-OC_Util::addStyle( 'settings', 'settings' );
OC_App::setActiveNavigationEntry( 'core_users' );
-$users = array();
$userManager = \OC_User::getManager();
$groupManager = \OC_Group::getManager();
+$config = \OC::$server->getConfig();
+
$isAdmin = OC_User::isAdminUser(OC_User::getUser());
$groupsInfo = new \OC\Group\MetaData(OC_User::getUser(), $isAdmin, $groupManager);
@@ -28,10 +21,9 @@ $groupsInfo->setSorting($groupsInfo::SORT_USERCOUNT);
list($adminGroup, $groups) = $groupsInfo->get();
$recoveryAdminEnabled = OC_App::isEnabled('files_encryption') &&
- OC_Appconfig::getValue( 'files_encryption', 'recoveryAdminEnabled' );
+ $config->getAppValue( 'files_encryption', 'recoveryAdminEnabled', null );
if($isAdmin) {
- $accessibleUsers = OC_User::getDisplayNames('', 30);
$subadmins = OC_SubAdmin::getAllSubAdmins();
}else{
/* Retrieve group IDs from $groups array, so we can pass that information into OC_Group::displayNamesInGroups() */
@@ -41,48 +33,22 @@ if($isAdmin) {
$gids[] = $group['id'];
}
}
- $accessibleUsers = OC_Group::displayNamesInGroups($gids, '', 30);
$subadmins = false;
}
// load preset quotas
-$quotaPreset=OC_Appconfig::getValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB');
+$quotaPreset=$config->getAppValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB');
$quotaPreset=explode(',', $quotaPreset);
foreach($quotaPreset as &$preset) {
$preset=trim($preset);
}
$quotaPreset=array_diff($quotaPreset, array('default', 'none'));
-$defaultQuota=OC_Appconfig::getValue('files', 'default_quota', 'none');
+$defaultQuota=$config->getAppValue('files', 'default_quota', 'none');
$defaultQuotaIsUserDefined=array_search($defaultQuota, $quotaPreset)===false
&& array_search($defaultQuota, array('none', 'default'))===false;
-// load users and quota
-foreach($accessibleUsers as $uid => $displayName) {
- $quota = OC_Preferences::getValue($uid, 'files', 'quota', 'default');
- $isQuotaUserDefined = array_search($quota, $quotaPreset) === false
- && array_search($quota, array('none', 'default')) === false;
-
- $name = $displayName;
- if ($displayName !== $uid) {
- $name = $name . ' (' . $uid . ')';
- }
-
- $user = $userManager->get($uid);
- $users[] = array(
- "name" => $uid,
- "displayName" => $displayName,
- "groups" => OC_Group::getUserGroups($uid),
- 'quota' => $quota,
- 'isQuotaUserDefined' => $isQuotaUserDefined,
- 'subadmin' => OC_SubAdmin::getSubAdminsGroups($uid),
- 'storageLocation' => $user->getHome(),
- 'lastLogin' => $user->getLastLogin(),
- );
-}
-
$tmpl = new OC_Template("settings", "users/main", "user");
-$tmpl->assign('users', $users);
$tmpl->assign('groups', $groups);
$tmpl->assign('adminGroup', $adminGroup);
$tmpl->assign('isAdmin', (int)$isAdmin);
diff --git a/status.php b/status.php
index db5813814d0..f7bdfe1fd51 100644
--- a/status.php
+++ b/status.php
@@ -25,8 +25,10 @@ try {
require_once 'lib/base.php';
- $installed = OC_Config::getValue('installed') == 1;
- $maintenance = OC_Config::getValue('maintenance', false);
+ $systemConfig = \OC::$server->getSystemConfig();
+
+ $installed = $systemConfig->getValue('installed') == 1;
+ $maintenance = $systemConfig->getValue('maintenance', false);
$values=array(
'installed'=>$installed,
'maintenance' => $maintenance,
diff --git a/tests/core/lostpassword/controller/lostcontrollertest.php b/tests/core/lostpassword/controller/lostcontrollertest.php
new file mode 100644
index 00000000000..2ed7692a32f
--- /dev/null
+++ b/tests/core/lostpassword/controller/lostcontrollertest.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\LostPassword\Controller;
+use OC\Core\Application;
+use OCP\AppFramework\Http\TemplateResponse;
+
+/**
+ * Class LostControllerTest
+ *
+ * @package OC\Core\LostPassword\Controller
+ */
+class LostControllerTest extends \PHPUnit_Framework_TestCase {
+
+ private $container;
+ /** @var LostController */
+ private $lostController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['AppName'] = 'core';
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['L10N'] = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Defaults'] = $this->getMockBuilder('\OC_Defaults')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserManager'] = $this->getMockBuilder('\OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['URLGenerator'] = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['SecureRandom'] = $this->getMockBuilder('\OCP\Security\ISecureRandom')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['IsEncryptionEnabled'] = true;
+ $this->lostController = $this->container['LostController'];
+ }
+
+ public function testResetFormUnsuccessful() {
+ $userId = 'admin';
+ $token = 'MySecretToken';
+
+ $this->container['URLGenerator']
+ ->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('core.lost.setPassword', array('userId' => 'admin', 'token' => 'MySecretToken'))
+ ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/'));
+
+ $response = $this->lostController->resetform($token, $userId);
+ $expectedResponse = new TemplateResponse('core/lostpassword',
+ 'resetpassword',
+ array(
+ 'link' => 'https://ownCloud.com/index.php/lostpassword/',
+ ),
+ 'guest');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testEmailUnsucessful() {
+ $existingUser = 'ExistingUser';
+ $nonExistingUser = 'NonExistingUser';
+ $this->container['UserManager']
+ ->expects($this->any())
+ ->method('userExists')
+ ->will($this->returnValueMap(array(
+ array(true, $existingUser),
+ array(false, $nonExistingUser)
+ )));
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will(
+ $this->returnValueMap(
+ array(
+ array('Couldn\'t send reset email. Please make sure your username is correct.', array(),
+ 'Couldn\'t send reset email. Please make sure your username is correct.'),
+
+ )
+ ));
+
+ // With a non existing user
+ $response = $this->lostController->email($nonExistingUser);
+ $expectedResponse = array('status' => 'error', 'msg' => 'Couldn\'t send reset email. Please make sure your username is correct.');
+ $this->assertSame($expectedResponse, $response);
+
+ // With no mail address
+ $this->container['Config']
+ ->expects($this->any())
+ ->method('getUserValue')
+ ->with($existingUser, 'settings', 'email')
+ ->will($this->returnValue(null));
+ $response = $this->lostController->email($existingUser);
+ $expectedResponse = array('status' => 'error', 'msg' => 'Couldn\'t send reset email. Please make sure your username is correct.');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testEmailSuccessful() {
+ /**
+ * FIXME: Disable test for systems where no sendmail is available since code is static.
+ * @link https://github.com/owncloud/core/pull/12085
+ */
+ if (is_null(\OC_Helper::findBinaryPath('sendmail'))) {
+ $this->markTestSkipped('sendmail is not available');
+ }
+
+ $randomToken = $this->container['SecureRandom'];
+ $this->container['SecureRandom']
+ ->expects($this->once())
+ ->method('generate')
+ ->with('21')
+ ->will($this->returnValue('ThisIsMaybeANotSoSecretToken!'));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('ExistingUser')
+ ->will($this->returnValue(true));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('ExistingUser', 'settings', 'email')
+ ->will($this->returnValue('test@example.com'));
+ $this->container['SecureRandom']
+ ->expects($this->once())
+ ->method('getMediumStrengthGenerator')
+ ->will($this->returnValue($randomToken));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setUserValue')
+ ->with('ExistingUser', 'owncloud', 'lostpassword', 'ThisIsMaybeANotSoSecretToken!');
+ $this->container['URLGenerator']
+ ->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('core.lost.resetform', array('userId' => 'ExistingUser', 'token' => 'ThisIsMaybeANotSoSecretToken!'))
+ ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/'));
+
+ $response = $this->lostController->email('ExistingUser');
+ $expectedResponse = array('status' => 'success');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testSetPasswordUnsuccessful() {
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will(
+ $this->returnValueMap(
+ array(
+ array('Couldn\'t reset password because the token is invalid', array(),
+ 'Couldn\'t reset password because the token is invalid'),
+ )
+ ));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('InvalidTokenUser', 'owncloud', 'lostpassword')
+ ->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword'));
+
+ // With an invalid token
+ $userName = 'InvalidTokenUser';
+ $response = $this->lostController->setPassword('wrongToken', $userName, 'NewPassword', true);
+ $expectedResponse = array('status' => 'error', 'msg' => 'Couldn\'t reset password because the token is invalid');
+ $this->assertSame($expectedResponse, $response);
+
+ // With a valid token and no proceed
+ $response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword!', $userName, 'NewPassword', false);
+ $expectedResponse = array('status' => 'error', 'msg' => '', 'encryption' => true);
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testSetPasswordSuccessful() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('ValidTokenUser', 'owncloud', 'lostpassword')
+ ->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword'));
+ $user = $this->getMockBuilder('\OCP\IUser')
+ ->disableOriginalConstructor()->getMock();
+ $user->expects($this->once())
+ ->method('setPassword')
+ ->with('NewPassword')
+ ->will($this->returnValue(true));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('get')
+ ->with('ValidTokenUser')
+ ->will($this->returnValue($user));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('deleteUserValue')
+ ->with('ValidTokenUser', 'owncloud', 'lostpassword');
+
+ $response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword', 'ValidTokenUser', 'NewPassword', true);
+ $expectedResponse = array('status' => 'success');
+ $this->assertSame($expectedResponse, $response);
+ }
+}
diff --git a/tests/data/app/expected-info.json b/tests/data/app/expected-info.json
new file mode 100644
index 00000000000..d86ffed482b
--- /dev/null
+++ b/tests/data/app/expected-info.json
@@ -0,0 +1,71 @@
+{
+ "info": [],
+ "remote": [],
+ "public": [],
+ "id": "files_encryption",
+ "name": "Server-side Encryption",
+ "description": "\n\tThis application encrypts all files accessed by ownCloud at rest, wherever they are stored. As an example, with this application enabled, external cloud based Amazon S3 storage will be encrypted, protecting this data on storage outside of the control of the Admin. When this application is enabled for the first time, all files are encrypted as users log in and are prompted for their password. The recommended recovery key option enables recovery of files in case the key is lost. \n\tNote that this app encrypts all files that are touched by ownCloud, so external storage providers and applications such as SharePoint will see new files encrypted when they are accessed. Encryption is based on AES 128 or 256 bit keys. More information is available in the Encryption documentation \n\t",
+ "licence": "AGPL",
+ "author": "Sam Tuke, Bjoern Schiessle, Florin Peter",
+ "requiremin": "4",
+ "shipped": "true",
+ "documentation": {
+ "user": "https://docs.example.com/server/go.php?to=user-encryption",
+ "admin": "https://docs.example.com/server/go.php?to=admin-encryption"
+ },
+ "rememberlogin": "false",
+ "types": ["filesystem"],
+ "ocsid": "166047",
+ "dependencies": {
+ "php": {
+ "@attributes" : {
+ "min-version": "5.4",
+ "max-version": "5.5"
+ }
+ },
+ "database": [
+ {
+ "@attributes" : {
+ "min-version": "3.0"
+ },
+ "@value": "sqlite"},
+ "mysql"
+ ],
+ "command": [
+ {
+ "@attributes" : {
+ "os": "linux"
+ },
+ "@value": "grep"
+ },
+ {
+ "@attributes" : {
+ "os": "windows"
+ },
+ "@value": "notepad.exe"
+ }
+ ],
+ "lib": [
+ {
+ "@attributes" : {
+ "min-version": "1.2"
+ },
+ "@value": "xml"
+ },
+ {
+ "@attributes" : {
+ "max-version": "2.0"
+ },
+ "@value": "intl"
+ },
+ "curl"
+ ],
+ "os": "Linux",
+ "owncloud": {
+ "@attributes" : {
+ "min-version": "7.0.1",
+ "max-version": "8"
+ }
+ }
+ }
+}
diff --git a/tests/data/app/invalid-info.xml b/tests/data/app/invalid-info.xml
new file mode 100644
index 00000000000..3947f5420c2
--- /dev/null
+++ b/tests/data/app/invalid-info.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<info
+ <id>files_encryption</id>
+ <name>Server-side Encryption</name>
+ <description>
+ This application encrypts all files accessed by ownCloud at rest, wherever they are stored. As an example, with this application enabled, external cloud based Amazon S3 storage will be encrypted, protecting this data on storage outside of the control of the Admin. When this application is enabled for the first time, all files are encrypted as users log in and are prompted for their password. The recommended recovery key option enables recovery of files in case the key is lost.
+ Note that this app encrypts all files that are touched by ownCloud, so external storage providers and applications such as SharePoint will see new files encrypted when they are accessed. Encryption is based on AES 128 or 256 bit keys. More information is available in the Encryption documentation
+ </description>
+ <licence>AGPL</licence>
+ <author>Sam Tuke, Bjoern Schiessle, Florin Peter</author>
+ <requiremin>4</requiremin>
+ <shipped>true</shipped>
+ <documentation>
+ <user>user-encryption</user>
+ <admin>admin-encryption</admin>
+ </documentation>
+ <rememberlogin>false</rememberlogin>
+ <types>
+ <filesystem/>
+ </types>
+ <ocsid>166047</ocsid>
+</info>
diff --git a/tests/data/app/valid-info.xml b/tests/data/app/valid-info.xml
new file mode 100644
index 00000000000..4b22d55d7bc
--- /dev/null
+++ b/tests/data/app/valid-info.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<info>
+ <id>files_encryption</id>
+ <name>Server-side Encryption</name>
+ <description>
+ This application encrypts all files accessed by ownCloud at rest, wherever they are stored. As an example, with this application enabled, external cloud based Amazon S3 storage will be encrypted, protecting this data on storage outside of the control of the Admin. When this application is enabled for the first time, all files are encrypted as users log in and are prompted for their password. The recommended recovery key option enables recovery of files in case the key is lost.
+ Note that this app encrypts all files that are touched by ownCloud, so external storage providers and applications such as SharePoint will see new files encrypted when they are accessed. Encryption is based on AES 128 or 256 bit keys. More information is available in the Encryption documentation
+ </description>
+ <licence>AGPL</licence>
+ <author>Sam Tuke, Bjoern Schiessle, Florin Peter</author>
+ <requiremin>4</requiremin>
+ <shipped>true</shipped>
+ <documentation>
+ <user>user-encryption</user>
+ <admin>admin-encryption</admin>
+ </documentation>
+ <rememberlogin>false</rememberlogin>
+ <types>
+ <filesystem/>
+ </types>
+ <ocsid>166047</ocsid>
+ <dependencies>
+ <php min-version="5.4" max-version="5.5"/>
+ <database min-version="3.0">sqlite</database>
+ <database>mysql</database>
+ <command os="linux">grep</command>
+ <command os="windows">notepad.exe</command>
+ <lib min-version="1.2">xml</lib>
+ <lib max-version="2.0">intl</lib>
+ <lib>curl</lib>
+ <os>Linux</os>
+ <owncloud min-version="7.0.1" max-version="8" />
+ </dependencies>
+</info>
diff --git a/tests/data/l10n/ru.json b/tests/data/l10n/ru.json
index 177b14a6b20..7041205e761 100644
--- a/tests/data/l10n/ru.json
+++ b/tests/data/l10n/ru.json
@@ -1,6 +1,7 @@
{
"translations" : {
- "_%n file_::_%n files_" : ["%n файл", "%n файла", "%n файлов"]
+ "_%n file_::_%n files_" : ["%n файл", "%n файла", "%n файлов"],
+ "_%n missing plural_::_%n missing plurals_" : ["", "", ""]
},
"pluralForm" : "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}
diff --git a/tests/enable_all.php b/tests/enable_all.php
index 2368a194944..e9b538713a5 100644
--- a/tests/enable_all.php
+++ b/tests/enable_all.php
@@ -19,7 +19,7 @@ function enableApp($app) {
enableApp('files_sharing');
enableApp('files_trashbin');
enableApp('files_encryption');
-enableApp('files_external');
enableApp('user_ldap');
enableApp('files_versions');
+enableApp('provisioning_api');
diff --git a/tests/lib/activitymanager.php b/tests/lib/activitymanager.php
index f21b82c52c3..6a5af7b259b 100644
--- a/tests/lib/activitymanager.php
+++ b/tests/lib/activitymanager.php
@@ -8,12 +8,14 @@
*
*/
-class Test_ActivityManager extends PHPUnit_Framework_TestCase {
+class Test_ActivityManager extends \Test\TestCase {
/** @var \OC\ActivityManager */
private $activityManager;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->activityManager = new \OC\ActivityManager();
$this->activityManager->registerExtension(function() {
return new NoOpExtension();
@@ -57,6 +59,14 @@ class Test_ActivityManager extends PHPUnit_Framework_TestCase {
$this->assertFalse($result);
}
+ public function testGetSpecialParameterList() {
+ $result = $this->activityManager->getSpecialParameterList('APP0', '');
+ $this->assertEquals(array(0 => 'file', 1 => 'username'), $result);
+
+ $result = $this->activityManager->getSpecialParameterList('APP1', '');
+ $this->assertFalse($result);
+ }
+
public function testTypeIcon() {
$result = $this->activityManager->getTypeIcon('NT1');
$this->assertEquals('icon-nt-one', $result);
@@ -85,11 +95,14 @@ class Test_ActivityManager extends PHPUnit_Framework_TestCase {
}
public function testQueryForFilter() {
+ $this->activityManager->registerExtension(function() {
+ return new SimpleExtension();
+ });
$result = $this->activityManager->getQueryForFilter('filter1');
$this->assertEquals(
array(
- '`app` = ? and `message` like ?',
- array('mail', 'ownCloud%')
+ ' and ((`app` = ? and `message` like ?) or (`app` = ? and `message` like ?))',
+ array('mail', 'ownCloud%', 'mail', 'ownCloud%')
), $result
);
@@ -127,6 +140,14 @@ class SimpleExtension implements \OCP\Activity\IExtension {
return false;
}
+ public function getSpecialParameterList($app, $text) {
+ if ($app === 'APP0') {
+ return array(0 => 'file', 1 => 'username');
+ }
+
+ return false;
+ }
+
public function getTypeIcon($type) {
if ($type === 'NT1') {
return 'icon-nt-one';
@@ -180,6 +201,10 @@ class NoOpExtension implements \OCP\Activity\IExtension {
return false;
}
+ public function getSpecialParameterList($app, $text) {
+ return false;
+ }
+
public function getTypeIcon($type) {
return false;
}
diff --git a/tests/lib/allconfig.php b/tests/lib/allconfig.php
new file mode 100644
index 00000000000..7f8ad5ec221
--- /dev/null
+++ b/tests/lib/allconfig.php
@@ -0,0 +1,422 @@
+<?php
+/**
+ * Copyright (c) 2014 Morris Jobke <hey@morrisjobke.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+
+class TestAllConfig extends \Test\TestCase {
+
+ /** @var \OCP\IDBConnection */
+ protected $connection;
+
+ protected function getConfig($systemConfig = null, $connection = null) {
+ if($this->connection === null) {
+ $this->connection = \OC::$server->getDatabaseConnection();
+ }
+ if($connection === null) {
+ $connection = $this->connection;
+ }
+ if($systemConfig === null) {
+ $systemConfig = $this->getMock('\OC\SystemConfig');
+ }
+ return new \OC\AllConfig($systemConfig, $connection);
+ }
+
+ public function testDeleteUserValue() {
+ $config = $this->getConfig();
+
+ // preparation - add something to the database
+ $this->connection->executeUpdate(
+ 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' .
+ '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)',
+ array('userDelete', 'appDelete', 'keyDelete', 'valueDelete')
+ );
+
+ $config->deleteUserValue('userDelete', 'appDelete', 'keyDelete');
+
+ $result = $this->connection->executeQuery(
+ 'SELECT COUNT(*) AS `count` FROM `*PREFIX*preferences` WHERE `userid` = ?',
+ array('userDelete')
+ )->fetch();
+ $actualCount = $result['count'];
+
+ $this->assertEquals(0, $actualCount, 'There was one value in the database and after the tests there should be no entry left.');
+ }
+
+ public function testSetUserValue() {
+ $selectAllSQL = 'SELECT `userid`, `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?';
+ $config = $this->getConfig();
+
+ $config->setUserValue('userSet', 'appSet', 'keySet', 'valueSet');
+
+ $result = $this->connection->executeQuery($selectAllSQL, array('userSet'))->fetchAll();
+
+ $this->assertEquals(1, count($result));
+ $this->assertEquals(array(
+ 'userid' => 'userSet',
+ 'appid' => 'appSet',
+ 'configkey' => 'keySet',
+ 'configvalue' => 'valueSet'
+ ), $result[0]);
+
+ // test if the method overwrites existing database entries
+ $config->setUserValue('userSet', 'appSet', 'keySet', 'valueSet2');
+
+ $result = $this->connection->executeQuery($selectAllSQL, array('userSet'))->fetchAll();
+
+ $this->assertEquals(1, count($result));
+ $this->assertEquals(array(
+ 'userid' => 'userSet',
+ 'appid' => 'appSet',
+ 'configkey' => 'keySet',
+ 'configvalue' => 'valueSet2'
+ ), $result[0]);
+
+ // cleanup - it therefore relies on the successful execution of the previous test
+ $config->deleteUserValue('userSet', 'appSet', 'keySet');
+ }
+
+ public function testSetUserValueWithPreCondition() {
+ // mock the check for the database to run the correct SQL statements for each database type
+ $systemConfig = $this->getMock('\OC\SystemConfig');
+ $systemConfig->expects($this->once())
+ ->method('getValue')
+ ->with($this->equalTo('dbtype'),
+ $this->equalTo('sqlite'))
+ ->will($this->returnValue(\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite')));
+ $config = $this->getConfig($systemConfig);
+
+ $selectAllSQL = 'SELECT `userid`, `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?';
+
+ $config->setUserValue('userPreCond', 'appPreCond', 'keyPreCond', 'valuePreCond');
+
+ $result = $this->connection->executeQuery($selectAllSQL, array('userPreCond'))->fetchAll();
+
+ $this->assertEquals(1, count($result));
+ $this->assertEquals(array(
+ 'userid' => 'userPreCond',
+ 'appid' => 'appPreCond',
+ 'configkey' => 'keyPreCond',
+ 'configvalue' => 'valuePreCond'
+ ), $result[0]);
+
+ // test if the method overwrites existing database entries with valid precond
+ $config->setUserValue('userPreCond', 'appPreCond', 'keyPreCond', 'valuePreCond2', 'valuePreCond');
+
+ $result = $this->connection->executeQuery($selectAllSQL, array('userPreCond'))->fetchAll();
+
+ $this->assertEquals(1, count($result));
+ $this->assertEquals(array(
+ 'userid' => 'userPreCond',
+ 'appid' => 'appPreCond',
+ 'configkey' => 'keyPreCond',
+ 'configvalue' => 'valuePreCond2'
+ ), $result[0]);
+
+ // cleanup
+ $config->deleteUserValue('userPreCond', 'appPreCond', 'keyPreCond');
+ }
+
+ /**
+ * @expectedException \OCP\PreConditionNotMetException
+ */
+ public function testSetUserValueWithPreConditionFailure() {
+ // mock the check for the database to run the correct SQL statements for each database type
+ $systemConfig = $this->getMock('\OC\SystemConfig');
+ $systemConfig->expects($this->once())
+ ->method('getValue')
+ ->with($this->equalTo('dbtype'),
+ $this->equalTo('sqlite'))
+ ->will($this->returnValue(\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite')));
+ $config = $this->getConfig($systemConfig);
+
+ $selectAllSQL = 'SELECT `userid`, `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?';
+
+ $config->setUserValue('userPreCond1', 'appPreCond', 'keyPreCond', 'valuePreCond');
+
+ $result = $this->connection->executeQuery($selectAllSQL, array('userPreCond1'))->fetchAll();
+
+ $this->assertEquals(1, count($result));
+ $this->assertEquals(array(
+ 'userid' => 'userPreCond1',
+ 'appid' => 'appPreCond',
+ 'configkey' => 'keyPreCond',
+ 'configvalue' => 'valuePreCond'
+ ), $result[0]);
+
+ // test if the method overwrites existing database entries with valid precond
+ $config->setUserValue('userPreCond1', 'appPreCond', 'keyPreCond', 'valuePreCond2', 'valuePreCond3');
+
+ $result = $this->connection->executeQuery($selectAllSQL, array('userPreCond1'))->fetchAll();
+
+ $this->assertEquals(1, count($result));
+ $this->assertEquals(array(
+ 'userid' => 'userPreCond1',
+ 'appid' => 'appPreCond',
+ 'configkey' => 'keyPreCond',
+ 'configvalue' => 'valuePreCond'
+ ), $result[0]);
+
+ // cleanup
+ $config->deleteUserValue('userPreCond1', 'appPreCond', 'keyPreCond');
+ }
+
+ public function testSetUserValueUnchanged() {
+ // TODO - FIXME until the dependency injection is handled properly (in AllConfig)
+ $this->markTestSkipped('Skipped because this is just testable if database connection can be injected');
+
+ $resultMock = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')
+ ->disableOriginalConstructor()->getMock();
+ $resultMock->expects($this->once())
+ ->method('fetchColumn')
+ ->will($this->returnValue('valueSetUnchanged'));
+
+ $connectionMock = $this->getMock('\OCP\IDBConnection');
+ $connectionMock->expects($this->once())
+ ->method('executeQuery')
+ ->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences` '.
+ 'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
+ $this->equalTo(array('userSetUnchanged', 'appSetUnchanged', 'keySetUnchanged')))
+ ->will($this->returnValue($resultMock));
+ $connectionMock->expects($this->never())
+ ->method('executeUpdate');
+
+ $config = $this->getConfig(null, $connectionMock);
+
+ $config->setUserValue('userSetUnchanged', 'appSetUnchanged', 'keySetUnchanged', 'valueSetUnchanged');
+ }
+
+ public function testGetUserValue() {
+ $config = $this->getConfig();
+
+ // setup - it therefore relies on the successful execution of the previous test
+ $config->setUserValue('userGet', 'appGet', 'keyGet', 'valueGet');
+ $value = $config->getUserValue('userGet', 'appGet', 'keyGet');
+
+ $this->assertEquals('valueGet', $value);
+
+ $result = $this->connection->executeQuery(
+ 'SELECT `userid`, `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?',
+ array('userGet')
+ )->fetchAll();
+
+ $this->assertEquals(1, count($result));
+ $this->assertEquals(array(
+ 'userid' => 'userGet',
+ 'appid' => 'appGet',
+ 'configkey' => 'keyGet',
+ 'configvalue' => 'valueGet'
+ ), $result[0]);
+
+ // drop data from database - but the config option should be cached in the config object
+ $this->connection->executeUpdate('DELETE FROM `*PREFIX*preferences` WHERE `userid` = ?', array('userGet'));
+
+ // testing the caching mechanism
+ $value = $config->getUserValue('userGet', 'appGet', 'keyGet');
+
+ $this->assertEquals('valueGet', $value);
+
+ $result = $this->connection->executeQuery(
+ 'SELECT `userid`, `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?',
+ array('userGet')
+ )->fetchAll();
+
+ $this->assertEquals(0, count($result));
+ }
+
+ public function testGetUserKeys() {
+ $config = $this->getConfig();
+
+ // preparation - add something to the database
+ $data = array(
+ array('userFetch', 'appFetch1', 'keyFetch1', 'value1'),
+ array('userFetch', 'appFetch1', 'keyFetch2', 'value2'),
+ array('userFetch', 'appFetch2', 'keyFetch3', 'value3'),
+ array('userFetch', 'appFetch1', 'keyFetch4', 'value4'),
+ array('userFetch', 'appFetch4', 'keyFetch1', 'value5'),
+ array('userFetch', 'appFetch5', 'keyFetch1', 'value6'),
+ array('userFetch2', 'appFetch', 'keyFetch1', 'value7')
+ );
+ foreach ($data as $entry) {
+ $this->connection->executeUpdate(
+ 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' .
+ '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)',
+ $entry
+ );
+ }
+
+ $value = $config->getUserKeys('userFetch', 'appFetch1');
+ $this->assertEquals(array('keyFetch1', 'keyFetch2', 'keyFetch4'), $value);
+
+ $value = $config->getUserKeys('userFetch2', 'appFetch');
+ $this->assertEquals(array('keyFetch1'), $value);
+
+ // cleanup
+ $this->connection->executeUpdate('DELETE FROM `*PREFIX*preferences`');
+ }
+
+ public function testGetUserValueDefault() {
+ $config = $this->getConfig();
+
+ $this->assertEquals('', $config->getUserValue('userGetUnset', 'appGetUnset', 'keyGetUnset'));
+ $this->assertEquals(null, $config->getUserValue('userGetUnset', 'appGetUnset', 'keyGetUnset', null));
+ $this->assertEquals('foobar', $config->getUserValue('userGetUnset', 'appGetUnset', 'keyGetUnset', 'foobar'));
+ }
+
+ public function testGetUserValueForUsers() {
+ $config = $this->getConfig();
+
+ // preparation - add something to the database
+ $data = array(
+ array('userFetch1', 'appFetch2', 'keyFetch1', 'value1'),
+ array('userFetch2', 'appFetch2', 'keyFetch1', 'value2'),
+ array('userFetch3', 'appFetch2', 'keyFetch1', 3),
+ array('userFetch4', 'appFetch2', 'keyFetch1', 'value4'),
+ array('userFetch5', 'appFetch2', 'keyFetch1', 'value5'),
+ array('userFetch6', 'appFetch2', 'keyFetch1', 'value6'),
+ array('userFetch7', 'appFetch2', 'keyFetch1', 'value7')
+ );
+ foreach ($data as $entry) {
+ $this->connection->executeUpdate(
+ 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' .
+ '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)',
+ $entry
+ );
+ }
+
+ $value = $config->getUserValueForUsers('appFetch2', 'keyFetch1',
+ array('userFetch1', 'userFetch2', 'userFetch3', 'userFetch5'));
+ $this->assertEquals(array(
+ 'userFetch1' => 'value1',
+ 'userFetch2' => 'value2',
+ 'userFetch3' => 3,
+ 'userFetch5' => 'value5'
+ ), $value);
+
+ $value = $config->getUserValueForUsers('appFetch2', 'keyFetch1',
+ array('userFetch1', 'userFetch4', 'userFetch9'));
+ $this->assertEquals(array(
+ 'userFetch1' => 'value1',
+ 'userFetch4' => 'value4'
+ ), $value, 'userFetch9 is an non-existent user and should not be shown.');
+
+ // cleanup
+ $this->connection->executeUpdate('DELETE FROM `*PREFIX*preferences`');
+ }
+
+ public function testDeleteAllUserValues() {
+ $config = $this->getConfig();
+
+ // preparation - add something to the database
+ $data = array(
+ array('userFetch3', 'appFetch1', 'keyFetch1', 'value1'),
+ array('userFetch3', 'appFetch1', 'keyFetch2', 'value2'),
+ array('userFetch3', 'appFetch2', 'keyFetch3', 'value3'),
+ array('userFetch3', 'appFetch1', 'keyFetch4', 'value4'),
+ array('userFetch3', 'appFetch4', 'keyFetch1', 'value5'),
+ array('userFetch3', 'appFetch5', 'keyFetch1', 'value6'),
+ array('userFetch4', 'appFetch2', 'keyFetch1', 'value7')
+ );
+ foreach ($data as $entry) {
+ $this->connection->executeUpdate(
+ 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' .
+ '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)',
+ $entry
+ );
+ }
+
+ $config->deleteAllUserValues('userFetch3');
+
+ $result = $this->connection->executeQuery(
+ 'SELECT COUNT(*) AS `count` FROM `*PREFIX*preferences`'
+ )->fetch();
+ $actualCount = $result['count'];
+
+ $this->assertEquals(1, $actualCount, 'After removing `userFetch3` there should be exactly 1 entry left.');
+
+ // cleanup
+ $this->connection->executeUpdate('DELETE FROM `*PREFIX*preferences`');
+ }
+
+ public function testDeleteAppFromAllUsers() {
+ $config = $this->getConfig();
+
+ // preparation - add something to the database
+ $data = array(
+ array('userFetch5', 'appFetch1', 'keyFetch1', 'value1'),
+ array('userFetch5', 'appFetch1', 'keyFetch2', 'value2'),
+ array('userFetch5', 'appFetch2', 'keyFetch3', 'value3'),
+ array('userFetch5', 'appFetch1', 'keyFetch4', 'value4'),
+ array('userFetch5', 'appFetch4', 'keyFetch1', 'value5'),
+ array('userFetch5', 'appFetch5', 'keyFetch1', 'value6'),
+ array('userFetch6', 'appFetch2', 'keyFetch1', 'value7')
+ );
+ foreach ($data as $entry) {
+ $this->connection->executeUpdate(
+ 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' .
+ '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)',
+ $entry
+ );
+ }
+
+ $config->deleteAppFromAllUsers('appFetch1');
+
+ $result = $this->connection->executeQuery(
+ 'SELECT COUNT(*) AS `count` FROM `*PREFIX*preferences`'
+ )->fetch();
+ $actualCount = $result['count'];
+
+ $this->assertEquals(4, $actualCount, 'After removing `appFetch1` there should be exactly 4 entries left.');
+
+ $config->deleteAppFromAllUsers('appFetch2');
+
+ $result = $this->connection->executeQuery(
+ 'SELECT COUNT(*) AS `count` FROM `*PREFIX*preferences`'
+ )->fetch();
+ $actualCount = $result['count'];
+
+ $this->assertEquals(2, $actualCount, 'After removing `appFetch2` there should be exactly 2 entries left.');
+
+ // cleanup
+ $this->connection->executeUpdate('DELETE FROM `*PREFIX*preferences`');
+ }
+
+ public function testGetUsersForUserValue() {
+ // mock the check for the database to run the correct SQL statements for each database type
+ $systemConfig = $this->getMock('\OC\SystemConfig');
+ $systemConfig->expects($this->once())
+ ->method('getValue')
+ ->with($this->equalTo('dbtype'),
+ $this->equalTo('sqlite'))
+ ->will($this->returnValue(\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite')));
+ $config = $this->getConfig($systemConfig);
+
+ // preparation - add something to the database
+ $data = array(
+ array('user1', 'appFetch9', 'keyFetch9', 'value9'),
+ array('user2', 'appFetch9', 'keyFetch9', 'value9'),
+ array('user3', 'appFetch9', 'keyFetch9', 'value8'),
+ array('user4', 'appFetch9', 'keyFetch8', 'value9'),
+ array('user5', 'appFetch8', 'keyFetch9', 'value9'),
+ array('user6', 'appFetch9', 'keyFetch9', 'value9'),
+ );
+ foreach ($data as $entry) {
+ $this->connection->executeUpdate(
+ 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' .
+ '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)',
+ $entry
+ );
+ }
+
+ $value = $config->getUsersForUserValue('appFetch9', 'keyFetch9', 'value9');
+ $this->assertEquals(array('user1', 'user2', 'user6'), $value);
+
+ // cleanup
+ $this->connection->executeUpdate('DELETE FROM `*PREFIX*preferences`');
+ }
+
+}
diff --git a/tests/lib/api.php b/tests/lib/api.php
index 0f7d08543ea..3b925a63960 100644
--- a/tests/lib/api.php
+++ b/tests/lib/api.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_API extends PHPUnit_Framework_TestCase {
+class Test_API extends \Test\TestCase {
// Helps build a response variable
@@ -17,7 +17,7 @@ class Test_API extends PHPUnit_Framework_TestCase {
return array(
'shipped' => $shipped,
'response' => new OC_OCS_Result($data, $code, $message),
- 'app' => uniqid('testapp_', true),
+ 'app' => $this->getUniqueID('testapp_'),
);
}
diff --git a/tests/lib/app.php b/tests/lib/app.php
index 5bce3b8c3e6..23c1a340e03 100644
--- a/tests/lib/app.php
+++ b/tests/lib/app.php
@@ -7,7 +7,7 @@
* See the COPYING-README file.
*/
-class Test_App extends PHPUnit_Framework_TestCase {
+class Test_App extends \Test\TestCase {
private $oldAppConfigService;
@@ -455,6 +455,9 @@ class Test_App extends PHPUnit_Framework_TestCase {
\OC::$server->registerService('AppConfig', function ($c) use ($oldService){
return $oldService;
});
+
+ // Remove the cache of the mocked apps list with a forceRefresh
+ \OC_App::getEnabledApps(true);
}
}
diff --git a/tests/lib/app/dependencyanalyzer.php b/tests/lib/app/dependencyanalyzer.php
new file mode 100644
index 00000000000..a79995b78b3
--- /dev/null
+++ b/tests/lib/app/dependencyanalyzer.php
@@ -0,0 +1,249 @@
+<?php
+
+/**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\App;
+
+use OC;
+use OC\App\Platform;
+use OCP\IL10N;
+
+class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
+
+ /** @var Platform */
+ private $platformMock;
+
+ /** @var IL10N */
+ private $l10nMock;
+
+ /** @var \OC\App\DependencyAnalyzer */
+ private $analyser;
+
+ public function setUp() {
+ $this->platformMock = $this->getMockBuilder('\OC\App\Platform')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->platformMock->expects($this->any())
+ ->method('getPhpVersion')
+ ->will( $this->returnValue('5.4.3'));
+ $this->platformMock->expects($this->any())
+ ->method('getDatabase')
+ ->will( $this->returnValue('mysql'));
+ $this->platformMock->expects($this->any())
+ ->method('getOS')
+ ->will( $this->returnValue('Linux'));
+ $this->platformMock->expects($this->any())
+ ->method('isCommandKnown')
+ ->will( $this->returnCallback(function($command) {
+ return ($command === 'grep');
+ }));
+ $this->platformMock->expects($this->any())
+ ->method('getLibraryVersion')
+ ->will( $this->returnCallback(function($lib) {
+ if ($lib === 'curl') {
+ return "2.3.4";
+ }
+ return null;
+ }));
+ $this->platformMock->expects($this->any())
+ ->method('getOcVersion')
+ ->will( $this->returnValue('8.0.1'));
+
+ $this->l10nMock = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->l10nMock->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($text, $parameters = array()) {
+ return vsprintf($text, $parameters);
+ }));
+
+ $this->analyser = new \OC\App\DependencyAnalyzer($this->platformMock, $this->l10nMock);
+ }
+
+ /**
+ * @dataProvider providesPhpVersion
+ */
+ public function testPhpVersion($expectedMissing, $minVersion, $maxVersion) {
+ $app = array(
+ 'dependencies' => array(
+ 'php' => array()
+ )
+ );
+ if (!is_null($minVersion)) {
+ $app['dependencies']['php']['@attributes']['min-version'] = $minVersion;
+ }
+ if (!is_null($maxVersion)) {
+ $app['dependencies']['php']['@attributes']['max-version'] = $maxVersion;
+ }
+ $missing = $this->analyser->analyze($app);
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ /**
+ * @dataProvider providesDatabases
+ */
+ public function testDatabases($expectedMissing, $databases) {
+ $app = array(
+ 'dependencies' => array(
+ )
+ );
+ if (!is_null($databases)) {
+ $app['dependencies']['database'] = $databases;
+ }
+ $missing = $this->analyser->analyze($app);
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ /**
+ * @dataProvider providesCommands
+ */
+ public function testCommand($expectedMissing, $commands) {
+ $app = array(
+ 'dependencies' => array(
+ )
+ );
+ if (!is_null($commands)) {
+ $app['dependencies']['command'] = $commands;
+ }
+ $missing = $this->analyser->analyze($app);
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ /**
+ * @dataProvider providesLibs
+ * @param $expectedMissing
+ * @param $libs
+ */
+ function testLibs($expectedMissing, $libs) {
+ $app = array(
+ 'dependencies' => array(
+ )
+ );
+ if (!is_null($libs)) {
+ $app['dependencies']['lib'] = $libs;
+ }
+
+ $missing = $this->analyser->analyze($app);
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ /**
+ * @dataProvider providesOS
+ * @param $expectedMissing
+ * @param $oss
+ */
+ function testOS($expectedMissing, $oss) {
+ $app = array(
+ 'dependencies' => array()
+ );
+ if (!is_null($oss)) {
+ $app['dependencies']['os'] = $oss;
+ }
+
+ $missing = $this->analyser->analyze($app);
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ /**
+ * @dataProvider providesOC
+ * @param $expectedMissing
+ * @param $oc
+ */
+ function testOC($expectedMissing, $oc) {
+ $app = array(
+ 'dependencies' => array()
+ );
+ if (!is_null($oc)) {
+ $app['dependencies']['owncloud'] = $oc;
+ }
+
+ $missing = $this->analyser->analyze($app);
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ function providesOC() {
+ return array(
+ // no version -> no missing dependency
+ array(array(), null),
+ array(array('ownCloud 9 or higher is required.'), array('@attributes' => array('min-version' => '9'))),
+ array(array('ownCloud with a version lower than 5.1.2 is required.'), array('@attributes' => array('max-version' => '5.1.2'))),
+ );
+ }
+
+ function providesOS() {
+ return array(
+ array(array(), null),
+ array(array(), array()),
+ array(array('Following platforms are supported: ANDROID'), 'ANDROID'),
+ array(array('Following platforms are supported: WINNT'), array('WINNT'))
+ );
+ }
+
+ function providesLibs() {
+ return array(
+ // we expect curl to exist
+ array(array(), 'curl'),
+ // we expect abcde to exist
+ array(array('The library abcde is not available.'), array('abcde')),
+ // curl in version 100.0 does not exist
+ array(array('Library curl with a version higher than 100.0 is required - available version 2.3.4.'),
+ array(array('@attributes' => array('min-version' => '100.0'), '@value' => 'curl'))),
+ // curl in version 100.0 does not exist
+ array(array('Library curl with a version lower than 1.0.0 is required - available version 2.3.4.'),
+ array(array('@attributes' => array('max-version' => '1.0.0'), '@value' => 'curl')))
+ );
+ }
+
+ function providesCommands() {
+ return array(
+ array(array(), null),
+ // grep is known on linux
+ array(array(), array(array('@attributes' => array('os' => 'Linux'), '@value' => 'grep'))),
+ // grepp is not known on linux
+ array(array('The command line tool grepp could not be found'), array(array('@attributes' => array('os' => 'Linux'), '@value' => 'grepp'))),
+ // we don't care about tools on Windows - we are on Linux
+ array(array(), array(array('@attributes' => array('os' => 'Windows'), '@value' => 'grepp'))),
+ // grep is known on all systems
+ array(array(), 'grep'),
+ );
+ }
+
+ function providesDatabases() {
+ return array(
+ // non BC - in case on databases are defined -> all are supported
+ array(array(), null),
+ array(array(), array()),
+ array(array('Following databases are supported: mongodb'), 'mongodb'),
+ array(array('Following databases are supported: sqlite, postgres'), array('sqlite', array('@value' => 'postgres'))),
+ );
+ }
+
+ function providesPhpVersion() {
+ return array(
+ array(array(), null, null),
+ array(array(), '5.4', null),
+ array(array(), null, '5.5'),
+ array(array(), '5.4', '5.5'),
+ array(array('PHP 5.4.4 or higher is required.'), '5.4.4', null),
+ array(array('PHP with a version lower than 5.4.2 is required.'), null, '5.4.2'),
+ );
+ }
+}
diff --git a/tests/lib/app/infoparser.php b/tests/lib/app/infoparser.php
new file mode 100644
index 00000000000..762a3584cd2
--- /dev/null
+++ b/tests/lib/app/infoparser.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\App;
+
+use OC;
+
+class InfoParser extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @var \OC\App\InfoParser
+ */
+ private $parser;
+
+ public function setUp() {
+ $config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $certificateManager = $this->getMock('\OCP\ICertificateManager');
+ $httpHelper = $this->getMockBuilder('\OC\HTTPHelper')
+ ->setConstructorArgs(array($config, $certificateManager))
+ ->setMethods(array('getHeaders'))
+ ->getMock();
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //linkToDocs
+ $urlGenerator->expects($this->any())
+ ->method('linkToDocs')
+ ->will($this->returnCallback(function ($url) {
+ return "https://docs.example.com/server/go.php?to=$url";
+ }));
+
+ $this->parser = new \OC\App\InfoParser($httpHelper, $urlGenerator);
+ }
+
+ /**
+ * @dataProvider providesInfoXml
+ */
+ public function testParsingValidXml($expectedJson, $xmlFile) {
+ $expectedData = null;
+ if (!is_null($expectedJson)) {
+ $expectedData = json_decode(file_get_contents(OC::$SERVERROOT . "/tests/data/app/$expectedJson"), true);
+ }
+ $data = $this->parser->parse(OC::$SERVERROOT. "/tests/data/app/$xmlFile");
+
+ $this->assertEquals($expectedData, $data);
+ }
+
+ function providesInfoXml() {
+ return array(
+ array('expected-info.json', 'valid-info.xml'),
+ array(null, 'invalid-info.xml'),
+ );
+ }
+}
diff --git a/tests/lib/app/manager.php b/tests/lib/app/manager.php
new file mode 100644
index 00000000000..4c0555b501f
--- /dev/null
+++ b/tests/lib/app/manager.php
@@ -0,0 +1,195 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\App;
+
+use OC\Group\Group;
+use OC\User\User;
+
+class Manager extends \PHPUnit_Framework_TestCase {
+ /**
+ * @return \OCP\IAppConfig | \PHPUnit_Framework_MockObject_MockObject
+ */
+ protected function getAppConfig() {
+ $appConfig = array();
+ $config = $this->getMockBuilder('\OCP\IAppConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $config->expects($this->any())
+ ->method('getValue')
+ ->will($this->returnCallback(function ($app, $key, $default) use (&$appConfig) {
+ return (isset($appConfig[$app]) and isset($appConfig[$app][$key])) ? $appConfig[$app][$key] : $default;
+ }));
+ $config->expects($this->any())
+ ->method('setValue')
+ ->will($this->returnCallback(function ($app, $key, $value) use (&$appConfig) {
+ if (!isset($appConfig[$app])) {
+ $appConfig[$app] = array();
+ }
+ $appConfig[$app][$key] = $value;
+ }));
+ $config->expects($this->any())
+ ->method('getValues')
+ ->will($this->returnCallback(function ($app, $key) use (&$appConfig) {
+ if ($app) {
+ return $appConfig[$app];
+ } else {
+ $values = array();
+ foreach ($appConfig as $app => $appData) {
+ if (isset($appData[$key])) {
+ $values[$app] = $appData[$key];
+ }
+ }
+ return $values;
+ }
+ }));
+
+ return $config;
+ }
+
+ public function testEnableApp() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $manager->enableApp('test');
+ $this->assertEquals('yes', $appConfig->getValue('test', 'enabled', 'no'));
+ }
+
+ public function testDisableApp() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $manager->disableApp('test');
+ $this->assertEquals('no', $appConfig->getValue('test', 'enabled', 'no'));
+ }
+
+ public function testEnableAppForGroups() {
+ $groups = array(
+ new Group('group1', array(), null),
+ new Group('group2', array(), null)
+ );
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $manager->enableAppForGroups('test', $groups);
+ $this->assertEquals('["group1","group2"]', $appConfig->getValue('test', 'enabled', 'no'));
+ }
+
+ public function testIsInstalledEnabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'yes');
+ $this->assertTrue($manager->isInstalled('test'));
+ }
+
+ public function testIsInstalledDisabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'no');
+ $this->assertFalse($manager->isInstalled('test'));
+ }
+
+ public function testIsInstalledEnabledForGroups() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertTrue($manager->isInstalled('test'));
+ }
+
+ public function testIsEnabledForUserEnabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'yes');
+ $user = new User('user1', null);
+ $this->assertTrue($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserDisabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'no');
+ $user = new User('user1', null);
+ $this->assertFalse($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserEnabledForGroup() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $user = new User('user1', null);
+
+ $groupManager->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->returnValue(array('foo', 'bar')));
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertTrue($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserDisabledForGroup() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $user = new User('user1', null);
+
+ $groupManager->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->returnValue(array('bar')));
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertFalse($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserLoggedOut() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertFalse($manager->IsEnabledForUser('test'));
+ }
+
+ public function testIsEnabledForUserLoggedIn() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $user = new User('user1', null);
+
+ $userSession->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $groupManager->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->returnValue(array('foo', 'bar')));
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertTrue($manager->isEnabledForUser('test'));
+ }
+}
diff --git a/tests/lib/app/platformrepository.php b/tests/lib/app/platformrepository.php
new file mode 100644
index 00000000000..3d8849ce8ab
--- /dev/null
+++ b/tests/lib/app/platformrepository.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\App;
+
+use OC;
+
+class PlatformRepository extends \Test\TestCase {
+
+ /**
+ * @dataProvider providesVersions
+ * @param $expected
+ * @param $input
+ */
+ public function testVersion($input, $expected) {
+ $pr = new OC\App\PlatformRepository();
+ $normalizedVersion = $pr->normalizeVersion($input);
+ $this->assertEquals($expected, $normalizedVersion);
+ }
+
+ public function providesVersions() {
+ return array(
+ 'none' => array('1.0.0', '1.0.0.0'),
+ 'none/2' => array('1.2.3.4', '1.2.3.4'),
+ 'parses state' => array('1.0.0RC1dev', '1.0.0.0-RC1-dev'),
+ 'CI parsing' => array('1.0.0-rC15-dev', '1.0.0.0-RC15-dev'),
+ 'delimiters' => array('1.0.0.RC.15-dev', '1.0.0.0-RC15-dev'),
+ 'RC uppercase' => array('1.0.0-rc1', '1.0.0.0-RC1'),
+ 'patch replace' => array('1.0.0.pl3-dev', '1.0.0.0-patch3-dev'),
+ 'forces w.x.y.z' => array('1.0-dev', '1.0.0.0-dev'),
+ 'forces w.x.y.z/2' => array('0', '0.0.0.0'),
+ 'parses long' => array('10.4.13-beta', '10.4.13.0-beta'),
+ 'parses long/2' => array('10.4.13beta2', '10.4.13.0-beta2'),
+ 'parses long/semver' => array('10.4.13beta.2', '10.4.13.0-beta2'),
+ 'expand shorthand' => array('10.4.13-b', '10.4.13.0-beta'),
+ 'expand shorthand2' => array('10.4.13-b5', '10.4.13.0-beta5'),
+ 'strips leading v' => array('v1.0.0', '1.0.0.0'),
+ 'strips v/datetime' => array('v20100102', '20100102'),
+ 'parses dates y-m' => array('2010.01', '2010-01'),
+ 'parses dates w/ .' => array('2010.01.02', '2010-01-02'),
+ 'parses dates w/ -' => array('2010-01-02', '2010-01-02'),
+ 'parses numbers' => array('2010-01-02.5', '2010-01-02-5'),
+ 'parses dates y.m.Y' => array('2010.1.555', '2010.1.555.0'),
+ 'parses datetime' => array('20100102-203040', '20100102-203040'),
+ 'parses dt+number' => array('20100102203040-10', '20100102203040-10'),
+ 'parses dt+patch' => array('20100102-203040-p1', '20100102-203040-patch1'),
+ 'parses master' => array('dev-master', '9999999-dev'),
+ 'parses trunk' => array('dev-trunk', '9999999-dev'),
+// 'parses branches' => array('1.x-dev', '1.9999999.9999999.9999999-dev'),
+ 'parses arbitrary' => array('dev-feature-foo', 'dev-feature-foo'),
+ 'parses arbitrary2' => array('DEV-FOOBAR', 'dev-FOOBAR'),
+ 'parses arbitrary3' => array('dev-feature/foo', 'dev-feature/foo'),
+ 'ignores aliases' => array('dev-master as 1.0.0', '9999999-dev'),
+// 'semver metadata' => array('dev-master+foo.bar', '9999999-dev'),
+// 'semver metadata/2' => array('1.0.0-beta.5+foo', '1.0.0.0-beta5'),
+// 'semver metadata/3' => array('1.0.0+foo', '1.0.0.0'),
+// 'metadata w/ alias' => array('1.0.0+foo as 2.0', '1.0.0.0'),
+ );
+ }}
diff --git a/tests/lib/appconfig.php b/tests/lib/appconfig.php
index 9257ae45b0e..188721ff92d 100644
--- a/tests/lib/appconfig.php
+++ b/tests/lib/appconfig.php
@@ -7,8 +7,10 @@
* See the COPYING-README file.
*/
-class Test_Appconfig extends PHPUnit_Framework_TestCase {
+class Test_Appconfig extends \Test\TestCase {
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*appconfig` VALUES (?, ?, ?)');
$query->execute(array('testapp', 'enabled', 'true'));
@@ -33,6 +35,8 @@ class Test_Appconfig extends PHPUnit_Framework_TestCase {
$query->execute(array('someapp'));
$query->execute(array('123456'));
$query->execute(array('anotherapp'));
+
+ parent::tearDownAfterClass();
}
public function testGetApps() {
diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index 92fa4838341..e60f3439f23 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -24,8 +24,19 @@
namespace OC\AppFramework;
+function rrmdir($directory) {
+ $files = array_diff(scandir($directory), array('.','..'));
+ foreach ($files as $file) {
+ if (is_dir($directory . '/' . $file)) {
+ rrmdir($directory . '/' . $file);
+ } else {
+ unlink($directory . '/' . $file);
+ }
+ }
+ return rmdir($directory);
+}
-class AppTest extends \PHPUnit_Framework_TestCase {
+class AppTest extends \Test\TestCase {
private $container;
private $api;
@@ -36,8 +47,11 @@ class AppTest extends \PHPUnit_Framework_TestCase {
private $output;
private $controllerName;
private $controllerMethod;
+ private $appPath;
protected function setUp() {
+ parent::setUp();
+
$this->container = new \OC\AppFramework\DependencyInjection\DIContainer('test', array());
$this->controller = $this->getMockBuilder(
'OCP\AppFramework\Controller')
@@ -57,11 +71,22 @@ class AppTest extends \PHPUnit_Framework_TestCase {
$this->container[$this->controllerName] = $this->controller;
$this->container['Dispatcher'] = $this->dispatcher;
$this->container['urlParams'] = array();
+
+ $this->appPath = __DIR__ . '/../../../apps/namespacetestapp/appinfo';
+ $infoXmlPath = $this->appPath . '/info.xml';
+ mkdir($this->appPath, 0777, true);
+
+ $xml = '<?xml version="1.0" encoding="UTF-8"?>' .
+ '<info>' .
+ '<id>namespacetestapp</id>' .
+ '<namespace>NameSpaceTestApp</namespace>' .
+ '</info>';
+ file_put_contents($infoXmlPath, $xml);
}
public function testControllerNameAndMethodAreBeingPassed(){
- $return = array(null, array(), null);
+ $return = array(null, array(), array(), null);
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),
@@ -75,6 +100,28 @@ class AppTest extends \PHPUnit_Framework_TestCase {
}
+ public function testBuildAppNamespace() {
+ $ns = App::buildAppNamespace('someapp');
+ $this->assertEquals('OCA\Someapp', $ns);
+ }
+
+
+ public function testBuildAppNamespaceCore() {
+ $ns = App::buildAppNamespace('someapp', 'OC\\');
+ $this->assertEquals('OC\Someapp', $ns);
+ }
+
+
+ public function testBuildAppNamespaceInfoXml() {
+ $ns = App::buildAppNamespace('namespacetestapp', 'OCA\\');
+ $this->assertEquals('OCA\NameSpaceTestApp', $ns);
+ }
+
+
+ protected function tearDown() {
+ rrmdir($this->appPath);
+ }
+
/*
FIXME: this complains about shit headers which are already sent because
of the content length. Would be cool if someone could fix this
diff --git a/tests/lib/appframework/controller/ApiControllerTest.php b/tests/lib/appframework/controller/ApiControllerTest.php
index b772f540ce8..3055fbe0da8 100644
--- a/tests/lib/appframework/controller/ApiControllerTest.php
+++ b/tests/lib/appframework/controller/ApiControllerTest.php
@@ -31,7 +31,7 @@ use OCP\AppFramework\Http\TemplateResponse;
class ChildApiController extends ApiController {};
-class ApiControllerTest extends \PHPUnit_Framework_TestCase {
+class ApiControllerTest extends \Test\TestCase {
public function testCors() {
diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php
index 0de94ff5b70..18d47d00f6b 100644
--- a/tests/lib/appframework/controller/ControllerTest.php
+++ b/tests/lib/appframework/controller/ControllerTest.php
@@ -54,7 +54,7 @@ class ChildController extends Controller {
}
};
-class ControllerTest extends \PHPUnit_Framework_TestCase {
+class ControllerTest extends \Test\TestCase {
/**
* @var Controller
@@ -63,6 +63,8 @@ class ControllerTest extends \PHPUnit_Framework_TestCase {
private $app;
protected function setUp(){
+ parent::setUp();
+
$request = new Request(
array(
'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
@@ -171,7 +173,8 @@ class ControllerTest extends \PHPUnit_Framework_TestCase {
public function testFormatDataResponseJSON() {
$expectedHeaders = array(
'test' => 'something',
- 'Cache-Control' => 'no-cache, must-revalidate'
+ 'Cache-Control' => 'no-cache, must-revalidate',
+ 'Content-Type' => 'application/json; charset=utf-8'
);
$response = $this->controller->customDataResponse(array('hi'));
diff --git a/tests/lib/appframework/db/EntityTest.php b/tests/lib/appframework/db/EntityTest.php
index d98cb549422..161e11d8030 100644
--- a/tests/lib/appframework/db/EntityTest.php
+++ b/tests/lib/appframework/db/EntityTest.php
@@ -49,11 +49,12 @@ class TestEntity extends Entity {
};
-class EntityTest extends \PHPUnit_Framework_TestCase {
+class EntityTest extends \Test\TestCase {
private $entity;
protected function setUp(){
+ parent::setUp();
$this->entity = new TestEntity();
}
diff --git a/tests/lib/appframework/db/mappertest.php b/tests/lib/appframework/db/mappertest.php
index fd1acd0367e..6ad8cd86bff 100644
--- a/tests/lib/appframework/db/mappertest.php
+++ b/tests/lib/appframework/db/mappertest.php
@@ -57,7 +57,7 @@ class MapperTest extends MapperTestUtility {
*/
private $mapper;
- public function setUp(){
+ protected function setUp(){
parent::setUp();
$this->mapper = new ExampleMapper($this->db);
}
diff --git a/tests/lib/appframework/db/mappertestutility.php b/tests/lib/appframework/db/mappertestutility.php
index 0430eef2c21..ad7a67a96b1 100644
--- a/tests/lib/appframework/db/mappertestutility.php
+++ b/tests/lib/appframework/db/mappertestutility.php
@@ -28,9 +28,7 @@ namespace Test\AppFramework\Db;
/**
* Simple utility class for testing mappers
*/
-abstract class MapperTestUtility extends \PHPUnit_Framework_TestCase {
-
-
+abstract class MapperTestUtility extends \Test\TestCase {
protected $db;
private $query;
private $pdoResult;
@@ -45,6 +43,8 @@ abstract class MapperTestUtility extends \PHPUnit_Framework_TestCase {
* db. After this the db can be accessed by using $this->db
*/
protected function setUp(){
+ parent::setUp();
+
$this->db = $this->getMockBuilder(
'\OCP\IDb')
->disableOriginalConstructor()
diff --git a/tests/lib/appframework/dependencyinjection/DIContainerTest.php b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
index acc5c2e66d8..08e72aff984 100644
--- a/tests/lib/appframework/dependencyinjection/DIContainerTest.php
+++ b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
@@ -29,12 +29,13 @@ namespace OC\AppFramework\DependencyInjection;
use \OC\AppFramework\Http\Request;
-class DIContainerTest extends \PHPUnit_Framework_TestCase {
+class DIContainerTest extends \Test\TestCase {
private $container;
private $api;
protected function setUp(){
+ parent::setUp();
$this->container = new DIContainer('name');
$this->api = $this->getMock('OC\AppFramework\Core\API', array(), array('hi'));
}
diff --git a/tests/lib/appframework/http/DataResponseTest.php b/tests/lib/appframework/http/DataResponseTest.php
index 961327c978c..e91d3cefea9 100644
--- a/tests/lib/appframework/http/DataResponseTest.php
+++ b/tests/lib/appframework/http/DataResponseTest.php
@@ -29,7 +29,7 @@ use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http;
-class DataResponseTest extends \PHPUnit_Framework_TestCase {
+class DataResponseTest extends \Test\TestCase {
/**
* @var DataResponse
@@ -37,6 +37,7 @@ class DataResponseTest extends \PHPUnit_Framework_TestCase {
private $response;
protected function setUp() {
+ parent::setUp();
$this->response = new DataResponse();
}
diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php
index f082ddc8b3a..3933e00804b 100644
--- a/tests/lib/appframework/http/DispatcherTest.php
+++ b/tests/lib/appframework/http/DispatcherTest.php
@@ -62,9 +62,7 @@ class TestController extends Controller {
}
-class DispatcherTest extends \PHPUnit_Framework_TestCase {
-
-
+class DispatcherTest extends \Test\TestCase {
private $middlewareDispatcher;
private $dispatcher;
private $controllerMethod;
@@ -75,6 +73,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
private $reflector;
protected function setUp() {
+ parent::setUp();
$this->controllerMethod = 'test';
$app = $this->getMockBuilder(
@@ -228,15 +227,11 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->assertEquals($httpHeaders, $response[0]);
$this->assertEquals($responseHeaders, $response[1]);
- $this->assertEquals($out, $response[2]);
+ $this->assertEquals($out, $response[3]);
}
public function testExceptionCallsAfterException() {
- // TODO fails on PHP 5.3
- if (version_compare(PHP_VERSION, '5.4.0', '<')) {
- $this->markTestSkipped('Fails on PHP 5.3');
- }
$out = 'yo';
$httpHeaders = 'Http';
$responseHeaders = array('hell' => 'yeah');
@@ -247,15 +242,11 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->assertEquals($httpHeaders, $response[0]);
$this->assertEquals($responseHeaders, $response[1]);
- $this->assertEquals($out, $response[2]);
+ $this->assertEquals($out, $response[3]);
}
public function testExceptionThrowsIfCanNotBeHandledByAfterException() {
- // TODO fails on PHP 5.3 and crashed travis (10 minute timeout)
- if (version_compare(PHP_VERSION, '5.4.0', '<')) {
- $this->markTestSkipped('Fails on PHP 5.3 and causes infinite loop - travis fails after 10 minute timeout');
- }
$out = 'yo';
$httpHeaders = 'Http';
$responseHeaders = array('hell' => 'yeah');
@@ -302,7 +293,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('[3,true,4,1]', $response[2]);
+ $this->assertEquals('[3,true,4,1]', $response[3]);
}
@@ -325,7 +316,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('[3,true,4,7]', $response[2]);
+ $this->assertEquals('[3,true,4,7]', $response[3]);
}
@@ -351,7 +342,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,false,4,1]}', $response[3]);
}
@@ -376,7 +367,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'execDataResponse');
- $this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,false,4,1]}', $response[3]);
}
@@ -402,7 +393,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,false,4,1]}', $response[3]);
}
@@ -430,7 +421,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('{"text":[3,true,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,true,4,1]}', $response[3]);
}
diff --git a/tests/lib/appframework/http/DownloadResponseTest.php b/tests/lib/appframework/http/DownloadResponseTest.php
index ab381e5c298..5e5db2c55ec 100644
--- a/tests/lib/appframework/http/DownloadResponseTest.php
+++ b/tests/lib/appframework/http/DownloadResponseTest.php
@@ -30,7 +30,7 @@ class ChildDownloadResponse extends DownloadResponse {
};
-class DownloadResponseTest extends \PHPUnit_Framework_TestCase {
+class DownloadResponseTest extends \Test\TestCase {
/**
* @var ChildDownloadResponse
@@ -38,6 +38,7 @@ class DownloadResponseTest extends \PHPUnit_Framework_TestCase {
protected $response;
protected function setUp(){
+ parent::setUp();
$this->response = new ChildDownloadResponse('file', 'content');
}
diff --git a/tests/lib/appframework/http/HttpTest.php b/tests/lib/appframework/http/HttpTest.php
index a7a189c98e5..e9be3e73904 100644
--- a/tests/lib/appframework/http/HttpTest.php
+++ b/tests/lib/appframework/http/HttpTest.php
@@ -27,7 +27,7 @@ namespace OC\AppFramework\Http;
use OC\AppFramework\Http;
-class HttpTest extends \PHPUnit_Framework_TestCase {
+class HttpTest extends \Test\TestCase {
private $server;
@@ -37,6 +37,8 @@ class HttpTest extends \PHPUnit_Framework_TestCase {
private $http;
protected function setUp(){
+ parent::setUp();
+
$this->server = array();
$this->http = new Http($this->server);
}
diff --git a/tests/lib/appframework/http/JSONResponseTest.php b/tests/lib/appframework/http/JSONResponseTest.php
index 06cd3410a69..cdd8d269b41 100644
--- a/tests/lib/appframework/http/JSONResponseTest.php
+++ b/tests/lib/appframework/http/JSONResponseTest.php
@@ -30,7 +30,7 @@ namespace OC\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http;
-class JSONResponseTest extends \PHPUnit_Framework_TestCase {
+class JSONResponseTest extends \Test\TestCase {
/**
* @var JSONResponse
@@ -38,6 +38,7 @@ class JSONResponseTest extends \PHPUnit_Framework_TestCase {
private $json;
protected function setUp() {
+ parent::setUp();
$this->json = new JSONResponse();
}
diff --git a/tests/lib/appframework/http/RedirectResponseTest.php b/tests/lib/appframework/http/RedirectResponseTest.php
index e5d452f7f91..17db0c0be6c 100644
--- a/tests/lib/appframework/http/RedirectResponseTest.php
+++ b/tests/lib/appframework/http/RedirectResponseTest.php
@@ -27,7 +27,7 @@ namespace OCP\AppFramework\Http;
use OCP\AppFramework\Http;
-class RedirectResponseTest extends \PHPUnit_Framework_TestCase {
+class RedirectResponseTest extends \Test\TestCase {
/**
* @var RedirectResponse
@@ -35,6 +35,7 @@ class RedirectResponseTest extends \PHPUnit_Framework_TestCase {
protected $response;
protected function setUp(){
+ parent::setUp();
$this->response = new RedirectResponse('/url');
}
diff --git a/tests/lib/appframework/http/RequestTest.php b/tests/lib/appframework/http/RequestTest.php
index 58828d17bb2..caa22c84415 100644
--- a/tests/lib/appframework/http/RequestTest.php
+++ b/tests/lib/appframework/http/RequestTest.php
@@ -10,9 +10,11 @@ namespace OC\AppFramework\Http;
global $data;
-class RequestTest extends \PHPUnit_Framework_TestCase {
+class RequestTest extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
require_once __DIR__ . '/requeststream.php';
if (in_array('fakeinput', stream_get_wrappers())) {
stream_wrapper_unregister('fakeinput');
@@ -21,8 +23,9 @@ class RequestTest extends \PHPUnit_Framework_TestCase {
$this->stream = 'fakeinput://data';
}
- public function tearDown() {
+ protected function tearDown() {
stream_wrapper_unregister('fakeinput');
+ parent::tearDown();
}
public function testRequestAccessors() {
diff --git a/tests/lib/appframework/http/ResponseTest.php b/tests/lib/appframework/http/ResponseTest.php
index b1dddd9ebc7..b4352348bae 100644
--- a/tests/lib/appframework/http/ResponseTest.php
+++ b/tests/lib/appframework/http/ResponseTest.php
@@ -29,7 +29,7 @@ use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http;
-class ResponseTest extends \PHPUnit_Framework_TestCase {
+class ResponseTest extends \Test\TestCase {
/**
* @var \OCP\AppFramework\Http\Response
@@ -37,6 +37,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase {
private $childResponse;
protected function setUp(){
+ parent::setUp();
$this->childResponse = new Response();
}
@@ -75,6 +76,92 @@ class ResponseTest extends \PHPUnit_Framework_TestCase {
}
+ public function testAddCookie() {
+ $this->childResponse->addCookie('foo', 'bar');
+ $this->childResponse->addCookie('bar', 'foo', new \DateTime('1970-01-01'));
+
+ $expectedResponse = array(
+ 'foo' => array(
+ 'value' => 'bar',
+ 'expireDate' => null,
+ ),
+ 'bar' => array(
+ 'value' => 'foo',
+ 'expireDate' => new \DateTime('1970-01-01')
+ )
+ );
+ $this->assertEquals($expectedResponse, $this->childResponse->getCookies());
+ }
+
+
+ function testSetCookies() {
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'bar',
+ 'expireDate' => null,
+ ),
+ 'bar' => array(
+ 'value' => 'foo',
+ 'expireDate' => new \DateTime('1970-01-01')
+ )
+ );
+
+ $this->childResponse->setCookies($expected);
+ $cookies = $this->childResponse->getCookies();
+
+ $this->assertEquals($expected, $cookies);
+ }
+
+
+ function testInvalidateCookie() {
+ $this->childResponse->addCookie('foo', 'bar');
+ $this->childResponse->invalidateCookie('foo');
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'expired',
+ 'expireDate' => new \DateTime('1971-01-01')
+ )
+ );
+
+ $cookies = $this->childResponse->getCookies();
+
+ $this->assertEquals($expected, $cookies);
+ }
+
+
+ function testInvalidateCookies() {
+ $this->childResponse->addCookie('foo', 'bar');
+ $this->childResponse->addCookie('bar', 'foo');
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'bar',
+ 'expireDate' => null
+ ),
+ 'bar' => array(
+ 'value' => 'foo',
+ 'expireDate' => null
+ )
+ );
+ $cookies = $this->childResponse->getCookies();
+ $this->assertEquals($expected, $cookies);
+
+ $this->childResponse->invalidateCookies(array('foo', 'bar'));
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'expired',
+ 'expireDate' => new \DateTime('1971-01-01')
+ ),
+ 'bar' => array(
+ 'value' => 'expired',
+ 'expireDate' => new \DateTime('1971-01-01')
+ )
+ );
+
+ $cookies = $this->childResponse->getCookies();
+ $this->assertEquals($expected, $cookies);
+ }
+
+
public function testRenderReturnNullByDefault(){
$this->assertEquals(null, $this->childResponse->render());
}
diff --git a/tests/lib/appframework/http/TemplateResponseTest.php b/tests/lib/appframework/http/TemplateResponseTest.php
index afdcf322b85..2ec57f8979a 100644
--- a/tests/lib/appframework/http/TemplateResponseTest.php
+++ b/tests/lib/appframework/http/TemplateResponseTest.php
@@ -28,7 +28,7 @@ use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http;
-class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
+class TemplateResponseTest extends \Test\TestCase {
/**
* @var \OCP\AppFramework\Http\TemplateResponse
@@ -41,6 +41,8 @@ class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
private $api;
protected function setUp() {
+ parent::setUp();
+
$this->api = $this->getMock('OC\AppFramework\Core\API',
array('getAppName'), array('test'));
$this->api->expects($this->any())
diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
index b1e221aab99..be8765afd39 100644
--- a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
+++ b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
@@ -100,7 +100,7 @@ class TestMiddleware extends Middleware {
}
-class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
+class MiddlewareDispatcherTest extends \Test\TestCase {
public $exception;
public $response;
@@ -113,8 +113,9 @@ class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
*/
private $dispatcher;
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
$this->dispatcher = new MiddlewareDispatcher();
$this->controller = $this->getControllerMock();
$this->method = 'method';
diff --git a/tests/lib/appframework/middleware/MiddlewareTest.php b/tests/lib/appframework/middleware/MiddlewareTest.php
index 9d952f61573..b41ec33eb15 100644
--- a/tests/lib/appframework/middleware/MiddlewareTest.php
+++ b/tests/lib/appframework/middleware/MiddlewareTest.php
@@ -31,7 +31,7 @@ use OCP\AppFramework\Middleware;
class ChildMiddleware extends Middleware {};
-class MiddlewareTest extends \PHPUnit_Framework_TestCase {
+class MiddlewareTest extends \Test\TestCase {
/**
* @var Middleware
@@ -42,6 +42,8 @@ class MiddlewareTest extends \PHPUnit_Framework_TestCase {
private $api;
protected function setUp(){
+ parent::setUp();
+
$this->middleware = new ChildMiddleware();
$this->api = $this->getMockBuilder(
diff --git a/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php b/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php
index 79cd3b278af..b4bbcce5ad7 100644
--- a/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php
+++ b/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php
@@ -18,11 +18,12 @@ use OC\AppFramework\Utility\ControllerMethodReflector;
use OCP\AppFramework\Http\Response;
-class CORSMiddlewareTest extends \PHPUnit_Framework_TestCase {
+class CORSMiddlewareTest extends \Test\TestCase {
private $reflector;
protected function setUp() {
+ parent::setUp();
$this->reflector = new ControllerMethodReflector();
}
diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
index 74fc7907fb5..a8925403a95 100644
--- a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
+++ b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
@@ -31,7 +31,7 @@ use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\JSONResponse;
-class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
+class SecurityMiddlewareTest extends \Test\TestCase {
private $middleware;
private $controller;
@@ -43,7 +43,9 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
private $navigationManager;
private $urlGenerator;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->controller = $this->getMockBuilder('OCP\AppFramework\Controller')
->disableOriginalConstructor()
->getMock();
@@ -77,7 +79,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
$this->navigationManager,
$this->urlGenerator,
$this->logger,
- 'test',
+ 'files',
$isLoggedIn,
$isAdminUser
);
@@ -91,7 +93,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
public function testSetNavigationEntry(){
$this->navigationManager->expects($this->once())
->method('setActiveEntry')
- ->with($this->equalTo('test'));
+ ->with($this->equalTo('files'));
$this->reader->reflect(__CLASS__, __FUNCTION__);
$this->middleware->beforeController(__CLASS__, __FUNCTION__);
diff --git a/tests/lib/appframework/middleware/sessionmiddlewaretest.php b/tests/lib/appframework/middleware/sessionmiddlewaretest.php
index 13e558bf21a..344b555ec3c 100644
--- a/tests/lib/appframework/middleware/sessionmiddlewaretest.php
+++ b/tests/lib/appframework/middleware/sessionmiddlewaretest.php
@@ -18,7 +18,7 @@ use OC\AppFramework\Utility\ControllerMethodReflector;
use OCP\AppFramework\Http\Response;
-class SessionMiddlewareTest extends \PHPUnit_Framework_TestCase {
+class SessionMiddlewareTest extends \Test\TestCase {
/**
* @var ControllerMethodReflector
@@ -31,6 +31,8 @@ class SessionMiddlewareTest extends \PHPUnit_Framework_TestCase {
private $request;
protected function setUp() {
+ parent::setUp();
+
$this->request = new Request();
$this->reflector = new ControllerMethodReflector();
}
diff --git a/tests/lib/appframework/routing/RoutingTest.php b/tests/lib/appframework/routing/RoutingTest.php
index a1d9a51a3c8..4ee3ed58807 100644
--- a/tests/lib/appframework/routing/RoutingTest.php
+++ b/tests/lib/appframework/routing/RoutingTest.php
@@ -6,7 +6,7 @@ use OC\AppFramework\DependencyInjection\DIContainer;
use OC\AppFramework\routing\RouteConfig;
-class RoutingTest extends \PHPUnit_Framework_TestCase
+class RoutingTest extends \Test\TestCase
{
public function testSimpleRoute()
@@ -54,6 +54,15 @@ class RoutingTest extends \PHPUnit_Framework_TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array('param' => 'foobar'));
}
+ public function testSimpleRouteWithPostfix()
+ {
+ $routes = array('routes' => array(
+ array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', 'postfix' => '_something')
+ ));
+
+ $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array(), '_something');
+ }
+
/**
* @expectedException \UnexpectedValueException
@@ -104,8 +113,12 @@ class RoutingTest extends \PHPUnit_Framework_TestCase
* @param string $controllerName
* @param string $actionName
*/
- private function assertSimpleRoute($routes, $name, $verb, $url, $controllerName, $actionName, array $requirements=array(), array $defaults=array())
+ private function assertSimpleRoute($routes, $name, $verb, $url, $controllerName, $actionName, array $requirements=array(), array $defaults=array(), $postfix='')
{
+ if ($postfix) {
+ $name .= $postfix;
+ }
+
// route mocks
$route = $this->mockRoute($verb, $controllerName, $actionName, $requirements, $defaults);
diff --git a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
index 8939a203edb..cd6bd57da4c 100644
--- a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
+++ b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
@@ -25,7 +25,7 @@
namespace OC\AppFramework\Utility;
-class ControllerMethodReflectorTest extends \PHPUnit_Framework_TestCase {
+class ControllerMethodReflectorTest extends \Test\TestCase {
/**
diff --git a/tests/lib/appframework/utility/SimpleContainerTest.php b/tests/lib/appframework/utility/SimpleContainerTest.php
new file mode 100644
index 00000000000..c5c522d911f
--- /dev/null
+++ b/tests/lib/appframework/utility/SimpleContainerTest.php
@@ -0,0 +1,167 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace Test\AppFramework\Utility;
+
+use OC\AppFramework\Utility\SimpleContainer;
+
+
+interface TestInterface {}
+
+class ClassEmptyConstructor implements IInterfaceConstructor {}
+
+class ClassSimpleConstructor implements IInterfaceConstructor {
+ public $test;
+ public function __construct($test) {
+ $this->test = $test;
+ }
+}
+
+class ClassComplexConstructor {
+ public $class;
+ public $test;
+ public function __construct(ClassSimpleConstructor $class, $test) {
+ $this->class = $class;
+ $this->test = $test;
+ }
+}
+
+interface IInterfaceConstructor {}
+class ClassInterfaceConstructor {
+ public $class;
+ public $test;
+ public function __construct(IInterfaceConstructor $class, $test) {
+ $this->class = $class;
+ $this->test = $test;
+ }
+}
+
+
+class SimpleContainerTest extends \Test\TestCase {
+
+
+ private $container;
+
+ public function setUp() {
+ $this->container = new SimpleContainer();
+ }
+
+
+ public function testRegister() {
+ $this->container->registerParameter('test', 'abc');
+ $this->assertEquals('abc', $this->container->query('test'));
+ }
+
+
+ /**
+ * @expectedException \OCP\AppFramework\QueryException
+ */
+ public function testNothingRegistered() {
+ $this->container->query('something really hard');
+ }
+
+
+ /**
+ * @expectedException \OCP\AppFramework\QueryException
+ */
+ public function testNotAClass() {
+ $this->container->query('Test\AppFramework\Utility\TestInterface');
+ }
+
+
+ public function testNoConstructorClass() {
+ $object = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ $this->assertTrue($object instanceof ClassEmptyConstructor);
+ }
+
+
+ public function testInstancesOnlyOnce() {
+ $object = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ $object2 = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ $this->assertSame($object, $object2);
+ }
+
+ public function testConstructorSimple() {
+ $this->container->registerParameter('test', 'abc');
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassSimpleConstructor'
+ );
+ $this->assertTrue($object instanceof ClassSimpleConstructor);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ public function testConstructorComplex() {
+ $this->container->registerParameter('test', 'abc');
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassComplexConstructor'
+ );
+ $this->assertTrue($object instanceof ClassComplexConstructor);
+ $this->assertEquals('abc', $object->class->test);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ public function testConstructorComplexInterface() {
+ $this->container->registerParameter('test', 'abc');
+ $this->container->registerService(
+ 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) {
+ return $c->query('Test\AppFramework\Utility\ClassSimpleConstructor');
+ });
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassInterfaceConstructor'
+ );
+ $this->assertTrue($object instanceof ClassInterfaceConstructor);
+ $this->assertEquals('abc', $object->class->test);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ public function tesOverrideService() {
+ $this->container->registerParameter('test', 'abc');
+ $this->container->registerService(
+ 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) {
+ return $c->query('Test\AppFramework\Utility\ClassSimpleConstructor');
+ });
+ $this->container->registerService(
+ 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) {
+ return $c->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ });
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassInterfaceConstructor'
+ );
+ $this->assertTrue($object instanceof ClassEmptyConstructor);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ /**
+ * @expectedException \OCP\AppFramework\QueryException
+ */
+ public function testConstructorComplexNoTestParameterFound() {
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassComplexConstructor'
+ );
+ }
+
+
+}
diff --git a/tests/lib/archive.php b/tests/lib/archive.php
index be5cc897a67..690b4378b88 100644
--- a/tests/lib/archive.php
+++ b/tests/lib/archive.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-abstract class Test_Archive extends PHPUnit_Framework_TestCase {
+abstract class Test_Archive extends \Test\TestCase {
/**
* @var OC_Archive
*/
diff --git a/tests/lib/archive/tar.php b/tests/lib/archive/tar.php
index 5b9089b32e1..43157e2054d 100644
--- a/tests/lib/archive/tar.php
+++ b/tests/lib/archive/tar.php
@@ -7,11 +7,12 @@
*/
class Test_Archive_TAR extends Test_Archive {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if (OC_Util::runningOnWindows()) {
- $this->markTestSkipped('tar archives are not supported on windows');
+ $this->markTestSkipped('[Windows] tar archives are not supported on Windows');
}
- parent::setUp();
}
protected function getExisting() {
diff --git a/tests/lib/archive/zip.php b/tests/lib/archive/zip.php
index 90958baf380..09ea5d7d27c 100644
--- a/tests/lib/archive/zip.php
+++ b/tests/lib/archive/zip.php
@@ -6,8 +6,15 @@
* See the COPYING-README file.
*/
-if (!OC_Util::runningOnWindows()) {
class Test_Archive_ZIP extends Test_Archive {
+ protected function setUp() {
+ parent::setUp();
+
+ if (OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] ');
+ }
+ }
+
protected function getExisting() {
$dir = OC::$SERVERROOT . '/tests/data';
return new OC_Archive_ZIP($dir . '/data.zip');
@@ -17,4 +24,3 @@ class Test_Archive_ZIP extends Test_Archive {
return new OC_Archive_ZIP(OCP\Files::tmpFile('.zip'));
}
}
-}
diff --git a/tests/lib/autoloader.php b/tests/lib/autoloader.php
index 46172647249..bf63094a9ef 100644
--- a/tests/lib/autoloader.php
+++ b/tests/lib/autoloader.php
@@ -8,13 +8,14 @@
namespace Test;
-class AutoLoader extends \PHPUnit_Framework_TestCase {
+class AutoLoader extends TestCase {
/**
* @var \OC\Autoloader $loader
*/
private $loader;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->loader = new \OC\AutoLoader();
}
diff --git a/tests/lib/avatar.php b/tests/lib/avatar.php
index 0334639afa8..421be155d17 100644
--- a/tests/lib/avatar.php
+++ b/tests/lib/avatar.php
@@ -6,12 +6,14 @@
* later.
* See the COPYING-README file.
*/
-class Test_Avatar extends PHPUnit_Framework_TestCase {
+class Test_Avatar extends \Test\TestCase {
private $user;
- public function setUp() {
- $this->user = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $this->user = $this->getUniqueID();
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage, array(), '/' . $this->user . '/');
}
diff --git a/tests/lib/backgroundjob/job.php b/tests/lib/backgroundjob/job.php
index 10a8f46462e..fec9b0a792d 100644
--- a/tests/lib/backgroundjob/job.php
+++ b/tests/lib/backgroundjob/job.php
@@ -8,10 +8,11 @@
namespace Test\BackgroundJob;
-class Job extends \PHPUnit_Framework_TestCase {
+class Job extends \Test\TestCase {
private $run = false;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->run = false;
}
diff --git a/tests/lib/backgroundjob/joblist.php b/tests/lib/backgroundjob/joblist.php
index c3318f80cb2..13bee12479e 100644
--- a/tests/lib/backgroundjob/joblist.php
+++ b/tests/lib/backgroundjob/joblist.php
@@ -8,7 +8,7 @@
namespace Test\BackgroundJob;
-class JobList extends \PHPUnit_Framework_TestCase {
+class JobList extends \Test\TestCase {
/**
* @var \OC\BackgroundJob\JobList
*/
@@ -19,7 +19,9 @@ class JobList extends \PHPUnit_Framework_TestCase {
*/
protected $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$conn = \OC::$server->getDatabaseConnection();
$this->config = $this->getMock('\OCP\IConfig');
$this->instance = new \OC\BackgroundJob\JobList($conn, $this->config);
diff --git a/tests/lib/backgroundjob/queuedjob.php b/tests/lib/backgroundjob/queuedjob.php
index 19c1b28a507..8d3cd6f907b 100644
--- a/tests/lib/backgroundjob/queuedjob.php
+++ b/tests/lib/backgroundjob/queuedjob.php
@@ -23,7 +23,7 @@ class TestQueuedJob extends \OC\BackgroundJob\QueuedJob {
}
}
-class QueuedJob extends \PHPUnit_Framework_TestCase {
+class QueuedJob extends \Test\TestCase {
/**
* @var DummyJobList $jobList
*/
@@ -39,7 +39,9 @@ class QueuedJob extends \PHPUnit_Framework_TestCase {
$this->jobRun = true;
}
- public function setup() {
+ protected function setup() {
+ parent::setUp();
+
$this->jobList = new DummyJobList();
$this->job = new TestQueuedJob($this);
$this->jobList->add($this->job);
diff --git a/tests/lib/backgroundjob/timedjob.php b/tests/lib/backgroundjob/timedjob.php
index 646a2607ef3..7d9bfe979af 100644
--- a/tests/lib/backgroundjob/timedjob.php
+++ b/tests/lib/backgroundjob/timedjob.php
@@ -24,7 +24,7 @@ class TestTimedJob extends \OC\BackgroundJob\TimedJob {
}
}
-class TimedJob extends \PHPUnit_Framework_TestCase {
+class TimedJob extends \Test\TestCase {
/**
* @var DummyJobList $jobList
*/
@@ -40,7 +40,9 @@ class TimedJob extends \PHPUnit_Framework_TestCase {
$this->jobRun = true;
}
- public function setup() {
+ protected function setup() {
+ parent::setUp();
+
$this->jobList = new DummyJobList();
$this->job = new TestTimedJob($this);
$this->jobList->add($this->job);
diff --git a/tests/lib/cache.php b/tests/lib/cache.php
index 8fefa25f65d..894d8c57662 100644
--- a/tests/lib/cache.php
+++ b/tests/lib/cache.php
@@ -6,16 +6,18 @@
* See the COPYING-README file.
*/
-abstract class Test_Cache extends PHPUnit_Framework_TestCase {
+abstract class Test_Cache extends \Test\TestCase {
/**
* @var \OC\Cache cache;
*/
protected $instance;
- public function tearDown() {
+ protected function tearDown() {
if($this->instance) {
$this->instance->clear();
}
+
+ parent::tearDown();
}
function testSimple() {
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index 0e19c105cd1..d51322036c8 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -23,14 +23,20 @@
namespace Test\Cache;
class FileCache extends \Test_Cache {
+ /** @var string */
private $user;
+ /** @var string */
private $datadir;
+ /** @var \OC\Files\Storage\Storage */
+ private $storage;
function skip() {
//$this->skipUnless(OC_User::isLoggedIn());
}
-
- public function setUp() {
+
+ protected function setUp() {
+ parent::setUp();
+
//clear all proxies and hooks so we can do clean testing
\OC_FileProxy::clearProxies();
\OC_Hook::clear('OC_Filesystem');
@@ -42,6 +48,7 @@ class FileCache extends \Test_Cache {
//}
//set up temporary storage
+ $this->storage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage,array(),'/');
@@ -65,8 +72,14 @@ class FileCache extends \Test_Cache {
$this->instance=new \OC\Cache\File();
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::setUserId($this->user);
\OC_Config::setValue('cachedirectory', $this->datadir);
+
+ // Restore the original mount point
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->storage, array(), '/');
+
+ parent::tearDown();
}
}
diff --git a/tests/lib/cache/usercache.php b/tests/lib/cache/usercache.php
index a1b6af1c55d..3822a714d5a 100644
--- a/tests/lib/cache/usercache.php
+++ b/tests/lib/cache/usercache.php
@@ -23,10 +23,16 @@
namespace Test\Cache;
class UserCache extends \Test_Cache {
+ /** @var string */
private $user;
+ /** @var string */
private $datadir;
+ /** @var \OC\Files\Storage\Storage */
+ private $storage;
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
//clear all proxies and hooks so we can do clean testing
\OC_FileProxy::clearProxies();
\OC_Hook::clear('OC_Filesystem');
@@ -38,6 +44,7 @@ class UserCache extends \Test_Cache {
//}
//set up temporary storage
+ $this->storage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage,array(),'/');
@@ -61,7 +68,14 @@ class UserCache extends \Test_Cache {
$this->instance=new \OC\Cache\UserCache();
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::setUserId($this->user);
+ \OC_Config::setValue('cachedirectory', $this->datadir);
+
+ // Restore the original mount point
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->storage, array(), '/');
+
+ parent::tearDown();
}
}
diff --git a/tests/lib/config.php b/tests/lib/config.php
index 180f6b1649b..6adba356a1c 100644
--- a/tests/lib/config.php
+++ b/tests/lib/config.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Config extends PHPUnit_Framework_TestCase {
+class Test_Config extends \Test\TestCase {
const TESTCONTENT = '<?php $CONFIG=array("foo"=>"bar", "beers" => array("Appenzeller", "Guinness", "Kölsch"), "alcohol_free" => false);';
/** @var array */
@@ -18,15 +18,18 @@ class Test_Config extends PHPUnit_Framework_TestCase {
/** @var string */
private $randomTmpDir;
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->randomTmpDir = \OC_Helper::tmpFolder();
$this->configFile = $this->randomTmpDir.'testconfig.php';
file_put_contents($this->configFile, self::TESTCONTENT);
$this->config = new OC\Config($this->randomTmpDir, 'testconfig.php');
}
- public function tearDown() {
+ protected function tearDown() {
unlink($this->configFile);
+ parent::tearDown();
}
public function testGetKeys() {
@@ -44,7 +47,6 @@ class Test_Config extends PHPUnit_Framework_TestCase {
}
public function testSetValue() {
- $this->config->setDebugMode(false);
$this->config->setValue('foo', 'moo');
$expectedConfig = $this->initialConfig;
$expectedConfig['foo'] = 'moo';
@@ -70,7 +72,6 @@ class Test_Config extends PHPUnit_Framework_TestCase {
}
public function testDeleteKey() {
- $this->config->setDebugMode(false);
$this->config->deleteKey('foo');
$expectedConfig = $this->initialConfig;
unset($expectedConfig['foo']);
@@ -82,37 +83,6 @@ class Test_Config extends PHPUnit_Framework_TestCase {
$this->assertEquals($expected, $content);
}
- public function testSetDebugMode() {
- $this->config->setDebugMode(true);
- $this->assertAttributeEquals($this->initialConfig, 'cache', $this->config);
- $this->assertAttributeEquals(true, 'debugMode', $this->config);
- $content = file_get_contents($this->configFile);
- $expected = "<?php\ndefine('DEBUG',true);\n\$CONFIG = array (\n 'foo' => 'bar',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " .
- " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n);\n";
- $this->assertEquals($expected, $content);
-
- $this->config->setDebugMode(false);
- $this->assertAttributeEquals($this->initialConfig, 'cache', $this->config);
- $this->assertAttributeEquals(false, 'debugMode', $this->config);
- $content = file_get_contents($this->configFile);
- $expected = "<?php\n\$CONFIG = array (\n 'foo' => 'bar',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " .
- " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n);\n";
- $this->assertEquals($expected, $content);
- }
-
- public function testIsDebugMode() {
- // Default
- $this->assertFalse($this->config->isDebugMode());
-
- // Manually set to false
- $this->config->setDebugMode(false);
- $this->assertFalse($this->config->isDebugMode());
-
- // Manually set to true
- $this->config->setDebugMode(true);
- $this->assertTrue($this->config->isDebugMode());
- }
-
public function testConfigMerge() {
// Create additional config
$additionalConfig = '<?php $CONFIG=array("php53"=>"totallyOutdated");';
diff --git a/tests/lib/connector/sabre/directory.php b/tests/lib/connector/sabre/directory.php
index 453d8e8d42a..e9bfea81b77 100644
--- a/tests/lib/connector/sabre/directory.php
+++ b/tests/lib/connector/sabre/directory.php
@@ -6,12 +6,14 @@
* later.
* See the COPYING-README file.
*/
-class Test_OC_Connector_Sabre_Directory extends PHPUnit_Framework_TestCase {
+class Test_OC_Connector_Sabre_Directory extends \Test\TestCase {
private $view;
private $info;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->view = $this->getMock('OC\Files\View', array(), array(), '', false);
$this->info = $this->getMock('OC\Files\FileInfo', array(), array(), '', false);
}
@@ -99,4 +101,58 @@ class Test_OC_Connector_Sabre_Directory extends PHPUnit_Framework_TestCase {
$dir = $this->getRootDir();
$dir->delete();
}
+
+ public function testGetChildren() {
+ $info1 = $this->getMockBuilder('OC\Files\FileInfo')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $info2 = $this->getMockBuilder('OC\Files\FileInfo')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $info1->expects($this->any())
+ ->method('getName')
+ ->will($this->returnValue('first'));
+ $info1->expects($this->any())
+ ->method('getEtag')
+ ->will($this->returnValue('abc'));
+ $info2->expects($this->any())
+ ->method('getName')
+ ->will($this->returnValue('second'));
+ $info2->expects($this->any())
+ ->method('getEtag')
+ ->will($this->returnValue('def'));
+
+ $this->view->expects($this->once())
+ ->method('getDirectoryContent')
+ ->with('')
+ ->will($this->returnValue(array($info1, $info2)));
+
+ $this->view->expects($this->any())
+ ->method('getRelativePath')
+ ->will($this->returnValue(''));
+
+ $dir = new OC_Connector_Sabre_Directory($this->view, $this->info);
+ $nodes = $dir->getChildren();
+
+ $this->assertEquals(2, count($nodes));
+
+ // calling a second time just returns the cached values,
+ // does not call getDirectoryContents again
+ $nodes = $dir->getChildren();
+
+ $properties = array('testprop', OC_Connector_Sabre_Node::GETETAG_PROPERTYNAME);
+ $this->assertEquals(2, count($nodes));
+ $this->assertEquals(
+ array(
+ OC_Connector_Sabre_Node::GETETAG_PROPERTYNAME => '"abc"'
+ ),
+ $nodes[0]->getProperties($properties)
+ );
+ $this->assertEquals(
+ array(
+ OC_Connector_Sabre_Node::GETETAG_PROPERTYNAME => '"def"'
+ ),
+ $nodes[1]->getProperties($properties)
+ );
+ }
}
diff --git a/tests/lib/connector/sabre/file.php b/tests/lib/connector/sabre/file.php
index 0993a27f372..6bb1b4e75d1 100644
--- a/tests/lib/connector/sabre/file.php
+++ b/tests/lib/connector/sabre/file.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
+class Test_OC_Connector_Sabre_File extends \Test\TestCase {
/**
* @expectedException \Sabre\DAV\Exception
@@ -23,8 +23,8 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue('/test.txt'));
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions'=>\OCP\PERMISSION_ALL
- ));
+ 'permissions'=>\OCP\Constants::PERMISSION_ALL
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
@@ -58,8 +58,8 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
$_SERVER['REQUEST_METHOD'] = 'PUT';
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
- ));
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
@@ -82,8 +82,8 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue('/super*star.txt'));
$info = new \OC\Files\FileInfo('/super*star.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
- ));
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
// action
@@ -103,8 +103,8 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue('/super*star.txt'));
$info = new \OC\Files\FileInfo('/super*star.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
- ));
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
$file->setName('/super*star.txt');
}
@@ -135,8 +135,8 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
$_SERVER['REQUEST_METHOD'] = 'PUT';
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
- ));
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
@@ -157,8 +157,8 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue(true));
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
- ));
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
@@ -176,7 +176,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
'permissions' => 0
- ));
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
@@ -198,8 +198,8 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue(false));
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
- ));
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
+ ), null);
$file = new OC_Connector_Sabre_File($view, $info);
diff --git a/tests/lib/connector/sabre/node.php b/tests/lib/connector/sabre/node.php
index 0f303457248..1e927deed44 100644
--- a/tests/lib/connector/sabre/node.php
+++ b/tests/lib/connector/sabre/node.php
@@ -12,18 +12,18 @@ namespace Test\Connector\Sabre;
use OC\Files\FileInfo;
use OC\Files\View;
-class Node extends \PHPUnit_Framework_TestCase {
+class Node extends \Test\TestCase {
public function davPermissionsProvider() {
return array(
- array(\OCP\PERMISSION_ALL, 'file', false, false, 'RDNVW'),
- array(\OCP\PERMISSION_ALL, 'dir', false, false, 'RDNVCK'),
- array(\OCP\PERMISSION_ALL, 'file', true, false, 'SRDNVW'),
- array(\OCP\PERMISSION_ALL, 'file', true, true, 'SRMDNVW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_SHARE, 'file', true, false, 'SDNVW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_UPDATE, 'file', false, false, 'RDNV'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_DELETE, 'file', false, false, 'RW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE, 'file', false, false, 'RDNVW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE, 'dir', false, false, 'RDNV'),
+ array(\OCP\Constants::PERMISSION_ALL, 'file', false, false, 'RDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL, 'dir', false, false, 'RDNVCK'),
+ array(\OCP\Constants::PERMISSION_ALL, 'file', true, false, 'SRDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL, 'file', true, true, 'SRMDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_SHARE, 'file', true, false, 'SDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_UPDATE, 'file', false, false, 'RDNV'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_DELETE, 'file', false, false, 'RW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE, 'file', false, false, 'RDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE, 'dir', false, false, 'RDNV'),
);
}
diff --git a/tests/lib/connector/sabre/objecttree.php b/tests/lib/connector/sabre/objecttree.php
index fc9f802066f..2548066214b 100644
--- a/tests/lib/connector/sabre/objecttree.php
+++ b/tests/lib/connector/sabre/objecttree.php
@@ -13,7 +13,7 @@ use OC\Files\FileInfo;
use OC_Connector_Sabre_Directory;
use PHPUnit_Framework_TestCase;
-class TestDoubleFileView extends \OC\Files\View{
+class TestDoubleFileView extends \OC\Files\View {
public function __construct($updatables, $deletables, $canRename = true) {
$this->updatables = $updatables;
@@ -42,7 +42,7 @@ class TestDoubleFileView extends \OC\Files\View{
}
}
-class ObjectTree extends PHPUnit_Framework_TestCase {
+class ObjectTree extends \Test\TestCase {
/**
* @dataProvider moveFailedProvider
@@ -101,7 +101,7 @@ class ObjectTree extends PHPUnit_Framework_TestCase {
private function moveTest($source, $dest, $updatables, $deletables) {
$view = new TestDoubleFileView($updatables, $deletables);
- $info = new FileInfo('', null, null, array());
+ $info = new FileInfo('', null, null, array(), null);
$rootDir = new OC_Connector_Sabre_Directory($view, $info);
$objectTree = $this->getMock('\OC\Connector\Sabre\ObjectTree',
diff --git a/tests/lib/connector/sabre/principal.php b/tests/lib/connector/sabre/principal.php
new file mode 100644
index 00000000000..5d13aa4421e
--- /dev/null
+++ b/tests/lib/connector/sabre/principal.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Connector\Sabre;
+
+use OCP\IUserManager;
+use OCP\IConfig;
+
+class Principal extends \Test\TestCase {
+ /** @var IUserManager */
+ private $userManager;
+ /** @var IConfig */
+ private $config;
+ /** @var \OC\Connector\Sabre\Principal */
+ private $connector;
+
+ public function setUp() {
+ $this->userManager = $this->getMockBuilder('\OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->connector = new \OC\Connector\Sabre\Principal($this->config, $this->userManager);
+ parent::setUp();
+ }
+
+ public function testGetPrincipalsByPrefixWithoutPrefix() {
+ $response = $this->connector->getPrincipalsByPrefix('');
+ $this->assertSame([], $response);
+ }
+
+ public function testGetPrincipalsByPrefixWithUsers() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $barUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $barUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('bar'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('search')
+ ->with('')
+ ->will($this->returnValue([$fooUser, $barUser]));
+ $this->config
+ ->expects($this->at(0))
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue(''));
+ $this->config
+ ->expects($this->at(1))
+ ->method('getUserValue')
+ ->with('bar', 'settings', 'email')
+ ->will($this->returnValue('bar@owncloud.org'));
+
+ $expectedResponse = [
+ 0 => [
+ 'uri' => 'principals/foo',
+ '{DAV:}displayname' => 'foo'
+ ],
+ 1 => [
+ 'uri' => 'principals/bar',
+ '{DAV:}displayname' => 'bar',
+ '{http://sabredav.org/ns}email-address' => 'bar@owncloud.org'
+ ]
+ ];
+ $response = $this->connector->getPrincipalsByPrefix('principals');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testGetPrincipalsByPrefixEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('search')
+ ->with('')
+ ->will($this->returnValue([]));
+
+ $response = $this->connector->getPrincipalsByPrefix('principals');
+ $this->assertSame([], $response);
+ }
+
+ public function testGetPrincipalsByPathWithoutMail() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue(''));
+
+ $expectedResponse = [
+ 'uri' => 'principals/foo',
+ '{DAV:}displayname' => 'foo'
+ ];
+ $response = $this->connector->getPrincipalByPath('principals/foo');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testGetPrincipalsByPathWithMail() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue('foo@owncloud.org'));
+
+ $expectedResponse = [
+ 'uri' => 'principals/foo',
+ '{DAV:}displayname' => 'foo',
+ '{http://sabredav.org/ns}email-address' => 'foo@owncloud.org'
+ ];
+ $response = $this->connector->getPrincipalByPath('principals/foo');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testGetPrincipalsByPathEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue(null));
+
+ $response = $this->connector->getPrincipalByPath('principals/foo');
+ $this->assertSame(null, $response);
+ }
+
+ public function testGetGroupMemberSet() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue('foo@owncloud.org'));
+
+ $response = $this->connector->getGroupMemberSet('principals/foo');
+ $this->assertSame(['principals/foo'], $response);
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception
+ * @expectedExceptionMessage Principal not found
+ */
+ public function testGetGroupMemberSetEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue(null));
+
+ $this->connector->getGroupMemberSet('principals/foo');
+ }
+
+ public function testGetGroupMembership() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue('foo@owncloud.org'));
+
+ $expectedResponse = [
+ 'principals/foo/calendar-proxy-read',
+ 'principals/foo/calendar-proxy-write'
+ ];
+ $response = $this->connector->getGroupMembership('principals/foo');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception
+ * @expectedExceptionMessage Principal not found
+ */
+ public function testGetGroupMembershipEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue(null));
+
+ $this->connector->getGroupMembership('principals/foo');
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception
+ * @expectedExceptionMessage Setting members of the group is not supported yet
+ */
+ public function testSetGroupMembership() {
+ $this->connector->setGroupMemberSet('principals/foo', ['foo']);
+ }
+
+ public function testUpdatePrincipal() {
+ $this->assertSame(0, $this->connector->updatePrincipal('foo', []));
+ }
+
+ public function testSearchPrincipals() {
+ $this->assertSame([], $this->connector->searchPrincipals('principals', []));
+ }
+}
diff --git a/tests/lib/connector/sabre/quotaplugin.php b/tests/lib/connector/sabre/quotaplugin.php
index 3b144cf56b5..f08637854ce 100644
--- a/tests/lib/connector/sabre/quotaplugin.php
+++ b/tests/lib/connector/sabre/quotaplugin.php
@@ -6,7 +6,7 @@
* later.
* See the COPYING-README file.
*/
-class Test_OC_Connector_Sabre_QuotaPlugin extends PHPUnit_Framework_TestCase {
+class Test_OC_Connector_Sabre_QuotaPlugin extends \Test\TestCase {
/**
* @var \Sabre\DAV\Server
diff --git a/tests/lib/connector/sabre/tagsplugin.php b/tests/lib/connector/sabre/tagsplugin.php
new file mode 100644
index 00000000000..2afea061ec3
--- /dev/null
+++ b/tests/lib/connector/sabre/tagsplugin.php
@@ -0,0 +1,314 @@
+<?php
+
+namespace Tests\Connector\Sabre;
+
+/**
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+class TagsPlugin extends \Test\TestCase {
+
+ const TAGS_PROPERTYNAME = \OC\Connector\Sabre\TagsPlugin::TAGS_PROPERTYNAME;
+ const FAVORITE_PROPERTYNAME = \OC\Connector\Sabre\TagsPlugin::FAVORITE_PROPERTYNAME;
+ const TAG_FAVORITE = \OC\Connector\Sabre\TagsPlugin::TAG_FAVORITE;
+
+ /**
+ * @var \Sabre\DAV\Server
+ */
+ private $server;
+
+ /**
+ * @var \Sabre\DAV\ObjectTree
+ */
+ private $tree;
+
+ /**
+ * @var \OCP\ITagManager
+ */
+ private $tagManager;
+
+ /**
+ * @var \OCP\ITags
+ */
+ private $tagger;
+
+ /**
+ * @var \OC\Connector\Sabre\TagsPlugin
+ */
+ private $plugin;
+
+ public function setUp() {
+ parent::setUp();
+ $this->server = new \Sabre\DAV\Server();
+ $this->tree = $this->getMockBuilder('\Sabre\DAV\ObjectTree')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->tagger = $this->getMock('\OCP\ITags');
+ $this->tagManager = $this->getMock('\OCP\ITagManager');
+ $this->tagManager->expects($this->any())
+ ->method('load')
+ ->with('files')
+ ->will($this->returnValue($this->tagger));
+ $this->plugin = new \OC\Connector\Sabre\TagsPlugin($this->tree, $this->tagManager);
+ $this->plugin->initialize($this->server);
+ }
+
+ /**
+ * @dataProvider tagsGetPropertiesDataProvider
+ */
+ public function testGetProperties($tags, $requestedProperties, $expectedProperties) {
+ $node = $this->getMockBuilder('\OC_Connector_Sabre_Node')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue(123));
+
+ $expectedCallCount = 0;
+ if (count($requestedProperties) > 0) {
+ $expectedCallCount = 1;
+ }
+
+ $this->tagger->expects($this->exactly($expectedCallCount))
+ ->method('getTagsForObjects')
+ ->with($this->equalTo(array(123)))
+ ->will($this->returnValue(array(123 => $tags)));
+
+ $returnedProperties = array();
+
+ $this->plugin->beforeGetProperties(
+ '',
+ $node,
+ $requestedProperties,
+ $returnedProperties
+ );
+
+ $this->assertEquals($expectedProperties, $returnedProperties);
+ }
+
+ /**
+ * @dataProvider tagsGetPropertiesDataProvider
+ */
+ public function testPreloadThenGetProperties($tags, $requestedProperties, $expectedProperties) {
+ $node1 = $this->getMockBuilder('\OC_Connector_Sabre_File')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node1->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue(111));
+ $node2 = $this->getMockBuilder('\OC_Connector_Sabre_File')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node2->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue(222));
+
+ $expectedCallCount = 0;
+ if (count($requestedProperties) > 0) {
+ // this guarantees that getTagsForObjects
+ // is only called once and then the tags
+ // are cached
+ $expectedCallCount = 1;
+ }
+
+ $node = $this->getMockBuilder('\OC_Connector_Sabre_Directory')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue(123));
+ $node->expects($this->exactly($expectedCallCount))
+ ->method('getChildren')
+ ->will($this->returnValue(array($node1, $node2)));
+
+ $this->tree->expects($this->once())
+ ->method('getNodeForPath')
+ ->with('/subdir')
+ ->will($this->returnValue($node));
+
+ $this->tagger->expects($this->exactly($expectedCallCount))
+ ->method('getTagsForObjects')
+ ->with($this->equalTo(array(111, 222)))
+ ->will($this->returnValue(
+ array(
+ 111 => $tags,
+ 123 => $tags
+ )
+ ));
+
+ $returnedProperties = array();
+
+ $this->plugin->beforeGetPropertiesForPath(
+ '/subdir',
+ $requestedProperties,
+ 1
+ );
+
+ $this->plugin->beforeGetProperties(
+ '/subdir/test.txt',
+ $node1,
+ $requestedProperties,
+ $returnedProperties
+ );
+
+ $this->assertEquals($expectedProperties, $returnedProperties);
+ }
+
+ function tagsGetPropertiesDataProvider() {
+ return array(
+ // request both, receive both
+ array(
+ array('tag1', 'tag2', self::TAG_FAVORITE),
+ array(self::TAGS_PROPERTYNAME, self::FAVORITE_PROPERTYNAME),
+ array(
+ 200 => array(
+ self::TAGS_PROPERTYNAME => new \OC\Connector\Sabre\TagList(array('tag1', 'tag2')),
+ self::FAVORITE_PROPERTYNAME => true,
+ )
+ )
+ ),
+ // request tags alone
+ array(
+ array('tag1', 'tag2', self::TAG_FAVORITE),
+ array(self::TAGS_PROPERTYNAME),
+ array(
+ 200 => array(
+ self::TAGS_PROPERTYNAME => new \OC\Connector\Sabre\TagList(array('tag1', 'tag2')),
+ )
+ )
+ ),
+ // request fav alone
+ array(
+ array('tag1', 'tag2', self::TAG_FAVORITE),
+ array(self::FAVORITE_PROPERTYNAME),
+ array(
+ 200 => array(
+ self::FAVORITE_PROPERTYNAME => true,
+ )
+ )
+ ),
+ // request none
+ array(
+ array('tag1', 'tag2', self::TAG_FAVORITE),
+ array(),
+ array(),
+ ),
+ // request both with none set, receive both
+ array(
+ array(),
+ array(self::TAGS_PROPERTYNAME, self::FAVORITE_PROPERTYNAME),
+ array(
+ 200 => array(
+ self::TAGS_PROPERTYNAME => new \OC\Connector\Sabre\TagList(array()),
+ self::FAVORITE_PROPERTYNAME => false,
+ )
+ )
+ ),
+ );
+ }
+
+ public function testUpdateTags() {
+ // this test will replace the existing tags "tagremove" with "tag1" and "tag2"
+ // and keep "tagkeep"
+ $node = $this->getMockBuilder('\OC_Connector_Sabre_Node')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue(123));
+
+ $this->tagger->expects($this->at(0))
+ ->method('getTagsForObjects')
+ ->with($this->equalTo(array(123)))
+ ->will($this->returnValue(array(123 => array('tagkeep', 'tagremove', self::TAG_FAVORITE))));
+
+ // then tag as tag1 and tag2
+ $this->tagger->expects($this->at(1))
+ ->method('tagAs')
+ ->with(123, 'tag1');
+ $this->tagger->expects($this->at(2))
+ ->method('tagAs')
+ ->with(123, 'tag2');
+
+ // it will untag tag3
+ $this->tagger->expects($this->at(3))
+ ->method('unTag')
+ ->with(123, 'tagremove');
+
+ // properties to set
+ $properties = array(
+ self::TAGS_PROPERTYNAME => new \OC\Connector\Sabre\TagList(array('tag1', 'tag2', 'tagkeep'))
+ );
+ $result = array();
+
+ $this->plugin->updateProperties(
+ $properties,
+ $result,
+ $node
+ );
+
+ // all requested properties removed, as they were processed already
+ $this->assertEmpty($properties);
+
+ $this->assertEquals(
+ new \OC\Connector\Sabre\TagList(array('tag1', 'tag2', 'tagkeep')),
+ $result[200][self::TAGS_PROPERTYNAME]
+ );
+ $this->assertFalse(isset($result[200][self::FAVORITE_PROPERTYNAME]));
+ }
+
+ public function testUpdateFav() {
+ // this test will replace the existing tags "tagremove" with "tag1" and "tag2"
+ // and keep "tagkeep"
+ $node = $this->getMockBuilder('\OC_Connector_Sabre_Node')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue(123));
+
+ // set favorite tag
+ $this->tagger->expects($this->once())
+ ->method('tagAs')
+ ->with(123, self::TAG_FAVORITE);
+
+ // properties to set
+ $properties = array(
+ self::FAVORITE_PROPERTYNAME => true
+ );
+ $result = array();
+ $this->plugin->updateProperties(
+ $properties,
+ $result,
+ $node
+ );
+
+ // all requested properties removed, as they were processed already
+ $this->assertEmpty($properties);
+
+ $this->assertTrue($result[200][self::FAVORITE_PROPERTYNAME]);
+ $this->assertFalse(isset($result[200][self::TAGS_PROPERTYNAME]));
+
+ // unfavorite now
+ // set favorite tag
+ $this->tagger->expects($this->once())
+ ->method('unTag')
+ ->with(123, self::TAG_FAVORITE);
+
+ $properties = array(
+ self::FAVORITE_PROPERTYNAME => false
+ );
+ $result = array();
+ $this->plugin->updateProperties(
+ $properties,
+ $result,
+ $node
+ );
+
+ $this->assertFalse($result[200][self::FAVORITE_PROPERTYNAME]);
+ $this->assertFalse(isset($result[200][self::TAGS_PROPERTYNAME]));
+ }
+
+}
diff --git a/tests/lib/contacts/localadressbook.php b/tests/lib/contacts/localadressbook.php
index bb69910820f..a34d45bf3d0 100644
--- a/tests/lib/contacts/localadressbook.php
+++ b/tests/lib/contacts/localadressbook.php
@@ -11,7 +11,7 @@ use OC\Contacts\LocalAddressBook;
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_LocalAddressBook extends PHPUnit_Framework_TestCase
+class Test_LocalAddressBook extends \Test\TestCase
{
public function testSearchFN() {
@@ -78,6 +78,9 @@ class SimpleUserForTesting implements \OCP\IUser {
public function getHome() {
}
+ public function getBackendClassName() {
+ }
+
public function canChangeAvatar() {
}
diff --git a/tests/lib/contactsmanager.php b/tests/lib/contactsmanager.php
new file mode 100644
index 00000000000..39e44cc6302
--- /dev/null
+++ b/tests/lib/contactsmanager.php
@@ -0,0 +1,209 @@
+<?php
+
+
+class Test_ContactsManager extends \Test\TestCase {
+
+ /** @var \OC\ContactsManager */
+ private $cm;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->cm = new \OC\ContactsManager();
+ }
+
+ public function searchProvider(){
+ $search1 = array(
+ 0 => array(
+ 'N' => array(0 => '', 1 => 'Jan', 2 => 'Jansen', 3 => '', 4 => '',),
+ 'UID' => '04ada7f5-01f9-4309-9c82-6b555b2170ed',
+ 'FN' => 'Jan Jansen',
+ 'id' => '1',
+ 'addressbook-key' => 'simple:1',
+ ),
+ 0 => array(
+ 'N' => array(0 => '', 1 => 'Tom', 2 => 'Peeters', 3 => '', 4 => '',),
+ 'UID' => '04ada7f5-01f9-4309-9c82-2345-2345--6b555b2170ed',
+ 'FN' => 'Tom Peeters',
+ 'id' => '2',
+ 'addressbook-key' => 'simple:1',
+ ),
+ );
+
+ $search2 = array(
+ 0 => array(
+ 'N' => array(0 => '', 1 => 'fg', 2 => '', 3 => '', 4 => '',),
+ 'UID' => '04ada234h5jh357f5-01f9-4309-9c82-6b555b2170ed',
+ 'FN' => 'Jan Rompuy',
+ 'id' => '1',
+ 'addressbook-key' => 'simple:2',
+ ),
+ 0 => array(
+ 'N' => array(0 => '', 1 => 'fg', 2 => '', 3 => '', 4 => '',),
+ 'UID' => '04ada7f5-01f9-4309-345kj345j9c82-2345-2345--6b555b2170ed',
+ 'FN' => 'Tim Peeters',
+ 'id' => '2',
+ 'addressbook-key' => 'simple:2',
+ ),
+ );
+
+ $expectedResult = array_merge($search1, $search2);
+ return array(
+ array(
+ $search1,
+ $search2,
+ $expectedResult
+ )
+ );
+ }
+
+ /**
+ * @dataProvider searchProvider
+ */
+ public function testSearch($search1, $search2, $expectedResult ){
+ $addressbook1 = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook1->expects($this->once())
+ ->method('search')
+ ->willReturn($search1);
+
+ $addressbook1->expects($this->any())
+ ->method('getKey')
+ ->willReturn('simple:1');
+
+ $addressbook2 = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook2->expects($this->once())
+ ->method('search')
+ ->willReturn($search2);
+
+ $addressbook2->expects($this->any())
+ ->method('getKey')
+ ->willReturn('simple:2');
+
+
+ $this->cm->registerAddressBook($addressbook1);
+ $this->cm->registerAddressBook($addressbook2);
+ $result = $this->cm->search('');
+ $this->assertEquals($expectedResult, $result);
+ }
+
+
+ public function testDeleteHavePermission(){
+ $addressbook = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook->expects($this->any())
+ ->method('getPermissions')
+ ->willReturn(\OCP\Constants::PERMISSION_ALL);
+
+ $addressbook->expects($this->once())
+ ->method('delete')
+ ->willReturn('returnMe');
+
+
+ $this->cm->registerAddressBook($addressbook);
+ $result = $this->cm->delete(1, $addressbook->getKey());
+ $this->assertEquals($result, 'returnMe');
+ }
+
+ public function testDeleteNoPermission(){
+ $addressbook = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook->expects($this->any())
+ ->method('getPermissions')
+ ->willReturn(\OCP\Constants::PERMISSION_READ);
+
+ $addressbook->expects($this->never())
+ ->method('delete');
+
+ $this->cm->registerAddressBook($addressbook);
+ $result = $this->cm->delete(1, $addressbook->getKey());
+ $this->assertEquals($result, null);
+ }
+
+ public function testDeleteNoAddressbook(){
+ $addressbook = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook->expects($this->never())
+ ->method('delete');
+
+ $this->cm->registerAddressBook($addressbook);
+ $result = $this->cm->delete(1, 'noaddressbook');
+ $this->assertEquals($result, null);
+
+ }
+
+ public function testCreateOrUpdateHavePermission(){
+ $addressbook = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook->expects($this->any())
+ ->method('getPermissions')
+ ->willReturn(\OCP\Constants::PERMISSION_ALL);
+
+ $addressbook->expects($this->once())
+ ->method('createOrUpdate')
+ ->willReturn('returnMe');
+
+ $this->cm->registerAddressBook($addressbook);
+ $result = $this->cm->createOrUpdate(array(), $addressbook->getKey());
+ $this->assertEquals($result, 'returnMe');
+ }
+
+ public function testCreateOrUpdateNoPermission(){
+ $addressbook = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook->expects($this->any())
+ ->method('getPermissions')
+ ->willReturn(\OCP\Constants::PERMISSION_READ);
+
+ $addressbook->expects($this->never())
+ ->method('createOrUpdate');
+
+ $this->cm->registerAddressBook($addressbook);
+ $result = $this->cm->createOrUpdate(array(), $addressbook->getKey());
+ $this->assertEquals($result, null);
+
+ }
+
+ public function testCreateOrUpdateNOAdressbook(){
+ $addressbook = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $addressbook->expects($this->never())
+ ->method('createOrUpdate');
+
+ $this->cm->registerAddressBook($addressbook);
+ $result = $this->cm->createOrUpdate(array(), 'noaddressbook');
+ $this->assertEquals($result, null);
+ }
+
+ public function testIsEnabledIfNot(){
+ $result = $this->cm->isEnabled();
+ $this->assertFalse($result);
+ }
+
+ public function testIsEnabledIfSo(){
+ $addressbook = $this->getMockBuilder('\OCP\IAddressBook')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->cm->registerAddressBook($addressbook);
+ $result = $this->cm->isEnabled();
+ $this->assertTrue($result);
+ }
+
+} \ No newline at end of file
diff --git a/tests/lib/datetimeformatter.php b/tests/lib/datetimeformatter.php
new file mode 100644
index 00000000000..9a50ee4a257
--- /dev/null
+++ b/tests/lib/datetimeformatter.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * Copyright (c) 2014 Joas Schilling nickvergessen@owncloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+
+class DateTimeFormatter extends TestCase {
+ /** @var \OC\DateTimeFormatter */
+ protected $formatter;
+ static protected $oneMinute = 60;
+ static protected $oneHour = 3600;
+ static protected $oneDay;
+ static protected $oneYear;
+
+ static protected $defaultTimeZone;
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+ self::$defaultTimeZone = date_default_timezone_get();
+ date_default_timezone_set('UTC');
+
+ self::$oneDay = self::$oneHour * 24;
+ self::$oneYear = self::$oneDay * 365;
+ }
+
+ public static function tearDownAfterClass() {
+ date_default_timezone_set(self::$defaultTimeZone);
+ parent::tearDownAfterClass();
+ }
+
+ protected function setUp() {
+ parent::setUp();
+ $this->formatter = new \OC\DateTimeFormatter(new \DateTimeZone('UTC'), new \OC_L10N('lib', 'en'));
+ }
+
+ protected function getTimestampAgo($time, $seconds = 0, $minutes = 0, $hours = 0, $days = 0, $years = 0) {
+ return $time - $seconds - $minutes * 60 - $hours * 3600 - $days * 24*3600 - $years * 365*24*3600;
+ }
+
+ public function formatTimeSpanData() {
+ $time = 1416916800; // Use a fixed timestamp so we dont switch days/years with the getTimestampAgo
+ $deL10N = new \OC_L10N('lib', 'de');
+ return array(
+ array('seconds ago', $time, $time),
+ array('1 minute ago', $this->getTimestampAgo($time, 30, 1), $time),
+ array('15 minutes ago', $this->getTimestampAgo($time, 30, 15), $time),
+ array('1 hour ago', $this->getTimestampAgo($time, 30, 15, 1), $time),
+ array('3 hours ago', $this->getTimestampAgo($time, 30, 15, 3), $time),
+ array('4 days ago', $this->getTimestampAgo($time, 30, 15, 3, 4), $time),
+
+ array('seconds ago', new \DateTime('Wed, 02 Oct 2013 23:59:58 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('seconds ago', new \DateTime('Wed, 02 Oct 2013 23:59:00 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('1 minute ago', new \DateTime('Wed, 02 Oct 2013 23:58:30 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('3 minutes ago', new \DateTime('Wed, 02 Oct 2013 23:56:30 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('59 minutes ago', new \DateTime('Wed, 02 Oct 2013 23:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('1 hour ago', new \DateTime('Wed, 02 Oct 2013 22:59:59 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('3 hours ago', new \DateTime('Wed, 02 Oct 2013 20:39:59 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('yesterday', new \DateTime('Tue, 01 Oct 2013 20:39:59 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('2 days ago', new \DateTime('Mon, 30 Sep 2013 20:39:59 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+
+ array($deL10N->t('seconds ago'), new \DateTime('Wed, 02 Oct 2013 23:59:58 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000'), $deL10N),
+ array($deL10N->n('%n minute ago', '%n minutes ago', 1), new \DateTime('Wed, 02 Oct 2013 23:58:30 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000'), $deL10N),
+ array($deL10N->n('%n minute ago', '%n minutes ago', 3), new \DateTime('Wed, 02 Oct 2013 23:56:30 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000'), $deL10N),
+ array($deL10N->n('%n hour ago', '%n hours ago', 1), new \DateTime('Wed, 02 Oct 2013 22:59:59 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000'), $deL10N),
+ array($deL10N->n('%n hour ago', '%n hours ago', 3), new \DateTime('Wed, 02 Oct 2013 20:39:59 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000'), $deL10N),
+ array($deL10N->n('%n day ago', '%n days ago', 2), new \DateTime('Mon, 30 Sep 2013 20:39:59 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000'), $deL10N),
+
+ );
+ }
+
+ /**
+ * @dataProvider formatTimeSpanData
+ */
+ public function testFormatTimeSpan($expected, $timestamp, $compare, $locale = null) {
+ $this->assertEquals((string) $expected, (string) $this->formatter->formatTimeSpan($timestamp, $compare, $locale));
+ }
+
+ public function formatDateSpanData() {
+ $time = 1416916800; // Use a fixed timestamp so we dont switch days/years with the getTimestampAgo
+ $deL10N = new \OC_L10N('lib', 'de');
+ return array(
+ // Normal testing
+ array('today', $this->getTimestampAgo($time, 30, 15), $time),
+ array('yesterday', $this->getTimestampAgo($time, 0, 0, 0, 1), $time),
+ array('4 days ago', $this->getTimestampAgo($time, 0, 0, 0, 4), $time),
+ array('5 months ago', $this->getTimestampAgo($time, 0, 0, 0, 155), $time),
+ array('2 years ago', $this->getTimestampAgo($time, 0, 0, 0, 0, 2), $time),
+
+ // Test with compare timestamp
+ array('today', $this->getTimestampAgo($time, 0, 0, 0, 0, 1), $this->getTimestampAgo($time, 0, 0, 0, 0, 1)),
+ array('yesterday', $this->getTimestampAgo($time, 30, 15, 3, 1, 1), $this->getTimestampAgo($time, 0, 0, 0, 0, 1)),
+ array('4 days ago', $this->getTimestampAgo($time, 30, 15, 3, 4, 1), $this->getTimestampAgo($time, 0, 0, 0, 0, 1)),
+ array('5 months ago', $this->getTimestampAgo($time, 30, 15, 3, 155, 1), $this->getTimestampAgo($time, 0, 0, 0, 0, 1)),
+ array('2 years ago', $this->getTimestampAgo($time, 30, 15, 3, 35, 3), $this->getTimestampAgo($time, 0, 0, 0, 0, 1)),
+
+ // Test translations
+ array($deL10N->t('today'), new \DateTime('Wed, 02 Oct 2013 12:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000'), $deL10N),
+ array($deL10N->t('yesterday'), new \DateTime('Tue, 01 Oct 2013 00:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 00:00:00 +0000'), $deL10N),
+ array($deL10N->n('%n day ago', '%n days ago', 2), new \DateTime('Mon, 30 Sep 2013 00:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 00:00:00 +0000'), $deL10N),
+ array($deL10N->n('%n month ago', '%n months ago', 9), new \DateTime('Tue, 31 Dec 2013 00:00:00 +0000'), new \DateTime('Thu, 02 Oct 2014 00:00:00 +0000'), $deL10N),
+ array($deL10N->n('%n year ago', '%n years ago', 2), new \DateTime('Sun, 01 Jan 2012 00:00:00 +0000'), new \DateTime('Thu, 02 Oct 2014 00:00:00 +0000'), $deL10N),
+
+ // Test time
+ array('today', new \DateTime('Wed, 02 Oct 2013 00:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('today', new \DateTime('Wed, 02 Oct 2013 12:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('today', new \DateTime('Wed, 02 Oct 2013 23:59:58 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+
+ // Test some special yesterdays
+ array('yesterday', new \DateTime('Tue, 01 Oct 2013 00:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 00:00:00 +0000')),
+ array('yesterday', new \DateTime('Tue, 01 Oct 2013 00:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('yesterday', new \DateTime('Tue, 01 Oct 2013 23:59:58 +0000'), new \DateTime('Wed, 02 Oct 2013 00:00:00 +0000')),
+ array('yesterday', new \DateTime('Tue, 01 Oct 2013 23:59:58 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')),
+ array('yesterday', new \DateTime('Mon, 30 Sep 2013 00:00:00 +0000'), new \DateTime('Tue, 01 Oct 2013 00:00:00 +0000')),
+ array('yesterday', new \DateTime('Mon, 31 Dec 2012 00:00:00 +0000'), new \DateTime('Tue, 01 Jan 2013 00:00:00 +0000')),
+
+ // Test last month
+ array('2 days ago', new \DateTime('Mon, 30 Sep 2013 00:00:00 +0000'), new \DateTime('Wed, 02 Oct 2013 00:00:00 +0000')),
+ array('last month', new \DateTime('Mon, 30 Sep 2013 00:00:00 +0000'), new \DateTime('Tue, 31 Oct 2013 00:00:00 +0000')),
+ array('last month', new \DateTime('Sun, 01 Sep 2013 00:00:00 +0000'), new \DateTime('Tue, 01 Oct 2013 00:00:00 +0000')),
+ array('last month', new \DateTime('Sun, 01 Sep 2013 00:00:00 +0000'), new \DateTime('Thu, 31 Oct 2013 00:00:00 +0000')),
+
+ // Test last year
+ array('9 months ago', new \DateTime('Tue, 31 Dec 2013 00:00:00 +0000'), new \DateTime('Thu, 02 Oct 2014 00:00:00 +0000')),
+ array('11 months ago', new \DateTime('Thu, 03 Oct 2013 00:00:00 +0000'), new \DateTime('Thu, 02 Oct 2014 00:00:00 +0000')),
+ array('last year', new \DateTime('Wed, 02 Oct 2013 00:00:00 +0000'), new \DateTime('Thu, 02 Oct 2014 00:00:00 +0000')),
+ array('last year', new \DateTime('Tue, 01 Jan 2013 00:00:00 +0000'), new \DateTime('Thu, 02 Oct 2014 00:00:00 +0000')),
+ array('2 years ago', new \DateTime('Sun, 01 Jan 2012 00:00:00 +0000'), new \DateTime('Thu, 02 Oct 2014 00:00:00 +0000')),
+ );
+ }
+
+ /**
+ * @dataProvider formatDateSpanData
+ */
+ public function testFormatDateSpan($expected, $timestamp, $compare = null, $locale = null) {
+ $this->assertEquals((string) $expected, (string) $this->formatter->formatDateSpan($timestamp, $compare, $locale));
+ }
+
+ public function formatDateData() {
+ return array(
+ array(1102831200, 'December 12, 2004'),
+ );
+ }
+
+ /**
+ * @dataProvider formatDateData
+ */
+ public function testFormatDate($timestamp, $expected) {
+ $this->assertEquals($expected, (string) $this->formatter->formatDate($timestamp));
+ }
+
+ public function formatDateTimeData() {
+ return array(
+ array(1350129205, null, 'October 13, 2012 at 11:53:25 AM GMT+0'),
+ array(1350129205, new \DateTimeZone('Europe/Berlin'), 'October 13, 2012 at 1:53:25 PM GMT+2'),
+ );
+ }
+
+ /**
+ * @dataProvider formatDateTimeData
+ */
+ public function testFormatDateTime($timestamp, $timeZone, $expected) {
+ $this->assertEquals($expected, (string) $this->formatter->formatDateTime($timestamp, 'long', 'long', $timeZone));
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ function testFormatDateWithInvalidTZ() {
+ $this->formatter->formatDate(1350129205, 'long', new \DateTimeZone('Mordor/Barad-dûr'));
+ }
+}
diff --git a/tests/lib/db.php b/tests/lib/db.php
index fb673b8092b..aefbb3624ed 100644
--- a/tests/lib/db.php
+++ b/tests/lib/db.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_DB extends PHPUnit_Framework_TestCase {
+class Test_DB extends \Test\TestCase {
protected $backupGlobals = FALSE;
protected static $schema_file = 'static://test_db_scheme';
@@ -32,7 +32,9 @@ class Test_DB extends PHPUnit_Framework_TestCase {
*/
private $table4;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$dbfile = OC::$SERVERROOT.'/tests/data/db_structure.xml';
$r = '_'.OC_Util::generateRandomBytes(4).'_';
@@ -48,9 +50,11 @@ class Test_DB extends PHPUnit_Framework_TestCase {
$this->table4 = $this->test_prefix.'decimal';
}
- public function tearDown() {
+ protected function tearDown() {
OC_DB::removeDBStructure(self::$schema_file);
unlink(self::$schema_file);
+
+ parent::tearDown();
}
public function testQuotes() {
@@ -261,7 +265,7 @@ class Test_DB extends PHPUnit_Framework_TestCase {
protected function insertCardData($fullname, $uri) {
$query = OC_DB::prepare("INSERT INTO `*PREFIX*{$this->table2}` (`fullname`, `uri`, `carddata`) VALUES (?, ?, ?)");
- $this->assertSame(1, $query->execute(array($fullname, $uri, uniqid())));
+ $this->assertSame(1, $query->execute(array($fullname, $uri, $this->getUniqueID())));
}
protected function updateCardData($fullname, $uri) {
diff --git a/tests/lib/db/connection.php b/tests/lib/db/connection.php
new file mode 100644
index 00000000000..720b448d0fb
--- /dev/null
+++ b/tests/lib/db/connection.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\DB;
+
+use Doctrine\DBAL\Platforms\SqlitePlatform;
+use OC\DB\MDB2SchemaManager;
+
+class Connection extends \Test\TestCase {
+ /**
+ * @var \OCP\IDBConnection
+ */
+ private $connection;
+
+ public static function setUpBeforeClass()
+ {
+ self::dropTestTable();
+ parent::setUpBeforeClass();
+ }
+
+ public static function tearDownAfterClass()
+ {
+ self::dropTestTable();
+ parent::tearDownAfterClass();
+ }
+
+ protected static function dropTestTable()
+ {
+ if (\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite') !== 'oci') {
+ \OC_DB::dropTable('table');
+ }
+ }
+
+ public function setUp() {
+ parent::setUp();
+ $this->connection = \OC::$server->getDatabaseConnection();
+ }
+
+ /**
+ * @param string $table
+ */
+ public function assertTableExist($table) {
+ if ($this->connection->getDatabasePlatform() instanceof SqlitePlatform) {
+ // sqlite removes the tables after closing the DB
+ $this->assertTrue(true);
+ } else {
+ $this->assertTrue($this->connection->tableExists($table), 'Table ' . $table . ' exists.');
+ }
+ }
+
+ /**
+ * @param string $table
+ */
+ public function assertTableNotExist($table) {
+ if ($this->connection->getDatabasePlatform() instanceof SqlitePlatform) {
+ // sqlite removes the tables after closing the DB
+ $this->assertTrue(true);
+ } else {
+ $this->assertFalse($this->connection->tableExists($table), 'Table ' . $table . ' doesnt exists.');
+ }
+ }
+
+ private function makeTestTable() {
+ $schemaManager = new MDB2SchemaManager($this->connection);
+ $schemaManager->createDbFromStructure(__DIR__ . '/testschema.xml');
+ }
+
+ public function testTableExists() {
+ $this->assertTableNotExist('table');
+ $this->makeTestTable();
+ $this->assertTableExist('table');
+ }
+
+ /**
+ * @depends testTableExists
+ */
+ public function testDropTable() {
+ $this->assertTableExist('table');
+ $this->connection->dropTable('table');
+ $this->assertTableNotExist('table');
+ }
+}
diff --git a/tests/lib/db/mdb2schemamanager.php b/tests/lib/db/mdb2schemamanager.php
index 527b2cba648..e20f4c421b8 100644
--- a/tests/lib/db/mdb2schemamanager.php
+++ b/tests/lib/db/mdb2schemamanager.php
@@ -12,15 +12,16 @@ namespace Test\DB;
use Doctrine\DBAL\Platforms\OraclePlatform;
use Doctrine\DBAL\Platforms\SQLServerPlatform;
-class MDB2SchemaManager extends \PHPUnit_Framework_TestCase {
+class MDB2SchemaManager extends \Test\TestCase {
- public function tearDown() {
+ protected function tearDown() {
// do not drop the table for Oracle as it will create a bogus transaction
// that will break the following test suites requiring transactions
- if (\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite') === 'oci') {
- return;
+ if (\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite') !== 'oci') {
+ \OC_DB::dropTable('table');
}
- \OC_DB::dropTable('table');
+
+ parent::tearDown();
}
public function testAutoIncrement() {
diff --git a/tests/lib/db/mdb2schemareader.php b/tests/lib/db/mdb2schemareader.php
index f08996cbeaf..7939c782e80 100644
--- a/tests/lib/db/mdb2schemareader.php
+++ b/tests/lib/db/mdb2schemareader.php
@@ -11,7 +11,7 @@ namespace Test\DB;
use Doctrine\DBAL\Platforms\MySqlPlatform;
-class MDB2SchemaReader extends \PHPUnit_Framework_TestCase {
+class MDB2SchemaReader extends \Test\TestCase {
/**
* @var \OC\DB\MDB2SchemaReader $reader
*/
@@ -21,11 +21,11 @@ class MDB2SchemaReader extends \PHPUnit_Framework_TestCase {
* @return \OC\Config
*/
protected function getConfig() {
- $config = $this->getMockBuilder('\OC\Config')
+ $config = $this->getMockBuilder('\OCP\IConfig')
->disableOriginalConstructor()
->getMock();
$config->expects($this->any())
- ->method('getValue')
+ ->method('getSystemValue')
->will($this->returnValueMap(array(
array('dbname', 'owncloud', 'testDB'),
array('dbtableprefix', 'oc_', 'test_')
diff --git a/tests/lib/db/migrator.php b/tests/lib/db/migrator.php
index 09742a53eb4..54267740480 100644
--- a/tests/lib/db/migrator.php
+++ b/tests/lib/db/migrator.php
@@ -15,7 +15,7 @@ use Doctrine\DBAL\Platforms\SQLServerPlatform;
use \Doctrine\DBAL\Schema\Schema;
use \Doctrine\DBAL\Schema\SchemaConfig;
-class Migrator extends \PHPUnit_Framework_TestCase {
+class Migrator extends \Test\TestCase {
/**
* @var \Doctrine\DBAL\Connection $connection
*/
@@ -28,7 +28,9 @@ class Migrator extends \PHPUnit_Framework_TestCase {
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if ($this->connection->getDatabasePlatform() instanceof OraclePlatform) {
$this->markTestSkipped('DB migration tests are not supported on OCI');
@@ -37,11 +39,12 @@ class Migrator extends \PHPUnit_Framework_TestCase {
$this->markTestSkipped('DB migration tests are not supported on MSSQL');
}
$this->manager = new \OC\DB\MDB2SchemaManager($this->connection);
- $this->tableName = 'test_' . uniqid();
+ $this->tableName = strtolower($this->getUniqueID('oc_test_'));
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->exec('DROP TABLE ' . $this->tableName);
+ parent::tearDown();
}
/**
diff --git a/tests/lib/db/mysqlmigration.php b/tests/lib/db/mysqlmigration.php
index 584df1d4465..6c283e6c59c 100644
--- a/tests/lib/db/mysqlmigration.php
+++ b/tests/lib/db/mysqlmigration.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class TestMySqlMigration extends \PHPUnit_Framework_TestCase {
+class TestMySqlMigration extends \Test\TestCase {
/** @var \Doctrine\DBAL\Connection */
private $connection;
@@ -14,19 +14,22 @@ class TestMySqlMigration extends \PHPUnit_Framework_TestCase {
/** @var string */
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) {
$this->markTestSkipped("Test only relevant on MySql");
}
$dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_enum_bit_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . '_enum_bit_test');
$this->connection->exec("CREATE TABLE $this->tableName(b BIT, e ENUM('1','2','3','4'))");
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testNonOCTables() {
diff --git a/tests/lib/db/sqlitemigration.php b/tests/lib/db/sqlitemigration.php
index adfc03a2ca7..9206381ff71 100644
--- a/tests/lib/db/sqlitemigration.php
+++ b/tests/lib/db/sqlitemigration.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class TestSqliteMigration extends \PHPUnit_Framework_TestCase {
+class TestSqliteMigration extends \Test\TestCase {
/** @var \Doctrine\DBAL\Connection */
private $connection;
@@ -14,19 +14,22 @@ class TestSqliteMigration extends \PHPUnit_Framework_TestCase {
/** @var string */
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) {
$this->markTestSkipped("Test only relevant on Sqlite");
}
$dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_enum_bit_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . '_enum_bit_test');
$this->connection->exec("CREATE TABLE $this->tableName(t0 tinyint unsigned, t1 tinyint)");
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testNonOCTables() {
diff --git a/tests/lib/dbschema.php b/tests/lib/dbschema.php
index d31bd34124e..cfaebec079e 100644
--- a/tests/lib/dbschema.php
+++ b/tests/lib/dbschema.php
@@ -9,13 +9,15 @@
use OCP\Security\ISecureRandom;
-class Test_DBSchema extends PHPUnit_Framework_TestCase {
+class Test_DBSchema extends \Test\TestCase {
protected $schema_file = 'static://test_db_scheme';
protected $schema_file2 = 'static://test_db_scheme2';
protected $table1;
protected $table2;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$dbfile = OC::$SERVERROOT.'/tests/data/db_structure.xml';
$dbfile2 = OC::$SERVERROOT.'/tests/data/db_structure2.xml';
@@ -32,9 +34,11 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase {
$this->table2 = $r.'cntcts_cards';
}
- public function tearDown() {
+ protected function tearDown() {
unlink($this->schema_file);
unlink($this->schema_file2);
+
+ parent::tearDown();
}
// everything in one test, they depend on each other
diff --git a/tests/lib/errorHandler.php b/tests/lib/errorHandler.php
index 58db80b3c6e..726529e83f4 100644
--- a/tests/lib/errorHandler.php
+++ b/tests/lib/errorHandler.php
@@ -20,7 +20,7 @@
*
*/
-class Test_ErrorHandler extends \PHPUnit_Framework_TestCase {
+class Test_ErrorHandler extends \Test\TestCase {
/**
* provide username, password combinations for testRemovePassword
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 969740419c6..81d7f3ce0bc 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -16,24 +16,28 @@ class LongId extends \OC\Files\Storage\Temporary {
}
}
-class Cache extends \PHPUnit_Framework_TestCase {
+class Cache extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Temporary $storage ;
*/
- private $storage;
+ protected $storage;
/**
* @var \OC\Files\Storage\Temporary $storage2 ;
*/
- private $storage2;
+ protected $storage2;
/**
* @var \OC\Files\Cache\Cache $cache
*/
- private $cache;
+ protected $cache;
/**
* @var \OC\Files\Cache\Cache $cache2
*/
- private $cache2;
+ protected $cache2;
+
+ public function testGetNumericId() {
+ $this->assertNotNull($this->cache->getNumericStorageId());
+ }
public function testSimple() {
$file1 = 'foo';
@@ -266,6 +270,67 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertEquals(2, count($this->cache->searchByMime('foo/file')));
}
+ function testSearchByTag() {
+ $userId = $this->getUniqueId('user');
+ \OC_User::createUser($userId, $userId);
+ $this->loginAsUser($userId);
+ $user = new \OC\User\User($userId, null);
+
+ $file1 = 'folder';
+ $file2 = 'folder/foobar';
+ $file3 = 'folder/foo';
+ $file4 = 'folder/foo2';
+ $file5 = 'folder/foo3';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+ $fileData = array();
+ $fileData['foobar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
+ $fileData['foo2'] = array('size' => 25, 'mtime' => 28, 'mimetype' => 'foo/file');
+ $fileData['foo3'] = array('size' => 88, 'mtime' => 34, 'mimetype' => 'foo/file');
+
+ $id1 = $this->cache->put($file1, $data1);
+ $id2 = $this->cache->put($file2, $fileData['foobar']);
+ $id3 = $this->cache->put($file3, $fileData['foo']);
+ $id4 = $this->cache->put($file4, $fileData['foo2']);
+ $id5 = $this->cache->put($file5, $fileData['foo3']);
+
+ $tagManager = \OC::$server->getTagManager()->load('files', null, null, $userId);
+ $this->assertTrue($tagManager->tagAs($id1, 'tag1'));
+ $this->assertTrue($tagManager->tagAs($id1, 'tag2'));
+ $this->assertTrue($tagManager->tagAs($id2, 'tag2'));
+ $this->assertTrue($tagManager->tagAs($id3, 'tag1'));
+ $this->assertTrue($tagManager->tagAs($id4, 'tag2'));
+
+ // use tag name
+ $results = $this->cache->searchByTag('tag1', $userId);
+
+ $this->assertEquals(2, count($results));
+
+ usort($results, function($value1, $value2) { return $value1['name'] >= $value2['name']; });
+
+ $this->assertEquals('folder', $results[0]['name']);
+ $this->assertEquals('foo', $results[1]['name']);
+
+ // use tag id
+ $tags = $tagManager->getTagsForUser($userId);
+ $this->assertNotEmpty($tags);
+ $tags = array_filter($tags, function($tag) { return $tag->getName() === 'tag2'; });
+ $results = $this->cache->searchByTag(current($tags)->getId(), $userId);
+ $this->assertEquals(3, count($results));
+
+ usort($results, function($value1, $value2) { return $value1['name'] >= $value2['name']; });
+
+ $this->assertEquals('folder', $results[0]['name']);
+ $this->assertEquals('foo2', $results[1]['name']);
+ $this->assertEquals('foobar', $results[2]['name']);
+
+ $tagManager->delete('tag1');
+ $tagManager->delete('tag2');
+
+ $this->logout();
+ \OC_User::deleteUser($userId);
+ }
+
function testMove() {
$file1 = 'folder';
$file2 = 'folder/bar';
@@ -452,13 +517,17 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertEquals(1, count($this->cache->getFolderContents('folder')));
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->cache) {
$this->cache->clear();
}
+
+ parent::tearDown();
}
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->storage = new \OC\Files\Storage\Temporary(array());
$this->storage2 = new \OC\Files\Storage\Temporary(array());
$this->cache = new \OC\Files\Cache\Cache($this->storage);
diff --git a/tests/lib/files/cache/changepropagator.php b/tests/lib/files/cache/changepropagator.php
index a52682cd086..89bd9dfe80a 100644
--- a/tests/lib/files/cache/changepropagator.php
+++ b/tests/lib/files/cache/changepropagator.php
@@ -12,7 +12,7 @@ use OC\Files\Filesystem;
use OC\Files\Storage\Temporary;
use OC\Files\View;
-class ChangePropagator extends \PHPUnit_Framework_TestCase {
+class ChangePropagator extends \Test\TestCase {
/**
* @var \OC\Files\Cache\ChangePropagator
*/
@@ -23,9 +23,11 @@ class ChangePropagator extends \PHPUnit_Framework_TestCase {
*/
private $view;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$storage = new Temporary(array());
- $root = '/' . uniqid();
+ $root = $this->getUniqueID('/');
Filesystem::mount($storage, array(), $root);
$this->view = new View($root);
$this->propagator = new \OC\Files\Cache\ChangePropagator($this->view);
diff --git a/tests/lib/files/cache/homecache.php b/tests/lib/files/cache/homecache.php
index 80dc54c9d19..7ebb053bcfa 100644
--- a/tests/lib/files/cache/homecache.php
+++ b/tests/lib/files/cache/homecache.php
@@ -43,7 +43,7 @@ class DummyUser extends \OC\User\User {
}
}
-class HomeCache extends \PHPUnit_Framework_TestCase {
+class HomeCache extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Home $storage
*/
@@ -59,7 +59,9 @@ class HomeCache extends \PHPUnit_Framework_TestCase {
*/
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->user = new DummyUser('foo', \OC_Helper::tmpFolder());
$this->storage = new \OC\Files\Storage\Home(array('user' => $this->user));
$this->cache = $this->storage->getCache();
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index 0a274631d1c..b44cf0a49df 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -8,7 +8,7 @@
namespace Test\Files\Cache;
-class Scanner extends \PHPUnit_Framework_TestCase {
+class Scanner extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage $storage
*/
@@ -24,16 +24,20 @@ class Scanner extends \PHPUnit_Framework_TestCase {
*/
private $cache;
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->storage = new \OC\Files\Storage\Temporary(array());
$this->scanner = new \OC\Files\Cache\Scanner($this->storage);
$this->cache = new \OC\Files\Cache\Cache($this->storage);
}
- function tearDown() {
+ protected function tearDown() {
if ($this->cache) {
$this->cache->clear();
}
+
+ parent::tearDown();
}
function testFile() {
diff --git a/tests/lib/files/cache/updater.php b/tests/lib/files/cache/updater.php
index 96b4207ad43..01b036de5d8 100644
--- a/tests/lib/files/cache/updater.php
+++ b/tests/lib/files/cache/updater.php
@@ -12,7 +12,7 @@ use OC\Files\Filesystem;
use OC\Files\Storage\Temporary;
use OC\Files\View;
-class Updater extends \PHPUnit_Framework_TestCase {
+class Updater extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage
*/
@@ -33,7 +33,14 @@ class Updater extends \PHPUnit_Framework_TestCase {
*/
protected $updater;
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = Filesystem::getStorage('/');
+
$this->storage = new Temporary(array());
Filesystem::clearMounts();
Filesystem::mount($this->storage, array(), '/');
@@ -42,6 +49,13 @@ class Updater extends \PHPUnit_Framework_TestCase {
$this->cache = $this->storage->getCache();
}
+ protected function tearDown() {
+ Filesystem::clearMounts();
+ Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
+ }
+
public function testNewFile() {
$this->storage->file_put_contents('foo.txt', 'bar');
$this->assertFalse($this->cache->inCache('foo.txt'));
diff --git a/tests/lib/files/cache/updaterlegacy.php b/tests/lib/files/cache/updaterlegacy.php
index c80c3168ad6..7cf4dc6df5f 100644
--- a/tests/lib/files/cache/updaterlegacy.php
+++ b/tests/lib/files/cache/updaterlegacy.php
@@ -11,7 +11,7 @@ namespace Test\Files\Cache;
use \OC\Files\Filesystem as Filesystem;
use OC\Files\Storage\Temporary;
-class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
+class UpdaterLegacy extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage $storage
*/
@@ -29,9 +29,13 @@ class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
*/
private $cache;
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
private static $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
// remember files_encryption state
$this->stateFilesEncryption = \OC_App::isEnabled('files_encryption');
@@ -51,15 +55,16 @@ class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
$this->scanner->scan('');
$this->cache = $this->storage->getCache();
- \OC\Files\Filesystem::tearDown();
+ $this->originalStorage = Filesystem::getStorage('/');
+ Filesystem::tearDown();
if (!self::$user) {
- self::$user = uniqid();
+ self::$user = $this->getUniqueID();
}
\OC_User::createUser(self::$user, 'password');
\OC_User::setUserId(self::$user);
- \OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files');
+ Filesystem::init(self::$user, '/' . self::$user . '/files');
Filesystem::clearMounts();
Filesystem::mount($this->storage, array(), '/' . self::$user . '/files');
@@ -67,17 +72,20 @@ class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
\OC_Hook::clear('OC_Filesystem');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->cache) {
$this->cache->clear();
}
$result = \OC_User::deleteUser(self::$user);
$this->assertTrue($result);
Filesystem::tearDown();
+ Filesystem::mount($this->originalStorage, array(), '/');
// reset app files_encryption
if ($this->stateFilesEncryption) {
\OC_App::enable('files_encryption');
}
+
+ parent::tearDown();
}
public function testWrite() {
diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php
index 22c11b9a4e0..ee605c64e01 100644
--- a/tests/lib/files/cache/watcher.php
+++ b/tests/lib/files/cache/watcher.php
@@ -8,23 +8,34 @@
namespace Test\Files\Cache;
-class Watcher extends \PHPUnit_Framework_TestCase {
+class Watcher extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage[] $storages
*/
private $storages = array();
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
}
- public function tearDown() {
+ protected function tearDown() {
foreach ($this->storages as $storage) {
$cache = $storage->getCache();
$ids = $cache->getAll();
$cache->clear();
}
+
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
/**
diff --git a/tests/lib/files/cache/wrapper/cachejail.php b/tests/lib/files/cache/wrapper/cachejail.php
new file mode 100644
index 00000000000..13f3dc8858e
--- /dev/null
+++ b/tests/lib/files/cache/wrapper/cachejail.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache\Wrapper;
+
+use Test\Files\Cache\Cache;
+
+class CacheJail extends Cache {
+ /**
+ * @var \OC\Files\Cache\Cache $sourceCache
+ */
+ protected $sourceCache;
+
+ public function setUp() {
+ parent::setUp();
+ $this->storage->mkdir('foo');
+ $this->sourceCache = $this->cache;
+ $this->cache = new \OC\Files\Cache\Wrapper\CacheJail($this->sourceCache, 'foo');
+ }
+
+ function testSearchOutsideJail() {
+ $file1 = 'foo/foobar';
+ $file2 = 'folder/foobar';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+
+ $this->sourceCache->put($file1, $data1);
+ $this->sourceCache->put($file2, $data1);
+
+ $this->assertCount(2, $this->sourceCache->search('%foobar'));
+
+ $result = $this->cache->search('%foobar%');
+ $this->assertCount(1, $result);
+ $this->assertEquals('foobar', $result[0]['path']);
+ }
+
+ function testClearKeepEntriesOutsideJail() {
+ $file1 = 'foo/foobar';
+ $file2 = 'foo/foobar/asd';
+ $file3 = 'folder/foobar';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
+
+ $this->sourceCache->put('foo', $data1);
+ $this->sourceCache->put($file1, $data1);
+ $this->sourceCache->put($file2, $data1);
+ $this->sourceCache->put($file3, $data1);
+
+ $this->cache->clear();
+
+ $this->assertFalse($this->cache->inCache('foobar'));
+ $this->assertTrue($this->sourceCache->inCache('folder/foobar'));
+ }
+
+ function testGetById() {
+ //not supported
+ $this->assertTrue(true);
+ }
+
+ function testGetIncomplete() {
+ //not supported
+ $this->assertTrue(true);
+ }
+}
diff --git a/tests/lib/files/cache/wrapper/cachepermissionsmask.php b/tests/lib/files/cache/wrapper/cachepermissionsmask.php
new file mode 100644
index 00000000000..72fd22741d3
--- /dev/null
+++ b/tests/lib/files/cache/wrapper/cachepermissionsmask.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache\Wrapper;
+
+use OCP\Constants;
+use Test\Files\Cache\Cache;
+
+class CachePermissionsMask extends Cache {
+ /**
+ * @var \OC\Files\Cache\Cache $sourceCache
+ */
+ protected $sourceCache;
+
+ public function setUp() {
+ parent::setUp();
+ $this->storage->mkdir('foo');
+ $this->sourceCache = $this->cache;
+ $this->cache = $this->getMaskedCached(Constants::PERMISSION_ALL);
+ }
+
+ protected function getMaskedCached($mask) {
+ return new \OC\Files\Cache\Wrapper\CachePermissionsMask($this->sourceCache, $mask);
+ }
+
+ public function maskProvider() {
+ return array(
+ array(Constants::PERMISSION_ALL),
+ array(Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE),
+ array(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE),
+ array(Constants::PERMISSION_READ)
+ );
+ }
+
+ /**
+ * @dataProvider maskProvider
+ * @param int $mask
+ */
+ public function testGetMasked($mask) {
+ $cache = $this->getMaskedCached($mask);
+ $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain', 'permissions' => Constants::PERMISSION_ALL);
+ $this->sourceCache->put('foo', $data);
+ $result = $cache->get('foo');
+ $this->assertEquals($mask, $result['permissions']);
+
+ $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain', 'permissions' => Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE);
+ $this->sourceCache->put('bar', $data);
+ $result = $cache->get('bar');
+ $this->assertEquals($mask & ~Constants::PERMISSION_DELETE, $result['permissions']);
+ }
+
+ /**
+ * @dataProvider maskProvider
+ * @param int $mask
+ */
+ public function testGetFolderContentMasked($mask) {
+ $this->storage->mkdir('foo');
+ $this->storage->file_put_contents('foo/bar', 'asd');
+ $this->storage->file_put_contents('foo/asd', 'bar');
+ $this->storage->getScanner()->scan('');
+
+ $cache = $this->getMaskedCached($mask);
+ $files = $cache->getFolderContents('foo');
+ $this->assertCount(2, $files);
+
+ foreach ($files as $file) {
+ $this->assertEquals($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
+ }
+ }
+
+ /**
+ * @dataProvider maskProvider
+ * @param int $mask
+ */
+ public function testSearchMasked($mask) {
+ $this->storage->mkdir('foo');
+ $this->storage->file_put_contents('foo/bar', 'asd');
+ $this->storage->file_put_contents('foo/foobar', 'bar');
+ $this->storage->getScanner()->scan('');
+
+ $cache = $this->getMaskedCached($mask);
+ $files = $cache->search('%bar');
+ $this->assertCount(2, $files);
+
+ foreach ($files as $file) {
+ $this->assertEquals($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
+ }
+ }
+}
diff --git a/tests/lib/files/etagtest.php b/tests/lib/files/etagtest.php
index b5dec107e79..eec24d9f4c6 100644
--- a/tests/lib/files/etagtest.php
+++ b/tests/lib/files/etagtest.php
@@ -11,7 +11,7 @@ namespace Test\Files;
use OC\Files\Filesystem;
use OCP\Share;
-class EtagTest extends \PHPUnit_Framework_TestCase {
+class EtagTest extends \Test\TestCase {
private $datadir;
private $tmpDir;
@@ -23,7 +23,12 @@ class EtagTest extends \PHPUnit_Framework_TestCase {
*/
private $userBackend;
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
\OC_Hook::clear('OC_Filesystem', 'setup');
\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
\OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
@@ -37,17 +42,21 @@ class EtagTest extends \PHPUnit_Framework_TestCase {
$this->userBackend = new \OC_User_Dummy();
\OC_User::useBackend($this->userBackend);
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC_Util::tearDownFS();
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Config::setValue('datadirectory', $this->datadir);
\OC_User::setUserId($this->uid);
\OC_Util::setupFS($this->uid);
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
public function testNewUser() {
- $user1 = uniqid('user_');
+ $user1 = $this->getUniqueID('user_');
$this->userBackend->createUser($user1, '');
\OC_Util::tearDownFS();
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
index 930a252bcb2..1b84db0fc0d 100644
--- a/tests/lib/files/filesystem.php
+++ b/tests/lib/files/filesystem.php
@@ -22,12 +22,15 @@
namespace Test\Files;
-class Filesystem extends \PHPUnit_Framework_TestCase {
+class Filesystem extends \Test\TestCase {
/**
* @var array tmpDirs
*/
private $tmpDirs = array();
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
/**
* @return array
*/
@@ -37,17 +40,23 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
return array('datadir' => $dir);
}
- public function tearDown() {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+ \OC_User::setUserId('');
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ protected function tearDown() {
foreach ($this->tmpDirs as $dir) {
\OC_Helper::rmdirr($dir);
}
\OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
\OC_User::setUserId('');
- }
- public function setUp() {
- \OC_User::setUserId('');
- \OC\Files\Filesystem::clearMounts();
+ parent::tearDown();
}
public function testMount() {
@@ -68,78 +77,119 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
$this->assertEquals('folder', $internalPath);
}
- public function testNormalize() {
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath(''));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('/'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('/', false));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('//'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('//', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('/path/'));
- $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('/path/', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('path'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo//bar/'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo//bar/', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo////bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/////bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/./'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/bar/./', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/./.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/././'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/bar/././', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/./bar/'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/./bar/', false));
- $this->assertEquals('/foo/.bar', \OC\Files\Filesystem::normalizePath('/foo/.bar/'));
- $this->assertEquals('/foo/.bar/', \OC\Files\Filesystem::normalizePath('/foo/.bar/', false));
- $this->assertEquals('/foo/.bar/tee', \OC\Files\Filesystem::normalizePath('/foo/.bar/tee'));
-
- // normalize does not resolve '..' (by design)
- $this->assertEquals('/foo/..', \OC\Files\Filesystem::normalizePath('/foo/../'));
-
- if (class_exists('Patchwork\PHP\Shim\Normalizer')) {
- $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88"));
+ public function normalizePathData() {
+ return array(
+ array('/', ''),
+ array('/', '/'),
+ array('/', '//'),
+ array('/', '/', false),
+ array('/', '//', false),
+
+ array('/path', '/path/'),
+ array('/path/', '/path/', false),
+ array('/path', 'path'),
+
+ array('/foo/bar', '/foo//bar/'),
+ array('/foo/bar/', '/foo//bar/', false),
+ array('/foo/bar', '/foo////bar'),
+ array('/foo/bar', '/foo/////bar'),
+ array('/foo/bar', '/foo/bar/.'),
+ array('/foo/bar', '/foo/bar/./'),
+ array('/foo/bar/', '/foo/bar/./', false),
+ array('/foo/bar', '/foo/bar/./.'),
+ array('/foo/bar', '/foo/bar/././'),
+ array('/foo/bar/', '/foo/bar/././', false),
+ array('/foo/bar', '/foo/./bar/'),
+ array('/foo/bar/', '/foo/./bar/', false),
+ array('/foo/.bar', '/foo/.bar/'),
+ array('/foo/.bar/', '/foo/.bar/', false),
+ array('/foo/.bar/tee', '/foo/.bar/tee'),
+
+ // Windows paths
+ array('/', ''),
+ array('/', '\\'),
+ array('/', '\\', false),
+ array('/', '\\\\'),
+ array('/', '\\\\', false),
+
+ array('/path', '\\path'),
+ array('/path', '\\path', false),
+ array('/path', '\\path\\'),
+ array('/path/', '\\path\\', false),
+
+ array('/foo/bar', '\\foo\\\\bar\\'),
+ array('/foo/bar/', '\\foo\\\\bar\\', false),
+ array('/foo/bar', '\\foo\\\\\\\\bar'),
+ array('/foo/bar', '\\foo\\\\\\\\\\bar'),
+ array('/foo/bar', '\\foo\\bar\\.'),
+ array('/foo/bar', '\\foo\\bar\\.\\'),
+ array('/foo/bar/', '\\foo\\bar\\.\\', false),
+ array('/foo/bar', '\\foo\\bar\\.\\.'),
+ array('/foo/bar', '\\foo\\bar\\.\\.\\'),
+ array('/foo/bar/', '\\foo\\bar\\.\\.\\', false),
+ array('/foo/bar', '\\foo\\.\\bar\\'),
+ array('/foo/bar/', '\\foo\\.\\bar\\', false),
+ array('/foo/.bar', '\\foo\\.bar\\'),
+ array('/foo/.bar/', '\\foo\\.bar\\', false),
+ array('/foo/.bar/tee', '\\foo\\.bar\\tee'),
+
+ // Absolute windows paths NOT marked as absolute
+ array('/C:', 'C:\\'),
+ array('/C:/', 'C:\\', false),
+ array('/C:/tests', 'C:\\tests'),
+ array('/C:/tests', 'C:\\tests', false),
+ array('/C:/tests', 'C:\\tests\\'),
+ array('/C:/tests/', 'C:\\tests\\', false),
+
+ // normalize does not resolve '..' (by design)
+ array('/foo/..', '/foo/../'),
+ array('/foo/..', '\\foo\\..\\'),
+ );
+ }
+
+ /**
+ * @dataProvider normalizePathData
+ */
+ public function testNormalizePath($expected, $path, $stripTrailingSlash = true) {
+ $this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash));
+ }
+
+ public function normalizePathWindowsAbsolutePathData() {
+ return array(
+ array('C:/', 'C:\\'),
+ array('C:/', 'C:\\', false),
+ array('C:/tests', 'C:\\tests'),
+ array('C:/tests', 'C:\\tests', false),
+ array('C:/tests', 'C:\\tests\\'),
+ array('C:/tests/', 'C:\\tests\\', false),
+ );
+ }
+
+ /**
+ * @dataProvider normalizePathWindowsAbsolutePathData
+ */
+ public function testNormalizePathWindowsAbsolutePath($expected, $path, $stripTrailingSlash = true) {
+ if (!\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('This test is Windows only');
}
+
+ $this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash, true));
}
- public function testNormalizeWindowsPaths() {
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath(''));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\', false));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\\\'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\\\', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path'));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path\\'));
- $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('\\path\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\bar\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\\\bar\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\\\\\bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\\\\\\\bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\.\\bar\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\.\\bar\\', false));
- $this->assertEquals('/foo/.bar', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\'));
- $this->assertEquals('/foo/.bar/', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\', false));
- $this->assertEquals('/foo/.bar/tee', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\tee'));
-
- // normalize does not resolve '..' (by design)
- $this->assertEquals('/foo/..', \OC\Files\Filesystem::normalizePath('\\foo\\..\\'));
-
- if (class_exists('Patchwork\PHP\Shim\Normalizer')) {
- $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("\\foo\\baru\xCC\x88"));
+ public function testNormalizePathUTF8() {
+ if (!class_exists('Patchwork\PHP\Shim\Normalizer')) {
+ $this->markTestSkipped('UTF8 normalizer Patchwork was not found');
}
+
+ $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88"));
+ $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("\\foo\\baru\xCC\x88"));
}
public function testHooks() {
if (\OC\Files\Filesystem::getView()) {
$user = \OC_User::getUser();
} else {
- $user = uniqid();
+ $user = $this->getUniqueID();
\OC\Files\Filesystem::init($user, '/' . $user . '/files');
}
\OC_Hook::clear('OC_Filesystem');
@@ -167,7 +217,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
*/
public function testLocalMountWhenUserDoesNotExist() {
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
\OC\Files\Filesystem::initMountPoints($userId);
@@ -181,7 +231,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
* Tests that the home storage is used for the user's mount point
*/
public function testHomeMount() {
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
\OC_User::createUser($userId, $userId);
@@ -201,7 +251,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
*/
public function testLegacyHomeMount() {
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
// insert storage into DB by constructing it
// to make initMountsPoint find its existence
@@ -231,7 +281,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
* Test that the default cache dir is part of the user's home
*/
public function testMountDefaultCacheDir() {
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
$oldCachePath = \OC_Config::getValue('cache_path', '');
// no cache path configured
\OC_Config::setValue('cache_path', '');
@@ -256,7 +306,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
* the user's home
*/
public function testMountExternalCacheDir() {
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
$oldCachePath = \OC_Config::getValue('cache_path', '');
// set cache path to temp dir
diff --git a/tests/lib/files/mapper.php b/tests/lib/files/mapper.php
index d513f3ce4b3..18161734b60 100644
--- a/tests/lib/files/mapper.php
+++ b/tests/lib/files/mapper.php
@@ -22,14 +22,15 @@
namespace Test\Files;
-class Mapper extends \PHPUnit_Framework_TestCase {
+class Mapper extends \Test\TestCase {
/**
* @var \OC\Files\Mapper
*/
private $mapper = null;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->mapper = new \OC\Files\Mapper('D:/');
}
diff --git a/tests/lib/files/mount/manager.php b/tests/lib/files/mount/manager.php
index 154c35ccead..78322b47d50 100644
--- a/tests/lib/files/mount/manager.php
+++ b/tests/lib/files/mount/manager.php
@@ -16,46 +16,47 @@ class LongId extends Temporary {
}
}
-class Manager extends \PHPUnit_Framework_TestCase {
+class Manager extends \Test\TestCase {
/**
* @var \OC\Files\Mount\Manager
*/
private $manager;
- public function setup() {
+ protected function setup() {
+ parent::setUp();
$this->manager = new \OC\Files\Mount\Manager();
}
public function testFind() {
$this->assertNull($this->manager->find('/'));
- $rootMount = new \OC\Files\Mount\Mount(new Temporary(array()), '/');
+ $rootMount = new \OC\Files\Mount\MountPoint(new Temporary(array()), '/');
$this->manager->addMount($rootMount);
$this->assertEquals($rootMount, $this->manager->find('/'));
$this->assertEquals($rootMount, $this->manager->find('/foo/bar'));
$storage = new Temporary(array());
- $mount1 = new \OC\Files\Mount\Mount($storage, '/foo');
+ $mount1 = new \OC\Files\Mount\MountPoint($storage, '/foo');
$this->manager->addMount($mount1);
$this->assertEquals($rootMount, $this->manager->find('/'));
$this->assertEquals($mount1, $this->manager->find('/foo/bar'));
$this->assertEquals(1, count($this->manager->findIn('/')));
- $mount2 = new \OC\Files\Mount\Mount(new Temporary(array()), '/bar');
+ $mount2 = new \OC\Files\Mount\MountPoint(new Temporary(array()), '/bar');
$this->manager->addMount($mount2);
$this->assertEquals(2, count($this->manager->findIn('/')));
$id = $mount1->getStorageId();
$this->assertEquals(array($mount1), $this->manager->findByStorageId($id));
- $mount3 = new \OC\Files\Mount\Mount($storage, '/foo/bar');
+ $mount3 = new \OC\Files\Mount\MountPoint($storage, '/foo/bar');
$this->manager->addMount($mount3);
$this->assertEquals(array($mount1, $mount3), $this->manager->findByStorageId($id));
}
public function testLong() {
$storage = new LongId(array());
- $mount = new \OC\Files\Mount\Mount($storage, '/foo');
+ $mount = new \OC\Files\Mount\MountPoint($storage, '/foo');
$this->manager->addMount($mount);
$id = $mount->getStorageId();
diff --git a/tests/lib/files/mount/mount.php b/tests/lib/files/mount/mount.php
index c3d33e0870b..584766de836 100644
--- a/tests/lib/files/mount/mount.php
+++ b/tests/lib/files/mount/mount.php
@@ -9,20 +9,20 @@
namespace Test\Files\Mount;
-use OC\Files\Storage\Loader;
+use OC\Files\Storage\StorageFactory;
use OC\Files\Storage\Wrapper\Wrapper;
-class Mount extends \PHPUnit_Framework_TestCase {
+class Mount extends \Test\TestCase {
public function testFromStorageObject() {
$storage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
->disableOriginalConstructor()
->getMock();
- $mount = new \OC\Files\Mount\Mount($storage, '/foo');
+ $mount = new \OC\Files\Mount\MountPoint($storage, '/foo');
$this->assertInstanceOf('\OC\Files\Storage\Temporary', $mount->getStorage());
}
public function testFromStorageClassname() {
- $mount = new \OC\Files\Mount\Mount('\OC\Files\Storage\Temporary', '/foo');
+ $mount = new \OC\Files\Mount\MountPoint('\OC\Files\Storage\Temporary', '/foo');
$this->assertInstanceOf('\OC\Files\Storage\Temporary', $mount->getStorage());
}
@@ -34,13 +34,13 @@ class Mount extends \PHPUnit_Framework_TestCase {
return new Wrapper(array('storage' => $storage));
};
- $loader = new Loader();
+ $loader = new StorageFactory();
$loader->addStorageWrapper('test_wrapper', $wrapper);
$storage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
->disableOriginalConstructor()
->getMock();
- $mount = new \OC\Files\Mount\Mount($storage, '/foo', array(), $loader);
+ $mount = new \OC\Files\Mount\MountPoint($storage, '/foo', array(), $loader);
$this->assertInstanceOf('\OC\Files\Storage\Wrapper\Wrapper', $mount->getStorage());
}
}
diff --git a/tests/lib/files/node/file.php b/tests/lib/files/node/file.php
index 76938a0dcc8..e3b8019b4ca 100644
--- a/tests/lib/files/node/file.php
+++ b/tests/lib/files/node/file.php
@@ -8,17 +8,23 @@
namespace Test\Files\Node;
+use OC\Files\FileInfo;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OC\Files\View;
-class File extends \PHPUnit_Framework_TestCase {
+class File extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data, null);
+ }
+
public function testDelete() {
$manager = $this->getMock('\OC\Files\Mount\Manager');
@@ -38,7 +44,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('unlink')
@@ -88,7 +94,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$view->expects($this->once())
->method('unlink')
@@ -123,7 +129,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->delete();
@@ -155,7 +161,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals('bar', $node->getContent());
@@ -179,7 +185,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => 0)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => 0))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->getContent();
@@ -200,7 +206,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('file_put_contents')
@@ -225,7 +231,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->putContent('bar');
@@ -240,9 +246,9 @@ class File extends \PHPUnit_Framework_TestCase {
$root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
$view->expects($this->once())
- ->method('getMimeType')
+ ->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue('text/plain'));
+ ->will($this->returnValue($this->getFileInfo(array('mimetype' => 'text/plain'))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals('text/plain', $node->getMimeType());
@@ -278,7 +284,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$fh = $node->fopen('r');
@@ -315,7 +321,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$fh = $node->fopen('w');
@@ -347,7 +353,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => 0)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => 0))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->fopen('r');
@@ -374,7 +380,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_UPDATE)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_UPDATE))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->fopen('w');
@@ -401,7 +407,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->fopen('w');
@@ -424,7 +430,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL, 'fileid' => 3)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$parentNode = new \OC\Files\Node\Folder($root, $view, '/bar');
@@ -468,7 +474,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ, 'fileid' => 3)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$parentNode = new \OC\Files\Node\Folder($root, $view, '/bar');
@@ -555,7 +561,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$parentNode = new \OC\Files\Node\Folder($root, $view, '/bar');
@@ -586,7 +592,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$view->expects($this->never())
->method('rename');
diff --git a/tests/lib/files/node/folder.php b/tests/lib/files/node/folder.php
index 436161aba72..bcd9cc93b5e 100644
--- a/tests/lib/files/node/folder.php
+++ b/tests/lib/files/node/folder.php
@@ -9,19 +9,25 @@
namespace Test\Files\Node;
use OC\Files\Cache\Cache;
-use OC\Files\Mount\Mount;
+use OC\Files\FileInfo;
+use OC\Files\Mount\MountPoint;
use OC\Files\Node\Node;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OC\Files\View;
-class Folder extends \PHPUnit_Framework_TestCase {
+class Folder extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data, null);
+ }
+
public function testDelete() {
$manager = $this->getMock('\OC\Files\Mount\Manager');
/**
@@ -38,7 +44,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('rmdir')
@@ -86,7 +92,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$view->expects($this->once())
->method('rmdir')
@@ -120,7 +126,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
$node->delete();
@@ -254,7 +260,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('mkdir')
@@ -284,7 +290,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
$node->newFolder('asd');
@@ -304,7 +310,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('touch')
@@ -334,7 +340,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
$node->newFile('asd');
@@ -399,6 +405,45 @@ class Folder extends \PHPUnit_Framework_TestCase {
$this->assertEquals('/bar/foo/qwerty', $result[0]->getPath());
}
+ public function testSearchByTag() {
+ $manager = $this->getMock('\OC\Files\Mount\Manager');
+ /**
+ * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
+ */
+ $view = $this->getMock('\OC\Files\View');
+ $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $root->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue($this->user));
+ $storage = $this->getMock('\OC\Files\Storage\Storage');
+ $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+
+ $storage->expects($this->once())
+ ->method('getCache')
+ ->will($this->returnValue($cache));
+
+ $cache->expects($this->once())
+ ->method('searchByTag')
+ ->with('tag1', 'user1')
+ ->will($this->returnValue(array(
+ array('fileid' => 3, 'path' => 'foo/qwerty', 'name' => 'qwerty', 'size' => 200, 'mtime' => 55, 'mimetype' => 'text/plain')
+ )));
+
+ $root->expects($this->once())
+ ->method('getMountsIn')
+ ->with('/bar/foo')
+ ->will($this->returnValue(array()));
+
+ $view->expects($this->once())
+ ->method('resolvePath')
+ ->will($this->returnValue(array($storage, 'foo')));
+
+ $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
+ $result = $node->searchByTag('tag1', 'user1');
+ $this->assertEquals(1, count($result));
+ $this->assertEquals('/bar/foo/qwerty', $result[0]->getPath());
+ }
+
public function testSearchSubStorages() {
$manager = $this->getMock('\OC\Files\Mount\Manager');
/**
@@ -413,7 +458,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$subCache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$subStorage = $this->getMock('\OC\Files\Storage\Storage');
- $subMount = $this->getMock('\OC\Files\Mount\Mount', array(), array(null, ''));
+ $subMount = $this->getMock('\OC\Files\Mount\MountPoint', array(), array(null, ''));
$subMount->expects($this->once())
->method('getStorage')
@@ -481,7 +526,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
->method('getUser')
->will($this->returnValue($this->user));
$storage = $this->getMock('\OC\Files\Storage\Storage');
- $mount = new Mount($storage, '/bar');
+ $mount = new MountPoint($storage, '/bar');
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$view->expects($this->once())
@@ -524,7 +569,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
->method('getUser')
->will($this->returnValue($this->user));
$storage = $this->getMock('\OC\Files\Storage\Storage');
- $mount = new Mount($storage, '/bar');
+ $mount = new MountPoint($storage, '/bar');
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$storage->expects($this->once())
@@ -562,8 +607,8 @@ class Folder extends \PHPUnit_Framework_TestCase {
->method('getUser')
->will($this->returnValue($this->user));
$storage = $this->getMock('\OC\Files\Storage\Storage');
- $mount1 = new Mount($storage, '/bar');
- $mount2 = new Mount($storage, '/bar/foo/asd');
+ $mount1 = new MountPoint($storage, '/bar');
+ $mount2 = new MountPoint($storage, '/bar/foo/asd');
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$view->expects($this->any())
diff --git a/tests/lib/files/node/integration.php b/tests/lib/files/node/integration.php
index 319f2f9f5f7..d8c180cc844 100644
--- a/tests/lib/files/node/integration.php
+++ b/tests/lib/files/node/integration.php
@@ -14,12 +14,15 @@ use OC\Files\Storage\Temporary;
use OC\Files\View;
use OC\User\User;
-class IntegrationTests extends \PHPUnit_Framework_TestCase {
+class IntegrationTests extends \Test\TestCase {
/**
* @var \OC\Files\Node\Root $root
*/
private $root;
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
/**
* @var \OC\Files\Storage\Storage[]
*/
@@ -30,7 +33,10 @@ class IntegrationTests extends \PHPUnit_Framework_TestCase {
*/
private $view;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::init('', '');
\OC\Files\Filesystem::clearMounts();
$manager = \OC\Files\Filesystem::getMountManager();
@@ -42,7 +48,7 @@ class IntegrationTests extends \PHPUnit_Framework_TestCase {
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
\OC_Hook::connect('OC_Filesystem', 'post_touch', '\OC\Files\Cache\Updater', 'touchHook');
- $user = new User(uniqid('user'), new \OC_User_Dummy);
+ $user = new User($this->getUniqueID('user'), new \OC_User_Dummy);
\OC_User::setUserId($user->getUID());
$this->view = new View();
$this->root = new Root($manager, $this->view, $user);
@@ -54,11 +60,14 @@ class IntegrationTests extends \PHPUnit_Framework_TestCase {
$this->root->mount($subStorage, '/substorage/');
}
- public function tearDown() {
+ protected function tearDown() {
foreach ($this->storages as $storage) {
$storage->getCache()->clear();
}
\OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
public function testBasicFile() {
diff --git a/tests/lib/files/node/node.php b/tests/lib/files/node/node.php
index cf5fec30522..49a2006c767 100644
--- a/tests/lib/files/node/node.php
+++ b/tests/lib/files/node/node.php
@@ -8,13 +8,20 @@
namespace Test\Files\Node;
-class Node extends \PHPUnit_Framework_TestCase {
+use OC\Files\FileInfo;
+
+class Node extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data, null);
+ }
+
public function testStat() {
$manager = $this->getMock('\OC\Files\Mount\Manager');
/**
@@ -54,12 +61,12 @@ class Node extends \PHPUnit_Framework_TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $stat = array(
+ $stat = $this->getFileInfo(array(
'fileid' => 1,
'size' => 100,
'etag' => 'qwerty',
'mtime' => 50
- );
+ ));
$view->expects($this->once())
->method('getFileInfo')
@@ -81,10 +88,18 @@ class Node extends \PHPUnit_Framework_TestCase {
->method('getUser')
->will($this->returnValue($this->user));
+
+ $stat = $this->getFileInfo(array(
+ 'fileid' => 1,
+ 'size' => 100,
+ 'etag' => 'qwerty',
+ 'mtime' => 50
+ ));
+
$view->expects($this->once())
- ->method('filesize')
+ ->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(100));
+ ->will($this->returnValue($stat));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals(100, $node->getSize());
@@ -101,12 +116,12 @@ class Node extends \PHPUnit_Framework_TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $stat = array(
+ $stat = $this->getFileInfo(array(
'fileid' => 1,
'size' => 100,
'etag' => 'qwerty',
'mtime' => 50
- );
+ ));
$view->expects($this->once())
->method('getFileInfo')
@@ -127,15 +142,18 @@ class Node extends \PHPUnit_Framework_TestCase {
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- /**
- * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
- */
- $storage = $this->getMock('\OC\Files\Storage\Storage');
+
+ $stat = $this->getFileInfo(array(
+ 'fileid' => 1,
+ 'size' => 100,
+ 'etag' => 'qwerty',
+ 'mtime' => 50
+ ));
$view->expects($this->once())
- ->method('filemtime')
+ ->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(50));
+ ->will($this->returnValue($stat));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals(50, $node->getMTime());
@@ -238,14 +256,9 @@ class Node extends \PHPUnit_Framework_TestCase {
->will($this->returnValue(true));
$view->expects($this->once())
- ->method('filemtime')
- ->with('/bar/foo')
- ->will($this->returnValue(100));
-
- $view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\Node($root, $view, '/bar/foo');
$node->touch(100);
@@ -298,7 +311,7 @@ class Node extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\Node($root, $view, '/bar/foo');
$node->touch(100);
@@ -322,7 +335,7 @@ class Node extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Node($root, $view, '/bar/foo');
$node->touch(100);
diff --git a/tests/lib/files/node/root.php b/tests/lib/files/node/root.php
index 27f1a937826..a763428209c 100644
--- a/tests/lib/files/node/root.php
+++ b/tests/lib/files/node/root.php
@@ -8,16 +8,22 @@
namespace Test\Files\Node;
+use OC\Files\FileInfo;
use OCP\Files\NotPermittedException;
use OC\Files\Mount\Manager;
-class Root extends \PHPUnit_Framework_TestCase {
+class Root extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data, null);
+ }
+
public function testGet() {
$manager = new Manager();
/**
@@ -33,7 +39,7 @@ class Root extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('fileid' => 10, 'path' => 'bar/foo', 'name', 'mimetype' => 'text/plain')));
+ ->will($this->returnValue($this->getFileInfo(array('fileid' => 10, 'path' => 'bar/foo', 'name', 'mimetype' => 'text/plain'))));
$view->expects($this->once())
->method('is_dir')
diff --git a/tests/lib/files/objectstore/swift.php b/tests/lib/files/objectstore/swift.php
index 37d6cc74de6..30c60598277 100644
--- a/tests/lib/files/objectstore/swift.php
+++ b/tests/lib/files/objectstore/swift.php
@@ -30,9 +30,11 @@ class Swift extends \Test\Files\Storage\Storage {
private $objectStorage;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if (!getenv('RUN_OBJECTSTORE_TESTS')) {
- $this->markTestSkipped('objectstore tests are unreliable on travis');
+ $this->markTestSkipped('objectstore tests are unreliable in some environments');
}
\OC_App::disable('files_sharing');
@@ -74,19 +76,17 @@ class Swift extends \Test\Files\Storage\Storage {
$this->instance = new ObjectStoreStorage($params);
}
- public function tearDown() {
+ protected function tearDown() {
if (is_null($this->instance)) {
return;
}
$this->objectStorage->deleteContainer(true);
$this->instance->getCache()->clear();
+
+ parent::tearDown();
}
public function testStat() {
- // TODO travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('Fails on travis - connection times out sometimes');
- }
$textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$ctimeStart = time();
diff --git a/tests/lib/files/storage/commontest.php b/tests/lib/files/storage/commontest.php
index ce53c884f32..2b70dc8713e 100644
--- a/tests/lib/files/storage/commontest.php
+++ b/tests/lib/files/storage/commontest.php
@@ -27,12 +27,15 @@ class CommonTest extends Storage {
* @var string tmpDir
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir=\OC_Helper::tmpFolder();
$this->instance=new \OC\Files\Storage\CommonTest(array('datadir'=>$this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
}
diff --git a/tests/lib/files/storage/home.php b/tests/lib/files/storage/home.php
index 953fcfc8a6a..b0670a22892 100644
--- a/tests/lib/files/storage/home.php
+++ b/tests/lib/files/storage/home.php
@@ -60,22 +60,30 @@ class Home extends Storage {
*/
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
- $this->userId = uniqid('user_');
+ $this->userId = $this->getUniqueID('user_');
$this->user = new DummyUser($this->userId, $this->tmpDir);
$this->instance = new \OC\Files\Storage\Home(array('user' => $this->user));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
/**
* Tests that the root path matches the data dir
*/
public function testRoot() {
- $this->assertEquals($this->tmpDir, $this->instance->getLocalFolder(''));
+ if (\OC_Util::runningOnWindows()) {
+ // Windows removes trailing slashes when returning paths
+ $this->assertEquals(rtrim($this->tmpDir, '/'), $this->instance->getLocalFolder(''));
+ } else {
+ $this->assertEquals($this->tmpDir, $this->instance->getLocalFolder(''));
+ }
}
/**
diff --git a/tests/lib/files/storage/local.php b/tests/lib/files/storage/local.php
index 37462941d0c..d2b27117c3b 100644
--- a/tests/lib/files/storage/local.php
+++ b/tests/lib/files/storage/local.php
@@ -28,18 +28,21 @@ class Local extends Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
$this->instance = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
public function testStableEtag() {
if (\OC_Util::runningOnWindows()) {
- $this->markTestSkipped('On Windows platform we have no stable etag generation - yet');
+ $this->markTestSkipped('[Windows] On Windows platform we have no stable etag generation - yet');
}
$this->instance->file_put_contents('test.txt', 'foobar');
@@ -50,7 +53,7 @@ class Local extends Storage {
public function testEtagChange() {
if (\OC_Util::runningOnWindows()) {
- $this->markTestSkipped('On Windows platform we have no stable etag generation - yet');
+ $this->markTestSkipped('[Windows] On Windows platform we have no stable etag generation - yet');
}
$this->instance->file_put_contents('test.txt', 'foo');
diff --git a/tests/lib/files/storage/mappedlocal.php b/tests/lib/files/storage/mappedlocal.php
index b483f3a1954..1e87b53d00a 100644
--- a/tests/lib/files/storage/mappedlocal.php
+++ b/tests/lib/files/storage/mappedlocal.php
@@ -27,14 +27,17 @@ class MappedLocal extends Storage {
* @var string tmpDir
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir=\OC_Helper::tmpFolder();
$this->instance=new \OC\Files\Storage\MappedLocal(array('datadir'=>$this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
unset($this->instance);
+ parent::tearDown();
}
}
diff --git a/tests/lib/files/storage/mappedlocalwithdotteddatadir.php b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php
index d2e5e2e97af..3a733b7b469 100644
--- a/tests/lib/files/storage/mappedlocalwithdotteddatadir.php
+++ b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php
@@ -28,15 +28,18 @@ class MappedLocalWithDottedDataDir extends Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder().'dir.123'.DIRECTORY_SEPARATOR;
mkdir($this->tmpDir);
$this->instance=new \OC\Files\Storage\MappedLocal(array('datadir'=>$this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
unset($this->instance);
+ parent::tearDown();
}
}
diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php
index cf42523a5e2..30f403d60df 100644
--- a/tests/lib/files/storage/storage.php
+++ b/tests/lib/files/storage/storage.php
@@ -22,7 +22,7 @@
namespace Test\Files\Storage;
-abstract class Storage extends \PHPUnit_Framework_TestCase {
+abstract class Storage extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage instance
*/
@@ -340,10 +340,10 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
}
public function testTouchCreateFile() {
- $this->assertFalse($this->instance->file_exists('foo'));
+ $this->assertFalse($this->instance->file_exists('touch'));
// returns true on success
- $this->assertTrue($this->instance->touch('foo'));
- $this->assertTrue($this->instance->file_exists('foo'));
+ $this->assertTrue($this->instance->touch('touch'));
+ $this->assertTrue($this->instance->file_exists('touch'));
}
public function testRecursiveRmdir() {
diff --git a/tests/lib/files/storage/wrapper/jail.php b/tests/lib/files/storage/wrapper/jail.php
new file mode 100644
index 00000000000..270ce750ecf
--- /dev/null
+++ b/tests/lib/files/storage/wrapper/jail.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage\Wrapper;
+
+class Jail extends \Test\Files\Storage\Storage {
+ /**
+ * @var string tmpDir
+ */
+ private $tmpDir;
+
+ /**
+ * @var \OC\Files\Storage\Temporary
+ */
+ private $sourceStorage;
+
+ public function setUp() {
+ parent::setUp();
+ $this->sourceStorage = new \OC\Files\Storage\Temporary(array());
+ $this->sourceStorage->mkdir('foo');
+ $this->instance = new \OC\Files\Storage\Wrapper\Jail(array(
+ 'storage' => $this->sourceStorage,
+ 'root' => 'foo'
+ ));
+ }
+
+ public function tearDown() {
+ // test that nothing outside our jail is touched
+ $contents = array();
+ $dh = $this->sourceStorage->opendir('');
+ while ($file = readdir($dh)) {
+ if ($file !== '.' and $file !== '..') {
+ $contents[] = $file;
+ }
+ }
+ $this->assertEquals(array('foo'), $contents);
+ $this->sourceStorage->cleanUp();
+ parent::tearDown();
+ }
+
+ public function testMkDirRooted() {
+ $this->instance->mkdir('bar');
+ $this->assertTrue($this->sourceStorage->is_dir('foo/bar'));
+ }
+
+ public function testFilePutContentsRooted() {
+ $this->instance->file_put_contents('bar', 'asd');
+ $this->assertEquals('asd', $this->sourceStorage->file_get_contents('foo/bar'));
+ }
+}
diff --git a/tests/lib/files/storage/wrapper/permissionsmask.php b/tests/lib/files/storage/wrapper/permissionsmask.php
new file mode 100644
index 00000000000..7e8c387677c
--- /dev/null
+++ b/tests/lib/files/storage/wrapper/permissionsmask.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage\Wrapper;
+
+use OCP\Constants;
+
+class PermissionsMask extends \Test\Files\Storage\Storage {
+
+ /**
+ * @var \OC\Files\Storage\Temporary
+ */
+ private $sourceStorage;
+
+ public function setUp() {
+ parent::setUp();
+ $this->sourceStorage = new \OC\Files\Storage\Temporary(array());
+ $this->instance = $this->getMaskedStorage(Constants::PERMISSION_ALL);
+ }
+
+ public function tearDown() {
+ $this->sourceStorage->cleanUp();
+ parent::tearDown();
+ }
+
+ protected function getMaskedStorage($mask) {
+ return new \OC\Files\Storage\Wrapper\PermissionsMask(array(
+ 'storage' => $this->sourceStorage,
+ 'mask' => $mask
+ ));
+ }
+
+ public function testMkdirNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->mkdir('foo'));
+ $this->assertFalse($storage->file_exists('foo'));
+ }
+
+ public function testRmdirNoDelete() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE);
+ $this->assertTrue($storage->mkdir('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ $this->assertFalse($storage->rmdir('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ }
+
+ public function testTouchNewFileNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->touch('foo'));
+ $this->assertFalse($storage->file_exists('foo'));
+ }
+
+ public function testTouchNewFileNoUpdate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertTrue($storage->touch('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ }
+
+ public function testTouchExistingFileNoUpdate() {
+ $this->sourceStorage->touch('foo');
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertFalse($storage->touch('foo'));
+ }
+
+ public function testUnlinkNoDelete() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE);
+ $this->assertTrue($storage->touch('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ $this->assertFalse($storage->unlink('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ }
+
+ public function testPutContentsNewFileNoUpdate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertTrue($storage->file_put_contents('foo', 'bar'));
+ $this->assertEquals('bar', $storage->file_get_contents('foo'));
+ }
+
+ public function testPutContentsNewFileNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->file_put_contents('foo', 'bar'));
+ }
+
+ public function testPutContentsExistingFileNoUpdate() {
+ $this->sourceStorage->touch('foo');
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertFalse($storage->file_put_contents('foo', 'bar'));
+ }
+
+ public function testFopenExistingFileNoUpdate() {
+ $this->sourceStorage->touch('foo');
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertFalse($storage->fopen('foo', 'w'));
+ }
+
+ public function testFopenNewFileNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->fopen('foo', 'w'));
+ }
+}
diff --git a/tests/lib/files/storage/wrapper/quota.php b/tests/lib/files/storage/wrapper/quota.php
index 954fe199cc8..dc4de4697db 100644
--- a/tests/lib/files/storage/wrapper/quota.php
+++ b/tests/lib/files/storage/wrapper/quota.php
@@ -17,14 +17,17 @@ class Quota extends \Test\Files\Storage\Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
$storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
$this->instance = new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => 10000000));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
/**
@@ -133,7 +136,8 @@ class Quota extends \Test\Files\Storage\Storage {
$instance = $this->getLimitedStorage(9);
$stream = $instance->fopen('foo', 'w+');
$meta = stream_get_meta_data($stream);
- $this->assertEquals('user-space', $meta['wrapper_type']);
+ $expected_type = defined('HHVM_VERSION') ? 'File' : 'user-space';
+ $this->assertEquals($expected_type, $meta['wrapper_type']);
fclose($stream);
}
diff --git a/tests/lib/files/storage/wrapper/wrapper.php b/tests/lib/files/storage/wrapper/wrapper.php
index 8bcf42035d4..486cd0495c1 100644
--- a/tests/lib/files/storage/wrapper/wrapper.php
+++ b/tests/lib/files/storage/wrapper/wrapper.php
@@ -14,14 +14,17 @@ class Wrapper extends \Test\Files\Storage\Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
$storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
$this->instance = new \OC\Files\Storage\Wrapper\Wrapper(array('storage' => $storage));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
public function testInstanceOfStorageWrapper() {
diff --git a/tests/lib/files/stream/quota.php b/tests/lib/files/stream/quota.php
index d5edace544d..28584cf82db 100644
--- a/tests/lib/files/stream/quota.php
+++ b/tests/lib/files/stream/quota.php
@@ -8,9 +8,10 @@
namespace Test\Files\Stream;
-class Quota extends \PHPUnit_Framework_TestCase {
- public function tearDown() {
+class Quota extends \Test\TestCase {
+ protected function tearDown() {
\OC\Files\Stream\Quota::clear();
+ parent::tearDown();
}
/**
diff --git a/tests/lib/files/stream/staticstream.php b/tests/lib/files/stream/staticstream.php
index d55086196a0..416a4670efd 100644
--- a/tests/lib/files/stream/staticstream.php
+++ b/tests/lib/files/stream/staticstream.php
@@ -8,18 +8,20 @@
namespace Test\Files\Stream;
-class StaticStream extends \PHPUnit_Framework_TestCase {
+class StaticStream extends \Test\TestCase {
private $sourceFile;
private $sourceText;
- public function __construct() {
+ protected function setUp() {
+ parent::setUp();
$this->sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->sourceText = file_get_contents($this->sourceFile);
}
- public function tearDown() {
+ protected function tearDown() {
\OC\Files\Stream\StaticStream::clear();
+ parent::tearDown();
}
public function testContent() {
diff --git a/tests/lib/files/utils/scanner.php b/tests/lib/files/utils/scanner.php
index 27b9b8dd4f4..65ddfe47514 100644
--- a/tests/lib/files/utils/scanner.php
+++ b/tests/lib/files/utils/scanner.php
@@ -9,17 +9,17 @@
namespace Test\Files\Utils;
use OC\Files\Filesystem;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Temporary;
class TestScanner extends \OC\Files\Utils\Scanner {
/**
- * @var \OC\Files\Mount\Mount[] $mounts
+ * @var \OC\Files\Mount\MountPoint[] $mounts
*/
private $mounts = array();
/**
- * @param \OC\Files\Mount\Mount $mount
+ * @param \OC\Files\Mount\MountPoint $mount
*/
public function addMount($mount) {
$this->mounts[] = $mount;
@@ -38,10 +38,25 @@ class TestScanner extends \OC\Files\Utils\Scanner {
}
}
-class Scanner extends \PHPUnit_Framework_TestCase {
+class Scanner extends \Test\TestCase {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+ }
+
+ protected function tearDown() {
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
+ }
+
public function testReuseExistingRoot() {
$storage = new Temporary(array());
- $mount = new Mount($storage, '');
+ $mount = new MountPoint($storage, '');
Filesystem::getMountManager()->addMount($mount);
$cache = $storage->getCache();
@@ -63,7 +78,7 @@ class Scanner extends \PHPUnit_Framework_TestCase {
public function testReuseExistingFile() {
$storage = new Temporary(array());
- $mount = new Mount($storage, '');
+ $mount = new MountPoint($storage, '');
Filesystem::getMountManager()->addMount($mount);
$cache = $storage->getCache();
@@ -90,7 +105,7 @@ class Scanner extends \PHPUnit_Framework_TestCase {
$propagator = $this->getMock('\OC\Files\Cache\ChangePropagator', array('propagateChanges'), array(), '', false);
$storage = new Temporary(array());
- $mount = new Mount($storage, '/foo');
+ $mount = new MountPoint($storage, '/foo');
Filesystem::getMountManager()->addMount($mount);
$cache = $storage->getCache();
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 5f030f29fa7..25065967260 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -8,6 +8,7 @@
namespace Test\Files;
use OC\Files\Cache\Watcher;
+use OC\Files\Storage\Temporary;
class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
public function touch($path, $mtime = null) {
@@ -15,16 +16,22 @@ class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
}
}
-class View extends \PHPUnit_Framework_TestCase {
+class View extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage[] $storages
*/
private $storages = array();
private $user;
+ /** @var \OC\Files\Storage\Storage */
private $tempStorage;
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
\OC_User::clearBackends();
\OC_User::useBackend(new \OC_User_Dummy());
@@ -33,12 +40,13 @@ class View extends \PHPUnit_Framework_TestCase {
$this->user = \OC_User::getUser();
\OC_User::setUserId('test');
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
$this->tempStorage = null;
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::setUserId($this->user);
foreach ($this->storages as $storage) {
$cache = $storage->getCache();
@@ -49,6 +57,11 @@ class View extends \PHPUnit_Framework_TestCase {
if ($this->tempStorage && !\OC_Util::runningOnWindows()) {
system('rm -rf ' . escapeshellarg($this->tempStorage->getDataDir()));
}
+
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
/**
@@ -58,7 +71,7 @@ class View extends \PHPUnit_Framework_TestCase {
$storage1 = $this->getTestStorage();
$storage2 = $this->getTestStorage();
$storage3 = $this->getTestStorage();
- $root = '/' . uniqid();
+ $root = $this->getUniqueID('/');
\OC\Files\Filesystem::mount($storage1, array(), $root . '/');
\OC\Files\Filesystem::mount($storage2, array(), $root . '/substorage');
\OC\Files\Filesystem::mount($storage3, array(), $root . '/folder/anotherstorage');
@@ -581,7 +594,7 @@ class View extends \PHPUnit_Framework_TestCase {
}
}
- public function testLongPath() {
+ public function xtestLongPath() {
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage, array(), '/');
@@ -598,7 +611,7 @@ class View extends \PHPUnit_Framework_TestCase {
$folderName = 'abcdefghijklmnopqrstuvwxyz012345678901234567890123456789';
$tmpdirLength = strlen(\OC_Helper::tmpFolder());
if (\OC_Util::runningOnWindows()) {
- $this->markTestSkipped();
+ $this->markTestSkipped('[Windows] ');
$depth = ((260 - $tmpdirLength) / 57);
}elseif(\OC_Util::runningOnMac()){
$depth = ((1024 - $tmpdirLength) / 57);
@@ -652,6 +665,36 @@ class View extends \PHPUnit_Framework_TestCase {
$this->assertSame($info['etag'], $info2['etag']);
}
+ public function testWatcherEtagCrossStorage() {
+ $storage1 = new Temporary(array());
+ $storage2 = new Temporary(array());
+ $scanner1 = $storage1->getScanner();
+ $scanner2 = $storage2->getScanner();
+ $storage1->mkdir('sub');
+ \OC\Files\Filesystem::mount($storage1, array(), '/test/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/test/sub/storage');
+
+ $past = time() - 100;
+ $storage2->file_put_contents('test.txt', 'foobar');
+ $scanner1->scan('');
+ $scanner2->scan('');
+ $view = new \OC\Files\View('');
+
+ $storage2->getWatcher('')->setPolicy(Watcher::CHECK_ALWAYS);
+
+ $oldFileInfo = $view->getFileInfo('/test/sub/storage/test.txt');
+ $oldFolderInfo = $view->getFileInfo('/test');
+
+ $storage2->getCache()->update($oldFileInfo->getId(), array(
+ 'storage_mtime' => $past
+ ));
+
+ $view->getFileInfo('/test/sub/storage/test.txt');
+ $newFolderInfo = $view->getFileInfo('/test');
+
+ $this->assertNotEquals($newFolderInfo->getEtag(), $oldFolderInfo->getEtag());
+ }
+
/**
* @dataProvider absolutePathProvider
*/
diff --git a/tests/lib/geo.php b/tests/lib/geo.php
index 1c56a976129..0678297b55a 100644
--- a/tests/lib/geo.php
+++ b/tests/lib/geo.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Geo extends PHPUnit_Framework_TestCase {
+class Test_Geo extends \Test\TestCase {
/**
* @medium
diff --git a/tests/lib/group.php b/tests/lib/group.php
index 724e723b187..795de695513 100644
--- a/tests/lib/group.php
+++ b/tests/lib/group.php
@@ -22,38 +22,39 @@
*
*/
-class Test_Group extends PHPUnit_Framework_TestCase {
- function setUp() {
+class Test_Group extends \Test\TestCase {
+ protected function setUp() {
+ parent::setUp();
OC_Group::clearBackends();
OC_User::clearBackends();
}
- function testSingleBackend() {
+ public function testSingleBackend() {
$userBackend = new \OC_User_Dummy();
\OC_User::getManager()->registerBackend($userBackend);
OC_Group::useBackend(new OC_Group_Dummy());
- $group1 = uniqid();
- $group2 = uniqid();
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
OC_Group::createGroup($group1);
OC_Group::createGroup($group2);
- $user1 = uniqid();
- $user2 = uniqid();
+ $user1 = $this->getUniqueID();
+ $user2 = $this->getUniqueID();
$userBackend->createUser($user1, '');
$userBackend->createUser($user2, '');
- $this->assertFalse(OC_Group::inGroup($user1, $group1));
- $this->assertFalse(OC_Group::inGroup($user2, $group1));
- $this->assertFalse(OC_Group::inGroup($user1, $group2));
- $this->assertFalse(OC_Group::inGroup($user2, $group2));
+ $this->assertFalse(OC_Group::inGroup($user1, $group1), 'Asserting that user1 is not in group1');
+ $this->assertFalse(OC_Group::inGroup($user2, $group1), 'Asserting that user2 is not in group1');
+ $this->assertFalse(OC_Group::inGroup($user1, $group2), 'Asserting that user1 is not in group2');
+ $this->assertFalse(OC_Group::inGroup($user2, $group2), 'Asserting that user2 is not in group2');
$this->assertTrue(OC_Group::addToGroup($user1, $group1));
- $this->assertTrue(OC_Group::inGroup($user1, $group1));
- $this->assertFalse(OC_Group::inGroup($user2, $group1));
- $this->assertFalse(OC_Group::inGroup($user1, $group2));
- $this->assertFalse(OC_Group::inGroup($user2, $group2));
+ $this->assertTrue(OC_Group::inGroup($user1, $group1), 'Asserting that user1 is in group1');
+ $this->assertFalse(OC_Group::inGroup($user2, $group1), 'Asserting that user2 is not in group1');
+ $this->assertFalse(OC_Group::inGroup($user1, $group2), 'Asserting that user1 is not in group2');
+ $this->assertFalse(OC_Group::inGroup($user2, $group2), 'Asserting that user2 is not in group2');
$this->assertTrue(OC_Group::addToGroup($user1, $group1));
@@ -80,7 +81,7 @@ class Test_Group extends PHPUnit_Framework_TestCase {
public function testNoGroupsTwice() {
OC_Group::useBackend(new OC_Group_Dummy());
- $group = uniqid();
+ $group = $this->getUniqueID();
OC_Group::createGroup($group);
$groupCopy = $group;
@@ -103,7 +104,7 @@ class Test_Group extends PHPUnit_Framework_TestCase {
public function testDontAddUserToNonexistentGroup() {
OC_Group::useBackend(new OC_Group_Dummy());
$groupNonExistent = 'notExistent';
- $user = uniqid();
+ $user = $this->getUniqueID();
$this->assertEquals(false, OC_Group::addToGroup($user, $groupNonExistent));
$this->assertEquals(array(), OC_Group::getGroups());
@@ -114,12 +115,12 @@ class Test_Group extends PHPUnit_Framework_TestCase {
$userBackend = new \OC_User_Dummy();
\OC_User::getManager()->registerBackend($userBackend);
- $group1 = uniqid();
- $group2 = uniqid();
- $group3 = uniqid();
- $user1 = uniqid();
- $user2 = uniqid();
- $user3 = uniqid();
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
+ $group3 = $this->getUniqueID();
+ $user1 = $this->getUniqueID();
+ $user2 = $this->getUniqueID();
+ $user3 = $this->getUniqueID();
OC_Group::createGroup($group1);
OC_Group::createGroup($group2);
OC_Group::createGroup($group3);
@@ -139,8 +140,7 @@ class Test_Group extends PHPUnit_Framework_TestCase {
// FIXME: needs more parameter variation
}
-
- function testMultiBackend() {
+ public function testMultiBackend() {
$userBackend = new \OC_User_Dummy();
\OC_User::getManager()->registerBackend($userBackend);
$backend1 = new OC_Group_Dummy();
@@ -148,8 +148,8 @@ class Test_Group extends PHPUnit_Framework_TestCase {
OC_Group::useBackend($backend1);
OC_Group::useBackend($backend2);
- $group1 = uniqid();
- $group2 = uniqid();
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
OC_Group::createGroup($group1);
//groups should be added to the first registered backend
@@ -166,8 +166,8 @@ class Test_Group extends PHPUnit_Framework_TestCase {
$this->assertTrue(OC_Group::groupExists($group1));
$this->assertTrue(OC_Group::groupExists($group2));
- $user1 = uniqid();
- $user2 = uniqid();
+ $user1 = $this->getUniqueID();
+ $user2 = $this->getUniqueID();
$userBackend->createUser($user1, '');
$userBackend->createUser($user2, '');
diff --git a/tests/lib/group/backend.php b/tests/lib/group/backend.php
index 95a5cf5f49c..62c189489d7 100644
--- a/tests/lib/group/backend.php
+++ b/tests/lib/group/backend.php
@@ -20,7 +20,7 @@
*
*/
-abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
+abstract class Test_Group_Backend extends \Test\TestCase {
/**
* @var OC_Group_Backend $backend
*/
@@ -33,7 +33,7 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
*/
public function getGroupName($name = null) {
if(is_null($name)) {
- return uniqid('test_');
+ return $this->getUniqueID('test_');
} else {
return $name;
}
@@ -45,7 +45,7 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
* @return string
*/
public function getUserName() {
- return uniqid('test_');
+ return $this->getUniqueID('test_');
}
public function testAddRemove() {
@@ -138,6 +138,4 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
$result = $this->backend->countUsersInGroup($group, 'bar');
$this->assertSame(2, $result);
}
-
-
}
diff --git a/tests/lib/group/database.php b/tests/lib/group/database.php
index 9b39ac00452..10958a6ccdc 100644
--- a/tests/lib/group/database.php
+++ b/tests/lib/group/database.php
@@ -22,36 +22,27 @@
class Test_Group_Database extends Test_Group_Backend {
private $groups=array();
-
+
/**
* get a new unique group name
* test cases can override this in order to clean up created groups
* @return string
*/
public function getGroupName($name = null) {
- if(is_null($name)) {
- $name=uniqid('test_');
- }
- $this->groups[]=$name;
+ $name = parent::getGroupName($name);
+ $this->groups[] = $name;
return $name;
}
- /**
- * get a new unique user name
- * test cases can override this in order to clean up created user
- * @return string
- */
- public function getUserName() {
- return uniqid('test_');
- }
-
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_Group_Database();
}
- public function tearDown() {
+ protected function tearDown() {
foreach($this->groups as $group) {
$this->backend->deleteGroup($group);
}
+ parent::tearDown();
}
}
diff --git a/tests/lib/group/dummy.php b/tests/lib/group/dummy.php
index 287d6f1a977..b4456c8f7e1 100644
--- a/tests/lib/group/dummy.php
+++ b/tests/lib/group/dummy.php
@@ -21,7 +21,8 @@
*/
class Test_Group_Dummy extends Test_Group_Backend {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_Group_Dummy();
}
}
diff --git a/tests/lib/group/group.php b/tests/lib/group/group.php
index 4d15999a826..d758e5959d0 100644
--- a/tests/lib/group/group.php
+++ b/tests/lib/group/group.php
@@ -11,7 +11,7 @@ namespace Test\Group;
use OC\User\User;
-class Group extends \PHPUnit_Framework_TestCase {
+class Group extends \Test\TestCase {
/**
* @return \OC\User\Manager | \OC\User\Manager
*/
diff --git a/tests/lib/group/manager.php b/tests/lib/group/manager.php
index 8fd19513c0a..e3462caf806 100644
--- a/tests/lib/group/manager.php
+++ b/tests/lib/group/manager.php
@@ -11,7 +11,7 @@ namespace Test\Group;
use OC\User\User;
-class Manager extends \PHPUnit_Framework_TestCase {
+class Manager extends \Test\TestCase {
public function testGet() {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
@@ -304,6 +304,78 @@ class Manager extends \PHPUnit_Framework_TestCase {
$this->assertEquals('group1', $group1->getGID());
}
+ public function testInGroup() {
+ /**
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+ */
+ $backend = $this->getMock('\OC_Group_Database');
+ $backend->expects($this->once())
+ ->method('getUserGroups')
+ ->with('user1')
+ ->will($this->returnValue(array('group1', 'admin', 'group2')));
+ $backend->expects($this->any())
+ ->method('groupExists')
+ ->will($this->returnValue(true));
+
+ /**
+ * @var \OC\User\Manager $userManager
+ */
+ $userManager = $this->getMock('\OC\User\Manager');
+ $userBackend = $this->getMock('\OC_User_Backend');
+ $manager = new \OC\Group\Manager($userManager);
+ $manager->addBackend($backend);
+
+ $this->assertTrue($manager->isInGroup('user1', 'group1'));
+ }
+
+ public function testIsAdmin() {
+ /**
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+ */
+ $backend = $this->getMock('\OC_Group_Database');
+ $backend->expects($this->once())
+ ->method('getUserGroups')
+ ->with('user1')
+ ->will($this->returnValue(array('group1', 'admin', 'group2')));
+ $backend->expects($this->any())
+ ->method('groupExists')
+ ->will($this->returnValue(true));
+
+ /**
+ * @var \OC\User\Manager $userManager
+ */
+ $userManager = $this->getMock('\OC\User\Manager');
+ $userBackend = $this->getMock('\OC_User_Backend');
+ $manager = new \OC\Group\Manager($userManager);
+ $manager->addBackend($backend);
+
+ $this->assertTrue($manager->isAdmin('user1'));
+ }
+
+ public function testNotAdmin() {
+ /**
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+ */
+ $backend = $this->getMock('\OC_Group_Database');
+ $backend->expects($this->once())
+ ->method('getUserGroups')
+ ->with('user1')
+ ->will($this->returnValue(array('group1', 'group2')));
+ $backend->expects($this->any())
+ ->method('groupExists')
+ ->will($this->returnValue(true));
+
+ /**
+ * @var \OC\User\Manager $userManager
+ */
+ $userManager = $this->getMock('\OC\User\Manager');
+ $userBackend = $this->getMock('\OC_User_Backend');
+ $manager = new \OC\Group\Manager($userManager);
+ $manager->addBackend($backend);
+
+ $this->assertFalse($manager->isAdmin('user1'));
+ }
+
public function testGetUserGroupsMultipleBackends() {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
diff --git a/tests/lib/group/metadata.php b/tests/lib/group/metadata.php
index 7ef2d6b35ff..94944189cad 100644
--- a/tests/lib/group/metadata.php
+++ b/tests/lib/group/metadata.php
@@ -9,7 +9,7 @@
namespace Test\Group;
-class Test_MetaData extends \PHPUnit_Framework_TestCase {
+class Test_MetaData extends \Test\TestCase {
private function getGroupManagerMock() {
return $this->getMockBuilder('\OC\Group\Manager')
->disableOriginalConstructor()
diff --git a/tests/lib/helper.php b/tests/lib/helper.php
index 520a3e0e669..53a3e1a0ec8 100644
--- a/tests/lib/helper.php
+++ b/tests/lib/helper.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Helper extends PHPUnit_Framework_TestCase {
+class Test_Helper extends \Test\TestCase {
/**
* @dataProvider humanFileSizeProvider
@@ -115,6 +115,10 @@ class Test_Helper extends PHPUnit_Framework_TestCase {
}
function testGetStringMimeType() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows');
+ }
+
$result = OC_Helper::getStringMimeType("/data/data.tar.gz");
$expected = 'text/plain; charset=us-ascii';
$this->assertEquals($result, $expected);
diff --git a/tests/lib/helperstorage.php b/tests/lib/helperstorage.php
index 4fdd9dd6b9b..8b5f41fc94c 100644
--- a/tests/lib/helperstorage.php
+++ b/tests/lib/helperstorage.php
@@ -9,14 +9,22 @@
/**
* Test the storage functions of OC_Helper
*/
-class Test_Helper_Storage extends PHPUnit_Framework_TestCase {
+
+class Test_Helper_Storage extends \Test\TestCase {
+ /** @var string */
private $user;
+ /** @var \OC\Files\Storage\Storage */
private $storageMock;
+ /** @var \OC\Files\Storage\Storage */
+ private $storage;
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
- $this->user = 'user_' . uniqid();
+ $this->user = $this->getUniqueID('user_');
\OC_User::createUser($this->user, $this->user);
+ $this->storage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::tearDown();
\OC_User::setUserId($this->user);
\OC\Files\Filesystem::init($this->user, '/' . $this->user . '/files');
@@ -25,7 +33,7 @@ class Test_Helper_Storage extends PHPUnit_Framework_TestCase {
$this->storageMock = null;
}
- public function tearDown() {
+ protected function tearDown() {
$this->user = null;
if ($this->storageMock) {
@@ -33,10 +41,13 @@ class Test_Helper_Storage extends PHPUnit_Framework_TestCase {
$this->storageMock = null;
}
\OC\Files\Filesystem::tearDown();
+ \OC\Files\Filesystem::mount($this->storage, array(), '/');
\OC_User::setUserId('');
\OC_User::deleteUser($this->user);
- \OC_Preferences::deleteUser($this->user);
+ \OC::$server->getConfig()->deleteAllUserValues($this->user);
+
+ parent::tearDown();
}
/**
diff --git a/tests/lib/hooks/basicemitter.php b/tests/lib/hooks/basicemitter.php
index 0eae730d030..899d3ecd3b3 100644
--- a/tests/lib/hooks/basicemitter.php
+++ b/tests/lib/hooks/basicemitter.php
@@ -31,13 +31,14 @@ class DummyEmitter extends \OC\Hooks\BasicEmitter {
class EmittedException extends \Exception {
}
-class BasicEmitter extends \PHPUnit_Framework_TestCase {
+class BasicEmitter extends \Test\TestCase {
/**
* @var \OC\Hooks\Emitter $emitter
*/
protected $emitter;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->emitter = new DummyEmitter();
}
diff --git a/tests/lib/hooks/legacyemitter.php b/tests/lib/hooks/legacyemitter.php
index a7bed879a72..f030afbc090 100644
--- a/tests/lib/hooks/legacyemitter.php
+++ b/tests/lib/hooks/legacyemitter.php
@@ -26,7 +26,9 @@ class LegacyEmitter extends BasicEmitter {
//we can't use exceptions here since OC_Hooks catches all exceptions
private static $emitted = false;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->emitter = new DummyLegacyEmitter();
self::$emitted = false;
\OC_Hook::clear('Test','test');
diff --git a/tests/lib/httphelper.php b/tests/lib/httphelper.php
index 191200aee3d..48d6543f1f2 100644
--- a/tests/lib/httphelper.php
+++ b/tests/lib/httphelper.php
@@ -6,23 +6,28 @@
* See the COPYING-README file.
*/
-class TestHTTPHelper extends \PHPUnit_Framework_TestCase {
+class TestHTTPHelper extends \Test\TestCase {
- /** @var \OC\AllConfig*/
+ /** @var \OCP\IConfig*/
private $config;
/** @var \OC\HTTPHelper */
private $httpHelperMock;
+ /** @var \OC\Security\CertificateManager */
+ private $certificateManager;
- function setUp() {
- $this->config = $this->getMockBuilder('\OC\AllConfig')
+ protected function setUp() {
+ parent::setUp();
+
+ $this->config = $this->getMockBuilder('\OCP\IConfig')
->disableOriginalConstructor()->getMock();
+ $this->certificateManager = $this->getMock('\OCP\ICertificateManager');
$this->httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper')
- ->setConstructorArgs(array($this->config))
+ ->setConstructorArgs(array($this->config, $this->certificateManager))
->setMethods(array('getHeaders'))
->getMock();
}
- public function testIsHTTPProvider() {
+ public function isHttpTestData() {
return array(
array('http://wwww.owncloud.org/enterprise/', true),
array('https://wwww.owncloud.org/enterprise/', true),
@@ -79,10 +84,29 @@ class TestHTTPHelper extends \PHPUnit_Framework_TestCase {
}
/**
- * @dataProvider testIsHTTPProvider
+ * @dataProvider isHttpTestData
*/
public function testIsHTTP($url, $expected) {
$this->assertSame($expected, $this->httpHelperMock->isHTTPURL($url));
}
+
+ /**
+ * @dataProvider postParameters
+ */
+ public function testassemblePostParameters($parameterList, $expectedResult) {
+ $helper = \OC::$server->getHTTPHelper();
+ $result = \Test_Helper::invokePrivate($helper, 'assemblePostParameters', array($parameterList));
+ $this->assertSame($expectedResult, $result);
+ }
+
+ public function postParameters() {
+ return array(
+ array(array('k1' => 'v1'), 'k1=v1'),
+ array(array('k1' => 'v1', 'k2' => 'v2'), 'k1=v1&k2=v2'),
+ array(array(), ''),
+ );
+ }
+
+
}
diff --git a/tests/lib/image.php b/tests/lib/image.php
index 795bc464159..e0009b9710e 100644
--- a/tests/lib/image.php
+++ b/tests/lib/image.php
@@ -6,10 +6,12 @@
* See the COPYING-README file.
*/
-class Test_Image extends PHPUnit_Framework_TestCase {
+class Test_Image extends \Test\TestCase {
public static function tearDownAfterClass() {
@unlink(OC::$SERVERROOT.'/tests/data/testimage2.png');
@unlink(OC::$SERVERROOT.'/tests/data/testimage2.jpg');
+
+ parent::tearDownAfterClass();
}
public function testGetMimeTypeForFile() {
@@ -62,14 +64,18 @@ class Test_Image extends PHPUnit_Framework_TestCase {
$img = new \OC_Image(OC::$SERVERROOT.'/tests/data/testimage.png');
$this->assertEquals('image/png', $img->mimeType());
+ $img = new \OC_Image(null);
+ $this->assertEquals('', $img->mimeType());
+
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] Images created with imagecreate() are pngs on windows');
+ }
+
$img = new \OC_Image(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg'));
$this->assertEquals('image/jpeg', $img->mimeType());
$img = new \OC_Image(base64_encode(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.gif')));
$this->assertEquals('image/gif', $img->mimeType());
-
- $img = new \OC_Image(null);
- $this->assertEquals('', $img->mimeType());
}
public function testWidth() {
diff --git a/tests/lib/installer.php b/tests/lib/installer.php
index 5e267245200..b58a71b5a08 100644
--- a/tests/lib/installer.php
+++ b/tests/lib/installer.php
@@ -6,20 +6,24 @@
* See the COPYING-README file.
*/
-class Test_Installer extends PHPUnit_Framework_TestCase {
+class Test_Installer extends \Test\TestCase {
private static $appid = 'testapp';
private $appstore;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->appstore = OC_Config::getValue('appstoreenabled', true);
OC_Config::setValue('appstoreenabled', true);
OC_Installer::removeApp(self::$appid);
}
- public function tearDown() {
+ protected function tearDown() {
OC_Installer::removeApp(self::$appid);
OC_Config::setValue('appstoreenabled', $this->appstore);
+
+ parent::tearDown();
}
public function testInstallApp() {
diff --git a/tests/lib/l10n.php b/tests/lib/l10n.php
index df86fcfda81..2235581add8 100644
--- a/tests/lib/l10n.php
+++ b/tests/lib/l10n.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_L10n extends PHPUnit_Framework_TestCase {
+class Test_L10n extends \Test\TestCase {
public function testGermanPluralTranslations() {
$l = new OC_L10N('test');
@@ -42,6 +42,24 @@ class Test_L10n extends PHPUnit_Framework_TestCase {
*/
}
+ public function russianMissingPluralTranslationsData() {
+ return array(
+ array(1, '1 missing plural'),
+ array(2, '2 missing plurals'),
+ array(6, '6 missing plurals'),
+ );
+ }
+
+ /**
+ * @dataProvider russianMissingPluralTranslationsData
+ */
+ public function testRussianMissingPluralTranslations($count, $expected) {
+ $l = new OC_L10N('test');
+ $l->load(OC::$SERVERROOT.'/tests/data/l10n/ru.json');
+
+ $this->assertEquals($expected, (string)$l->n('%n missing plural', '%n missing plurals', $count));
+ }
+
public function testCzechPluralTranslations() {
$l = new OC_L10N('test');
$transFile = OC::$SERVERROOT.'/tests/data/l10n/cs.json';
diff --git a/tests/lib/largefilehelper.php b/tests/lib/largefilehelper.php
index 5db1f9c5a74..1267a8c5833 100644
--- a/tests/lib/largefilehelper.php
+++ b/tests/lib/largefilehelper.php
@@ -8,10 +8,10 @@
namespace Test;
-class LargeFileHelper extends \PHPUnit_Framework_TestCase {
+class LargeFileHelper extends TestCase {
protected $helper;
- public function setUp() {
+ protected function setUp() {
parent::setUp();
$this->helper = new \OC\LargeFileHelper;
}
diff --git a/tests/lib/largefilehelpergetfilesize.php b/tests/lib/largefilehelpergetfilesize.php
index 58571d641e0..57bc2381966 100644
--- a/tests/lib/largefilehelpergetfilesize.php
+++ b/tests/lib/largefilehelpergetfilesize.php
@@ -12,59 +12,87 @@ namespace Test;
* Tests whether LargeFileHelper is able to determine file size at all.
* Large files are not considered yet.
*/
-class LargeFileHelperGetFileSize extends \PHPUnit_Framework_TestCase {
+class LargeFileHelperGetFileSize extends TestCase {
+ /** @var string */
protected $filename;
+ /** @var int */
protected $fileSize;
+ /** @var \OC\LargeFileHelper */
protected $helper;
- public function setUp() {
+ protected function setUp() {
parent::setUp();
- $ds = DIRECTORY_SEPARATOR;
- $this->filename = dirname(__DIR__) . "{$ds}data{$ds}strängé filename (duplicate #2).txt";
- $this->fileSize = 446;
- $this->helper = new \OC\LargeFileHelper;
+ $this->helper = new \OC\LargeFileHelper();
}
- public function testGetFileSizeViaCurl() {
+ public function dataFileNameProvider() {
+ $path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR;
+
+ $filePaths = array(array($path . 'lorem.txt', 446));
+ if (!\OC_Util::runningOnWindows()) {
+ $filePaths[] = array($path . 'strängé filename (duplicate #2).txt', 446);
+ }
+
+ return $filePaths;
+ }
+
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeViaCurl($filename, $fileSize) {
if (!extension_loaded('curl')) {
$this->markTestSkipped(
'The PHP curl extension is required for this test.'
);
}
+ if (\OC::$server->getIniWrapper()->getString('open_basedir') !== '') {
+ $this->markTestSkipped(
+ 'The PHP curl extension does not work with the file:// protocol when open_basedir is enabled.'
+ );
+ }
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeViaCurl($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeViaCurl($filename)
);
}
- public function testGetFileSizeViaCOM() {
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeViaCOM($filename, $fileSize) {
if (!extension_loaded('COM')) {
$this->markTestSkipped(
'The PHP Windows COM extension is required for this test.'
);
}
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeViaCOM($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeViaCOM($filename)
);
}
- public function testGetFileSizeViaExec() {
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeViaExec($filename, $fileSize) {
if (!\OC_Helper::is_function_enabled('exec')) {
$this->markTestSkipped(
'The exec() function needs to be enabled for this test.'
);
}
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeViaExec($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeViaExec($filename)
);
}
- public function testGetFileSizeNative() {
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeNative($filename, $fileSize) {
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeNative($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeNative($filename)
);
}
}
diff --git a/tests/lib/logger.php b/tests/lib/logger.php
index fcdf5b58670..700a847917b 100644
--- a/tests/lib/logger.php
+++ b/tests/lib/logger.php
@@ -10,14 +10,16 @@ namespace Test;
use OC\Log;
-class Logger extends \PHPUnit_Framework_TestCase {
+class Logger extends TestCase {
/**
* @var \OCP\ILogger
*/
private $logger;
static private $logs = array();
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
self::$logs = array();
$this->logger = new Log('Test\Logger');
}
diff --git a/tests/lib/mail.php b/tests/lib/mail.php
index 3cc9868e25e..568ecff52b0 100644
--- a/tests/lib/mail.php
+++ b/tests/lib/mail.php
@@ -6,10 +6,12 @@
* See the COPYING-README file.
*/
-class Test_Mail extends PHPUnit_Framework_TestCase {
+class Test_Mail extends \Test\TestCase {
protected function setUp()
{
+ parent::setUp();
+
if (!function_exists('idn_to_ascii')) {
$this->markTestSkipped(
'The intl extension is not available.'
diff --git a/tests/lib/memcache/apc.php b/tests/lib/memcache/apc.php
index e5d753a4fa5..fdb785b9dc5 100644
--- a/tests/lib/memcache/apc.php
+++ b/tests/lib/memcache/apc.php
@@ -10,7 +10,9 @@
namespace Test\Memcache;
class APC extends Cache {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if(!\OC\Memcache\APC::isAvailable()) {
$this->markTestSkipped('The apc extension is not available.');
return;
@@ -19,6 +21,6 @@ class APC extends Cache {
$this->markTestSkipped('The apc extension is emulated by ACPu.');
return;
}
- $this->instance=new \OC\Memcache\APC(uniqid());
+ $this->instance=new \OC\Memcache\APC($this->getUniqueID());
}
}
diff --git a/tests/lib/memcache/apcu.php b/tests/lib/memcache/apcu.php
index 7b99e7cd5e0..afcaa99bfbe 100644
--- a/tests/lib/memcache/apcu.php
+++ b/tests/lib/memcache/apcu.php
@@ -10,11 +10,13 @@
namespace Test\Memcache;
class APCu extends Cache {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if(!\OC\Memcache\APCu::isAvailable()) {
$this->markTestSkipped('The APCu extension is not available.');
return;
}
- $this->instance=new \OC\Memcache\APCu(uniqid());
+ $this->instance=new \OC\Memcache\APCu($this->getUniqueID());
}
}
diff --git a/tests/lib/memcache/cache.php b/tests/lib/memcache/cache.php
index d07c492cef0..8a4a708e4b7 100644
--- a/tests/lib/memcache/cache.php
+++ b/tests/lib/memcache/cache.php
@@ -50,9 +50,11 @@ abstract class Cache extends \Test_Cache {
$this->assertFalse($this->instance->hasKey('foo'));
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->clear();
}
+
+ parent::tearDown();
}
}
diff --git a/tests/lib/memcache/memcached.php b/tests/lib/memcache/memcached.php
index fdab32693ff..51a78996dd4 100644
--- a/tests/lib/memcache/memcached.php
+++ b/tests/lib/memcache/memcached.php
@@ -11,16 +11,19 @@ namespace Test\Memcache;
class Memcached extends Cache {
static public function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
if (!\OC\Memcache\Memcached::isAvailable()) {
self::markTestSkipped('The memcached extension is not available.');
}
- $instance = new \OC\Memcache\Memcached(uniqid());
- if ($instance->set(uniqid(), uniqid()) === false) {
+ $instance = new \OC\Memcache\Memcached(self::getUniqueID());
+ if ($instance->set(self::getUniqueID(), self::getUniqueID()) === false) {
self::markTestSkipped('memcached server seems to be down.');
}
}
- public function setUp() {
- $this->instance = new \OC\Memcache\Memcached(uniqid());
+ protected function setUp() {
+ parent::setUp();
+ $this->instance = new \OC\Memcache\Memcached($this->getUniqueID());
}
}
diff --git a/tests/lib/memcache/redis.php b/tests/lib/memcache/redis.php
new file mode 100644
index 00000000000..c0bd18b46f9
--- /dev/null
+++ b/tests/lib/memcache/redis.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Memcache;
+
+class Redis extends Cache {
+ static public function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
+ if (!\OC\Memcache\Redis::isAvailable()) {
+ self::markTestSkipped('The redis extension is not available.');
+ }
+ $instance = new \OC\Memcache\Redis(self::getUniqueID());
+ if ($instance->set(self::getUniqueID(), self::getUniqueID()) === false) {
+ self::markTestSkipped('redis server seems to be down.');
+ }
+ }
+
+ protected function setUp() {
+ parent::setUp();
+ $this->instance = new \OC\Memcache\Redis($this->getUniqueID());
+ }
+}
diff --git a/tests/lib/memcache/xcache.php b/tests/lib/memcache/xcache.php
index f59afda3966..36efe0b220a 100644
--- a/tests/lib/memcache/xcache.php
+++ b/tests/lib/memcache/xcache.php
@@ -10,11 +10,13 @@
namespace Test\Memcache;
class XCache extends Cache {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if (!\OC\Memcache\XCache::isAvailable()) {
$this->markTestSkipped('The xcache extension is not available.');
return;
}
- $this->instance = new \OC\Memcache\XCache(uniqid());
+ $this->instance = new \OC\Memcache\XCache($this->getUniqueID());
}
}
diff --git a/tests/lib/migrate.php b/tests/lib/migrate.php
deleted file mode 100644
index c4442511e1f..00000000000
--- a/tests/lib/migrate.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-/**
- * Copyright (c) 2014 Tom Needham <tom@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_Migrate extends PHPUnit_Framework_TestCase {
-
- public $users;
- public $tmpfiles = array();
-
- /**
- * Generates a test user and sets up their file system
- * @return string the test users id
- */
- public function generateUser() {
- $username = uniqid();
- \OC_User::createUser($username, 'password');
- \OC_Util::tearDownFS();
- \OC_User::setUserId('');
- \OC\Files\Filesystem::tearDown();
- \OC_Util::setupFS($username);
- $this->users[] = $username;
- return $username;
- }
-
- /**
- * validates an export for a user
- * checks for existence of export_info.json and file folder
- * @param string $exportedUser the user that was exported
- * @param string $path the path to the .zip export
- * @param string $exportedBy
- */
- public function validateUserExport($exportedBy, $exportedUser, $path) {
- $this->assertTrue(file_exists($path));
- // Extract
- $extract = get_temp_dir() . '/oc_import_' . uniqid();
- //mkdir($extract);
- $this->tmpfiles[] = $extract;
- $zip = new ZipArchive;
- $zip->open($path);
- $zip->extractTo($extract);
- $zip->close();
- $this->assertTrue(file_exists($extract.'/export_info.json'));
- $exportInfo = file_get_contents($extract.'/export_info.json');
- $exportInfo = json_decode($exportInfo);
- $this->assertNotNull($exportInfo);
- $this->assertEquals($exportedUser, $exportInfo->exporteduser);
- $this->assertEquals($exportedBy, $exportInfo->exportedby);
- $this->assertTrue(file_exists($extract.'/'.$exportedUser.'/files'));
- }
-
- public function testUserSelfExport() {
- // Create a user
- $user = $this->generateUser();
- \OC_User::setUserId($user);
- $export = \OC_Migrate::export($user);
- // Check it succeeded and exists
- $this->assertTrue(json_decode($export)->success);
- // Validate the export
- $this->validateUserExport($user, $user, json_decode($export)->data);
- }
-
- public function testUserOtherExport() {
- $user = $this->generateUser();
- $user2 = $this->generateUser();
- \OC_User::setUserId($user2);
- $export = \OC_Migrate::export($user);
- // Check it succeeded and exists
- $this->assertTrue(json_decode($export)->success);
- // Validate the export
- $this->validateUserExport($user2, $user, json_decode($export)->data);
- }
-
- public function tearDown() {
- $u = new OC_User();
- foreach($this->users as $user) {
- $u->deleteUser($user);
- }
- foreach($this->tmpfiles as $file) {
- \OC_Helper::rmdirr($file);
- }
- }
-
-
-
-
-}
diff --git a/tests/lib/naturalsort.php b/tests/lib/naturalsort.php
index 09a0e6a5f9d..e022a855309 100644
--- a/tests/lib/naturalsort.php
+++ b/tests/lib/naturalsort.php
@@ -6,9 +6,11 @@
* See the COPYING-README file.
*/
-class Test_NaturalSort extends PHPUnit_Framework_TestCase {
+class Test_NaturalSort extends \Test\TestCase {
public function setUp() {
+ parent::setUp();
+
if(!class_exists('Collator')) {
$this->markTestSkipped('The intl module is not available, natural sorting will not work as expected.');
return;
diff --git a/tests/lib/ocs/privatedata.php b/tests/lib/ocs/privatedata.php
index 534fc21b07a..a9300f5beac 100644
--- a/tests/lib/ocs/privatedata.php
+++ b/tests/lib/ocs/privatedata.php
@@ -20,17 +20,13 @@
*
*/
-class Test_OC_OCS_Privatedata extends PHPUnit_Framework_TestCase
-{
-
+class Test_OC_OCS_Privatedata extends \Test\TestCase {
private $appKey;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
\OC::$server->getSession()->set('user_id', 'user1');
- $this->appKey = uniqid('app');
- }
-
- public function tearDown() {
+ $this->appKey = $this->getUniqueID('app');
}
public function testGetEmptyOne() {
diff --git a/tests/lib/preferences-singleton.php b/tests/lib/preferences-singleton.php
deleted file mode 100644
index 7abf5a6be36..00000000000
--- a/tests/lib/preferences-singleton.php
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
- * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_Preferences extends PHPUnit_Framework_TestCase {
- public static function setUpBeforeClass() {
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*preferences` VALUES(?, ?, ?, ?)');
- $query->execute(array("Someuser", "someapp", "somekey", "somevalue"));
-
- $query->execute(array("Someuser", "getusersapp", "somekey", "somevalue"));
- $query->execute(array("Anotheruser", "getusersapp", "somekey", "someothervalue"));
- $query->execute(array("Anuser", "getusersapp", "somekey", "somevalue"));
-
- $query->execute(array("Someuser", "getappsapp", "somekey", "somevalue"));
-
- $query->execute(array("Someuser", "getkeysapp", "firstkey", "somevalue"));
- $query->execute(array("Someuser", "getkeysapp", "anotherkey", "somevalue"));
- $query->execute(array("Someuser", "getkeysapp", "key-tastic", "somevalue"));
-
- $query->execute(array("Someuser", "getvalueapp", "key", "a value for a key"));
-
- $query->execute(array("Deleteuser", "deleteapp", "deletekey", "somevalue"));
- $query->execute(array("Deleteuser", "deleteapp", "somekey", "somevalue"));
- $query->execute(array("Deleteuser", "someapp", "somekey", "somevalue"));
- }
-
- public static function tearDownAfterClass() {
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*preferences` WHERE `userid` = ?');
- $query->execute(array('Someuser'));
- $query->execute(array('Anotheruser'));
- $query->execute(array('Anuser'));
- }
-
- public function testGetUsers() {
- $query = \OC_DB::prepare('SELECT DISTINCT `userid` FROM `*PREFIX*preferences`');
- $result = $query->execute();
- $expected = array();
- while ($row = $result->fetchRow()) {
- $expected[] = $row['userid'];
- }
-
- sort($expected);
- $users = \OC_Preferences::getUsers();
- sort($users);
- $this->assertEquals($expected, $users);
- }
-
- public function testGetApps() {
- $query = \OC_DB::prepare('SELECT DISTINCT `appid` FROM `*PREFIX*preferences` WHERE `userid` = ?');
- $result = $query->execute(array('Someuser'));
- $expected = array();
- while ($row = $result->fetchRow()) {
- $expected[] = $row['appid'];
- }
-
- sort($expected);
- $apps = \OC_Preferences::getApps('Someuser');
- sort($apps);
- $this->assertEquals($expected, $apps);
- }
-
- public function testGetKeys() {
- $query = \OC_DB::prepare('SELECT DISTINCT `configkey` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?');
- $result = $query->execute(array('Someuser', 'getkeysapp'));
- $expected = array();
- while ($row = $result->fetchRow()) {
- $expected[] = $row['configkey'];
- }
-
- sort($expected);
- $keys = \OC_Preferences::getKeys('Someuser', 'getkeysapp');
- sort($keys);
- $this->assertEquals($expected, $keys);
- }
-
- public function testGetValue() {
- $this->assertNull(\OC_Preferences::getValue('nonexistant', 'nonexistant', 'nonexistant'));
-
- $this->assertEquals('default', \OC_Preferences::getValue('nonexistant', 'nonexistant', 'nonexistant', 'default'));
-
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Someuser', 'getvalueapp', 'key'));
- $row = $result->fetchRow();
- $expected = $row['configvalue'];
- $this->assertEquals($expected, \OC_Preferences::getValue('Someuser', 'getvalueapp', 'key'));
- }
-
- public function testSetValue() {
- $this->assertTrue(\OC_Preferences::setValue('Someuser', 'setvalueapp', 'newkey', 'newvalue'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Someuser', 'setvalueapp', 'newkey'));
- $row = $result->fetchRow();
- $value = $row['configvalue'];
- $this->assertEquals('newvalue', $value);
-
- $this->assertTrue(\OC_Preferences::setValue('Someuser', 'setvalueapp', 'newkey', 'othervalue'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Someuser', 'setvalueapp', 'newkey'));
- $row = $result->fetchRow();
- $value = $row['configvalue'];
- $this->assertEquals('othervalue', $value);
- }
-
- public function testSetValueWithPreCondition() {
- // remove existing key
- $this->assertTrue(\OC_Preferences::deleteKey('Someuser', 'setvalueapp', 'newkey'));
-
- // add new preference with pre-condition should fails
- $this->assertFalse(\OC_Preferences::setValue('Someuser', 'setvalueapp', 'newkey', 'newvalue', 'preCondition'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Someuser', 'setvalueapp', 'newkey'));
- $row = $result->fetchRow();
- $this->assertFalse($row);
-
- // add new preference without pre-condition should insert the new value
- $this->assertTrue(\OC_Preferences::setValue('Someuser', 'setvalueapp', 'newkey', 'newvalue'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Someuser', 'setvalueapp', 'newkey'));
- $row = $result->fetchRow();
- $value = $row['configvalue'];
- $this->assertEquals('newvalue', $value);
-
- // wrong pre-condition, value should stay the same
- $this->assertFalse(\OC_Preferences::setValue('Someuser', 'setvalueapp', 'newkey', 'othervalue', 'preCondition'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Someuser', 'setvalueapp', 'newkey'));
- $row = $result->fetchRow();
- $value = $row['configvalue'];
- $this->assertEquals('newvalue', $value);
-
- // correct pre-condition, value should change
- $this->assertTrue(\OC_Preferences::setValue('Someuser', 'setvalueapp', 'newkey', 'othervalue', 'newvalue'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Someuser', 'setvalueapp', 'newkey'));
- $row = $result->fetchRow();
- $value = $row['configvalue'];
- $this->assertEquals('othervalue', $value);
- }
-
- public function testDeleteKey() {
- $this->assertTrue(\OC_Preferences::deleteKey('Deleteuser', 'deleteapp', 'deletekey'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?');
- $result = $query->execute(array('Deleteuser', 'deleteapp', 'deletekey'));
- $this->assertEquals(0, count($result->fetchAll()));
- }
-
- public function testDeleteApp() {
- $this->assertTrue(\OC_Preferences::deleteApp('Deleteuser', 'deleteapp'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?');
- $result = $query->execute(array('Deleteuser', 'deleteapp'));
- $this->assertEquals(0, count($result->fetchAll()));
- }
-
- public function testDeleteUser() {
- $this->assertTrue(\OC_Preferences::deleteUser('Deleteuser'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?');
- $result = $query->execute(array('Deleteuser'));
- $this->assertEquals(0, count($result->fetchAll()));
- }
-
- public function testDeleteAppFromAllUsers() {
- $this->assertTrue(\OC_Preferences::deleteAppFromAllUsers('someapp'));
- $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `appid` = ?');
- $result = $query->execute(array('someapp'));
- $this->assertEquals(0, count($result->fetchAll()));
- }
-}
diff --git a/tests/lib/preferences.php b/tests/lib/preferences.php
deleted file mode 100644
index fe8e3e8b48c..00000000000
--- a/tests/lib/preferences.php
+++ /dev/null
@@ -1,241 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
- * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_Preferences_Object extends PHPUnit_Framework_TestCase {
- public function testGetUsers()
- {
- $statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
- $statementMock->expects($this->exactly(2))
- ->method('fetchColumn')
- ->will($this->onConsecutiveCalls('foo', false));
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->once())
- ->method('executeQuery')
- ->with($this->equalTo('SELECT DISTINCT `userid` FROM `*PREFIX*preferences`'))
- ->will($this->returnValue($statementMock));
-
- $preferences = new OC\Preferences($connectionMock);
- $apps = $preferences->getUsers();
- $this->assertEquals(array('foo'), $apps);
- }
-
- public function testSetValue()
- {
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->exactly(2))
- ->method('fetchColumn')
- ->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences`'
- .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
- $this->equalTo(array('grg', 'bar', 'foo')))
- ->will($this->onConsecutiveCalls(false, 'v1'));
- $connectionMock->expects($this->once())
- ->method('insert')
- ->with($this->equalTo('*PREFIX*preferences'),
- $this->equalTo(
- array(
- 'userid' => 'grg',
- 'appid' => 'bar',
- 'configkey' => 'foo',
- 'configvalue' => 'v1',
- )
- ));
- $connectionMock->expects($this->once())
- ->method('executeUpdate')
- ->with($this->equalTo("UPDATE `*PREFIX*preferences` SET `configvalue` = ?"
- . " WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?"),
- $this->equalTo(array('v2', 'grg', 'bar', 'foo'))
- );
-
- $preferences = new OC\Preferences($connectionMock);
- $preferences->setValue('grg', 'bar', 'foo', 'v1');
- $preferences->setValue('grg', 'bar', 'foo', 'v2');
- }
-
- public function testSetValueUnchanged() {
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->exactly(3))
- ->method('fetchColumn')
- ->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences`'
- .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
- $this->equalTo(array('grg', 'bar', 'foo')))
- ->will($this->onConsecutiveCalls(false, 'v1', 'v1'));
- $connectionMock->expects($this->once())
- ->method('insert')
- ->with($this->equalTo('*PREFIX*preferences'),
- $this->equalTo(
- array(
- 'userid' => 'grg',
- 'appid' => 'bar',
- 'configkey' => 'foo',
- 'configvalue' => 'v1',
- )
- ));
- $connectionMock->expects($this->never())
- ->method('executeUpdate');
-
- $preferences = new OC\Preferences($connectionMock);
- $preferences->setValue('grg', 'bar', 'foo', 'v1');
- $preferences->setValue('grg', 'bar', 'foo', 'v1');
- $preferences->setValue('grg', 'bar', 'foo', 'v1');
- }
-
- public function testSetValueUnchanged2() {
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->exactly(3))
- ->method('fetchColumn')
- ->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences`'
- .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
- $this->equalTo(array('grg', 'bar', 'foo')))
- ->will($this->onConsecutiveCalls(false, 'v1', 'v2'));
- $connectionMock->expects($this->once())
- ->method('insert')
- ->with($this->equalTo('*PREFIX*preferences'),
- $this->equalTo(
- array(
- 'userid' => 'grg',
- 'appid' => 'bar',
- 'configkey' => 'foo',
- 'configvalue' => 'v1',
- )
- ));
- $connectionMock->expects($this->once())
- ->method('executeUpdate')
- ->with($this->equalTo("UPDATE `*PREFIX*preferences` SET `configvalue` = ?"
- . " WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?"),
- $this->equalTo(array('v2', 'grg', 'bar', 'foo'))
- );
-
- $preferences = new OC\Preferences($connectionMock);
- $preferences->setValue('grg', 'bar', 'foo', 'v1');
- $preferences->setValue('grg', 'bar', 'foo', 'v2');
- $preferences->setValue('grg', 'bar', 'foo', 'v2');
- }
-
- public function testGetUserValues()
- {
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*preferences` VALUES(?, ?, ?, ?)');
- $query->execute(array('SomeUser', 'testGetUserValues', 'somekey', 'somevalue'));
- $query->execute(array('AnotherUser', 'testGetUserValues', 'somekey', 'someothervalue'));
- $query->execute(array('AUser', 'testGetUserValues', 'somekey', 'somevalue'));
-
- $preferences = new OC\Preferences(\OC_DB::getConnection());
- $users = array('SomeUser', 'AnotherUser', 'NoValueSet');
-
- $values = $preferences->getValueForUsers('testGetUserValues', 'somekey', $users);
- $this->assertUserValues($values);
-
- // Add a lot of users so the array is chunked
- for ($i = 1; $i <= 75; $i++) {
- array_unshift($users, 'NoValueBefore#' . $i);
- array_push($users, 'NoValueAfter#' . $i);
- }
-
- $values = $preferences->getValueForUsers('testGetUserValues', 'somekey', $users);
- $this->assertUserValues($values);
-
- // Clean DB after the test
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*preferences` WHERE `appid` = ?');
- $query->execute(array('testGetUserValues'));
- }
-
- protected function assertUserValues($values) {
- $this->assertEquals(2, sizeof($values));
-
- $this->assertArrayHasKey('SomeUser', $values);
- $this->assertEquals('somevalue', $values['SomeUser']);
-
- $this->assertArrayHasKey('AnotherUser', $values);
- $this->assertEquals('someothervalue', $values['AnotherUser']);
- }
-
- public function testGetValueUsers()
- {
- // Prepare data
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*preferences` VALUES(?, ?, ?, ?)');
- $query->execute(array('SomeUser', 'testGetUsersForValue', 'somekey', 'somevalue'));
- $query->execute(array('AnotherUser', 'testGetUsersForValue', 'somekey', 'someothervalue'));
- $query->execute(array('AUser', 'testGetUsersForValue', 'somekey', 'somevalue'));
-
- $preferences = new OC\Preferences(\OC_DB::getConnection());
- $result = $preferences->getUsersForValue('testGetUsersForValue', 'somekey', 'somevalue');
- sort($result);
- $this->assertEquals(array('AUser', 'SomeUser'), $result);
-
- // Clean DB after the test
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*preferences` WHERE `appid` = ?');
- $query->execute(array('testGetUsersForValue'));
- }
-
- public function testDeleteKey()
- {
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->once())
- ->method('delete')
- ->with($this->equalTo('*PREFIX*preferences'),
- $this->equalTo(
- array(
- 'userid' => 'grg',
- 'appid' => 'bar',
- 'configkey' => 'foo',
- )
- ));
-
- $preferences = new OC\Preferences($connectionMock);
- $preferences->deleteKey('grg', 'bar', 'foo');
- }
-
- public function testDeleteApp()
- {
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->once())
- ->method('delete')
- ->with($this->equalTo('*PREFIX*preferences'),
- $this->equalTo(
- array(
- 'userid' => 'grg',
- 'appid' => 'bar',
- )
- ));
-
- $preferences = new OC\Preferences($connectionMock);
- $preferences->deleteApp('grg', 'bar');
- }
-
- public function testDeleteUser()
- {
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->once())
- ->method('delete')
- ->with($this->equalTo('*PREFIX*preferences'),
- $this->equalTo(
- array(
- 'userid' => 'grg',
- )
- ));
-
- $preferences = new OC\Preferences($connectionMock);
- $preferences->deleteUser('grg');
- }
-
- public function testDeleteAppFromAllUsers()
- {
- $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
- $connectionMock->expects($this->once())
- ->method('delete')
- ->with($this->equalTo('*PREFIX*preferences'),
- $this->equalTo(
- array(
- 'appid' => 'bar',
- )
- ));
-
- $preferences = new OC\Preferences($connectionMock);
- $preferences->deleteAppFromAllUsers('bar');
- }
-}
diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index 2febe524cba..2a6761403f4 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -8,7 +8,7 @@
namespace Test;
-class Preview extends \PHPUnit_Framework_TestCase {
+class Preview extends TestCase {
/**
* @var string
@@ -20,14 +20,34 @@ class Preview extends \PHPUnit_Framework_TestCase {
*/
private $rootView;
- public function setUp() {
- $this->user = $this->initFS();
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+
+ // create a new user with his own filesystem view
+ // this gets called by each test in this test class
+ $this->user = $this->getUniqueID();
+ \OC_User::setUserId($this->user);
+ \OC\Files\Filesystem::init($this->user, '/' . $this->user . '/files');
+
+ \OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/');
$this->rootView = new \OC\Files\View('');
$this->rootView->mkdir('/'.$this->user);
$this->rootView->mkdir('/'.$this->user.'/files');
}
+ protected function tearDown() {
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
+ }
+
public function testIsPreviewDeleted() {
$sampleFile = '/'.$this->user.'/files/test.txt';
@@ -184,16 +204,4 @@ class Preview extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/150-150.png', $isCached);
}
*/
-
- private function initFS() {
- // create a new user with his own filesystem view
- // this gets called by each test in this test class
- $user=uniqid();
- \OC_User::setUserId($user);
- \OC\Files\Filesystem::init($user, '/'.$user.'/files');
-
- \OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/');
-
- return $user;
- }
}
diff --git a/tests/lib/public/contacts.php b/tests/lib/public/contacts.php
index d6008876a00..151e98d3905 100644
--- a/tests/lib/public/contacts.php
+++ b/tests/lib/public/contacts.php
@@ -19,17 +19,12 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Contacts extends PHPUnit_Framework_TestCase
-{
-
- public function setUp() {
-
+class Test_Contacts extends \Test\TestCase {
+ protected function setUp() {
+ parent::setUp();
OCP\Contacts::clear();
}
- public function tearDown() {
- }
-
public function testDisabledIfEmpty() {
// pretty simple
$this->assertFalse(OCP\Contacts::isEnabled());
diff --git a/tests/lib/public/ocpconfig.php b/tests/lib/public/ocpconfig.php
index 43a9ca625ee..947d2b3c9ef 100644
--- a/tests/lib/public/ocpconfig.php
+++ b/tests/lib/public/ocpconfig.php
@@ -19,12 +19,11 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_OCPConfig extends PHPUnit_Framework_TestCase
-{
+class Test_OCPConfig extends \Test\TestCase {
public function testSetAppValueIfSetToNull() {
- $key = uniqid("key-");
+ $key = $this->getUniqueID('key-');
$result = \OCP\Config::setAppValue('unit-test', $key, null);
$this->assertTrue($result);
diff --git a/tests/lib/repair.php b/tests/lib/repair.php
index 121f41dedd9..248db382140 100644
--- a/tests/lib/repair.php
+++ b/tests/lib/repair.php
@@ -29,7 +29,7 @@ class TestRepairStep extends BasicEmitter implements \OC\RepairStep{
}
}
-class Test_Repair extends PHPUnit_Framework_TestCase {
+class Test_Repair extends \Test\TestCase {
public function testRunRepairStep() {
$output = array();
diff --git a/tests/lib/repair/repaircollation.php b/tests/lib/repair/repaircollation.php
index 362feb8463f..29dad190008 100644
--- a/tests/lib/repair/repaircollation.php
+++ b/tests/lib/repair/repaircollation.php
@@ -21,7 +21,7 @@ class TestCollationRepair extends \OC\Repair\Collation {
*
* @see \OC\Repair\RepairMimeTypes
*/
-class TestRepairCollation extends PHPUnit_Framework_TestCase {
+class TestRepairCollation extends \Test\TestCase {
/**
* @var TestCollationRepair
@@ -43,7 +43,9 @@ class TestRepairCollation extends PHPUnit_Framework_TestCase {
*/
private $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
$this->config = \OC::$server->getConfig();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) {
@@ -51,14 +53,15 @@ class TestRepairCollation extends PHPUnit_Framework_TestCase {
}
$dbPrefix = $this->config->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_collation_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . "_collation_test");
$this->connection->exec("CREATE TABLE $this->tableName(text VARCHAR(16)) COLLATE utf8_unicode_ci");
$this->repair = new TestCollationRepair($this->config, $this->connection);
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testCollationConvert() {
diff --git a/tests/lib/repair/repairinnodb.php b/tests/lib/repair/repairinnodb.php
index e7d2442f127..d4039472a6b 100644
--- a/tests/lib/repair/repairinnodb.php
+++ b/tests/lib/repair/repairinnodb.php
@@ -11,7 +11,7 @@
*
* @see \OC\Repair\RepairMimeTypes
*/
-class TestRepairInnoDB extends PHPUnit_Framework_TestCase {
+class TestRepairInnoDB extends \Test\TestCase {
/** @var \OC\RepairStep */
private $repair;
@@ -22,21 +22,24 @@ class TestRepairInnoDB extends PHPUnit_Framework_TestCase {
/** @var string */
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) {
$this->markTestSkipped("Test only relevant on MySql");
}
$dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_innodb_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . "_innodb_test");
$this->connection->exec("CREATE TABLE $this->tableName(id INT) ENGINE MyISAM");
$this->repair = new \OC\Repair\InnoDB();
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testInnoDBConvert() {
diff --git a/tests/lib/repair/repairlegacystorage.php b/tests/lib/repair/repairlegacystorage.php
index 4528c5288df..f08393300e1 100644
--- a/tests/lib/repair/repairlegacystorage.php
+++ b/tests/lib/repair/repairlegacystorage.php
@@ -11,8 +11,10 @@
*
* @see \OC\Repair\RepairLegacyStorages
*/
-class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
+class TestRepairLegacyStorages extends \Test\TestCase {
+ private $connection;
+ private $config;
private $user;
private $repair;
@@ -22,7 +24,9 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
private $legacyStorageId;
private $newStorageId;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = \OC::$server->getConfig();
$this->connection = \OC_DB::getConnection();
$this->oldDataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/');
@@ -30,7 +34,7 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
$this->repair = new \OC\Repair\RepairLegacyStorages($this->config, $this->connection);
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::deleteUser($this->user);
$sql = 'DELETE FROM `*PREFIX*storages`';
@@ -39,6 +43,8 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
$this->connection->executeQuery($sql);
\OCP\Config::setSystemValue('datadirectory', $this->oldDataDir);
$this->config->setAppValue('core', 'repairlegacystoragesdone', 'no');
+
+ parent::tearDown();
}
function prepareSettings($dataDir, $userId) {
@@ -243,12 +249,12 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
// regular data dir
array(
'/tmp/oc-autotest/datadir/',
- uniqid('user_'),
+ $this->getUniqueID('user_'),
),
// long datadir / short user
array(
'/tmp/oc-autotest/datadir01234567890123456789012345678901234567890123456789END/',
- uniqid('user_'),
+ $this->getUniqueID('user_'),
),
// short datadir / long user
array(
@@ -267,7 +273,7 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
$output[] = 'info: ' . $description;
});
- $this->prepareSettings('/tmp/oc-autotest/datadir', uniqid('user_'));
+ $this->prepareSettings('/tmp/oc-autotest/datadir', $this->getUniqueID('user_'));
$this->assertNotEquals('yes', $this->config->getAppValue('core', 'repairlegacystoragesdone'));
$this->repair->run();
$this->assertEquals(1, count($output));
diff --git a/tests/lib/repair/repairmimetypes.php b/tests/lib/repair/repairmimetypes.php
index 7754864a69e..6eaf68d8a44 100644
--- a/tests/lib/repair/repairmimetypes.php
+++ b/tests/lib/repair/repairmimetypes.php
@@ -11,26 +11,29 @@
*
* @see \OC\Repair\RepairMimeTypes
*/
-class TestRepairMimeTypes extends PHPUnit_Framework_TestCase {
+class TestRepairMimeTypes extends \Test\TestCase {
/** @var \OC\RepairStep */
private $repair;
private $storage;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->storage = new \OC\Files\Storage\Temporary(array());
$this->repair = new \OC\Repair\RepairMimeTypes();
}
- public function tearDown() {
+ protected function tearDown() {
$this->storage->getCache()->clear();
$sql = 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?';
\OC_DB::executeAudited($sql, array($this->storage->getId()));
$this->clearMimeTypes();
DummyFileCache::clearCachedMimeTypes();
+
+ parent::tearDown();
}
private function clearMimeTypes() {
diff --git a/tests/lib/request.php b/tests/lib/request.php
index b89bf92ece7..ea3722b90a6 100644
--- a/tests/lib/request.php
+++ b/tests/lib/request.php
@@ -6,19 +6,23 @@
* See the COPYING-README file.
*/
-class Test_Request extends PHPUnit_Framework_TestCase {
+class Test_Request extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
OC::$server->getConfig()->setSystemValue('overwritewebroot', '/domain.tld/ownCloud');
OC::$server->getConfig()->setSystemValue('trusted_proxies', array());
OC::$server->getConfig()->setSystemValue('forwarded_for_headers', array());
}
- public function tearDown() {
+ protected function tearDown() {
OC::$server->getConfig()->setSystemValue('overwritewebroot', '');
OC::$server->getConfig()->setSystemValue('trusted_proxies', array());
OC::$server->getConfig()->setSystemValue('forwarded_for_headers', array());
+
+ parent::tearDown();
}
public function testScriptNameOverWrite() {
@@ -224,6 +228,23 @@ class Test_Request extends PHPUnit_Framework_TestCase {
OC_Config::deleteKey('overwritehost');
}
+ public function hostWithPortProvider() {
+ return array(
+ array('localhost:500', 'localhost'),
+ array('foo.com', 'foo.com'),
+ array('[1fff:0:a88:85a3::ac1f]:801', '[1fff:0:a88:85a3::ac1f]'),
+ array('[1fff:0:a88:85a3::ac1f]', '[1fff:0:a88:85a3::ac1f]')
+ );
+ }
+
+ /**
+ * @dataProvider hostWithPortProvider
+ */
+ public function testGetDomainWithoutPort($hostWithPort, $host) {
+ $this->assertEquals($host, OC_Request::getDomainWithoutPort($hostWithPort));
+
+ }
+
/**
* @dataProvider trustedDomainDataProvider
*/
@@ -240,7 +261,7 @@ class Test_Request extends PHPUnit_Framework_TestCase {
}
public function trustedDomainDataProvider() {
- $trustedHostTestList = array('host.one.test:8080', 'host.two.test:8080');
+ $trustedHostTestList = array('host.one.test', 'host.two.test', '[1fff:0:a88:85a3::ac1f]');
return array(
// empty defaults to true
array(null, 'host.one.test:8080', true),
@@ -249,8 +270,12 @@ class Test_Request extends PHPUnit_Framework_TestCase {
// trust list when defined
array($trustedHostTestList, 'host.two.test:8080', true),
- array($trustedHostTestList, 'host.two.test:9999', false),
+ array($trustedHostTestList, 'host.two.test:9999', true),
array($trustedHostTestList, 'host.three.test:8080', false),
+ array($trustedHostTestList, 'host.two.test:8080:aa:222', false),
+ array($trustedHostTestList, '[1fff:0:a88:85a3::ac1f]', true),
+ array($trustedHostTestList, '[1fff:0:a88:85a3::ac1f]:801', true),
+ array($trustedHostTestList, '[1fff:0:a88:85a3::ac1f]:801:34', false),
// trust localhost regardless of trust list
array($trustedHostTestList, 'localhost', true),
diff --git a/tests/lib/security/certificate.php b/tests/lib/security/certificate.php
index 898f583a43c..361f2f8c38d 100644
--- a/tests/lib/security/certificate.php
+++ b/tests/lib/security/certificate.php
@@ -8,7 +8,7 @@
use \OC\Security\Certificate;
-class CertificateTest extends \PHPUnit_Framework_TestCase {
+class CertificateTest extends \Test\TestCase {
/** @var Certificate That contains a valid certificate */
protected $goodCertificate;
@@ -17,7 +17,9 @@ class CertificateTest extends \PHPUnit_Framework_TestCase {
/** @var Certificate That contains an expired certificate */
protected $expiredCertificate;
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$goodCertificate = file_get_contents(__DIR__ . '/../../data/certificates/goodCertificate.crt');
$this->goodCertificate = new Certificate($goodCertificate, 'GoodCertificate');
$badCertificate = file_get_contents(__DIR__ . '/../../data/certificates/badCertificate.crt');
diff --git a/tests/lib/security/certificatemanager.php b/tests/lib/security/certificatemanager.php
index 5baf9e16e81..cff6932b670 100644
--- a/tests/lib/security/certificatemanager.php
+++ b/tests/lib/security/certificatemanager.php
@@ -8,7 +8,7 @@
use \OC\Security\CertificateManager;
-class CertificateManagerTest extends \PHPUnit_Framework_TestCase {
+class CertificateManagerTest extends \Test\TestCase {
/** @var CertificateManager */
private $certificateManager;
@@ -17,9 +17,11 @@ class CertificateManagerTest extends \PHPUnit_Framework_TestCase {
/** @var \OC\User\User */
private $user;
- function setUp() {
- $this->username = OC_Util::generateRandomBytes(20);
- OC_User::createUser($this->username, OC_Util::generateRandomBytes(20));
+ protected function setUp() {
+ parent::setUp();
+
+ $this->username = $this->getUniqueID('', 20);
+ OC_User::createUser($this->username, $this->getUniqueID('', 20));
\OC_Util::tearDownFS();
\OC_User::setUserId('');
@@ -31,8 +33,9 @@ class CertificateManagerTest extends \PHPUnit_Framework_TestCase {
$this->certificateManager = new CertificateManager($this->user);
}
- function tearDown() {
+ protected function tearDown() {
\OC_User::deleteUser($this->username);
+ parent::tearDown();
}
protected function assertEqualsArrays($expected, $actual) {
diff --git a/tests/lib/security/crypto.php b/tests/lib/security/crypto.php
index 0f89253839e..1571cf89248 100644
--- a/tests/lib/security/crypto.php
+++ b/tests/lib/security/crypto.php
@@ -8,7 +8,7 @@
use \OC\Security\Crypto;
-class CryptoTest extends \PHPUnit_Framework_TestCase {
+class CryptoTest extends \Test\TestCase {
public function defaultEncryptionProvider()
{
@@ -23,6 +23,7 @@ class CryptoTest extends \PHPUnit_Framework_TestCase {
protected $crypto;
protected function setUp() {
+ parent::setUp();
$this->crypto = new Crypto(\OC::$server->getConfig(), \OC::$server->getSecureRandom());
}
diff --git a/tests/lib/security/hasher.php b/tests/lib/security/hasher.php
new file mode 100644
index 00000000000..330789c67a0
--- /dev/null
+++ b/tests/lib/security/hasher.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+use OC\Security\Hasher;
+
+/**
+ * Class HasherTest
+ */
+class HasherTest extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @return array
+ */
+ public function versionHashProvider()
+ {
+ return array(
+ array('asf32äà$$a.|3', null),
+ array('asf32äà$$a.|3|5', null),
+ array('1|2|3|4', array('version' => 1, 'hash' => '2|3|4')),
+ array('1|我看|这本书。 我看這本書', array('version' => 1, 'hash' => '我看|这本书。 我看這本書'))
+ );
+ }
+
+ /**
+ * @return array
+ */
+ public function allHashProviders()
+ {
+ return array(
+ // Bogus values
+ array(null, 'asf32äà$$a.|3', false),
+ array(null, false, false),
+
+ // Valid SHA1 strings
+ array('password', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', true),
+ array('owncloud.com', '27a4643e43046c3569e33b68c1a4b15d31306d29', true),
+
+ // Invalid SHA1 strings
+ array('InvalidString', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', false),
+ array('AnotherInvalidOne', '27a4643e43046c3569e33b68c1a4b15d31306d29', false),
+
+ // Valid legacy password string with password salt "6Wow67q1wZQZpUUeI6G2LsWUu4XKx"
+ array('password', '$2a$08$emCpDEl.V.QwPWt5gPrqrOhdpH6ailBmkj2Hd2vD5U8qIy20HBe7.', true),
+ array('password', '$2a$08$yjaLO4ev70SaOsWZ9gRS3eRSEpHVsmSWTdTms1949mylxJ279hzo2', true),
+ array('password', '$2a$08$.jNRG/oB4r7gHJhAyb.mDupNUAqTnBIW/tWBqFobaYflKXiFeG0A6', true),
+ array('owncloud.com', '$2a$08$YbEsyASX/hXVNMv8hXQo7ezreN17T8Jl6PjecGZvpX.Ayz2aUyaZ2', true),
+ array('owncloud.com', '$2a$11$cHdDA2IkUP28oNGBwlL7jO/U3dpr8/0LIjTZmE8dMPA7OCUQsSTqS', true),
+ array('owncloud.com', '$2a$08$GH.UoIfJ1e.qeZ85KPqzQe6NR8XWRgJXWIUeE1o/j1xndvyTA1x96', true),
+
+ // Invalid legacy passwords
+ array('password', '$2a$08$oKAQY5IhnZocP.61MwP7xu7TNeOb7Ostvk3j6UpacvaNMs.xRj7O2', false),
+
+ // Valid passwords "6Wow67q1wZQZpUUeI6G2LsWUu4XKx"
+ array('password', '1|$2a$05$ezAE0dkwk57jlfo6z5Pql.gcIK3ReXT15W7ITNxVS0ksfhO/4E4Kq', true),
+ array('password', '1|$2a$05$4OQmloFW4yTVez2MEWGIleDO9Z5G9tWBXxn1vddogmKBQq/Mq93pe', true),
+ array('password', '1|$2a$11$yj0hlp6qR32G9exGEXktB.yW2rgt2maRBbPgi3EyxcDwKrD14x/WO', true),
+ array('owncloud.com', '1|$2a$10$Yiss2WVOqGakxuuqySv5UeOKpF8d8KmNjuAPcBMiRJGizJXjA2bKm', true),
+ array('owncloud.com', '1|$2a$10$v9mh8/.mF/Ut9jZ7pRnpkuac3bdFCnc4W/gSumheQUi02Sr.xMjPi', true),
+ array('owncloud.com', '1|$2a$05$ST5E.rplNRfDCzRpzq69leRzsTGtY7k88h9Vy2eWj0Ug/iA9w5kGK', true),
+
+ // Invalid passwords
+ array('password', '0|$2a$08$oKAQY5IhnZocP.61MwP7xu7TNeOb7Ostvk3j6UpacvaNMs.xRj7O2', false),
+ array('password', '1|$2a$08$oKAQY5IhnZocP.61MwP7xu7TNeOb7Ostvk3j6UpacvaNMs.xRj7O2', false),
+ array('password', '2|$2a$08$oKAQY5IhnZocP.61MwP7xu7TNeOb7Ostvk3j6UpacvaNMs.xRj7O2', false),
+ );
+ }
+
+
+
+ /** @var Hasher */
+ protected $hasher;
+ /** @var \OCP\IConfig */
+ protected $config;
+
+ protected function setUp() {
+ $this->config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->hasher = new Hasher($this->config);
+ }
+
+ function testHash() {
+ $hash = $this->hasher->hash('String To Hash');
+ $this->assertNotNull($hash);
+ }
+
+ /**
+ * @dataProvider versionHashProvider
+ */
+ function testSplitHash($hash, $expected) {
+ $relativePath = \Test_Helper::invokePrivate($this->hasher, 'splitHash', array($hash));
+ $this->assertSame($expected, $relativePath);
+ }
+
+
+ /**
+ * @dataProvider allHashProviders
+ */
+ function testVerify($password, $hash, $expected) {
+ $this->config
+ ->expects($this->any())
+ ->method('getSystemValue')
+ ->with('passwordsalt', null)
+ ->will($this->returnValue('6Wow67q1wZQZpUUeI6G2LsWUu4XKx'));
+
+ $result = $this->hasher->verify($password, $hash);
+ $this->assertSame($expected, $result);
+ }
+
+}
diff --git a/tests/lib/security/securerandom.php b/tests/lib/security/securerandom.php
index 2920077fa1d..d9bbd0e71e5 100644
--- a/tests/lib/security/securerandom.php
+++ b/tests/lib/security/securerandom.php
@@ -8,7 +8,7 @@
use \OC\Security\SecureRandom;
-class SecureRandomTest extends \PHPUnit_Framework_TestCase {
+class SecureRandomTest extends \Test\TestCase {
public function stringGenerationProvider() {
return array(
@@ -34,6 +34,7 @@ class SecureRandomTest extends \PHPUnit_Framework_TestCase {
protected $rng;
protected function setUp() {
+ parent::setUp();
$this->rng = new \OC\Security\SecureRandom();
}
diff --git a/tests/lib/security/stringutils.php b/tests/lib/security/stringutils.php
index 039f3d3756a..060315debb4 100644
--- a/tests/lib/security/stringutils.php
+++ b/tests/lib/security/stringutils.php
@@ -8,7 +8,7 @@
use \OC\Security\StringUtils;
-class StringUtilsTest extends \PHPUnit_Framework_TestCase {
+class StringUtilsTest extends \Test\TestCase {
public function dataProvider()
{
diff --git a/tests/lib/session/memory.php b/tests/lib/session/memory.php
index 2dc236b73bf..1ca4956c6ea 100644
--- a/tests/lib/session/memory.php
+++ b/tests/lib/session/memory.php
@@ -10,7 +10,8 @@
namespace Test\Session;
class Memory extends Session {
- public function setUp() {
- $this->instance = new \OC\Session\Memory(uniqid());
+ protected function setUp() {
+ parent::setUp();
+ $this->instance = new \OC\Session\Memory($this->getUniqueID());
}
}
diff --git a/tests/lib/session/session.php b/tests/lib/session/session.php
index 9ce11274c84..a1ed01b2ec8 100644
--- a/tests/lib/session/session.php
+++ b/tests/lib/session/session.php
@@ -9,14 +9,15 @@
namespace Test\Session;
-abstract class Session extends \PHPUnit_Framework_TestCase {
+abstract class Session extends \Test\TestCase {
/**
* @var \OC\Session\Session
*/
protected $instance;
- public function tearDown() {
+ protected function tearDown() {
$this->instance->clear();
+ parent::tearDown();
}
public function testNotExistsEmpty() {
diff --git a/tests/lib/setup.php b/tests/lib/setup.php
index 2c1569dd800..a221943c016 100644
--- a/tests/lib/setup.php
+++ b/tests/lib/setup.php
@@ -8,16 +8,18 @@
use OCP\IConfig;
-class Test_OC_Setup extends PHPUnit_Framework_TestCase {
+class Test_OC_Setup extends \Test\TestCase {
/** @var IConfig */
protected $config;
/** @var \OC_Setup */
protected $setupClass;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = $this->getMock('\OCP\IConfig');
- $this->setupClass = $this->getMock('\OC_Setup', array('class_exists', 'is_callable'), array($this->config));
+ $this->setupClass = $this->getMock('\OC_Setup', ['class_exists', 'is_callable'], [$this->config]);
}
public function testGetSupportedDatabasesWithOneWorking() {
@@ -100,4 +102,17 @@ class Test_OC_Setup extends PHPUnit_Framework_TestCase {
->will($this->returnValue('NotAnArray'));
$this->setupClass->getSupportedDatabases();
}
+
+ /**
+ * This is actual more an integration test whether the version parameter in the .htaccess
+ * was updated as well when the version has been incremented.
+ * If it hasn't this test will fail.
+ */
+ public function testHtaccessIsCurrent() {
+ $result = Test_Helper::invokePrivate(
+ $this->setupClass,
+ 'isCurrentHtaccess'
+ );
+ $this->assertTrue($result);
+ }
} \ No newline at end of file
diff --git a/tests/lib/share/backend.php b/tests/lib/share/backend.php
index 61b8f262a42..9c0d7fcb020 100644
--- a/tests/lib/share/backend.php
+++ b/tests/lib/share/backend.php
@@ -19,8 +19,6 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-OC::$CLASSPATH['OCP\Share_Backend']='lib/public/share.php';
-
class Test_Share_Backend implements OCP\Share_Backend {
const FORMAT_SOURCE = 0;
@@ -86,4 +84,8 @@ class Test_Share_Backend implements OCP\Share_Backend {
return $testItems;
}
+ public function isShareTypeAllowed($shareType) {
+ return true;
+ }
+
}
diff --git a/tests/lib/share/helper.php b/tests/lib/share/helper.php
index 367507417a0..7a546410aea 100644
--- a/tests/lib/share/helper.php
+++ b/tests/lib/share/helper.php
@@ -19,7 +19,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Share_Helper extends PHPUnit_Framework_TestCase {
+class Test_Share_Helper extends \Test\TestCase {
public function expireDateProvider() {
return array(
@@ -27,8 +27,8 @@ class Test_Share_Helper extends PHPUnit_Framework_TestCase {
array(array('defaultExpireDateSet' => false), 2000000000, 2000010000, 2000010000),
// no default expire date and no user defined expire date, return false
array(array('defaultExpireDateSet' => false), 2000000000, null, false),
- // unenforced expire data and no user defined expire date, take default expire date
- array(array('defaultExpireDateSet' => true, 'expireAfterDays' => 1, 'enforceExpireDate' => false), 2000000000, null, 2000086400),
+ // unenforced expire data and no user defined expire date, return false (because the default is not enforced)
+ array(array('defaultExpireDateSet' => true, 'expireAfterDays' => 1, 'enforceExpireDate' => false), 2000000000, null, false),
// enforced expire date and no user defined expire date, take default expire date
array(array('defaultExpireDateSet' => true, 'expireAfterDays' => 1, 'enforceExpireDate' => true), 2000000000, null, 2000086400),
// unenforced expire date and user defined date > default expire date, take users expire date
@@ -49,6 +49,4 @@ class Test_Share_Helper extends PHPUnit_Framework_TestCase {
$result = \OC\Share\Helper::calculateExpireDate($defaultExpireSettings, $creationTime, $userExpireDate);
$this->assertSame($expected, $result);
}
-
-
}
diff --git a/tests/lib/share/searchresultsorter.php b/tests/lib/share/searchresultsorter.php
index eaf93400a7d..97ef0f9478a 100644
--- a/tests/lib/share/searchresultsorter.php
+++ b/tests/lib/share/searchresultsorter.php
@@ -19,7 +19,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Share_Search extends \PHPUnit_Framework_TestCase {
+class Test_Share_Search extends \Test\TestCase {
public function testSort() {
$search = 'lin';
$sorter = new \OC\Share\SearchResultSorter($search, 'foobar');
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index 3d99883f2de..b8abfa29a81 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -19,7 +19,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Share extends PHPUnit_Framework_TestCase {
+class Test_Share extends \Test\TestCase {
protected $itemType;
protected $userBackend;
@@ -27,6 +27,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected $user2;
protected $user3;
protected $user4;
+ protected $groupAndUser;
protected $groupBackend;
protected $group1;
protected $group2;
@@ -34,29 +35,36 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected $dateInFuture;
protected $dateInPast;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
OC_User::clearBackends();
OC_User::useBackend('dummy');
- $this->user1 = uniqid('user1_');
- $this->user2 = uniqid('user2_');
- $this->user3 = uniqid('user3_');
- $this->user4 = uniqid('user4_');
+ $this->user1 = $this->getUniqueID('user1_');
+ $this->user2 = $this->getUniqueID('user2_');
+ $this->user3 = $this->getUniqueID('user3_');
+ $this->user4 = $this->getUniqueID('user4_');
+ $this->groupAndUser = $this->getUniqueID('groupAndUser_');
OC_User::createUser($this->user1, 'pass');
OC_User::createUser($this->user2, 'pass');
OC_User::createUser($this->user3, 'pass');
OC_User::createUser($this->user4, 'pass');
+ OC_User::createUser($this->groupAndUser, 'pass');
OC_User::setUserId($this->user1);
OC_Group::clearBackends();
OC_Group::useBackend(new OC_Group_Dummy);
- $this->group1 = uniqid('group1_');
- $this->group2 = uniqid('group2_');
+ $this->group1 = $this->getUniqueID('group1_');
+ $this->group2 = $this->getUniqueID('group2_');
OC_Group::createGroup($this->group1);
OC_Group::createGroup($this->group2);
+ OC_Group::createGroup($this->groupAndUser);
OC_Group::addToGroup($this->user1, $this->group1);
OC_Group::addToGroup($this->user2, $this->group1);
OC_Group::addToGroup($this->user3, $this->group1);
OC_Group::addToGroup($this->user2, $this->group2);
OC_Group::addToGroup($this->user4, $this->group2);
+ OC_Group::addToGroup($this->user2, $this->groupAndUser);
+ OC_Group::addToGroup($this->user3, $this->groupAndUser);
OCP\Share::registerBackend('test', 'Test_Share_Backend');
OC_Hook::clear('OCP\\Share');
OC::registerShareHooks();
@@ -70,16 +78,18 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->dateInFuture = date($dateFormat, $now + 20 * 60);
}
- public function tearDown() {
+ protected function tearDown() {
$query = OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `item_type` = ?');
$query->execute(array('test'));
OC_Appconfig::setValue('core', 'shareapi_allow_resharing', $this->resharing);
+
+ parent::tearDown();
}
public function testShareInvalidShareType() {
$message = 'Share type foobar is not valid for test.txt';
try {
- OCP\Share::shareItem('test', 'test.txt', 'foobar', $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', 'foobar', $this->user2, \OCP\Constants::PERMISSION_READ);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
@@ -88,7 +98,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
public function testInvalidItemType() {
$message = 'Sharing backend for foobar not found';
try {
- OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -124,7 +134,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertEquals($message, $exception->getMessage());
}
try {
- OCP\Share::setPermissions('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_UPDATE);
+ OCP\Share::setPermissions('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_UPDATE);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -134,7 +144,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserOneTestFileWithUserTwo() {
OC_User::setUserId($this->user1);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ),
'Failed asserting that user 1 successfully shared text.txt with user 2.'
);
$this->assertContains(
@@ -153,7 +163,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserTestFileAsLink() {
OC_User::setUserId($this->user1);
- $result = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+ $result = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertTrue(is_string($result));
}
@@ -164,7 +174,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserTestFileWithUser($sharer, $receiver) {
OC_User::setUserId($sharer);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $receiver, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $receiver, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE),
'Failed asserting that ' . $sharer . ' successfully shared text.txt with ' . $receiver . '.'
);
$this->assertContains(
@@ -185,21 +195,21 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Invalid shares
$message = 'Sharing test.txt failed, because the user '.$this->user1.' is the item owner';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
$message = 'Sharing test.txt failed, because the user foobar does not exist';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, 'foobar', OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, 'foobar', \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
$message = 'Sharing foobar failed, because the sharing backend for test could not find its source';
try {
- OCP\Share::shareItem('test', 'foobar', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'foobar', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -212,7 +222,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->user2;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -222,7 +232,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -233,11 +243,11 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
// Attempt reshare without share permission
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because resharing is not allowed';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -245,30 +255,30 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Owner grants share and update permission
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE));
// Attempt reshare with escalated permissions
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
// Valid reshare
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE));
$this->assertEquals(array('test.txt'), OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE));
OC_User::setUserId($this->user3);
$this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Attempt to escalate permissions
OC_User::setUserId($this->user2);
$message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
try {
- OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE);
+ OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -276,25 +286,25 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Remove update permission
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user3);
- $this->assertEquals(array(OCP\PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Remove share permission
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user3);
$this->assertSame(array(), OCP\Share::getItemSharedWith('test', 'test.txt'));
// Reshare again, and then have owner unshare
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user2);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user1);
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
OC_User::setUserId($this->user2);
@@ -304,9 +314,9 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Attempt target conflict
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user3);
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET);
@@ -323,9 +333,9 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user3);
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET);
@@ -402,7 +412,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_ALL),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_ALL),
'Failed asserting that user 1 successfully shared text.txt with user 4.'
);
$this->assertContains(
@@ -419,7 +429,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$share = OCP\Share::getItemSharedWith('test', 'test.txt');
- $this->assertSame(\OCP\PERMISSION_ALL & ~OCP\PERMISSION_SHARE, $share['permissions'],
+ $this->assertSame(\OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_SHARE, $share['permissions'],
'Failed asserting that user 4 is excluded from re-sharing');
\OC_Appconfig::deleteKey('core', 'shareapi_exclude_groups_list');
@@ -430,7 +440,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserOneTestFileWithGroupOne() {
OC_User::setUserId($this->user1);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ),
'Failed asserting that user 1 successfully shared text.txt with group 1.'
);
$this->assertContains(
@@ -458,7 +468,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Invalid shares
$message = 'Sharing test.txt failed, because the group foobar does not exist';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -467,7 +477,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_Appconfig::setValue('core', 'shareapi_only_share_with_group_members', 'yes');
$message = 'Sharing test.txt failed, because '.$this->user1.' is not a member of the group '.$this->group2;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -481,7 +491,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -491,7 +501,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -500,7 +510,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Attempt to share back to group
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -509,7 +519,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Attempt to share back to member of group
$message ='Sharing test.txt failed, because this item is already shared with '.$this->user3;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -520,18 +530,18 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
// Valid share with same person - user then group
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE | OCP\PERMISSION_SHARE));
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE));
OC_User::setUserId($this->user2);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE | OCP\PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user3);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Valid reshare
OC_User::setUserId($this->user2);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user4);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
@@ -539,26 +549,26 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user4);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
// Valid share with same person - group then user
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE));
OC_User::setUserId($this->user2);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Unshare from group only
OC_User::setUserId($this->user1);
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Attempt user specific target conflict
OC_User::setUserId($this->user3);
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user2);
$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET);
$this->assertEquals(2, count($to_test));
@@ -566,7 +576,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertTrue(in_array('test1.txt', $to_test));
// Valid reshare
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user4);
$this->assertEquals(array('test1.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
@@ -600,6 +610,41 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertEquals(array(), OCP\Share::getItemsShared('test'));
}
+
+ public function testShareWithGroupAndUserBothHaveTheSameId() {
+
+ $this->shareUserTestFileWithUser($this->user1, $this->groupAndUser);
+
+ OC_User::setUserId($this->groupAndUser);
+
+ $this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ '"groupAndUser"-User does not see the file but it was shared with him');
+
+ OC_User::setUserId($this->user2);
+ $this->assertEquals(array(), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ 'User2 sees test.txt but it was only shared with the user "groupAndUser" and not with group');
+
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshareAll('test', 'test.txt'));
+
+ $this->assertTrue(
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->groupAndUser, \OCP\Constants::PERMISSION_READ),
+ 'Failed asserting that user 1 successfully shared text.txt with group 1.'
+ );
+
+ OC_User::setUserId($this->groupAndUser);
+ $this->assertEquals(array(), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ '"groupAndUser"-User sees test.txt but it was only shared with the group "groupAndUser" and not with the user');
+
+ OC_User::setUserId($this->user2);
+ $this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ 'User2 does not see test.txt but it was shared with the group "groupAndUser"');
+
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshareAll('test', 'test.txt'));
+
+ }
+
/**
* @param boolean|string $token
*/
@@ -613,9 +658,53 @@ class Test_Share extends PHPUnit_Framework_TestCase {
return $row;
}
+ public function testGetItemSharedWithUser() {
+ OC_User::setUserId($this->user1);
+
+ //add dummy values to the share table
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` ('
+ .' `item_type`, `item_source`, `item_target`, `share_type`,'
+ .' `share_with`, `uid_owner`) VALUES (?,?,?,?,?,?)');
+ $args = array('test', 99, 'target1', OCP\Share::SHARE_TYPE_USER, $this->user2, $this->user1);
+ $query->execute($args);
+ $args = array('test', 99, 'target2', OCP\Share::SHARE_TYPE_USER, $this->user4, $this->user1);
+ $query->execute($args);
+ $args = array('test', 99, 'target3', OCP\Share::SHARE_TYPE_USER, $this->user3, $this->user2);
+ $query->execute($args);
+ $args = array('test', 99, 'target4', OCP\Share::SHARE_TYPE_USER, $this->user3, $this->user4);
+ $query->execute($args);
+
+
+ $result1 = \OCP\Share::getItemSharedWithUser('test', 99, $this->user2, $this->user1);
+ $this->assertSame(1, count($result1));
+ $this->verifyResult($result1, array('target1'));
+
+ $result2 = \OCP\Share::getItemSharedWithUser('test', 99, null, $this->user1);
+ $this->assertSame(2, count($result2));
+ $this->verifyResult($result2, array('target1', 'target2'));
+
+ $result3 = \OCP\Share::getItemSharedWithUser('test', 99, $this->user3);
+ $this->assertSame(2, count($result3));
+ $this->verifyResult($result3, array('target3', 'target4'));
+
+ $result4 = \OCP\Share::getItemSharedWithUser('test', 99, null, null);
+ $this->assertSame(4, count($result4));
+ $this->verifyResult($result4, array('target1', 'target2', 'target3', 'target4'));
+ }
+
+ public function verifyResult($result, $expected) {
+ foreach ($result as $r) {
+ if (in_array($r['item_target'], $expected)) {
+ $key = array_search($r['item_target'], $expected);
+ unset($expected[$key]);
+ }
+ }
+ $this->assertEmpty($expected, 'did not found all expected values');
+ }
+
public function testShareItemWithLink() {
OC_User::setUserId($this->user1);
- $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+ $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertInternalType(
'string',
$token,
@@ -661,7 +750,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
\OC_Appconfig::setValue('core', 'shareapi_default_expire_date', 'yes');
\OC_Appconfig::setValue('core', 'shareapi_expire_after_n_days', '2');
- $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+ $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertInternalType(
'string',
$token,
@@ -760,6 +849,23 @@ class Test_Share extends PHPUnit_Framework_TestCase {
}
/**
+ * @dataProvider urls
+ */
+ function testRemoveProtocolFromUrl($url, $expectedResult) {
+ $share = new \OC\Share\Share();
+ $result = \Test_Helper::invokePrivate($share, 'removeProtocolFromUrl', array($url));
+ $this->assertSame($expectedResult, $result);
+ }
+
+ function urls() {
+ return array(
+ array('http://owncloud.org', 'owncloud.org'),
+ array('https://owncloud.org', 'owncloud.org'),
+ array('owncloud.org', 'owncloud.org'),
+ );
+ }
+
+ /**
* @dataProvider dataProviderTestGroupItems
* @param type $ungrouped
* @param type $grouped
@@ -787,20 +893,20 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// one array with one share
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_ALL, 'item_target' => 't1')),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_ALL, 'item_target' => 't1')),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_ALL, 'item_target' => 't1'))),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_ALL, 'item_target' => 't1'))),
// two shares both point to the same source
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, 'item_target' => 't1',
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1',
'grouped' => array(
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
)
),
)
@@ -808,29 +914,29 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// two shares both point to the same source but with different targets
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't2'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't2'),
),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't2'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't2'),
)
),
// three shares two point to the same source
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 2, 'permissions' => \OCP\PERMISSION_CREATE, 'item_target' => 't2'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 2, 'permissions' => \OCP\Constants::PERMISSION_CREATE, 'item_target' => 't2'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, 'item_target' => 't1',
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1',
'grouped' => array(
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
)
),
- array('item_source' => 2, 'permissions' => \OCP\PERMISSION_CREATE, 'item_target' => 't2'),
+ array('item_source' => 2, 'permissions' => \OCP\Constants::PERMISSION_CREATE, 'item_target' => 't2'),
)
),
);
diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php
index 1b61446f4dc..9a3b6bc9266 100644
--- a/tests/lib/streamwrappers.php
+++ b/tests/lib/streamwrappers.php
@@ -20,7 +20,7 @@
*
*/
-class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
+class Test_StreamWrappers extends \Test\TestCase {
public function testFakeDir() {
$items = array('foo', 'bar');
\OC\Files\Stream\Dir::register('test', $items);
@@ -65,7 +65,9 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
}
public function testOC() {
+ $originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
+
$storage = new \OC\Files\Storage\Temporary(array());
$storage->file_put_contents('foo.txt', 'asd');
\OC\Files\Filesystem::mount($storage, array(), '/');
@@ -91,5 +93,8 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
unlink('oc:///foo.txt');
$this->assertEquals(array('.', '..', 'bar.txt'), scandir('oc:///'));
+
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($originalStorage, array(), '/');
}
}
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 57b64f1cd36..71296d2e346 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -20,28 +20,45 @@
*
*/
-class Test_Tags extends PHPUnit_Framework_TestCase {
+class Test_Tags extends \Test\TestCase {
protected $objectType;
+ /** @var \OC\IUser */
protected $user;
+ /** @var \OC\IUserSession */
+ protected $userSession;
protected $backupGlobals = FALSE;
+ /** @var \OC\Tagging\TagMapper */
+ protected $tagMapper;
+ /** @var \OC\TagManager */
+ protected $tagMgr;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
OC_User::clearBackends();
OC_User::useBackend('dummy');
- $this->user = uniqid('user_');
- $this->objectType = uniqid('type_');
- OC_User::createUser($this->user, 'pass');
- OC_User::setUserId($this->user);
+ $userId = $this->getUniqueID('user_');
+ OC_User::createUser($userId, 'pass');
+ OC_User::setUserId($userId);
+ $this->user = new OC\User\User($userId, null);
+ $this->userSession = $this->getMock('\OCP\IUserSession');
+ $this->userSession
+ ->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue($this->user));
+
+ $this->objectType = $this->getUniqueID('type_');
$this->tagMapper = new OC\Tagging\TagMapper(\OC::$server->getDb());
- $this->tagMgr = new OC\TagManager($this->tagMapper, $this->user);
+ $this->tagMgr = new OC\TagManager($this->tagMapper, $this->userSession);
}
- public function tearDown() {
+ protected function tearDown() {
//$query = OC_DB::prepare('DELETE FROM `*PREFIX*vcategories` WHERE `item_type` = ?');
//$query->execute(array('test'));
+
+ parent::tearDown();
}
public function testInstantiateWithDefaults() {
@@ -129,7 +146,37 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
$this->assertFalse($tagger->isEmpty());
}
- public function testdeleteTags() {
+ public function testGetTagsForObjects() {
+ $defaultTags = array('Friends', 'Family', 'Work', 'Other');
+ $tagger = $this->tagMgr->load($this->objectType, $defaultTags);
+
+ $tagger->tagAs(1, 'Friends');
+ $tagger->tagAs(1, 'Other');
+ $tagger->tagAs(2, 'Family');
+
+ $tags = $tagger->getTagsForObjects(array(1));
+ $this->assertEquals(1, count($tags));
+ $tags = current($tags);
+ sort($tags);
+ $this->assertSame(array('Friends', 'Other'), $tags);
+
+ $tags = $tagger->getTagsForObjects(array(1, 2));
+ $this->assertEquals(2, count($tags));
+ $tags1 = $tags[1];
+ sort($tags1);
+ $this->assertSame(array('Friends', 'Other'), $tags1);
+ $this->assertSame(array('Family'), $tags[2]);
+ $this->assertEquals(
+ array(),
+ $tagger->getTagsForObjects(array(4))
+ );
+ $this->assertEquals(
+ array(),
+ $tagger->getTagsForObjects(array(4, 5))
+ );
+ }
+
+ public function testDeleteTags() {
$defaultTags = array('Friends', 'Family', 'Work', 'Other');
$tagger = $this->tagMgr->load($this->objectType, $defaultTags);
@@ -140,7 +187,6 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
$tagger->delete(array('Friends', 'Work', 'Other'));
$this->assertEquals(0, count($tagger->getTags()));
-
}
public function testRenameTag() {
@@ -196,27 +242,32 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
}
public function testShareTags() {
- $test_tag = 'TestTag';
+ $testTag = 'TestTag';
OCP\Share::registerBackend('test', 'Test_Share_Backend');
$tagger = $this->tagMgr->load('test');
- $tagger->tagAs(1, $test_tag);
-
- $other_user = uniqid('user2_');
- OC_User::createUser($other_user, 'pass');
-
- OC_User::setUserId($other_user);
- $other_tagMgr = new OC\TagManager($this->tagMapper, $other_user);
- $other_tagger = $other_tagMgr->load('test');
- $this->assertFalse($other_tagger->hasTag($test_tag));
-
- OC_User::setUserId($this->user);
- OCP\Share::shareItem('test', 1, OCP\Share::SHARE_TYPE_USER, $other_user, OCP\PERMISSION_READ);
-
- OC_User::setUserId($other_user);
- $other_tagger = $other_tagMgr->load('test', array(), true); // Update tags, load shared ones.
- $this->assertTrue($other_tagger->hasTag($test_tag));
- $this->assertContains(1, $other_tagger->getIdsForTag($test_tag));
+ $tagger->tagAs(1, $testTag);
+
+ $otherUserId = $this->getUniqueID('user2_');
+ OC_User::createUser($otherUserId, 'pass');
+ OC_User::setUserId($otherUserId);
+ $otherUserSession = $this->getMock('\OCP\IUserSession');
+ $otherUserSession
+ ->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue(new OC\User\User($otherUserId, null)));
+
+ $otherTagMgr = new OC\TagManager($this->tagMapper, $otherUserSession);
+ $otherTagger = $otherTagMgr->load('test');
+ $this->assertFalse($otherTagger->hasTag($testTag));
+
+ OC_User::setUserId($this->user->getUID());
+ OCP\Share::shareItem('test', 1, OCP\Share::SHARE_TYPE_USER, $otherUserId, \OCP\Constants::PERMISSION_READ);
+
+ OC_User::setUserId($otherUserId);
+ $otherTagger = $otherTagMgr->load('test', array(), true); // Update tags, load shared ones.
+ $this->assertTrue($otherTagger->hasTag($testTag));
+ $this->assertContains(1, $otherTagger->getIdsForTag($testTag));
}
}
diff --git a/tests/lib/template.php b/tests/lib/template.php
index 819d592aacf..db58238eae8 100644
--- a/tests/lib/template.php
+++ b/tests/lib/template.php
@@ -20,9 +20,11 @@
*
*/
-class Test_TemplateFunctions extends PHPUnit_Framework_TestCase {
+class Test_TemplateFunctions extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
$loader = new \OC\Autoloader();
$loader->load('OC_Template');
}
@@ -115,15 +117,15 @@ class Test_TemplateFunctions extends PHPUnit_Framework_TestCase {
public function testRelativeDateMonthsAgo(){
$currentTime = 1380703592;
- $elementTime = $currentTime - 86400 * 60;
+ $elementTime = $currentTime - 86400 * 65;
$result = (string)relative_modified_date($elementTime, $currentTime, true);
$this->assertEquals('2 months ago', $result);
- $elementTime = $currentTime - 86400 * 65;
+ $elementTime = $currentTime - 86400 * 130;
$result = (string)relative_modified_date($elementTime, $currentTime, true);
- $this->assertEquals('2 months ago', $result);
+ $this->assertEquals('4 months ago', $result);
}
public function testRelativeDateLastYear(){
@@ -144,12 +146,12 @@ class Test_TemplateFunctions extends PHPUnit_Framework_TestCase {
$elementTime = $currentTime - 86400 * 365.25 * 2;
$result = (string)relative_modified_date($elementTime, $currentTime, true);
- $this->assertEquals('years ago', $result);
+ $this->assertEquals('2 years ago', $result);
$elementTime = $currentTime - 86400 * 365.25 * 3;
$result = (string)relative_modified_date($elementTime, $currentTime, true);
- $this->assertEquals('years ago', $result);
+ $this->assertEquals('3 years ago', $result);
}
// ---------------------------------------------------------------------------
@@ -209,15 +211,15 @@ class Test_TemplateFunctions extends PHPUnit_Framework_TestCase {
public function testRelativeTimeMonthsAgo(){
$currentTime = 1380703592;
- $elementTime = $currentTime - 86400 * 60;
+ $elementTime = $currentTime - 86400 * 65;
$result = (string)relative_modified_date($elementTime, $currentTime, false);
$this->assertEquals('2 months ago', $result);
- $elementTime = $currentTime - 86400 * 65;
+ $elementTime = $currentTime - 86400 * 130;
$result = (string)relative_modified_date($elementTime, $currentTime, false);
- $this->assertEquals('2 months ago', $result);
+ $this->assertEquals('4 months ago', $result);
}
public function testRelativeTimeLastYear(){
@@ -238,11 +240,11 @@ class Test_TemplateFunctions extends PHPUnit_Framework_TestCase {
$elementTime = $currentTime - 86400 * 365.25 * 2;
$result = (string)relative_modified_date($elementTime, $currentTime, false);
- $this->assertEquals('years ago', $result);
+ $this->assertEquals('2 years ago', $result);
$elementTime = $currentTime - 86400 * 365.25 * 3;
$result = (string)relative_modified_date($elementTime, $currentTime, false);
- $this->assertEquals('years ago', $result);
+ $this->assertEquals('3 years ago', $result);
}
}
diff --git a/tests/lib/template/resourcelocator.php b/tests/lib/template/resourcelocator.php
index 619560643fe..f350fd144e1 100644
--- a/tests/lib/template/resourcelocator.php
+++ b/tests/lib/template/resourcelocator.php
@@ -6,23 +6,21 @@
* See the COPYING-README file.
*/
-class Test_ResourceLocator extends PHPUnit_Framework_TestCase {
+class Test_ResourceLocator extends \Test\TestCase {
/**
* @param string $theme
- * @param string $form_factor
*/
- public function getResourceLocator( $theme, $form_factor, $core_map, $party_map, $appsroots ) {
+ public function getResourceLocator( $theme, $core_map, $party_map, $appsroots ) {
return $this->getMockForAbstractClass('OC\Template\ResourceLocator',
- array( $theme, $form_factor, $core_map, $party_map, $appsroots ),
+ array( $theme, $core_map, $party_map, $appsroots ),
'', true, true, true, array());
}
public function testConstructor() {
- $locator = $this->getResourceLocator('theme', 'form_factor',
+ $locator = $this->getResourceLocator('theme',
array('core'=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
$this->assertAttributeEquals('theme', 'theme', $locator);
- $this->assertAttributeEquals('form_factor', 'form_factor', $locator);
$this->assertAttributeEquals('core', 'serverroot', $locator);
$this->assertAttributeEquals(array('core'=>'map','3rd'=>'party'), 'mapping', $locator);
$this->assertAttributeEquals('3rd', 'thirdpartyroot', $locator);
@@ -31,7 +29,7 @@ class Test_ResourceLocator extends PHPUnit_Framework_TestCase {
}
public function testFind() {
- $locator = $this->getResourceLocator('theme', 'form_factor',
+ $locator = $this->getResourceLocator('theme',
array('core'=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
$locator->expects($this->once())
->method('doFind')
@@ -41,7 +39,7 @@ class Test_ResourceLocator extends PHPUnit_Framework_TestCase {
->with('foo');
$locator->find(array('foo'));
- $locator = $this->getResourceLocator('theme', 'form_factor',
+ $locator = $this->getResourceLocator('theme',
array('core'=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
$locator->expects($this->once())
->method('doFind')
@@ -50,12 +48,12 @@ class Test_ResourceLocator extends PHPUnit_Framework_TestCase {
try {
$locator->find(array('foo'));
} catch (\Exception $e) {
- $this->assertEquals('test formfactor:form_factor serverroot:core', $e->getMessage());
+ $this->assertEquals('test serverroot:core', $e->getMessage());
}
}
public function testAppendIfExist() {
- $locator = $this->getResourceLocator('theme', 'form_factor',
+ $locator = $this->getResourceLocator('theme',
array(__DIR__=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
$method = new ReflectionMethod($locator, 'appendIfExist');
$method->setAccessible(true);
diff --git a/tests/lib/templatelayout.php b/tests/lib/templatelayout.php
index 0335c7c88ee..1035dae122d 100644
--- a/tests/lib/templatelayout.php
+++ b/tests/lib/templatelayout.php
@@ -11,23 +11,27 @@ namespace OC\Test;
/**
* @package OC\Test
*/
-class OC_TemplateLayout extends \PHPUnit_Framework_TestCase {
+class OC_TemplateLayout extends \Test\TestCase {
- private $oldServerUri;
+ private $oldServerURI;
private $oldScriptName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->oldServerURI = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null;
$this->oldScriptName = $_SERVER['SCRIPT_NAME'];
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->oldServerURI === null) {
unset($_SERVER['REQUEST_URI']);
} else {
$_SERVER['REQUEST_URI'] = $this->oldServerURI;
}
$_SERVER['SCRIPT_NAME'] = $this->oldScriptName;
+
+ parent::tearDown();
}
/**
diff --git a/tests/lib/tempmanager.php b/tests/lib/tempmanager.php
index f16fbce2c7c..c030eef2c9e 100644
--- a/tests/lib/tempmanager.php
+++ b/tests/lib/tempmanager.php
@@ -21,22 +21,25 @@ class NullLogger extends Log {
}
}
-class TempManager extends \PHPUnit_Framework_TestCase {
+class TempManager extends \Test\TestCase {
protected $baseDir;
- public function setUp() {
- $this->baseDir = get_temp_dir() . '/oc_tmp_test';
+ protected function setUp() {
+ parent::setUp();
+
+ $this->baseDir = get_temp_dir() . $this->getUniqueID('/oc_tmp_test');
if (!is_dir($this->baseDir)) {
mkdir($this->baseDir);
}
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->baseDir);
+ parent::tearDown();
}
/**
- * @param \Psr\Log\LoggerInterface $logger
+ * @param \OCP\ILogger $logger
* @return \OC\TempManager
*/
protected function getManager($logger = null) {
@@ -122,6 +125,10 @@ class TempManager extends \PHPUnit_Framework_TestCase {
}
public function testLogCantCreateFile() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] chmod() does not work as intended on Windows.');
+ }
+
$logger = $this->getMock('\Test\NullLogger');
$manager = $this->getManager($logger);
chmod($this->baseDir, 0500);
@@ -132,6 +139,10 @@ class TempManager extends \PHPUnit_Framework_TestCase {
}
public function testLogCantCreateFolder() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] chmod() does not work as intended on Windows.');
+ }
+
$logger = $this->getMock('\Test\NullLogger');
$manager = $this->getManager($logger);
chmod($this->baseDir, 0500);
diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php
new file mode 100644
index 00000000000..1ea3aa13547
--- /dev/null
+++ b/tests/lib/testcase.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Joas Schilling
+ * @copyright 2014 Joas Schilling nickvergessen@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test;
+
+use OCP\Security\ISecureRandom;
+
+abstract class TestCase extends \PHPUnit_Framework_TestCase {
+ /**
+ * Returns a unique identifier as uniqid() is not reliable sometimes
+ *
+ * @param string $prefix
+ * @param int $length
+ * @return string
+ */
+ protected static function getUniqueID($prefix = '', $length = 13) {
+ return $prefix . \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(
+ $length,
+ // Do not use dots and slashes as we use the value for file names
+ ISecureRandom::CHAR_DIGITS . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER
+ );
+ }
+
+ public static function tearDownAfterClass() {
+ $dataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data-autotest');
+
+ self::tearDownAfterClassCleanFileMapper($dataDir);
+ self::tearDownAfterClassCleanStorages();
+ self::tearDownAfterClassCleanFileCache();
+ self::tearDownAfterClassCleanStrayDataFiles($dataDir);
+ self::tearDownAfterClassCleanStrayHooks();
+ self::tearDownAfterClassCleanProxies();
+
+ parent::tearDownAfterClass();
+ }
+
+ /**
+ * Remove all entries from the files map table
+ * @param string $dataDir
+ */
+ static protected function tearDownAfterClassCleanFileMapper($dataDir) {
+ if (\OC_Util::runningOnWindows()) {
+ $mapper = new \OC\Files\Mapper($dataDir);
+ $mapper->removePath($dataDir, true, true);
+ }
+ }
+
+ /**
+ * Remove all entries from the storages table
+ * @throws \OC\DatabaseException
+ */
+ static protected function tearDownAfterClassCleanStorages() {
+ $sql = 'DELETE FROM `*PREFIX*storages`';
+ $query = \OC_DB::prepare($sql);
+ $query->execute();
+ }
+
+ /**
+ * Remove all entries from the filecache table
+ * @throws \OC\DatabaseException
+ */
+ static protected function tearDownAfterClassCleanFileCache() {
+ $sql = 'DELETE FROM `*PREFIX*filecache`';
+ $query = \OC_DB::prepare($sql);
+ $query->execute();
+ }
+
+ /**
+ * Remove all unused files from the data dir
+ *
+ * @param string $dataDir
+ */
+ static protected function tearDownAfterClassCleanStrayDataFiles($dataDir) {
+ $knownEntries = array(
+ 'owncloud.log' => true,
+ 'owncloud.db' => true,
+ '.ocdata' => true,
+ '..' => true,
+ '.' => true,
+ );
+
+ if ($dh = opendir($dataDir)) {
+ while (($file = readdir($dh)) !== false) {
+ if (!isset($knownEntries[$file])) {
+ self::tearDownAfterClassCleanStrayDataUnlinkDir($dataDir . '/' . $file);
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ /**
+ * Recursive delete files and folders from a given directory
+ *
+ * @param string $dir
+ */
+ static protected function tearDownAfterClassCleanStrayDataUnlinkDir($dir) {
+ if ($dh = @opendir($dir)) {
+ while (($file = readdir($dh)) !== false) {
+ if ($file === '..' || $file === '.') {
+ continue;
+ }
+ $path = $dir . '/' . $file;
+ if (is_dir($path)) {
+ self::tearDownAfterClassCleanStrayDataUnlinkDir($path);
+ }
+ else {
+ @unlink($path);
+ }
+ }
+ closedir($dh);
+ }
+ @rmdir($dir);
+ }
+
+ /**
+ * Clean up the list of hooks
+ */
+ static protected function tearDownAfterClassCleanStrayHooks() {
+ \OC_Hook::clear();
+ }
+
+ /**
+ * Clean up the list of file proxies
+ *
+ * Also reenables file proxies, in case a test disabled them
+ */
+ static protected function tearDownAfterClassCleanProxies() {
+ \OC_FileProxy::$enabled = true;
+ \OC_FileProxy::clearProxies();
+ }
+
+ /**
+ * Login and setup FS as a given user,
+ * sets the given user as the current user.
+ *
+ * @param string $user user id
+ */
+ static protected function loginAsUser($user) {
+ self::logout();
+ \OC\Files\Filesystem::tearDown();
+ \OC_User::setUserId($user);
+ \OC_Util::setupFS($user);
+ }
+
+ /**
+ * Logout the current user and tear down the filesystem.
+ */
+ static protected function logout() {
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ }
+}
diff --git a/tests/lib/updater.php b/tests/lib/updater.php
index 4488744fa1d..f847ffc91bf 100644
--- a/tests/lib/updater.php
+++ b/tests/lib/updater.php
@@ -8,9 +8,9 @@
namespace OC;
-class UpdaterTest extends \PHPUnit_Framework_TestCase {
+class UpdaterTest extends \Test\TestCase {
- public function testVersionCompatbility() {
+ public function versionCompatibilityTestData() {
return array(
array('1.0.0.0', '2.2.0', true),
array('1.1.1.1', '2.0.0', true),
@@ -24,11 +24,84 @@ class UpdaterTest extends \PHPUnit_Framework_TestCase {
}
/**
- * @dataProvider testVersionCompatbility
+ * @dataProvider versionCompatibilityTestData
*/
- function testIsUpgradePossible($oldVersion, $newVersion, $result) {
- $updater = new Updater();
+ public function testIsUpgradePossible($oldVersion, $newVersion, $result) {
+ $updater = new Updater(\OC::$server->getHTTPHelper(), \OC::$server->getConfig());
$this->assertSame($result, $updater->isUpgradePossible($oldVersion, $newVersion));
}
-} \ No newline at end of file
+ public function testBrokenXmlResponse(){
+ $invalidUpdater = $this->getUpdaterMock('OMG!');
+ $invalidResult = $invalidUpdater->check();
+ $this->assertEmpty($invalidResult);
+ }
+
+ public function testEmptyResponse(){
+ $emptyUpdater = $this->getUpdaterMock('');
+ $emptyResult = $emptyUpdater->check();
+ $this->assertEmpty($emptyResult);
+
+ // Error while fetching new contents e.g. too many redirects
+ $falseUpdater = $this->getUpdaterMock(false);
+ $falseResult = $falseUpdater->check();
+ $this->assertEmpty($falseResult);
+ }
+
+ public function testValidEmptyXmlResponse(){
+ $updater = $this->getUpdaterMock(
+ '<?xml version="1.0"?><owncloud><version></version><versionstring></versionstring><url></url><web></web></owncloud>'
+ );
+ $result = array_map('strval', $updater->check());
+
+ $this->assertArrayHasKey('version', $result);
+ $this->assertArrayHasKey('versionstring', $result);
+ $this->assertArrayHasKey('url', $result);
+ $this->assertArrayHasKey('web', $result);
+ $this->assertEmpty($result['version']);
+ $this->assertEmpty($result['versionstring']);
+ $this->assertEmpty($result['url']);
+ $this->assertEmpty($result['web']);
+ }
+
+ public function testValidUpdateResponse(){
+ $newUpdater = $this->getUpdaterMock(
+ '<?xml version="1.0"?>
+<owncloud>
+ <version>7.0.3.4</version>
+ <versionstring>ownCloud 7.0.3</versionstring>
+ <url>http://download.owncloud.org/community/owncloud-7.0.3.zip</url>
+ <web>http://owncloud.org/</web>
+</owncloud>'
+ );
+ $newResult = array_map('strval', $newUpdater->check());
+
+ $this->assertArrayHasKey('version', $newResult);
+ $this->assertArrayHasKey('versionstring', $newResult);
+ $this->assertArrayHasKey('url', $newResult);
+ $this->assertArrayHasKey('web', $newResult);
+ $this->assertEquals('7.0.3.4', $newResult['version']);
+ $this->assertEquals('ownCloud 7.0.3', $newResult['versionstring']);
+ $this->assertEquals('http://download.owncloud.org/community/owncloud-7.0.3.zip', $newResult['url']);
+ $this->assertEquals('http://owncloud.org/', $newResult['web']);
+ }
+
+ protected function getUpdaterMock($content){
+ // Invalidate cache
+ $mockedAppConfig = $this->getMockBuilder('\OC\AppConfig')
+ ->disableOriginalConstructor()
+ ->getMock()
+ ;
+
+ $certificateManager = $this->getMock('\OCP\ICertificateManager');
+ $mockedHTTPHelper = $this->getMockBuilder('\OC\HTTPHelper')
+ ->setConstructorArgs(array(\OC::$server->getConfig(), $certificateManager))
+ ->getMock()
+ ;
+
+ $mockedHTTPHelper->expects($this->once())->method('getUrlContent')->will($this->returnValue($content));
+
+ return new Updater($mockedHTTPHelper, $mockedAppConfig);
+ }
+
+}
diff --git a/tests/lib/urlgenerator.php b/tests/lib/urlgenerator.php
index 066272731ee..a92aaddeb4c 100644
--- a/tests/lib/urlgenerator.php
+++ b/tests/lib/urlgenerator.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Urlgenerator extends PHPUnit_Framework_TestCase {
+class Test_Urlgenerator extends \Test\TestCase {
/**
* @small
diff --git a/tests/lib/user.php b/tests/lib/user.php
index e2c3282a19f..cb0c661b2a4 100644
--- a/tests/lib/user.php
+++ b/tests/lib/user.php
@@ -9,13 +9,15 @@
namespace Test;
-class User extends \PHPUnit_Framework_TestCase {
+class User extends TestCase {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
private $backend;
protected function setUp(){
+ parent::setUp();
+
$this->backend = $this->getMock('\OC_User_Dummy');
$manager = \OC_User::getManager();
$manager->registerBackend($this->backend);
diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php
index 0d3914c7ca6..c2040f4e3be 100644
--- a/tests/lib/user/backend.php
+++ b/tests/lib/user/backend.php
@@ -30,7 +30,7 @@
* For an example see /tests/lib/user/dummy.php
*/
-abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
+abstract class Test_User_Backend extends \Test\TestCase {
/**
* @var OC_User_Backend $backend
*/
@@ -42,7 +42,7 @@ abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
* @return string
*/
public function getUser() {
- return uniqid('test_');
+ return $this->getUniqueID('test_');
}
public function testAddRemove() {
@@ -68,29 +68,29 @@ abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
$this->assertTrue((array_search($name1, $this->backend->getUsers())!==false));
$this->assertFalse((array_search($name2, $this->backend->getUsers())!==false));
}
-
+
public function testLogin() {
$name1=$this->getUser();
$name2=$this->getUser();
-
+
$this->assertFalse($this->backend->userExists($name1));
$this->assertFalse($this->backend->userExists($name2));
-
+
$this->backend->createUser($name1, 'pass1');
$this->backend->createUser($name2, 'pass2');
-
+
$this->assertTrue($this->backend->userExists($name1));
$this->assertTrue($this->backend->userExists($name2));
-
+
$this->assertSame($name1, $this->backend->checkPassword($name1, 'pass1'));
$this->assertSame($name2, $this->backend->checkPassword($name2, 'pass2'));
-
+
$this->assertFalse($this->backend->checkPassword($name1, 'pass2'));
$this->assertFalse($this->backend->checkPassword($name2, 'pass1'));
-
+
$this->assertFalse($this->backend->checkPassword($name1, 'dummy'));
$this->assertFalse($this->backend->checkPassword($name2, 'foobar'));
-
+
$this->backend->setPassword($name1, 'newpass1');
$this->assertFalse($this->backend->checkPassword($name1, 'pass1'));
$this->assertSame($name1, $this->backend->checkPassword($name1, 'newpass1'));
@@ -112,5 +112,4 @@ abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
$result = $this->backend->getDisplayNames('bar');
$this->assertSame(2, count($result));
}
-
}
diff --git a/tests/lib/user/database.php b/tests/lib/user/database.php
index a8e497720c2..3a6be1ceee5 100644
--- a/tests/lib/user/database.php
+++ b/tests/lib/user/database.php
@@ -21,22 +21,27 @@
*/
class Test_User_Database extends Test_User_Backend {
+ /** @var array */
+ private $users;
+
public function getUser() {
$user = parent::getUser();
$this->users[]=$user;
return $user;
}
-
- public function setUp() {
+
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_User_Database();
}
-
- public function tearDown() {
+
+ protected function tearDown() {
if(!isset($this->users)) {
return;
}
foreach($this->users as $user) {
$this->backend->deleteUser($user);
}
+ parent::tearDown();
}
}
diff --git a/tests/lib/user/dummy.php b/tests/lib/user/dummy.php
index e417fd97603..fcc921de4b1 100644
--- a/tests/lib/user/dummy.php
+++ b/tests/lib/user/dummy.php
@@ -21,7 +21,8 @@
*/
class Test_User_Dummy extends Test_User_Backend {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_User_Dummy();
}
}
diff --git a/tests/lib/user/manager.php b/tests/lib/user/manager.php
index 15b28e61bd5..cc8bcd65896 100644
--- a/tests/lib/user/manager.php
+++ b/tests/lib/user/manager.php
@@ -9,7 +9,18 @@
namespace Test\User;
-class Manager extends \PHPUnit_Framework_TestCase {
+class Manager extends \Test\TestCase {
+ public function testGetBackends() {
+ $userDummyBackend = $this->getMock('\OC_User_Dummy');
+ $manager = new \OC\User\Manager();
+ $manager->registerBackend($userDummyBackend);
+ $this->assertEquals([$userDummyBackend], $manager->getBackends());
+ $dummyDatabaseBackend = $this->getMock('\OC_User_Database');
+ $manager->registerBackend($dummyDatabaseBackend);
+ $this->assertEquals([$userDummyBackend, $dummyDatabaseBackend], $manager->getBackends());
+ }
+
+
public function testUserExistsSingleBackendExists() {
/**
* @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
@@ -369,6 +380,10 @@ class Manager extends \PHPUnit_Framework_TestCase {
->with(\OC_USER_BACKEND_COUNT_USERS)
->will($this->returnValue(true));
+ $backend->expects($this->once())
+ ->method('getBackendName')
+ ->will($this->returnValue('Mock_OC_User_Dummy'));
+
$manager = new \OC\User\Manager();
$manager->registerBackend($backend);
@@ -393,6 +408,9 @@ class Manager extends \PHPUnit_Framework_TestCase {
->method('implementsActions')
->with(\OC_USER_BACKEND_COUNT_USERS)
->will($this->returnValue(true));
+ $backend1->expects($this->once())
+ ->method('getBackendName')
+ ->will($this->returnValue('Mock_OC_User_Dummy'));
$backend2 = $this->getMock('\OC_User_Dummy');
$backend2->expects($this->once())
@@ -403,6 +421,9 @@ class Manager extends \PHPUnit_Framework_TestCase {
->method('implementsActions')
->with(\OC_USER_BACKEND_COUNT_USERS)
->will($this->returnValue(true));
+ $backend2->expects($this->once())
+ ->method('getBackendName')
+ ->will($this->returnValue('Mock_OC_User_Dummy'));
$manager = new \OC\User\Manager();
$manager->registerBackend($backend1);
diff --git a/tests/lib/user/session.php b/tests/lib/user/session.php
index 5126049d77f..4dc7f29c5b8 100644
--- a/tests/lib/user/session.php
+++ b/tests/lib/user/session.php
@@ -12,7 +12,7 @@ namespace Test\User;
use OC\Session\Memory;
use OC\User\User;
-class Session extends \PHPUnit_Framework_TestCase {
+class Session extends \Test\TestCase {
public function testGetUser() {
$session = $this->getMock('\OC\Session\Memory', array(), array(''));
$session->expects($this->once())
@@ -34,6 +34,46 @@ class Session extends \PHPUnit_Framework_TestCase {
$this->assertEquals('foo', $user->getUID());
}
+ public function testIsLoggedIn() {
+ $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session->expects($this->once())
+ ->method('get')
+ ->with('user_id')
+ ->will($this->returnValue('foo'));
+
+ $backend = $this->getMock('OC_User_Dummy');
+ $backend->expects($this->once())
+ ->method('userExists')
+ ->with('foo')
+ ->will($this->returnValue(true));
+
+ $manager = new \OC\User\Manager();
+ $manager->registerBackend($backend);
+
+ $userSession = new \OC\User\Session($manager, $session);
+ $isLoggedIn = $userSession->isLoggedIn();
+ $this->assertTrue($isLoggedIn);
+ }
+
+ public function testNotLoggedIn() {
+ $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session->expects($this->once())
+ ->method('get')
+ ->with('user_id')
+ ->will($this->returnValue(null));
+
+ $backend = $this->getMock('OC_User_Dummy');
+ $backend->expects($this->never())
+ ->method('userExists');
+
+ $manager = new \OC\User\Manager();
+ $manager->registerBackend($backend);
+
+ $userSession = new \OC\User\Session($manager, $session);
+ $isLoggedIn = $userSession->isLoggedIn();
+ $this->assertFalse($isLoggedIn);
+ }
+
public function testSetUser() {
$session = $this->getMock('\OC\Session\Memory', array(), array(''));
$session->expects($this->once())
@@ -234,7 +274,7 @@ class Session extends \PHPUnit_Framework_TestCase {
//prepare login token
$token = 'goodToken';
- \OC_Preferences::setValue('foo', 'login_token', $token, time());
+ \OC::$server->getConfig()->setUserValue('foo', 'login_token', $token, time());
$userSession = $this->getMock(
'\OC\User\Session',
@@ -282,7 +322,7 @@ class Session extends \PHPUnit_Framework_TestCase {
//prepare login token
$token = 'goodToken';
- \OC_Preferences::setValue('foo', 'login_token', $token, time());
+ \OC::$server->getConfig()->setUserValue('foo', 'login_token', $token, time());
$userSession = new \OC\User\Session($manager, $session);
$granted = $userSession->loginWithCookie('foo', 'badToken');
@@ -323,7 +363,7 @@ class Session extends \PHPUnit_Framework_TestCase {
//prepare login token
$token = 'goodToken';
- \OC_Preferences::setValue('foo', 'login_token', $token, time());
+ \OC::$server->getConfig()->setUserValue('foo', 'login_token', $token, time());
$userSession = new \OC\User\Session($manager, $session);
$granted = $userSession->loginWithCookie('foo', $token);
diff --git a/tests/lib/user/user.php b/tests/lib/user/user.php
index 7a1db861c98..b1df975b60f 100644
--- a/tests/lib/user/user.php
+++ b/tests/lib/user/user.php
@@ -9,10 +9,9 @@
namespace Test\User;
-use OC\AllConfig;
use OC\Hooks\PublicEmitter;
-class User extends \PHPUnit_Framework_TestCase {
+class User extends \Test\TestCase {
public function testDisplayName() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
@@ -216,6 +215,13 @@ class User extends \PHPUnit_Framework_TestCase {
$this->assertEquals('/home/foo', $user->getHome());
}
+ public function testGetBackendClassName() {
+ $user = new \OC\User\User('foo', new \OC_User_Dummy());
+ $this->assertEquals('Dummy', $user->getBackendClassName());
+ $user = new \OC\User\User('foo', new \OC_User_Database());
+ $this->assertEquals('Database', $user->getBackendClassName());
+ }
+
public function testGetHomeNotSupported() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
@@ -228,10 +234,19 @@ class User extends \PHPUnit_Framework_TestCase {
->method('implementsActions')
->will($this->returnValue(false));
- $allConfig = new AllConfig();
+ $allConfig = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $allConfig->expects($this->any())
+ ->method('getUserValue')
+ ->will($this->returnValue(true));
+ $allConfig->expects($this->any())
+ ->method('getSystemValue')
+ ->with($this->equalTo('datadirectory'))
+ ->will($this->returnValue('arbitrary/path'));
$user = new \OC\User\User('foo', $backend, null, $allConfig);
- $this->assertEquals(\OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data") . '/foo', $user->getHome());
+ $this->assertEquals('arbitrary/path/foo', $user->getHome());
}
public function testCanChangePassword() {
diff --git a/tests/lib/util.php b/tests/lib/util.php
index 9a3185b3f79..25c9e31beaf 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Util extends PHPUnit_Framework_TestCase {
+class Test_Util extends \Test\TestCase {
public function testGetVersion() {
$version = \OC_Util::getVersion();
$this->assertTrue(is_array($version));
@@ -41,7 +41,7 @@ class Test_Util extends PHPUnit_Framework_TestCase {
date_default_timezone_set("UTC");
$result = OC_Util::formatDate(1350129205, false, 'Europe/Berlin');
- $expected = 'October 13, 2012 at 1:53:25 PM GMT+0';
+ $expected = 'October 13, 2012 at 1:53:25 PM GMT+2';
$this->assertEquals($expected, $result);
}
@@ -55,10 +55,22 @@ class Test_Util extends PHPUnit_Framework_TestCase {
function testFormatDateWithTZFromSession() {
date_default_timezone_set("UTC");
+ $oldDateTimeFormatter = \OC::$server->query('DateTimeFormatter');
\OC::$server->getSession()->set('timezone', 3);
+ $newDateTimeFormatter = new \OC\DateTimeFormatter(\OC::$server->getDateTimeZone()->getTimeZone(), new \OC_L10N('lib', 'en'));
+ $this->setDateFormatter($newDateTimeFormatter);
+
$result = OC_Util::formatDate(1350129205, false);
- $expected = 'October 13, 2012 at 2:53:25 PM GMT+0';
+ $expected = 'October 13, 2012 at 2:53:25 PM GMT+3';
$this->assertEquals($expected, $result);
+
+ $this->setDateFormatter($oldDateTimeFormatter);
+ }
+
+ protected function setDateFormatter($formatter) {
+ \OC::$server->registerService('DateTimeFormatter', function ($c) use ($formatter) {
+ return $formatter;
+ });
}
function testCallRegister() {
@@ -150,9 +162,9 @@ class Test_Util extends PHPUnit_Framework_TestCase {
* Tests that the home storage is not wrapped when no quota exists.
*/
function testHomeStorageWrapperWithoutQuota() {
- $user1 = uniqid();
+ $user1 = $this->getUniqueID();
\OC_User::createUser($user1, 'test');
- OC_Preferences::setValue($user1, 'files', 'quota', 'none');
+ \OC::$server->getConfig()->setUserValue($user1, 'files', 'quota', 'none');
\OC_User::setUserId($user1);
\OC_Util::setupFS($user1);
@@ -164,7 +176,7 @@ class Test_Util extends PHPUnit_Framework_TestCase {
// clean up
\OC_User::setUserId('');
\OC_User::deleteUser($user1);
- OC_Preferences::deleteUser($user1);
+ \OC::$server->getConfig()->deleteAllUserValues($user1);
\OC_Util::tearDownFS();
}
@@ -172,9 +184,9 @@ class Test_Util extends PHPUnit_Framework_TestCase {
* Tests that the home storage is not wrapped when no quota exists.
*/
function testHomeStorageWrapperWithQuota() {
- $user1 = uniqid();
+ $user1 = $this->getUniqueID();
\OC_User::createUser($user1, 'test');
- OC_Preferences::setValue($user1, 'files', 'quota', '1024');
+ \OC::$server->getConfig()->setUserValue($user1, 'files', 'quota', '1024');
\OC_User::setUserId($user1);
\OC_Util::setupFS($user1);
@@ -191,7 +203,7 @@ class Test_Util extends PHPUnit_Framework_TestCase {
// clean up
\OC_User::setUserId('');
\OC_User::deleteUser($user1);
- OC_Preferences::deleteUser($user1);
+ \OC::$server->getConfig()->deleteAllUserValues($user1);
\OC_Util::tearDownFS();
}
@@ -331,7 +343,7 @@ class Test_Util extends PHPUnit_Framework_TestCase {
Dummy_OC_App::setEnabledApps($enabledApps);
// need to set a user id to make sure enabled apps are read from cache
- \OC_User::setUserId(uniqid());
+ \OC_User::setUserId($this->getUniqueID());
\OCP\Config::setSystemValue('defaultapp', $defaultAppConfig);
$this->assertEquals('http://localhost/' . $expectedPath, \OC_Util::getDefaultPageUrl());
diff --git a/tests/lib/utilcheckserver.php b/tests/lib/utilcheckserver.php
index be5596c1900..bb9b7a24452 100644
--- a/tests/lib/utilcheckserver.php
+++ b/tests/lib/utilcheckserver.php
@@ -9,7 +9,7 @@
/**
* Tests for server check functions
*/
-class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
+class Test_Util_CheckServer extends \Test\TestCase {
private $datadir;
@@ -32,16 +32,19 @@ class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
return $config;
}
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->datadir = \OC_Helper::tmpFolder();
file_put_contents($this->datadir . '/.ocdata', '');
\OC::$server->getSession()->set('checkServer_succeeded', false);
}
- public function tearDown() {
+ protected function tearDown() {
// clean up
@unlink($this->datadir . '/.ocdata');
+ parent::tearDown();
}
/**
@@ -138,6 +141,10 @@ class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
* Tests an error is given when the datadir is not writable
*/
public function testDataDirNotWritable() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] chmod() does not work as intended on Windows.');
+ }
+
chmod($this->datadir, 0300);
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => true,
diff --git a/tests/lib/vobject.php b/tests/lib/vobject.php
index db5b0f99f06..6fabf30e48f 100644
--- a/tests/lib/vobject.php
+++ b/tests/lib/vobject.php
@@ -6,9 +6,11 @@
* See the COPYING-README file.
*/
-class Test_VObject extends PHPUnit_Framework_TestCase {
+class Test_VObject extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
Sabre\VObject\Property::$classMap['SUMMARY'] = 'OC\VObject\StringProperty';
Sabre\VObject\Property::$classMap['ORG'] = 'OC\VObject\CompoundProperty';
}
diff --git a/tests/phpunit-autotest-external.xml b/tests/phpunit-autotest-external.xml
new file mode 100644
index 00000000000..b9402bfa572
--- /dev/null
+++ b/tests/phpunit-autotest-external.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="bootstrap.php"
+ strict="true"
+ verbose="true"
+ timeoutForSmallTests="900"
+ timeoutForMediumTests="900"
+ timeoutForLargeTests="900"
+>
+ <testsuite name='ownCloud files external'>
+ <directory suffix=".php">../apps/files_external/tests</directory>
+ <!-- exclude backends as they are called separately -->
+ <exclude>../apps/files_external/tests/backends/</exclude>
+ </testsuite>
+ <!-- filters for code coverage -->
+ <filter>
+ <!-- whitelist processUncoveredFilesFromWhitelist="true" -->
+ <whitelist>
+ <file>../lib/private/files/storage/dav.php</file>
+ <directory suffix=".php">../apps/files_external</directory>
+ <exclude>
+ <directory suffix=".php">../apps/files_external/l10n</directory>
+ <directory suffix=".php">../apps/files_external/3rdparty</directory>
+ <directory suffix=".php">../apps/files_external/tests</directory>
+ </exclude>
+ </whitelist>
+ </filter>
+ <!--<listeners>
+ <listener class="StartSessionListener" file="startsessionlistener.php" />
+ <listener class="TestCleanupListener" file="testcleanuplistener.php">
+ <arguments>
+ <string>detail</string>
+ </arguments>
+ </listener>
+ </listeners>-->
+</phpunit>
+
diff --git a/tests/phpunit-autotest.xml b/tests/phpunit-autotest.xml
index 3805bb1ac79..18d40d86ef7 100644
--- a/tests/phpunit-autotest.xml
+++ b/tests/phpunit-autotest.xml
@@ -9,6 +9,7 @@
<testsuite name='ownCloud'>
<directory suffix='.php'>lib/</directory>
<directory suffix='.php'>settings/</directory>
+ <directory suffix='.php'>core/</directory>
<file>apps.php</file>
</testsuite>
<!-- filters for code coverage -->
@@ -19,8 +20,7 @@
<exclude>
<directory suffix=".php">../3rdparty</directory>
<directory suffix=".php">../apps/files/l10n</directory>
- <directory suffix=".php">../apps/files_external/l10n</directory>
- <directory suffix=".php">../apps/files_external/3rdparty</directory>
+ <directory suffix=".php">../apps/files_external</directory>
<directory suffix=".php">../apps/files_versions/l10n</directory>
<directory suffix=".php">../apps/files_encryption/l10n</directory>
<directory suffix=".php">../apps/files_encryption/3rdparty</directory>
@@ -28,6 +28,8 @@
<directory suffix=".php">../apps/files_trashbin/l10n</directory>
<directory suffix=".php">../apps/user_ldap/l10n</directory>
<directory suffix=".php">../apps/user_webdavauth/l10n</directory>
+ <directory suffix=".php">../provisioning_api/l10n</directory>
+ <directory suffix=".php">../provisioning_api/tests</directory>
<directory suffix=".php">../lib/MDB2</directory>
<directory suffix=".php">../lib/l10n</directory>
<directory suffix=".php">../core/l10n</directory>
@@ -38,11 +40,6 @@
</filter>
<listeners>
<listener class="StartSessionListener" file="startsessionlistener.php" />
- <listener class="TestCleanupListener" file="testcleanuplistener.php">
- <arguments>
- <string>detail</string>
- </arguments>
- </listener>
</listeners>
</phpunit>
diff --git a/tests/phpunit.xml.dist b/tests/phpunit.xml.dist
index 21c63ea0469..c1d02dd32a0 100644
--- a/tests/phpunit.xml.dist
+++ b/tests/phpunit.xml.dist
@@ -2,6 +2,8 @@
<phpunit bootstrap="bootstrap.php">
<testsuite name='ownCloud'>
<directory suffix='.php'>lib/</directory>
+ <directory suffix='.php'>settings/</directory>
+ <directory suffix='.php'>core/</directory>
<file>apps.php</file>
</testsuite>
<!-- filters for code coverage -->
@@ -21,6 +23,8 @@
<directory suffix=".php">../apps/files_trashbin/l10n</directory>
<directory suffix=".php">../apps/user_ldap/l10n</directory>
<directory suffix=".php">../apps/user_webdavauth/l10n</directory>
+ <directory suffix=".php">../provisioning_api/l10n</directory>
+ <directory suffix=".php">../provisioning_api/tests</directory>
<directory suffix=".php">../lib/MDB2</directory>
<directory suffix=".php">../lib/l10n</directory>
<directory suffix=".php">../core/l10n</directory>
diff --git a/tests/preseed-config.php b/tests/preseed-config.php
index 3fd5b3cb7fc..3f41573bf29 100644
--- a/tests/preseed-config.php
+++ b/tests/preseed-config.php
@@ -1,22 +1,21 @@
<?php
$CONFIG = array (
- "appstoreenabled" => false,
- 'apps_paths' =>
- array (
- 0 =>
- array (
- 'path' => OC::$SERVERROOT.'/apps',
- 'url' => '/apps',
- 'writable' => true,
- ),
- 1 =>
- array (
- 'path' => OC::$SERVERROOT.'/apps2',
- 'url' => '/apps2',
- 'writable' => false,
- )
- ),
-
+ "appstoreenabled" => false,
+ 'apps_paths' =>
+ array (
+ 0 =>
+ array (
+ 'path' => OC::$SERVERROOT.'/apps',
+ 'url' => '/apps',
+ 'writable' => true,
+ ),
+ 1 =>
+ array (
+ 'path' => OC::$SERVERROOT.'/apps2',
+ 'url' => '/apps2',
+ 'writable' => false,
+ )
+ ),
);
if(substr(strtolower(PHP_OS), 0, 3) == "win") {
diff --git a/tests/settings/controller/groupscontrollertest.php b/tests/settings/controller/groupscontrollertest.php
new file mode 100644
index 00000000000..4b6c9d02566
--- /dev/null
+++ b/tests/settings/controller/groupscontrollertest.php
@@ -0,0 +1,246 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Settings\Controller;
+
+use OC\Group\Group;
+use \OC\Settings\Application;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class GroupsControllerTest extends \Test\TestCase {
+
+ /** @var \OCP\AppFramework\IAppContainer */
+ private $container;
+
+ /** @var GroupsController */
+ private $groupsController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['AppName'] = 'settings';
+ $this->container['GroupManager'] = $this->getMockBuilder('\OCP\IGroupManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['L10N'] = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['IsAdmin'] = true;
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($text, $parameters = array()) {
+ return vsprintf($text, $parameters);
+ }));
+ $this->groupsController = $this->container['GroupsController'];
+
+ }
+
+ /**
+ * TODO: Since GroupManager uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testIndex() {
+ $firstGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $firstGroup
+ ->method('getGID')
+ ->will($this->returnValue('firstGroup'));
+ $firstGroup
+ ->method('count')
+ ->will($this->returnValue(12));
+ $secondGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $secondGroup
+ ->method('getGID')
+ ->will($this->returnValue('secondGroup'));
+ $secondGroup
+ ->method('count')
+ ->will($this->returnValue(25));
+ $thirdGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $thirdGroup
+ ->method('getGID')
+ ->will($this->returnValue('thirdGroup'));
+ $thirdGroup
+ ->method('count')
+ ->will($this->returnValue(14));
+ $fourthGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $fourthGroup
+ ->method('getGID')
+ ->will($this->returnValue('admin'));
+ $fourthGroup
+ ->method('count')
+ ->will($this->returnValue(18));
+ /** @var \OC\Group\Group[] $groups */
+ $groups = array();
+ $groups[] = $firstGroup;
+ $groups[] = $secondGroup;
+ $groups[] = $thirdGroup;
+ $groups[] = $fourthGroup;
+
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserSession']
+ ->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('MyAdminUser'));
+ $this->container['GroupManager']
+ ->method('search')
+ ->will($this->returnValue($groups));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'data' => array(
+ 'adminGroups' => array(
+ 0 => array(
+ 'id' => 'admin',
+ 'name' => 'admin',
+ 'usercount' => 18
+ )
+ ),
+ 'groups' =>
+ array(
+ 0 => array(
+ 'id' => 'secondGroup',
+ 'name' => 'secondGroup',
+ 'usercount' => 25
+ ),
+ 1 => array(
+ 'id' => 'thirdGroup',
+ 'name' => 'thirdGroup',
+ 'usercount' => 14
+ ),
+ 2 => array(
+ 'id' => 'firstGroup',
+ 'name' => 'firstGroup',
+ 'usercount' => 12
+ )
+ )
+ )
+ )
+ );
+ $response = $this->groupsController->index();
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testCreateWithExistingGroup() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('groupExists')
+ ->with('ExistingGroup')
+ ->will($this->returnValue(true));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'message' => 'Group already exists.'
+ ),
+ Http::STATUS_CONFLICT
+ );
+ $response = $this->groupsController->create('ExistingGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testCreateSuccessful() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('groupExists')
+ ->with('NewGroup')
+ ->will($this->returnValue(false));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('createGroup')
+ ->with('NewGroup')
+ ->will($this->returnValue(true));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'groupname' => 'NewGroup'
+ ),
+ Http::STATUS_CREATED
+ );
+ $response = $this->groupsController->create('NewGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testCreateUnsuccessful() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('groupExists')
+ ->with('NewGroup')
+ ->will($this->returnValue(false));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('createGroup')
+ ->with('NewGroup')
+ ->will($this->returnValue(false));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array('message' => 'Unable to add group.')
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ $response = $this->groupsController->create('NewGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testDestroySuccessful() {
+ $group = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('get')
+ ->with('ExistingGroup')
+ ->will($this->returnValue($group));
+ $group
+ ->expects($this->once())
+ ->method('delete')
+ ->will($this->returnValue(true));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array('groupname' => 'ExistingGroup')
+ ),
+ Http::STATUS_NO_CONTENT
+ );
+ $response = $this->groupsController->destroy('ExistingGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testDestroyUnsuccessful() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('get')
+ ->with('ExistingGroup')
+ ->will($this->returnValue(null));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array('message' => 'Unable to delete group.')
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ $response = $this->groupsController->destroy('ExistingGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+}
diff --git a/tests/settings/controller/logsettingscontrollertest.php b/tests/settings/controller/logsettingscontrollertest.php
new file mode 100644
index 00000000000..e80acfa75b5
--- /dev/null
+++ b/tests/settings/controller/logsettingscontrollertest.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * @author Georg Ehrke
+ * @copyright 2014 Georg Ehrke <georg@ownCloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace Test\Settings\Controller;
+
+use \OC\Settings\Application;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class LogSettingsControllerTest extends \Test\TestCase {
+
+ /** @var \OCP\AppFramework\IAppContainer */
+ private $container;
+
+ /** @var LogSettingsController */
+ private $logSettingsController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['AppName'] = 'settings';
+ $this->logSettingsController = $this->container['LogSettingsController'];
+ }
+
+ /**
+ * @dataProvider logLevelData
+ */
+ public function testSetLogLevel($level, $inRange) {
+ if ($inRange) {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setSystemValue')
+ ->with('loglevel', $level);
+ }
+
+ $response = $this->logSettingsController->setLogLevel($level)->getData();
+
+ if ($inRange) {
+ $expectedResponse = ['level' => $level];
+ } else {
+ $expectedResponse = ['message' => 'log-level out of allowed range'];
+ }
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function logLevelData() {
+ return [
+ [-1, false],
+ [0, true],
+ [1, true],
+ [2, true],
+ [3, true],
+ [4, true],
+ [5, false],
+ ];
+ }
+
+ public function testGetFilenameForDownload() {
+ $timestamp = 42;
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->with('instanceid')
+ ->will($this->returnValue('0xF'));
+ $filename = \Test_Helper::invokePrivate($this->logSettingsController, 'getFilenameForDownload', [$timestamp]);
+
+ $this->assertSame('ownCloud-0xF-42.log', $filename);
+ }
+}
diff --git a/tests/settings/controller/mailsettingscontrollertest.php b/tests/settings/controller/mailsettingscontrollertest.php
index ff3d1d93a1b..f6ebade7b17 100644
--- a/tests/settings/controller/mailsettingscontrollertest.php
+++ b/tests/settings/controller/mailsettingscontrollertest.php
@@ -14,11 +14,13 @@ use \OC\Settings\Application;
/**
* @package OC\Settings\Controller
*/
-class MailSettingscontrollerTest extends \PHPUnit_Framework_TestCase {
+class MailSettingsControllerTest extends \Test\TestCase {
private $container;
protected function setUp() {
+ parent::setUp();
+
$app = new Application();
$this->container = $app->getContainer();
$this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
@@ -147,6 +149,12 @@ class MailSettingscontrollerTest extends \PHPUnit_Framework_TestCase {
}
public function testSendTestMail() {
+ /**
+ * FIXME: Disabled due to missing DI on mail class.
+ * TODO: Re-enable when https://github.com/owncloud/core/pull/12085 is merged.
+ */
+ $this->markTestSkipped('Disable test until OC_Mail is rewritten.');
+
$user = $this->getMockBuilder('\OC\User\User')
->disableOriginalConstructor()
->getMock();
diff --git a/tests/settings/controller/securitysettingscontrollertest.php b/tests/settings/controller/securitysettingscontrollertest.php
new file mode 100644
index 00000000000..d89e4932368
--- /dev/null
+++ b/tests/settings/controller/securitysettingscontrollertest.php
@@ -0,0 +1,138 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Settings\Controller;
+
+use \OC\Settings\Application;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class SecuritySettingsControllerTest extends \PHPUnit_Framework_TestCase {
+
+ /** @var \OCP\AppFramework\IAppContainer */
+ private $container;
+
+ /** @var SecuritySettingsController */
+ private $securitySettingsController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['AppName'] = 'settings';
+ $this->securitySettingsController = $this->container['SecuritySettingsController'];
+ }
+
+
+ public function testEnforceSSLEmpty() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setSystemValue')
+ ->with('forcessl', false);
+
+ $response = $this->securitySettingsController->enforceSSL();
+ $expectedResponse = array('status' => 'success');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testEnforceSSL() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setSystemValue')
+ ->with('forcessl', true);
+
+ $response = $this->securitySettingsController->enforceSSL(true);
+ $expectedResponse = array('status' => 'success');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testEnforceSSLInvalid() {
+ $this->container['Config']
+ ->expects($this->exactly(0))
+ ->method('setSystemValue');
+
+ $response = $this->securitySettingsController->enforceSSL('blah');
+ $expectedResponse = array('status' => 'error');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testEnforceSSLForSubdomainsEmpty() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setSystemValue')
+ ->with('forceSSLforSubdomains', false);
+
+ $response = $this->securitySettingsController->enforceSSLForSubdomains();
+ $expectedResponse = array('status' => 'success');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testEnforceSSLForSubdomains() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setSystemValue')
+ ->with('forceSSLforSubdomains', true);
+
+ $response = $this->securitySettingsController->enforceSSLForSubdomains(true);
+ $expectedResponse = array('status' => 'success');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testEnforceSSLForSubdomainsInvalid() {
+ $this->container['Config']
+ ->expects($this->exactly(0))
+ ->method('setSystemValue');
+
+ $response = $this->securitySettingsController->enforceSSLForSubdomains('blah');
+ $expectedResponse = array('status' => 'error');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testTrustedDomainsWithExistingValues() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setSystemValue')
+ ->with('trusted_domains', array('owncloud.org', 'owncloud.com', 'newdomain.com'));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->with('trusted_domains')
+ ->will($this->returnValue(array('owncloud.org', 'owncloud.com')));
+
+ $response = $this->securitySettingsController->trustedDomains('newdomain.com');
+ $expectedResponse = array('status' => 'success');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testTrustedDomainsEmpty() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setSystemValue')
+ ->with('trusted_domains', array('newdomain.com'));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->with('trusted_domains')
+ ->will($this->returnValue(''));
+
+ $response = $this->securitySettingsController->trustedDomains('newdomain.com');
+ $expectedResponse = array('status' => 'success');
+
+ $this->assertSame($expectedResponse, $response);
+ }
+}
diff --git a/tests/settings/controller/userscontrollertest.php b/tests/settings/controller/userscontrollertest.php
new file mode 100644
index 00000000000..41622737027
--- /dev/null
+++ b/tests/settings/controller/userscontrollertest.php
@@ -0,0 +1,568 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Settings\Controller;
+
+use \OC\Settings\Application;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class UsersControllerTest extends \Test\TestCase {
+
+ /** @var \OCP\AppFramework\IAppContainer */
+ private $container;
+
+ /** @var UsersController */
+ private $usersController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['AppName'] = 'settings';
+ $this->container['GroupManager'] = $this->getMockBuilder('\OCP\IGroupManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserManager'] = $this->getMockBuilder('\OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['L10N'] = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['IsAdmin'] = true;
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($text, $parameters = array()) {
+ return vsprintf($text, $parameters);
+ }));
+ $this->container['Defaults'] = $this->getMockBuilder('\OC_Defaults')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Mail'] = $this->getMockBuilder('\OC_Mail')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['DefaultMailAddress'] = 'no-reply@owncloud.com';
+ $this->container['Logger'] = $this->getMockBuilder('\OCP\ILogger')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['URLGenerator'] = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->usersController = $this->container['UsersController'];
+
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testIndex() {
+ $foo = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $foo
+ ->expects($this->exactly(4))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $foo
+ ->expects($this->once())
+ ->method('getDisplayName')
+ ->will($this->returnValue('M. Foo'));
+ $foo
+ ->method('getLastLogin')
+ ->will($this->returnValue(500));
+ $foo
+ ->method('getHome')
+ ->will($this->returnValue('/home/foo'));
+ $foo
+ ->expects($this->once())
+ ->method('getBackendClassName')
+ ->will($this->returnValue('OC_User_Database'));
+ $admin = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $admin
+ ->expects($this->exactly(4))
+ ->method('getUID')
+ ->will($this->returnValue('admin'));
+ $admin
+ ->expects($this->once())
+ ->method('getDisplayName')
+ ->will($this->returnValue('S. Admin'));
+ $admin
+ ->expects($this->once())
+ ->method('getLastLogin')
+ ->will($this->returnValue(12));
+ $admin
+ ->expects($this->once())
+ ->method('getHome')
+ ->will($this->returnValue('/home/admin'));
+ $admin
+ ->expects($this->once())
+ ->method('getBackendClassName')
+ ->will($this->returnValue('OC_User_Dummy'));
+ $bar = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $bar
+ ->expects($this->exactly(4))
+ ->method('getUID')
+ ->will($this->returnValue('bar'));
+ $bar
+ ->expects($this->once())
+ ->method('getDisplayName')
+ ->will($this->returnValue('B. Ar'));
+ $bar
+ ->method('getLastLogin')
+ ->will($this->returnValue(3999));
+ $bar
+ ->method('getHome')
+ ->will($this->returnValue('/home/bar'));
+ $bar
+ ->expects($this->once())
+ ->method('getBackendClassName')
+ ->will($this->returnValue('OC_User_Dummy'));
+
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('displayNamesInGroup')
+ ->will($this->returnValue(array('foo' => 'M. Foo', 'admin' => 'S. Admin', 'bar' => 'B. Ar')));
+ $this->container['GroupManager']
+ ->expects($this->exactly(3))
+ ->method('getUserGroupIds')
+ ->will($this->onConsecutiveCalls(array('Users', 'Support'), array('admins', 'Support'), array('External Users')));
+ $this->container['UserManager']
+ ->expects($this->at(0))
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($foo));
+ $this->container['UserManager']
+ ->expects($this->at(1))
+ ->method('get')
+ ->with('admin')
+ ->will($this->returnValue($admin));
+ $this->container['UserManager']
+ ->expects($this->at(2))
+ ->method('get')
+ ->with('bar')
+ ->will($this->returnValue($bar));
+ $this->container['Config']
+ ->expects($this->exactly(6))
+ ->method('getUserValue')
+ ->will($this->onConsecutiveCalls(1024, 'foo@bar.com',
+ 404, 'admin@bar.com',
+ 2323, 'bar@dummy.com'));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 0 => array(
+ 'name' => 'foo',
+ 'displayname' => 'M. Foo',
+ 'groups' => array('Users', 'Support'),
+ 'subadmin' => array(),
+ 'quota' => 1024,
+ 'storageLocation' => '/home/foo',
+ 'lastLogin' => 500,
+ 'backend' => 'OC_User_Database',
+ 'email' => 'foo@bar.com'
+ ),
+ 1 => array(
+ 'name' => 'admin',
+ 'displayname' => 'S. Admin',
+ 'groups' => array('admins', 'Support'),
+ 'subadmin' => array(),
+ 'quota' => 404,
+ 'storageLocation' => '/home/admin',
+ 'lastLogin' => 12,
+ 'backend' => 'OC_User_Dummy',
+ 'email' => 'admin@bar.com'
+ ),
+ 2 => array(
+ 'name' => 'bar',
+ 'displayname' => 'B. Ar',
+ 'groups' => array('External Users'),
+ 'subadmin' => array(),
+ 'quota' => 2323,
+ 'storageLocation' => '/home/bar',
+ 'lastLogin' => 3999,
+ 'backend' => 'OC_User_Dummy',
+ 'email' => 'bar@dummy.com'
+ ),
+ )
+ );
+ $response = $this->usersController->index(0, 10, 'gid', 'pattern');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testIndexWithBackend() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->expects($this->exactly(4))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $user
+ ->expects($this->once())
+ ->method('getDisplayName')
+ ->will($this->returnValue('M. Foo'));
+ $user
+ ->method('getLastLogin')
+ ->will($this->returnValue(500));
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/foo'));
+ $user
+ ->expects($this->once())
+ ->method('getBackendClassName')
+ ->will($this->returnValue('OC_User_Database'));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('getBackends')
+ ->will($this->returnValue([new \OC_User_Dummy(), new \OC_User_Database()]));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('clearBackends');
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('registerBackend')
+ ->with(new \OC_User_Dummy());
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('search')
+ ->with('')
+ ->will($this->returnValue([$user]));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 0 => array(
+ 'name' => 'foo',
+ 'displayname' => 'M. Foo',
+ 'groups' => null,
+ 'subadmin' => array(),
+ 'quota' => null,
+ 'storageLocation' => '/home/foo',
+ 'lastLogin' => 500,
+ 'backend' => 'OC_User_Database',
+ 'email' => null
+ )
+ )
+ );
+ $response = $this->usersController->index(0, 10, '','', 'OC_User_Dummy');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testIndexWithBackendNoUser() {
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('getBackends')
+ ->will($this->returnValue([new \OC_User_Dummy(), new \OC_User_Database()]));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('search')
+ ->with('')
+ ->will($this->returnValue([]));
+
+ $expectedResponse = new DataResponse([]);
+ $response = $this->usersController->index(0, 10, '','', 'OC_User_Dummy');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testCreateSuccessfulWithoutGroup() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+ $user
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $user
+ ->expects($this->once())
+ ->method('getBackendClassName')
+ ->will($this->returnValue('bar'));
+
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('createUser')
+ ->will($this->onConsecutiveCalls($user));
+
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'name' => 'foo',
+ 'groups' => null,
+ 'storageLocation' => '/home/user',
+ 'backend' => 'bar',
+ 'lastLogin' => null,
+ 'displayname' => null,
+ 'quota' => null,
+ 'subadmin' => array(),
+ 'email' => null
+ ),
+ Http::STATUS_CREATED
+ );
+ $response = $this->usersController->create('foo', 'password', array());
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testCreateSuccessfulWithGroup() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+ $user
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $user
+ ->expects($this->once())
+ ->method('getBackendClassName')
+ ->will($this->returnValue('bar'));
+ $existingGroup = $this->getMockBuilder('\OCP\IGroup')
+ ->disableOriginalConstructor()->getMock();
+ $existingGroup
+ ->expects($this->once())
+ ->method('addUser')
+ ->with($user);
+ $newGroup = $this->getMockBuilder('\OCP\IGroup')
+ ->disableOriginalConstructor()->getMock();
+ $newGroup
+ ->expects($this->once())
+ ->method('addUser')
+ ->with($user);
+
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('createUser')
+ ->will($this->onConsecutiveCalls($user));
+ $this->container['GroupManager']
+ ->expects($this->exactly(2))
+ ->method('get')
+ ->will($this->onConsecutiveCalls(null, $existingGroup));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('createGroup')
+ ->with('NewGroup')
+ ->will($this->onConsecutiveCalls($newGroup));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->onConsecutiveCalls(array('NewGroup', 'ExistingGroup')));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'name' => 'foo',
+ 'groups' => array('NewGroup', 'ExistingGroup'),
+ 'storageLocation' => '/home/user',
+ 'backend' => 'bar',
+ 'lastLogin' => null,
+ 'displayname' => null,
+ 'quota' => null,
+ 'subadmin' => array(),
+ 'email' => null
+ ),
+ Http::STATUS_CREATED
+ );
+ $response = $this->usersController->create('foo', 'password', array('NewGroup', 'ExistingGroup'));
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testCreateUnsuccessful() {
+ $this->container['UserManager']
+ ->method('createUser')
+ ->will($this->throwException(new \Exception()));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'message' => 'Unable to create user.'
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ $response = $this->usersController->create('foo', 'password', array());
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testDestroySelf() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('myself'));
+ $this->container['UserSession']
+ ->method('getUser')
+ ->will($this->returnValue($user));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => 'Unable to delete user.'
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ $response = $this->usersController->destroy('myself');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testDestroy() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('Admin'));
+ $toDeleteUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $toDeleteUser
+ ->expects($this->once())
+ ->method('delete')
+ ->will($this->returnValue(true));
+ $this->container['UserSession']
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $this->container['UserManager']
+ ->method('get')
+ ->with('UserToDelete')
+ ->will($this->returnValue($toDeleteUser));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 'username' => 'UserToDelete'
+ )
+ ),
+ Http::STATUS_NO_CONTENT
+ );
+ $response = $this->usersController->destroy('UserToDelete');
+ $this->assertEquals($expectedResponse, $response);
+ }
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testDestroyUnsuccessful() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('Admin'));
+ $toDeleteUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $toDeleteUser
+ ->expects($this->once())
+ ->method('delete')
+ ->will($this->returnValue(false));
+ $this->container['UserSession']
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $this->container['UserManager']
+ ->method('get')
+ ->with('UserToDelete')
+ ->will($this->returnValue($toDeleteUser));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => 'Unable to delete user.'
+ )
+ ),
+ Http::STATUS_FORBIDDEN
+ );
+ $response = $this->usersController->destroy('UserToDelete');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * test if an invalid mail result in a failure response
+ */
+ public function testCreateUnsuccessfulWithInvalidEMail() {
+ /**
+ * FIXME: Disabled due to missing DI on mail class.
+ * TODO: Re-enable when https://github.com/owncloud/core/pull/12085 is merged.
+ */
+ $this->markTestSkipped('Disable test until OC_Mail is rewritten.');
+
+ $this->container['Mail']
+ ->expects($this->once())
+ ->method('validateAddress')
+ ->will($this->returnValue(false));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'message' => 'Invalid mail address'
+ ),
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ $response = $this->usersController->create('foo', 'password', array(), 'invalidMailAdress');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * test if a valid mail result in a successful mail send
+ */
+ public function testCreateSuccessfulWithValidEMail() {
+ /**
+ * FIXME: Disabled due to missing DI on mail class.
+ * TODO: Re-enable when https://github.com/owncloud/core/pull/12085 is merged.
+ */
+ $this->markTestSkipped('Disable test until OC_Mail is rewritten.');
+
+ $this->container['Mail']
+ ->expects($this->once())
+ ->method('validateAddress')
+ ->will($this->returnValue(true));
+ $this->container['Mail']
+ ->expects($this->once())
+ ->method('send')
+ ->with(
+ $this->equalTo('validMail@Adre.ss'),
+ $this->equalTo('foo'),
+ $this->anything(),
+ $this->anything(),
+ $this->anything(),
+ $this->equalTo('no-reply@owncloud.com'),
+ $this->equalTo(1),
+ $this->anything()
+ );
+ $this->container['Logger']
+ ->expects($this->never())
+ ->method('error');
+
+ $response = $this->usersController->create('foo', 'password', array(), 'validMail@Adre.ss');
+ $this->assertEquals(Http::STATUS_CREATED, $response->getStatus());
+ }
+
+}
diff --git a/tests/settings/middleware/subadminmiddlewaretest.php b/tests/settings/middleware/subadminmiddlewaretest.php
new file mode 100644
index 00000000000..e5572cfba52
--- /dev/null
+++ b/tests/settings/middleware/subadminmiddlewaretest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Middleware;
+
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\TemplateResponse;
+
+/**
+ * Verifies whether an user has at least subadmin rights.
+ * To bypass use the `@NoSubadminRequired` annotation
+ *
+ * @package OC\Settings\Middleware
+ */
+class SubadminMiddlewareTest extends \Test\TestCase {
+ /** @var SubadminMiddleware */
+ private $subadminMiddlewareAsSubAdmin;
+ /** @var SubadminMiddleware */
+ private $subadminMiddleware;
+ /** @var ControllerMethodReflector */
+ private $reflector;
+ /** @var Controller */
+ private $controller;
+
+ protected function setUp() {
+ $this->reflector = $this->getMockBuilder('\OC\AppFramework\Utility\ControllerMethodReflector')
+ ->disableOriginalConstructor()->getMock();
+ $this->controller = $this->getMockBuilder('\OCP\AppFramework\Controller')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->subadminMiddlewareAsSubAdmin = new SubadminMiddleware($this->reflector, true);
+ $this->subadminMiddleware = new SubadminMiddleware($this->reflector, false);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Logged in user must be a subadmin
+ */
+ public function testBeforeControllerAsUserWithExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(false));
+ $this->subadminMiddleware->beforeController($this->controller, 'foo');
+ }
+
+
+ public function testBeforeControllerAsUserWithoutExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(true));
+ $this->subadminMiddleware->beforeController($this->controller, 'foo');
+ }
+
+ public function testBeforeControllerAsSubAdminWithoutExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(false));
+ $this->subadminMiddlewareAsSubAdmin->beforeController($this->controller, 'foo');
+ }
+
+ public function testBeforeControllerAsSubAdminWithExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(true));
+ $this->subadminMiddlewareAsSubAdmin->beforeController($this->controller, 'foo');
+ }
+
+
+
+
+ public function testAfterException() {
+ $expectedResponse = new TemplateResponse('core', '403', array(), 'guest');
+ $this->assertEquals($expectedResponse, $this->subadminMiddleware->afterException($this->controller, 'foo', new \Exception()));
+ }
+} \ No newline at end of file
diff --git a/tests/testcleanuplistener.php b/tests/testcleanuplistener.php
deleted file mode 100644
index 7b442bbd4f7..00000000000
--- a/tests/testcleanuplistener.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-/**
- * Detects tests that didn't clean up properly, show a warning, then clean up after them.
- */
-class TestCleanupListener implements PHPUnit_Framework_TestListener {
- private $verbosity;
-
- public function __construct($verbosity = 'verbose') {
- $this->verbosity = $verbosity;
- }
-
- public function addError(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time) {
- }
-
- public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function startTest(PHPUnit_Framework_Test $test) {
- }
-
- public function endTest(PHPUnit_Framework_Test $test, $time) {
- }
-
- public function startTestSuite(PHPUnit_Framework_TestSuite $suite) {
- }
-
- public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {
- // don't clean up the test environment if a data provider finished
- if (!($suite instanceof PHPUnit_Framework_TestSuite_DataProvider)) {
- if ($this->cleanStorages() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up storages\n", $suite->getName());
- }
- if ($this->cleanFileCache() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up file cache\n", $suite->getName());
- }
- if ($this->cleanStrayDataFiles() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up data dir\n", $suite->getName());
- }
- if ($this->cleanStrayHooks() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up hooks\n", $suite->getName());
- }
- if ($this->cleanProxies() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up proxies\n", $suite->getName());
- }
- }
- }
-
- private function isShowSuiteWarning() {
- return $this->verbosity === 'suite' || $this->verbosity === 'detail';
- }
-
- private function isShowDetail() {
- return $this->verbosity === 'detail';
- }
-
- /**
- * @param string $dir
- */
- private function unlinkDir($dir) {
- if ($dh = @opendir($dir)) {
- while (($file = readdir($dh)) !== false) {
- if ($file === '..' || $file === '.') {
- continue;
- }
- $path = $dir . '/' . $file;
- if (is_dir($path)) {
- $this->unlinkDir($path);
- }
- else {
- @unlink($path);
- }
- }
- closedir($dh);
- }
- @rmdir($dir);
- }
-
- private function cleanStrayDataFiles() {
- $knownEntries = array(
- 'owncloud.log' => true,
- 'owncloud.db' => true,
- '.ocdata' => true,
- '..' => true,
- '.' => true
- );
- $datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data');
- $entries = array();
- if ($dh = opendir($datadir)) {
- while (($file = readdir($dh)) !== false) {
- if (!isset($knownEntries[$file])) {
- $entries[] = $file;
- }
- }
- closedir($dh);
- }
-
- if (count($entries) > 0) {
- foreach ($entries as $entry) {
- $this->unlinkDir($datadir . '/' . $entry);
- if ($this->isShowDetail()) {
- printf("Stray datadir entry: %s\n", $entry);
- }
- }
- return true;
- }
-
- return false;
- }
-
- private function cleanStorages() {
- $sql = 'DELETE FROM `*PREFIX*storages`';
- $query = \OC_DB::prepare( $sql );
- $result = $query->execute();
- if ($result > 0) {
- return true;
- }
- return false;
- }
-
- private function cleanFileCache() {
- $sql = 'DELETE FROM `*PREFIX*filecache`';
- $query = \OC_DB::prepare( $sql );
- $result = $query->execute();
- if ($result > 0) {
- return true;
- }
- return false;
- }
-
- private function cleanStrayHooks() {
- $hasHooks = false;
- $hooks = OC_Hook::getHooks();
- if (!$hooks || sizeof($hooks) === 0) {
- return false;
- }
-
- foreach ($hooks as $signalClass => $signals) {
- if (sizeof($signals)) {
- foreach ($signals as $signalName => $handlers ) {
- if (sizeof($handlers) > 0) {
- $hasHooks = true;
- OC_Hook::clear($signalClass, $signalName);
- if ($this->isShowDetail()) {
- printf("Stray hook: \"%s\" \"%s\"\n", $signalClass, $signalName);
- }
- }
- }
- }
- }
- return $hasHooks;
- }
-
- private function cleanProxies() {
- $proxies = OC_FileProxy::getProxies();
- OC_FileProxy::clearProxies();
- // reenable in case some test failed to reenable them
- OC_FileProxy::$enabled = true;
- return count($proxies) > 0;
- }
-}
diff --git a/version.php b/version.php
index 4421a06bea0..6873883f6db 100644
--- a/version.php
+++ b/version.php
@@ -3,13 +3,10 @@
// We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades
// between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
// when updating major/minor version number.
-$OC_Version=array(7, 8, 1, 0);
+$OC_Version=array(8, 0, 0, 1);
// The human readable string
-$OC_VersionString='8.0 pre alpha';
-
-// The ownCloud edition
-$OC_Edition='';
+$OC_VersionString='8.0 alpha 1';
// The ownCloud channel
$OC_Channel='git';