aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/encryption/l10n/fa.js19
-rw-r--r--apps/encryption/l10n/fa.json19
-rw-r--r--apps/encryption/l10n/ru.js3
-rw-r--r--apps/encryption/l10n/ru.json3
-rw-r--r--apps/files/l10n/cs_CZ.js3
-rw-r--r--apps/files/l10n/cs_CZ.json3
-rw-r--r--apps/files/l10n/el.js3
-rw-r--r--apps/files/l10n/el.json3
-rw-r--r--apps/files/l10n/fr.js2
-rw-r--r--apps/files/l10n/fr.json2
-rw-r--r--apps/files/l10n/hu_HU.js3
-rw-r--r--apps/files/l10n/hu_HU.json3
-rw-r--r--apps/files/l10n/nds.js9
-rw-r--r--apps/files/l10n/nds.json9
-rw-r--r--apps/files/l10n/ru.js5
-rw-r--r--apps/files/l10n/ru.json5
-rw-r--r--apps/files_external/l10n/cs_CZ.js2
-rw-r--r--apps/files_external/l10n/cs_CZ.json2
-rw-r--r--apps/files_external/l10n/fa.js10
-rw-r--r--apps/files_external/l10n/fa.json10
-rw-r--r--apps/files_external/l10n/nds.js102
-rw-r--r--apps/files_external/l10n/nds.json100
-rw-r--r--apps/files_external/l10n/ru.js31
-rw-r--r--apps/files_external/l10n/ru.json31
-rw-r--r--apps/files_external/service/storagesservice.php41
-rw-r--r--apps/files_external/tests/service/storagesservicetest.php50
-rw-r--r--apps/files_external/tests/service/userstoragesservicetest.php7
-rw-r--r--apps/files_sharing/appinfo/application.php25
-rw-r--r--apps/files_sharing/css/public.css8
-rw-r--r--apps/files_sharing/l10n/cs_CZ.js8
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json8
-rw-r--r--apps/files_sharing/l10n/el.js8
-rw-r--r--apps/files_sharing/l10n/el.json8
-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/hu_HU.js8
-rw-r--r--apps/files_sharing/l10n/hu_HU.json8
-rw-r--r--apps/files_sharing/l10n/nds.js8
-rw-r--r--apps/files_sharing/l10n/nds.json6
-rw-r--r--apps/files_sharing/l10n/ru.js14
-rw-r--r--apps/files_sharing/l10n/ru.json14
-rw-r--r--apps/files_sharing/l10n/zh_TW.js3
-rw-r--r--apps/files_sharing/l10n/zh_TW.json3
-rw-r--r--apps/files_sharing/lib/external/manager.php54
-rw-r--r--apps/files_sharing/lib/external/mountprovider.php75
-rw-r--r--apps/files_sharing/lib/helper.php1
-rw-r--r--apps/files_sharing/lib/propagation/changewatcher.php8
-rw-r--r--apps/files_sharing/lib/propagation/grouppropagationmanager.php133
-rw-r--r--apps/files_sharing/lib/propagation/propagationmanager.php23
-rw-r--r--apps/files_sharing/lib/propagation/recipientpropagator.php2
-rw-r--r--apps/files_sharing/lib/sharedstorage.php3
-rw-r--r--apps/files_sharing/templates/public.php63
-rw-r--r--apps/files_sharing/tests/etagpropagation.php14
-rw-r--r--apps/files_sharing/tests/external/managertest.php33
-rw-r--r--apps/files_sharing/tests/grouppropagationmanager.php175
-rw-r--r--apps/files_trashbin/l10n/nds.js7
-rw-r--r--apps/files_trashbin/l10n/nds.json5
-rw-r--r--apps/user_ldap/l10n/fa.js2
-rw-r--r--apps/user_ldap/l10n/fa.json2
-rw-r--r--apps/user_ldap/l10n/nds.js6
-rw-r--r--apps/user_ldap/l10n/nds.json6
-rw-r--r--apps/user_ldap/l10n/pt_PT.js4
-rw-r--r--apps/user_ldap/l10n/pt_PT.json4
-rw-r--r--apps/user_ldap/lib/access.php24
-rw-r--r--apps/user_ldap/lib/wizard.php2
-rw-r--r--apps/user_ldap/tests/integration/lib/integrationtestpaging.php81
-rw-r--r--config/config.sample.php3
-rw-r--r--core/css/styles.css9
-rw-r--r--core/l10n/cs_CZ.js1
-rw-r--r--core/l10n/cs_CZ.json1
-rw-r--r--core/l10n/de.js8
-rw-r--r--core/l10n/de.json8
-rw-r--r--core/l10n/de_DE.js12
-rw-r--r--core/l10n/de_DE.json12
-rw-r--r--core/l10n/el.js4
-rw-r--r--core/l10n/el.json4
-rw-r--r--core/l10n/es.js1
-rw-r--r--core/l10n/es.json1
-rw-r--r--core/l10n/fa.js31
-rw-r--r--core/l10n/fa.json31
-rw-r--r--core/l10n/fi_FI.js1
-rw-r--r--core/l10n/fi_FI.json1
-rw-r--r--core/l10n/hu_HU.js1
-rw-r--r--core/l10n/hu_HU.json1
-rw-r--r--core/l10n/it.js1
-rw-r--r--core/l10n/it.json1
-rw-r--r--core/l10n/nds.js113
-rw-r--r--core/l10n/nds.json113
-rw-r--r--core/l10n/pt_BR.js1
-rw-r--r--core/l10n/pt_BR.json1
-rw-r--r--core/l10n/ru.js21
-rw-r--r--core/l10n/ru.json21
-rw-r--r--lib/l10n/fa.js1
-rw-r--r--lib/l10n/fa.json1
-rw-r--r--lib/l10n/nds.js9
-rw-r--r--lib/l10n/nds.json9
-rw-r--r--lib/l10n/ru.js2
-rw-r--r--lib/l10n/ru.json2
-rw-r--r--lib/private/appframework/http/request.php21
-rw-r--r--lib/private/connector/sabre/filesplugin.php32
-rw-r--r--lib/private/connector/sabre/serverfactory.php2
-rw-r--r--lib/private/files.php3
-rw-r--r--lib/private/share/share.php10
-rw-r--r--lib/private/streamer.php2
-rw-r--r--lib/private/template.php83
-rw-r--r--lib/public/irequest.php8
-rw-r--r--settings/controller/certificatecontroller.php5
-rw-r--r--settings/l10n/cs_CZ.js1
-rw-r--r--settings/l10n/cs_CZ.json1
-rw-r--r--settings/l10n/de.js4
-rw-r--r--settings/l10n/de.json4
-rw-r--r--settings/l10n/de_DE.js2
-rw-r--r--settings/l10n/de_DE.json2
-rw-r--r--settings/l10n/el.js2
-rw-r--r--settings/l10n/el.json2
-rw-r--r--settings/l10n/fa.js2
-rw-r--r--settings/l10n/fa.json2
-rw-r--r--settings/l10n/fi_FI.js2
-rw-r--r--settings/l10n/fi_FI.json2
-rw-r--r--settings/l10n/it.js2
-rw-r--r--settings/l10n/it.json2
-rw-r--r--settings/l10n/nds.js19
-rw-r--r--settings/l10n/nds.json17
-rw-r--r--settings/l10n/pt_BR.js2
-rw-r--r--settings/l10n/pt_BR.json2
-rw-r--r--settings/l10n/ru.js11
-rw-r--r--settings/l10n/ru.json11
-rw-r--r--settings/l10n/zh_TW.js7
-rw-r--r--settings/l10n/zh_TW.json7
-rw-r--r--settings/personal.php4
-rw-r--r--tests/lib/appframework/http/RequestTest.php51
-rw-r--r--tests/lib/connector/sabre/filesplugin.php61
-rw-r--r--version.php4
133 files changed, 1978 insertions, 184 deletions
diff --git a/apps/encryption/l10n/fa.js b/apps/encryption/l10n/fa.js
index 1793326a3f9..ac39a7fbe88 100644
--- a/apps/encryption/l10n/fa.js
+++ b/apps/encryption/l10n/fa.js
@@ -1,18 +1,37 @@
OC.L10N.register(
"encryption",
{
+ "Missing recovery key password" : "فاقد رمزعبور کلید بازیابی",
+ "Please repeat the recovery key password" : "لطفا رمز کلید بازیابی را تکرار کنید",
"Recovery key successfully enabled" : "کلید بازیابی با موفقیت فعال شده است.",
"Could not enable recovery key. Please check your recovery key password!" : "کلید بازیابی نمی تواند فعال شود. لطفا رمزعبور کلید بازیابی خود را بررسی نمایید!",
"Recovery key successfully disabled" : "کلید بازیابی با موفقیت غیر فعال شده است.",
"Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!",
"Missing parameters" : "پارامترهای فراموش شده",
+ "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." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
+ "Recovery Key disabled" : "کلید بازیابی غیرفعال شد",
+ "Recovery Key enabled" : "کلید بازیابی فعال شد",
+ "Could not enable the recovery key, please try again or contact your administrator" : "امکان فعال‌سازی کلید بازیابی وجود ندارد، لطفا مجددا تلاش کرده و یا با مدیر تماس بگیرید",
+ "Could not update the private key password." : "امکان بروزرسانی رمزعبور کلید خصوصی وجود ندارد.",
+ "The old password was not correct, please try again." : "رمزعبور قدیمی اشتباه است، لطفا مجددا تلاش کنید.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
+ "Encryption App is enabled and ready" : "برنامه رمزگذاری فعال و آماده است",
+ "The share will expire on %s." : "اشتراک‌گذاری در %s منقضی خواهد شد.",
"Cheers!" : "سلامتی!",
+ "Enable recovery key" : "فعال‌سازی کلید بازیابی",
+ "Disable recovery key" : "غیرفعال‌سازی کلید بازیابی",
"Recovery key password" : "رمزعبور کلید بازیابی",
+ "Repeat recovery key password" : "تکرار رمزعبور کلید بازیابی",
"Change recovery key password:" : "تغییر رمزعبور کلید بازیابی:",
+ "Old recovery key password" : "رمزعبور قدیمی کلید بازیابی",
+ "New recovery key password" : "رمزعبور جدید کلید بازیابی",
+ "Repeat new recovery key password" : "تکرار رمزعبور جدید کلید بازیابی",
"Change Password" : "تغییر رمزعبور",
+ "ownCloud basic encryption module" : "ماژول پایه رمزگذاری ownCloud",
" If you don't remember your old password you can ask your administrator to recover your files." : "اگر رمزعبور قدیمی را فراموش کرده اید میتوانید از مدیر خود برای بازیابی فایل هایتان درخواست نمایید.",
"Old log-in password" : "رمزعبور قدیمی",
"Current log-in password" : "رمزعبور فعلی",
diff --git a/apps/encryption/l10n/fa.json b/apps/encryption/l10n/fa.json
index 3b863326db4..1a6e7d16275 100644
--- a/apps/encryption/l10n/fa.json
+++ b/apps/encryption/l10n/fa.json
@@ -1,16 +1,35 @@
{ "translations": {
+ "Missing recovery key password" : "فاقد رمزعبور کلید بازیابی",
+ "Please repeat the recovery key password" : "لطفا رمز کلید بازیابی را تکرار کنید",
"Recovery key successfully enabled" : "کلید بازیابی با موفقیت فعال شده است.",
"Could not enable recovery key. Please check your recovery key password!" : "کلید بازیابی نمی تواند فعال شود. لطفا رمزعبور کلید بازیابی خود را بررسی نمایید!",
"Recovery key successfully disabled" : "کلید بازیابی با موفقیت غیر فعال شده است.",
"Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!",
"Missing parameters" : "پارامترهای فراموش شده",
+ "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." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
+ "Recovery Key disabled" : "کلید بازیابی غیرفعال شد",
+ "Recovery Key enabled" : "کلید بازیابی فعال شد",
+ "Could not enable the recovery key, please try again or contact your administrator" : "امکان فعال‌سازی کلید بازیابی وجود ندارد، لطفا مجددا تلاش کرده و یا با مدیر تماس بگیرید",
+ "Could not update the private key password." : "امکان بروزرسانی رمزعبور کلید خصوصی وجود ندارد.",
+ "The old password was not correct, please try again." : "رمزعبور قدیمی اشتباه است، لطفا مجددا تلاش کنید.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
+ "Encryption App is enabled and ready" : "برنامه رمزگذاری فعال و آماده است",
+ "The share will expire on %s." : "اشتراک‌گذاری در %s منقضی خواهد شد.",
"Cheers!" : "سلامتی!",
+ "Enable recovery key" : "فعال‌سازی کلید بازیابی",
+ "Disable recovery key" : "غیرفعال‌سازی کلید بازیابی",
"Recovery key password" : "رمزعبور کلید بازیابی",
+ "Repeat recovery key password" : "تکرار رمزعبور کلید بازیابی",
"Change recovery key password:" : "تغییر رمزعبور کلید بازیابی:",
+ "Old recovery key password" : "رمزعبور قدیمی کلید بازیابی",
+ "New recovery key password" : "رمزعبور جدید کلید بازیابی",
+ "Repeat new recovery key password" : "تکرار رمزعبور جدید کلید بازیابی",
"Change Password" : "تغییر رمزعبور",
+ "ownCloud basic encryption module" : "ماژول پایه رمزگذاری ownCloud",
" If you don't remember your old password you can ask your administrator to recover your files." : "اگر رمزعبور قدیمی را فراموش کرده اید میتوانید از مدیر خود برای بازیابی فایل هایتان درخواست نمایید.",
"Old log-in password" : "رمزعبور قدیمی",
"Current log-in password" : "رمزعبور فعلی",
diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js
index 2b64fa66ed9..b326b71456d 100644
--- a/apps/encryption/l10n/ru.js
+++ b/apps/encryption/l10n/ru.js
@@ -25,10 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново",
"Encryption App is enabled and ready" : "Приложение шифрования включено и готово",
+ "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удается прочитать файл, возможно это публичный файл. Пожалуйста попросите владельца открыть доступ снова.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Привет,\n\nадминистратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля '%s'.\n\nПожалуйста войдите в веб-приложение, в разделе 'ownCloud простой модуль шифрования' в личных настройках вам нужно обновить пароль шифрования.\n\n",
"The share will expire on %s." : "Доступ будет закрыт %s",
"Cheers!" : "Всего наилучшего!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Привет,<br><br>администратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля <strong>%s</strong>.<br><br>Пожалуйста войдите в веб-приложение, в разделе \"ownCloud простой модуль шифрования\" в личных настройках вам нужно обновить пароль шифрования.<br><br>",
"Enable recovery key" : "Включить ключ восстановления",
"Disable recovery key" : "Отключить ключ восстановления",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.",
diff --git a/apps/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json
index 229d4e32dee..f4a14cb841f 100644
--- a/apps/encryption/l10n/ru.json
+++ b/apps/encryption/l10n/ru.json
@@ -23,10 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново",
"Encryption App is enabled and ready" : "Приложение шифрования включено и готово",
+ "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удается прочитать файл, возможно это публичный файл. Пожалуйста попросите владельца открыть доступ снова.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Привет,\n\nадминистратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля '%s'.\n\nПожалуйста войдите в веб-приложение, в разделе 'ownCloud простой модуль шифрования' в личных настройках вам нужно обновить пароль шифрования.\n\n",
"The share will expire on %s." : "Доступ будет закрыт %s",
"Cheers!" : "Всего наилучшего!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Привет,<br><br>администратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля <strong>%s</strong>.<br><br>Пожалуйста войдите в веб-приложение, в разделе \"ownCloud простой модуль шифрования\" в личных настройках вам нужно обновить пароль шифрования.<br><br>",
"Enable recovery key" : "Включить ключ восстановления",
"Disable recovery key" : "Отключить ключ восстановления",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.",
diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js
index 7ef3a2ec9aa..10f9d49984f 100644
--- a/apps/files/l10n/cs_CZ.js
+++ b/apps/files/l10n/cs_CZ.js
@@ -96,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s smazal(a) %1$s",
"You restored %1$s" : "Obnovili jste %1$s",
"%2$s restored %1$s" : "%2$s obnovil(a) %1$s",
+ "Changed by %2$s" : "Změněno uživatelem %2$s",
+ "Deleted by %2$s" : "Smazáno uživatelem %2$s",
+ "Restored by %2$s" : "Obnoveno uživatelem %2$s",
"%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)",
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index 55b374f9ea6..cc475fbfd5c 100644
--- a/apps/files/l10n/cs_CZ.json
+++ b/apps/files/l10n/cs_CZ.json
@@ -94,6 +94,9 @@
"%2$s deleted %1$s" : "%2$s smazal(a) %1$s",
"You restored %1$s" : "Obnovili jste %1$s",
"%2$s restored %1$s" : "%2$s obnovil(a) %1$s",
+ "Changed by %2$s" : "Změněno uživatelem %2$s",
+ "Deleted by %2$s" : "Smazáno uživatelem %2$s",
+ "Restored by %2$s" : "Obnoveno uživatelem %2$s",
"%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)",
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index 895ffe19267..063c9f0fe44 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -96,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "Ο %2$s διέγραψε %1$s",
"You restored %1$s" : "Επαναφέρατε %1$s",
"%2$s restored %1$s" : "%2$s επανέφερε %1$s",
+ "Changed by %2$s" : "Άλλαξε από %2$s",
+ "Deleted by %2$s" : "Διαγράφηκε από %2$s",
+ "Restored by %2$s" : "Επαναφορά απο %2$s",
"%s could not be renamed as it has been deleted" : "%s δεν μπορούσε να μετονομαστεί εφόσον είχε διαγραφεί",
"%s could not be renamed" : "Αδυναμία μετονομασίας του %s",
"Upload (max. %s)" : "Διαμοιρασμός (max. %s)",
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index 0d24b6c7015..b374964c8b6 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -94,6 +94,9 @@
"%2$s deleted %1$s" : "Ο %2$s διέγραψε %1$s",
"You restored %1$s" : "Επαναφέρατε %1$s",
"%2$s restored %1$s" : "%2$s επανέφερε %1$s",
+ "Changed by %2$s" : "Άλλαξε από %2$s",
+ "Deleted by %2$s" : "Διαγράφηκε από %2$s",
+ "Restored by %2$s" : "Επαναφορά απο %2$s",
"%s could not be renamed as it has been deleted" : "%s δεν μπορούσε να μετονομαστεί εφόσον είχε διαγραφεί",
"%s could not be renamed" : "Αδυναμία μετονομασίας του %s",
"Upload (max. %s)" : "Διαμοιρασμός (max. %s)",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index bd39511a431..665d185cd2d 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -109,7 +109,7 @@ OC.L10N.register(
"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>",
"Cancel upload" : "Annuler l'envoi",
- "No files in here" : "Aucun fichier ici",
+ "No files in here" : "Aucun fichier",
"Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !",
"No entries found in this folder" : "Aucune entrée trouvée dans ce dossier",
"Select all" : "Tout sélectionner",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index dbff6e6731d..02601ee9d9b 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -107,7 +107,7 @@
"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>",
"Cancel upload" : "Annuler l'envoi",
- "No files in here" : "Aucun fichier ici",
+ "No files in here" : "Aucun fichier",
"Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !",
"No entries found in this folder" : "Aucune entrée trouvée dans ce dossier",
"Select all" : "Tout sélectionner",
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index dfa628279c9..5eff7a8f842 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -96,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s törölte: %1$s",
"You restored %1$s" : "Visszatöltötted %1$s",
"%2$s restored %1$s" : "%1$s visszatöltötte %2$s",
+ "Changed by %2$s" : "Megváltoztatta: %2$s",
+ "Deleted by %2$s" : "Törölte: %2$s",
+ "Restored by %2$s" : "Visszaállította: %2$s",
"%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)",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 0a6c87b9892..da5eed09733 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -94,6 +94,9 @@
"%2$s deleted %1$s" : "%2$s törölte: %1$s",
"You restored %1$s" : "Visszatöltötted %1$s",
"%2$s restored %1$s" : "%1$s visszatöltötte %2$s",
+ "Changed by %2$s" : "Megváltoztatta: %2$s",
+ "Deleted by %2$s" : "Törölte: %2$s",
+ "Restored by %2$s" : "Visszaállította: %2$s",
"%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)",
diff --git a/apps/files/l10n/nds.js b/apps/files/l10n/nds.js
index 7988332fa91..9b28220ae43 100644
--- a/apps/files/l10n/nds.js
+++ b/apps/files/l10n/nds.js
@@ -1,9 +1,10 @@
OC.L10N.register(
"files",
{
- "_%n folder_::_%n folders_" : ["",""],
- "_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""],
- "_matches '{filter}'_::_match '{filter}'_" : ["",""]
+ "Files" : "Dateien",
+ "Delete" : "Löschen",
+ "Name" : "Name",
+ "Settings" : "Einstellungen",
+ "WebDAV" : "WebDAV"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nds.json b/apps/files/l10n/nds.json
index ef5fc586755..4ab8de68b35 100644
--- a/apps/files/l10n/nds.json
+++ b/apps/files/l10n/nds.json
@@ -1,7 +1,8 @@
{ "translations": {
- "_%n folder_::_%n folders_" : ["",""],
- "_%n file_::_%n files_" : ["",""],
- "_Uploading %n file_::_Uploading %n files_" : ["",""],
- "_matches '{filter}'_::_match '{filter}'_" : ["",""]
+ "Files" : "Dateien",
+ "Delete" : "Löschen",
+ "Name" : "Name",
+ "Settings" : "Einstellungen",
+ "WebDAV" : "WebDAV"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index 60583d6baf1..270cc3c6a85 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -75,8 +75,10 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байтов","%n байта(ов)"],
"Favorited" : "Избранное",
"Favorite" : "Избранное",
+ "{newname} already exists" : "{newname} уже существует",
"Upload" : "Загрузить",
"Text file" : "Текстовый файл",
+ "New text file.txt" : "Новый текстовый документ.txt",
"Folder" : "Каталог",
"New folder" : "Новый каталог",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
@@ -94,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s удалил %1$s",
"You restored %1$s" : "Вы восстановили %1$s",
"%2$s restored %1$s" : "%2$s восстановил %1$s",
+ "Changed by %2$s" : "Изменено %2$s",
+ "Deleted by %2$s" : "Удалено %2$s",
+ "Restored by %2$s" : "Восстановлено %2$s",
"%s could not be renamed as it has been deleted" : "Невозможно переименовать %s, поскольку объект удалён.",
"%s could not be renamed" : "%s не может быть переименован",
"Upload (max. %s)" : "Загрузка (максимум %s)",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index d15e181096f..36aae3834a9 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -73,8 +73,10 @@
"_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байтов","%n байта(ов)"],
"Favorited" : "Избранное",
"Favorite" : "Избранное",
+ "{newname} already exists" : "{newname} уже существует",
"Upload" : "Загрузить",
"Text file" : "Текстовый файл",
+ "New text file.txt" : "Новый текстовый документ.txt",
"Folder" : "Каталог",
"New folder" : "Новый каталог",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
@@ -92,6 +94,9 @@
"%2$s deleted %1$s" : "%2$s удалил %1$s",
"You restored %1$s" : "Вы восстановили %1$s",
"%2$s restored %1$s" : "%2$s восстановил %1$s",
+ "Changed by %2$s" : "Изменено %2$s",
+ "Deleted by %2$s" : "Удалено %2$s",
+ "Restored by %2$s" : "Восстановлено %2$s",
"%s could not be renamed as it has been deleted" : "Невозможно переименовать %s, поскольку объект удалён.",
"%s could not be renamed" : "%s не может быть переименован",
"Upload (max. %s)" : "Загрузка (максимум %s)",
diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js
index 59b3f9b148c..efa5f227a90 100644
--- a/apps/files_external/l10n/cs_CZ.js
+++ b/apps/files_external/l10n/cs_CZ.js
@@ -41,6 +41,7 @@ OC.L10N.register(
"OpenStack" : "OpenStack",
"Username" : "Uživatelské jméno",
"Password" : "Heslo",
+ "Rackspace" : "Rackspace",
"API key" : "Klíč API",
"Username and password" : "Uživatelské jméno a heslo",
"Session credentials" : "Přihlašovací údaje sezení",
@@ -74,6 +75,7 @@ OC.L10N.register(
"SMB / CIFS using OC login" : "SMB / CIFS za použití přihlašovacího jména OC",
"Username as share" : "Uživatelské jméno jako sdílený adresář",
"OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Jméno služby",
"Request timeout (seconds)" : "Čas vypršení požadavku (sekundy)",
"<b>Note:</b> " : "<b>Poznámka:</b>",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json
index 08837e76a83..8aa349522f9 100644
--- a/apps/files_external/l10n/cs_CZ.json
+++ b/apps/files_external/l10n/cs_CZ.json
@@ -39,6 +39,7 @@
"OpenStack" : "OpenStack",
"Username" : "Uživatelské jméno",
"Password" : "Heslo",
+ "Rackspace" : "Rackspace",
"API key" : "Klíč API",
"Username and password" : "Uživatelské jméno a heslo",
"Session credentials" : "Přihlašovací údaje sezení",
@@ -72,6 +73,7 @@
"SMB / CIFS using OC login" : "SMB / CIFS za použití přihlašovacího jména OC",
"Username as share" : "Uživatelské jméno jako sdílený adresář",
"OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Jméno služby",
"Request timeout (seconds)" : "Čas vypršení požadavku (sekundy)",
"<b>Note:</b> " : "<b>Poznámka:</b>",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
diff --git a/apps/files_external/l10n/fa.js b/apps/files_external/l10n/fa.js
index 53723eae96e..efcb4fea048 100644
--- a/apps/files_external/l10n/fa.js
+++ b/apps/files_external/l10n/fa.js
@@ -1,11 +1,17 @@
OC.L10N.register(
"files_external",
{
+ "Please provide a valid app key and secret." : "لطفا یک کلید و رمز معتبر برای برنامه فرآهم کنید.",
+ "Step 1 failed. Exception: %s" : "گام 1 ناموفق بود. خطا: %s",
+ "Step 2 failed. Exception: %s" : "گام 2ناموفق بود. خطا: %s",
"External storage" : "حافظه خارجی",
+ "Storage with id \"%i\" not found" : "فضای ذخیره‌سازی با شماره \"%i\" یافت نشد",
"Personal" : "شخصی",
"System" : "سیستم",
"Grant access" : " مجوز اعطا دسترسی",
"Access granted" : "مجوز دسترسی صادر شد",
+ "Error configuring OAuth1" : "خطا پیکربندی OAuth1",
+ "Error configuring OAuth2" : "خطا پیکربندی OAuth2",
"Generate keys" : "تولید کلید",
"Enable encryption" : "فعال کردن رمزگذاری",
"Check for changes" : "بررسی برای تغییرات",
@@ -15,6 +21,10 @@ OC.L10N.register(
"Access key" : "کلید دسترسی",
"Secret key" : "کلید مخفی",
"None" : "هیچ‌کدام",
+ "OAuth1" : "OAuth1",
+ "App secret" : "کد برنامه",
+ "OAuth2" : "OAuth2",
+ "OpenStack" : "OpenStack",
"Username" : "نام کاربری",
"Password" : "گذرواژه",
"API key" : "کلید API ",
diff --git a/apps/files_external/l10n/fa.json b/apps/files_external/l10n/fa.json
index 98aa7c58827..9e4e3b00365 100644
--- a/apps/files_external/l10n/fa.json
+++ b/apps/files_external/l10n/fa.json
@@ -1,9 +1,15 @@
{ "translations": {
+ "Please provide a valid app key and secret." : "لطفا یک کلید و رمز معتبر برای برنامه فرآهم کنید.",
+ "Step 1 failed. Exception: %s" : "گام 1 ناموفق بود. خطا: %s",
+ "Step 2 failed. Exception: %s" : "گام 2ناموفق بود. خطا: %s",
"External storage" : "حافظه خارجی",
+ "Storage with id \"%i\" not found" : "فضای ذخیره‌سازی با شماره \"%i\" یافت نشد",
"Personal" : "شخصی",
"System" : "سیستم",
"Grant access" : " مجوز اعطا دسترسی",
"Access granted" : "مجوز دسترسی صادر شد",
+ "Error configuring OAuth1" : "خطا پیکربندی OAuth1",
+ "Error configuring OAuth2" : "خطا پیکربندی OAuth2",
"Generate keys" : "تولید کلید",
"Enable encryption" : "فعال کردن رمزگذاری",
"Check for changes" : "بررسی برای تغییرات",
@@ -13,6 +19,10 @@
"Access key" : "کلید دسترسی",
"Secret key" : "کلید مخفی",
"None" : "هیچ‌کدام",
+ "OAuth1" : "OAuth1",
+ "App secret" : "کد برنامه",
+ "OAuth2" : "OAuth2",
+ "OpenStack" : "OpenStack",
"Username" : "نام کاربری",
"Password" : "گذرواژه",
"API key" : "کلید API ",
diff --git a/apps/files_external/l10n/nds.js b/apps/files_external/l10n/nds.js
new file mode 100644
index 00000000000..717417fdc2b
--- /dev/null
+++ b/apps/files_external/l10n/nds.js
@@ -0,0 +1,102 @@
+OC.L10N.register(
+ "files_external",
+ {
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Holen des Requesttokens fehlgeschlagen. Bitte überprüfe Schlüssel und Secret deiner App.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Holen des Zugrifftokens fehlgeschlagen. Bitte überprüfe Schlüssel und Secret deiner App.",
+ "Please provide a valid app key and secret." : "Bitte verwende für deine App einen gültigen Schüssel und ein gültiges Secret.",
+ "Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Exception: %s",
+ "Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Exception: %s",
+ "External storage" : "Externer Speicher",
+ "Storage with id \"%i\" not found" : "Speicher mit der ID \"%i\" wurde nicht gefunden",
+ "Invalid backend or authentication mechanism class" : "Ungültige Klasse für das Backend oder für den Authentifizierungsmechanismus",
+ "Invalid mount point" : "Ungültiger Einhängepunkt",
+ "Objectstore forbidden" : "Objectstore nicht erlaubt",
+ "Invalid storage backend \"%s\"" : "Ungültiges Speicherbackend \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Verwendung des Backends \"%s\" nicht erlaubt",
+ "Not permitted to use authentication mechanism \"%s\"" : "Verwendung des Authentifizierungsmechanismus \"%s\" nicht erlaubt",
+ "Unsatisfied backend parameters" : "Nicht bediente Backendparameter",
+ "Unsatisfied authentication mechanism parameters" : "Nicht bediente Authentifizierungsmechanismusparamter",
+ "Personal" : "Persönlich",
+ "System" : "System",
+ "Grant access" : "Erlaube Zugriff",
+ "Access granted" : "Zugriff erlaubt",
+ "Error configuring OAuth1" : "Fehler bei der Konfiguration von OAuth1",
+ "Error configuring OAuth2" : "Fehler bei der Konfiguration von OAuth2",
+ "Generate keys" : "Generiere Schlüssel",
+ "Error generating key pair" : "Fehler beim Generieren des Schlüsselpaars",
+ "Enable encryption" : "Verschlüsselung aktivieren",
+ "Enable previews" : "Vorschau aktivieren",
+ "Check for changes" : "Auf Änderungen prüfen",
+ "Never" : "Nie",
+ "Once every direct access" : "Einmal bei jedem direkten Zugriff",
+ "Every time the filesystem is used" : "Bei jeder Verwendung des Dateisystems",
+ "All users. Type to select user or group." : "Alle Benutzer. Tippe, um eine Benutzergruppe auszuwählen.",
+ "(group)" : "(Gruppe)",
+ "Saved" : "Gespeichert",
+ "Access key" : "Schlüssel für Zugriff",
+ "Secret key" : "Geheimer Schlüssel",
+ "Builtin" : "Eingebaut",
+ "None" : "Keine(r)",
+ "OAuth1" : "OAuth1",
+ "App key" : "App Schlüssel",
+ "App secret" : "App Secret",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Client ID",
+ "Client secret" : "Client Geheimnis",
+ "OpenStack" : "OpenStack",
+ "Username" : "Benutzername",
+ "Password" : "Passwort",
+ "API key" : "API Schlüssel",
+ "Username and password" : "Benutzername und Passwort",
+ "Session credentials" : "Anmeldedaten der Sitzung",
+ "RSA public key" : "Öffentlicher RSA Schlüssel",
+ "Public key" : "Öffentlicher Schlüssel",
+ "Amazon S3" : "Amazon S3",
+ "Hostname" : "Hostname",
+ "Port" : "Port",
+ "Region" : "Region",
+ "Enable SSL" : "SSL aktivieren",
+ "Enable Path Style" : "Path Style aktivieren",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Entfernter Unterordner",
+ "Secure https://" : "Sicheres https://",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
+ "Host" : "Host",
+ "Secure ftps://" : "Sicheres fpts://",
+ "Google Drive" : "Google Drive",
+ "Local" : "Lokal",
+ "Location" : "Ort",
+ "ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
+ "Root" : "Root",
+ "SFTP with secret key login" : "SFTP mit Anmeldung über geheimen Schlüssel",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Teilen",
+ "Domain" : "Domäne",
+ "SMB / CIFS using OC login" : "SMB / DIFS mit OC Anmeldung",
+ "Username as share" : "Benutzername als Freigabe",
+ "Service name" : "Name des Dienstes",
+ "Request timeout (seconds)" : "Zeitüberschreitung der Anfrage (Sekunden)",
+ "<b>Note:</b> " : "<b>Notiz:</b>",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Notiz:</b> Die cURL-Unterstützung ist in PHP nicht aktiviert oder nicht installiert, deshalb ist das Einhängen von %s nicht möglich. Bitte deinen Administrator diese zu installieren.",
+ "<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>Notiz:</b> Die FTP-Unterstützung ist in PHP nicht aktiviert oder nicht installiert, deshalb ist das Einhängen von %s nicht möglich. Bitte deinen Administrator diese zu installieren.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Notiz:</b> \"%s\" ist nicht installiert, deshalb ist das Einhängen von %s nicht möglich. Bitte deinen Administrator diese zu installieren.",
+ "No external storage configured" : "Kein externer Speicher konfiguriert",
+ "You can add external storages in the personal settings" : "Du kannst externe Speicher in deinen persönlichen Einstellungen hinzufügen",
+ "Name" : "Name",
+ "Storage type" : "Speicherart",
+ "Scope" : "Bereich",
+ "External Storage" : "Externer Speicher",
+ "Folder name" : "Ordnername",
+ "Authentication" : "Authentifizierung",
+ "Configuration" : "Konfiguration",
+ "Available for" : "Verfügbar für",
+ "Advanced settings" : "Erweiterte Einstellungen",
+ "Delete" : "Löschen",
+ "Add storage" : "Speicher hinzufügen",
+ "Enable User External Storage" : "Externen Speicher für Nutzer aktivieren",
+ "Allow users to mount the following external storage" : "Erlaube Benutzern folgenden externen Speicher einzuhängen"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/nds.json b/apps/files_external/l10n/nds.json
new file mode 100644
index 00000000000..b7c196ef64c
--- /dev/null
+++ b/apps/files_external/l10n/nds.json
@@ -0,0 +1,100 @@
+{ "translations": {
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Holen des Requesttokens fehlgeschlagen. Bitte überprüfe Schlüssel und Secret deiner App.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Holen des Zugrifftokens fehlgeschlagen. Bitte überprüfe Schlüssel und Secret deiner App.",
+ "Please provide a valid app key and secret." : "Bitte verwende für deine App einen gültigen Schüssel und ein gültiges Secret.",
+ "Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Exception: %s",
+ "Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Exception: %s",
+ "External storage" : "Externer Speicher",
+ "Storage with id \"%i\" not found" : "Speicher mit der ID \"%i\" wurde nicht gefunden",
+ "Invalid backend or authentication mechanism class" : "Ungültige Klasse für das Backend oder für den Authentifizierungsmechanismus",
+ "Invalid mount point" : "Ungültiger Einhängepunkt",
+ "Objectstore forbidden" : "Objectstore nicht erlaubt",
+ "Invalid storage backend \"%s\"" : "Ungültiges Speicherbackend \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Verwendung des Backends \"%s\" nicht erlaubt",
+ "Not permitted to use authentication mechanism \"%s\"" : "Verwendung des Authentifizierungsmechanismus \"%s\" nicht erlaubt",
+ "Unsatisfied backend parameters" : "Nicht bediente Backendparameter",
+ "Unsatisfied authentication mechanism parameters" : "Nicht bediente Authentifizierungsmechanismusparamter",
+ "Personal" : "Persönlich",
+ "System" : "System",
+ "Grant access" : "Erlaube Zugriff",
+ "Access granted" : "Zugriff erlaubt",
+ "Error configuring OAuth1" : "Fehler bei der Konfiguration von OAuth1",
+ "Error configuring OAuth2" : "Fehler bei der Konfiguration von OAuth2",
+ "Generate keys" : "Generiere Schlüssel",
+ "Error generating key pair" : "Fehler beim Generieren des Schlüsselpaars",
+ "Enable encryption" : "Verschlüsselung aktivieren",
+ "Enable previews" : "Vorschau aktivieren",
+ "Check for changes" : "Auf Änderungen prüfen",
+ "Never" : "Nie",
+ "Once every direct access" : "Einmal bei jedem direkten Zugriff",
+ "Every time the filesystem is used" : "Bei jeder Verwendung des Dateisystems",
+ "All users. Type to select user or group." : "Alle Benutzer. Tippe, um eine Benutzergruppe auszuwählen.",
+ "(group)" : "(Gruppe)",
+ "Saved" : "Gespeichert",
+ "Access key" : "Schlüssel für Zugriff",
+ "Secret key" : "Geheimer Schlüssel",
+ "Builtin" : "Eingebaut",
+ "None" : "Keine(r)",
+ "OAuth1" : "OAuth1",
+ "App key" : "App Schlüssel",
+ "App secret" : "App Secret",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Client ID",
+ "Client secret" : "Client Geheimnis",
+ "OpenStack" : "OpenStack",
+ "Username" : "Benutzername",
+ "Password" : "Passwort",
+ "API key" : "API Schlüssel",
+ "Username and password" : "Benutzername und Passwort",
+ "Session credentials" : "Anmeldedaten der Sitzung",
+ "RSA public key" : "Öffentlicher RSA Schlüssel",
+ "Public key" : "Öffentlicher Schlüssel",
+ "Amazon S3" : "Amazon S3",
+ "Hostname" : "Hostname",
+ "Port" : "Port",
+ "Region" : "Region",
+ "Enable SSL" : "SSL aktivieren",
+ "Enable Path Style" : "Path Style aktivieren",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Entfernter Unterordner",
+ "Secure https://" : "Sicheres https://",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
+ "Host" : "Host",
+ "Secure ftps://" : "Sicheres fpts://",
+ "Google Drive" : "Google Drive",
+ "Local" : "Lokal",
+ "Location" : "Ort",
+ "ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
+ "Root" : "Root",
+ "SFTP with secret key login" : "SFTP mit Anmeldung über geheimen Schlüssel",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Teilen",
+ "Domain" : "Domäne",
+ "SMB / CIFS using OC login" : "SMB / DIFS mit OC Anmeldung",
+ "Username as share" : "Benutzername als Freigabe",
+ "Service name" : "Name des Dienstes",
+ "Request timeout (seconds)" : "Zeitüberschreitung der Anfrage (Sekunden)",
+ "<b>Note:</b> " : "<b>Notiz:</b>",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Notiz:</b> Die cURL-Unterstützung ist in PHP nicht aktiviert oder nicht installiert, deshalb ist das Einhängen von %s nicht möglich. Bitte deinen Administrator diese zu installieren.",
+ "<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>Notiz:</b> Die FTP-Unterstützung ist in PHP nicht aktiviert oder nicht installiert, deshalb ist das Einhängen von %s nicht möglich. Bitte deinen Administrator diese zu installieren.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Notiz:</b> \"%s\" ist nicht installiert, deshalb ist das Einhängen von %s nicht möglich. Bitte deinen Administrator diese zu installieren.",
+ "No external storage configured" : "Kein externer Speicher konfiguriert",
+ "You can add external storages in the personal settings" : "Du kannst externe Speicher in deinen persönlichen Einstellungen hinzufügen",
+ "Name" : "Name",
+ "Storage type" : "Speicherart",
+ "Scope" : "Bereich",
+ "External Storage" : "Externer Speicher",
+ "Folder name" : "Ordnername",
+ "Authentication" : "Authentifizierung",
+ "Configuration" : "Konfiguration",
+ "Available for" : "Verfügbar für",
+ "Advanced settings" : "Erweiterte Einstellungen",
+ "Delete" : "Löschen",
+ "Add storage" : "Speicher hinzufügen",
+ "Enable User External Storage" : "Externen Speicher für Nutzer aktivieren",
+ "Allow users to mount the following external storage" : "Erlaube Benutzern folgenden externen Speicher einzuhängen"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js
index e4415e2e2b3..7e4bfc18730 100644
--- a/apps/files_external/l10n/ru.js
+++ b/apps/files_external/l10n/ru.js
@@ -1,16 +1,27 @@
OC.L10N.register(
"files_external",
{
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Ошибка получения токенов запроса. Проверьте корректность ключа и секрета приложения.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Ошибка получения токенов доступа. Проверьте корректность ключа и секрета приложения.",
+ "Please provide a valid app key and secret." : "Пожалуйста укажите корректные ключ и секрет приложения.",
"Step 1 failed. Exception: %s" : "Шаг 1 неудачен. Исключение: %s",
"Step 2 failed. Exception: %s" : "Шаг 2 неудачен. Исключение: %s",
"External storage" : "Внешнее хранилище",
"Storage with id \"%i\" not found" : "Хранилище с идентификатором \"%i\" не найдено",
+ "Invalid backend or authentication mechanism class" : "Некорректный механизм авторизации или бэкенд",
"Invalid mount point" : "Неправильная точка входа",
+ "Objectstore forbidden" : "Хранение объектов запрещено",
"Invalid storage backend \"%s\"" : "Неверный бэкенд хранилища \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Не допускается использование бэкенда \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Не допускается использование механизма авторизации \"%s\"",
+ "Unsatisfied backend parameters" : "Недопустимые настройки бэкенда",
+ "Unsatisfied authentication mechanism parameters" : "Недопустимые настройки механизма авторизации",
"Personal" : "Личное",
"System" : "Система",
"Grant access" : "Предоставить доступ",
"Access granted" : "Доступ предоставлен",
+ "Error configuring OAuth1" : "Ошибка настройки OAuth1",
+ "Error configuring OAuth2" : "Ошибка настройки OAuth2",
"Generate keys" : "Создать ключи",
"Error generating key pair" : "Ошибка создания ключевой пары",
"Enable encryption" : "Включить шифрование",
@@ -22,14 +33,26 @@ OC.L10N.register(
"All users. Type to select user or group." : "Все пользователи. Введите имя пользователя или группы.",
"(group)" : "(группа)",
"Saved" : "Сохранено",
+ "Access key" : "Ключ доступа",
+ "Secret key" : "Секретный ключ",
+ "Builtin" : "Встроенный",
"None" : "Отсутствует",
+ "OAuth1" : "OAuth1",
"App key" : "Ключ приложения",
"App secret" : "Секретный ключ ",
+ "OAuth2" : "OAuth2",
"Client ID" : "Идентификатор клиента",
"Client secret" : "Клиентский ключ ",
+ "OpenStack" : "OpenStack",
"Username" : "Имя пользователя",
"Password" : "Пароль",
+ "Tenant name" : "Имя арендатора",
+ "Identity endpoint URL" : "Удостоверение конечной точки URL",
+ "Rackspace" : "Rackspace",
"API key" : "Ключ API",
+ "Username and password" : "Имя пользователя и пароль",
+ "Session credentials" : "Учетные данные сессии",
+ "RSA public key" : "Открытый ключ RSA",
"Public key" : "Открытый ключ",
"Amazon S3" : "Amazon S3",
"Bucket" : "Корзина",
@@ -43,17 +66,24 @@ OC.L10N.register(
"Remote subfolder" : "Удаленный подкаталог",
"Secure https://" : "Безопасный https://",
"Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "Сервер",
"Secure ftps://" : "Защищённый ftps://",
+ "Google Drive" : "Google Drive",
"Local" : "Локально",
"Location" : "Местоположение",
"ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
"Root" : "Корневой каталог",
"SFTP with secret key login" : "SFTP с помощью секретного ключа",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "Общий доступ",
+ "Domain" : "Домен",
"SMB / CIFS using OC login" : "SMB / CIFS с ипользованием логина OC",
"Username as share" : "Имя пользователя в качестве имени общего ресурса",
"OpenStack Object Storage" : "Хранилище объектов OpenStack",
+ "Service name" : "Название сервиса",
+ "Request timeout (seconds)" : "Таймаут запроса (секунды)",
"<b>Note:</b> " : "<b>Примечание:</b> ",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
@@ -65,6 +95,7 @@ OC.L10N.register(
"Scope" : "Область",
"External Storage" : "Внешнее хранилище",
"Folder name" : "Имя каталога",
+ "Authentication" : "Авторизация",
"Configuration" : "Конфигурация",
"Available for" : "Доступно для",
"Advanced settings" : "Расширенные настройки",
diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json
index 1ea452f5408..50754b309ec 100644
--- a/apps/files_external/l10n/ru.json
+++ b/apps/files_external/l10n/ru.json
@@ -1,14 +1,25 @@
{ "translations": {
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Ошибка получения токенов запроса. Проверьте корректность ключа и секрета приложения.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Ошибка получения токенов доступа. Проверьте корректность ключа и секрета приложения.",
+ "Please provide a valid app key and secret." : "Пожалуйста укажите корректные ключ и секрет приложения.",
"Step 1 failed. Exception: %s" : "Шаг 1 неудачен. Исключение: %s",
"Step 2 failed. Exception: %s" : "Шаг 2 неудачен. Исключение: %s",
"External storage" : "Внешнее хранилище",
"Storage with id \"%i\" not found" : "Хранилище с идентификатором \"%i\" не найдено",
+ "Invalid backend or authentication mechanism class" : "Некорректный механизм авторизации или бэкенд",
"Invalid mount point" : "Неправильная точка входа",
+ "Objectstore forbidden" : "Хранение объектов запрещено",
"Invalid storage backend \"%s\"" : "Неверный бэкенд хранилища \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Не допускается использование бэкенда \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Не допускается использование механизма авторизации \"%s\"",
+ "Unsatisfied backend parameters" : "Недопустимые настройки бэкенда",
+ "Unsatisfied authentication mechanism parameters" : "Недопустимые настройки механизма авторизации",
"Personal" : "Личное",
"System" : "Система",
"Grant access" : "Предоставить доступ",
"Access granted" : "Доступ предоставлен",
+ "Error configuring OAuth1" : "Ошибка настройки OAuth1",
+ "Error configuring OAuth2" : "Ошибка настройки OAuth2",
"Generate keys" : "Создать ключи",
"Error generating key pair" : "Ошибка создания ключевой пары",
"Enable encryption" : "Включить шифрование",
@@ -20,14 +31,26 @@
"All users. Type to select user or group." : "Все пользователи. Введите имя пользователя или группы.",
"(group)" : "(группа)",
"Saved" : "Сохранено",
+ "Access key" : "Ключ доступа",
+ "Secret key" : "Секретный ключ",
+ "Builtin" : "Встроенный",
"None" : "Отсутствует",
+ "OAuth1" : "OAuth1",
"App key" : "Ключ приложения",
"App secret" : "Секретный ключ ",
+ "OAuth2" : "OAuth2",
"Client ID" : "Идентификатор клиента",
"Client secret" : "Клиентский ключ ",
+ "OpenStack" : "OpenStack",
"Username" : "Имя пользователя",
"Password" : "Пароль",
+ "Tenant name" : "Имя арендатора",
+ "Identity endpoint URL" : "Удостоверение конечной точки URL",
+ "Rackspace" : "Rackspace",
"API key" : "Ключ API",
+ "Username and password" : "Имя пользователя и пароль",
+ "Session credentials" : "Учетные данные сессии",
+ "RSA public key" : "Открытый ключ RSA",
"Public key" : "Открытый ключ",
"Amazon S3" : "Amazon S3",
"Bucket" : "Корзина",
@@ -41,17 +64,24 @@
"Remote subfolder" : "Удаленный подкаталог",
"Secure https://" : "Безопасный https://",
"Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "Сервер",
"Secure ftps://" : "Защищённый ftps://",
+ "Google Drive" : "Google Drive",
"Local" : "Локально",
"Location" : "Местоположение",
"ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
"Root" : "Корневой каталог",
"SFTP with secret key login" : "SFTP с помощью секретного ключа",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "Общий доступ",
+ "Domain" : "Домен",
"SMB / CIFS using OC login" : "SMB / CIFS с ипользованием логина OC",
"Username as share" : "Имя пользователя в качестве имени общего ресурса",
"OpenStack Object Storage" : "Хранилище объектов OpenStack",
+ "Service name" : "Название сервиса",
+ "Request timeout (seconds)" : "Таймаут запроса (секунды)",
"<b>Note:</b> " : "<b>Примечание:</b> ",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
@@ -63,6 +93,7 @@
"Scope" : "Область",
"External Storage" : "Внешнее хранилище",
"Folder name" : "Имя каталога",
+ "Authentication" : "Авторизация",
"Configuration" : "Конфигурация",
"Available for" : "Доступно для",
"Advanced settings" : "Расширенные настройки",
diff --git a/apps/files_external/service/storagesservice.php b/apps/files_external/service/storagesservice.php
index d5260a066cd..41bb0ca9b80 100644
--- a/apps/files_external/service/storagesservice.php
+++ b/apps/files_external/service/storagesservice.php
@@ -550,6 +550,21 @@ abstract class StoragesService {
$this->writeConfig($allStorages);
$this->triggerHooks($deletedStorage, Filesystem::signal_delete_mount);
+
+ // delete oc_storages entries and oc_filecache
+ try {
+ $rustyStorageId = $this->getRustyStorageIdFromConfig($deletedStorage);
+ \OC\Files\Cache\Storage::remove($rustyStorageId);
+ } catch (\Exception $e) {
+ // can happen either for invalid configs where the storage could not
+ // be instantiated or whenever $user vars where used, in which case
+ // the storage id could not be computed
+ \OCP\Util::writeLog(
+ 'files_external',
+ 'Exception: "' . $e->getMessage() . '"',
+ \OCP\Util::ERROR
+ );
+ }
}
/**
@@ -570,4 +585,30 @@ abstract class StoragesService {
return (max(array_keys($allStorages)) + 1);
}
+ /**
+ * Returns the rusty storage id from oc_storages from the given storage config.
+ *
+ * @param StorageConfig $storageConfig
+ * @return string rusty storage id
+ */
+ private function getRustyStorageIdFromConfig(StorageConfig $storageConfig) {
+ // if any of the storage options contains $user, it is not possible
+ // to compute the possible storage id as we don't know which users
+ // mounted it already (and we certainly don't want to iterate over ALL users)
+ foreach ($storageConfig->getBackendOptions() as $value) {
+ if (strpos($value, '$user') !== false) {
+ throw new \Exception('Cannot compute storage id for deletion due to $user vars in the configuration');
+ }
+ }
+
+ // note: similar to ConfigAdapter->prepateStorageConfig()
+ $storageConfig->getAuthMechanism()->manipulateStorageConfig($storageConfig);
+ $storageConfig->getBackend()->manipulateStorageConfig($storageConfig);
+
+ $class = $storageConfig->getBackend()->getStorageClass();
+ $storageImpl = new $class($storageConfig->getBackendOptions());
+
+ return $storageImpl->getId();
+ }
+
}
diff --git a/apps/files_external/tests/service/storagesservicetest.php b/apps/files_external/tests/service/storagesservicetest.php
index 1bec543ff4c..7487ba459af 100644
--- a/apps/files_external/tests/service/storagesservicetest.php
+++ b/apps/files_external/tests/service/storagesservicetest.php
@@ -216,18 +216,57 @@ abstract class StoragesServiceTest extends \Test\TestCase {
$this->service->updateStorage($storage);
}
- public function testDeleteStorage() {
+ public function deleteStorageDataProvider() {
+ return [
+ // regular case, can properly delete the oc_storages entry
+ [
+ [
+ 'share' => 'share',
+ 'host' => 'example.com',
+ 'user' => 'test',
+ 'password' => 'testPassword',
+ 'root' => 'someroot',
+ ],
+ 'smb::test@example.com//share//someroot/',
+ 0
+ ],
+ // special case with $user vars, cannot auto-remove the oc_storages entry
+ [
+ [
+ 'share' => 'share',
+ 'host' => 'example.com',
+ 'user' => '$user',
+ 'password' => 'testPassword',
+ 'root' => 'someroot',
+ ],
+ 'smb::someone@example.com//share//someroot/',
+ 1
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider deleteStorageDataProvider
+ */
+ public function testDeleteStorage($backendOptions, $rustyStorageId, $expectedCountAfterDeletion) {
$backend = $this->backendService->getBackend('identifier:\OCA\Files_External\Lib\Backend\SMB');
$authMechanism = $this->backendService->getAuthMechanism('identifier:\Auth\Mechanism');
$storage = new StorageConfig(255);
$storage->setMountPoint('mountpoint');
$storage->setBackend($backend);
$storage->setAuthMechanism($authMechanism);
- $storage->setBackendOptions(['password' => 'testPassword']);
+ $storage->setBackendOptions($backendOptions);
$newStorage = $this->service->addStorage($storage);
$this->assertEquals(1, $newStorage->getId());
+ // manually trigger storage entry because normally it happens on first
+ // access, which isn't possible within this test
+ $storageCache = new \OC\Files\Cache\Storage($rustyStorageId);
+
+ // get numeric id for later check
+ $numericId = $storageCache->getNumericId();
+
$newStorage = $this->service->removeStorage(1);
$caught = false;
@@ -238,6 +277,13 @@ abstract class StoragesServiceTest extends \Test\TestCase {
}
$this->assertTrue($caught);
+
+ // storage id was removed from oc_storages
+ $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $storageCheckQuery = $qb->select('*')
+ ->from('storages')
+ ->where($qb->expr()->eq('numeric_id', $qb->expr()->literal($numericId)));
+ $this->assertCount($expectedCountAfterDeletion, $storageCheckQuery->execute()->fetchAll());
}
/**
diff --git a/apps/files_external/tests/service/userstoragesservicetest.php b/apps/files_external/tests/service/userstoragesservicetest.php
index f829f73f050..78f9231c3d1 100644
--- a/apps/files_external/tests/service/userstoragesservicetest.php
+++ b/apps/files_external/tests/service/userstoragesservicetest.php
@@ -138,8 +138,11 @@ class UserStoragesServiceTest extends StoragesServiceTest {
$this->assertEmpty(self::$hookCalls);
}
- public function testDeleteStorage() {
- parent::testDeleteStorage();
+ /**
+ * @dataProvider deleteStorageDataProvider
+ */
+ public function testDeleteStorage($backendOptions, $rustyStorageId, $expectedCountAfterDeletion) {
+ parent::testDeleteStorage($backendOptions, $rustyStorageId, $expectedCountAfterDeletion);
// hook called once for user (first one was during test creation)
$this->assertHookCall(
diff --git a/apps/files_sharing/appinfo/application.php b/apps/files_sharing/appinfo/application.php
index 10e3fdae982..9dc0e0618b5 100644
--- a/apps/files_sharing/appinfo/application.php
+++ b/apps/files_sharing/appinfo/application.php
@@ -27,6 +27,7 @@ namespace OCA\Files_Sharing\AppInfo;
use OCA\Files_Sharing\Helper;
use OCA\Files_Sharing\MountProvider;
use OCA\Files_Sharing\Propagation\PropagationManager;
+use OCA\Files_Sharing\Propagation\GroupPropagationManager;
use OCP\AppFramework\App;
use OC\AppFramework\Utility\SimpleContainer;
use OCA\Files_Sharing\Controllers\ExternalSharesController;
@@ -119,6 +120,17 @@ class Application extends App {
);
});
+ $container->registerService('ExternalMountProvider', function (IContainer $c) {
+ /** @var \OCP\IServerContainer $server */
+ $server = $c->query('ServerContainer');
+ return new \OCA\Files_Sharing\External\MountProvider(
+ $server->getDatabaseConnection(),
+ function() use ($c) {
+ return $c->query('ExternalManager');
+ }
+ );
+ });
+
$container->registerService('PropagationManager', function (IContainer $c) {
/** @var \OCP\IServerContainer $server */
$server = $c->query('ServerContainer');
@@ -128,6 +140,16 @@ class Application extends App {
);
});
+ $container->registerService('GroupPropagationManager', function (IContainer $c) {
+ /** @var \OCP\IServerContainer $server */
+ $server = $c->query('ServerContainer');
+ return new GroupPropagationManager(
+ $server->getUserSession(),
+ $server->getGroupManager(),
+ $c->query('PropagationManager')
+ );
+ });
+
/*
* Register capabilities
*/
@@ -139,10 +161,13 @@ class Application extends App {
$server = $this->getContainer()->query('ServerContainer');
$mountProviderCollection = $server->getMountProviderCollection();
$mountProviderCollection->registerProvider($this->getContainer()->query('MountProvider'));
+ $mountProviderCollection->registerProvider($this->getContainer()->query('ExternalMountProvider'));
}
public function setupPropagation() {
$propagationManager = $this->getContainer()->query('PropagationManager');
\OCP\Util::connectHook('OC_Filesystem', 'setup', $propagationManager, 'globalSetup');
+
+ $this->getContainer()->query('GroupPropagationManager')->globalSetup();
}
}
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
index 2b7e84c987d..bd8e98e966d 100644
--- a/apps/files_sharing/css/public.css
+++ b/apps/files_sharing/css/public.css
@@ -1,8 +1,12 @@
+#content {
+ height: initial;
+ min-height: calc(100vh - 120px);
+ overflow: hidden;
+}
+
#preview {
background: #fff;
text-align: center;
- margin: 45px auto 0;
- min-height: 200px;
}
#preview .notCreatable {
diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index be924134ae2..7c52f1c21ff 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
"%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
"You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "Downloaded via public link" : "Staženo pomocí veřejného odkazu",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
"Shares" : "Sdílení",
"Accept" : "Přijmout",
"Decline" : "Zamítnout",
diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json
index a889bbc1235..0e139f7bbf5 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
"%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
"You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "Downloaded via public link" : "Staženo pomocí veřejného odkazu",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
"Shares" : "Sdílení",
"Accept" : "Přijmout",
"Decline" : "Zamítnout",
diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js
index 6f71bdc2832..e4024492b65 100644
--- a/apps/files_sharing/l10n/el.js
+++ b/apps/files_sharing/l10n/el.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "Ο %2$s διαμοιράστηκε το %1$s μέσω συνδέσμου",
"%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς",
"You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου",
+ "Downloaded via public link" : "Μεταφορτώθηκε μέσω δημόσιου συνδέσμου",
+ "Shared with %2$s" : "Διαμοιράστηκε με %2$s",
+ "Shared with group %2$s" : "Διαμοιράστηκε με την ομάδα %2$s",
+ "Shared with %3$s by %2$s" : "Διαμοιράστηκε με %3$s από %2$s",
+ "Shared with group %3$s by %2$s" : "Διαμοιράστηκε με την ομάδα %3$s από %2$s",
+ "Shared via link by %2$s" : "Διαμοιράστηκε μέσω συνδέσμου από %2$s",
+ "Shared by %2$s" : "Διαμοιράστηκε από %2$s",
+ "Shared via public link" : "Διαμοιράστηκε μέσω δημόσιου συνδέσμου",
"Shares" : "Κοινόχρηστοι φάκελοι",
"You received %2$s as a remote share from %1$s" : "Λάβατε το %2$s ως απομακρυσμένο διαμοιρασμό από %1$s",
"Accept" : "Αποδοχή",
diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json
index c1bdc039f9d..7bf5c00841e 100644
--- a/apps/files_sharing/l10n/el.json
+++ b/apps/files_sharing/l10n/el.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "Ο %2$s διαμοιράστηκε το %1$s μέσω συνδέσμου",
"%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς",
"You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου",
+ "Downloaded via public link" : "Μεταφορτώθηκε μέσω δημόσιου συνδέσμου",
+ "Shared with %2$s" : "Διαμοιράστηκε με %2$s",
+ "Shared with group %2$s" : "Διαμοιράστηκε με την ομάδα %2$s",
+ "Shared with %3$s by %2$s" : "Διαμοιράστηκε με %3$s από %2$s",
+ "Shared with group %3$s by %2$s" : "Διαμοιράστηκε με την ομάδα %3$s από %2$s",
+ "Shared via link by %2$s" : "Διαμοιράστηκε μέσω συνδέσμου από %2$s",
+ "Shared by %2$s" : "Διαμοιράστηκε από %2$s",
+ "Shared via public link" : "Διαμοιράστηκε μέσω δημόσιου συνδέσμου",
"Shares" : "Κοινόχρηστοι φάκελοι",
"You received %2$s as a remote share from %1$s" : "Λάβατε το %2$s ως απομακρυσμένο διαμοιρασμό από %1$s",
"Accept" : "Αποδοχή",
diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js
index 29cd5818d40..cd915b79a17 100644
--- a/apps/files_sharing/l10n/fa.js
+++ b/apps/files_sharing/l10n/fa.js
@@ -3,18 +3,22 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "اشتراک سرور به سرور در این سرور فعال نیست .",
"Invalid or untrusted SSL certificate" : "گواهینامه SSL غیر قابل اعتماد یا غیر معتبر است.",
+ "Could not authenticate to remote share, password might be wrong" : "احرازهویت برای اشتراک‌گذاری راه‌دور انجام نشد، احتمالا رمزعبور نادرست است",
"Storage not valid" : "فضای ذخیره‌سازی معتبر نیست",
"Couldn't add remote share" : "امکان افزودن اشتراک گذاری از راه دور وجود ندارد",
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
+ "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است",
"Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است",
"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" : "رمز عبور اشتراک از راه دور",
"Cancel" : "منصرف شدن",
"Add remote share" : "افزودن اشتراک از راه دور",
+ "You can upload into this folder" : "می‌توانید در این پوشه آپلود کنید",
"Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است",
"Shared by" : "اشتراک گذاشته شده به وسیله",
"Sharing" : "اشتراک گذاری",
diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json
index 64d03e5186a..a345d9f1401 100644
--- a/apps/files_sharing/l10n/fa.json
+++ b/apps/files_sharing/l10n/fa.json
@@ -1,18 +1,22 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "اشتراک سرور به سرور در این سرور فعال نیست .",
"Invalid or untrusted SSL certificate" : "گواهینامه SSL غیر قابل اعتماد یا غیر معتبر است.",
+ "Could not authenticate to remote share, password might be wrong" : "احرازهویت برای اشتراک‌گذاری راه‌دور انجام نشد، احتمالا رمزعبور نادرست است",
"Storage not valid" : "فضای ذخیره‌سازی معتبر نیست",
"Couldn't add remote share" : "امکان افزودن اشتراک گذاری از راه دور وجود ندارد",
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
+ "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است",
"Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است",
"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" : "رمز عبور اشتراک از راه دور",
"Cancel" : "منصرف شدن",
"Add remote share" : "افزودن اشتراک از راه دور",
+ "You can upload into this folder" : "می‌توانید در این پوشه آپلود کنید",
"Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است",
"Shared by" : "اشتراک گذاشته شده به وسیله",
"Sharing" : "اشتراک گذاری",
diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js
index 7b85e236b44..c0d2d01b2c4 100644
--- a/apps/files_sharing/l10n/hu_HU.js
+++ b/apps/files_sharing/l10n/hu_HU.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "Shared with %2$s" : "Megosztva vele: %2$s",
+ "Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
+ "Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
+ "Shared by %2$s" : "Megosztó: %2$s",
+ "Shared via public link" : "Megosztva publikus hivatkozással",
"Shares" : "Megosztások",
"You received %2$s as a remote share from %1$s" : "Kaptál egy távoli megosztást: %2$s, innen: %1$s",
"Accept" : "Elfogadás",
diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json
index c749a5add97..a2e15c46c52 100644
--- a/apps/files_sharing/l10n/hu_HU.json
+++ b/apps/files_sharing/l10n/hu_HU.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "Shared with %2$s" : "Megosztva vele: %2$s",
+ "Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
+ "Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
+ "Shared by %2$s" : "Megosztó: %2$s",
+ "Shared via public link" : "Megosztva publikus hivatkozással",
"Shares" : "Megosztások",
"You received %2$s as a remote share from %1$s" : "Kaptál egy távoli megosztást: %2$s, innen: %1$s",
"Accept" : "Elfogadás",
diff --git a/apps/files_sharing/l10n/nds.js b/apps/files_sharing/l10n/nds.js
new file mode 100644
index 00000000000..e263ab143a8
--- /dev/null
+++ b/apps/files_sharing/l10n/nds.js
@@ -0,0 +1,8 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Cancel" : "Abbrechen",
+ "Password" : "Passwort",
+ "Name" : "Name"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nds.json b/apps/files_sharing/l10n/nds.json
new file mode 100644
index 00000000000..15e6870cb0e
--- /dev/null
+++ b/apps/files_sharing/l10n/nds.json
@@ -0,0 +1,6 @@
+{ "translations": {
+ "Cancel" : "Abbrechen",
+ "Password" : "Passwort",
+ "Name" : "Name"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 2d89b5e3102..1a84d10ecea 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -38,10 +38,23 @@ OC.L10N.register(
"Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
"You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
"You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s",
+ "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
+ "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
"%2$s shared %1$s with you" : "%2$s поделился с вами %1$s",
"You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
+ "Downloaded via public link" : "Загружено по открытой ссылке",
+ "Shared with %2$s" : "Поделился с %2$s",
+ "Shared with group %2$s" : "Поделился с группой %2$s",
+ "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
+ "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
+ "Shared via link by %2$s" : "Поделился ссылкой %2$s",
+ "Shared by %2$s" : "Поделился %2$s",
+ "Shared via public link" : "Поделился открытой ссылкой",
"Shares" : "События обмена файлами",
+ "You received %2$s as a remote share from %1$s" : "Вы получили %2$s через удаленный общий ресурс %1$s",
"Accept" : "Принять",
+ "Decline" : "Отклонить",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ, смотрите %s",
"Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ",
"This share is password-protected" : "Общий ресурс защищен паролем",
@@ -67,6 +80,7 @@ OC.L10N.register(
"Federated Cloud" : "Объединение облачных хранилищ",
"Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
"Share it:" : "Поделись этим:",
+ "Add to your website" : "Добавить к себе на сайт",
"Share with me via ownCloud" : "Поделитесь мной через ownCloud",
"HTML Code:" : "HTML код:"
},
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 0f7a152f536..401896709d6 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -36,10 +36,23 @@
"Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
"You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
"You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s",
+ "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
+ "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
"%2$s shared %1$s with you" : "%2$s поделился с вами %1$s",
"You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
+ "Downloaded via public link" : "Загружено по открытой ссылке",
+ "Shared with %2$s" : "Поделился с %2$s",
+ "Shared with group %2$s" : "Поделился с группой %2$s",
+ "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
+ "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
+ "Shared via link by %2$s" : "Поделился ссылкой %2$s",
+ "Shared by %2$s" : "Поделился %2$s",
+ "Shared via public link" : "Поделился открытой ссылкой",
"Shares" : "События обмена файлами",
+ "You received %2$s as a remote share from %1$s" : "Вы получили %2$s через удаленный общий ресурс %1$s",
"Accept" : "Принять",
+ "Decline" : "Отклонить",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ, смотрите %s",
"Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ",
"This share is password-protected" : "Общий ресурс защищен паролем",
@@ -65,6 +78,7 @@
"Federated Cloud" : "Объединение облачных хранилищ",
"Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
"Share it:" : "Поделись этим:",
+ "Add to your website" : "Добавить к себе на сайт",
"Share with me via ownCloud" : "Поделитесь мной через ownCloud",
"HTML Code:" : "HTML код:"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js
index a5f97c92092..bc49d1d8a48 100644
--- a/apps/files_sharing/l10n/zh_TW.js
+++ b/apps/files_sharing/l10n/zh_TW.js
@@ -35,6 +35,7 @@ OC.L10N.register(
"Add to your ownCloud" : "加入到你的 ownCloud",
"Download" : "下載",
"Download %s" : "下載 %s",
- "Direct link" : "直接連結"
+ "Direct link" : "直接連結",
+ "Federated Cloud Sharing" : "聯盟式雲端分享"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json
index 67150e495b9..3567ed51df4 100644
--- a/apps/files_sharing/l10n/zh_TW.json
+++ b/apps/files_sharing/l10n/zh_TW.json
@@ -33,6 +33,7 @@
"Add to your ownCloud" : "加入到你的 ownCloud",
"Download" : "下載",
"Download %s" : "下載 %s",
- "Direct link" : "直接連結"
+ "Direct link" : "直接連結",
+ "Federated Cloud Sharing" : "聯盟式雲端分享"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index ab6a02f94a1..86b8904cc9a 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -153,28 +153,6 @@ class Manager {
return $this->mountShare($options);
}
- private function setupMounts() {
- // don't setup server-to-server shares if the admin disabled it
- if (\OCA\Files_Sharing\Helper::isIncomingServer2serverShareEnabled() === false) {
- return false;
- }
-
- if (!is_null($this->uid)) {
- $query = $this->connection->prepare('
- SELECT `remote`, `share_token`, `password`, `mountpoint`, `owner`
- FROM `*PREFIX*share_external`
- WHERE `user` = ? AND `accepted` = ?
- ');
- $query->execute(array($this->uid, 1));
-
- while ($row = $query->fetch()) {
- $row['manager'] = $this;
- $row['token'] = $row['share_token'];
- $this->mountShare($row);
- }
- }
- }
-
/**
* get share
*
@@ -277,24 +255,6 @@ class Manager {
}
/**
- * setup the server-to-server mounts
- *
- * @param array $params
- */
- public static function setup(array $params) {
- $externalManager = new \OCA\Files_Sharing\External\Manager(
- \OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
- \OC::$server->getHTTPHelper(),
- \OC::$server->getNotificationManager(),
- $params['user']
- );
-
- $externalManager->setupMounts();
- }
-
- /**
* remove '/user/files' from the path and trailing slashes
*
* @param string $path
@@ -305,16 +265,20 @@ class Manager {
return rtrim(substr($path, strlen($prefix)), '/');
}
+ public function getMount($data) {
+ $data['manager'] = $this;
+ $mountPoint = '/' . $this->uid . '/files' . $data['mountpoint'];
+ $data['mountpoint'] = $mountPoint;
+ $data['certificateManager'] = \OC::$server->getCertificateManager($this->uid);
+ return new Mount(self::STORAGE, $mountPoint, $data, $this, $this->storageLoader);
+ }
+
/**
* @param array $data
* @return Mount
*/
protected function mountShare($data) {
- $data['manager'] = $this;
- $mountPoint = '/' . $this->uid . '/files' . $data['mountpoint'];
- $data['mountpoint'] = $mountPoint;
- $data['certificateManager'] = \OC::$server->getCertificateManager($this->uid);
- $mount = new Mount(self::STORAGE, $mountPoint, $data, $this, $this->storageLoader);
+ $mount = $this->getMount($data);
$this->mountManager->addMount($mount);
return $mount;
}
diff --git a/apps/files_sharing/lib/external/mountprovider.php b/apps/files_sharing/lib/external/mountprovider.php
new file mode 100644
index 00000000000..1739cec543f
--- /dev/null
+++ b/apps/files_sharing/lib/external/mountprovider.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_Sharing\External;
+
+use OCP\Files\Config\IMountProvider;
+use OCP\Files\Storage\IStorageFactory;
+use OCP\IDBConnection;
+use OCP\IUser;
+
+class MountProvider implements IMountProvider {
+ const STORAGE = '\OCA\Files_Sharing\External\Storage';
+
+ /**
+ * @var \OCP\IDBConnection
+ */
+ private $connection;
+
+ /**
+ * @var callable
+ */
+ private $managerProvider;
+
+ /**
+ * @param \OCP\IDBConnection $connection
+ * @param callable $managerProvider due to setup order we need a callable that return the manager instead of the manager itself
+ */
+ public function __construct(IDBConnection $connection, callable $managerProvider) {
+ $this->connection = $connection;
+ $this->managerProvider = $managerProvider;
+ }
+
+ public function getMount(IUser $user, $data, IStorageFactory $storageFactory) {
+ $data['manager'] = $this;
+ $mountPoint = '/' . $user->getUID() . '/files/' . ltrim($data['mountpoint'], '/');
+ $data['mountpoint'] = $mountPoint;
+ $data['certificateManager'] = \OC::$server->getCertificateManager($user->getUID());
+ $managerProvider = $this->managerProvider;
+ return new Mount(self::STORAGE, $mountPoint, $data, $managerProvider(), $storageFactory);
+ }
+
+ public function getMountsForUser(IUser $user, IStorageFactory $loader) {
+ $query = $this->connection->prepare('
+ SELECT `remote`, `share_token`, `password`, `mountpoint`, `owner`
+ FROM `*PREFIX*share_external`
+ WHERE `user` = ? AND `accepted` = ?
+ ');
+ $query->execute([$user->getUID(), 1]);
+ $mounts = [];
+ while ($row = $query->fetch()) {
+ $row['manager'] = $this;
+ $row['token'] = $row['share_token'];
+ $mounts[] = $this->getMount($user, $row, $loader);
+ }
+ return $mounts;
+ }
+}
diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php
index 63648b9f068..b15f70fcde3 100644
--- a/apps/files_sharing/lib/helper.php
+++ b/apps/files_sharing/lib/helper.php
@@ -31,7 +31,6 @@ namespace OCA\Files_Sharing;
class Helper {
public static function registerHooks() {
- \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OCA\Files_Sharing\External\Manager', 'setup');
\OCP\Util::connectHook('OC_Filesystem', 'delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
\OCP\Util::connectHook('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
\OCP\Util::connectHook('OC_Filesystem', 'post_delete', '\OCA\Files_Sharing\Hooks', 'unshareChildren');
diff --git a/apps/files_sharing/lib/propagation/changewatcher.php b/apps/files_sharing/lib/propagation/changewatcher.php
index 9da3ffe51a2..e61c161da19 100644
--- a/apps/files_sharing/lib/propagation/changewatcher.php
+++ b/apps/files_sharing/lib/propagation/changewatcher.php
@@ -99,4 +99,12 @@ class ChangeWatcher {
$propagator->propagateChanges();
}
}
+
+ public function permissionsHook($params) {
+ $share = $params['share'];
+
+ if ($share['item_type'] === 'file' || $share['item_type'] === 'folder') {
+ $this->recipientPropagator->markDirty($share, microtime(true));
+ }
+ }
}
diff --git a/apps/files_sharing/lib/propagation/grouppropagationmanager.php b/apps/files_sharing/lib/propagation/grouppropagationmanager.php
new file mode 100644
index 00000000000..ba550dccec3
--- /dev/null
+++ b/apps/files_sharing/lib/propagation/grouppropagationmanager.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_Sharing\Propagation;
+
+use OC\Files\Filesystem;
+use OC\Files\View;
+use OCP\IConfig;
+use OCP\IUserSession;
+use OCP\IGroup;
+use OCP\IUser;
+use OCP\IGroupManager;
+use OCA\Files_Sharing\Propagation\PropagationManager;
+
+/**
+ * Propagate changes on group changes
+ */
+class GroupPropagationManager {
+ /**
+ * @var \OCP\IUserSession
+ */
+ private $userSession;
+
+ /**
+ * @var \OCP\IGroupManager
+ */
+ private $groupManager;
+
+ /**
+ * @var PropagationManager
+ */
+ private $propagationManager;
+
+ /**
+ * Items shared with a given user.
+ * Key is user id and value is an array of shares.
+ *
+ * @var array
+ */
+ private $userShares = [];
+
+ public function __construct(IUserSession $userSession, IGroupManager $groupManager, PropagationManager $propagationManager) {
+ $this->userSession = $userSession;
+ $this->groupManager = $groupManager;
+ $this->propagationManager = $propagationManager;
+ }
+
+ public function onPreProcessUser(IGroup $group, IUser $targetUser) {
+ $this->userShares[$targetUser->getUID()] = $this->getUserShares($targetUser->getUID());
+ }
+
+ public function onPostAddUser(IGroup $group, IUser $targetUser) {
+ $targetUserId = $targetUser->getUID();
+ $sharesAfter = $this->getUserShares($targetUserId);
+
+ $this->propagateSharesDiff($targetUserId, $sharesAfter, $this->userShares[$targetUserId]);
+ unset($this->userShares[$targetUserId]);
+ }
+
+ public function onPostRemoveUser(IGroup $group, IUser $targetUser) {
+ $targetUserId = $targetUser->getUID();
+ $sharesAfter = $this->getUserShares($targetUserId);
+
+ $this->propagateSharesDiff($targetUserId, $this->userShares[$targetUserId], $sharesAfter);
+ unset($this->userShares[$targetUserId]);
+ }
+
+ private function getUserShares($targetUserId) {
+ return \OCP\Share::getItemsSharedWithUser('file', $targetUserId);
+ }
+
+ /**
+ * Propagate etag for the shares that are in $shares1 but not in $shares2.
+ *
+ * @param string $targetUserId user id for which to propagate shares
+ * @param array $shares1
+ * @param array $shares2
+ */
+ private function propagateSharesDiff($targetUserId, $shares1, $shares2) {
+ $sharesToPropagate = array_udiff(
+ $shares1,
+ $shares2,
+ function($share1, $share2) {
+ return ($share2['id'] - $share1['id']);
+ }
+ );
+
+ \OC\Files\Filesystem::initMountPoints($targetUserId);
+ $this->propagationManager->propagateSharesToUser($sharesToPropagate, $targetUserId);
+ }
+
+ /**
+ * To be called from setupFS trough a hook
+ *
+ * Sets up listening to changes made to shares owned by the current user
+ */
+ public function globalSetup() {
+ $user = $this->userSession->getUser();
+ if (!$user) {
+ return;
+ }
+
+ $this->groupManager->listen('\OC\Group', 'preAddUser', [$this, 'onPreProcessUser']);
+ $this->groupManager->listen('\OC\Group', 'postAddUser', [$this, 'onPostAddUser']);
+ $this->groupManager->listen('\OC\Group', 'preRemoveUser', [$this, 'onPreProcessUser']);
+ $this->groupManager->listen('\OC\Group', 'postRemoveUser', [$this, 'onPostRemoveUser']);
+ }
+
+ public function tearDown() {
+ $this->groupManager->removeListener('\OC\Group', 'preAddUser', [$this, 'onPreProcessUser']);
+ $this->groupManager->removeListener('\OC\Group', 'postAddUser', [$this, 'onPostAddUser']);
+ $this->groupManager->removeListener('\OC\Group', 'preRemoveUser', [$this, 'onPreProcessUser']);
+ $this->groupManager->removeListener('\OC\Group', 'postRemoveUser', [$this, 'onPostRemoveUser']);
+ }
+}
diff --git a/apps/files_sharing/lib/propagation/propagationmanager.php b/apps/files_sharing/lib/propagation/propagationmanager.php
index d220551f8d6..6ed70e93f84 100644
--- a/apps/files_sharing/lib/propagation/propagationmanager.php
+++ b/apps/files_sharing/lib/propagation/propagationmanager.php
@@ -25,6 +25,7 @@ use OC\Files\Filesystem;
use OC\Files\View;
use OCP\IConfig;
use OCP\IUserSession;
+use OCP\Util;
/**
@@ -81,6 +82,21 @@ class PropagationManager {
}
/**
+ * Propagates etag changes for the given shares to the given user
+ *
+ * @param array array of shares for which to trigger etag change
+ * @param string $user
+ */
+ public function propagateSharesToUser($shares, $user) {
+ $changePropagator = $this->getChangePropagator($user);
+ foreach ($shares as $share) {
+ $changePropagator->addChange($share['file_target']);
+ }
+ $time = microtime(true);
+ $changePropagator->propagateChanges(floor($time));
+ }
+
+ /**
* @param string $user
* @return \OCA\Files_Sharing\Propagation\RecipientPropagator
*/
@@ -119,8 +135,9 @@ class PropagationManager {
// for marking shares owned by the active user as dirty when a file inside them changes
$this->listenToOwnerChanges($user->getUID(), $user->getUID());
- \OC_Hook::connect('OC_Filesystem', 'post_write', $watcher, 'writeHook');
- \OC_Hook::connect('OC_Filesystem', 'post_delete', $watcher, 'writeHook');
- \OC_Hook::connect('OC_Filesystem', 'post_rename', $watcher, 'renameHook');
+ Util::connectHook('OC_Filesystem', 'post_write', $watcher, 'writeHook');
+ Util::connectHook('OC_Filesystem', 'post_delete', $watcher, 'writeHook');
+ Util::connectHook('OC_Filesystem', 'post_rename', $watcher, 'renameHook');
+ Util::connectHook('OCP\Share', 'post_update_permissions', $watcher, 'permissionsHook');
}
}
diff --git a/apps/files_sharing/lib/propagation/recipientpropagator.php b/apps/files_sharing/lib/propagation/recipientpropagator.php
index 420cacb3d2f..8e064e2ee54 100644
--- a/apps/files_sharing/lib/propagation/recipientpropagator.php
+++ b/apps/files_sharing/lib/propagation/recipientpropagator.php
@@ -105,7 +105,7 @@ class RecipientPropagator {
/**
* @param array $share
- * @param int $time
+ * @param float $time
*/
public function markDirty($share, $time = null) {
if ($time === null) {
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 27dd2f1e485..b0e56f5f054 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -583,9 +583,6 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public function getETag($path) {
- if ($path == '') {
- $path = $this->getMountPoint();
- }
if ($source = $this->getSourcePath($path)) {
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
return $storage->getETag($internalPath);
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 06d797c3c6f..b5dd653d718 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -86,38 +86,39 @@ $thumbSize = 1024;
</a>
</span>
</div>
- </div></header>
-<div id="content">
- <div id="preview">
- <?php if (isset($_['folder'])): ?>
- <?php print_unescaped($_['folder']); ?>
- <?php else: ?>
- <?php if ($_['previewEnabled'] && substr($_['mimetype'], 0, strpos($_['mimetype'], '/')) == 'video'): ?>
- <div id="imgframe">
- <video tabindex="0" controls="" preload="none">
- <source src="<?php p($_['downloadURL']); ?>" type="<?php p($_['mimetype']); ?>" />
- </video>
- </div>
+</div></header>
+<div id="content-wrapper">
+ <div id="content">
+ <div id="preview">
+ <?php if (isset($_['folder'])): ?>
+ <?php print_unescaped($_['folder']); ?>
<?php else: ?>
- <!-- Preview frame is filled via JS to support SVG images for modern browsers -->
- <div id="imgframe"></div>
+ <?php if ($_['previewEnabled'] && substr($_['mimetype'], 0, strpos($_['mimetype'], '/')) == 'video'): ?>
+ <div id="imgframe">
+ <video tabindex="0" controls="" preload="none">
+ <source src="<?php p($_['downloadURL']); ?>" type="<?php p($_['mimetype']); ?>" />
+ </video>
+ </div>
+ <?php else: ?>
+ <!-- Preview frame is filled via JS to support SVG images for modern browsers -->
+ <div id="imgframe"></div>
+ <?php endif; ?>
+ <div class="directDownload">
+ <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button">
+ <img class="svg" alt="" src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>"/>
+ <?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>)
+ </a>
+ </div>
+ <div class="directLink">
+ <label for="directLink"><?php p($l->t('Direct link')) ?></label>
+ <input id="directLink" type="text" readonly value="<?php p($_['downloadURL']); ?>">
+ </div>
<?php endif; ?>
- <div class="directDownload">
- <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" 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($_['fileSize']) ?>)
- </a>
- </div>
- <div class="directLink">
- <label for="directLink"><?php p($l->t('Direct link')) ?></label>
- <input id="directLink" type="text" readonly value="<?php p($_['downloadURL']); ?>">
- </div>
- <?php endif; ?>
+ </div>
</div>
-
+ <footer>
+ <p class="info">
+ <?php print_unescaped($theme->getLongFooter()); ?>
+ </p>
+ </footer>
</div>
-<footer>
- <p class="info">
- <?php print_unescaped($theme->getLongFooter()); ?>
- </p>
-</footer>
diff --git a/apps/files_sharing/tests/etagpropagation.php b/apps/files_sharing/tests/etagpropagation.php
index 6d23959d66d..f7f8ec35288 100644
--- a/apps/files_sharing/tests/etagpropagation.php
+++ b/apps/files_sharing/tests/etagpropagation.php
@@ -47,6 +47,7 @@ class EtagPropagation extends TestCase {
\OC_Hook::clear('OC_Filesystem', 'post_write');
\OC_Hook::clear('OC_Filesystem', 'post_delete');
\OC_Hook::clear('OC_Filesystem', 'post_rename');
+ \OC_Hook::clear('OCP\Share', 'post_update_permissions');
parent::tearDown();
}
@@ -406,4 +407,17 @@ class EtagPropagation extends TestCase {
$this->assertAllUnchaged();
}
+
+ public function testEtagChangeOnPermissionsChange() {
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1);
+
+ $view = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
+ $folderInfo = $view->getFileInfo('/sub1/sub2/folder');
+
+ \OCP\Share::setPermissions('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 17);
+
+ $this->assertEtagsForFoldersChanged([self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER4]);
+
+ $this->assertAllUnchaged();
+ }
}
diff --git a/apps/files_sharing/tests/external/managertest.php b/apps/files_sharing/tests/external/managertest.php
index 8e03c67a9a3..7242779d455 100644
--- a/apps/files_sharing/tests/external/managertest.php
+++ b/apps/files_sharing/tests/external/managertest.php
@@ -23,9 +23,12 @@ namespace OCA\Files_Sharing\Tests\External;
use OC\Files\Storage\StorageFactory;
use OCA\Files_Sharing\External\Manager;
+use OCA\Files_Sharing\External\MountProvider;
use OCA\Files_Sharing\Tests\TestCase;
+use Test\Traits\UserTrait;
class ManagerTest extends TestCase {
+ use UserTrait;
/** @var Manager **/
private $manager;
@@ -38,10 +41,18 @@ class ManagerTest extends TestCase {
private $uid;
+ /**
+ * @var \OCP\IUser
+ */
+ private $user;
+ private $mountProvider;
+
protected function setUp() {
parent::setUp();
$this->uid = $this->getUniqueID('user');
+ $this->createUser($this->uid, '');
+ $this->user = \OC::$server->getUserManager()->get($this->uid);
$this->mountManager = new \OC\Files\Mount\Manager();
$this->httpHelper = $httpHelper = $this->getMockBuilder('\OC\HTTPHelper')->disableOriginalConstructor()->getMock();
/** @var \OC\HTTPHelper $httpHelper */
@@ -53,6 +64,16 @@ class ManagerTest extends TestCase {
\OC::$server->getNotificationManager(),
$this->uid
);
+ $this->mountProvider = new MountProvider(\OC::$server->getDatabaseConnection(), function() {
+ return $this->manager;
+ });
+ }
+
+ private function setupMounts() {
+ $mounts = $this->mountProvider->getMountsForUser($this->user, new StorageFactory());
+ foreach ($mounts as $mount) {
+ $this->mountManager->addMount($mount);
+ }
}
public function testAddShare() {
@@ -77,7 +98,7 @@ class ManagerTest extends TestCase {
$this->assertCount(1, $openShares);
$this->assertExternalShareEntry($shareData1, $openShares[0], 1, '{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertNotMount('SharedFolder');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
@@ -89,7 +110,7 @@ class ManagerTest extends TestCase {
// New share falls back to "-1" appendix, because the name is already taken
$this->assertExternalShareEntry($shareData2, $openShares[1], 2, '{{TemporaryMountPointName#' . $shareData2['name'] . '}}-1');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertNotMount('SharedFolder');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -111,7 +132,7 @@ class ManagerTest extends TestCase {
$this->assertCount(1, $openShares);
$this->assertExternalShareEntry($shareData2, $openShares[0], 2, '{{TemporaryMountPointName#' . $shareData2['name'] . '}}-1');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -124,7 +145,7 @@ class ManagerTest extends TestCase {
// New share falls back to the original name (no "-\d", because the name is not taken)
$this->assertExternalShareEntry($shareData3, $openShares[1], 3, '{{TemporaryMountPointName#' . $shareData3['name'] . '}}');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -136,7 +157,7 @@ class ManagerTest extends TestCase {
// Decline the third share
$this->manager->declineShare($openShares[1]['id']);
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -151,7 +172,7 @@ class ManagerTest extends TestCase {
$this->assertCount(1, $openShares);
$this->assertExternalShareEntry($shareData2, $openShares[0], 2, '{{TemporaryMountPointName#' . $shareData2['name'] . '}}-1');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
diff --git a/apps/files_sharing/tests/grouppropagationmanager.php b/apps/files_sharing/tests/grouppropagationmanager.php
new file mode 100644
index 00000000000..6fc6ef7a532
--- /dev/null
+++ b/apps/files_sharing/tests/grouppropagationmanager.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <icewind@owncloud.com>
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_sharing\Tests;
+
+use OC\Files\View;
+use OCP\IGroupManager;
+use OCP\IGroup;
+use OCP\IUser;
+use OCP\Share;
+use OCA\Files_Sharing\Propagation\GroupPropagationManager;
+use OCA\Files_Sharing\Propagation\PropagationManager;
+
+class GroupPropagationManagerTest extends TestCase {
+
+ /**
+ * @var GroupPropagationManager
+ */
+ private $groupPropagationManager;
+
+ /**
+ * @var IGroupManager
+ */
+ private $groupManager;
+
+ /**
+ * @var PropagationManager
+ */
+ private $propagationManager;
+
+ /**
+ * @var IGroup
+ */
+ private $recipientGroup;
+
+ /**
+ * @var IUser
+ */
+ private $recipientUser;
+
+ /**
+ * @var array
+ */
+ private $fileInfo;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $user = $this->getMockBuilder('\OCP\IUser')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $user->method('getUID')->willReturn(self::TEST_FILES_SHARING_API_USER1);
+ $userSession = $this->getMockBuilder('\OCP\IUserSession')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $userSession->method('getUser')->willReturn(selF::TEST_FILES_SHARING_API_USER1);
+
+ $this->propagationManager = $this->getMockBuilder('OCA\Files_Sharing\Propagation\PropagationManager')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->groupManager = \OC::$server->getGroupManager();
+ $this->groupPropagationManager = new GroupPropagationManager(
+ $userSession,
+ $this->groupManager,
+ $this->propagationManager
+ );
+ $this->groupPropagationManager->globalSetup();
+
+ // since the sharing code is not mockable, we have to create a real folder
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1);
+ $view1 = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
+ $view1->mkdir('/folder');
+
+ $this->fileInfo = $view1->getFileInfo('/folder');
+
+ $this->recipientGroup = $this->groupManager->get(self::TEST_FILES_SHARING_API_GROUP1);
+ $this->recipientUser = \OC::$server->getUserManager()->get(self::TEST_FILES_SHARING_API_USER3);
+
+ Share::shareItem(
+ 'folder',
+ $this->fileInfo['fileid'],
+ Share::SHARE_TYPE_GROUP,
+ $this->recipientGroup->getGID(),
+ \OCP\Constants::PERMISSION_READ
+ );
+
+ $this->loginAsUser($this->recipientUser->getUID());
+ }
+
+ protected function tearDown() {
+ $this->groupPropagationManager->tearDown();
+ $this->recipientGroup->removeUser($this->recipientUser);
+ parent::tearDown();
+ }
+
+ public function testPropagateWhenAddedToGroup() {
+ $this->propagationManager->expects($this->once())
+ ->method('propagateSharesToUser')
+ ->with($this->callback(function($shares) {
+ if (count($shares) !== 1) {
+ return false;
+ }
+ $share = array_values($shares)[0];
+ return $share['file_source'] === $this->fileInfo['fileid'] &&
+ $share['share_with'] === $this->recipientGroup->getGID() &&
+ $share['file_target'] === '/folder';
+ }), $this->recipientUser->getUID());
+
+ $this->recipientGroup->addUser($this->recipientUser);
+ }
+
+ public function testPropagateWhenRemovedFromGroup() {
+ $this->recipientGroup->addUser($this->recipientUser);
+
+ $this->propagationManager->expects($this->once())
+ ->method('propagateSharesToUser')
+ ->with($this->callback(function($shares) {
+ if (count($shares) !== 1) {
+ return false;
+ }
+ $share = array_values($shares)[0];
+ return $share['file_source'] === $this->fileInfo['fileid'] &&
+ $share['share_with'] === $this->recipientGroup->getGID() &&
+ $share['file_target'] === '/folder';
+ }), $this->recipientUser->getUID());
+
+ $this->recipientGroup->removeUser($this->recipientUser);
+ }
+
+ public function testPropagateWhenRemovedFromGroupWithSubdirTarget() {
+ $this->recipientGroup->addUser($this->recipientUser);
+
+ // relogin to refresh mount points
+ $this->loginAsUser($this->recipientUser->getUID());
+ $recipientView = new View('/' . $this->recipientUser->getUID() . '/files');
+
+ $this->assertTrue($recipientView->mkdir('sub'));
+ $this->assertTrue($recipientView->rename('folder', 'sub/folder'));
+
+ $this->propagationManager->expects($this->once())
+ ->method('propagateSharesToUser')
+ ->with($this->callback(function($shares) {
+ if (count($shares) !== 1) {
+ return false;
+ }
+ $share = array_values($shares)[0];
+ return $share['file_source'] === $this->fileInfo['fileid'] &&
+ $share['share_with'] === $this->recipientGroup->getGID() &&
+ $share['file_target'] === '/sub/folder';
+ }), $this->recipientUser->getUID());
+
+ $this->recipientGroup->removeUser($this->recipientUser);
+ }
+}
diff --git a/apps/files_trashbin/l10n/nds.js b/apps/files_trashbin/l10n/nds.js
new file mode 100644
index 00000000000..b2dd9ff4ca6
--- /dev/null
+++ b/apps/files_trashbin/l10n/nds.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Delete" : "Löschen",
+ "Name" : "Name"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/nds.json b/apps/files_trashbin/l10n/nds.json
new file mode 100644
index 00000000000..45b0caa74ac
--- /dev/null
+++ b/apps/files_trashbin/l10n/nds.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "Delete" : "Löschen",
+ "Name" : "Name"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/fa.js b/apps/user_ldap/l10n/fa.js
index 7dd4e884a4d..4e3e924d88d 100644
--- a/apps/user_ldap/l10n/fa.js
+++ b/apps/user_ldap/l10n/fa.js
@@ -13,6 +13,8 @@ OC.L10N.register(
"Configuration OK" : "پیکربندی صحیح است",
"Select groups" : "انتخاب گروه ها",
"Select object classes" : "انتخاب کلاس های اشیا",
+ "Please specify the port, it could not be auto-detected." : "لطفا پورت را مشخص کنید، امکان تعیین خودکار وجود ندارد.",
+ "Could not detect Base DN, please enter it manually." : "امکان شناسایی Base DN, وجود ندارد، لطفا بصورت دستی آنرا وارد کنید.",
"{nthServer}. Server" : "سرور {nthServer}.",
"Do you really want to delete the current Server Configuration?" : "آیا واقعا می خواهید پیکربندی کنونی سرور را حذف کنید؟",
"Confirm Deletion" : "تایید حذف",
diff --git a/apps/user_ldap/l10n/fa.json b/apps/user_ldap/l10n/fa.json
index 34a36eaf3bd..5efa24f0d51 100644
--- a/apps/user_ldap/l10n/fa.json
+++ b/apps/user_ldap/l10n/fa.json
@@ -11,6 +11,8 @@
"Configuration OK" : "پیکربندی صحیح است",
"Select groups" : "انتخاب گروه ها",
"Select object classes" : "انتخاب کلاس های اشیا",
+ "Please specify the port, it could not be auto-detected." : "لطفا پورت را مشخص کنید، امکان تعیین خودکار وجود ندارد.",
+ "Could not detect Base DN, please enter it manually." : "امکان شناسایی Base DN, وجود ندارد، لطفا بصورت دستی آنرا وارد کنید.",
"{nthServer}. Server" : "سرور {nthServer}.",
"Do you really want to delete the current Server Configuration?" : "آیا واقعا می خواهید پیکربندی کنونی سرور را حذف کنید؟",
"Confirm Deletion" : "تایید حذف",
diff --git a/apps/user_ldap/l10n/nds.js b/apps/user_ldap/l10n/nds.js
index 37042a4f412..7fe0e420a11 100644
--- a/apps/user_ldap/l10n/nds.js
+++ b/apps/user_ldap/l10n/nds.js
@@ -1,7 +1,9 @@
OC.L10N.register(
"user_ldap",
{
- "_%s group found_::_%s groups found_" : ["",""],
- "_%s user found_::_%s users found_" : ["",""]
+ "Host" : "Host",
+ "Port" : "Port",
+ "Password" : "Passwort",
+ "Continue" : "Fortsetzen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/nds.json b/apps/user_ldap/l10n/nds.json
index 521de7ba1a8..78a3e1c8efd 100644
--- a/apps/user_ldap/l10n/nds.json
+++ b/apps/user_ldap/l10n/nds.json
@@ -1,5 +1,7 @@
{ "translations": {
- "_%s group found_::_%s groups found_" : ["",""],
- "_%s user found_::_%s users found_" : ["",""]
+ "Host" : "Host",
+ "Port" : "Port",
+ "Password" : "Passwort",
+ "Continue" : "Fortsetzen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/pt_PT.js b/apps/user_ldap/l10n/pt_PT.js
index 38da6186e90..459fe817603 100644
--- a/apps/user_ldap/l10n/pt_PT.js
+++ b/apps/user_ldap/l10n/pt_PT.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Failed to clear the mappings." : "Falhou a limpar os mapas.",
"Failed to delete the server configuration" : "Erro ao eliminar a configuração do servidor",
+ "The configuration is invalid: anonymous bind is not allowed." : "A configuração é inválida: ligação anónima não é permitida.",
"The configuration is valid and the connection could be established!" : "A configuração está correcta e foi possível estabelecer a ligação!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "A configuração está correcta, mas não foi possível estabelecer o \"laço\", por favor, verifique as configurações do servidor e as credenciais.",
"The configuration is invalid. Please have a look at the logs for further details." : "A configuração é inválida. Por favor, veja o log do ownCloud para mais detalhes.",
@@ -32,6 +33,9 @@ OC.L10N.register(
"Error while clearing the mappings." : "Erro a limpar os mapas.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Ligação anónima não permitida. Por favor forneça um ND de utilizador e password.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Erro de operações LDAP. Ligação anónima pode não ser permitida.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Falha na gravação. Por favor verifique que a base de dados está operacional. Recarregar antes de continuar.",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Trocando o modo vai permitir a busca automática no LDAP. Dependendo do tamanho do seu LDAP poderá demorar um pouco. Ainda pretende trocar o modo?",
+ "Mode switch" : "Trocar de modo",
"Select attributes" : "Selecionar atributos",
"User found and settings verified." : "Utilizador encontrado e as definilções verificadas",
"_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"],
diff --git a/apps/user_ldap/l10n/pt_PT.json b/apps/user_ldap/l10n/pt_PT.json
index 594b6ac1907..c7358f61bd5 100644
--- a/apps/user_ldap/l10n/pt_PT.json
+++ b/apps/user_ldap/l10n/pt_PT.json
@@ -1,6 +1,7 @@
{ "translations": {
"Failed to clear the mappings." : "Falhou a limpar os mapas.",
"Failed to delete the server configuration" : "Erro ao eliminar a configuração do servidor",
+ "The configuration is invalid: anonymous bind is not allowed." : "A configuração é inválida: ligação anónima não é permitida.",
"The configuration is valid and the connection could be established!" : "A configuração está correcta e foi possível estabelecer a ligação!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "A configuração está correcta, mas não foi possível estabelecer o \"laço\", por favor, verifique as configurações do servidor e as credenciais.",
"The configuration is invalid. Please have a look at the logs for further details." : "A configuração é inválida. Por favor, veja o log do ownCloud para mais detalhes.",
@@ -30,6 +31,9 @@
"Error while clearing the mappings." : "Erro a limpar os mapas.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Ligação anónima não permitida. Por favor forneça um ND de utilizador e password.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Erro de operações LDAP. Ligação anónima pode não ser permitida.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Falha na gravação. Por favor verifique que a base de dados está operacional. Recarregar antes de continuar.",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Trocando o modo vai permitir a busca automática no LDAP. Dependendo do tamanho do seu LDAP poderá demorar um pouco. Ainda pretende trocar o modo?",
+ "Mode switch" : "Trocar de modo",
"Select attributes" : "Selecionar atributos",
"User found and settings verified." : "Utilizador encontrado e as definilções verificadas",
"_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"],
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index a2fdd88a240..0707b95013c 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -1468,6 +1468,30 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * checks whether an LDAP paged search operation has more pages that can be
+ * retrieved, typically when offset and limit are provided.
+ *
+ * Be very careful to use it: the last cookie value, which is inspected, can
+ * be reset by other operations. Best, call it immediately after a search(),
+ * searchUsers() or searchGroups() call. count-methods are probably safe as
+ * well. Don't rely on it with any fetchList-method.
+ * @return bool
+ */
+ public function hasMoreResults() {
+ if(!$this->connection->hasPagedResultSupport) {
+ return false;
+ }
+
+ if(empty($this->lastCookie) && $this->lastCookie !== '0') {
+ // as in RFC 2696, when all results are returned, the cookie will
+ // be empty.
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
* set a cookie for LDAP paged search run
* @param string $base a string with the base DN for the search
* @param string $filter the search filter to identify the correct search
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index 18a0412a63d..84a1225d6ec 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -439,7 +439,7 @@ class Wizard extends LDAPUtility {
$groupEntries[] = $item;
}
$offset += $limit;
- } while (count($groupNames) > 0 && count($groupNames) % $limit === 0);
+ } while ($this->access->hasMoreResults());
if(count($groupNames) > 0) {
natsort($groupNames);
diff --git a/apps/user_ldap/tests/integration/lib/integrationtestpaging.php b/apps/user_ldap/tests/integration/lib/integrationtestpaging.php
new file mode 100644
index 00000000000..f8d008d065f
--- /dev/null
+++ b/apps/user_ldap/tests/integration/lib/integrationtestpaging.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * @author Arthur Schiwon <blizzz@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\user_ldap\tests\integration\lib;
+
+use OCA\user_ldap\lib\user\Manager as LDAPUserManager;
+use OCA\user_ldap\tests\integration\AbstractIntegrationTest;
+use OCA\User_LDAP\Mapping\UserMapping;
+use OCA\user_ldap\USER_LDAP;
+
+require_once __DIR__ . '/../../../../../lib/base.php';
+
+class IntegrationTestPaging extends AbstractIntegrationTest {
+ /** @var UserMapping */
+ protected $mapping;
+
+ /** @var USER_LDAP */
+ protected $backend;
+
+ /**
+ * prepares the LDAP environment and sets up a test configuration for
+ * the LDAP backend.
+ */
+ public function init() {
+ require(__DIR__ . '/../setup-scripts/createExplicitUsers.php');
+ parent::init();
+
+ $this->backend = new \OCA\user_ldap\USER_LDAP($this->access, \OC::$server->getConfig());
+ }
+
+ /**
+ * tests that paging works properly against a simple example (reading all
+ * of few users in smallest steps)
+ *
+ * @return bool
+ */
+ protected function case1() {
+ $limit = 1;
+ $offset = 0;
+
+ $filter = 'objectclass=inetorgperson';
+ $attributes = ['cn', 'dn'];
+ $users = [];
+ do {
+ $result = $this->access->searchUsers($filter, $attributes, $limit, $offset);
+ foreach($result as $user) {
+ $users[] = $user['cn'];
+ }
+ $offset += $limit;
+ } while ($this->access->hasMoreResults());
+
+ if(count($users) === 2) {
+ return true;
+ }
+
+ return false;
+ }
+}
+
+require_once(__DIR__ . '/../setup-scripts/config.php');
+$test = new IntegrationTestPaging($host, $port, $adn, $apwd, $bdn);
+$test->init();
+$test->run();
diff --git a/config/config.sample.php b/config/config.sample.php
index 2a2bca708a8..432569f12a9 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1070,8 +1070,9 @@ $CONFIG = array(
/**
* Where ``mount.json`` file should be stored, defaults to ``data/mount.json``
+ * in the ownCloud directory.
*/
-'mount_file' => 'data/mount.json',
+'mount_file' => '/var/www/owncloud/data/mount.json',
/**
* When ``true``, prevent ownCloud from changing the cache due to changes in the
diff --git a/core/css/styles.css b/core/css/styles.css
index df533aab318..3d68a591522 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -404,8 +404,7 @@ input[type="submit"].enabled {
width: 100%;
}
#content .hascontrols {
- position: relative;
- top: 45px;
+ margin-top: 45px;
}
#content-wrapper {
position: absolute;
@@ -425,9 +424,9 @@ input[type="submit"].enabled {
.emptycontent {
font-size: 16px;
color: #888;
- position: absolute;
text-align: center;
- top: 30%;
+ margin-top: 100px; /* ie8 */
+ margin-top: 30vh;
width: 100%;
}
#emptycontent h2,
@@ -1164,7 +1163,7 @@ div.crumb:active {
/* public footer */
#body-public footer {
- margin-top: 65px;
+ position: relative;
text-align: center;
}
diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js
index b11e7eab730..30c7e7d2b78 100644
--- a/core/l10n/cs_CZ.js
+++ b/core/l10n/cs_CZ.js
@@ -183,6 +183,7 @@ OC.L10N.register(
"Reset password" : "Obnovit heslo",
"Searching other places" : "Prohledávání ostatních umístění",
"No search results in other folders" : "V ostatních adresářích nebylo nic nalezeno",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} nález v dalším adresáři","{count} nálezy v dalších adresářích","{count} nálezů v dalších adresářích"],
"Personal" : "Osobní",
"Users" : "Uživatelé",
"Apps" : "Aplikace",
diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json
index 7f92a531a69..ede877c6f23 100644
--- a/core/l10n/cs_CZ.json
+++ b/core/l10n/cs_CZ.json
@@ -181,6 +181,7 @@
"Reset password" : "Obnovit heslo",
"Searching other places" : "Prohledávání ostatních umístění",
"No search results in other folders" : "V ostatních adresářích nebylo nic nalezeno",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} nález v dalším adresáři","{count} nálezy v dalších adresářích","{count} nálezů v dalších adresářích"],
"Personal" : "Osobní",
"Users" : "Uživatelé",
"Apps" : "Aplikace",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index d012c2238d9..326aae34329 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Couldn't send mail to following users: %s " : "Die E-Mail konnte nicht an folgende Benutzer gesendet werden: %s",
"Preparing update" : "Update vorbereiten",
- "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrationstests wurden übersprungen - \"update.skip-migration-test\" is in der config.php aktiviert",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrationstests wurden übersprungen - \"update.skip-migration-test\" ist in der config.php aktiviert",
"Turned on maintenance mode" : "Wartungsmodus eingeschaltet",
"Turned off maintenance mode" : "Wartungsmodus ausgeschaltet",
"Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten",
@@ -13,8 +13,8 @@ OC.L10N.register(
"Updated \"%s\" to %s" : "„%s“ zu %s aktualisiert",
"Repair warning: " : "Reperaturwarnung:",
"Repair error: " : "Reperaturfehler:",
- "Set log level to debug - current level: \"%s\"" : "Setze Log-Level auf Debug - aktuelles Level: \"%s\"",
- "Reset log level to \"%s\"" : "Setze Log-Level zu \"%s\" zurück",
+ "Set log level to debug - current level: \"%s\"" : "Log-Level auf Debug gesetzt - aktuelles Level: \"%s\"",
+ "Reset log level to \"%s\"" : "Log-Level auf \"%s\" zurückgesetzt",
"Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s",
"Following apps have been disabled: %s" : "Die folgenden Apps sind deaktiviert worden: %s",
"Already up to date" : "Bereits aktuell",
@@ -108,7 +108,7 @@ OC.L10N.register(
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) ist nicht länger <a href=\"{phpLink}\">supported</a>. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
+ "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 7e207557dc5..975a325ddc4 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -1,7 +1,7 @@
{ "translations": {
"Couldn't send mail to following users: %s " : "Die E-Mail konnte nicht an folgende Benutzer gesendet werden: %s",
"Preparing update" : "Update vorbereiten",
- "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrationstests wurden übersprungen - \"update.skip-migration-test\" is in der config.php aktiviert",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrationstests wurden übersprungen - \"update.skip-migration-test\" ist in der config.php aktiviert",
"Turned on maintenance mode" : "Wartungsmodus eingeschaltet",
"Turned off maintenance mode" : "Wartungsmodus ausgeschaltet",
"Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten",
@@ -11,8 +11,8 @@
"Updated \"%s\" to %s" : "„%s“ zu %s aktualisiert",
"Repair warning: " : "Reperaturwarnung:",
"Repair error: " : "Reperaturfehler:",
- "Set log level to debug - current level: \"%s\"" : "Setze Log-Level auf Debug - aktuelles Level: \"%s\"",
- "Reset log level to \"%s\"" : "Setze Log-Level zu \"%s\" zurück",
+ "Set log level to debug - current level: \"%s\"" : "Log-Level auf Debug gesetzt - aktuelles Level: \"%s\"",
+ "Reset log level to \"%s\"" : "Log-Level auf \"%s\" zurückgesetzt",
"Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s",
"Following apps have been disabled: %s" : "Die folgenden Apps sind deaktiviert worden: %s",
"Already up to date" : "Bereits aktuell",
@@ -106,7 +106,7 @@
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer <a href=\"{docLink}\">Dokumentation</a>.",
- "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) ist nicht länger <a href=\"{phpLink}\">supported</a>. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
+ "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 644149ddc1a..b593fc452ae 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail gesendet werden: %s",
"Preparing update" : "Update vorbereiten",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrationstests wurden übersprungen - \"update.skip-migration-test\" ist in der config.php aktiviert",
"Turned on maintenance mode" : "Wartungsmodus eingeschaltet ",
"Turned off maintenance mode" : "Wartungsmodus ausgeschaltet",
"Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten",
@@ -12,6 +13,8 @@ OC.L10N.register(
"Updated \"%s\" to %s" : "„%s“ zu %s aktualisiert",
"Repair warning: " : "Reperaturwarnung:",
"Repair error: " : "Reperaturfehler:",
+ "Set log level to debug - current level: \"%s\"" : "Log-Level auf Debug gesetzt - aktuelles Level: \"%s\"",
+ "Reset log level to \"%s\"" : "Log-Level auf \"%s\" zurückgesetzt",
"Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s",
"Following apps have been disabled: %s" : "Die folgenden Apps sind deaktiviert worden: %s",
"Already up to date" : "Bereits aktuell",
@@ -105,6 +108,7 @@ OC.L10N.register(
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
+ "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ihre PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade ihrer PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
@@ -150,6 +154,7 @@ OC.L10N.register(
"Share with users or groups …" : "Mit Benutzern oder Gruppen teilen…",
"Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…",
"Warning" : "Warnung",
+ "Error while sending notification" : "Fehler beim Senden der Benachrichtigung",
"The object type is not specified." : "Der Objekttyp ist nicht angegeben.",
"Enter new" : "Neuen eingeben",
"Delete" : "Löschen",
@@ -170,6 +175,7 @@ OC.L10N.register(
"The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.",
"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" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
+ "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"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 konnte nicht versandt werden, weil für diesen Benutzernamen keine E-Mail-Adresse hinterlegt ist. Bitte kontaktieren Sie Ihren Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
@@ -178,6 +184,8 @@ OC.L10N.register(
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
"Searching other places" : "Andere Orte durchsuchen",
+ "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} Suchergebnis in anderen Ordnern","{count} Suchergebnisse in anderen Ordnern"],
"Personal" : "Persönlich",
"Users" : "Benutzer",
"Apps" : "Apps",
@@ -203,13 +211,13 @@ OC.L10N.register(
"More details can be found in the server log." : "Weitere Details können im Serverprotokoll gefunden werden.",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anforderungskennung: %s",
+ "Request ID: %s" : "Anfragekennung: %s",
"Type: %s" : "Typ: %s",
"Code: %s" : "Code: %s",
"Message: %s" : "Nachricht: %s",
"File: %s" : "Datei: %s",
"Line: %s" : "Zeile: %s",
- "Trace" : "Spur",
+ "Trace" : "Ablauf",
"Security warning" : "Sicherheitshinweis",
"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>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 95bd4ff7b06..c7fa1e368a9 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -1,6 +1,7 @@
{ "translations": {
"Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail gesendet werden: %s",
"Preparing update" : "Update vorbereiten",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrationstests wurden übersprungen - \"update.skip-migration-test\" ist in der config.php aktiviert",
"Turned on maintenance mode" : "Wartungsmodus eingeschaltet ",
"Turned off maintenance mode" : "Wartungsmodus ausgeschaltet",
"Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten",
@@ -10,6 +11,8 @@
"Updated \"%s\" to %s" : "„%s“ zu %s aktualisiert",
"Repair warning: " : "Reperaturwarnung:",
"Repair error: " : "Reperaturfehler:",
+ "Set log level to debug - current level: \"%s\"" : "Log-Level auf Debug gesetzt - aktuelles Level: \"%s\"",
+ "Reset log level to \"%s\"" : "Log-Level auf \"%s\" zurückgesetzt",
"Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s",
"Following apps have been disabled: %s" : "Die folgenden Apps sind deaktiviert worden: %s",
"Already up to date" : "Bereits aktuell",
@@ -103,6 +106,7 @@
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.",
+ "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ihre PHP Version ({version}) wird nicht länger <a href=\"{phpLink}\">unterstützt</a>. Wir empfehlen ein Upgrade ihrer PHP Version, um die volle Performance und Sicherheit zu gewährleisten.",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.",
@@ -148,6 +152,7 @@
"Share with users or groups …" : "Mit Benutzern oder Gruppen teilen…",
"Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…",
"Warning" : "Warnung",
+ "Error while sending notification" : "Fehler beim Senden der Benachrichtigung",
"The object type is not specified." : "Der Objekttyp ist nicht angegeben.",
"Enter new" : "Neuen eingeben",
"Delete" : "Löschen",
@@ -168,6 +173,7 @@
"The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.",
"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" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
+ "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"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 konnte nicht versandt werden, weil für diesen Benutzernamen keine E-Mail-Adresse hinterlegt ist. Bitte kontaktieren Sie Ihren Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
@@ -176,6 +182,8 @@
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
"Searching other places" : "Andere Orte durchsuchen",
+ "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} Suchergebnis in anderen Ordnern","{count} Suchergebnisse in anderen Ordnern"],
"Personal" : "Persönlich",
"Users" : "Benutzer",
"Apps" : "Apps",
@@ -201,13 +209,13 @@
"More details can be found in the server log." : "Weitere Details können im Serverprotokoll gefunden werden.",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anforderungskennung: %s",
+ "Request ID: %s" : "Anfragekennung: %s",
"Type: %s" : "Typ: %s",
"Code: %s" : "Code: %s",
"Message: %s" : "Nachricht: %s",
"File: %s" : "Datei: %s",
"Line: %s" : "Zeile: %s",
- "Trace" : "Spur",
+ "Trace" : "Ablauf",
"Security warning" : "Sicherheitshinweis",
"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>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index 7552a0f7b32..96b0053ec1a 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Couldn't send mail to following users: %s " : "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s",
"Preparing update" : "Προετοιμασία ενημέρωσης",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Οι δοκιμές μεταφοράς έχουν παρακαμφθεί - το \"update.skip-migration-test\" ελιναι ενεργοποιημένο στο ",
"Turned on maintenance mode" : "Η κατάσταση συντήρησης ενεργοποιήθηκε",
"Turned off maintenance mode" : "Η κατάσταση συντήρησης απενεργοποιήθηκε",
"Maintenance mode is kept active" : "Η λειτουργία συντήρησης διατηρήθηκε ενεργή",
@@ -12,6 +13,8 @@ OC.L10N.register(
"Updated \"%s\" to %s" : "Αναβαθμίστηκε \"%s\" σε %s",
"Repair warning: " : "Προειδοποίηση διόρθωσης:",
"Repair error: " : "Σφάλμα διόρθωσης:",
+ "Set log level to debug - current level: \"%s\"" : "Καθορισμός του επιπέδου καταγραφής σε αποσφαλμάτωση - τρέχον επίπεδο: \"%s\"",
+ "Reset log level to \"%s\"" : "Επαναφορά επιπέδου καταγραφής σε \"%s\"",
"Following incompatible apps have been disabled: %s" : "Οι παρακάτω εφαρμογές έχουν απενεργοποιηθεί: %s",
"Following apps have been disabled: %s" : "Οι ακόλουθες εφαρμογές έχουν απενεργοποιηθεί: %s",
"Already up to date" : "Ήδη ενημερωμένο",
@@ -107,6 +110,7 @@ OC.L10N.register(
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωσή</a> μας.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Η έκδοσή σας της PHP ({version}) <a href=\"{phpLink}\">δεν υποστηρίζεται πια από την PHP</a>. Σας παροτρύνουμε να αναβαθμίσετε την PHP για να επωφεληθείτε από την απόδοση και την ασφάλεια που παρέχει η PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers δεν είναι σωστή ή συνδέεστε στο ownCloud από ένα έμπιστο διαμεσολαβητή. Αν δεν συνδέεστε στο ownCloud από έμπιστο διαμεσολαβητή, αυτό είναι ένα θέμα ασφαλείας και μπορεί να επιτρέψει σε έναν επιτιθέμενο να μασκαρέψει τη διεύθυνση IP του ως ορατή στο ownCloud. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωση</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη cache, αλλά είναι εγκατεστημένη η λάθος μονάδα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε τη <a href=\"{wikiLink}\">memcached wiki και για τις δύο μονάδες</a>.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 824bd30398c..36ea47aa2c3 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -1,6 +1,7 @@
{ "translations": {
"Couldn't send mail to following users: %s " : "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s",
"Preparing update" : "Προετοιμασία ενημέρωσης",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Οι δοκιμές μεταφοράς έχουν παρακαμφθεί - το \"update.skip-migration-test\" ελιναι ενεργοποιημένο στο ",
"Turned on maintenance mode" : "Η κατάσταση συντήρησης ενεργοποιήθηκε",
"Turned off maintenance mode" : "Η κατάσταση συντήρησης απενεργοποιήθηκε",
"Maintenance mode is kept active" : "Η λειτουργία συντήρησης διατηρήθηκε ενεργή",
@@ -10,6 +11,8 @@
"Updated \"%s\" to %s" : "Αναβαθμίστηκε \"%s\" σε %s",
"Repair warning: " : "Προειδοποίηση διόρθωσης:",
"Repair error: " : "Σφάλμα διόρθωσης:",
+ "Set log level to debug - current level: \"%s\"" : "Καθορισμός του επιπέδου καταγραφής σε αποσφαλμάτωση - τρέχον επίπεδο: \"%s\"",
+ "Reset log level to \"%s\"" : "Επαναφορά επιπέδου καταγραφής σε \"%s\"",
"Following incompatible apps have been disabled: %s" : "Οι παρακάτω εφαρμογές έχουν απενεργοποιηθεί: %s",
"Following apps have been disabled: %s" : "Οι ακόλουθες εφαρμογές έχουν απενεργοποιηθεί: %s",
"Already up to date" : "Ήδη ενημερωμένο",
@@ -105,6 +108,7 @@
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωσή</a> μας.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Η έκδοσή σας της PHP ({version}) <a href=\"{phpLink}\">δεν υποστηρίζεται πια από την PHP</a>. Σας παροτρύνουμε να αναβαθμίσετε την PHP για να επωφεληθείτε από την απόδοση και την ασφάλεια που παρέχει η PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers δεν είναι σωστή ή συνδέεστε στο ownCloud από ένα έμπιστο διαμεσολαβητή. Αν δεν συνδέεστε στο ownCloud από έμπιστο διαμεσολαβητή, αυτό είναι ένα θέμα ασφαλείας και μπορεί να επιτρέψει σε έναν επιτιθέμενο να μασκαρέψει τη διεύθυνση IP του ως ορατή στο ownCloud. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωση</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη cache, αλλά είναι εγκατεστημένη η λάθος μονάδα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε τη <a href=\"{wikiLink}\">memcached wiki και για τις δύο μονάδες</a>.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index 816e4601520..598ab77ac09 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -110,6 +110,7 @@ OC.L10N.register(
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Su versión PHP ({version}) ya no es <a href=\"{phpLink}\">respaldada por PHP</a>. Recomendamos actualizar su versión de PHP para aprovechar las actualizaciones de rendimiento y seguridad proporcionadas por PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "memcached es un sistema de cache distribuido. pero ha sido instalado por error el modulo PHP memcache.\nConsulte <a href=\"{wikiLink}\">memcached wiki acerca de ambos modulos</a>",
"Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index bc4b3c4dd34..f650b9ba45e 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -108,6 +108,7 @@
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Su versión PHP ({version}) ya no es <a href=\"{phpLink}\">respaldada por PHP</a>. Recomendamos actualizar su versión de PHP para aprovechar las actualizaciones de rendimiento y seguridad proporcionadas por PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "memcached es un sistema de cache distribuido. pero ha sido instalado por error el modulo PHP memcache.\nConsulte <a href=\"{wikiLink}\">memcached wiki acerca de ambos modulos</a>",
"Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
diff --git a/core/l10n/fa.js b/core/l10n/fa.js
index 694750bba81..e781c67281d 100644
--- a/core/l10n/fa.js
+++ b/core/l10n/fa.js
@@ -5,8 +5,14 @@ OC.L10N.register(
"Preparing update" : "آماده‌سازی به روز‌ رسانی",
"Turned on maintenance mode" : "حالت \" در دست تعمیر \" فعال شد .",
"Turned off maintenance mode" : "حالت \" در دست تعمیر \" غیرفعال شد .",
+ "Maintenance mode is kept active" : "حالت تعمیرات فعال نگه‌داشته شده است",
"Updated database" : "بروز رسانی پایگاه داده انجام شد .",
+ "Updated \"%s\" to %s" : "\"%s\" به %s بروزرسانی شد",
+ "Repair warning: " : "اخطار تعمیر:",
+ "Repair error: " : "خطای تعمیر:",
+ "Already up to date" : "در حال حاضر بروز است",
"File is too big" : "فایل خیلی بزرگ است",
+ "Invalid file provided" : "فایل داده‌شده نا معتبر است",
"No image or file provided" : "هیچ فایل یا تصویری وارد نشده است",
"Unknown filetype" : "نوع فایل ناشناخته",
"Invalid image" : "عکس نامعتبر",
@@ -25,6 +31,13 @@ OC.L10N.register(
"Thu." : "پنج شنبه",
"Fri." : "جمعه",
"Sat." : "شنبه",
+ "Su" : "یک‌شنبه",
+ "Mo" : "دوشنبه",
+ "Tu" : "سه‌شنبه",
+ "We" : "چهار‌شنبه",
+ "Th" : "پنج‌شنبه",
+ "Fr" : "جمعه",
+ "Sa" : "شنبه",
"January" : "ژانویه",
"February" : "فبریه",
"March" : "مارس",
@@ -72,6 +85,7 @@ OC.L10N.register(
"Continue" : "ادامه",
"(all selected)" : "(همه انتخاب شده اند)",
"({count} selected)" : "({count} انتخاب شده)",
+ "Error loading file exists template" : "خطا در بارگزاری فایل قالب",
"Very weak password" : "رمز عبور بسیار ضعیف",
"Weak password" : "رمز عبور ضعیف",
"So-so password" : "رمز عبور متوسط",
@@ -118,6 +132,7 @@ OC.L10N.register(
"Share with users or groups …" : "اشتراک گذاری با کاربران یا گروه ها ...",
"Share with users, groups or remote users …" : "اشتراک گذاری با کاربران، گروه‌ها یا کاربران راه دور...",
"Warning" : "اخطار",
+ "Error while sending notification" : "خطا در حین ارسال نوتیفیکیشن",
"The object type is not specified." : "نوع شی تعیین نشده است.",
"Enter new" : "مورد جدید را وارد کنید",
"Delete" : "حذف",
@@ -126,9 +141,13 @@ OC.L10N.register(
"unknown text" : "متن نامعلوم",
"Hello world!" : "سلام دنیا!",
"sunny" : "آفتابی",
+ "Hello {name}, the weather is {weather}" : "سلام {name}, هوا {weather} است",
"Hello {name}" : "سلام {name}",
"_download %n file_::_download %n files_" : ["دانلود %n فایل"],
+ "The update was unsuccessful. " : "بروزرسانی ناموفق بود.",
+ "The update was successful. There were warnings." : "بروزرسانی با موفقیت انجام شد، اخطارهایی وجود دارد.",
"The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.",
+ "%s password reset" : "%s رمزعبور تغییر کرد",
"Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}",
"New password" : "گذرواژه جدید",
"New Password" : "رمزعبور جدید",
@@ -147,14 +166,18 @@ OC.L10N.register(
"Error unfavoriting" : "خطا هنگام حذف از موارد محبوب",
"Access forbidden" : "اجازه دسترسی به مناطق ممنوعه را ندارید",
"File not found" : "فایل یافت نشد",
+ "The share will expire on %s." : "اشتراک‌گذاری در %s منقضی خواهد شد.",
"Cheers!" : "سلامتی!",
"Internal Server Error" : "خطای داخلی سرور",
"Technical details" : "جزئیات فنی",
+ "Remote Address: %s" : "آدرس راه‌دور: %s",
+ "Request ID: %s" : "ID درخواست: %s",
"Type: %s" : "نوع: %s",
"Code: %s" : "کد: %s",
"Message: %s" : "پیام: %s",
"File: %s" : "فایل : %s",
"Line: %s" : "خط: %s",
+ "Security warning" : "اخطار امنیتی",
"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> بسازید",
"Username" : "نام کاربری",
@@ -167,14 +190,22 @@ OC.L10N.register(
"Database name" : "نام پایگاه داده",
"Database tablespace" : "جدول پایگاه داده",
"Database host" : "هاست پایگاه داده",
+ "Performance warning" : "اخطار کارایی",
"Finish setup" : "اتمام نصب",
"Finishing …" : "در حال اتمام ...",
+ "Need help?" : "کمک لازم دارید ؟",
"Log out" : "خروج",
"Search" : "جست‌و‌جو",
+ "Please contact your administrator." : "لطفا با مدیر وب‌سایت تماس بگیرید.",
+ "An internal error occured." : "یک خطای داخلی رخ داده‌است.",
+ "Please try again or contact your administrator." : "لطفا مجددا تلاش کنید یا با مدیر سیستم تماس بگیرید.",
"Log in" : "ورود",
"remember" : "بیاد آوری",
"Alternative Logins" : "ورود متناوب",
"Thank you for your patience." : "از صبر شما متشکریم",
+ "Add \"%s\" as trusted domain" : "افزودن \"%s\" به عنوان دامنه مورد اعتماد",
+ "These apps will be updated:" : "این برنامه‌ها بروزرسانی شده‌اند:",
+ "The theme %s has been disabled." : "قالب %s غیر فعال شد.",
"Start update" : "اغاز به روز رسانی"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/fa.json b/core/l10n/fa.json
index d1dd024ec42..56604614b4f 100644
--- a/core/l10n/fa.json
+++ b/core/l10n/fa.json
@@ -3,8 +3,14 @@
"Preparing update" : "آماده‌سازی به روز‌ رسانی",
"Turned on maintenance mode" : "حالت \" در دست تعمیر \" فعال شد .",
"Turned off maintenance mode" : "حالت \" در دست تعمیر \" غیرفعال شد .",
+ "Maintenance mode is kept active" : "حالت تعمیرات فعال نگه‌داشته شده است",
"Updated database" : "بروز رسانی پایگاه داده انجام شد .",
+ "Updated \"%s\" to %s" : "\"%s\" به %s بروزرسانی شد",
+ "Repair warning: " : "اخطار تعمیر:",
+ "Repair error: " : "خطای تعمیر:",
+ "Already up to date" : "در حال حاضر بروز است",
"File is too big" : "فایل خیلی بزرگ است",
+ "Invalid file provided" : "فایل داده‌شده نا معتبر است",
"No image or file provided" : "هیچ فایل یا تصویری وارد نشده است",
"Unknown filetype" : "نوع فایل ناشناخته",
"Invalid image" : "عکس نامعتبر",
@@ -23,6 +29,13 @@
"Thu." : "پنج شنبه",
"Fri." : "جمعه",
"Sat." : "شنبه",
+ "Su" : "یک‌شنبه",
+ "Mo" : "دوشنبه",
+ "Tu" : "سه‌شنبه",
+ "We" : "چهار‌شنبه",
+ "Th" : "پنج‌شنبه",
+ "Fr" : "جمعه",
+ "Sa" : "شنبه",
"January" : "ژانویه",
"February" : "فبریه",
"March" : "مارس",
@@ -70,6 +83,7 @@
"Continue" : "ادامه",
"(all selected)" : "(همه انتخاب شده اند)",
"({count} selected)" : "({count} انتخاب شده)",
+ "Error loading file exists template" : "خطا در بارگزاری فایل قالب",
"Very weak password" : "رمز عبور بسیار ضعیف",
"Weak password" : "رمز عبور ضعیف",
"So-so password" : "رمز عبور متوسط",
@@ -116,6 +130,7 @@
"Share with users or groups …" : "اشتراک گذاری با کاربران یا گروه ها ...",
"Share with users, groups or remote users …" : "اشتراک گذاری با کاربران، گروه‌ها یا کاربران راه دور...",
"Warning" : "اخطار",
+ "Error while sending notification" : "خطا در حین ارسال نوتیفیکیشن",
"The object type is not specified." : "نوع شی تعیین نشده است.",
"Enter new" : "مورد جدید را وارد کنید",
"Delete" : "حذف",
@@ -124,9 +139,13 @@
"unknown text" : "متن نامعلوم",
"Hello world!" : "سلام دنیا!",
"sunny" : "آفتابی",
+ "Hello {name}, the weather is {weather}" : "سلام {name}, هوا {weather} است",
"Hello {name}" : "سلام {name}",
"_download %n file_::_download %n files_" : ["دانلود %n فایل"],
+ "The update was unsuccessful. " : "بروزرسانی ناموفق بود.",
+ "The update was successful. There were warnings." : "بروزرسانی با موفقیت انجام شد، اخطارهایی وجود دارد.",
"The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.",
+ "%s password reset" : "%s رمزعبور تغییر کرد",
"Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}",
"New password" : "گذرواژه جدید",
"New Password" : "رمزعبور جدید",
@@ -145,14 +164,18 @@
"Error unfavoriting" : "خطا هنگام حذف از موارد محبوب",
"Access forbidden" : "اجازه دسترسی به مناطق ممنوعه را ندارید",
"File not found" : "فایل یافت نشد",
+ "The share will expire on %s." : "اشتراک‌گذاری در %s منقضی خواهد شد.",
"Cheers!" : "سلامتی!",
"Internal Server Error" : "خطای داخلی سرور",
"Technical details" : "جزئیات فنی",
+ "Remote Address: %s" : "آدرس راه‌دور: %s",
+ "Request ID: %s" : "ID درخواست: %s",
"Type: %s" : "نوع: %s",
"Code: %s" : "کد: %s",
"Message: %s" : "پیام: %s",
"File: %s" : "فایل : %s",
"Line: %s" : "خط: %s",
+ "Security warning" : "اخطار امنیتی",
"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> بسازید",
"Username" : "نام کاربری",
@@ -165,14 +188,22 @@
"Database name" : "نام پایگاه داده",
"Database tablespace" : "جدول پایگاه داده",
"Database host" : "هاست پایگاه داده",
+ "Performance warning" : "اخطار کارایی",
"Finish setup" : "اتمام نصب",
"Finishing …" : "در حال اتمام ...",
+ "Need help?" : "کمک لازم دارید ؟",
"Log out" : "خروج",
"Search" : "جست‌و‌جو",
+ "Please contact your administrator." : "لطفا با مدیر وب‌سایت تماس بگیرید.",
+ "An internal error occured." : "یک خطای داخلی رخ داده‌است.",
+ "Please try again or contact your administrator." : "لطفا مجددا تلاش کنید یا با مدیر سیستم تماس بگیرید.",
"Log in" : "ورود",
"remember" : "بیاد آوری",
"Alternative Logins" : "ورود متناوب",
"Thank you for your patience." : "از صبر شما متشکریم",
+ "Add \"%s\" as trusted domain" : "افزودن \"%s\" به عنوان دامنه مورد اعتماد",
+ "These apps will be updated:" : "این برنامه‌ها بروزرسانی شده‌اند:",
+ "The theme %s has been disabled." : "قالب %s غیر فعال شد.",
"Start update" : "اغاز به روز رسانی"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js
index 4bc91566ac2..a0e89b03383 100644
--- a/core/l10n/fi_FI.js
+++ b/core/l10n/fi_FI.js
@@ -110,6 +110,7 @@ OC.L10N.register(
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla <a href=\"{docLink}\">dokumentaatiossa</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Käytössäsi oleva PHP-versio ({version}) ei ole enää <a href=\"{phpLink}\">PHP:n tukema</a>. Päivitä PHP:n versio, jotta hyödyt suorituskykyyn ja tietoturvaan vaikuttavista päivityksistä.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Käänteisen välityspalvelimen otsakkaiden asetukset ovat väärin, tai vaihtoehtoisesti käytät ownCloudia luotetun välityspalvelimen kautta. Jos et käytä ownCloudia luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentää ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached on määritelty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettuna. \\OC\\Memcache\\Memcached tukee vain \"memcached\":ia, ei \"memcache\":a. Lisätietoja <a href=\"{wikiLink}\">memcachedin wikissä molemmista moduuleista</a>.",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.",
diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json
index 36e4bdfe2df..17ca162655f 100644
--- a/core/l10n/fi_FI.json
+++ b/core/l10n/fi_FI.json
@@ -108,6 +108,7 @@
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla <a href=\"{docLink}\">dokumentaatiossa</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Käytössäsi oleva PHP-versio ({version}) ei ole enää <a href=\"{phpLink}\">PHP:n tukema</a>. Päivitä PHP:n versio, jotta hyödyt suorituskykyyn ja tietoturvaan vaikuttavista päivityksistä.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Käänteisen välityspalvelimen otsakkaiden asetukset ovat väärin, tai vaihtoehtoisesti käytät ownCloudia luotetun välityspalvelimen kautta. Jos et käytä ownCloudia luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentää ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached on määritelty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettuna. \\OC\\Memcache\\Memcached tukee vain \"memcached\":ia, ei \"memcache\":a. Lisätietoja <a href=\"{wikiLink}\">memcachedin wikissä molemmista moduuleista</a>.",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index c1ee751df34..17edf5dd286 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Couldn't send mail to following users: %s " : "Nem sikerült e-mailt küldeni a következő felhasználóknak: %s",
"Preparing update" : "Felkészülés a frissítésre",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrációs tesztek kihagyva - „update.skip-migration-test” aktiválva van a config.php fájlban",
"Turned on maintenance mode" : "A karbantartási mód bekapcsolva",
"Turned off maintenance mode" : "A karbantartási mód kikapcsolva",
"Maintenance mode is kept active" : "Karbantartási mód aktiválva marad",
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 55e9e828245..976fd0050fe 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -1,6 +1,7 @@
{ "translations": {
"Couldn't send mail to following users: %s " : "Nem sikerült e-mailt küldeni a következő felhasználóknak: %s",
"Preparing update" : "Felkészülés a frissítésre",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrációs tesztek kihagyva - „update.skip-migration-test” aktiválva van a config.php fájlban",
"Turned on maintenance mode" : "A karbantartási mód bekapcsolva",
"Turned off maintenance mode" : "A karbantartási mód kikapcsolva",
"Maintenance mode is kept active" : "Karbantartási mód aktiválva marad",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index 1409fe93c8c..50f7799ff13 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -110,6 +110,7 @@ OC.L10N.register(
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più <a href=\"{phpLink}\">supportata da PHP</a>. Ti esortiamo ad aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 94d434cffd3..18052b86633 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -108,6 +108,7 @@
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più <a href=\"{phpLink}\">supportata da PHP</a>. Ti esortiamo ad aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
diff --git a/core/l10n/nds.js b/core/l10n/nds.js
index 4cb36aaaaac..9c81f34e70f 100644
--- a/core/l10n/nds.js
+++ b/core/l10n/nds.js
@@ -1,8 +1,115 @@
OC.L10N.register(
"core",
{
- "_{count} file conflict_::_{count} file conflicts_" : ["",""],
- "_download %n file_::_download %n files_" : ["",""],
- "_{count} search result in other places_::_{count} search results in other places_" : ["",""]
+ "Couldn't send mail to following users: %s " : "Senden der E-Mail an folgende Benutzer fehlgeschlagen: %s",
+ "Preparing update" : "Bereite Aktualisierung vor",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrierungstests werden übersprungen - \"update.skip-migration-test\" ist in der config.php aktiviert",
+ "Turned on maintenance mode" : "Wartungsmodus eingeschaltet",
+ "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet",
+ "Maintenance mode is kept active" : "Wartungsmodus wird fortgeführt",
+ "Updated database" : "Datenbank wurde aktualisiert",
+ "Checked database schema update" : "Datenbankschemaaktualisierung wurde geprüft",
+ "Checked database schema update for apps" : "Datenbankschemaaktualisierung für Apps wurde geprüft",
+ "Updated \"%s\" to %s" : "\"%s\" auf %s aktualisiert",
+ "Repair warning: " : "Reparaturwarnung",
+ "Repair error: " : "Reparaturfehler",
+ "Set log level to debug - current level: \"%s\"" : "Protokollierungsstufe auf Debug gesetzt - Aktuelle Stufe: \"%s\"",
+ "Reset log level to \"%s\"" : "Protokollierungsstufe auf \"%s\" zurückgesetzt",
+ "Following incompatible apps have been disabled: %s" : "Folgende inkompatible Apps wurden deaktiviert: %s",
+ "Following apps have been disabled: %s" : "Folgende Apps wurden deaktiviert: %s",
+ "Already up to date" : "Bereits aktuell",
+ "File is too big" : "Datei ist zu groß",
+ "Invalid file provided" : "Ungültige Datei geliefert",
+ "No image or file provided" : "Kein Bild oder keine Datei geliefert",
+ "Unknown filetype" : "Unbekannter Dateityp",
+ "Invalid image" : "Ungültiges Bild",
+ "No temporary profile picture available, try again" : "Kein flüchtiges Profilbild verfügbar, bitte versuche es noch einmal",
+ "No crop data provided" : "Keine Angaben zum Zuschneiden geliefert",
+ "No valid crop data provided" : "Keine gültigen Angaben zum Zuschnitt geliefert",
+ "Crop is not square" : "Zuschnitt ist nicht quadratisch",
+ "Sunday" : "Sonntag",
+ "Monday" : "Montag",
+ "Tuesday" : "Dienstag",
+ "Wednesday" : "Mittwoch",
+ "Thursday" : "Donnerstag",
+ "Friday" : "Freitag",
+ "Saturday" : "Samstag",
+ "Sun." : "Son.",
+ "Mon." : "Mon.",
+ "Tue." : "Die.",
+ "Wed." : "Mit.",
+ "Thu." : "Don.",
+ "Fri." : "Fre.",
+ "Sat." : "Sam.",
+ "Su" : "So",
+ "Mo" : "Mo",
+ "Tu" : "Di",
+ "We" : "Mi",
+ "Th" : "Do",
+ "Fr" : "Fr",
+ "Sa" : "Sa",
+ "January" : "Januar",
+ "February" : "Februar",
+ "March" : "März",
+ "April" : "April",
+ "May" : "Mai",
+ "June" : "Juni",
+ "July" : "Juli",
+ "August" : "August",
+ "September" : "September",
+ "October" : "Oktober",
+ "November" : "November",
+ "December" : "Dezember",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mrz.",
+ "Apr." : "Apr.",
+ "May." : "Mai.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dez.",
+ "Settings" : "Einstellungen",
+ "Saving..." : "Speichern...",
+ "seconds ago" : "vor wenigen Sekunden",
+ "Couldn't send reset email. Please contact your administrator." : "E-Mail zum Zurücksetzen konnte nicht gesendet werden. Bitte wende Dich an Deinem 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." : "Der Link zum Zurücksetzen deines Passworts wurde an Deine E-Mailadresse geschickt. Wenn Du diesen in einer angemessenen Zeit nicht erhältst, prüfe bitte deine Spam/Junk Ordner.<br> Wenn die E-Mail dort nicht ist, wende Dich an 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?" : "Deine Dateien sind verschlüsselt. Wenn Dein Wiederherstellungsschlüssel nicht aktiviert ist, gibt es keine Möglichkeit die Daten wiederherzustellen, nachdem Dein Passwort zurückgesetzt wurde.<br /> Wenn Du nicht sicher weißt was zu tun ist, wende Dich bitte an deinen Adminstrator bevor du fortfährst.<br />Willst du wirklich fortfahren?",
+ "I know what I'm doing" : "Ich weiß was ich tue",
+ "Password can not be changed. Please contact your administrator." : "Das Passwort kann nicht geändert werden. Bitte wende Dich an Deinen Administrator.",
+ "No" : "Nein",
+ "Yes" : "Ja",
+ "Choose" : "Auswählen",
+ "Error loading file picker template: {error}" : "Fehler beim Laden der Vorlage zum Auswählen von Dateien: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Fehler beim Laden der Nachrichtenvorlage: {error}",
+ "read-only" : "Nur Lesezugriff",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} Dateikonflikt","{count} Dateikonflikte"],
+ "One file conflict" : "Ein Dateikonflikt",
+ "New Files" : "Neue Dateien",
+ "Already existing files" : "Bereits vorhandene Dateien",
+ "Which files do you want to keep?" : "Welche Dateien willst du behalten?",
+ "If you select both versions, the copied file will have a number added to its name." : "Wenn Du beide Versionen behältst, wird eine Nummer an den Namen der kopierten Datei angehängt.",
+ "Cancel" : "Abbrechen",
+ "Continue" : "Fortsetzen",
+ "(all selected)" : "(alle ausgewählt)",
+ "({count} selected)" : "({count} ausgewählt)",
+ "Error loading file exists template" : "Fehler beim Laden der Vorlage \"Datei existiert\"",
+ "Very weak password" : "Sehr schwaches Passwort",
+ "Weak password" : "Schwaches Passwort",
+ "So-so password" : "Mittelstarkes Passwort",
+ "Good password" : "Gutes Passwort",
+ "Strong password" : "Starkes Passwort",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist für die Dateisynchronisierung noch nicht ordentlich eingerichtet, da die WebDAV-Schnittstelle fehlerhaft scheint. ",
+ "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server ist nicht mit dem Internet verbunden. Das bedeutet, dass manche Funktionen, wie das Einbinden von externen Speichern, Benachrichtigungen über Aktualisierungen oder die Installation von Drittanbieter Apps nicht zur Verfügung stehen. Auch der Fernzugriff auf Dateien und das Senden von Hinweis-E-Mails könnte nicht funktionieren. Wir empfehlen die Internetverbindung dieses Servers zu aktivieren, wenn Du diese Funktionen nutzen möchtest.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Der Zugriff auf Dein Datenverzeichnis und Deine Dateien ist über das Internet vermutlich möglich. Die .htaccess-Datei greift nicht. Wir empfehlen dringend den Webserver derart zu konfigurieren, dass das Datenverzeichnis nicht mehr zugreifbar ist oder das Datenverzeichnis nach außerhalb des Dokumentenwurzelverzeichnisses des Webservers zu verschieben.",
+ "Password" : "Passwort",
+ "Share" : "Teilen",
+ "Delete" : "Löschen",
+ "Personal" : "Persönlich",
+ "Username" : "Benutzername"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nds.json b/core/l10n/nds.json
index 43fce52c5cf..e62ab93e307 100644
--- a/core/l10n/nds.json
+++ b/core/l10n/nds.json
@@ -1,6 +1,113 @@
{ "translations": {
- "_{count} file conflict_::_{count} file conflicts_" : ["",""],
- "_download %n file_::_download %n files_" : ["",""],
- "_{count} search result in other places_::_{count} search results in other places_" : ["",""]
+ "Couldn't send mail to following users: %s " : "Senden der E-Mail an folgende Benutzer fehlgeschlagen: %s",
+ "Preparing update" : "Bereite Aktualisierung vor",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Migrierungstests werden übersprungen - \"update.skip-migration-test\" ist in der config.php aktiviert",
+ "Turned on maintenance mode" : "Wartungsmodus eingeschaltet",
+ "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet",
+ "Maintenance mode is kept active" : "Wartungsmodus wird fortgeführt",
+ "Updated database" : "Datenbank wurde aktualisiert",
+ "Checked database schema update" : "Datenbankschemaaktualisierung wurde geprüft",
+ "Checked database schema update for apps" : "Datenbankschemaaktualisierung für Apps wurde geprüft",
+ "Updated \"%s\" to %s" : "\"%s\" auf %s aktualisiert",
+ "Repair warning: " : "Reparaturwarnung",
+ "Repair error: " : "Reparaturfehler",
+ "Set log level to debug - current level: \"%s\"" : "Protokollierungsstufe auf Debug gesetzt - Aktuelle Stufe: \"%s\"",
+ "Reset log level to \"%s\"" : "Protokollierungsstufe auf \"%s\" zurückgesetzt",
+ "Following incompatible apps have been disabled: %s" : "Folgende inkompatible Apps wurden deaktiviert: %s",
+ "Following apps have been disabled: %s" : "Folgende Apps wurden deaktiviert: %s",
+ "Already up to date" : "Bereits aktuell",
+ "File is too big" : "Datei ist zu groß",
+ "Invalid file provided" : "Ungültige Datei geliefert",
+ "No image or file provided" : "Kein Bild oder keine Datei geliefert",
+ "Unknown filetype" : "Unbekannter Dateityp",
+ "Invalid image" : "Ungültiges Bild",
+ "No temporary profile picture available, try again" : "Kein flüchtiges Profilbild verfügbar, bitte versuche es noch einmal",
+ "No crop data provided" : "Keine Angaben zum Zuschneiden geliefert",
+ "No valid crop data provided" : "Keine gültigen Angaben zum Zuschnitt geliefert",
+ "Crop is not square" : "Zuschnitt ist nicht quadratisch",
+ "Sunday" : "Sonntag",
+ "Monday" : "Montag",
+ "Tuesday" : "Dienstag",
+ "Wednesday" : "Mittwoch",
+ "Thursday" : "Donnerstag",
+ "Friday" : "Freitag",
+ "Saturday" : "Samstag",
+ "Sun." : "Son.",
+ "Mon." : "Mon.",
+ "Tue." : "Die.",
+ "Wed." : "Mit.",
+ "Thu." : "Don.",
+ "Fri." : "Fre.",
+ "Sat." : "Sam.",
+ "Su" : "So",
+ "Mo" : "Mo",
+ "Tu" : "Di",
+ "We" : "Mi",
+ "Th" : "Do",
+ "Fr" : "Fr",
+ "Sa" : "Sa",
+ "January" : "Januar",
+ "February" : "Februar",
+ "March" : "März",
+ "April" : "April",
+ "May" : "Mai",
+ "June" : "Juni",
+ "July" : "Juli",
+ "August" : "August",
+ "September" : "September",
+ "October" : "Oktober",
+ "November" : "November",
+ "December" : "Dezember",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mrz.",
+ "Apr." : "Apr.",
+ "May." : "Mai.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dez.",
+ "Settings" : "Einstellungen",
+ "Saving..." : "Speichern...",
+ "seconds ago" : "vor wenigen Sekunden",
+ "Couldn't send reset email. Please contact your administrator." : "E-Mail zum Zurücksetzen konnte nicht gesendet werden. Bitte wende Dich an Deinem 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." : "Der Link zum Zurücksetzen deines Passworts wurde an Deine E-Mailadresse geschickt. Wenn Du diesen in einer angemessenen Zeit nicht erhältst, prüfe bitte deine Spam/Junk Ordner.<br> Wenn die E-Mail dort nicht ist, wende Dich an 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?" : "Deine Dateien sind verschlüsselt. Wenn Dein Wiederherstellungsschlüssel nicht aktiviert ist, gibt es keine Möglichkeit die Daten wiederherzustellen, nachdem Dein Passwort zurückgesetzt wurde.<br /> Wenn Du nicht sicher weißt was zu tun ist, wende Dich bitte an deinen Adminstrator bevor du fortfährst.<br />Willst du wirklich fortfahren?",
+ "I know what I'm doing" : "Ich weiß was ich tue",
+ "Password can not be changed. Please contact your administrator." : "Das Passwort kann nicht geändert werden. Bitte wende Dich an Deinen Administrator.",
+ "No" : "Nein",
+ "Yes" : "Ja",
+ "Choose" : "Auswählen",
+ "Error loading file picker template: {error}" : "Fehler beim Laden der Vorlage zum Auswählen von Dateien: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Fehler beim Laden der Nachrichtenvorlage: {error}",
+ "read-only" : "Nur Lesezugriff",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} Dateikonflikt","{count} Dateikonflikte"],
+ "One file conflict" : "Ein Dateikonflikt",
+ "New Files" : "Neue Dateien",
+ "Already existing files" : "Bereits vorhandene Dateien",
+ "Which files do you want to keep?" : "Welche Dateien willst du behalten?",
+ "If you select both versions, the copied file will have a number added to its name." : "Wenn Du beide Versionen behältst, wird eine Nummer an den Namen der kopierten Datei angehängt.",
+ "Cancel" : "Abbrechen",
+ "Continue" : "Fortsetzen",
+ "(all selected)" : "(alle ausgewählt)",
+ "({count} selected)" : "({count} ausgewählt)",
+ "Error loading file exists template" : "Fehler beim Laden der Vorlage \"Datei existiert\"",
+ "Very weak password" : "Sehr schwaches Passwort",
+ "Weak password" : "Schwaches Passwort",
+ "So-so password" : "Mittelstarkes Passwort",
+ "Good password" : "Gutes Passwort",
+ "Strong password" : "Starkes Passwort",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist für die Dateisynchronisierung noch nicht ordentlich eingerichtet, da die WebDAV-Schnittstelle fehlerhaft scheint. ",
+ "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server ist nicht mit dem Internet verbunden. Das bedeutet, dass manche Funktionen, wie das Einbinden von externen Speichern, Benachrichtigungen über Aktualisierungen oder die Installation von Drittanbieter Apps nicht zur Verfügung stehen. Auch der Fernzugriff auf Dateien und das Senden von Hinweis-E-Mails könnte nicht funktionieren. Wir empfehlen die Internetverbindung dieses Servers zu aktivieren, wenn Du diese Funktionen nutzen möchtest.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Der Zugriff auf Dein Datenverzeichnis und Deine Dateien ist über das Internet vermutlich möglich. Die .htaccess-Datei greift nicht. Wir empfehlen dringend den Webserver derart zu konfigurieren, dass das Datenverzeichnis nicht mehr zugreifbar ist oder das Datenverzeichnis nach außerhalb des Dokumentenwurzelverzeichnisses des Webservers zu verschieben.",
+ "Password" : "Passwort",
+ "Share" : "Teilen",
+ "Delete" : "Löschen",
+ "Personal" : "Persönlich",
+ "Username" : "Benutzername"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 895fab159f3..fc5b0c053dd 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -110,6 +110,7 @@ OC.L10N.register(
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentation</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é <a href=\"{phpLink}\">suportada pela PHP</a>. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidos pela PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentação</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached somente suporta \"memcached\" e não \"memcache\". Veja o <a href=\"{wikiLink}\">memcached wiki sobre esse módulo</a>.",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 817c9e1fa98..90d361b57f6 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -108,6 +108,7 @@
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentation</a>.",
"Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é <a href=\"{phpLink}\">suportada pela PHP</a>. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidos pela PHP.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentação</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached somente suporta \"memcached\" e não \"memcache\". Veja o <a href=\"{wikiLink}\">memcached wiki sobre esse módulo</a>.",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
"The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index b2ef1b422fe..eadbc2eac72 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -2,6 +2,8 @@ OC.L10N.register(
"core",
{
"Couldn't send mail to following users: %s " : "Невозможно отправить письмо следующим пользователям: %s",
+ "Preparing update" : "Подготовка к обновлению",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Миграционные тесты пропущены - параметр \"update.skip-migration-test\" указан в config.php",
"Turned on maintenance mode" : "Режим отладки включён",
"Turned off maintenance mode" : "Режим отладки отключён",
"Maintenance mode is kept active" : "Режим обслуживания оставлен включенным",
@@ -11,8 +13,11 @@ OC.L10N.register(
"Updated \"%s\" to %s" : "Обновлено \"%s\" до %s",
"Repair warning: " : "Предупреждение восстановления:",
"Repair error: " : "Ошибка восстановления:",
+ "Set log level to debug - current level: \"%s\"" : "Установить отладочное журналирование - текущий уровень: \"%s\"",
+ "Reset log level to \"%s\"" : "Сбросить уровень журналирования в \"%s\"",
"Following incompatible apps have been disabled: %s" : "Следующие несовместимые приложения были отключены: %s",
"Following apps have been disabled: %s" : "Были отключены следующие приложения: %s",
+ "Already up to date" : "Не нуждается в обновлении",
"File is too big" : "Файл слишком большой",
"Invalid file provided" : "Указан неправильный файл",
"No image or file provided" : "Не указано изображение или файл",
@@ -36,6 +41,13 @@ OC.L10N.register(
"Thu." : "Чт.",
"Fri." : "Пт.",
"Sat." : "Сб.",
+ "Su" : "Вс",
+ "Mo" : "Пн",
+ "Tu" : "Вт",
+ "We" : "Ср",
+ "Th" : "Чт",
+ "Fr" : "Пт",
+ "Sa" : "Сб",
"January" : "Январь",
"February" : "Февраль",
"March" : "Март",
@@ -137,12 +149,14 @@ OC.L10N.register(
"change" : "изменить",
"delete" : "удалить",
"access control" : "контроль доступа",
+ "Share details could not be loaded for this item." : "Информация об общем доступе для этого элемента не может быть загружена.",
"An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз",
"Share" : "Поделиться",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud",
"Share with users or groups …" : "Поделиться с пользователями или группами ...",
"Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...",
"Warning" : "Предупреждение",
+ "Error while sending notification" : "Ошибка отправки уведомления",
"The object type is not specified." : "Тип объекта не указан",
"Enter new" : "Ввести новое",
"Delete" : "Удалить",
@@ -163,6 +177,7 @@ OC.L10N.register(
"The update was successful. There were warnings." : "Обновление прошло успешно. Были предупреждения.",
"The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляем в ownCloud.",
"Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль из-за неверного токена",
+ "Couldn't reset password because the token is expired" : "Не удается сбросить пароль, так как токен истек.",
"Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Убедитесь, что имя пользователя указано верно.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо для сброса пароля, для вашей учетной записи не указан адрес электронной почты. Пожалуйста, свяжитесь с администратором.",
"%s password reset" : "Сброс пароля %s",
@@ -171,6 +186,8 @@ OC.L10N.register(
"New Password" : "Новый пароль",
"Reset password" : "Сбросить пароль",
"Searching other places" : "Идет поиск в других местах",
+ "No search results in other folders" : "Нет результатов поиска в других папках",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} результат в другой папке","{count} результата в другой папке","{count} результатов в другой папке","{count} результатов в другой папке"],
"Personal" : "Личное",
"Users" : "Пользователи",
"Apps" : "Приложения",
@@ -247,6 +264,10 @@ OC.L10N.register(
"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\" как доверенный домен",
+ "App update required" : "Требуется обновление приложения",
+ "%s will be updated to version %s" : "%s будет обновлен до версии %s",
+ "These apps will be updated:" : "Следующие приложения будут обновлены:",
+ "These incompatible apps will be disabled:" : "Эти несовместимые приложения будут отключены:",
"The theme %s has been disabled." : "Тема %s была отключена.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед продолжением убедитесь, что вы сделали резервную копию базы данных, каталога конфигурации и каталога с данными.",
"Start update" : "Запустить обновление",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index 46ee1af1afe..54b96e373f2 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -1,5 +1,7 @@
{ "translations": {
"Couldn't send mail to following users: %s " : "Невозможно отправить письмо следующим пользователям: %s",
+ "Preparing update" : "Подготовка к обновлению",
+ "Migration tests are skipped - \"update.skip-migration-test\" is activated in config.php" : "Миграционные тесты пропущены - параметр \"update.skip-migration-test\" указан в config.php",
"Turned on maintenance mode" : "Режим отладки включён",
"Turned off maintenance mode" : "Режим отладки отключён",
"Maintenance mode is kept active" : "Режим обслуживания оставлен включенным",
@@ -9,8 +11,11 @@
"Updated \"%s\" to %s" : "Обновлено \"%s\" до %s",
"Repair warning: " : "Предупреждение восстановления:",
"Repair error: " : "Ошибка восстановления:",
+ "Set log level to debug - current level: \"%s\"" : "Установить отладочное журналирование - текущий уровень: \"%s\"",
+ "Reset log level to \"%s\"" : "Сбросить уровень журналирования в \"%s\"",
"Following incompatible apps have been disabled: %s" : "Следующие несовместимые приложения были отключены: %s",
"Following apps have been disabled: %s" : "Были отключены следующие приложения: %s",
+ "Already up to date" : "Не нуждается в обновлении",
"File is too big" : "Файл слишком большой",
"Invalid file provided" : "Указан неправильный файл",
"No image or file provided" : "Не указано изображение или файл",
@@ -34,6 +39,13 @@
"Thu." : "Чт.",
"Fri." : "Пт.",
"Sat." : "Сб.",
+ "Su" : "Вс",
+ "Mo" : "Пн",
+ "Tu" : "Вт",
+ "We" : "Ср",
+ "Th" : "Чт",
+ "Fr" : "Пт",
+ "Sa" : "Сб",
"January" : "Январь",
"February" : "Февраль",
"March" : "Март",
@@ -135,12 +147,14 @@
"change" : "изменить",
"delete" : "удалить",
"access control" : "контроль доступа",
+ "Share details could not be loaded for this item." : "Информация об общем доступе для этого элемента не может быть загружена.",
"An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз",
"Share" : "Поделиться",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud",
"Share with users or groups …" : "Поделиться с пользователями или группами ...",
"Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...",
"Warning" : "Предупреждение",
+ "Error while sending notification" : "Ошибка отправки уведомления",
"The object type is not specified." : "Тип объекта не указан",
"Enter new" : "Ввести новое",
"Delete" : "Удалить",
@@ -161,6 +175,7 @@
"The update was successful. There were warnings." : "Обновление прошло успешно. Были предупреждения.",
"The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляем в ownCloud.",
"Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль из-за неверного токена",
+ "Couldn't reset password because the token is expired" : "Не удается сбросить пароль, так как токен истек.",
"Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Убедитесь, что имя пользователя указано верно.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо для сброса пароля, для вашей учетной записи не указан адрес электронной почты. Пожалуйста, свяжитесь с администратором.",
"%s password reset" : "Сброс пароля %s",
@@ -169,6 +184,8 @@
"New Password" : "Новый пароль",
"Reset password" : "Сбросить пароль",
"Searching other places" : "Идет поиск в других местах",
+ "No search results in other folders" : "Нет результатов поиска в других папках",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} результат в другой папке","{count} результата в другой папке","{count} результатов в другой папке","{count} результатов в другой папке"],
"Personal" : "Личное",
"Users" : "Пользователи",
"Apps" : "Приложения",
@@ -245,6 +262,10 @@
"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\" как доверенный домен",
+ "App update required" : "Требуется обновление приложения",
+ "%s will be updated to version %s" : "%s будет обновлен до версии %s",
+ "These apps will be updated:" : "Следующие приложения будут обновлены:",
+ "These incompatible apps will be disabled:" : "Эти несовместимые приложения будут отключены:",
"The theme %s has been disabled." : "Тема %s была отключена.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед продолжением убедитесь, что вы сделали резервную копию базы данных, каталога конфигурации и каталога с данными.",
"Start update" : "Запустить обновление",
diff --git a/lib/l10n/fa.js b/lib/l10n/fa.js
index bd6435da10d..8658c4bf7fc 100644
--- a/lib/l10n/fa.js
+++ b/lib/l10n/fa.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"Cannot write into \"config\" directory!" : "نمیتوانید داخل دایرکتوری \"config\" تغییراتی ایجاد کنید",
"See %s" : "مشاهده %s",
"Sample configuration detected" : "فایل پیکربندی نمونه پیدا شد",
+ "PHP %s or higher is required." : "PHP نسخه‌ی %s یا بالاتر نیاز است.",
"Following databases are supported: %s" : "پایگاه‌داده‌ های ذکر شده مورد نیاز است: %s",
"The command line tool %s could not be found" : "ابزار کامندلاین %s پیدا نشد",
"Help" : "راه‌نما",
diff --git a/lib/l10n/fa.json b/lib/l10n/fa.json
index 620a0ef2ffc..b1ffa2ac122 100644
--- a/lib/l10n/fa.json
+++ b/lib/l10n/fa.json
@@ -2,6 +2,7 @@
"Cannot write into \"config\" directory!" : "نمیتوانید داخل دایرکتوری \"config\" تغییراتی ایجاد کنید",
"See %s" : "مشاهده %s",
"Sample configuration detected" : "فایل پیکربندی نمونه پیدا شد",
+ "PHP %s or higher is required." : "PHP نسخه‌ی %s یا بالاتر نیاز است.",
"Following databases are supported: %s" : "پایگاه‌داده‌ های ذکر شده مورد نیاز است: %s",
"The command line tool %s could not be found" : "ابزار کامندلاین %s پیدا نشد",
"Help" : "راه‌نما",
diff --git a/lib/l10n/nds.js b/lib/l10n/nds.js
index a12702211c2..04b6bdf25a8 100644
--- a/lib/l10n/nds.js
+++ b/lib/l10n/nds.js
@@ -1,10 +1,9 @@
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_" : ["",""]
+ "Personal" : "Persönlich",
+ "Unknown filetype" : "Unbekannter Dateityp",
+ "Invalid image" : "Ungültiges Bild",
+ "seconds ago" : "vor wenigen Sekunden"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/nds.json b/lib/l10n/nds.json
index b994fa289eb..1c9232d838a 100644
--- a/lib/l10n/nds.json
+++ b/lib/l10n/nds.json
@@ -1,8 +1,7 @@
{ "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_" : ["",""]
+ "Personal" : "Persönlich",
+ "Unknown filetype" : "Unbekannter Dateityp",
+ "Invalid image" : "Ungültiges Bild",
+ "seconds ago" : "vor wenigen Sekunden"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 215bd4f0ebb..7ef161a96a0 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -49,6 +49,7 @@ OC.L10N.register(
"Can't read file" : "Не удается прочитать файл",
"App directory already exists" : "Каталог приложения уже существует",
"Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог. Исправьте права доступа. %s",
+ "Archive does not contain a directory named %s" : "Архив не содержит папки с именем %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
"No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
"No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
@@ -90,6 +91,7 @@ OC.L10N.register(
"Sharing %s failed, because the user %s does not exist" : "Не удалось поделиться %s, пользователь %s не существует.",
"Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Не удалось поделиться %s, пользователь %s не состоит в какой-либо группе в которой состоит %s",
"Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу",
+ "Sharing %s failed, because this item is already shared with user %s" : "Не удалось поделиться %s, так как элемент находится в общем доступе у %s",
"Sharing %s failed, because the group %s does not exist" : "Не удалось поделиться %s, группа %s не существует",
"Sharing %s failed, because %s is not a member of the group %s" : "Не удалось поделиться %s, пользователь %s не является членом группы %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Вам нужно задать пароль для создания публичной ссылки. Разрешены только защищённые ссылки",
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index a0120518dfa..206f7371472 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -47,6 +47,7 @@
"Can't read file" : "Не удается прочитать файл",
"App directory already exists" : "Каталог приложения уже существует",
"Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог. Исправьте права доступа. %s",
+ "Archive does not contain a directory named %s" : "Архив не содержит папки с именем %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
"No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
"No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
@@ -88,6 +89,7 @@
"Sharing %s failed, because the user %s does not exist" : "Не удалось поделиться %s, пользователь %s не существует.",
"Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Не удалось поделиться %s, пользователь %s не состоит в какой-либо группе в которой состоит %s",
"Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу",
+ "Sharing %s failed, because this item is already shared with user %s" : "Не удалось поделиться %s, так как элемент находится в общем доступе у %s",
"Sharing %s failed, because the group %s does not exist" : "Не удалось поделиться %s, группа %s не существует",
"Sharing %s failed, because %s is not a member of the group %s" : "Не удалось поделиться %s, пользователь %s не является членом группы %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Вам нужно задать пароль для создания публичной ссылки. Разрешены только защищённые ссылки",
diff --git a/lib/private/appframework/http/request.php b/lib/private/appframework/http/request.php
index 29414b92f7c..cfd903bffe5 100644
--- a/lib/private/appframework/http/request.php
+++ b/lib/private/appframework/http/request.php
@@ -553,6 +553,27 @@ class Request implements \ArrayAccess, \Countable, IRequest {
}
/**
+ * Returns the used HTTP protocol.
+ *
+ * @return string HTTP protocol. HTTP/2, HTTP/1.1 or HTTP/1.0.
+ */
+ public function getHttpProtocol() {
+ $claimedProtocol = strtoupper($this->server['SERVER_PROTOCOL']);
+
+ $validProtocols = [
+ 'HTTP/1.0',
+ 'HTTP/1.1',
+ 'HTTP/2',
+ ];
+
+ if(in_array($claimedProtocol, $validProtocols, true)) {
+ return $claimedProtocol;
+ }
+
+ return 'HTTP/1.1';
+ }
+
+ /**
* Returns the request uri, even if the website uses one or more
* reverse proxies
* @return string
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
index 84620f454aa..ab7f6884a5e 100644
--- a/lib/private/connector/sabre/filesplugin.php
+++ b/lib/private/connector/sabre/filesplugin.php
@@ -64,10 +64,20 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
private $isPublic;
/**
+ * @var \OC\Files\View
+ */
+ private $fileView;
+
+ /**
* @param \Sabre\DAV\Tree $tree
+ * @param \OC\Files\View $view
+ * @param bool $isPublic
*/
- public function __construct(\Sabre\DAV\Tree $tree, $isPublic = false) {
+ public function __construct(\Sabre\DAV\Tree $tree,
+ \OC\Files\View $view,
+ $isPublic = false) {
$this->tree = $tree;
+ $this->fileView = $view;
$this->isPublic = $isPublic;
}
@@ -106,6 +116,26 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
fclose($body);
}
});
+ $this->server->on('beforeMove', [$this, 'checkMove']);
+ }
+
+ /**
+ * Plugin that checks if a move can actually be performed.
+ * @param string $source source path
+ * @param string $destination destination path
+ * @throws \Sabre\DAV\Exception\Forbidden
+ */
+ function checkMove($source, $destination) {
+ list($sourceDir,) = \Sabre\HTTP\URLUtil::splitPath($source);
+ list($destinationDir,) = \Sabre\HTTP\URLUtil::splitPath($destination);
+
+ if ($sourceDir !== $destinationDir) {
+ $sourceFileInfo = $this->fileView->getFileInfo($source);
+
+ if (!$sourceFileInfo->isDeletable()) {
+ throw new \Sabre\DAV\Exception\Forbidden($source . " cannot be deleted");
+ }
+ }
}
/**
diff --git a/lib/private/connector/sabre/serverfactory.php b/lib/private/connector/sabre/serverfactory.php
index a0c32c1da53..893e29fd41c 100644
--- a/lib/private/connector/sabre/serverfactory.php
+++ b/lib/private/connector/sabre/serverfactory.php
@@ -72,7 +72,6 @@ class ServerFactory {
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
// FIXME: The following line is a workaround for legacy components relying on being able to send a GET to /
$server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin());
- $server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
$server->addPlugin(new \OC\Connector\Sabre\ExceptionLoggerPlugin('webdav', $this->logger));
$server->addPlugin(new \OC\Connector\Sabre\LockPlugin($objectTree));
$server->addPlugin(new \OC\Connector\Sabre\ListenerPlugin($this->dispatcher));
@@ -91,6 +90,7 @@ class ServerFactory {
}
$objectTree->init($root, $view, $this->mountManager);
+ $server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree, $view));
$server->addPlugin(new \OC\Connector\Sabre\QuotaPlugin($view));
if($this->userSession->isLoggedIn()) {
diff --git a/lib/private/files.php b/lib/private/files.php
index ad03904e036..e24e10ec299 100644
--- a/lib/private/files.php
+++ b/lib/private/files.php
@@ -82,6 +82,9 @@ class OC_Files {
if (is_array($files) && count($files) === 1) {
$files = $files[0];
+ }
+
+ if (!is_array($files)) {
$filename = $dir . '/' . $files;
if (!$view->is_dir($files)) {
self::getSingleFile($view, $dir, $files, $onlyHeader);
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 49eeb3829c4..932586b5c27 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -1099,6 +1099,7 @@ class Share extends Constants {
'uidOwner' => \OC_User::getUser(),
'permissions' => $permissions,
'path' => $item['path'],
+ 'share' => $item
));
}
// Check if permissions were removed
@@ -1109,16 +1110,18 @@ class Share extends Constants {
Helper::delete($item['id'], true, null, null, true);
} else {
$ids = array();
+ $items = [];
$parents = array($item['id']);
while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'";
- $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share`'
+ $query = \OC_DB::prepare('SELECT `id`, `permissions`, `item_type` FROM `*PREFIX*share`'
.' WHERE `parent` IN ('.$parents.')');
$result = $query->execute();
// Reset parents array, only go through loop again if
// items are found that need permissions removed
$parents = array();
while ($item = $result->fetchRow()) {
+ $items[] = $item;
// Check if permissions need to be removed
if ($item['permissions'] & ~$permissions) {
// Add to list of items that need permissions removed
@@ -1140,8 +1143,13 @@ class Share extends Constants {
.' WHERE `id` IN ('.$ids.')');
$query->execute(array($permissions));
}
+
+ foreach ($items as $item) {
+ \OC_Hook::emit('OCP\Share', 'post_update_permissions', ['share' => $item]);
+ }
}
}
+
return true;
}
$message = 'Setting permissions for %s failed, because the item was not found';
diff --git a/lib/private/streamer.php b/lib/private/streamer.php
index 6db6fe42a79..a08c8444f02 100644
--- a/lib/private/streamer.php
+++ b/lib/private/streamer.php
@@ -39,7 +39,7 @@ class Streamer {
if ($request->isUserAgent($this->preferTarFor)) {
$this->streamerInstance = new TarStreamer();
} else {
- $this->streamerInstance = new ZipStreamer();
+ $this->streamerInstance = new ZipStreamer(['zip64' => PHP_INT_SIZE !== 4]);
}
}
diff --git a/lib/private/template.php b/lib/private/template.php
index e22f153e601..0deb26d8f19 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -70,7 +70,7 @@ class OC_Template extends \OC\Template\Base {
public function __construct( $app, $name, $renderAs = "", $registerCall = true ) {
// Read the selected theme from the config file
- self::initTemplateEngine();
+ self::initTemplateEngine($renderAs);
$theme = OC_Util::getTheme();
@@ -90,13 +90,13 @@ class OC_Template extends \OC\Template\Base {
parent::__construct($template, $requesttoken, $l10n, $themeDefaults);
}
- public static function initTemplateEngine() {
+ public static function initTemplateEngine($renderAs) {
if (self::$initTemplateEngineFirstRun){
//apps that started before the template initialization can load their own scripts/styles
//so to make sure this scripts/styles here are loaded first we use OC_Util::addScript() with $prepend=true
//meaning the last script/style in this list will be loaded first
- if (\OC::$server->getSystemConfig ()->getValue ( 'installed', false ) && ! \OCP\Util::needUpgrade ()) {
+ if (\OC::$server->getSystemConfig()->getValue ('installed', false) && $renderAs !== 'error' && !\OCP\Util::needUpgrade()) {
if (\OC::$server->getConfig ()->getAppValue ( 'core', 'backgroundjobs_mode', 'ajax' ) == 'ajax') {
OC_Util::addScript ( 'backgroundjobs', null, true );
}
@@ -301,10 +301,20 @@ class OC_Template extends \OC\Template\Base {
* @param string $hint An optional hint message - needs to be properly escaped
*/
public static function printErrorPage( $error_msg, $hint = '' ) {
- $content = new \OC_Template( '', 'error', 'error', false );
- $errors = array(array('error' => $error_msg, 'hint' => $hint));
- $content->assign( 'errors', $errors );
- $content->printPage();
+ try {
+ $content = new \OC_Template( '', 'error', 'error', false );
+ $errors = array(array('error' => $error_msg, 'hint' => $hint));
+ $content->assign( 'errors', $errors );
+ $content->printPage();
+ } catch (\Exception $e) {
+ $logger = \OC::$server->getLogger();
+ $logger->error("$error_msg $hint", ['app' => 'core']);
+ $logger->logException($e, ['app' => 'core']);
+
+ header(self::getHttpProtocol() . ' 500 Internal Server Error');
+ header('Content-Type: text/plain; charset=utf-8');
+ print("$error_msg $hint");
+ }
die();
}
@@ -313,22 +323,57 @@ class OC_Template extends \OC\Template\Base {
* @param Exception $exception
*/
public static function printExceptionErrorPage($exception) {
- $request = \OC::$server->getRequest();
- $content = new \OC_Template('', 'exception', 'error', false);
- $content->assign('errorClass', get_class($exception));
- $content->assign('errorMsg', $exception->getMessage());
- $content->assign('errorCode', $exception->getCode());
- $content->assign('file', $exception->getFile());
- $content->assign('line', $exception->getLine());
- $content->assign('trace', $exception->getTraceAsString());
- $content->assign('debugMode', \OC::$server->getSystemConfig()->getValue('debug', false));
- $content->assign('remoteAddr', $request->getRemoteAddress());
- $content->assign('requestID', $request->getId());
- $content->printPage();
+ try {
+ $request = \OC::$server->getRequest();
+ $content = new \OC_Template('', 'exception', 'error', false);
+ $content->assign('errorClass', get_class($exception));
+ $content->assign('errorMsg', $exception->getMessage());
+ $content->assign('errorCode', $exception->getCode());
+ $content->assign('file', $exception->getFile());
+ $content->assign('line', $exception->getLine());
+ $content->assign('trace', $exception->getTraceAsString());
+ $content->assign('debugMode', \OC::$server->getSystemConfig()->getValue('debug', false));
+ $content->assign('remoteAddr', $request->getRemoteAddress());
+ $content->assign('requestID', $request->getId());
+ $content->printPage();
+ } catch (\Exception $e) {
+ $logger = \OC::$server->getLogger();
+ $logger->logException($exception, ['app' => 'core']);
+ $logger->logException($e, ['app' => 'core']);
+
+ header(self::getHttpProtocol() . ' 500 Internal Server Error');
+ header('Content-Type: text/plain; charset=utf-8');
+ print("Internal Server Error\n\n");
+ print("The server encountered an internal error and was unable to complete your request.\n");
+ print("Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.\n");
+ print("More details can be found in the server log.\n");
+ }
die();
}
/**
+ * This is only here to reduce the dependencies in case of an exception to
+ * still be able to print a plain error message.
+ *
+ * Returns the used HTTP protocol.
+ *
+ * @return string HTTP protocol. HTTP/2, HTTP/1.1 or HTTP/1.0.
+ * @internal Don't use this - use AppFramework\Http\Request->getHttpProtocol instead
+ */
+ protected static function getHttpProtocol() {
+ $claimedProtocol = strtoupper($_SERVER['SERVER_PROTOCOL']);
+ $validProtocols = [
+ 'HTTP/1.0',
+ 'HTTP/1.1',
+ 'HTTP/2',
+ ];
+ if(in_array($claimedProtocol, $validProtocols, true)) {
+ return $claimedProtocol;
+ }
+ return 'HTTP/1.1';
+ }
+
+ /**
* @return bool
*/
public static function isAssetPipelineEnabled() {
diff --git a/lib/public/irequest.php b/lib/public/irequest.php
index 20fa543dd69..acfc4f3f1d0 100644
--- a/lib/public/irequest.php
+++ b/lib/public/irequest.php
@@ -168,6 +168,14 @@ interface IRequest {
public function getServerProtocol();
/**
+ * Returns the used HTTP protocol.
+ *
+ * @return string HTTP protocol. HTTP/2, HTTP/1.1 or HTTP/1.0.
+ * @since 8.2.0
+ */
+ public function getHttpProtocol();
+
+ /**
* Returns the request uri, even if the website uses one or more
* reverse proxies
* @return string
diff --git a/settings/controller/certificatecontroller.php b/settings/controller/certificatecontroller.php
index 2995c7f38bf..8ff9f51a66c 100644
--- a/settings/controller/certificatecontroller.php
+++ b/settings/controller/certificatecontroller.php
@@ -122,8 +122,9 @@ class CertificateController extends Controller {
protected function isCertificateImportAllowed() {
$externalStorageEnabled = $this->appManager->isEnabledForUser('files_external');
if ($externalStorageEnabled) {
- $backendService = \OC_Mount_Config::$app->getContainer()->query('OCA\Files_External\Service\BackendService');
- if ($backendService->getBackendsVisibleFor(\OCA\Files_External\Service\BackendService::VISIBILITY_PERSONAL)) {
+ /** @var \OCA\Files_External\Service\BackendService $backendService */
+ $backendService = \OC_Mount_Config::$app->getContainer()->query('\OCA\Files_External\Service\BackendService');
+ if ($backendService->isUserMountingAllowed()) {
return true;
}
}
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index 17f02402aee..9af784c1c96 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -146,6 +146,7 @@ OC.L10N.register(
"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.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Povolit automatické vyplňování v dialogu sdílení. Pokud je toto vypnuto, je třeba ručně vyplňovat celé uživatelské jméno.",
"Last cron job execution: %s." : "Poslední cron proběhl: %s.",
"Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.",
"Cron was not executed yet!" : "Cron ještě nebyl spuštěn!",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 455280dbeb8..3d750f668a1 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -144,6 +144,7 @@
"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.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Povolit automatické vyplňování v dialogu sdílení. Pokud je toto vypnuto, je třeba ručně vyplňovat celé uživatelské jméno.",
"Last cron job execution: %s." : "Poslední cron proběhl: %s.",
"Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.",
"Cron was not executed yet!" : "Cron ještě nebyl spuštěn!",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 709b95f9424..7e59f4567ac 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -118,7 +118,7 @@ OC.L10N.register(
"SSL" : "SSL",
"TLS" : "TLS",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfe die <a target=\"_blank\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schau in der <a target=\"_blank\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.",
"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 verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.",
"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 etwa Zend OPcache oder eAccelerator verursacht.",
@@ -218,7 +218,7 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest,\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">beteilige Dich an der Entwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf mit, es bekannter zu machen</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteilige Dich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">hilf mit, es bekannter zu machen</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Password" : "Passwort",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 29352fe9232..f5265888072 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -116,7 +116,7 @@
"SSL" : "SSL",
"TLS" : "TLS",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfe die <a target=\"_blank\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schau in der <a target=\"_blank\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.",
"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 verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.",
"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 etwa Zend OPcache oder eAccelerator verursacht.",
@@ -216,7 +216,7 @@
"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\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest,\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">beteilige Dich an der Entwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf mit, es bekannter zu machen</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteilige Dich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">hilf mit, es bekannter zu machen</a>!",
"Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Password" : "Passwort",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 5c931504348..ddf85fb4515 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -212,7 +212,7 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten,\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">beteiligen Sie sich an der Entwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie mit, es bekannter zu machen</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteiligen Sie sich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">helfen Sie mit, es bekannter zu machen</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>",
"Password" : "Passwort",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 0518e75c4e5..ba5b2edeecb 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -210,7 +210,7 @@
"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\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten,\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">beteiligen Sie sich an der Entwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie mit, es bekannter zu machen</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten,\n<a href=\"https://owncloud.org/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">beteiligen Sie sich an der Entwicklung</a>\noder\n<a href=\"https://owncloud.org/promote\"\ntarget=\"_blank\" rel=\"noreferrer\">helfen Sie mit, es bekannter zu machen</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>",
"Password" : "Passwort",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 363758011e1..c9bd6733321 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -77,6 +77,8 @@ OC.L10N.register(
"Uninstalling ...." : "Απεγκατάσταση ....",
"Error while uninstalling app" : "Σφάλμα κατά την απεγκατάσταση της εφαρμογής",
"Uninstall" : "Απεγκατάσταση",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Η εφαρμογή έχει ενεργοποιηθεί αλλά χρειάζεται ενημέρωση. Θα μεταφερθείτε στη σελίδα ενημέρωσης σε 5 δευτερόλεπτα.",
+ "App update" : "Ενημέρωση εφαρμογής",
"An error occurred: {message}" : "Παρουσιάστηκε σφάλμα: {message}",
"Select a profile picture" : "Επιλογή εικόνας προφίλ",
"Very weak password" : "Πολύ αδύναμο συνθηματικό",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 12d2436fc92..3b2a1412273 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -75,6 +75,8 @@
"Uninstalling ...." : "Απεγκατάσταση ....",
"Error while uninstalling app" : "Σφάλμα κατά την απεγκατάσταση της εφαρμογής",
"Uninstall" : "Απεγκατάσταση",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Η εφαρμογή έχει ενεργοποιηθεί αλλά χρειάζεται ενημέρωση. Θα μεταφερθείτε στη σελίδα ενημέρωσης σε 5 δευτερόλεπτα.",
+ "App update" : "Ενημέρωση εφαρμογής",
"An error occurred: {message}" : "Παρουσιάστηκε σφάλμα: {message}",
"Select a profile picture" : "Επιλογή εικόνας προφίλ",
"Very weak password" : "Πολύ αδύναμο συνθηματικό",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index 641e8ae3f80..062e77cbd6a 100644
--- a/settings/l10n/fa.js
+++ b/settings/l10n/fa.js
@@ -3,12 +3,14 @@ OC.L10N.register(
{
"APCu" : "APCu",
"Redis" : "Redis",
+ "Security & setup warnings" : "اخطارهای نصب و امنیتی",
"Sharing" : "اشتراک گذاری",
"Server-side encryption" : "رمزگذاری سمت سرور",
"External Storage" : "حافظه خارجی",
"Cron" : "زمانبند",
"Email server" : "سرور ایمیل",
"Log" : "کارنامه",
+ "Tips & tricks" : "نکات و راهنمایی‌ها",
"Updates" : "به روز رسانی ها",
"Authentication error" : "خطا در اعتبار سنجی",
"Your full name has been changed." : "نام کامل شما تغییر یافت",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index 1b9c287348a..c61ad80c655 100644
--- a/settings/l10n/fa.json
+++ b/settings/l10n/fa.json
@@ -1,12 +1,14 @@
{ "translations": {
"APCu" : "APCu",
"Redis" : "Redis",
+ "Security & setup warnings" : "اخطارهای نصب و امنیتی",
"Sharing" : "اشتراک گذاری",
"Server-side encryption" : "رمزگذاری سمت سرور",
"External Storage" : "حافظه خارجی",
"Cron" : "زمانبند",
"Email server" : "سرور ایمیل",
"Log" : "کارنامه",
+ "Tips & tricks" : "نکات و راهنمایی‌ها",
"Updates" : "به روز رسانی ها",
"Authentication error" : "خطا در اعتبار سنجی",
"Your full name has been changed." : "نام کامل شما تغییر یافت",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index a7db9452562..cff1591d1e4 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -76,6 +76,8 @@ OC.L10N.register(
"Uninstalling ...." : "Poistetaan asennusta....",
"Error while uninstalling app" : "Virhe sovellusta poistaessa",
"Uninstall" : "Poista asennus",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Tämä sovellus on otettu käyttöön, mutta se vaatii päivityksen. Sinut ohjataan päivityssivulle viiden sekunnin kuluttua.",
+ "App update" : "Sovelluspäivitys",
"An error occurred: {message}" : "Tapahtui virhe: {message}",
"Select a profile picture" : "Valitse profiilikuva",
"Very weak password" : "Erittäin heikko salasana",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index 9705353642b..853028e72ed 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -74,6 +74,8 @@
"Uninstalling ...." : "Poistetaan asennusta....",
"Error while uninstalling app" : "Virhe sovellusta poistaessa",
"Uninstall" : "Poista asennus",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Tämä sovellus on otettu käyttöön, mutta se vaatii päivityksen. Sinut ohjataan päivityssivulle viiden sekunnin kuluttua.",
+ "App update" : "Sovelluspäivitys",
"An error occurred: {message}" : "Tapahtui virhe: {message}",
"Select a profile picture" : "Valitse profiilikuva",
"Very weak password" : "Erittäin heikko salasana",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 7081214d89d..f6fd6352fef 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -77,6 +77,8 @@ OC.L10N.register(
"Uninstalling ...." : "Disinstallazione...",
"Error while uninstalling app" : "Errore durante la disinstallazione dell'applicazione",
"Uninstall" : "Disinstalla",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "L'applicazione è stata abilitata, ma deve essere aggiornata. Sarai rediretto alla pagina di aggiornamento in 5 secondi.",
+ "App update" : "Aggiornamento applicazione",
"An error occurred: {message}" : "Si è verificato un errore: {message}",
"Select a profile picture" : "Seleziona un'immagine del profilo",
"Very weak password" : "Password molto debole",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 70325f7071a..a51b053c2c9 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -75,6 +75,8 @@
"Uninstalling ...." : "Disinstallazione...",
"Error while uninstalling app" : "Errore durante la disinstallazione dell'applicazione",
"Uninstall" : "Disinstalla",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "L'applicazione è stata abilitata, ma deve essere aggiornata. Sarai rediretto alla pagina di aggiornamento in 5 secondi.",
+ "App update" : "Aggiornamento applicazione",
"An error occurred: {message}" : "Si è verificato un errore: {message}",
"Select a profile picture" : "Seleziona un'immagine del profilo",
"Very weak password" : "Password molto debole",
diff --git a/settings/l10n/nds.js b/settings/l10n/nds.js
new file mode 100644
index 00000000000..e1998c807fd
--- /dev/null
+++ b/settings/l10n/nds.js
@@ -0,0 +1,19 @@
+OC.L10N.register(
+ "settings",
+ {
+ "External Storage" : "Externer Speicher",
+ "Saved" : "Gespeichert",
+ "Very weak password" : "Sehr schwaches Passwort",
+ "Weak password" : "Schwaches Passwort",
+ "So-so password" : "Mittelstarkes Passwort",
+ "Good password" : "Gutes Passwort",
+ "Strong password" : "Starkes Passwort",
+ "Delete" : "Löschen",
+ "None" : "Keine(r)",
+ "Enable encryption" : "Verschlüsselung aktivieren",
+ "Port" : "Port",
+ "Password" : "Passwort",
+ "Cancel" : "Abbrechen",
+ "Username" : "Benutzername"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/nds.json b/settings/l10n/nds.json
new file mode 100644
index 00000000000..2c56decc573
--- /dev/null
+++ b/settings/l10n/nds.json
@@ -0,0 +1,17 @@
+{ "translations": {
+ "External Storage" : "Externer Speicher",
+ "Saved" : "Gespeichert",
+ "Very weak password" : "Sehr schwaches Passwort",
+ "Weak password" : "Schwaches Passwort",
+ "So-so password" : "Mittelstarkes Passwort",
+ "Good password" : "Gutes Passwort",
+ "Strong password" : "Starkes Passwort",
+ "Delete" : "Löschen",
+ "None" : "Keine(r)",
+ "Enable encryption" : "Verschlüsselung aktivieren",
+ "Port" : "Port",
+ "Password" : "Passwort",
+ "Cancel" : "Abbrechen",
+ "Username" : "Benutzername"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index f4bbc350a93..8adfebcac11 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -77,6 +77,8 @@ OC.L10N.register(
"Uninstalling ...." : "Desinstalando ...",
"Error while uninstalling app" : "Erro enquanto desinstalava aplicativo",
"Uninstall" : "Desinstalar",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "O aplicativo foi habilitado, mas precisa ser atualizado. Você será redirecionado para a página de atualização em 5 segundos.",
+ "App update" : "Atualização de aplicativo",
"An error occurred: {message}" : "Ocorreu um erro: {message}",
"Select a profile picture" : "Selecione uma imagem para o perfil",
"Very weak password" : "Senha muito fraca",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index f27256b828f..2bd0848cee5 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -75,6 +75,8 @@
"Uninstalling ...." : "Desinstalando ...",
"Error while uninstalling app" : "Erro enquanto desinstalava aplicativo",
"Uninstall" : "Desinstalar",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "O aplicativo foi habilitado, mas precisa ser atualizado. Você será redirecionado para a página de atualização em 5 segundos.",
+ "App update" : "Atualização de aplicativo",
"An error occurred: {message}" : "Ocorreu um erro: {message}",
"Select a profile picture" : "Selecione uma imagem para o perfil",
"Very weak password" : "Senha muito fraca",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 4366083d5c2..24b1d9e96f5 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -118,18 +118,22 @@ OC.L10N.register(
"SSL" : "SSL",
"TLS" : "TLS",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к <a target=\"_blank\" href=\"%s\">документации по установке</a> для получения заметок по настройке php, а также к настройкам php вашего сервера, особенно это касается php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер работает на ОС Microsoft Windows. Мы настоятельно рекомендуем использовать ОС семейства Linux для достижения наилучших условий использования.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s ниже установленной версии %2$s, по причинам стабильности и производительности мы рекомендуем обновиться до новой версии %1$s.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Блокировка файлов во время передачи отключена, это может привести к состоянию гонки. Включите параметр 'filelocking.enabled' в config.php для избежания этой проблемы. За подробной информацией обратитесь к <a target=\"_blank\" href=\"%s\">документации</a>.",
"System locale can not be set to a one which supports UTF-8." : "Невозможно установить системную локаль, поддерживающую UTF-8",
"This means that there might be problems with certain characters in file names." : "Это значит, что могут быть проблемы с некоторыми символами в именах файлов.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует системный планировщик cron, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:",
+ "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Механизм блокировки файлов во время передачи основан на базе данных, для лучшей производительности рекомендуется использование memcache. За подробной информацией обратитесь к <a target=\"_blank\" href=\"%s\">документации</a>.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста, перепроверьте <a href=\"%s\">инструкцию по установке</a> и проверьте ошибки или предупреждения в <a href=\"#log-section\">журнале</a>",
+ "All checks passed." : "Все проверки пройдены.",
"Open documentation" : "Открыть документацию",
"Allow apps to use the Share API" : "Позволить приложениям использовать API общего доступа",
"Allow users to share via link" : "Разрешить пользователям публикации через ссылки",
@@ -145,6 +149,7 @@ OC.L10N.register(
"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." : "Эти группы смогут получать общие ресурсы, но не могут их создавать.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Включить автоматическое завершение имен пользователей в окне общего доступа. Если отключено, то необходимо вводить полное имя вручную.",
"Last cron job execution: %s." : "Последнее выполненное Cron задание: %s.",
"Last cron job execution: %s. Something seems wrong." : "Последнее выполненное Cron задание: %s. Что-то кажется неправильным.",
"Cron was not executed yet!" : "Задачи cron ещё не запускались!",
@@ -152,6 +157,12 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.",
"Enable server-side encryption" : "Включить шифрование на стороне сервера",
+ "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:",
+ "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Шифрование на стороне сервера необратимый процесс. После включения шифрования все файлы на сервере будут зашифрованы, отключение этой опции невозможно.",
+ "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Любой привилегированный пользователь, который имеет доступ к серверу ownCloud может расшифровать файлы путем перехвата паролей от пользователей, которые хранятся в открытом в виде в файлах сессии. Шифрование на стороне сервера не защищает от администраторов-злоумышленников, но оно может быть полезно при использовании стороннего хостинга.",
+ "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "В зависимости от модуля шифрования общий размер файла может увеличиться (на 35 или более %% при использовании модуля по умолчанию)",
+ "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Вам необходимо постоянно создавать резервную копию ключей шифрования с целью предотвращения потери данных (data/<user>/files_encryption и data/files_encryption)",
+ "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?",
"Enable encryption" : "Включить шифрование",
"No encryption module loaded, please enable an encryption module in the app menu." : "Модуль шифрования не загружен, пожалуйста включите модуль шифрования в меню приложений.",
"Select default encryption module:" : "Выберите модуль шифрования по умолчанию:",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 55a2680ed30..0cc7346af1c 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -116,18 +116,22 @@
"SSL" : "SSL",
"TLS" : "TLS",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к <a target=\"_blank\" href=\"%s\">документации по установке</a> для получения заметок по настройке php, а также к настройкам php вашего сервера, особенно это касается php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер работает на ОС Microsoft Windows. Мы настоятельно рекомендуем использовать ОС семейства Linux для достижения наилучших условий использования.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s ниже установленной версии %2$s, по причинам стабильности и производительности мы рекомендуем обновиться до новой версии %1$s.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Блокировка файлов во время передачи отключена, это может привести к состоянию гонки. Включите параметр 'filelocking.enabled' в config.php для избежания этой проблемы. За подробной информацией обратитесь к <a target=\"_blank\" href=\"%s\">документации</a>.",
"System locale can not be set to a one which supports UTF-8." : "Невозможно установить системную локаль, поддерживающую UTF-8",
"This means that there might be problems with certain characters in file names." : "Это значит, что могут быть проблемы с некоторыми символами в именах файлов.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует системный планировщик cron, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:",
+ "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Механизм блокировки файлов во время передачи основан на базе данных, для лучшей производительности рекомендуется использование memcache. За подробной информацией обратитесь к <a target=\"_blank\" href=\"%s\">документации</a>.",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста, перепроверьте <a href=\"%s\">инструкцию по установке</a> и проверьте ошибки или предупреждения в <a href=\"#log-section\">журнале</a>",
+ "All checks passed." : "Все проверки пройдены.",
"Open documentation" : "Открыть документацию",
"Allow apps to use the Share API" : "Позволить приложениям использовать API общего доступа",
"Allow users to share via link" : "Разрешить пользователям публикации через ссылки",
@@ -143,6 +147,7 @@
"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." : "Эти группы смогут получать общие ресурсы, но не могут их создавать.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Включить автоматическое завершение имен пользователей в окне общего доступа. Если отключено, то необходимо вводить полное имя вручную.",
"Last cron job execution: %s." : "Последнее выполненное Cron задание: %s.",
"Last cron job execution: %s. Something seems wrong." : "Последнее выполненное Cron задание: %s. Что-то кажется неправильным.",
"Cron was not executed yet!" : "Задачи cron ещё не запускались!",
@@ -150,6 +155,12 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.",
"Enable server-side encryption" : "Включить шифрование на стороне сервера",
+ "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:",
+ "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Шифрование на стороне сервера необратимый процесс. После включения шифрования все файлы на сервере будут зашифрованы, отключение этой опции невозможно.",
+ "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Любой привилегированный пользователь, который имеет доступ к серверу ownCloud может расшифровать файлы путем перехвата паролей от пользователей, которые хранятся в открытом в виде в файлах сессии. Шифрование на стороне сервера не защищает от администраторов-злоумышленников, но оно может быть полезно при использовании стороннего хостинга.",
+ "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "В зависимости от модуля шифрования общий размер файла может увеличиться (на 35 или более %% при использовании модуля по умолчанию)",
+ "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Вам необходимо постоянно создавать резервную копию ключей шифрования с целью предотвращения потери данных (data/<user>/files_encryption и data/files_encryption)",
+ "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?",
"Enable encryption" : "Включить шифрование",
"No encryption module loaded, please enable an encryption module in the app menu." : "Модуль шифрования не загружен, пожалуйста включите модуль шифрования в меню приложений.",
"Select default encryption module:" : "Выберите модуль шифрования по умолчанию:",
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index 9f3946a930f..355533c0e67 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"Unable to change password" : "無法修改密碼",
"Enabled" : "已啓用",
"Not enabled" : "無啟動",
+ "Federated Cloud Sharing" : "聯盟式雲端分享",
"Migration Completed" : "遷移已完成",
"Group already exists." : "群組已存在",
"Unable to add group." : "無法新增群組",
@@ -98,13 +99,18 @@ OC.L10N.register(
"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." : "這個意思是指在檔名中使用一些字元可能會有問題",
"Allow apps to use the Share API" : "允許 apps 使用分享 API",
+ "Enforce password protection" : "強制分享連結使用密碼保護",
"Allow public uploads" : "允許任何人上傳",
"Allow users to send mail notification for shared files" : "允許使用者寄送有關分享檔案的郵件通知",
"days" : "天",
+ "Enforce expiration date" : "強制分享連結設置分享期限",
"Allow resharing" : "允許轉貼分享",
+ "Allow users to send mail notification for shared files to other users" : "允許使用者寄送檔案分享通知給其他使用者",
+ "Exclude groups from sharing" : "禁止群組分享檔案",
"Cron was not executed yet!" : "排程沒有執行!",
"Execute one task with each page loaded" : "當頁面載入時,執行",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每15分鐘呼叫 cron.php",
+ "Enable server-side encryption" : "啓用伺服器端加密",
"This is used for sending out notifications." : "寄送通知用",
"Send mode" : "寄送模式",
"Encryption" : "加密",
@@ -180,6 +186,7 @@ OC.L10N.register(
"Language" : "語言",
"Help translate" : "幫助翻譯",
"Common Name" : "Common Name",
+ "Issued By" : "發行者:",
"Show storage location" : "顯示儲存位置",
"Show last log in" : "顯示最近登入",
"Show user backend" : "顯示用戶後台",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index ce87ffa614a..fad9ad99ed5 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -27,6 +27,7 @@
"Unable to change password" : "無法修改密碼",
"Enabled" : "已啓用",
"Not enabled" : "無啟動",
+ "Federated Cloud Sharing" : "聯盟式雲端分享",
"Migration Completed" : "遷移已完成",
"Group already exists." : "群組已存在",
"Unable to add group." : "無法新增群組",
@@ -96,13 +97,18 @@
"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." : "這個意思是指在檔名中使用一些字元可能會有問題",
"Allow apps to use the Share API" : "允許 apps 使用分享 API",
+ "Enforce password protection" : "強制分享連結使用密碼保護",
"Allow public uploads" : "允許任何人上傳",
"Allow users to send mail notification for shared files" : "允許使用者寄送有關分享檔案的郵件通知",
"days" : "天",
+ "Enforce expiration date" : "強制分享連結設置分享期限",
"Allow resharing" : "允許轉貼分享",
+ "Allow users to send mail notification for shared files to other users" : "允許使用者寄送檔案分享通知給其他使用者",
+ "Exclude groups from sharing" : "禁止群組分享檔案",
"Cron was not executed yet!" : "排程沒有執行!",
"Execute one task with each page loaded" : "當頁面載入時,執行",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每15分鐘呼叫 cron.php",
+ "Enable server-side encryption" : "啓用伺服器端加密",
"This is used for sending out notifications." : "寄送通知用",
"Send mode" : "寄送模式",
"Encryption" : "加密",
@@ -178,6 +184,7 @@
"Language" : "語言",
"Help translate" : "幫助翻譯",
"Common Name" : "Common Name",
+ "Issued By" : "發行者:",
"Show storage location" : "顯示儲存位置",
"Show last log in" : "顯示最近登入",
"Show user backend" : "顯示用戶後台",
diff --git a/settings/personal.php b/settings/personal.php
index e9e2046f00a..e58e043af50 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -119,7 +119,9 @@ $clients = array(
$enableCertImport = false;
$externalStorageEnabled = \OC::$server->getAppManager()->isEnabledForUser('files_external');
if ($externalStorageEnabled) {
- $enableCertImport = true;
+ /** @var \OCA\Files_External\Service\BackendService $backendService */
+ $backendService = \OC_Mount_Config::$app->getContainer()->query('\OCA\Files_External\Service\BackendService');
+ $enableCertImport = $backendService->isUserMountingAllowed();
}
diff --git a/tests/lib/appframework/http/RequestTest.php b/tests/lib/appframework/http/RequestTest.php
index e9a0755d1f8..f75e4578546 100644
--- a/tests/lib/appframework/http/RequestTest.php
+++ b/tests/lib/appframework/http/RequestTest.php
@@ -497,6 +497,57 @@ class RequestTest extends \Test\TestCase {
$this->assertSame('192.168.0.233', $request->getRemoteAddress());
}
+ /**
+ * @return array
+ */
+ public function httpProtocolProvider() {
+ return [
+ // Valid HTTP 1.0
+ ['HTTP/1.0', 'HTTP/1.0'],
+ ['http/1.0', 'HTTP/1.0'],
+ ['HTTp/1.0', 'HTTP/1.0'],
+
+ // Valid HTTP 1.1
+ ['HTTP/1.1', 'HTTP/1.1'],
+ ['http/1.1', 'HTTP/1.1'],
+ ['HTTp/1.1', 'HTTP/1.1'],
+
+ // Valid HTTP 2.0
+ ['HTTP/2', 'HTTP/2'],
+ ['http/2', 'HTTP/2'],
+ ['HTTp/2', 'HTTP/2'],
+
+ // Invalid
+ ['HTTp/394', 'HTTP/1.1'],
+ ['InvalidProvider/1.1', 'HTTP/1.1'],
+ [null, 'HTTP/1.1'],
+ ['', 'HTTP/1.1'],
+
+ ];
+ }
+
+ /**
+ * @dataProvider httpProtocolProvider
+ *
+ * @param mixed $input
+ * @param string $expected
+ */
+ public function testGetHttpProtocol($input, $expected) {
+ $request = new Request(
+ [
+ 'server' => [
+ 'SERVER_PROTOCOL' => $input,
+ ],
+ ],
+ $this->secureRandom,
+ $this->getMock('\OCP\Security\ICrypto'),
+ $this->config,
+ $this->stream
+ );
+
+ $this->assertSame($expected, $request->getHttpProtocol());
+ }
+
public function testGetServerProtocolWithOverride() {
$this->config
->expects($this->at(0))
diff --git a/tests/lib/connector/sabre/filesplugin.php b/tests/lib/connector/sabre/filesplugin.php
index a4cf9f7bfb9..0aa62cab176 100644
--- a/tests/lib/connector/sabre/filesplugin.php
+++ b/tests/lib/connector/sabre/filesplugin.php
@@ -31,13 +31,24 @@ class FilesPlugin extends \Test\TestCase {
*/
private $plugin;
+ /**
+ * @var \OC\Files\View
+ */
+ private $view;
+
public function setUp() {
parent::setUp();
- $this->server = new \Sabre\DAV\Server();
+ $this->server = $this->getMockBuilder('\Sabre\DAV\Server')
+ ->disableOriginalConstructor()
+ ->getMock();
$this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
->disableOriginalConstructor()
->getMock();
- $this->plugin = new \OC\Connector\Sabre\FilesPlugin($this->tree);
+ $this->view = $this->getMockBuilder('\OC\Files\View')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->plugin = new \OC\Connector\Sabre\FilesPlugin($this->tree, $this->view);
$this->plugin->initialize($this->server);
}
@@ -104,7 +115,7 @@ class FilesPlugin extends \Test\TestCase {
}
public function testGetPublicPermissions() {
- $this->plugin = new \OC\Connector\Sabre\FilesPlugin($this->tree, true);
+ $this->plugin = new \OC\Connector\Sabre\FilesPlugin($this->tree, $this->view, true);
$this->plugin->initialize($this->server);
$propFind = new \Sabre\DAV\PropFind(
@@ -196,4 +207,48 @@ class FilesPlugin extends \Test\TestCase {
$this->assertEquals(200, $result[self::GETETAG_PROPERTYNAME]);
}
+ /**
+ * Testcase from https://github.com/owncloud/core/issues/5251
+ *
+ * |-FolderA
+ * |-text.txt
+ * |-test.txt
+ *
+ * FolderA is an incomming shared folder and there are no delete permissions.
+ * Thus moving /FolderA/test.txt to /test.txt should fail already on that check
+ *
+ * @expectedException \Sabre\DAV\Exception\Forbidden
+ * @expectedExceptionMessage FolderA/test.txt cannot be deleted
+ */
+ public function testMoveSrcNotDeletable() {
+ $fileInfoFolderATestTXT = $this->getMockBuilder('\OCP\Files\FileInfo')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $fileInfoFolderATestTXT->expects($this->once())
+ ->method('isDeletable')
+ ->willReturn(false);
+
+ $this->view->expects($this->once())
+ ->method('getFileInfo')
+ ->with('FolderA/test.txt')
+ ->willReturn($fileInfoFolderATestTXT);
+
+ $this->plugin->checkMove('FolderA/test.txt', 'test.txt');
+ }
+
+ public function testMoveSrcDeletable() {
+ $fileInfoFolderATestTXT = $this->getMockBuilder('\OCP\Files\FileInfo')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $fileInfoFolderATestTXT->expects($this->once())
+ ->method('isDeletable')
+ ->willReturn(true);
+
+ $this->view->expects($this->once())
+ ->method('getFileInfo')
+ ->with('FolderA/test.txt')
+ ->willReturn($fileInfoFolderATestTXT);
+
+ $this->plugin->checkMove('FolderA/test.txt', 'test.txt');
+ }
}
diff --git a/version.php b/version.php
index c84d8c5edf8..458cb6389f5 100644
--- a/version.php
+++ b/version.php
@@ -25,10 +25,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(8, 2, 0, 8);
+$OC_Version = array(8, 2, 0, 9);
// The human readable string
-$OC_VersionString = '8.2 beta1';
+$OC_VersionString = '8.2 RC1';
$OC_VersionCanBeUpgradedFrom = array(8, 1);