aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------3rdparty0
-rw-r--r--apps/files_external/js/statusmanager.js26
-rw-r--r--apps/files_external/l10n/he.js36
-rw-r--r--apps/files_external/l10n/he.json36
-rw-r--r--apps/files_external/l10n/ja.js1
-rw-r--r--apps/files_external/l10n/ja.json1
-rw-r--r--apps/files_external/lib/google.php22
-rw-r--r--apps/files_sharing/api/share20ocs.php2
-rw-r--r--apps/files_sharing/lib/scanner.php29
-rw-r--r--apps/files_sharing/lib/sharedpropagator.php7
-rw-r--r--apps/files_sharing/lib/sharedstorage.php2
-rw-r--r--apps/files_sharing/tests/api/share20ocstest.php30
-rw-r--r--core/command/maintenance/mimetype/updatejs.php2
-rw-r--r--core/js/core.json1
-rw-r--r--core/js/mimetypelist.js26
-rw-r--r--core/js/oc-backbone-webdav.js316
-rw-r--r--core/js/oc-backbone.js2
-rw-r--r--core/js/tests/specs/oc-backbone-webdavSpec.js352
-rw-r--r--core/l10n/he.js75
-rw-r--r--core/l10n/he.json75
-rw-r--r--core/l10n/nb_NO.js4
-rw-r--r--core/l10n/nb_NO.json4
-rw-r--r--core/vendor/davclient.js/lib/client.js65
-rw-r--r--issue_template.md8
-rw-r--r--lib/l10n/he.js11
-rw-r--r--lib/l10n/he.json11
-rw-r--r--lib/l10n/ja.js1
-rw-r--r--lib/l10n/ja.json1
-rw-r--r--lib/l10n/nb_NO.js4
-rw-r--r--lib/l10n/nb_NO.json4
-rw-r--r--lib/l10n/nl.js1
-rw-r--r--lib/l10n/nl.json1
-rw-r--r--lib/private/backgroundjob/job.php5
-rw-r--r--lib/private/files/cache/propagator.php12
-rw-r--r--lib/private/files/cache/scanner.php1
-rw-r--r--lib/private/files/cache/updater.php10
-rw-r--r--lib/private/log.php4
-rw-r--r--lib/public/ilogger.php8
-rw-r--r--settings/l10n/he.js17
-rw-r--r--settings/l10n/he.json17
-rw-r--r--settings/l10n/hu_HU.js11
-rw-r--r--settings/l10n/hu_HU.json11
-rw-r--r--settings/l10n/ja.js1
-rw-r--r--settings/l10n/ja.json1
-rw-r--r--settings/l10n/nb_NO.js10
-rw-r--r--settings/l10n/nb_NO.json10
-rw-r--r--settings/l10n/nl.js1
-rw-r--r--settings/l10n/nl.json1
-rw-r--r--tests/lib/backgroundjob/job.php9
-rw-r--r--tests/lib/cache/file.php4
50 files changed, 1211 insertions, 78 deletions
diff --git a/3rdparty b/3rdparty
-Subproject 20657b0bf33db0e674d595d6c043de2ff04e9f1
+Subproject fecb1f9715a594831111b64c0c092b863b95e45
diff --git a/apps/files_external/js/statusmanager.js b/apps/files_external/js/statusmanager.js
index 03289e29900..27635d2f1df 100644
--- a/apps/files_external/js/statusmanager.js
+++ b/apps/files_external/js/statusmanager.js
@@ -449,36 +449,12 @@ OCA.External.StatusManager.Utils = {
}
switch (backend) {
- case 'smb':
+ case 'windows_network_drive':
icon = OC.imagePath('windows_network_drive', 'folder-windows');
break;
case 'sharepoint':
icon = OC.imagePath('sharepoint', 'folder-sharepoint');
break;
- case 'amazons3':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
- case 'dav':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
- case 'dropbox':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
- case 'ftp':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
- case 'google':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
- case 'owncloud':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
- case 'sftp':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
- case 'swift':
- icon = OC.imagePath('core', 'filetypes/folder-external');
- break;
}
return icon;
diff --git a/apps/files_external/l10n/he.js b/apps/files_external/l10n/he.js
index 2fddf048a89..27d235968e7 100644
--- a/apps/files_external/l10n/he.js
+++ b/apps/files_external/l10n/he.js
@@ -1,23 +1,55 @@
OC.L10N.register(
"files_external",
{
+ "External storage" : "אחסון חיצוני",
+ "Insufficient data: %s" : "מידע לא מספק: %s",
+ "%s" : "%s",
"Personal" : "אישי",
+ "System" : "מערכת",
"Grant access" : "הענקת גישה",
"Access granted" : "הוענקה גישה",
"Enable encryption" : "אפשר הצפנה",
+ "Check for changes" : "בדיקה אחר שינויים",
+ "Never" : "לעולם לא",
+ "(group)" : "(קבוצה)",
+ "Admin defined" : "הוגדר מנהל",
"Saved" : "נשמר",
+ "Access key" : "מפתח כניסה",
"None" : "כלום",
+ "App key" : "מפתח יישום",
"Username" : "שם משתמש",
"Password" : "סיסמא",
- "Port" : "פורט",
+ "API key" : "מפתח API",
+ "Username and password" : "שם משתמש וסיסמא",
+ "Session credentials" : "אישורי סשן",
+ "RSA public key" : "מפתח ציבורי RSA",
+ "Public key" : "מפתח ציבורי",
+ "Amazon S3" : "אמזון S3",
+ "Bucket" : "סל",
+ "Hostname" : "שם מארח",
+ "Port" : "שער",
"Region" : "אזור",
+ "Enable SSL" : "הפעלת SSL",
"WebDAV" : "WebDAV",
- "URL" : "כתובת",
+ "URL" : "נתיב אינטרנט",
+ "Remote subfolder" : "תיקיית משנה רחוקה",
+ "Secure https://" : "פרוטוקול מאובטח https://",
+ "Dropbox" : "דרופבוקס",
+ "FTP" : "FTP",
"Host" : "מארח",
+ "Secure ftps://" : "פרוטוקול מאובטח ftps://",
+ "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" : "שם משתמש כשיתוף",
"Name" : "שם",
"External Storage" : "אחסון חיצוני",
"Folder name" : "שם התיקייה",
diff --git a/apps/files_external/l10n/he.json b/apps/files_external/l10n/he.json
index 3611e352bd1..c774ef2ebb2 100644
--- a/apps/files_external/l10n/he.json
+++ b/apps/files_external/l10n/he.json
@@ -1,21 +1,53 @@
{ "translations": {
+ "External storage" : "אחסון חיצוני",
+ "Insufficient data: %s" : "מידע לא מספק: %s",
+ "%s" : "%s",
"Personal" : "אישי",
+ "System" : "מערכת",
"Grant access" : "הענקת גישה",
"Access granted" : "הוענקה גישה",
"Enable encryption" : "אפשר הצפנה",
+ "Check for changes" : "בדיקה אחר שינויים",
+ "Never" : "לעולם לא",
+ "(group)" : "(קבוצה)",
+ "Admin defined" : "הוגדר מנהל",
"Saved" : "נשמר",
+ "Access key" : "מפתח כניסה",
"None" : "כלום",
+ "App key" : "מפתח יישום",
"Username" : "שם משתמש",
"Password" : "סיסמא",
- "Port" : "פורט",
+ "API key" : "מפתח API",
+ "Username and password" : "שם משתמש וסיסמא",
+ "Session credentials" : "אישורי סשן",
+ "RSA public key" : "מפתח ציבורי RSA",
+ "Public key" : "מפתח ציבורי",
+ "Amazon S3" : "אמזון S3",
+ "Bucket" : "סל",
+ "Hostname" : "שם מארח",
+ "Port" : "שער",
"Region" : "אזור",
+ "Enable SSL" : "הפעלת SSL",
"WebDAV" : "WebDAV",
- "URL" : "כתובת",
+ "URL" : "נתיב אינטרנט",
+ "Remote subfolder" : "תיקיית משנה רחוקה",
+ "Secure https://" : "פרוטוקול מאובטח https://",
+ "Dropbox" : "דרופבוקס",
+ "FTP" : "FTP",
"Host" : "מארח",
+ "Secure ftps://" : "פרוטוקול מאובטח ftps://",
+ "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" : "שם משתמש כשיתוף",
"Name" : "שם",
"External Storage" : "אחסון חיצוני",
"Folder name" : "שם התיקייה",
diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js
index 5db249b3dc8..1deff5971a9 100644
--- a/apps/files_external/l10n/ja.js
+++ b/apps/files_external/l10n/ja.js
@@ -42,6 +42,7 @@ OC.L10N.register(
"There was an error with message: " : "メッセージ付きのエラーが発生しました:",
"External mount error" : "外部マウントエラー",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Windows ネットワークドライブのマウントポイントリストを取得出来ませんでした:サーバーから空の応答がありました",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "いくつかの設定済み外部マウントポイントに接続できませんでした。詳細情報は赤い行をクリックしてください",
"Access key" : "アクセスキー",
"Secret key" : "シークレットキー",
"Builtin" : "ビルトイン",
diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json
index 47cc58c2d81..744a63c929b 100644
--- a/apps/files_external/l10n/ja.json
+++ b/apps/files_external/l10n/ja.json
@@ -40,6 +40,7 @@
"There was an error with message: " : "メッセージ付きのエラーが発生しました:",
"External mount error" : "外部マウントエラー",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Windows ネットワークドライブのマウントポイントリストを取得出来ませんでした:サーバーから空の応答がありました",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "いくつかの設定済み外部マウントポイントに接続できませんでした。詳細情報は赤い行をクリックしてください",
"Access key" : "アクセスキー",
"Secret key" : "シークレットキー",
"Builtin" : "ビルトイン",
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index 72ebd4e821d..8a9ffaf7d37 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -426,13 +426,23 @@ class Google extends \OC\Files\Storage\Common {
}
if (isset($downloadUrl)) {
$request = new \Google_Http_Request($downloadUrl, 'GET', null, null);
- $httpRequest = $this->client->getAuth()->authenticatedRequest($request);
- if ($httpRequest->getResponseHttpCode() == 200) {
- $tmpFile = \OCP\Files::tmpFile($ext);
- $data = $httpRequest->getResponseBody();
- file_put_contents($tmpFile, $data);
- return fopen($tmpFile, $mode);
+ $httpRequest = $this->client->getAuth()->sign($request);
+ // the library's service doesn't support streaming, so we use Guzzle instead
+ $client = \OC::$server->getHTTPClientService()->newClient();
+ try {
+ $response = $client->get($downloadUrl, [
+ 'headers' => $httpRequest->getRequestHeaders(),
+ 'stream' => true
+ ]);
+ } catch (RequestException $e) {
+ if ($e->getResponse()->getStatusCode() === 404) {
+ return false;
+ } else {
+ throw $e;
+ }
}
+
+ return $response->getBody();
}
}
return false;
diff --git a/apps/files_sharing/api/share20ocs.php b/apps/files_sharing/api/share20ocs.php
index c698dccefb8..e4cc50d9c1a 100644
--- a/apps/files_sharing/api/share20ocs.php
+++ b/apps/files_sharing/api/share20ocs.php
@@ -87,6 +87,8 @@ class Share20OCS {
'parent' => $share->getParent(),
'expiration' => null,
'token' => null,
+ 'uid_file_owner' => $share->getShareOwner()->getUID(),
+ 'displayname_file_owner' => $share->getShareOwner()->getDisplayName(),
];
$path = $share->getPath();
diff --git a/apps/files_sharing/lib/scanner.php b/apps/files_sharing/lib/scanner.php
index bd6a28a4934..e9cc40ae42c 100644
--- a/apps/files_sharing/lib/scanner.php
+++ b/apps/files_sharing/lib/scanner.php
@@ -22,10 +22,14 @@
namespace OC\Files\Cache;
+use OC\Files\ObjectStore\NoopScanner;
+use OC\Files\Storage\Shared;
+
/**
* Scanner for SharedStorage
*/
class SharedScanner extends Scanner {
+ private $sourceScanner;
/**
* Returns metadata from the shared storage, but
@@ -35,12 +39,35 @@ class SharedScanner extends Scanner {
*
* @return array an array of metadata of the file
*/
- protected function getData($path){
+ public function getData($path) {
$data = parent::getData($path);
$sourcePath = $this->storage->getSourcePath($path);
list($sourceStorage, $internalPath) = \OC\Files\Filesystem::resolvePath($sourcePath);
$data['permissions'] = $sourceStorage->getPermissions($internalPath);
return $data;
}
+
+ private function getSourceScanner() {
+ if ($this->sourceScanner) {
+ return $this->sourceScanner;
+ }
+ if ($this->storage->instanceOfStorage('\OC\Files\Storage\Shared')) {
+ /** @var \OC\Files\Storage\Storage $storage */
+ list($storage) = $this->storage->resolvePath('');
+ $this->sourceScanner = $storage->getScanner();
+ return $this->sourceScanner;
+ } else {
+ return null;
+ }
+ }
+
+ public function scanFile($file, $reuseExisting = 0, $parentId = -1, $cacheData = null, $lock = true) {
+ $sourceScanner = $this->getSourceScanner();
+ if ($sourceScanner instanceof NoopScanner) {
+ return [];
+ } else {
+ return parent::scanFile($file, $reuseExisting, $parentId, $cacheData, $lock);
+ }
+ }
}
diff --git a/apps/files_sharing/lib/sharedpropagator.php b/apps/files_sharing/lib/sharedpropagator.php
index fd3e14b28f8..29735934499 100644
--- a/apps/files_sharing/lib/sharedpropagator.php
+++ b/apps/files_sharing/lib/sharedpropagator.php
@@ -32,12 +32,13 @@ class SharedPropagator extends Propagator {
/**
* @param string $internalPath
* @param int $time
- * @return array[] all propagated entries
+ * @param int $sizeDifference
+ * @return \array[] all propagated entries
*/
- public function propagateChange($internalPath, $time) {
+ public function propagateChange($internalPath, $time, $sizeDifference = 0) {
$source = $this->storage->getSourcePath($internalPath);
/** @var \OC\Files\Storage\Storage $storage */
list($storage, $sourceInternalPath) = \OC\Files\Filesystem::resolvePath($source);
- return $storage->getPropagator()->propagateChange($sourceInternalPath, $time);
+ return $storage->getPropagator()->propagateChange($sourceInternalPath, $time, $sizeDifference);
}
}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 697856e1de5..542d0e9e48c 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -609,7 +609,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
* @param string $path
* @return array
*/
- private function resolvePath($path) {
+ public function resolvePath($path) {
$source = $this->getSourcePath($path);
return \OC\Files\Filesystem::resolvePath($source);
}
diff --git a/apps/files_sharing/tests/api/share20ocstest.php b/apps/files_sharing/tests/api/share20ocstest.php
index 81166b9e3c4..f38af988155 100644
--- a/apps/files_sharing/tests/api/share20ocstest.php
+++ b/apps/files_sharing/tests/api/share20ocstest.php
@@ -171,6 +171,10 @@ class Share20OCSTest extends \Test\TestCase {
public function dataGetShare() {
$data = [];
+ $initiator = $this->getMock('OCP\IUser');
+ $initiator->method('getUID')->willReturn('initiatorId');
+ $initiator->method('getDisplayName')->willReturn('initiatorDisplay');
+
$owner = $this->getMock('OCP\IUser');
$owner->method('getUID')->willReturn('ownerId');
$owner->method('getDisplayName')->willReturn('ownerDisplay');
@@ -193,8 +197,6 @@ class Share20OCSTest extends \Test\TestCase {
$storage->method('getId')->willReturn('STORAGE');
$storage->method('getCache')->willReturn($cache);
-
-
$parentFolder = $this->getMock('OCP\Files\Folder');
$parentFolder->method('getId')->willReturn(3);
@@ -215,7 +217,7 @@ class Share20OCSTest extends \Test\TestCase {
100,
\OCP\Share::SHARE_TYPE_USER,
$user,
- $owner,
+ $initiator,
$owner,
$file,
4,
@@ -230,8 +232,8 @@ class Share20OCSTest extends \Test\TestCase {
'share_type' => \OCP\Share::SHARE_TYPE_USER,
'share_with' => 'userId',
'share_with_displayname' => 'userDisplay',
- 'uid_owner' => 'ownerId',
- 'displayname_owner' => 'ownerDisplay',
+ 'uid_owner' => 'initiatorId',
+ 'displayname_owner' => 'initiatorDisplay',
'item_type' => 'file',
'item_source' => 1,
'file_source' => 1,
@@ -246,6 +248,8 @@ class Share20OCSTest extends \Test\TestCase {
'path' => 'file',
'storage' => 101,
'mail_send' => 0,
+ 'uid_file_owner' => 'ownerId',
+ 'displayname_file_owner' => 'ownerDisplay'
];
$data[] = [$share, $expected];
@@ -254,7 +258,7 @@ class Share20OCSTest extends \Test\TestCase {
101,
\OCP\Share::SHARE_TYPE_GROUP,
$group,
- $owner,
+ $initiator,
$owner,
$folder,
4,
@@ -269,8 +273,8 @@ class Share20OCSTest extends \Test\TestCase {
'share_type' => \OCP\Share::SHARE_TYPE_GROUP,
'share_with' => 'groupId',
'share_with_displayname' => 'groupId',
- 'uid_owner' => 'ownerId',
- 'displayname_owner' => 'ownerDisplay',
+ 'uid_owner' => 'initiatorId',
+ 'displayname_owner' => 'initiatorDisplay',
'item_type' => 'folder',
'item_source' => 2,
'file_source' => 2,
@@ -285,6 +289,8 @@ class Share20OCSTest extends \Test\TestCase {
'path' => 'folder',
'storage' => 101,
'mail_send' => 0,
+ 'uid_file_owner' => 'ownerId',
+ 'displayname_file_owner' => 'ownerDisplay'
];
$data[] = [$share, $expected];
@@ -294,7 +300,7 @@ class Share20OCSTest extends \Test\TestCase {
101,
\OCP\Share::SHARE_TYPE_LINK,
null,
- $owner,
+ $initiator,
$owner,
$folder,
4,
@@ -311,8 +317,8 @@ class Share20OCSTest extends \Test\TestCase {
'share_type' => \OCP\Share::SHARE_TYPE_LINK,
'share_with' => 'password',
'share_with_displayname' => 'password',
- 'uid_owner' => 'ownerId',
- 'displayname_owner' => 'ownerDisplay',
+ 'uid_owner' => 'initiatorId',
+ 'displayname_owner' => 'initiatorDisplay',
'item_type' => 'folder',
'item_source' => 2,
'file_source' => 2,
@@ -328,6 +334,8 @@ class Share20OCSTest extends \Test\TestCase {
'storage' => 101,
'mail_send' => 0,
'url' => 'url',
+ 'uid_file_owner' => 'ownerId',
+ 'displayname_file_owner' => 'ownerDisplay'
];
$data[] = [$share, $expected];
diff --git a/core/command/maintenance/mimetype/updatejs.php b/core/command/maintenance/mimetype/updatejs.php
index e93b563d5fb..8ee06e8cdc9 100644
--- a/core/command/maintenance/mimetype/updatejs.php
+++ b/core/command/maintenance/mimetype/updatejs.php
@@ -71,6 +71,7 @@ class UpdateJS extends Command {
//Remove duplicates
$files = array_values(array_unique($files));
+ sort($files);
// Fetch all themes!
$themes = [];
@@ -100,6 +101,7 @@ class UpdateJS extends Command {
//Remove Duplicates
$themes[$theme] = array_values(array_unique($themes[$theme]));
+ sort($themes[$theme]);
}
//Generate the JS
diff --git a/core/js/core.json b/core/js/core.json
index c7621a08d62..43cb1b472f5 100644
--- a/core/js/core.json
+++ b/core/js/core.json
@@ -23,6 +23,7 @@
"oc-dialogs.js",
"js.js",
"oc-backbone.js",
+ "oc-backbone-webdav.js",
"l10n.js",
"apps.js",
"share.js",
diff --git a/core/js/mimetypelist.js b/core/js/mimetypelist.js
index 43f01273f55..dea065814d1 100644
--- a/core/js/mimetypelist.js
+++ b/core/js/mimetypelist.js
@@ -82,26 +82,26 @@ OC.MimeTypeList={
"web": "text/code"
},
files: [
- "video",
+ "application",
+ "application-pdf",
+ "audio",
+ "file",
+ "folder",
"folder-drag-accept",
- "folder-starred",
+ "folder-external",
"folder-public",
+ "folder-shared",
+ "folder-starred",
+ "image",
"package-x-generic",
"text",
- "folder-external",
- "text-vcard",
- "application",
+ "text-calendar",
"text-code",
- "x-office-spreadsheet",
- "application-pdf",
- "folder",
+ "text-vcard",
+ "video",
"x-office-document",
- "text-calendar",
"x-office-presentation",
- "file",
- "folder-shared",
- "image",
- "audio"
+ "x-office-spreadsheet"
],
themes: []
};
diff --git a/core/js/oc-backbone-webdav.js b/core/js/oc-backbone-webdav.js
new file mode 100644
index 00000000000..3ca31902c93
--- /dev/null
+++ b/core/js/oc-backbone-webdav.js
@@ -0,0 +1,316 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+/**
+ * Webdav transport for Backbone.
+ *
+ * This makes it possible to use Webdav endpoints when
+ * working with Backbone models and collections.
+ *
+ * Requires the davclient.js library.
+ *
+ * Usage example:
+ *
+ * var PersonModel = OC.Backbone.Model.extend({
+ * // make it use the DAV transport
+ * sync: OC.Backbone.davSync,
+ *
+ * // DAV properties mapping
+ * davProperties: {
+ * 'id': '{http://example.com/ns}id',
+ * 'firstName': '{http://example.com/ns}first-name',
+ * 'lastName': '{http://example.com/ns}last-name',
+ * 'age': '{http://example.com/ns}age'
+ * },
+ *
+ * // additional parsing, if needed
+ * parse: function(props) {
+ * // additional parsing (DAV property values are always strings)
+ * props.age = parseInt(props.age, 10);
+ * return props;
+ * }
+ * });
+ *
+ * var PersonCollection = OC.Backbone.Collection.extend({
+ * // make it use the DAV transport
+ * sync: OC.Backbone.davSync,
+ *
+ * // use person model
+ * // note that davProperties will be inherited
+ * model: PersonModel,
+ *
+ * // DAV collection URL
+ * url: function() {
+ * return OC.linkToRemote('dav') + '/person/';
+ * },
+ * });
+ */
+
+/* global dav */
+
+(function(Backbone) {
+ var methodMap = {
+ 'create': 'POST',
+ 'update': 'PROPPATCH',
+ 'patch': 'PROPPATCH',
+ 'delete': 'DELETE',
+ 'read': 'PROPFIND'
+ };
+
+ // Throw an error when a URL is needed, and none is supplied.
+ function urlError() {
+ throw new Error('A "url" property or function must be specified');
+ }
+
+ /**
+ * Convert a single propfind result to JSON
+ *
+ * @param {Object} result
+ * @param {Object} davProperties properties mapping
+ */
+ function parsePropFindResult(result, davProperties) {
+ var props = {
+ href: result.href
+ };
+
+ _.each(result.propStat, function(propStat) {
+ if (propStat.status !== 'HTTP/1.1 200 OK') {
+ return;
+ }
+
+ for (var key in propStat.properties) {
+ var propKey = key;
+ if (davProperties[key]) {
+ propKey = davProperties[key];
+ }
+ props[propKey] = propStat.properties[key];
+ }
+ });
+
+ if (!props.id) {
+ // parse id from href
+ props.id = parseIdFromLocation(props.href);
+ }
+
+ return props;
+ }
+
+ /**
+ * Parse ID from location
+ *
+ * @param {string} url url
+ * @return {string} id
+ */
+ function parseIdFromLocation(url) {
+ var queryPos = url.indexOf('?');
+ if (queryPos > 0) {
+ url = url.substr(0, queryPos);
+ }
+
+ var parts = url.split('/');
+ return parts[parts.length - 1];
+ }
+
+ function isSuccessStatus(status) {
+ return status >= 200 && status <= 299;
+ }
+
+ function convertModelAttributesToDavProperties(attrs, davProperties) {
+ var props = {};
+ var key;
+ for (key in attrs) {
+ var changedProp = davProperties[key];
+ if (!changedProp) {
+ console.warn('No matching DAV property for property "' + key);
+ continue;
+ }
+ props[changedProp] = attrs[key];
+ }
+ return props;
+ }
+
+ function callPropFind(client, options, model, headers) {
+ return client.propFind(
+ options.url,
+ _.values(options.davProperties) || [],
+ options.depth,
+ headers
+ ).then(function(response) {
+ if (isSuccessStatus(response.status)) {
+ if (_.isFunction(options.success)) {
+ var propsMapping = _.invert(options.davProperties);
+ var results;
+ if (options.depth > 0) {
+ results = _.map(response.body, function(data) {
+ return parsePropFindResult(data, propsMapping);
+ });
+ // discard root entry
+ results.shift();
+ } else {
+ results = parsePropFindResult(response.body, propsMapping);
+ }
+
+ options.success(results);
+ return;
+ }
+ } else if (_.isFunction(options.error)) {
+ options.error(response);
+ }
+ });
+ }
+
+ function callPropPatch(client, options, model, headers) {
+ client.propPatch(
+ options.url,
+ convertModelAttributesToDavProperties(model.changed, options.davProperties),
+ headers
+ ).then(function(result) {
+ if (isSuccessStatus(result.status)) {
+ if (_.isFunction(options.success)) {
+ // pass the object's own values because the server
+ // does not return the updated model
+ options.success(model.toJSON());
+ }
+ } else if (_.isFunction(options.error)) {
+ options.error(result);
+ }
+ });
+
+ }
+
+ function callMethod(client, options, model, headers) {
+ headers['Content-Type'] = 'application/json';
+ return client.request(
+ options.type,
+ options.url,
+ headers,
+ options.data
+ ).then(function(result) {
+ if (!isSuccessStatus(result.status)) {
+ if (_.isFunction(options.error)) {
+ options.error(result);
+ }
+ return;
+ }
+
+ if (_.isFunction(options.success)) {
+ if (options.type === 'PUT' || options.type === 'POST') {
+ // pass the object's own values because the server
+ // does not return anything
+ var responseJson = result.body || model.toJSON();
+ var locationHeader = result.xhr.getResponseHeader('Content-Location');
+ if (options.type === 'POST' && locationHeader) {
+ responseJson.id = parseIdFromLocation(locationHeader);
+ }
+ options.success(responseJson);
+ return;
+ }
+ options.success(result.body);
+ }
+ });
+ }
+
+ function davCall(options, model) {
+ var client = new dav.Client({
+ baseUrl: options.url,
+ xmlNamespaces: _.extend({
+ 'DAV:': 'd',
+ 'http://owncloud.org/ns': 'oc'
+ }, options.xmlNamespaces || {})
+ });
+ client.resolveUrl = function() {
+ return options.url;
+ };
+ var headers = _.extend({
+ 'X-Requested-With': 'XMLHttpRequest'
+ }, options.headers);
+ if (options.type === 'PROPFIND') {
+ return callPropFind(client, options, model, headers);
+ } else if (options.type === 'PROPPATCH') {
+ return callPropPatch(client, options, model, headers);
+ } else {
+ return callMethod(client, options, model, headers);
+ }
+ }
+
+ /**
+ * DAV transport
+ */
+ function davSync(method, model, options) {
+ var params = {type: methodMap[method]};
+ var isCollection = (model instanceof Backbone.Collection);
+
+ if (method === 'update' && (model.usePUT || (model.collection && model.collection.usePUT))) {
+ // use PUT instead of PROPPATCH
+ params.type = 'PUT';
+ }
+
+ // Ensure that we have a URL.
+ if (!options.url) {
+ params.url = _.result(model, 'url') || urlError();
+ }
+
+ // Ensure that we have the appropriate request data.
+ if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
+ params.data = JSON.stringify(options.attrs || model.toJSON(options));
+ }
+
+ // Don't process data on a non-GET request.
+ if (params.type !== 'PROPFIND') {
+ params.processData = false;
+ }
+
+ if (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {
+ var davProperties = model.davProperties;
+ if (!davProperties && model.model) {
+ // use dav properties from model in case of collection
+ davProperties = model.model.prototype.davProperties;
+ }
+ if (davProperties) {
+ if (_.isFunction(davProperties)) {
+ params.davProperties = davProperties.call(model);
+ } else {
+ params.davProperties = davProperties;
+ }
+ }
+
+ params.davProperties = _.extend(params.davProperties || {}, options.davProperties);
+
+ if (_.isUndefined(options.depth)) {
+ if (isCollection) {
+ options.depth = 1;
+ } else {
+ options.depth = 0;
+ }
+ }
+ }
+
+ // Pass along `textStatus` and `errorThrown` from jQuery.
+ var error = options.error;
+ options.error = function(xhr, textStatus, errorThrown) {
+ options.textStatus = textStatus;
+ options.errorThrown = errorThrown;
+ if (error) {
+ error.call(options.context, xhr, textStatus, errorThrown);
+ }
+ };
+
+ // Make the request, allowing the user to override any Ajax options.
+ var xhr = options.xhr = Backbone.davCall(_.extend(params, options), model);
+ model.trigger('request', model, xhr, options);
+ return xhr;
+ }
+
+ // exports
+ Backbone.davCall = davCall;
+ Backbone.davSync = davSync;
+
+})(OC.Backbone);
+
diff --git a/core/js/oc-backbone.js b/core/js/oc-backbone.js
index 75a40979340..5c4eb2d24c8 100644
--- a/core/js/oc-backbone.js
+++ b/core/js/oc-backbone.js
@@ -7,6 +7,8 @@
* See the COPYING-README file.
*
*/
+
+/* global Backbone */
if(!_.isUndefined(Backbone)) {
OC.Backbone = Backbone.noConflict();
}
diff --git a/core/js/tests/specs/oc-backbone-webdavSpec.js b/core/js/tests/specs/oc-backbone-webdavSpec.js
new file mode 100644
index 00000000000..8fe0b9e8297
--- /dev/null
+++ b/core/js/tests/specs/oc-backbone-webdavSpec.js
@@ -0,0 +1,352 @@
+/**
+* ownCloud
+*
+* @author Vincent Petry
+* @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+/* global dav */
+
+describe('Backbone Webdav extension', function() {
+ var davClientRequestStub;
+ var davClientPropPatchStub;
+ var davClientPropFindStub;
+ var deferredRequest;
+
+ beforeEach(function() {
+ deferredRequest = $.Deferred();
+ davClientRequestStub = sinon.stub(dav.Client.prototype, 'request');
+ davClientPropPatchStub = sinon.stub(dav.Client.prototype, 'propPatch');
+ davClientPropFindStub = sinon.stub(dav.Client.prototype, 'propFind');
+ davClientRequestStub.returns(deferredRequest.promise());
+ davClientPropPatchStub.returns(deferredRequest.promise());
+ davClientPropFindStub.returns(deferredRequest.promise());
+ });
+ afterEach(function() {
+ davClientRequestStub.restore();
+ davClientPropPatchStub.restore();
+ davClientPropFindStub.restore();
+ });
+
+ describe('collections', function() {
+ var TestModel;
+ var TestCollection;
+ beforeEach(function() {
+ TestModel = OC.Backbone.Model.extend({
+ sync: OC.Backbone.davSync,
+ davProperties: {
+ 'firstName': '{http://owncloud.org/ns}first-name',
+ 'lastName': '{http://owncloud.org/ns}last-name',
+ }
+ });
+ TestCollection = OC.Backbone.Collection.extend({
+ sync: OC.Backbone.davSync,
+ model: TestModel,
+ url: 'http://example.com/owncloud/remote.php/test/'
+ });
+ });
+
+ it('makes a POST request to create model into collection', function() {
+ var collection = new TestCollection();
+ var model = collection.create({
+ firstName: 'Hello',
+ lastName: 'World'
+ });
+
+ expect(davClientRequestStub.calledOnce).toEqual(true);
+ expect(davClientRequestStub.getCall(0).args[0])
+ .toEqual('POST');
+ expect(davClientRequestStub.getCall(0).args[1])
+ .toEqual('http://example.com/owncloud/remote.php/test/');
+ expect(davClientRequestStub.getCall(0).args[2]['Content-Type'])
+ .toEqual('application/json');
+ expect(davClientRequestStub.getCall(0).args[2]['X-Requested-With'])
+ .toEqual('XMLHttpRequest');
+ expect(davClientRequestStub.getCall(0).args[3])
+ .toEqual(JSON.stringify({
+ 'firstName': 'Hello',
+ 'lastName': 'World'
+ }));
+
+ var responseHeaderStub = sinon.stub()
+ .withArgs('Content-Location')
+ .returns('http://example.com/owncloud/remote.php/test/123');
+ deferredRequest.resolve({
+ status: 201,
+ body: '',
+ xhr: {
+ getResponseHeader: responseHeaderStub
+ }
+ });
+
+ expect(model.id).toEqual('123');
+ });
+
+ it('uses PROPFIND to retrieve collection', function() {
+ var successStub = sinon.stub();
+ var errorStub = sinon.stub();
+ var collection = new TestCollection();
+ collection.fetch({
+ success: successStub,
+ error: errorStub
+ });
+
+ expect(davClientPropFindStub.calledOnce).toEqual(true);
+ expect(davClientPropFindStub.getCall(0).args[0])
+ .toEqual('http://example.com/owncloud/remote.php/test/');
+ expect(davClientPropFindStub.getCall(0).args[1])
+ .toEqual([
+ '{http://owncloud.org/ns}first-name',
+ '{http://owncloud.org/ns}last-name'
+ ]);
+ expect(davClientPropFindStub.getCall(0).args[2])
+ .toEqual(1);
+ expect(davClientPropFindStub.getCall(0).args[3]['X-Requested-With'])
+ .toEqual('XMLHttpRequest');
+
+ deferredRequest.resolve({
+ status: 207,
+ body: [
+ // root element
+ {
+ href: 'http://example.org/owncloud/remote.php/test/',
+ propStat: []
+ },
+ // first model
+ {
+ href: 'http://example.org/owncloud/remote.php/test/123',
+ propStat: [{
+ status: 'HTTP/1.1 200 OK',
+ properties: {
+ '{http://owncloud.org/ns}first-name': 'Hello',
+ '{http://owncloud.org/ns}last-name': 'World'
+ }
+ }]
+ },
+ // second model
+ {
+ href: 'http://example.org/owncloud/remote.php/test/456',
+ propStat: [{
+ status: 'HTTP/1.1 200 OK',
+ properties: {
+ '{http://owncloud.org/ns}first-name': 'Test',
+ '{http://owncloud.org/ns}last-name': 'Person'
+ }
+ }]
+ }
+ ]
+ });
+
+ expect(collection.length).toEqual(2);
+
+ var model = collection.get('123');
+ expect(model.id).toEqual('123');
+ expect(model.get('firstName')).toEqual('Hello');
+ expect(model.get('lastName')).toEqual('World');
+
+ model = collection.get('456');
+ expect(model.id).toEqual('456');
+ expect(model.get('firstName')).toEqual('Test');
+ expect(model.get('lastName')).toEqual('Person');
+
+ expect(successStub.calledOnce).toEqual(true);
+ expect(errorStub.notCalled).toEqual(true);
+ });
+
+ function testMethodError(doCall) {
+ var successStub = sinon.stub();
+ var errorStub = sinon.stub();
+
+ doCall(successStub, errorStub);
+
+ deferredRequest.resolve({
+ status: 404,
+ body: ''
+ });
+
+ expect(successStub.notCalled).toEqual(true);
+ expect(errorStub.calledOnce).toEqual(true);
+ }
+
+ it('calls error handler if error status in PROPFIND response', function() {
+ testMethodError(function(success, error) {
+ var collection = new TestCollection();
+ collection.fetch({
+ success: success,
+ error: error
+ });
+ });
+ });
+ it('calls error handler if error status in POST response', function() {
+ testMethodError(function(success, error) {
+ var collection = new TestCollection();
+ collection.create({
+ firstName: 'Hello',
+ lastName: 'World'
+ }, {
+ success: success,
+ error: error
+ });
+ });
+ });
+ });
+ describe('models', function() {
+ var TestModel;
+ beforeEach(function() {
+ TestModel = OC.Backbone.Model.extend({
+ sync: OC.Backbone.davSync,
+ davProperties: {
+ 'firstName': '{http://owncloud.org/ns}first-name',
+ 'lastName': '{http://owncloud.org/ns}last-name',
+ },
+ url: function() {
+ return 'http://example.com/owncloud/remote.php/test/' + this.id;
+ }
+ });
+ });
+
+ it('makes a PROPPATCH request to update model', function() {
+ var model = new TestModel({
+ id: '123',
+ firstName: 'Hello',
+ lastName: 'World'
+ });
+
+ model.save({
+ firstName: 'Hey'
+ });
+
+ expect(davClientPropPatchStub.calledOnce).toEqual(true);
+ expect(davClientPropPatchStub.getCall(0).args[0])
+ .toEqual('http://example.com/owncloud/remote.php/test/123');
+ expect(davClientPropPatchStub.getCall(0).args[1])
+ .toEqual({
+ '{http://owncloud.org/ns}first-name': 'Hey'
+ });
+ expect(davClientPropPatchStub.getCall(0).args[2]['X-Requested-With'])
+ .toEqual('XMLHttpRequest');
+
+ deferredRequest.resolve({
+ status: 201,
+ body: ''
+ });
+
+ expect(model.id).toEqual('123');
+ expect(model.get('firstName')).toEqual('Hey');
+ });
+
+ it('uses PROPFIND to fetch single model', function() {
+ var model = new TestModel({
+ id: '123'
+ });
+
+ model.fetch();
+
+ expect(davClientPropFindStub.calledOnce).toEqual(true);
+ expect(davClientPropFindStub.getCall(0).args[0])
+ .toEqual('http://example.com/owncloud/remote.php/test/123');
+ expect(davClientPropFindStub.getCall(0).args[1])
+ .toEqual([
+ '{http://owncloud.org/ns}first-name',
+ '{http://owncloud.org/ns}last-name'
+ ]);
+ expect(davClientPropFindStub.getCall(0).args[2])
+ .toEqual(0);
+ expect(davClientPropFindStub.getCall(0).args[3]['X-Requested-With'])
+ .toEqual('XMLHttpRequest');
+
+ deferredRequest.resolve({
+ status: 207,
+ body: {
+ href: 'http://example.org/owncloud/remote.php/test/123',
+ propStat: [{
+ status: 'HTTP/1.1 200 OK',
+ properties: {
+ '{http://owncloud.org/ns}first-name': 'Hello',
+ '{http://owncloud.org/ns}last-name': 'World'
+ }
+ }]
+ }
+ });
+
+ expect(model.id).toEqual('123');
+ expect(model.get('firstName')).toEqual('Hello');
+ expect(model.get('lastName')).toEqual('World');
+ });
+ it('makes a DELETE request to destroy model', function() {
+ var model = new TestModel({
+ id: '123',
+ firstName: 'Hello',
+ lastName: 'World'
+ });
+
+ model.destroy();
+
+ expect(davClientRequestStub.calledOnce).toEqual(true);
+ expect(davClientRequestStub.getCall(0).args[0])
+ .toEqual('DELETE');
+ expect(davClientRequestStub.getCall(0).args[1])
+ .toEqual('http://example.com/owncloud/remote.php/test/123');
+ expect(davClientRequestStub.getCall(0).args[2]['X-Requested-With'])
+ .toEqual('XMLHttpRequest');
+ expect(davClientRequestStub.getCall(0).args[3])
+ .toBeFalsy();
+
+ deferredRequest.resolve({
+ status: 200,
+ body: ''
+ });
+ });
+
+ function testMethodError(doCall) {
+ var successStub = sinon.stub();
+ var errorStub = sinon.stub();
+
+ doCall(successStub, errorStub);
+
+ deferredRequest.resolve({
+ status: 404,
+ body: ''
+ });
+
+ expect(successStub.notCalled).toEqual(true);
+ expect(errorStub.calledOnce).toEqual(true);
+ }
+
+ it('calls error handler if error status in PROPFIND response', function() {
+ testMethodError(function(success, error) {
+ var model = new TestModel();
+ model.fetch({
+ success: success,
+ error: error
+ });
+ });
+ });
+ it('calls error handler if error status in PROPPATCH response', function() {
+ testMethodError(function(success, error) {
+ var model = new TestModel();
+ model.save({
+ firstName: 'Hey'
+ }, {
+ success: success,
+ error: error
+ });
+ });
+ });
+ });
+});
+
diff --git a/core/l10n/he.js b/core/l10n/he.js
index 2c9acac19ec..1b46c6ee694 100644
--- a/core/l10n/he.js
+++ b/core/l10n/he.js
@@ -1,15 +1,28 @@
OC.L10N.register(
"core",
{
+ "Couldn't send mail to following users: %s " : "לא ניתן היה לשלוח דואר אלקטרוני למשתמשים הבאים %s ",
"Preparing update" : "מכין עדכון",
"Turned on maintenance mode" : "הפעלת מצב אחזקה",
"Turned off maintenance mode" : "כיבוי מצב אחזקה",
"Maintenance mode is kept active" : "מצב אחזקה נשמר פעיל",
+ "Updating database schema" : "עדכון סכימת מסד נתונים",
"Updated database" : "עדכון מסד נתונים",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "בודק אם סכימת מסד הנתונים ניתנת לעדכון (פעולה זו יכולה להמשך זמן רב תלוי בגודל מסד הנתונים)",
+ "Checked database schema update" : "עדכון סכימת מסד נתונים נבדק",
"Checking updates of apps" : "בדיקת עדכוני יישומים",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "בודק אם סכימת מסד הנתונים עבור %s ניתנת לעדכון (פעולה זו יכולה להמשך זמן רב תלוי בגודל מסד הנתונים)",
+ "Checked database schema update for apps" : "עדכון סכימת מסד נתונים ליישומים נבדק",
"Updated \"%s\" to %s" : "מעדכן \"%s\" ל- %s",
"Repair warning: " : "אזהרת תיקון:",
"Repair error: " : "שגיאת תיקון:",
+ "Set log level to debug" : "קביעת רמת דיווח לתהליך ניפוי בשגיאות",
+ "Reset log level" : "קביעה מחדש לרמת דיווח",
+ "Starting code integrity check" : "התחלת בדיקת תקינות קוד",
+ "Finished code integrity check" : "סיום בדיקת תקינות קוד",
+ "%s (3rdparty)" : "%s (צד שלישי)",
+ "%s (incompatible)" : "%s (לא תואם)",
+ "Following apps have been disabled: %s" : "היישומים הבאים נוטרלו: %s",
"Already up to date" : "כבר עדכני",
"Please select a file." : "יש לבחור קובץ.",
"File is too big" : "הקובץ גדול מדי",
@@ -18,6 +31,10 @@ OC.L10N.register(
"Unknown filetype" : "סוג קובץ לא מוכר",
"Invalid image" : "תמונה לא חוקית",
"An error occurred. Please contact your admin." : "אירעה שגיאה. יש ליצור קשר עם המנהל שלך.",
+ "No temporary profile picture available, try again" : "לא קיימת תמונת פרופיל זמנית, יש לנסות שוב",
+ "No crop data provided" : "לא סופק מידע קיטום",
+ "No valid crop data provided" : "לא סופק מידע קיטום חוקי",
+ "Crop is not square" : "הקיטום אינו מרובע",
"Sunday" : "יום ראשון",
"Monday" : "יום שני",
"Tuesday" : "יום שלישי",
@@ -63,24 +80,43 @@ OC.L10N.register(
"Oct." : "אוק׳",
"Nov." : "נוב׳",
"Dec." : "דצמ׳",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">קיימות בעיות עם בדיקת תקינות קוד. למידע נוסף…</a>",
"Settings" : "הגדרות",
"Saving..." : "שמירה…",
"seconds ago" : "שניות",
+ "Couldn't send reset email. Please contact your administrator." : "לא ניתן היה לשלוח דואר אלקטרוני לאיפוס. יש לפנות למנהל שלך.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "הקישור לאיפוס הסיסמא שלך נשלח אליך בדואר אלקטרוני. אם לא קיבלת את הקישור תוך זמן סביר, מוטב לבדוק את תיבת דואר הזבל/ספאם שלך.<br>אם ההודעה אינה שם, יש לשאול את המנהל המקומי שלך .",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "הקבצים שלך מוצפנים. אם לא הפעלת את מפתח השחזור, לא תהיה דרך לקבל את המידע מחדש אחרי שהסיסמא תאופס.<br />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
+ "I know what I'm doing" : "אני יודע/ת מה אני עושה",
+ "Password can not be changed. Please contact your administrator." : "לא ניתן לשנות את הסיסמא. יש לפנות למנהל שלך.",
"No" : "לא",
"Yes" : "כן",
"Choose" : "בחירה",
+ "Error loading file picker template: {error}" : "שגיאה בטעינת תבנית בחירת הקבצים: {error}",
"Ok" : "בסדר",
+ "Error loading message template: {error}" : "שגיאה בטעינת תבנית ההודעות: {error}",
"read-only" : "לקריאה בלבד",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} הנגשות קובץ","{count} התנגשויות קבצים"],
+ "One file conflict" : "התנגשות קובץ אחת",
"New Files" : "קבצים חדשים",
+ "Already existing files" : "קבצים קיימים כבר",
+ "Which files do you want to keep?" : "אילו קבצים ברצונך לשמור?",
+ "If you select both versions, the copied file will have a number added to its name." : "אם תבחר האפשרות לשמור את שתי הגרסאות, לשם קובץ המועתק יתווסף מספר.",
"Cancel" : "ביטול",
"Continue" : "המשך",
"(all selected)" : "(הכול נבחר)",
+ "({count} selected)" : "({count} נבחרו)",
+ "Error loading file exists template" : "שגיאה בטעינת קובץ תבנית קיימים",
"Very weak password" : "סיסמא מאוד חלשה",
"Weak password" : "סיסמא חלשה",
"So-so password" : "סיסמא ככה-ככה",
"Good password" : "סיסמא טובה",
"Strong password" : "סיסמא חזקה",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "שרת האינטרנט שלך אינו מוגדר כהלכה לאפשר סנכרון כיוון שממשק ה־WebDAV כנראה שבור.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "שרת האינטרנט שלך לא מוגדר כהלכה לפתור \"{url}\". מידע נוסף קיים <a target=\"_blank\" href=\"{docLink}\">במסמכים</a> שלנו.",
+ "Error occurred while checking server setup" : "שגיאה אירעה בזמן בדיקת התקנת השרת",
"Shared" : "שותף",
+ "Shared with {recipients}" : "שיתוף עם {recipients}",
"Error" : "שגיאה",
"Error while sharing" : "שגיאה במהלך השיתוף",
"Error while unsharing" : "שגיאה במהלך ביטול השיתוף",
@@ -114,46 +150,85 @@ 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" : "ניתן לשתף עם אנשים אחרים המשתמשים ב- ownClouds בעזרת הפורמט הבא 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" : "מחיקה",
"Add" : "הוספה",
"Edit tags" : "עריכת תגים",
+ "Error loading dialog template: {error}" : "שגיאה בזמן טעינת תבנית דיאלוג: {error}",
+ "No tags selected for deletion." : "לא סומנו תגים למחיקה.",
"unknown text" : "מלל לא מוכר",
"Hello world!" : "שלום עולם!",
"sunny" : "שמשי",
"Hello {name}, the weather is {weather}" : "שלום {name}, מזג האוויר הנו {weather}",
"Hello {name}" : "שלום {name}",
+ "_download %n file_::_download %n files_" : ["הורד %n קובץ","הורדו %n קבצים"],
+ "{version} is available. Get more information on how to update." : "{version} זמינה. ניתן לקבל מידע נוסף על איך לעדכן.",
+ "An error occurred." : "אירעה שגיאה.",
+ "Please reload the page." : "יש להעלות מחדש דף זה.",
+ "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}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
"New password" : "ססמה חדשה",
"New Password" : "סיסמא חדשה",
"Reset password" : "איפוס ססמה",
+ "Searching other places" : "מחפש במקומות אחרים",
+ "No search results in other folders" : "אין תוצאות חיפוש בתיקיות אחרות",
"Personal" : "אישי",
"Users" : "משתמשים",
"Apps" : "יישומים",
"Admin" : "מנהל",
"Help" : "עזרה",
+ "Error loading tags" : "שגיאה בטעינת תגיות",
+ "Tag already exists" : "תגית כבר קיימת",
+ "Error deleting tag(s)" : "שגיאה במחיקת תגית(יות)",
+ "Error tagging" : "שגיאה בביצוע תגיות",
+ "Error untagging" : "שגיאה בהסרת תגיות",
+ "Error favoriting" : "שגיאה בקביעת מועדפים",
+ "Error unfavoriting" : "שגיאה בהסרת מועדפים",
"Access forbidden" : "הגישה נחסמה",
+ "File not found" : "קובץ לא נמצא",
+ "The specified document has not been found on the server." : "המסמך המבוקש לא נמצא על השרת.",
+ "You can click here to return to %s." : "ניתן ללחוץ כאן לחזרה אל %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "שלום רב,\n\nרצינו לעדכן אותך ש- %s שיתף/שיתפה %s איתך.\nניתן לצפות בשיתוף כאן: %s\n\n",
"The share will expire on %s." : "השיתוף יפוג תוקף ב- %s.",
"Cheers!" : "לחיים!",
+ "Internal Server Error" : "שגיאה פנימית בשרת",
+ "Technical details" : "פרטים טכנים",
+ "Remote Address: %s" : "כתובת מרוחקת: %s",
+ "Request ID: %s" : "מספר זיהוי מבוקש: %s",
+ "Type: %s" : "סוג: %s",
+ "Code: %s" : "קוד: %s",
+ "Message: %s" : "הודעה: %s",
+ "File: %s" : "קובץ: %s",
+ "Line: %s" : "שורה: %s",
+ "Trace" : "עקבות",
+ "Security warning" : "אזהרת אבטחה",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.",
"Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>",
"Username" : "שם משתמש",
+ "Storage & database" : "אחסון ומסד נתונים",
"Data folder" : "תיקיית נתונים",
"Configure the database" : "הגדרת מסד הנתונים",
+ "Only %s is available." : "רק %s זמין.",
"Database user" : "שם משתמש במסד הנתונים",
"Database password" : "ססמת מסד הנתונים",
"Database name" : "שם מסד הנתונים",
"Database tablespace" : "מרחב הכתובות של מסד הנתונים",
"Database host" : "שרת בסיס נתונים",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.",
"Finish setup" : "סיום התקנה",
+ "Finishing …" : "מסיים...",
"Need help?" : "עזרה נזקקת?",
"Log out" : "התנתקות",
"Search" : "חיפוש",
diff --git a/core/l10n/he.json b/core/l10n/he.json
index 2169d5f5389..bb4aa68855d 100644
--- a/core/l10n/he.json
+++ b/core/l10n/he.json
@@ -1,13 +1,26 @@
{ "translations": {
+ "Couldn't send mail to following users: %s " : "לא ניתן היה לשלוח דואר אלקטרוני למשתמשים הבאים %s ",
"Preparing update" : "מכין עדכון",
"Turned on maintenance mode" : "הפעלת מצב אחזקה",
"Turned off maintenance mode" : "כיבוי מצב אחזקה",
"Maintenance mode is kept active" : "מצב אחזקה נשמר פעיל",
+ "Updating database schema" : "עדכון סכימת מסד נתונים",
"Updated database" : "עדכון מסד נתונים",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "בודק אם סכימת מסד הנתונים ניתנת לעדכון (פעולה זו יכולה להמשך זמן רב תלוי בגודל מסד הנתונים)",
+ "Checked database schema update" : "עדכון סכימת מסד נתונים נבדק",
"Checking updates of apps" : "בדיקת עדכוני יישומים",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "בודק אם סכימת מסד הנתונים עבור %s ניתנת לעדכון (פעולה זו יכולה להמשך זמן רב תלוי בגודל מסד הנתונים)",
+ "Checked database schema update for apps" : "עדכון סכימת מסד נתונים ליישומים נבדק",
"Updated \"%s\" to %s" : "מעדכן \"%s\" ל- %s",
"Repair warning: " : "אזהרת תיקון:",
"Repair error: " : "שגיאת תיקון:",
+ "Set log level to debug" : "קביעת רמת דיווח לתהליך ניפוי בשגיאות",
+ "Reset log level" : "קביעה מחדש לרמת דיווח",
+ "Starting code integrity check" : "התחלת בדיקת תקינות קוד",
+ "Finished code integrity check" : "סיום בדיקת תקינות קוד",
+ "%s (3rdparty)" : "%s (צד שלישי)",
+ "%s (incompatible)" : "%s (לא תואם)",
+ "Following apps have been disabled: %s" : "היישומים הבאים נוטרלו: %s",
"Already up to date" : "כבר עדכני",
"Please select a file." : "יש לבחור קובץ.",
"File is too big" : "הקובץ גדול מדי",
@@ -16,6 +29,10 @@
"Unknown filetype" : "סוג קובץ לא מוכר",
"Invalid image" : "תמונה לא חוקית",
"An error occurred. Please contact your admin." : "אירעה שגיאה. יש ליצור קשר עם המנהל שלך.",
+ "No temporary profile picture available, try again" : "לא קיימת תמונת פרופיל זמנית, יש לנסות שוב",
+ "No crop data provided" : "לא סופק מידע קיטום",
+ "No valid crop data provided" : "לא סופק מידע קיטום חוקי",
+ "Crop is not square" : "הקיטום אינו מרובע",
"Sunday" : "יום ראשון",
"Monday" : "יום שני",
"Tuesday" : "יום שלישי",
@@ -61,24 +78,43 @@
"Oct." : "אוק׳",
"Nov." : "נוב׳",
"Dec." : "דצמ׳",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">קיימות בעיות עם בדיקת תקינות קוד. למידע נוסף…</a>",
"Settings" : "הגדרות",
"Saving..." : "שמירה…",
"seconds ago" : "שניות",
+ "Couldn't send reset email. Please contact your administrator." : "לא ניתן היה לשלוח דואר אלקטרוני לאיפוס. יש לפנות למנהל שלך.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "הקישור לאיפוס הסיסמא שלך נשלח אליך בדואר אלקטרוני. אם לא קיבלת את הקישור תוך זמן סביר, מוטב לבדוק את תיבת דואר הזבל/ספאם שלך.<br>אם ההודעה אינה שם, יש לשאול את המנהל המקומי שלך .",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "הקבצים שלך מוצפנים. אם לא הפעלת את מפתח השחזור, לא תהיה דרך לקבל את המידע מחדש אחרי שהסיסמא תאופס.<br />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
+ "I know what I'm doing" : "אני יודע/ת מה אני עושה",
+ "Password can not be changed. Please contact your administrator." : "לא ניתן לשנות את הסיסמא. יש לפנות למנהל שלך.",
"No" : "לא",
"Yes" : "כן",
"Choose" : "בחירה",
+ "Error loading file picker template: {error}" : "שגיאה בטעינת תבנית בחירת הקבצים: {error}",
"Ok" : "בסדר",
+ "Error loading message template: {error}" : "שגיאה בטעינת תבנית ההודעות: {error}",
"read-only" : "לקריאה בלבד",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} הנגשות קובץ","{count} התנגשויות קבצים"],
+ "One file conflict" : "התנגשות קובץ אחת",
"New Files" : "קבצים חדשים",
+ "Already existing files" : "קבצים קיימים כבר",
+ "Which files do you want to keep?" : "אילו קבצים ברצונך לשמור?",
+ "If you select both versions, the copied file will have a number added to its name." : "אם תבחר האפשרות לשמור את שתי הגרסאות, לשם קובץ המועתק יתווסף מספר.",
"Cancel" : "ביטול",
"Continue" : "המשך",
"(all selected)" : "(הכול נבחר)",
+ "({count} selected)" : "({count} נבחרו)",
+ "Error loading file exists template" : "שגיאה בטעינת קובץ תבנית קיימים",
"Very weak password" : "סיסמא מאוד חלשה",
"Weak password" : "סיסמא חלשה",
"So-so password" : "סיסמא ככה-ככה",
"Good password" : "סיסמא טובה",
"Strong password" : "סיסמא חזקה",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "שרת האינטרנט שלך אינו מוגדר כהלכה לאפשר סנכרון כיוון שממשק ה־WebDAV כנראה שבור.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "שרת האינטרנט שלך לא מוגדר כהלכה לפתור \"{url}\". מידע נוסף קיים <a target=\"_blank\" href=\"{docLink}\">במסמכים</a> שלנו.",
+ "Error occurred while checking server setup" : "שגיאה אירעה בזמן בדיקת התקנת השרת",
"Shared" : "שותף",
+ "Shared with {recipients}" : "שיתוף עם {recipients}",
"Error" : "שגיאה",
"Error while sharing" : "שגיאה במהלך השיתוף",
"Error while unsharing" : "שגיאה במהלך ביטול השיתוף",
@@ -112,46 +148,85 @@
"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" : "ניתן לשתף עם אנשים אחרים המשתמשים ב- ownClouds בעזרת הפורמט הבא 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" : "מחיקה",
"Add" : "הוספה",
"Edit tags" : "עריכת תגים",
+ "Error loading dialog template: {error}" : "שגיאה בזמן טעינת תבנית דיאלוג: {error}",
+ "No tags selected for deletion." : "לא סומנו תגים למחיקה.",
"unknown text" : "מלל לא מוכר",
"Hello world!" : "שלום עולם!",
"sunny" : "שמשי",
"Hello {name}, the weather is {weather}" : "שלום {name}, מזג האוויר הנו {weather}",
"Hello {name}" : "שלום {name}",
+ "_download %n file_::_download %n files_" : ["הורד %n קובץ","הורדו %n קבצים"],
+ "{version} is available. Get more information on how to update." : "{version} זמינה. ניתן לקבל מידע נוסף על איך לעדכן.",
+ "An error occurred." : "אירעה שגיאה.",
+ "Please reload the page." : "יש להעלות מחדש דף זה.",
+ "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}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
"New password" : "ססמה חדשה",
"New Password" : "סיסמא חדשה",
"Reset password" : "איפוס ססמה",
+ "Searching other places" : "מחפש במקומות אחרים",
+ "No search results in other folders" : "אין תוצאות חיפוש בתיקיות אחרות",
"Personal" : "אישי",
"Users" : "משתמשים",
"Apps" : "יישומים",
"Admin" : "מנהל",
"Help" : "עזרה",
+ "Error loading tags" : "שגיאה בטעינת תגיות",
+ "Tag already exists" : "תגית כבר קיימת",
+ "Error deleting tag(s)" : "שגיאה במחיקת תגית(יות)",
+ "Error tagging" : "שגיאה בביצוע תגיות",
+ "Error untagging" : "שגיאה בהסרת תגיות",
+ "Error favoriting" : "שגיאה בקביעת מועדפים",
+ "Error unfavoriting" : "שגיאה בהסרת מועדפים",
"Access forbidden" : "הגישה נחסמה",
+ "File not found" : "קובץ לא נמצא",
+ "The specified document has not been found on the server." : "המסמך המבוקש לא נמצא על השרת.",
+ "You can click here to return to %s." : "ניתן ללחוץ כאן לחזרה אל %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "שלום רב,\n\nרצינו לעדכן אותך ש- %s שיתף/שיתפה %s איתך.\nניתן לצפות בשיתוף כאן: %s\n\n",
"The share will expire on %s." : "השיתוף יפוג תוקף ב- %s.",
"Cheers!" : "לחיים!",
+ "Internal Server Error" : "שגיאה פנימית בשרת",
+ "Technical details" : "פרטים טכנים",
+ "Remote Address: %s" : "כתובת מרוחקת: %s",
+ "Request ID: %s" : "מספר זיהוי מבוקש: %s",
+ "Type: %s" : "סוג: %s",
+ "Code: %s" : "קוד: %s",
+ "Message: %s" : "הודעה: %s",
+ "File: %s" : "קובץ: %s",
+ "Line: %s" : "שורה: %s",
+ "Trace" : "עקבות",
+ "Security warning" : "אזהרת אבטחה",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.",
"Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>",
"Username" : "שם משתמש",
+ "Storage & database" : "אחסון ומסד נתונים",
"Data folder" : "תיקיית נתונים",
"Configure the database" : "הגדרת מסד הנתונים",
+ "Only %s is available." : "רק %s זמין.",
"Database user" : "שם משתמש במסד הנתונים",
"Database password" : "ססמת מסד הנתונים",
"Database name" : "שם מסד הנתונים",
"Database tablespace" : "מרחב הכתובות של מסד הנתונים",
"Database host" : "שרת בסיס נתונים",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.",
"Finish setup" : "סיום התקנה",
+ "Finishing …" : "מסיים...",
"Need help?" : "עזרה נזקקת?",
"Log out" : "התנתקות",
"Search" : "חיפוש",
diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js
index 4694f01e1f9..48f199570e5 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -16,12 +16,15 @@ OC.L10N.register(
"Updated \"%s\" to %s" : "Oppdaterte \"%s\" til %s",
"Repair warning: " : "Advarsel fra reparering: ",
"Repair error: " : "Feil ved reparering: ",
+ "Set log level to debug" : "Sett loggnivå til feilsøking",
+ "Reset log level" : "Nullstill loggnivå",
"Starting code integrity check" : "Starter sjekk av kode-integritet",
"Finished code integrity check" : "Ferdig med sjekk av kode-integritet",
"%s (3rdparty)" : "%s (3dje-part)",
"%s (incompatible)" : "%s (ikke kompatibel)",
"Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s",
"Already up to date" : "Allerede oppdatert",
+ "Please select a file." : "Vennligst velg en fil.",
"File is too big" : "Filen er for stor",
"Invalid file provided" : "Ugyldig fil oppgitt",
"No image or file provided" : "Bilde eller fil ikke angitt",
@@ -110,6 +113,7 @@ OC.L10N.register(
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Web-serveren er ikke satt opp riktig for å oppløse \"{url}\". Mer informasjon finnes i <a target=\"_blank\" href=\"{docLink}\">dokumentasjonen</a>.",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a target=\"_blank\" href=\"{docLink}\">dokumentasjonen</a>.",
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index e58aed66b3d..a3b94fb31ff 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -14,12 +14,15 @@
"Updated \"%s\" to %s" : "Oppdaterte \"%s\" til %s",
"Repair warning: " : "Advarsel fra reparering: ",
"Repair error: " : "Feil ved reparering: ",
+ "Set log level to debug" : "Sett loggnivå til feilsøking",
+ "Reset log level" : "Nullstill loggnivå",
"Starting code integrity check" : "Starter sjekk av kode-integritet",
"Finished code integrity check" : "Ferdig med sjekk av kode-integritet",
"%s (3rdparty)" : "%s (3dje-part)",
"%s (incompatible)" : "%s (ikke kompatibel)",
"Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s",
"Already up to date" : "Allerede oppdatert",
+ "Please select a file." : "Vennligst velg en fil.",
"File is too big" : "Filen er for stor",
"Invalid file provided" : "Ugyldig fil oppgitt",
"No image or file provided" : "Bilde eller fil ikke angitt",
@@ -108,6 +111,7 @@
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Web-serveren er ikke satt opp riktig for å oppløse \"{url}\". Mer informasjon finnes i <a target=\"_blank\" href=\"{docLink}\">dokumentasjonen</a>.",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a target=\"_blank\" href=\"{docLink}\">dokumentasjonen</a>.",
diff --git a/core/vendor/davclient.js/lib/client.js b/core/vendor/davclient.js/lib/client.js
index 18bbf13f3cd..1a73c7db020 100644
--- a/core/vendor/davclient.js/lib/client.js
+++ b/core/vendor/davclient.js/lib/client.js
@@ -1,5 +1,19 @@
if (typeof dav == 'undefined') { dav = {}; };
+dav._XML_CHAR_MAP = {
+ '<': '&lt;',
+ '>': '&gt;',
+ '&': '&amp;',
+ '"': '&quot;',
+ "'": '&apos;'
+};
+
+dav._escapeXml = function(s) {
+ return s.replace(/[<>&"']/g, function (ch) {
+ return dav._XML_CHAR_MAP[ch];
+ });
+};
+
dav.Client = function(options) {
var i;
for(i in options) {
@@ -86,6 +100,57 @@ dav.Client.prototype = {
},
/**
+ * Generates a propPatch request.
+ *
+ * @param {string} url Url to do the proppatch request on
+ * @param {Array} properties List of properties to store.
+ * @return {Promise}
+ */
+ propPatch : function(url, properties, headers) {
+ headers = headers || {};
+
+ headers['Content-Type'] = 'application/xml; charset=utf-8';
+
+ var body =
+ '<?xml version="1.0"?>\n' +
+ '<d:propertyupdate ';
+ var namespace;
+ for (namespace in this.xmlNamespaces) {
+ body += ' xmlns:' + this.xmlNamespaces[namespace] + '="' + namespace + '"';
+ }
+ body += '>\n' +
+ ' <d:set>\n' +
+ ' <d:prop>\n';
+
+ for(var ii in properties) {
+
+ var property = this.parseClarkNotation(ii);
+ var propName;
+ var propValue = properties[ii];
+ if (this.xmlNamespaces[property.namespace]) {
+ propName = this.xmlNamespaces[property.namespace] + ':' + property.name;
+ } else {
+ propName = 'x:' + property.name + ' xmlns:x="' + property.namespace + '"';
+ }
+ body += ' <' + propName + '>' + dav._escapeXml(propValue) + '</' + propName + '>\n';
+ }
+ body+=' </d:prop>\n';
+ body+=' </d:set>\n';
+ body+='</d:propertyupdate>';
+
+ return this.request('PROPPATCH', url, headers, body).then(
+ function(result) {
+ return {
+ status: result.status,
+ body: result.body,
+ xhr: result.xhr
+ };
+ }.bind(this)
+ );
+
+ },
+
+ /**
* Performs a HTTP request, and returns a Promise
*
* @param {string} method HTTP method
diff --git a/issue_template.md b/issue_template.md
index 0295eb9c336..424f6c062a9 100644
--- a/issue_template.md
+++ b/issue_template.md
@@ -22,6 +22,14 @@ Tell us what happens instead
**Updated from an older ownCloud or fresh install:**
+**Signing status (ownCloud 9.0 and above):**
+
+```
+Login as admin user into your ownCloud and access
+http://example.com/index.php/settings/integrity/failed
+paste the results here.
+```
+
**List of activated apps:**
```
diff --git a/lib/l10n/he.js b/lib/l10n/he.js
index 3c150ca5120..da1a90cf266 100644
--- a/lib/l10n/he.js
+++ b/lib/l10n/he.js
@@ -9,15 +9,26 @@ OC.L10N.register(
"Invalid image" : "תמונה לא חוקית",
"today" : "היום",
"yesterday" : "אתמול",
+ "_%n day ago_::_%n days ago_" : ["לפני %n יום","לפני %n ימים"],
"last month" : "חודש שעבר",
"last year" : "שנה שעברה",
+ "_%n year ago_::_%n years ago_" : ["לפני %n שנה","לפני %n שנים"],
"seconds ago" : "שניות",
"web services under your control" : "שירותי רשת תחת השליטה שלך",
+ "Empty filename is not allowed" : "שם קובץ ריק אינו מאושר",
"File name contains at least one invalid character" : "שם קובץ כולל לפחות תו אחד לא חוקי",
+ "File name is too long" : "שם קובץ ארוך מדי",
+ "Can't read file" : "לא ניתן לקרוא קובץ",
+ "App directory already exists" : "תיקיית יישום כבר קיימת",
"Application is not enabled" : "יישומים אינם מופעלים",
"Authentication error" : "שגיאת הזדהות",
"Token expired. Please reload page." : "פג תוקף. נא לטעון שוב את הדף.",
+ "Unknown user" : "משתמש לא ידוע",
+ "DB Error: \"%s\"" : "שגיאת מסד נתונים: \"%s\"",
+ "Set an admin username." : "קביעת שם משתמש מנהל",
+ "Set an admin password." : "קביעת סיסמת מנהל",
"%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
+ "%s via %s" : "%s על בסיס %s",
"Could not find category \"%s\"" : "לא ניתן למצוא את הקטגוריה „%s“",
"Apps" : "יישומים",
"A valid username must be provided" : "יש לספק שם משתמש תקני",
diff --git a/lib/l10n/he.json b/lib/l10n/he.json
index 587ae1549d0..c1b4cf95086 100644
--- a/lib/l10n/he.json
+++ b/lib/l10n/he.json
@@ -7,15 +7,26 @@
"Invalid image" : "תמונה לא חוקית",
"today" : "היום",
"yesterday" : "אתמול",
+ "_%n day ago_::_%n days ago_" : ["לפני %n יום","לפני %n ימים"],
"last month" : "חודש שעבר",
"last year" : "שנה שעברה",
+ "_%n year ago_::_%n years ago_" : ["לפני %n שנה","לפני %n שנים"],
"seconds ago" : "שניות",
"web services under your control" : "שירותי רשת תחת השליטה שלך",
+ "Empty filename is not allowed" : "שם קובץ ריק אינו מאושר",
"File name contains at least one invalid character" : "שם קובץ כולל לפחות תו אחד לא חוקי",
+ "File name is too long" : "שם קובץ ארוך מדי",
+ "Can't read file" : "לא ניתן לקרוא קובץ",
+ "App directory already exists" : "תיקיית יישום כבר קיימת",
"Application is not enabled" : "יישומים אינם מופעלים",
"Authentication error" : "שגיאת הזדהות",
"Token expired. Please reload page." : "פג תוקף. נא לטעון שוב את הדף.",
+ "Unknown user" : "משתמש לא ידוע",
+ "DB Error: \"%s\"" : "שגיאת מסד נתונים: \"%s\"",
+ "Set an admin username." : "קביעת שם משתמש מנהל",
+ "Set an admin password." : "קביעת סיסמת מנהל",
"%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
+ "%s via %s" : "%s על בסיס %s",
"Could not find category \"%s\"" : "לא ניתן למצוא את הקטגוריה „%s“",
"Apps" : "יישומים",
"A valid username must be provided" : "יש לספק שם משתמש תקני",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index a0619055f3a..1752eca4971 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -56,6 +56,7 @@ OC.L10N.register(
"Archives of type %s are not supported" : "\"%s\"タイプのアーカイブ形式は未サポート",
"Failed to open archive when installing app" : "アプリをインストール中にアーカイブファイルを開けませんでした。",
"App does not provide an info.xml file" : "アプリにinfo.xmlファイルが入っていません",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "署名が確認できませんでした。このアプリの開発者へ連絡し、管理画面を確認してください。",
"App can't be installed because of not allowed code in the App" : "アプリで許可されないコードが入っているのが原因でアプリがインストールできません",
"App can't be installed because it is not compatible with this version of ownCloud" : "アプリは、このバージョンのownCloudと互換性がないためインストールできません。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "非shippedアプリには許可されない<shipped>true</shipped>タグが含まれているためにアプリをインストールできません。",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index 681b479ff23..685d9743dd2 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -54,6 +54,7 @@
"Archives of type %s are not supported" : "\"%s\"タイプのアーカイブ形式は未サポート",
"Failed to open archive when installing app" : "アプリをインストール中にアーカイブファイルを開けませんでした。",
"App does not provide an info.xml file" : "アプリにinfo.xmlファイルが入っていません",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "署名が確認できませんでした。このアプリの開発者へ連絡し、管理画面を確認してください。",
"App can't be installed because of not allowed code in the App" : "アプリで許可されないコードが入っているのが原因でアプリがインストールできません",
"App can't be installed because it is not compatible with this version of ownCloud" : "アプリは、このバージョンのownCloudと互換性がないためインストールできません。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "非shippedアプリには許可されない<shipped>true</shipped>タグが含まれているためにアプリをインストールできません。",
diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js
index b7fa5a63510..1d50aec03d1 100644
--- a/lib/l10n/nb_NO.js
+++ b/lib/l10n/nb_NO.js
@@ -56,6 +56,7 @@ OC.L10N.register(
"Archives of type %s are not supported" : "Arkiver av type %s støttes ikke",
"Failed to open archive when installing app" : "Klarte ikke å åpne arkiv ved installering av app",
"App does not provide an info.xml file" : "App-en inneholder ikke filen info.xml",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur kunne ikke sjekkes. Kontakt app-utvikleren og sjekk admin-bildet.",
"App can't be installed because of not allowed code in the App" : "App kan ikke installeres på grunn av ulovlig kode i appen.",
"App can't be installed because it is not compatible with this version of ownCloud" : "App kan ikke installeres fordi den ikke er kompatibel med denne versjonen av ownCloud",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den inneholder tag <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
@@ -112,6 +113,9 @@ OC.L10N.register(
"Sharing %s failed, because resharing is not allowed" : "Deling av %s feilet, fordi videre-deling ikke er tillatt",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
+ "Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
+ "Expiration date is in the past" : "Utløpsdato er tilbake i tid",
+ "Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
"Apps" : "Apper",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-\"",
diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json
index a2a2a9c1b7f..067db0b1450 100644
--- a/lib/l10n/nb_NO.json
+++ b/lib/l10n/nb_NO.json
@@ -54,6 +54,7 @@
"Archives of type %s are not supported" : "Arkiver av type %s støttes ikke",
"Failed to open archive when installing app" : "Klarte ikke å åpne arkiv ved installering av app",
"App does not provide an info.xml file" : "App-en inneholder ikke filen info.xml",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur kunne ikke sjekkes. Kontakt app-utvikleren og sjekk admin-bildet.",
"App can't be installed because of not allowed code in the App" : "App kan ikke installeres på grunn av ulovlig kode i appen.",
"App can't be installed because it is not compatible with this version of ownCloud" : "App kan ikke installeres fordi den ikke er kompatibel med denne versjonen av ownCloud",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den inneholder tag <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
@@ -110,6 +111,9 @@
"Sharing %s failed, because resharing is not allowed" : "Deling av %s feilet, fordi videre-deling ikke er tillatt",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
+ "Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
+ "Expiration date is in the past" : "Utløpsdato er tilbake i tid",
+ "Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
"Apps" : "Apper",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-\"",
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index fce4ae0d142..e782091343c 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -56,6 +56,7 @@ OC.L10N.register(
"Archives of type %s are not supported" : "Archiefbestanden van type %s niet ondersteund",
"Failed to open archive when installing app" : "Kon archiefbestand bij installatie van de app niet openen",
"App does not provide an info.xml file" : "De app heeft geen info.xml bestand",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Handtekening kon niet worden geverifieerd. Nee contact op met de ontwikkelaar van de app en check uw beheerscherm.",
"App can't be installed because of not allowed code in the App" : "De app kan niet worden geïnstalleerd wegens onjuiste code in de app",
"App can't be installed because it is not compatible with this version of ownCloud" : "De app kan niet worden geïnstalleerd omdat die niet compatible is met deze versie van ownCloud",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "De app kan niet worden geïnstallerd omdat het de <shipped>true</shipped> tag bevat die niet is toegestaan voor niet gepubliceerde apps",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index ec63a8252d3..d245b6d53d7 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -54,6 +54,7 @@
"Archives of type %s are not supported" : "Archiefbestanden van type %s niet ondersteund",
"Failed to open archive when installing app" : "Kon archiefbestand bij installatie van de app niet openen",
"App does not provide an info.xml file" : "De app heeft geen info.xml bestand",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Handtekening kon niet worden geverifieerd. Nee contact op met de ontwikkelaar van de app en check uw beheerscherm.",
"App can't be installed because of not allowed code in the App" : "De app kan niet worden geïnstalleerd wegens onjuiste code in de app",
"App can't be installed because it is not compatible with this version of ownCloud" : "De app kan niet worden geïnstalleerd omdat die niet compatible is met deze versie van ownCloud",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "De app kan niet worden geïnstallerd omdat het de <shipped>true</shipped> tag bevat die niet is toegestaan voor niet gepubliceerde apps",
diff --git a/lib/private/backgroundjob/job.php b/lib/private/backgroundjob/job.php
index 677b37e9297..e7268894848 100644
--- a/lib/private/backgroundjob/job.php
+++ b/lib/private/backgroundjob/job.php
@@ -52,7 +52,10 @@ abstract class Job implements IJob {
$this->run($this->argument);
} catch (\Exception $e) {
if ($logger) {
- $logger->error('Error while running background job: ' . $e->getMessage());
+ $logger->logException($e, [
+ 'app' => 'core',
+ 'message' => 'Error while running background job (class: ' . get_class($this) . ', arguments: ' . print_r($this->argument, true) . ')'
+ ]);
}
}
}
diff --git a/lib/private/files/cache/propagator.php b/lib/private/files/cache/propagator.php
index 1e85a2ecc8b..50264e54d44 100644
--- a/lib/private/files/cache/propagator.php
+++ b/lib/private/files/cache/propagator.php
@@ -43,9 +43,10 @@ class Propagator implements IPropagator {
/**
* @param string $internalPath
* @param int $time
- * @return array[] all propagated cache entries
+ * @param int $sizeDifference number of bytes the file has grown
+ * @return array[] all propagated entries
*/
- public function propagateChange($internalPath, $time) {
+ public function propagateChange($internalPath, $time, $sizeDifference = 0) {
$cache = $this->storage->getCache($internalPath);
$parentId = $cache->getParentId($internalPath);
@@ -58,7 +59,12 @@ class Propagator implements IPropagator {
}
$mtime = max($time, $entry['mtime']);
- $cache->update($parentId, ['mtime' => $mtime, 'etag' => $this->storage->getETag($entry['path'])]);
+ if ($entry['size'] === -1) {
+ $newSize = -1;
+ } else {
+ $newSize = $entry['size'] + $sizeDifference;
+ }
+ $cache->update($parentId, ['mtime' => $mtime, 'etag' => $this->storage->getETag($entry['path']), 'size' => $newSize]);
$parentId = $entry['parent'];
}
diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php
index 1c50978a2e5..60daa323b4b 100644
--- a/lib/private/files/cache/scanner.php
+++ b/lib/private/files/cache/scanner.php
@@ -198,6 +198,7 @@ class Scanner extends BasicEmitter implements IScanner {
if (!empty($newData)) {
$data['fileid'] = $this->addToCache($file, $newData, $fileId);
}
+ $data['oldSize'] = $cacheData['size'];
// post-emit only if it was a file. By that we avoid counting/treating folders as files
if ($data['mimetype'] !== 'httpd/unix-directory') {
diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php
index 58d8e53cfd1..80ba704883e 100644
--- a/lib/private/files/cache/updater.php
+++ b/lib/private/files/cache/updater.php
@@ -118,9 +118,15 @@ class Updater implements IUpdater {
}
$data = $this->scanner->scan($path, Scanner::SCAN_SHALLOW, -1, false);
+ if (isset($data['oldSize']) && isset($data['size'])) {
+ $sizeDifference = $data['size'] - $data['oldSize'];
+ } else {
+ // scanner didn't provide size info, fallback to full size calculation
+ $sizeDifference = 0;
+ $this->cache->correctFolderSize($path, $data);
+ }
$this->correctParentStorageMtime($path);
- $this->cache->correctFolderSize($path, $data);
- $this->propagator->propagateChange($path, $time);
+ $this->propagator->propagateChange($path, $time, $sizeDifference);
}
/**
diff --git a/lib/private/log.php b/lib/private/log.php
index 6c1666a9d7f..addefe6e53d 100644
--- a/lib/private/log.php
+++ b/lib/private/log.php
@@ -285,6 +285,8 @@ class Log implements ILogger {
'Line' => $exception->getLine(),
);
$exception['Trace'] = preg_replace('!(login|checkPassword)\(.*\)!', '$1(*** username and password replaced ***)', $exception['Trace']);
- $this->error('Exception: ' . json_encode($exception), $context);
+ $msg = isset($context['message']) ? $context['message'] : 'Exception';
+ $msg .= ': ' . json_encode($exception);
+ $this->error($msg, $context);
}
}
diff --git a/lib/public/ilogger.php b/lib/public/ilogger.php
index 368b25ab693..2a727697a6a 100644
--- a/lib/public/ilogger.php
+++ b/lib/public/ilogger.php
@@ -125,6 +125,14 @@ interface ILogger {
/**
* Logs an exception very detailed
+ * An additional message can we written to the log by adding it to the
+ * context.
+ *
+ * <code>
+ * $logger->logException($ex, [
+ * 'message' => 'Exception during cron job execution'
+ * ]);
+ * </code>
*
* @param \Exception $exception
* @param array $context
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index 8352ec614b8..8a2eaddf07e 100644
--- a/settings/l10n/he.js
+++ b/settings/l10n/he.js
@@ -123,6 +123,7 @@ OC.L10N.register(
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.",
"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." : "השרת רץ על גבי חלונות של מיקוסופט. אנו ממליצים בחום על לינוקס לחווית משתמש מיטבית.",
"%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.",
@@ -132,6 +133,7 @@ OC.L10N.register(
"This means that there might be problems with certain characters in file names." : "משמעות הדבר היא כי ייתכן שיש בעיות עם תוים מסוימים בשמות קבצים.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : " אנו ממליצים בחום להתקין את החבילות הנדרשות במערכת שלך כדי לתמוך באחת מהגדרות השפה הבאות: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "אם המערכת שלך לא מותקנת על נתיב הבסיס של שם התחום ומשתמשת במערכת cron, עלולות להיות בעיות עם יצירת כתובות האינטרנט. למניעת בעיות אלו, יש לקבוע את האופציה \"overwrite.cli.url\" בקובץ ה- config.php לנתיב הבסיסי של ההתקנה שלך (הציעו: \"%s \")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "לא ניתן היה להפעיל את cronjob דרך CLI. השגיאות הבאות נצפתו:",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "יש לבדוק בשבע עיניים את ה- <a target=\"_blank\" href=\"%s\">מדריכי ההתקנה ↗</a>, ולחפש אחר כל שגיאה או הזהרה ב- <a href=\"#log-section\">לוג</a>.",
"All checks passed." : "כל הבדיקות עברו",
"Open documentation" : "תיעוד פתוח",
@@ -154,9 +156,15 @@ OC.L10N.register(
"Last cron job execution: %s. Something seems wrong." : "פעילות cron job אחרונה: %s. משהו נראה שגוי.",
"Cron was not executed yet!" : "Cron עדיין לא בוצע!",
"Execute one task with each page loaded" : "יש להפעיל משימה אחת עם כל עמוד שנטען",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php רשום בשירות webcron לקרוא ל- cron.php בכל 15 דקות באמצעות 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: " : "יש לקרוא בתשומת לב רבה לפני שמפעילים הצפנת צד שרת:",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "ברגע שהצפנה מופעלת, כל הקבצים שיועלו לשרת מרגע זה יהיו מוצפנים בשרת. ניתן יהיה לנטרל את ההצפנה בעתיד רק אם מודול ההצפנה תומך בפונקציה זו, וכל התנאים המוקדמים (דהיינו הגדרת מפתח השחזור) מתקיימים.",
+ "Encryption alone does not guarantee security of the system. Please see ownCloud documentation for more information about how the encryption app works, and the supported use cases." : "הצפנה בלבד אינה מבטיחה את אבטחת המערכת. יש לקרוא את מסמכי ה- ownCloud למידע נוסף איך יישום ההצפנה עובד, ואפשרויות השימוש הנתמכות.",
"Be aware that encryption always increases the file size." : "תשומת לב לכך שהצפנה בהכרח מגדילה את גודל הקובץ.",
+ "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "תמיד טוב ליצור גיבוי קבוע למידע , במקרה של הצפנה יש לוודא שגם מפתחות ההצפנה מגובים עם המידע שלך.",
+ "This is the final warning: Do you really want to enable encryption?" : "זו הזהרה אחרונה: האם באמת ברצונך להפעיל הצפנה?",
"Enable encryption" : "אפשר הצפנה",
"No encryption module loaded, please enable an encryption module in the app menu." : "לא נמצא מודול הצפנה, יש לאפשר מודול הצפנה בתפריט היישומים.",
"Select default encryption module:" : "יש לבחור מודול הצפנת ברירת מחדל:",
@@ -184,14 +192,18 @@ OC.L10N.register(
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!",
"What to log" : "מה לנטר בלוג",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "המערכת משתמשת ב- SQLite כמסד נתונים. להתקנות גדולות אנו ממליצים לעבור למסדי נתונים צד אחורי אחרים.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "לצורך מעבר למסד נתונים אחר ניתן להשתמש בכלי שורת הפעולה: 'occ db:convert-type', או להסתכל ב- <a target=\"_blank\" href=\"%s\">מסמכים הבאים ↗</a>.",
"How to do backups" : "איך לבצע גיבויים",
"Advanced monitoring" : "ניטור מתקדם",
"Performance tuning" : "כוונון ביצועים",
"Improving the config.php" : "שיפור קובץ config.php",
"Theming" : "ערכת נושא",
+ "Hardening and security guidance" : "הדרכת הקשחה ואבטחה",
"Version" : "גרסה",
"Developer documentation" : "תיעוד מפתח",
"Experimental applications ahead" : "ישומים ניסיוניים לפנים",
+ "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "יישומים ניסיוניים לא נבדקו לבעיות אבטחה, חדשים או ידועים כלא יציבים ותחת פיתוח כבד. התקנה שלהם עלולה להוביל לאיבוד מידע או לפרצות אבטחה.",
"by" : "על ידי",
"licensed" : "בעל רישיון",
"Documentation:" : "תיעוד",
@@ -199,9 +211,13 @@ OC.L10N.register(
"Admin documentation" : "תיעוד מנהל",
"Show description …" : "הצגת תיאור ...",
"Hide description …" : "הסתרת תיאור ...",
+ "This app has no minimum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "ליישום זה לא הוקצתה גרסה מינמלית של ownCloud. מצב זה יהיה שגוי בגרסה 11 או מאוחרת יותר של ownCloud.",
+ "This app has no maximum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "ליישום זה לא הוקצתה גרסה מקסימלית של ownCloud. מצב זה יהיה שגוי בגרסה 11 או מאוחרת יותר של ownCloud.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "לא ניתן להתקין את יישום זה כיוון שייחסי התלות הבאים לא התקיימו:",
"Enable only for specific groups" : "אפשר רק לקבוצות מסויימות",
"Uninstall App" : "הסרת יישום",
"Enable experimental apps" : "אפשר יישומים ניסיוניים",
+ "SSL Root Certificates" : "אישורי אבטחת SSL לנתיב יסוד",
"Common Name" : "שם משותף",
"Valid until" : "בתוקף עד",
"Issued By" : "הוצא על ידי",
@@ -254,6 +270,7 @@ OC.L10N.register(
"E-Mail" : "דואר אלקטרוני",
"Create" : "יצירה",
"Admin Recovery Password" : "סיסמת השחזור של המנהל",
+ "Enter the recovery password in order to recover the users files during password change" : "יש להכניס את סיסמת השחזור לצורך שחזור של קבצי המשתמש במהלך החלפת סיסמא",
"Add Group" : "הוספת קבוצה",
"Group" : "קבוצה",
"Everyone" : "כולם",
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index 098e61e1ffc..85ac7fa7f2b 100644
--- a/settings/l10n/he.json
+++ b/settings/l10n/he.json
@@ -121,6 +121,7 @@
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.",
"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." : "השרת רץ על גבי חלונות של מיקוסופט. אנו ממליצים בחום על לינוקס לחווית משתמש מיטבית.",
"%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.",
@@ -130,6 +131,7 @@
"This means that there might be problems with certain characters in file names." : "משמעות הדבר היא כי ייתכן שיש בעיות עם תוים מסוימים בשמות קבצים.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : " אנו ממליצים בחום להתקין את החבילות הנדרשות במערכת שלך כדי לתמוך באחת מהגדרות השפה הבאות: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "אם המערכת שלך לא מותקנת על נתיב הבסיס של שם התחום ומשתמשת במערכת cron, עלולות להיות בעיות עם יצירת כתובות האינטרנט. למניעת בעיות אלו, יש לקבוע את האופציה \"overwrite.cli.url\" בקובץ ה- config.php לנתיב הבסיסי של ההתקנה שלך (הציעו: \"%s \")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "לא ניתן היה להפעיל את cronjob דרך CLI. השגיאות הבאות נצפתו:",
"Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "יש לבדוק בשבע עיניים את ה- <a target=\"_blank\" href=\"%s\">מדריכי ההתקנה ↗</a>, ולחפש אחר כל שגיאה או הזהרה ב- <a href=\"#log-section\">לוג</a>.",
"All checks passed." : "כל הבדיקות עברו",
"Open documentation" : "תיעוד פתוח",
@@ -152,9 +154,15 @@
"Last cron job execution: %s. Something seems wrong." : "פעילות cron job אחרונה: %s. משהו נראה שגוי.",
"Cron was not executed yet!" : "Cron עדיין לא בוצע!",
"Execute one task with each page loaded" : "יש להפעיל משימה אחת עם כל עמוד שנטען",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php רשום בשירות webcron לקרוא ל- cron.php בכל 15 דקות באמצעות 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: " : "יש לקרוא בתשומת לב רבה לפני שמפעילים הצפנת צד שרת:",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "ברגע שהצפנה מופעלת, כל הקבצים שיועלו לשרת מרגע זה יהיו מוצפנים בשרת. ניתן יהיה לנטרל את ההצפנה בעתיד רק אם מודול ההצפנה תומך בפונקציה זו, וכל התנאים המוקדמים (דהיינו הגדרת מפתח השחזור) מתקיימים.",
+ "Encryption alone does not guarantee security of the system. Please see ownCloud documentation for more information about how the encryption app works, and the supported use cases." : "הצפנה בלבד אינה מבטיחה את אבטחת המערכת. יש לקרוא את מסמכי ה- ownCloud למידע נוסף איך יישום ההצפנה עובד, ואפשרויות השימוש הנתמכות.",
"Be aware that encryption always increases the file size." : "תשומת לב לכך שהצפנה בהכרח מגדילה את גודל הקובץ.",
+ "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "תמיד טוב ליצור גיבוי קבוע למידע , במקרה של הצפנה יש לוודא שגם מפתחות ההצפנה מגובים עם המידע שלך.",
+ "This is the final warning: Do you really want to enable encryption?" : "זו הזהרה אחרונה: האם באמת ברצונך להפעיל הצפנה?",
"Enable encryption" : "אפשר הצפנה",
"No encryption module loaded, please enable an encryption module in the app menu." : "לא נמצא מודול הצפנה, יש לאפשר מודול הצפנה בתפריט היישומים.",
"Select default encryption module:" : "יש לבחור מודול הצפנת ברירת מחדל:",
@@ -182,14 +190,18 @@
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!",
"What to log" : "מה לנטר בלוג",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "המערכת משתמשת ב- SQLite כמסד נתונים. להתקנות גדולות אנו ממליצים לעבור למסדי נתונים צד אחורי אחרים.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "לצורך מעבר למסד נתונים אחר ניתן להשתמש בכלי שורת הפעולה: 'occ db:convert-type', או להסתכל ב- <a target=\"_blank\" href=\"%s\">מסמכים הבאים ↗</a>.",
"How to do backups" : "איך לבצע גיבויים",
"Advanced monitoring" : "ניטור מתקדם",
"Performance tuning" : "כוונון ביצועים",
"Improving the config.php" : "שיפור קובץ config.php",
"Theming" : "ערכת נושא",
+ "Hardening and security guidance" : "הדרכת הקשחה ואבטחה",
"Version" : "גרסה",
"Developer documentation" : "תיעוד מפתח",
"Experimental applications ahead" : "ישומים ניסיוניים לפנים",
+ "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "יישומים ניסיוניים לא נבדקו לבעיות אבטחה, חדשים או ידועים כלא יציבים ותחת פיתוח כבד. התקנה שלהם עלולה להוביל לאיבוד מידע או לפרצות אבטחה.",
"by" : "על ידי",
"licensed" : "בעל רישיון",
"Documentation:" : "תיעוד",
@@ -197,9 +209,13 @@
"Admin documentation" : "תיעוד מנהל",
"Show description …" : "הצגת תיאור ...",
"Hide description …" : "הסתרת תיאור ...",
+ "This app has no minimum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "ליישום זה לא הוקצתה גרסה מינמלית של ownCloud. מצב זה יהיה שגוי בגרסה 11 או מאוחרת יותר של ownCloud.",
+ "This app has no maximum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "ליישום זה לא הוקצתה גרסה מקסימלית של ownCloud. מצב זה יהיה שגוי בגרסה 11 או מאוחרת יותר של ownCloud.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "לא ניתן להתקין את יישום זה כיוון שייחסי התלות הבאים לא התקיימו:",
"Enable only for specific groups" : "אפשר רק לקבוצות מסויימות",
"Uninstall App" : "הסרת יישום",
"Enable experimental apps" : "אפשר יישומים ניסיוניים",
+ "SSL Root Certificates" : "אישורי אבטחת SSL לנתיב יסוד",
"Common Name" : "שם משותף",
"Valid until" : "בתוקף עד",
"Issued By" : "הוצא על ידי",
@@ -252,6 +268,7 @@
"E-Mail" : "דואר אלקטרוני",
"Create" : "יצירה",
"Admin Recovery Password" : "סיסמת השחזור של המנהל",
+ "Enter the recovery password in order to recover the users files during password change" : "יש להכניס את סיסמת השחזור לצורך שחזור של קבצי המשתמש במהלך החלפת סיסמא",
"Add Group" : "הוספת קבוצה",
"Group" : "קבוצה",
"Everyone" : "כולם",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index 85a0ecc6334..003778ef207 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -35,6 +35,7 @@ OC.L10N.register(
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
+ "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"Saved" : "Elmentve",
"test email settings" : "e-mail beállítások ellenőrzése",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Hiba történt az e-mail küldésekor. Kérjük ellenőrizd a beállításokat! (Hiba: %s)",
@@ -61,6 +62,7 @@ OC.L10N.register(
"Experimental" : "Kísérleti",
"All" : "Mind",
"No apps found for your version" : "Nem található alkalmazás a verziód számára",
+ "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "A hivatalos alkalmazásokat az ownCloud közösségen belül fejlesztik. \nAz általuk nyújtott központi ownCloud funkciók készen állnak a produktív használatra.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!",
"Update to %s" : "Frissítés erre: %s",
"Please wait...." : "Kérjük várj...",
@@ -76,6 +78,7 @@ OC.L10N.register(
"Uninstall" : "Eltávolítás",
"App update" : "Alkalmazás frissítése",
"No apps found for \"{query}\"" : "Nem található alkalmazás a „{query}” lekérdezésre.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Hiba történt! Kérem töltsön fel egy, ASCII karakterekkel kódolt PEM tanusítványt!",
"Valid until {date}" : "Érvényes: {date}",
"Delete" : "Törlés",
"An error occurred: {message}" : "Hiba történt: {message}",
@@ -95,6 +98,7 @@ OC.L10N.register(
"never" : "soha",
"deleted {userName}" : "törölve: {userName}",
"add group" : "csoport hozzáadása",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "A jelszó megváltoztatása adatvesztéssel jár, mert lehetséges az adatok visszaállítása ennek a felhasználónak",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"Error creating user" : "A felhasználó nem hozható létre",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
@@ -149,6 +153,7 @@ OC.L10N.register(
"Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.",
"Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése",
"Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:",
+ "Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!",
"This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?",
"Enable encryption" : "Titkosítás engedélyezése",
"No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.",
@@ -175,6 +180,7 @@ OC.L10N.register(
"More" : "Több",
"Less" : "Kevesebb",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.",
+ "What to log" : "Mit naplózzon",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.",
"How to do backups" : "Hogyan csináljunk biztonsági mentéseket",
@@ -194,10 +200,13 @@ OC.L10N.register(
"Admin documentation" : "Adminisztrátori dokumentáció",
"Show description …" : "Leírás megjelenítése ...",
"Hide description …" : "Leírás elrejtése ...",
+ "This app has no minimum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Ennek az alkalmazásnak nincs minimális ownCloud verzió megadva. Ez hibát okoz majd az ownCloud 11-es és későbbi verziókban.",
+ "This app has no maximum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Ennek az alkalmazásnak nincs maximális ownCloud verzió megadva. Ez hibát okoz majd az ownCloud 11-es és későbbi verziókban.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az applikációt nem lehet telepíteni, mert a következő függőségek hiányoznak:",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
"Uninstall App" : "Alkalmazás eltávolítása",
"Enable experimental apps" : "Kísérleti alkalmazások engedélyezése",
+ "SSL Root Certificates" : "SSL Root tanusítványok",
"Common Name" : "Általános Név",
"Valid until" : "Érvényes",
"Issued By" : "Kiadta",
@@ -215,7 +224,9 @@ OC.L10N.register(
"Profile picture" : "Profilkép",
"Upload new" : "Új feltöltése",
"Remove image" : "A kép eltávolítása",
+ "png or jpg, max. 20 MB" : "png vagy jpg, max. 20 MB",
"Cancel" : "Mégsem",
+ "Choose as profile picture" : "Kiválasztás profil képként",
"Full name" : "Teljes név",
"No display name set" : "Nincs megjelenítési név beállítva",
"Email" : "E-mail",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index dc99ecde4d1..28f6a323edb 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -33,6 +33,7 @@
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
+ "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"Saved" : "Elmentve",
"test email settings" : "e-mail beállítások ellenőrzése",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Hiba történt az e-mail küldésekor. Kérjük ellenőrizd a beállításokat! (Hiba: %s)",
@@ -59,6 +60,7 @@
"Experimental" : "Kísérleti",
"All" : "Mind",
"No apps found for your version" : "Nem található alkalmazás a verziód számára",
+ "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "A hivatalos alkalmazásokat az ownCloud közösségen belül fejlesztik. \nAz általuk nyújtott központi ownCloud funkciók készen állnak a produktív használatra.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!",
"Update to %s" : "Frissítés erre: %s",
"Please wait...." : "Kérjük várj...",
@@ -74,6 +76,7 @@
"Uninstall" : "Eltávolítás",
"App update" : "Alkalmazás frissítése",
"No apps found for \"{query}\"" : "Nem található alkalmazás a „{query}” lekérdezésre.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Hiba történt! Kérem töltsön fel egy, ASCII karakterekkel kódolt PEM tanusítványt!",
"Valid until {date}" : "Érvényes: {date}",
"Delete" : "Törlés",
"An error occurred: {message}" : "Hiba történt: {message}",
@@ -93,6 +96,7 @@
"never" : "soha",
"deleted {userName}" : "törölve: {userName}",
"add group" : "csoport hozzáadása",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "A jelszó megváltoztatása adatvesztéssel jár, mert lehetséges az adatok visszaállítása ennek a felhasználónak",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"Error creating user" : "A felhasználó nem hozható létre",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
@@ -147,6 +151,7 @@
"Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.",
"Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése",
"Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:",
+ "Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!",
"This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?",
"Enable encryption" : "Titkosítás engedélyezése",
"No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.",
@@ -173,6 +178,7 @@
"More" : "Több",
"Less" : "Kevesebb",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.",
+ "What to log" : "Mit naplózzon",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.",
"How to do backups" : "Hogyan csináljunk biztonsági mentéseket",
@@ -192,10 +198,13 @@
"Admin documentation" : "Adminisztrátori dokumentáció",
"Show description …" : "Leírás megjelenítése ...",
"Hide description …" : "Leírás elrejtése ...",
+ "This app has no minimum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Ennek az alkalmazásnak nincs minimális ownCloud verzió megadva. Ez hibát okoz majd az ownCloud 11-es és későbbi verziókban.",
+ "This app has no maximum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Ennek az alkalmazásnak nincs maximális ownCloud verzió megadva. Ez hibát okoz majd az ownCloud 11-es és későbbi verziókban.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az applikációt nem lehet telepíteni, mert a következő függőségek hiányoznak:",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
"Uninstall App" : "Alkalmazás eltávolítása",
"Enable experimental apps" : "Kísérleti alkalmazások engedélyezése",
+ "SSL Root Certificates" : "SSL Root tanusítványok",
"Common Name" : "Általános Név",
"Valid until" : "Érvényes",
"Issued By" : "Kiadta",
@@ -213,7 +222,9 @@
"Profile picture" : "Profilkép",
"Upload new" : "Új feltöltése",
"Remove image" : "A kép eltávolítása",
+ "png or jpg, max. 20 MB" : "png vagy jpg, max. 20 MB",
"Cancel" : "Mégsem",
+ "Choose as profile picture" : "Kiválasztás profil képként",
"Full name" : "Teljes név",
"No display name set" : "Nincs megjelenítési név beállítva",
"Email" : "E-mail",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index d88fb2a800e..bc73960f269 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -215,6 +215,7 @@ OC.L10N.register(
"Enable only for specific groups" : "特定のグループのみ有効に",
"Uninstall App" : "アプリをアンインストール",
"Enable experimental apps" : "実験的なアプリを有効にする",
+ "SSL Root Certificates" : "SSLルート証明書",
"Common Name" : "コモンネーム",
"Valid until" : "有効期限",
"Issued By" : "発行元",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index c06a6d141e1..ce2ef59730f 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -213,6 +213,7 @@
"Enable only for specific groups" : "特定のグループのみ有効に",
"Uninstall App" : "アプリをアンインストール",
"Enable experimental apps" : "実験的なアプリを有効にする",
+ "SSL Root Certificates" : "SSLルート証明書",
"Common Name" : "コモンネーム",
"Valid until" : "有効期限",
"Issued By" : "発行元",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 6bb499e702f..e44e07a0866 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -211,10 +211,13 @@ OC.L10N.register(
"Admin documentation" : "Admin-dokumentasjon",
"Show description …" : "Vis beskrivelse …",
"Hide description …" : "Skjul beskrivelse …",
+ "This app has no minimum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Denne appen har ingen minimumsversjon av ownCloud. Dette vil være en feil i ownCloud 11 og senere.",
+ "This app has no maximum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Denne appen har ingen maksimumsversjon av ownCloud. Dette vil være en feil i ownCloud 11 og senere.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
"Uninstall App" : "Avinstaller app",
"Enable experimental apps" : "Aktiver eksperimentelle apper",
+ "SSL Root Certificates" : "SSL rotsertifikater",
"Common Name" : "Vanlig navn",
"Valid until" : "Gyldig til",
"Issued By" : "Utstedt av",
@@ -228,15 +231,20 @@ OC.L10N.register(
"Forum" : "Forum",
"Issue tracker" : "Problemsporing",
"Commercial support" : "Forretningsstøtte",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker<strong>%s</strong> av <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
+ "Select from Files" : "Velg fra Filer",
"Remove image" : "Fjern bilde",
+ "png or jpg, max. 20 MB" : "png eller jpg, maks. 20 MB",
+ "Picture provided by original account" : "Bilde kommer fra opprinnelig konto",
"Cancel" : "Avbryt",
+ "Choose as profile picture" : "Velg som profilbilde",
"Full name" : "Fullt navn",
"No display name set" : "Visningsnavn ikke satt",
"Email" : "Epost",
"Your email address" : "Din e-postadresse",
+ "For password recovery and notifications" : "For passord-gjenoppretting og varsler",
"No email address set" : "E-postadresse ikke satt",
"You are member of the following groups:" : "Du er medlem av følgende grupper:",
"Password" : "Passord",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index af421488468..0fa8871822c 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -209,10 +209,13 @@
"Admin documentation" : "Admin-dokumentasjon",
"Show description …" : "Vis beskrivelse …",
"Hide description …" : "Skjul beskrivelse …",
+ "This app has no minimum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Denne appen har ingen minimumsversjon av ownCloud. Dette vil være en feil i ownCloud 11 og senere.",
+ "This app has no maximum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Denne appen har ingen maksimumsversjon av ownCloud. Dette vil være en feil i ownCloud 11 og senere.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
"Uninstall App" : "Avinstaller app",
"Enable experimental apps" : "Aktiver eksperimentelle apper",
+ "SSL Root Certificates" : "SSL rotsertifikater",
"Common Name" : "Vanlig navn",
"Valid until" : "Gyldig til",
"Issued By" : "Utstedt av",
@@ -226,15 +229,20 @@
"Forum" : "Forum",
"Issue tracker" : "Problemsporing",
"Commercial support" : "Forretningsstøtte",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker<strong>%s</strong> av <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
+ "Select from Files" : "Velg fra Filer",
"Remove image" : "Fjern bilde",
+ "png or jpg, max. 20 MB" : "png eller jpg, maks. 20 MB",
+ "Picture provided by original account" : "Bilde kommer fra opprinnelig konto",
"Cancel" : "Avbryt",
+ "Choose as profile picture" : "Velg som profilbilde",
"Full name" : "Fullt navn",
"No display name set" : "Visningsnavn ikke satt",
"Email" : "Epost",
"Your email address" : "Din e-postadresse",
+ "For password recovery and notifications" : "For passord-gjenoppretting og varsler",
"No email address set" : "E-postadresse ikke satt",
"You are member of the following groups:" : "Du er medlem av følgende grupper:",
"Password" : "Passord",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index 434fc6b2b38..0efd8d029db 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -217,6 +217,7 @@ OC.L10N.register(
"Enable only for specific groups" : "Alleen voor bepaalde groepen activeren",
"Uninstall App" : "De-installeren app",
"Enable experimental apps" : "Inschakelen experimentele apps",
+ "SSL Root Certificates" : "SSL Root Certificaten",
"Common Name" : "Common Name",
"Valid until" : "Geldig tot",
"Issued By" : "Uitgegeven door",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index 50c68d9fdc5..80783b92962 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -215,6 +215,7 @@
"Enable only for specific groups" : "Alleen voor bepaalde groepen activeren",
"Uninstall App" : "De-installeren app",
"Enable experimental apps" : "Inschakelen experimentele apps",
+ "SSL Root Certificates" : "SSL Root Certificaten",
"Common Name" : "Common Name",
"Valid until" : "Geldig tot",
"Issued By" : "Uitgegeven door",
diff --git a/tests/lib/backgroundjob/job.php b/tests/lib/backgroundjob/job.php
index 912e0e13b57..12413e2c52a 100644
--- a/tests/lib/backgroundjob/job.php
+++ b/tests/lib/backgroundjob/job.php
@@ -18,8 +18,9 @@ class Job extends \Test\TestCase {
public function testRemoveAfterException() {
$jobList = new DummyJobList();
- $job = new TestJob($this, function () {
- throw new \Exception();
+ $e = new \Exception();
+ $job = new TestJob($this, function () use ($e) {
+ throw $e;
});
$jobList->add($job);
@@ -27,8 +28,8 @@ class Job extends \Test\TestCase {
->disableOriginalConstructor()
->getMock();
$logger->expects($this->once())
- ->method('error')
- ->with('Error while running background job: ');
+ ->method('logException')
+ ->with($e);
$this->assertCount(1, $jobList->getAll());
$job->execute($jobList, $logger);
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index 0880e7e1282..92b784bf8ea 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -87,7 +87,9 @@ class FileCache extends \Test_Cache {
}
protected function tearDown() {
- $this->instance->remove('hack', 'hack');
+ if ($this->instance) {
+ $this->instance->remove('hack', 'hack');
+ }
\OC_User::setUserId($this->user);
\OC::$server->getConfig()->setSystemValue('cachedirectory', $this->datadir);